Repository navigation
feat(mobile): a meeting recording survives calls, silenced capture, low space and a deleted note - #1743
Merged
github-actions[bot] merged 1 commit intoNov 10, 2026
Conversation
…ow space and a deleted note - A phone call (AudioManager mode, no new permission) pauses the recording with "Paused: a phone call has the microphone." and only Resume starts it again. - A capture another app silences shows a notice (AudioRecordingCallback, API 29+); below that, ten seconds at a flat level shows a hint. - A start needs about twice a part free; the recording stops cleanly at 200 MB free and says why. - A note deleted elsewhere while recording keeps recording; Stop saves to a new note "Recording · <date>". - A refused microphone reads the same as dictation on each host. Plan +meeting-recording, entry 5 (4e8927db-2e77-451f-8ba7-81fe87edca40). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
JSdotNet
marked this pull request as ready for review
November 10, 2026 23:51
This was referenced Nov 11, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
A meeting recording on a phone note now survives what Android does to it (plan
+meeting-recording, entry 5 —4e8927db-2e77-451f-8ba7-81fe87edca40).AudioManagermode (MODE_IN_CALL, call screening/redirect; listener on API 31+, polled on the level tick below; no new permission) pauses the recording once and shows "Paused: a phone call has the microphone." The bar and the notification offer Resume; the call ending never resumes it.MediaRecorder.RegisterAudioRecordingCallback/isClientSilenced(API 29+) shows "Another app has the microphone. Nothing is being recorded." Below 29, ten seconds at level 0 shows "No sound is reaching the recording…" (FlatLevelDetector, skipped when the recorder cannot measure a level).RecordingSpace+IFreeSpace(StatFson Android,DriveInfoelsewhere): a start needs 248 MiB (200 + 2 × one 24 MiB part); a running recording is stopped at ≤ 200 MiB (checked every 10 s), attached, and the bar says why.RecordingAttachments→NoteViewProjection.CreateAsync), and the old note's page says where it went.MicrophoneAccess.DeniedInBrowser,AndroidMicrophoneAccess.Denied).Shared UI:
RecordingBargains aNoticedrawn as anAlert; storybook stories "Paused by a phone call" and "Silenced by another app".RecordingServiceredraws its notification when the notice changes.Acceptance criteria and how each was verified
NoteRecordingSessionTests(pause once, off the raising thread; stays paused after the call; Resume during a call; stale queued pause skipped in both orders),NoteRecordingScreenTests; storybook story in the browser (pass). Android detection built, not run on a device.FlatLevelDetectorTests; storybook story (pass). The API 29 callback is built, not run on a device.RecordingSpaceTests, session tests (refusal, stop, stop with a part kept, stop after the note was deleted).RecordingAttachmentsTests(cap counted against the new note), screen test for the moved notice. Browser scenario not run (see below).WebMeetingRecorderTests; browser: Record and Dictate showed the identical sentence (pass).Build & Test
dotnet build Backlog.WithoutAppHeads.slnf -c Release -p:TreatWarningsAsErrors=true: 0 warnings, 0 errors.-warnaserrorwith CI's packaging overrides: 0 warnings, 0 errors.dotnet test --solution Backlog.WithoutAppHeads.slnf -c Release: 23245 total, 23226 passed, 0 failed, 19 skipped.Review findings left open
None. Two review rounds: 1 bug fixed (a space-stop sentence hid attach failures), 6 advisories fixed (cap counted against the deleted note, false flat hint without
AudioContext, stale queued call pause, missing pause/thread tests, storybook wording pointer, an exception dropped during a space stop), plus dictation's web sentence moved onto the shared constant.What could not be proved
StatFs, the 200 MB stop. All are unit-tested at their seams only.MediaRecordererror before the mode poll sees it stops and attaches instead of pausing.capture/features.md#meeting-recording,06-runtime-view.md#meeting-recording, ADR 0048's "No code is built yet" andtech/mobile.mdcode-ahead, plus eight behaviours no requirement states yet. They need a flow-spec change.notes/recordings/; the sync service still refuses audio types (entry 4).Assumptions
MODE_IN_COMMUNICATION) is not "a phone call"; it is caught as silenced capture.LastFailure.NoteRecordingBar(on the deleted note's page); no auto-navigation; the new note carries the title only.Opened by an unattended
execute-planrun; Personal Validation is pending — validate on this draft.🤖 Generated with Claude Code