Skip to content

feat(mobile): keep voice recording active across apps and threads - #10140

Open
bentsignal wants to merge 4 commits into
pingdotgg:mainfrom
bentsignal:fix/mobile-voice-dismiss-cleanup
Open

feat(mobile): keep voice recording active across apps and threads#10140
bentsignal wants to merge 4 commits into
pingdotgg:mainfrom
bentsignal:fix/mobile-voice-dismiss-cleanup

Conversation

@bentsignal

@bentsignal bentsignal commented Sep 5, 2026

Copy link
Copy Markdown

Switching threads mid-recording currently stops voice input and can leave it stuck saying another recording is active. You have to fully close and reopen the app to record again.

With this change, you can keep talking while you check another thread or switch to another app. When you return, the original recording is still going, and finishing it adds the transcript to that draft. Starting a second recording is blocked while the first is active.

I realize keeping recordings going when switching apps is a broader change. I'm happy to split out a smaller PR that just fixes voice input getting stuck after switching threads and requiring an app restart. I expanded it because I often start dictating, then check another app or thread and keep talking as I review things. Being able to come back and finish the same recording is useful for that.

Before

before.mp4

After

after.mp4

Implemented with GPT-6 in the Codex harness.

Note

Keep voice recording active across threads and app switching via app-scoped VoiceInputProvider

  • Introduces VoiceInputSession, an app-scoped recording owner that retains the originating draft key, text, and selection independently of whether the composer is mounted. A single recording runs at a time; other drafts cannot start, stop, or cancel it.
  • Wraps the navigation tree in VoiceInputProvider so the recorder and session survive route changes. useVoiceInputController now observes the shared session via useSyncExternalStore instead of creating per-composer recorders.
  • Adds the iOS audio background mode in app.config.ts and configures non-mixing interruption behavior so recording continues on iOS backgrounding. Android backgrounding interrupts active recording.
  • Completed transcripts commit through the shared composer draft store; the cursor is delivered once to the original owner. Edits to the captured draft invalidate a pending cursor, including edits that restore the original text.
  • Fixes VoiceInputController cleanup to tolerate an already-destroyed native recorder and explicitly deactivate the audio session even when mode cleanup throws.
  • Risk: VoiceInputController.appMovedToBackground no longer interrupts an active recording; preparation is still cancelled. iOS builds now declare the audio background capability, which may require App Store review attention.

Macroscope summarized d1a6712.

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Sep 5, 2026
Comment thread apps/mobile/src/features/voice-input/VoiceInputProvider.tsx Outdated
Comment thread apps/mobile/src/features/voice-input/useVoiceInputController.ts Outdated
@macroscopeapp

macroscopeapp Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR adds app-scoped voice recording across threads and backgrounded apps, changing default recording lifecycle, draft mutation, and native audio entitlements. The cross-cutting platform behavior and unresolved lifecycle/configuration findings warrant human validation.

Not approved because:

  • 2 blocking correctness issues found at or above your repo's Minimum Blocking Severity

Adjust the Minimum Blocking Severity for this repo — including turning it Off — in Settings. You can add or adjust custom eligibility rules. Learn more.

@bentsignal bentsignal changed the title fix(mobile): keep voice recording active across apps and threads feat(mobile): keep voice recording active across apps and threads Sep 5, 2026
@cursor

cursor Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant