Commit Graph
638 Commits
Author SHA1 Message Date
evgeny a53668ade8 Show captured JPEG file size and enlarge camera metadata text 2026-10-28 12:08:07 +01:00
evgeny 07c9cf223c Hide camera discard and send actions until there is captured media 2026-10-28 12:08:07 +01:00
evgeny f351f289af Center camera actions and replace inactive shutter with a half-width gap 2026-10-28 12:08:07 +01:00
evgeny 22c8f9a69c Place compact photo and video details beside camera controls 2026-10-28 12:08:07 +01:00
evgeny c7b301b3a1 Document updated Android build stack and keep capture diagnostics compact 2026-10-28 12:08:07 +01:00
evgeny 03059e3001 Choose recording codec, resolution and bitrate independently and set JPEG quality 2026-10-28 12:08:07 +01:00
evgeny afa6af5012 Share compact bitrate labels between streaming and recording controls 2026-10-28 12:08:06 +01:00
evgeny b84561dba5 Use shared capture icons and menus for camera and resolution selection 2026-10-28 12:08:06 +01:00
evgeny 379e7731df Align Android camera timer to the right of the control panel 2026-10-28 12:08:06 +01:00
evgeny 4aa5513f25 Keep Android camera settings and controls outside the preview 2026-10-28 12:08:06 +01:00
evgeny c84c328c90 Align camera navigation and developer references with shared capture screen 2026-10-28 12:08:06 +01:00
evgeny 4f5e46e9a9 Keep cache sources alive while accepted legacy image copies are pending 2026-10-28 12:08:06 +01:00
evgeny 154c76068c Check encrypted image dimensions across the Android bridge 2026-10-28 12:08:06 +01:00
evgeny 3c74fc89fe Handle camera cache failures and remove unused photo submission wrapper 2026-10-28 12:08:06 +01:00
evgeny 04d9d1f2b9 Connect shared camera and photo viewer to Android channel and PM navigation 2026-10-28 12:08:06 +01:00
evgeny 6e30fd474e Unify Android photo and video capture with explicit cache ownership 2026-10-28 12:08:06 +01:00
evgeny 8ff6694c5a Show bounded image previews and open zoomable photos in Android private chats 2026-10-28 12:08:06 +01:00
evgeny d1bb143928 Add localized image and camera error states 2026-10-28 12:08:06 +01:00
evgeny 4228f37cf5 Recognize image contents and preserve image dimensions in Android conversations 2026-10-28 12:08:06 +01:00
evgeny 233a3f78d1 Pass image MIME and private conversation generation through Android JNI 2026-10-28 12:08:06 +01:00
evgeny 78ea57d183 Clarify conversation rendering and preserve quote Unicode 2026-10-28 11:36:13 +01:00
evgeny 0b285ec19b Move the logs shortcut beside the CPU indicator 2026-10-28 11:36:13 +01:00
evgeny 8b3b6fb5af Reject malformed feedback events before updating UI state 2026-10-28 11:36:13 +01:00
evgeny 317f362a7a Reproduce malformed feedback event handling in the UI 2026-10-28 11:36:13 +01:00
evgeny a1ce486e89 Document feedback snapshots and poll UI submission contracts 2026-10-28 11:36:13 +01:00
evgeny 37515df8c1 Validate poll drafts and reject malformed feedback snapshots 2026-10-28 11:36:13 +01:00
evgeny 89efd10450 Reproduce invalid poll draft and inactive custom answer handling 2026-10-28 11:36:13 +01:00
evgeny f6b5e5b42c Route group avatar snapshots separately from feedback changes 2026-10-28 11:36:13 +01:00
evgeny d969b277e1 Assign a registered event ID to Android group avatar snapshots 2026-10-28 11:36:13 +01:00
evgeny e91987d241 Reproduce Android avatar and feedback event ID collision 2026-10-28 11:36:13 +01:00
evgeny 69bc182ee9 Clarify capture timeline and microphone permission contracts 2026-10-28 11:36:13 +01:00
evgeny c0c282ca3a Make voice recording ownership and playback failures explicit 2026-10-28 11:36:13 +01:00
evgeny 5db51e64de Retry file resource cleanup when the core stops 2026-10-28 11:36:13 +01:00
evgeny a8c9bc6049 Document file browser lifecycle and export error handling 2026-10-28 11:36:13 +01:00
evgeny 0aa63c98ee Document Android file framing and error status contracts 2026-10-28 11:36:13 +01:00
evgeny 5290a2868d Preserve file wake lock ownership and isolate cleanup errors 2026-10-28 11:36:13 +01:00
evgeny 84e4667f5c Describe avatar gallery and EXIF decoding behavior 2026-10-28 11:36:13 +01:00
evgeny 81f36d15c8 Clarify avatar editor ownership and UI publication state 2026-10-28 11:36:13 +01:00
evgeny 977992e834 Document Android avatar storage and publication contracts 2026-10-28 11:36:13 +01:00
evgeny 6f8baf82c7 Clarify Android playback recovery and diagnostics contracts 2026-10-28 11:36:13 +01:00
evgeny 00f8d8aeb0 Document Android call audio I/O and clock contracts 2026-10-28 11:36:13 +01:00
evgeny bc296af99f Test server link presentation and authorization errors in clients 2026-10-28 11:07:58 +01:00
evgeny 3daacc07b7 Select any joined channel when opening an Android server link 2026-10-28 11:06:24 +01:00
evgeny f2d6561509 Route Android server links through channel selection and ordinary JOIN request 2026-10-28 11:05:23 +01:00
evgeny 1ad00c12ad Fix attachment sending, media manifests and storage defaults 2026-10-28 01:47:17 +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
evgeny 74035fc043 Recover Android media audio sessions with explicit resource ownership
Retry monitor and capture setup after invalidating failed attempts. Bind output leases and callbacks to registration identity, cancel confirmation timers, and keep hardware cleanup independent from device enumeration during call handoff.

