Fix the music bar mobile now-playing screen not fitting landscape #25
3 changed files with 84 additions and 0 deletions
|
|
@ -403,6 +403,10 @@ Then put it behind your existing reverse proxy like everything else
|
||||||
falling back to its album's artwork — see docs/architecture.md
|
falling back to its album's artwork — see docs/architecture.md
|
||||||
(probably not the whole "images are hard to find" story — flagged
|
(probably not the whole "images are hard to find" story — flagged
|
||||||
there)
|
there)
|
||||||
|
- [x] Fixed the music bar's mobile now-playing screen not fitting a
|
||||||
|
phone rotated to landscape — the art now sits beside the title
|
||||||
|
instead of above it, sized off the viewport height instead of a
|
||||||
|
fixed width-based cap — see docs/architecture.md
|
||||||
- [ ] Try a full party end-to-end with two real accounts (still the main gap)
|
- [ ] Try a full party end-to-end with two real accounts (still the main gap)
|
||||||
- [ ] Try casting to a real Chromecast (only the SDK's own bootstrap is
|
- [ ] Try casting to a real Chromecast (only the SDK's own bootstrap is
|
||||||
confirmed here — no real device/session)
|
confirmed here — no real device/session)
|
||||||
|
|
|
||||||
|
|
@ -388,6 +388,41 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Rotated: the block above stacks the art on top of everything else and
|
||||||
|
sizes it off the viewport's WIDTH (60vw) - reported directly as
|
||||||
|
overflowing/needing to scroll once width and height swap roles in
|
||||||
|
landscape, where width is the one dimension this screen never lacks.
|
||||||
|
Same fixed-overlay itself, just laid out differently - the art moves
|
||||||
|
beside the title/artist instead of above them (freeing most of the
|
||||||
|
vertical stack this screen otherwise spends on it), and every size
|
||||||
|
below is capped by `vh`, the scarce dimension here, not `vw`. Button
|
||||||
|
sizes are deliberately left alone (56px .musicBarPlayBig, the same
|
||||||
|
above) - a touch target sizes to a finger, not the screen, in any
|
||||||
|
orientation. */
|
||||||
|
@media (max-width: 720px) and (orientation: landscape) {
|
||||||
|
.musicBarPanel {
|
||||||
|
padding-top: 10px;
|
||||||
|
padding-bottom: calc(10px + env(safe-area-inset-bottom, 0px));
|
||||||
|
}
|
||||||
|
|
||||||
|
.panelCloseBtn { margin-bottom: 6px; }
|
||||||
|
|
||||||
|
.musicBarPanelTrack {
|
||||||
|
flex-direction: row;
|
||||||
|
text-align: left;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.musicBarPanelTrack .musicBarImage {
|
||||||
|
width: min(120px, 20vh);
|
||||||
|
height: min(120px, 20vh);
|
||||||
|
}
|
||||||
|
|
||||||
|
.musicBarInfo { align-items: flex-start; }
|
||||||
|
|
||||||
|
.musicBarPanelTransport { margin-bottom: 8px; }
|
||||||
|
}
|
||||||
|
|
||||||
/* One queue entry - a plain flex row (image, then a shrinking/truncating
|
/* One queue entry - a plain flex row (image, then a shrinking/truncating
|
||||||
info column, then the duration), NOT views/album's shared .trackRow
|
info column, then the duration), NOT views/album's shared .trackRow
|
||||||
grid (styles/trackList.css) - that one's 4 fixed columns assume
|
grid (styles/trackList.css) - that one's 4 fixed columns assume
|
||||||
|
|
|
||||||
|
|
@ -4517,6 +4517,51 @@ request includes `Fields=AlbumId` (a mocked `EmbyClient.fetch` capturing
|
||||||
the real path/query it was called with, not just asserting on the
|
the real path/query it was called with, not just asserting on the
|
||||||
already-separately-tested `imageUrlFor` logic downstream of it).
|
already-separately-tested `imageUrlFor` logic downstream of it).
|
||||||
|
|
||||||
|
## The music bar's mobile now-playing screen didn't fit landscape
|
||||||
|
|
||||||
|
Reported directly, along with a fair general complaint: the mobile
|
||||||
|
now-playing overlay used mostly fixed sizes, and the one that mattered
|
||||||
|
most - the album art - was sized off `vw` (`min(220px, 60vw)`), the
|
||||||
|
viewport dimension a phone in landscape has *plenty* of. Stacked
|
||||||
|
vertically (art, then text, then the transport row, then the side row)
|
||||||
|
with that same art staying pinned near its 220px cap regardless of how
|
||||||
|
little vertical room was actually left, the screen ran well past a
|
||||||
|
typical landscape phone's height and needed to scroll to reach the
|
||||||
|
transport controls - not adapted to the rotation at all.
|
||||||
|
|
||||||
|
Fixed with a dedicated `@media (max-width: 720px) and
|
||||||
|
(orientation: landscape)` block, not by chasing every fixed value in
|
||||||
|
the portrait rules: the art moves beside the title/artist instead of
|
||||||
|
above them (`.musicBarPanelTrack` becomes `flex-direction: row`),
|
||||||
|
freeing most of the vertical space the portrait layout spends stacking
|
||||||
|
them - and every size that actually needs to respond to the rotation is
|
||||||
|
now capped by `vh` (`min(120px, 20vh)`), the dimension landscape
|
||||||
|
actually constrains, instead of `vw`. A few fixed margins shrink
|
||||||
|
alongside it in this same block, same reasoning: adapting to less
|
||||||
|
vertical room, not arbitrary tightening.
|
||||||
|
|
||||||
|
Deliberately NOT changed: `.musicBarPlayBig`'s 56px transport button
|
||||||
|
and the other icon buttons. A touch target's size answers to a
|
||||||
|
finger, not the screen - shrinking it in landscape to "adapt" would
|
||||||
|
trade a real usability problem (nothing to tap accurately) for a
|
||||||
|
cosmetic one, the opposite of the actual ask.
|
||||||
|
|
||||||
|
Verified: full `typecheck`/`build` (client only). Checked directly, not
|
||||||
|
just reasoned about - real compiled CSS with the real markup loaded
|
||||||
|
into `<iframe>`s sized to a wide (700x320) and a deliberately extreme,
|
||||||
|
narrow (650x280) landscape shape (this sandbox's own `resize_window`
|
||||||
|
viewport emulation doesn't reflect orientation reliably - iframes do,
|
||||||
|
same workaround as every other viewport-shaped check this session).
|
||||||
|
Both matched `(orientation: landscape)`, both switched
|
||||||
|
`.musicBarPanelTrack` to a real `row` layout with the art measurably to
|
||||||
|
the image's left, both image sizes tracked the shrinking `vh` cap
|
||||||
|
correctly (64px/56px respectively, not the old fixed 220px), and both
|
||||||
|
fit their entire content within the viewport's own height with zero
|
||||||
|
overflow - even the extreme 280px-tall case, which the pre-fix numbers
|
||||||
|
would have overflowed by well over 200px. A separate portrait check
|
||||||
|
(375x700) confirmed this landscape block changes nothing there: still
|
||||||
|
`column`, still the original 220px `vw`-capped art, unaffected.
|
||||||
|
|
||||||
## Known limitations
|
## Known limitations
|
||||||
|
|
||||||
- Playback always goes through `hls.js` against whatever Emby's
|
- Playback always goes through `hls.js` against whatever Emby's
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue