Commit Graph
11 Commits
Author SHA1 Message Date
evgeny 48564e8ab3 Respect microphone permission callback ownership and test settings disposal 2026-10-29 13:35:19 +01:00
evgeny d0d63c1d4b Keep voice cleanup independent of caller cancellation and stop playback promptly 2026-10-29 13:35:19 +01:00
evgeny 48a20cda8c Reject new capture while an IO teardown holds its lifecycle lock 2026-10-29 13:35:19 +01:00
evgeny c7356d2a5b Wait for asynchronous voice cleanup acknowledgement in lifecycle regression test 2026-10-29 13:35:19 +01:00
evgeny 41ea2afaaa Verify explicit native cancellation failure and document independent audio ownership 2026-10-29 13:35:19 +01:00
evgeny b25766ae5a Test retained voice resources, decoder failures and nonblocking disposal 2026-10-29 13:35:19 +01:00
evgeny c0c282ca3a Make voice recording ownership and playback failures explicit 2026-10-28 11:36:13 +01:00
evgeny 0219624c7d Reproduce voice capture rollback and playback cleanup failures 2026-10-28 11:36:13 +01:00
evgeny 537814e7fd Model microphone permission for voice recorder host tests 2026-10-28 11:36:13 +01:00
evgeny c31bdf74d8 Add host audio output controls for voice recorder failures 2026-10-28 11:36:13 +01:00
evgeny 005d136dc7 Make Android microphone capture stoppable and cleanup resilient
Use nonblocking AudioRecord reads with data and timestamp deadlines. Serialize idempotent close, finish interrupted joins before release, isolate callback failures, and abort stereo fallback when partial-record cleanup fails.

Close failed shared readers to new subscriptions, roll back worker startup, isolate observers, preserve interrupt state, and release the last consumer exactly once. Add an independent capture-tests JVM module to the standard Android unit-test task.

Validation: 38 capture scenarios (25 AudioRecord plus 13 PCM/PTT), 455 JVM tests, assembleDebug, core build, and full check.sh (225 tests plus proxy/burst/load) passed.
2026-10-28 00:53:01 +01:00