Improve TalkBack accessibility for app volume rows and stabilize compact list visibility#55
Improve TalkBack accessibility for app volume rows and stabilize compact list visibility#55Copilot wants to merge 4 commits into
Conversation
Agent-Logs-Url: https://github.com/yume-chan/VolumeManager/sessions/9d63c965-7ff7-43ad-9107-d3d35d9f1caa Co-authored-by: yume-chan <1330321+yume-chan@users.noreply.github.com>
yume-chan
left a comment
There was a problem hiding this comment.
I think the original reporter means when changing volume of one app, the whole list re-compose, and the accessibility focus jumps to the first list item, check whether this is an issue, and fix it if it is.
| if (activePlayers.isNotEmpty()) { | ||
| items(items = activePlayers, key = { app -> app.packageName }) { app -> | ||
| // Keep compact mode stable for accessibility by showing known players even when idle. | ||
| val compactPlayers = (activePlayers + inactivePlayers).sortedWith(App.comparator) |
There was a problem hiding this comment.
This is not how it's intended to work.
It makes sense to reduce jumping, but should be done by adding a hasBeenPlayingRecently to App class that sets to true along with isPlaying, but sets to false after a delay (like 10 seconds).
There was a problem hiding this comment.
Done in 50622a1. I replaced the compact-list change with App.hasBeenPlayingRecently, set true when playback is active and reset after a 10-second delay, and compact mode now filters on that state. Screenshot: unable to capture an Android UI screenshot in this headless environment.
Agent-Logs-Url: https://github.com/yume-chan/VolumeManager/sessions/af32b42c-1dcb-418c-bcb1-696fba8ad277 Co-authored-by: yume-chan <1330321+yume-chan@users.noreply.github.com>
Implemented in 50622a1. Compact mode now uses a 10s |
| for (app in apps) { | ||
| if (app.isPlayer) { | ||
| if (!app.hidden) { | ||
| if (app.isPlaying) { |
There was a problem hiding this comment.
Just check hasBeenPlayingRecently here. Do not filter apps list multiple times.
There was a problem hiding this comment.
Done in e99455a. I moved the hasBeenPlayingRecently check into the existing single pass and build compact players there, so compact mode no longer re-filters apps. Screenshot: unable to capture in this headless environment (browser instance is locked by another session).
Agent-Logs-Url: https://github.com/yume-chan/VolumeManager/sessions/1f4c8f13-65f8-4426-9e05-5f868bba319f Co-authored-by: yume-chan <1330321+yume-chan@users.noreply.github.com>
Blind/TalkBack users reported two blockers: the compact app list reorders/jumps as playback state changes (notably TTS), and volume controls are not exposed as focusable/adjustable slider controls. This update targets those behaviors with minimal Compose changes.
Compact list stability (reduce focus-jump churn)
hasBeenPlayingRecentlytoApp.truewhen playback is active (isPlaying = true) and decays back tofalseafter a short delay (10 seconds) once playback stops.AppVolumeList, compact mode (showAll = false) now shows apps based onhasBeenPlayingRecentlyinstead of all inactive players, preserving intended compact behavior while reducing rapid row disappearance that causes accessibility focus jumps.Expose custom slider as an accessible adjustable control
TrackSlidernow publishes slider/progress semantics viaprogressSemantics(...).Improve slider spoken context
AppVolumeSlidernow sets explicit semantics:contentDescription = app.namestateDescription = "<volume>%"