Commit profiles only after successful storage writes, acquire mode ownership before Android side effects, and reject blocking operations on main or the control worker. Keep the app singleton backed by an isolated MediaAudioSession with a single executor.

Validation: 30 media session scenarios, 420 JVM tests, assembleDebug, core build, and full check.sh (225 tests plus proxy/burst/load) passed.
2026-10-28 00:28:42 +01:00
evgeny a6ae4df3ff Harden Android audio router lifecycle and route selection
Roll back failed startup, finish independent stop cleanup, invalidate stale device and Telecom callbacks, and serialize router mutations. Publish input/output targets after accepted selection and support retries of rejected requests.

Separate modern communication device selection from legacy SCO, refresh replaced descriptors, and support A2DP and USB input-only devices in per-track mode. Clarify routing and observer ownership contracts.

Validation: 45 router scenarios, 390 JVM tests, assembleDebug, core build, and full check.sh (225 tests plus proxy/burst/load) passed. Previous router fails 25 of the 30 new cases.
2026-10-27 23:53:21 +01:00
evgeny 0d45bdbad6 Own Android incoming call alerts and notification actions
Bind notification tokens to full call IDs and call kinds, cancel actions on stop, and reject decline callbacks after ringing ends. Serialize alert state on main and recover notification channel setup after Android API failures.

Keep sound independent of wake-lock and notification failures. Remove orphaned notifications on cold start, preserve idempotent alerts during duplicate delivery and language changes, and document lifecycle contracts.

Validation: 32 new lifecycle cases, 360 JVM tests, assembleDebug, core build, and full check.sh (225 tests plus proxy/burst/load) passed.
2026-10-27 23:31:56 +01:00
evgeny 5a6eabf4fc Fix Android alert profiles and playback resource ownership
Configure audio attributes before MediaPlayer preparation, keep vibration independent from sound failures, and guard loop/focus cleanup against stale callbacks. Preserve ringback players on repeated phase requests.

Add 35 alert lifecycle tests against real Kotlin sources with controlled Android API failures. Validation: 328 JVM tests, assembleDebug, core build, and full check.sh (225 tests plus proxy/burst/load) passed. Previous sources fail 32 of the 35 new cases.
2026-10-27 23:12:11 +01:00