Repository navigation
feat(mobile): share into Buzz from the iOS share sheet - #9433
Conversation
Adds an iOS share extension that hands shared photos, videos, URLs and text to the app, which prefills the chosen conversation's composer. Conversations a person sends top-level messages in are donated as share-sheet suggestions; the plain Buzz icon opens a new Solo chat. The notification extension stops donating incoming interactions. Signed-off-by: Tom Brow <[email protected]>
|
@codex review |
Codex Review Summary: ✅ CompletedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3162c414fe
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
A share whose files can't be copied still adds its text to the composer and shows an error for the files. A suggestion donation that completes after an age restriction took effect requests the age gate's durable interaction cleanup. Signed-off-by: Tom Brow <[email protected]>
The send paths read the active community before awaiting the send, so a send that finishes after navigation no longer reads a disposed ref. Notifications keep grouping under the hashed conversation key they were already delivered with; only the intent's conversation identifier carries the plain IDs. The share delivery test waits on the pending share's deletion instead of fixed sleeps. Signed-off-by: Tom Brow <[email protected]>
A share whose files can't be copied and that has no text now shows the file error without offering Add or Replace, so Replace can no longer clear an existing draft and add nothing. Signed-off-by: Tom Brow <[email protected]>
A share to a conversation whose page is already open now returns to that page instead of pushing a second one, so one composer owns the draft and its attachments. It walks out through nested navigators such as Home's conversation pane, pops covering pages the way Back would, and stops at a page that refuses to close; the share still goes to the open composer. Signed-off-by: Tom Brow <[email protected]>
…sation Returning to an open conversation by popping the pages over it could discard another page's unsent draft or work. A share to a conversation that is already open now never closes anything: its composer takes the share once it is on screen, and when another page covers it, a toast says to go back to that conversation to finish sharing. Signed-off-by: Tom Brow <[email protected]>
A second share for a conversation that hadn't taken the first one yet replaced it and deleted its items. Shares now wait in order, and the composer offers each in turn. Signed-off-by: Tom Brow <[email protected]>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 36b6aa0b59
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
The share extension counts items it couldn't load or copy in the manifest, and the composer reports them alongside whatever did arrive. Signed-off-by: Tom Brow <[email protected]>
kazemek21
left a comment
There was a problem hiding this comment.
Kyle reviewed the PR and the Nexus review-tracker notes.
Posted by Codex (gpt-6.1-sol) on behalf of kylez
| .read(composerShareInboxProvider.notifier) | ||
| .deliver(composeDraftKey(newSoloComposerKey), share); | ||
| // Completes only when the chat closes; later links needn't wait. | ||
| unawaited(openNewSoloChat(context, ref)); |
There was a problem hiding this comment.
[P2] Keep one owner for the open Solo draft
When a New chat composer already contains a caption and photo, another plain-icon share pushes a second composer with the same new-solo key. The new page restores the caption but not the photo, because attachments remain owned by the covered composer. Could this reuse the existing draft route, or allocate a separate draft key when starting an independent chat?
Posted by Codex (gpt-6.1-sol) on behalf of kylez
Co-authored-by: mboston.Engineer <932d3b6ebea6cc83e091551ae46d1c7e7f8f7d0fa8e9cef5e6facc8544af413b@buzz.block.builderlab.xyz> * origin/main: fix(mobile): require Builderlab consent for existing identities (#8823) feat(mobile): use HTTP/2 on iOS through app-wide URLSessions (#8897) fix(relay): publish a git push only when refs changed; check the protocol by refinement (#9425) fix(mobile): show shared chats under Solo (#9348) chore(release): release Buzz Desktop version 0.5.29 (#9456) feat(mobile): render messages with gpt_markdown 1.3.4 plusparse (#8945) fix(acp): bound observer retention by bytes (#7987) (#9436) Tune release codegen for faster/smaller binaries (#9434) feat(desktop): add dismissible banner pointing to the new buzz app (#9379) fix(mobile): keep publishing presence while the app is open (#9441) feat(mobile): share into Buzz from the iOS share sheet (#9433) fix(mobile): qualify every namesake mention and keep authored mention casing (#9325) fix(mobile): match browser GIF timing in the iOS reaction sheet (#9437) fix(mobile): play short-delay animation frames at browser speed (#9432) buzz-search: read profile names without the profile_name_fields function (#9397) buzz-db: build the community deletion lock key in Rust (#9396) fix(cli): pair for the active community, skip stopped desktops, accept a bare relay host (#9417) test(mobile): run push tests without a gateway dart-define (#9423) fix(mobile): never pop Home when archiving from channel settings (#9387) perf(acp): reduce observer CPU and lock overhead (#9381) Signed-off-by: Matthew Boston <[email protected]>
…count-backfill Co-authored-by: mboston.Engineer <932d3b6ebea6cc83e091551ae46d1c7e7f8f7d0fa8e9cef5e6facc8544af413b@buzz.block.builderlab.xyz> * bostonaholic--agent-reply-count: fix(mobile): require Builderlab consent for existing identities (#8823) feat(mobile): use HTTP/2 on iOS through app-wide URLSessions (#8897) fix(relay): publish a git push only when refs changed; check the protocol by refinement (#9425) fix(mobile): show shared chats under Solo (#9348) chore(release): release Buzz Desktop version 0.5.29 (#9456) feat(mobile): render messages with gpt_markdown 1.3.4 plusparse (#8945) fix(acp): bound observer retention by bytes (#7987) (#9436) Tune release codegen for faster/smaller binaries (#9434) feat(desktop): add dismissible banner pointing to the new buzz app (#9379) fix(mobile): keep publishing presence while the app is open (#9441) feat(mobile): share into Buzz from the iOS share sheet (#9433) fix(mobile): qualify every namesake mention and keep authored mention casing (#9325) fix(mobile): match browser GIF timing in the iOS reaction sheet (#9437) fix(mobile): play short-delay animation frames at browser speed (#9432) buzz-search: read profile names without the profile_name_fields function (#9397) buzz-db: build the community deletion lock key in Rust (#9396) fix(cli): pair for the active community, skip stopped desktops, accept a bare relay host (#9417) test(mobile): run push tests without a gateway dart-define (#9423) fix(mobile): never pop Home when archiving from channel settings (#9387) perf(acp): reduce observer CPU and lock overhead (#9381) Signed-off-by: Matthew Boston <[email protected]>
…igned (#9489) iOS release builds of main fail at export with "No profiles for `xyz.block.buzz.dogfood.mobile.ShareExtension` were found" ([buzz-mobile-releases build 62](https://buildkite.com/cash/buzz-mobile-releases/builds/62)). [#9433 iOS share sheet](#9433) added a ShareExtension target, and the release signing setup has no app ID or provisioning profile for it yet. This unhooks the ShareExtension target from the Xcode project (target, embed step and build settings) so the app builds and signs as it did before #9433. Nothing else changes: - The extension's sources stay in `mobile/ios/ShareExtension/`, so restoring it once the profiles exist is a revert of this commit. - The app's share hand-off code and outgoing share suggestions stay. Without the extension, Buzz just doesn't appear in the share sheet, as before #9433, and the hand-off never runs. ### Regressions - Sharing into Buzz from the iOS share sheet goes away until the profiles are registered. That's the point of this PR. - The app still donates `INSendMessageIntent` after a send. iOS only shows those as share suggestions for an app whose share extension declares the intent, so they stay invisible until the extension returns. ### Validation - iOS simulator debug build of the app succeeds with the target removed. - No other target referenced ShareExtension (it had no target dependencies). - Automated full-app run skipped: this only removes a build target, and the app code is unchanged. Signed-off-by: Tom Brow <[email protected]> Co-authored-by: Tom Brow <[email protected]>
Lets people share screenshots, screen recordings, photos, URLs and text from any iOS app into Buzz. Today Buzz doesn't appear in the share sheet at all.
Suggestions come from an outgoing
INSendMessageIntentthe app donates after a top-level send or a new Solo chat. The notification extension no longer donates incoming messages, so receiving a message never makes a conversation a suggestion; it still turns the push into a communication notification with the sender's avatar. Both use the same conversation identifier, now the plain community and channel IDs instead of a hash, because the extension needs to hand the identifier back to the app.share-demo.mp4
Regressions
INInteraction.donatecall (skipped while the age restriction is on, which still purges every interaction).Validation
coreduetd), so the suggested-DM step in the video is staged by writing the same pending share and link the extension writes. Choosing a real suggestion still needs a check on a device.Before merge