Fuenf P0-Fehler behoben: Benachrichtigung, Offline, Cover, Warteschlange
Ergebnis einer Durchsicht der App gegen den Massstab "Apple Music". Alle fuenf Punkte waren keine fehlenden Funktionen, sondern Versprechen, die die Oberflaeche gab und der Code nicht hielt. - POST_NOTIFICATIONS fehlte im Manifest. Auf Android 13+ blieb die Wiedergabe-Benachrichtigung dadurch unsichtbar. Das Recht wird erst erfragt, wenn wirklich ein Titel laeuft. - Der Offline-Schalter wurde nirgends gelesen. Er greift jetzt an allen drei Wegen in die Warteschlange; uebersprungene Titel werden benannt. - CoverImage kannte nur file://, und der Server-Browser gab die Cover-Adresse gar nicht erst mit. Server-Titel waren deshalb immer ein graues Notensymbol. - Warteschlange entfernen/umsortieren baute die ganze Queue neu auf: hoerbarer Aussetzer und doppelte Wiedergabe-Zaehlung. Jetzt mutiert nur der betroffene Eintrag, die Buchfuehrung steht vor dem Player. - Das Herz bei Server-Titeln legte einen Favoriten mit leerer Kennung an, der nie in der Liste auftauchte. Es ist jetzt ausgegraut. Nachgebessert aus dem Code-Review: Offline-Meldung an die Stelle geholt, wo sie greifen kann; Queue-Buchfuehrung vor den Player gezogen; Fehlerpfad fuer die Berechtigungs-Abfrage ergaenzt. 360 Tests gruen (vorher 328), flutter analyze ohne Befund, Release-APK gebaut und POST_NOTIFICATIONS darin nachgeprueft. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013xAHJTJM6UUqmjUgk1PUEd
This commit is contained in:
co-authored by
Claude Opus 5
parent
34d6d8e52a
commit
e6d5f1c9ee
@@ -5,6 +5,93 @@ Format angelehnt an [Keep a Changelog](https://keepachangelog.com/de/1.0.0/).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### 🚑 Fünf P0-Fehler behoben: Benachrichtigung, Offline, Cover, Warteschlange (2026-08-23)
|
||||
|
||||
Ergebnis einer vollständigen Durchsicht der App gegen den Maßstab „Apple
|
||||
Music". Fünf Punkte waren keine fehlenden Funktionen, sondern **Versprechen,
|
||||
die die App gab und der Code nicht hielt**.
|
||||
|
||||
- 🔔 **Die Wiedergabe-Benachrichtigung erschien auf Android 13+ gar nicht.**
|
||||
Dafür braucht das System die Berechtigung `POST_NOTIFICATIONS` — sie fehlte
|
||||
im Manifest, auch im fertig gebauten APK. Die Musik lief, aber Notification
|
||||
und die Bedienknöpfe darin blieben unsichtbar; steuern ließ sich nur in der
|
||||
geöffneten App. Die Berechtigung ist jetzt drin und wird **erst dann**
|
||||
erfragt, wenn wirklich ein Titel läuft — beim kalten Start käme die Frage
|
||||
ohne Zusammenhang, und zweimal weggetippt sperrt Android sie dauerhaft.
|
||||
|
||||
- 📴 **Der Offline-Schalter tat nichts.** Er speicherte brav ein Ja/Nein, aber
|
||||
**niemand las es**: die App streamte weiter und verbrauchte Mobilfunkdaten,
|
||||
obwohl „Offline-Modus" anstand. Jetzt greift er an allen drei Wegen in die
|
||||
Warteschlange — Abspielen, „Als Nächstes", „Zur Warteschlange". Titel vom
|
||||
Gerät laufen immer, Titel vom Server nur, wenn sie schon hier liegen. Was
|
||||
übersprungen wird, sagt die App: *„Offline-Modus: 3 Titel übersprungen —
|
||||
nicht heruntergeladen"*, statt still eine kürzere Liste zu spielen.
|
||||
|
||||
- 🖼️ **Titel vom Server hatten nie ein Coverbild.** Die App konnte Cover nur
|
||||
aus Dateien laden; das Bild vom Navidrome-Server liegt aber hinter einer
|
||||
Web-Adresse. Jeder Server-Titel war deshalb ein graues Notensymbol — in der
|
||||
Liste, im Player, auf dem Sperrbildschirm. Jetzt lädt die App auch
|
||||
Web-Cover, und der Server-Browser gibt die Adresse überhaupt erst mit
|
||||
(vorher wurde sie an beiden Stellen schlicht vergessen).
|
||||
|
||||
- ⏭️ **Warteschlange umsortieren riss die Wiedergabe auf.** Jedes Entfernen
|
||||
und jedes Verschieben baute die *ganze* Warteschlange neu auf: hörbarer
|
||||
Aussetzer, Sprung an den Titelanfang — und der laufende Titel wurde dabei
|
||||
**jedes Mal erneut als Wiedergabe gezählt**. Die Sortierung „Wie oft
|
||||
abgespielt" zählte damit Queue-Bedienung statt Hören. Jetzt wird nur der
|
||||
eine betroffene Eintrag bewegt; die Wiedergabe merkt davon nichts.
|
||||
|
||||
- 🤍 **Das Herz bei Server-Titeln log.** Ein Titel, der nur am Server liegt,
|
||||
hat keinen Eintrag in der Bibliothek — das Herz bekam deshalb eine leere
|
||||
Kennung, füllte sich beim Antippen und legte einen Favoriten an, der in der
|
||||
Favoritenliste nie auftauchte. Es ist jetzt sichtbar ausgegraut, mit dem
|
||||
Hinweis „Nur für Titel in deiner Bibliothek".
|
||||
|
||||
- ⚡ **Nebenwirkung der Offline-Umstellung, aber eine gute:** „Als Nächstes"
|
||||
und „Zur Warteschlange" sahen bisher gar nicht im Zwischenspeicher nach und
|
||||
streamten einen Server-Titel auch dann, wenn er längst auf dem Gerät lag.
|
||||
Alle drei Wege in die Warteschlange bauen die Abspielquelle jetzt an
|
||||
derselben Stelle — ein bereits geladener Titel läuft immer von der Platte.
|
||||
|
||||
- 🧹 **Nebenbei:** „📴 Offline-Modus" heißt jetzt ohne Emoji „Offline-Modus"
|
||||
(Emoji sehen auf jedem Hersteller-Handy anders aus und lassen sich nicht
|
||||
einfärben), und der Untertitel sagt, was der Schalter wirklich tut.
|
||||
|
||||
- 🔍 **Aus dem Code-Review nachgebessert (drei Punkte):**
|
||||
**(1)** Die Offline-Meldung hing an der falschen Stelle. Sie stand in der
|
||||
Bibliotheksliste — die zeigt aber nur Titel vom Gerät, dort wird nie etwas
|
||||
übersprungen. Beim Server-Album, wo es wirklich passiert, wurde sie
|
||||
verworfen. Jetzt sitzt sie dort, wo sie greifen kann; und „nichts davon ist
|
||||
heruntergeladen" erscheint nicht mehr als *„Fehler: …"* — das ist kein
|
||||
Fehler, sondern die eingestellte Wahl.
|
||||
**(2)** Beim Umsortieren wurde die Warteschlange erst *nach* dem Player
|
||||
nachgeführt. In der Lücke dazwischen konnte der Player schon einen neuen
|
||||
Titelindex melden, während die App noch die alte Liste kannte — falscher
|
||||
Titel im Player, Wiedergabe für das falsche Lied gezählt. Buchführung steht
|
||||
jetzt vor dem Player, genau wie beim normalen Abspielen.
|
||||
**(3)** Die Abfrage der Benachrichtigungs-Berechtigung hatte keinen
|
||||
Fehlerpfad. Läuft beim Start noch die Abfrage der Musik-Berechtigung, wirft
|
||||
Android — das wäre als unbehandelter Fehler durchgeschlagen. Jetzt wird es
|
||||
nur protokolliert; die Wiedergabe läuft weiter, nur eben ohne
|
||||
Benachrichtigung.
|
||||
|
||||
- ✅ **Getestet:** 360 Tests grün (vorher 328), `flutter analyze` ohne Befund,
|
||||
Release-APK gebaut. Im fertigen APK ist `POST_NOTIFICATIONS` nachgeprüft
|
||||
enthalten. Neu: 39 Tests für Offline-Filter, Warteschlangen-Mutation,
|
||||
Zähler-Nachführung, Server-Cover und das ausgegraute Herz. Entfallen: 9
|
||||
Tests für `newPlayingIndex` — die Funktion gab es nur, um nach dem
|
||||
Neuaufbau der Warteschlange den laufenden Titel wiederzufinden, und den
|
||||
Neuaufbau gibt es nicht mehr.
|
||||
|
||||
- 📋 **Nicht in dieser Runde:** Alben-Ansicht, Suche über den Server,
|
||||
gezieltes Herunterladen und die Cache-Obergrenze. Die stehen als P1 im
|
||||
Review-Bericht unter `.ui-design/reviews/melo_vollwertigkeit_20260823.md`.
|
||||
Dazu zwei Punkte, die erst bei dieser Arbeit auffielen und dort als **G9**
|
||||
und **G10** stehen: `stop()` bricht den Positions-Timer dauerhaft ab (nach
|
||||
dem Wegwischen der Benachrichtigung merkt sich die App keine Hörposition
|
||||
mehr — vorbestehend), und die Server-Cover haben nur einen Zwischenspeicher
|
||||
im Arbeitsspeicher, keinen auf der Platte.
|
||||
|
||||
### 🏷️ Der zweite Tab heißt wieder „Download" (2026-08-21)
|
||||
|
||||
- 📥 **Aus „Online" wird „Download".** Der Bereich behält seinen Inhalt
|
||||
|
||||
Reference in New Issue
Block a user