fix(android): Handy-Layout im Now-Playing unangetastet lassen

Nachtrag zu 6248329: zwei der Aenderungen hatten doch Wirkung auf gewoehnliche Handys.

1. Senkrechte Zentrierung galt fuer alle Anzeigen und verschob den Block auf einem hohen
   Handy um etwa 60 dp nach unten. Jetzt wird nur zentriert, wenn eine der neuen Grenzen
   wirklich greift (Hoehe oder 400-dp-Deckel); solange die Breite das engste Mass ist,
   bleibt es beim alten Aufbau samt 28 dp Abstand oben.
2. Die Schwelle fuer die kompakte Kopfzeile lag bei 400 dp und erfasste damit jedes
   uebliche Handy. Jetzt 356 dp oder kurze Anzeige — also Fold-Deckel und
   Flip-Frontdisplay, nicht aber ein 360- oder 384-dp-Handy.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
marcandClaude Opus 5 committed 2026-10-13 19:04:38 +02:00
1 parent 624832959d
commit 7cdcc352d6
2 files changed
+29 -10

No files matched your search

@@ -192,7 +192,11 @@ fun NowPlayingScreen(
// Zwei Groessenfragen entscheiden das Layout, nicht ein Geraetename:
// schmal — passt die Kopfzeile mit drei Reitern noch in voller Groesse? (Flip-Deckel)
// kurz — bleibt nach Kopfzeile und Raendern ueberhaupt Platz? (Flip-Deckel, Querformat)
val schmal = maxWidth < 400.dp
// Die Schwelle liegt bewusst UNTER 360 dp: 360 ist noch ein gewoehnliches Handy und
// soll die Kopfzeile unveraendert behalten. Erfasst werden damit der Deckel eines Fold
// (~352 dp) und — ueber `kurz` — das Frontdisplay eines Flip, das bei aehnlicher Breite
// nur ein Drittel der Hoehe hat und wo drei Reiter in voller Groesse nicht hinpassen.
val schmal = maxWidth < 356.dp || maxHeight < 560.dp
val kurz = maxHeight < 560.dp
val obenPad = if (kurz) maxOf(statusBarTop + 4.dp, 20.dp) else topPad
Column(
@@ -317,20 +321,29 @@ fun NowPlayingScreen(
// aeusseren Messrahmens nicht mehr erreichbar (Compose sperrt gleich markierte
// Layout-Bereiche gegeneinander ab).
val seitenHoehe = maxHeight
// Greift ueberhaupt eine der neuen Grenzen? Nur dann weicht das Layout von dem
// ab, was ein hohes Handy bisher zeigte. Solange die BREITE das engste Mass ist
// — also auf jedem gewoehnlichen Handy —, bleibt es beim alten Aufbau: oben
// beginnend mit 28 dp Abstand. Erst wenn Hoehe oder Obergrenze beissen (Fold
// aufgeklappt, Tablet, Querformat), wird senkrecht zentriert; oben klebend mit
// einem Loch darunter saehe dort falsch aus.
val gedeckelt = coverKante < maxWidth - 48.dp || kurz
// Passt es, wird zentriert; passt es nicht, wird gescrollt. Beides mit einem
// Aufbau: der Inhalt ist mindestens so hoch wie die Seite (dann greift
// Arrangement.Center), darf aber darueber hinauswachsen — dann hat der
// Rollbereich etwas zu rollen. Auf dem Frontdisplay eines Flip bleibt sonst
// nichts uebrig, was ohne Abschneiden darstellbar waere.
// Passt es, wird es angeordnet wie oben beschrieben; passt es nicht, wird
// gescrollt. Beides mit einem Aufbau: der Inhalt ist mindestens so hoch wie die
// Seite, darf aber darueber hinauswachsen — dann hat der Rollbereich etwas zu
// rollen. Auf dem Frontdisplay eines Flip bleibt sonst nichts uebrig, was ohne
// Abschneiden darstellbar waere. Passt alles, ist der Rollweg null: dann
// verhaelt sich die Seite wie ohne Rollbereich.
// Die Wischgeste zum Schliessen bleibt erhalten: ein Rollbereich ohne Weg
// verbraucht die Geste nicht, sie erreicht also weiter die Seite darunter.
Box(Modifier.fillMaxSize().verticalScroll(rememberScrollState())) {
Column(
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center,
verticalArrangement = if (gedeckelt) Arrangement.Center else Arrangement.Top,
modifier = Modifier.fillMaxWidth().heightIn(min = seitenHoehe),
) {
if (!gedeckelt) Spacer(Modifier.height(28.dp))
// Cover art — gedeckelt, scale-animates like Apple Music
AsyncImage(
model = coverUrl,