Android: the background-jobs popover is hidden behind other UI — make it a notification instead #62
Closed
opened 2026-08-18 05:59:09 +00:00 by logan
·
3 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.
Blocks
Reference: yonlu/yellowjacket#62
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
The background jobs popup at the top is obscured by other UI, so it cannot be read while jobs run. Since the top bar is going away, jobs should probably become a notification that disappears when the work finishes.
Findings
job-indicatorlives in the header (which the top-bar issue removes) and has its own live region whose label swings between "Scanning Music", "3 background jobs" and "Finished".store/notification-store.ts) with four levels, coalescing in the store, and the rule that the bottom band belongs to the player. A job notice is the Transient/Persistent shape, not a fifth pattern.job-controls.tsgates its "you will discard hours of downloading" confirmation onKindIndexBuild.Direction
Route active jobs through the notification surface on phone widths: a persistent entry while work runs, with progress and a cancel action, dismissed automatically on completion. Consider an actual Android system notification for long work (the foreground service already exists for playback — reusing it for scans needs its own argument). Sequence after the top-bar removal.
The Direction sentence contradicts this issue's own blocker.
It ends "Sequence after the top-bar removal", but #57 (drop the top
bar) carries a real Gitea dependency on #62, and #73's Phase 3
graph reads
#62 ──► #57. So anyone reading this issue alone will golooking for #57 first and find it blocked behind this one.
The dependency is almost certainly the right way round — the job
indicator needs somewhere to live before the bar holding it goes
away, which is the whole content of this issue — so it is the sentence
that should change, to something like "Sequence before the top-bar
removal; #57 depends on this."
Filed in passing while working #159; not changing it here, since the
wording is this issue's to own.
Taking this on
feat/62-jobs-as-a-notification. It is #73 Phase 3'sfirst item and #57 is blocked on it.
Measuring before designing. The report is that the popover "is obscured
by other UI", and the Direction proposes replacing it with a
notification — but those are answers to two different questions, and
which one is right depends on why it is obscured.
.top-barhas nooverflow: hiddenand noz-index, while.main-panelanddiv.sidebarboth carrycontain: layout style paint, which creates astacking context; that is a specific, checkable hypothesis and it is
cheaper to test than to reason about. So: reproduce it at 390px in the
browser tier first, then decide.
What I am committing to either way is that the job UI stays one UI.
applyJobControlis what carries the "you will discard hours ofdownloading" confirmation, keyed on
KindIndexBuild, and a surfacethat draws its own buttons drops that silently — #27 already established
that shape. So whatever the phone gets is the existing panel presented
differently, not a second implementation of it.
The system-notification half of the Direction is explicitly out of
scope here: the issue itself says it needs its own argument, and the
foreground service currently exists for playback only.
Correcting my own conclusion above, found while handing over.
I wrote that the "obscured" symptom "did not reproduce in any tier" and
that this was therefore not a stacking fix. The first half is true and
the second half was too strong: the tier could not have seen it.
wa-popuprenders<div popover="manual">and feature detects:Chromium and WebKit in CI both have the Popover API, so the panel is
promoted to the top layer and cannot be clipped by anything —
which is exactly what I measured, four times, and it says nothing
about the reference device. Chrome 113 has no Popover API and falls
back to
position: fixed, which escapes ancestor overflow but notcontain: paint, since that makes an element a containing block forfixed descendants and clips them.
For this component that fallback probably still lands correctly —
job-indicatoris in.top-barand no ancestor of the top bar hascontainment — so I still cannot say the report was this. But
.main-panelanddiv.sidebarboth carrycontain: layout style paint, and every context menu in the app is inside.main-panel,which is #60 (
Reviewed/Confirmed, same words: "behind other UI").Same library, same browser, two outcomes decided by which side of
contain: paintthe popup is on. I have written the detail up on #60.None of this changes what shipped: the band is the right home for
background work on a phone whether or not the popover was clipped, and
both reasons in the PR (a disclosure is wrong for status, and #57 needs
the bar emptied) stand on their own. But "did not reproduce" should be
read as "no tier here can reproduce it", which is a weaker statement
and the honest one.