Android: the queue's scrim has no reachable pixels, so tap-outside-to-close does not exist #171
Closed
opened 2026-08-21 02:16:47 +00:00 by logan
·
2 comments
No Branch/Tag Specified
main
fix/146-stub-etxtbsy
fix/175-wizard-follows-the-library
fix/231-setter-rollback
fix/197-duplicate-column-label
docs/225-fixtures-wav-tags
docs/220-skill-check-scope
test/217-fixture-names-in-queue-selection
fix/216-riff-parse-allocation
fix/170-queue-header-action-names
fix/210-nav-sheet-scroll-affordance
docs/50-readme-landing-page
feat/65-art-prefetch-ahead
feat/71-more-as-a-bottom-sheet
feat/54-native-touch-feel
feat/67-entity-links-into-menus
test/196-visual-tier-gates
fix/138-ui-test-storage-leak
fix/104-wav-tags-read
fix/207-sheet-scroll-affordance
fix/204-ui-visual-update-filter
pi-agent-backlog-automation
63-touch-model-phase-2
63-android-touch-model
186-touch-targets-settings
186-touch-targets-page-header
187-seek-bar-hit-area
189-190-explore-correctness
135-android-underrun-instrumentation
51-android-small-screens
fix/171-phone-queue-scrim
fix/137-touch-only-affordances
fix/154-nested-css-check
feat/58-mini-player-progress-line
fix/66-album-page-scrolls-as-one
60-context-menu-action-sheet
64-android-system-volume
59-slim-the-mini-player
55-queue-as-a-screen
feat/57-drop-the-android-top-bar
feat/62-jobs-as-a-notification
fix/53-seek-bar-never-moves
fix/159-android-task-app-id
fix/52-android-activity-recreation-restarts-the-process
fix/150-expand-button-under-the-art
feat/42-inline-volume-and-centred-transport
fix/156-queue-selection-fixture-order
fix/151-fuse-the-scroll-guard-and-the-write
fix/43-queue-panel-selection
fix/143-top-bar-fits-its-window
feat/27-jobs-into-settings
feat/25-configurable-sidebar-tabs
feat/6-global-back-forward
fix/72-active-view-broadcast
fix/69-page-header-action-overflow
fix/quick-wins-batch
fix/118-in-library-clear
fix/61-mini-player-plain-text
fix/68-hover-affordances-pointer
fix/119-dev-headless-port
fix/130-issue-claim-user
fix/131-codegen-check-scope
feat/28-autotag-match-on-album
feat/17-demote-version-selector
feat/38-ownership-visibility
ci/115-manual-release
feat/34-icon-language
feat/7-full-tracklist-toggle
fix/16-tagwriter-totals
fix/unclaim-ca-certs
fix/unclaim-shell
ci/unclaim-on-close
docs/closing-keyword
docs/retire-stale-planning-docs
docs/issue-driven-workflow
integration/small-fixes
fix/small-issue-batch
fix/queue-toggle-state
fix/drag-count-badge
fix/album-card-year
fix/album-tracklist-heading
fix/seek-bar-clock-width
fix/explore-art-scanner-requests
chore/workflow-guardrails
v0.7.0
v0.6.0
v0.5.0
v0.4.0
v0.3.1
v0.3.0
v0.2.3
v0.2.2
v0.2.1
v0.2.0
v0.1.0
v0.0.1
v0.0.0
Labels
Clear labels
Area/Design
Area/Downloads
Area/Explore
Area/Library-UI
Area/Metadata
Area/Packaging
Area/Player
Area/Queue
Area/Settings
Area/Shell-Nav
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Platform/Android
Platform/Desktop
Breaking change that won't be backward compatible
Something is not working
Documentation changes
Improve existing functionality
New functionality
This is security issue
Issue or pull request related to testing
Priority
Critical
1
The priority is critical
Priority
High
2
The priority is high
Priority
Medium
3
The priority is medium
Priority
Low
4
The priority is low
Reviewed
Confirmed
1
Issue has been confirmed
Reviewed
Duplicate
2
This issue or pull request already exists
Reviewed
Invalid
3
Invalid issue
Reviewed
Won't Fix
3
This issue won't be fixed
Status
Blocked
1
Something is blocking this issue or pull request
Status
Need More Info
2
Feedback is required to reproduce issue or to continue work
Status
Abandoned
3
Somebody has started to work on this but abandoned work
Status
In Progress
Somebody is actively working on this right now
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: yonlu/yellowjacket#171
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Report
queue-panel's scrim has zero reachable pixels below 600px, so#24's "click outside to close" affordance does not exist on a phone.
Measured on the running app at 424x439 with the queue open:
queue-panelhost.panel-content.scrim.panel-contentFindings
the content area and draws the scrim across all of it; the phone rule
:host([overlay]) .panel-content { width: 100% }then covers thescrim completely. Both are correct on their own and were added in the
same change.
is 320px of a wider content area, so this is not "delete the scrim".
queue-overlay.spec.tsasserts the scrim closes the panel at900x600 only, which is the band where it is reachable — so the suite
is honest and simply does not cover the phone. A phone-width case
added naively would click the scrim's centre and hit the panel.
now, and the close button is 44x44. So the routes out are fine; what
is missing is the affordance #24 argued for, which is that an overlay
should read as something you dismiss by tapping past it.
Direction
Either give the phone's panel a gutter — the platform pattern, and it is
what makes "tap past it" possible at all — or state that below 600px the
scrim is a dimming layer with no dismissal role and stop drawing it as a
button there. The first is a design decision about a full-screen surface
that #59 also touches; the second is honest and free. Decide which
before writing the spec, because the spec is different in each case.
Picking this up on branch
fix/171-phone-queue-scrim.Taking the second of the two directions, not the gutter.
Below 600px the queue is a screen: #55 made it a place with a history
entry, back closes it, and the close button is 44x44. A gutter is the
drawer pattern, and it would trade width off a full-screen surface on a
424px viewport to buy an affordance the screen model does not ask for.
So the scrim is simply not drawn at phone width — it dims nothing there
(measured entirely underneath an opaque
.panel-content) and dismissesnothing, so drawing it as a
cursor: pointerclick target is a claim thecomponent cannot keep. Existence from
matchMediarather than a mediaquery, on
job-band/search-trigger's rule: a stylesheet does not get todecide whether an element exists. The 600-899px band, where the scrim has
real uncovered pixels, is untouched.
Fixed by PR #182 (
fix/171-phone-queue-scrim) — CI green, chromiumand webkit.
Took the issue's second direction: below 600px the scrim is not drawn at
all, rather than drawn as a dismissal target with no reachable pixels.
The gutter was declined and the reason is written into
CLAUDE.md— itbuys "tap past it" by taking width off a full-screen surface on a 424px
viewport, and #55 already made this a screen whose ways out are back
and a 44x44 close button.
Existence is
matchMedia, notdisplay: none(job-band's rule: ahidden scrim is still an element carrying the handler). The 600-899 band
is untouched and still closes on the scrim — verified at 700x600: host
644x472, panel 320x472, scrim 644x472.
The new e2e case asserts absence at 424x439 rather than clicking,
which is the trap this issue named: a naive phone-width case clicks the
scrim's centre, hits the panel, and passes on the broken build. Both new
tests were watched failing on the pre-fix build.
Not merged — leaving that and
Status/In Progressfor a human.