Fuenf von Tinker gemeldete Bugs, je mit Root-Cause-Untersuchung vor dem Fix (systematic-debugging):
Shuffle/Wiederholung: _transformEvent() setzte shuffleMode/repeatMode nie im PlaybackState -> Anzeige blieb immer "aus", Buttons schalteten nie richtig um. Betrifft auch den Sperrbildschirm (gleiche Datenquelle).
Auto-Play pausiert: keine AudioSession-Konfiguration im ganzen Projekt -> Android verlor beim automatischen Songwechsel den Audio-Fokus.
Kein Full-Cover beim Song-Tap: NowPlayingScreen existierte schon, wurde aber nur vom Mini-Player geoeffnet, nicht bei Song-Tap in Bibliothek/Playlist/Server-Titeln.
Doppelter Scan-Button: auf Android taten "Musik scannen" und "Erneut scannen" exakt dasselbe (identischer Code-Pfad) -> zweiter Button auf Android entfernt, auf Desktop bleiben beide (dort unterschiedlich).
Back-Geste minimiert die App: Tab-Wechsel liefen nur ueber setState, nie ueber Navigator.push -> System-Zurueck-Geste hatte auf Nicht-Start-Tabs nichts zum Poppen. Jetzt per PopScope abgefangen: springt zuerst zu Tab 0 zurueck.
Nicht Teil dieses PRs (bereits geklaert, kein Code noetig)
YouTube-Login bei Tinker: serverseitig durch Passwort-Abgleich geloest (Hermes).
"Dolby"-Effekt: oeffnet System-Klangeffekte des Geraets, auf Tinkers Handy (kein Xiaomi/POCO) fehlt der passende Systemdialog -- dokumentierte Geraete-Grenze, kein Bug.
## Zusammenfassung
Fuenf von Tinker gemeldete Bugs, je mit Root-Cause-Untersuchung vor dem Fix (systematic-debugging):
- **Shuffle/Wiederholung**: `_transformEvent()` setzte `shuffleMode`/`repeatMode` nie im `PlaybackState` -> Anzeige blieb immer "aus", Buttons schalteten nie richtig um. Betrifft auch den Sperrbildschirm (gleiche Datenquelle).
- **Auto-Play pausiert**: keine `AudioSession`-Konfiguration im ganzen Projekt -> Android verlor beim automatischen Songwechsel den Audio-Fokus.
- **Kein Full-Cover beim Song-Tap**: `NowPlayingScreen` existierte schon, wurde aber nur vom Mini-Player geoeffnet, nicht bei Song-Tap in Bibliothek/Playlist/Server-Titeln.
- **Doppelter Scan-Button**: auf Android taten "Musik scannen" und "Erneut scannen" exakt dasselbe (identischer Code-Pfad) -> zweiter Button auf Android entfernt, auf Desktop bleiben beide (dort unterschiedlich).
- **Back-Geste minimiert die App**: Tab-Wechsel liefen nur ueber `setState`, nie ueber `Navigator.push` -> System-Zurueck-Geste hatte auf Nicht-Start-Tabs nichts zum Poppen. Jetzt per `PopScope` abgefangen: springt zuerst zu Tab 0 zurueck.
## Nicht Teil dieses PRs (bereits geklaert, kein Code noetig)
- YouTube-Login bei Tinker: serverseitig durch Passwort-Abgleich geloest (Hermes).
- "Dolby"-Effekt: oeffnet System-Klangeffekte des Geraets, auf Tinkers Handy (kein Xiaomi/POCO) fehlt der passende Systemdialog -- dokumentierte Geraete-Grenze, kein Bug.
- Gemeinsame Navidrome-Bibliothek (Privacy-Anliegen): architektonisch beabsichtigt (Familie teilt Musik), bewusst unveraendert.
- "Zuletzt hinzugefuegt"-Ansicht: existiert bereits als Standard-Sortierung in "Meine Musik".
## Verifikation
- 593 Tests gruen, 1 bekannter Skip, 0 fehlgeschlagen.
- `flutter analyze`: keine Befunde.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Tab-Wechsel in HomeShell laufen nur über setState (IndexedStack +
BottomNavigationBar), nie über Navigator.push — eine System-Zurück-Geste
hatte auf Nicht-Start-Tabs also nie eine Route zum Poppen und minimierte
stattdessen die App. build() jetzt in ein PopScope gewickelt, das bei
_index != 0 zuerst zu Tab 0 zurückspringt.
- MeloDb.watchRecentlyPlayed(): wertet PlaybackHistory statt dateAddedMs aus,
ein mehrfach gehörter Song erscheint nur einmal, an der Position seines
jüngsten Abspielens (Subquery mit GROUP BY songId / MAX(playedAtMs)).
- "Zuletzt" (Karte + RecentlyPlayedScreen, vormals RecentlyAddedScreen) in
my_music_screen.dart nutzt jetzt watchRecentlyPlayed() statt watchRecent().
- Herz im Vollbild-Player: aus der AppBar-actions-Row entfernt, sitzt jetzt
direkt neben dem Songtitel in _Angaben (now_playing_screen.dart).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012A2pmbnVNPiHdyf2GW8eLP
Betraf alle drei Nutzer (Dustin, Baka, Tinker), nicht nur einen: IndexedStack
baut Download-Tab und YT-Suche beim App-Start gleichzeitig, beide loesen
unabhaengig voneinander autoAnmelden() aus. Ohne In-Flight-Absicherung gingen
zwei fast-gleichzeitige Login-Requests an denselben Server, von denen einer
abgelehnt wurde - obwohl die Zugangsdaten korrekt waren.
- BakaAuth.autoAnmelden() haengt einen ueberlappenden Aufruf jetzt an den
bereits laufenden Login-Versuch an, statt einen zweiten Request zu senden.
- Anmelde-Dialog im Download-Tab zeigt den tatsaechlich bekannten
Navidrome-Benutzernamen statt immer "Baka" vorauszufuellen.
- Navidrome-Dialog in den Einstellungen waehlt den zuletzt bekannten
Benutzer vor statt immer "Baka".
Nach erfolgreichem manuellem Login im "Baka-Konto"-Dialog wird das neue
Passwort jetzt zusätzlich in NavidromeService persistiert (dafür ergänzt:
öffentlicher serverUrl-Getter) — vorher schrieb der Dialog es nur ins
BakaAuth-Token, nie zurück in die lokale Navidrome-Ablage, aus der
autoAnmelden() sich beim nächsten App-Start bedient. Ohne diesen Fix kam
der Auto-Login-Fehler nach Ablauf des 7-Tage-Tokens garantiert wieder.
Zusätzlich hält BakaAuth.letzterAutoLoginFehler jetzt den Fehlertext des
letzten Auto-Login-Versuchs fest, statt ihn zu verwerfen — bisher war aus
der App nicht diagnostizierbar, woran ein Auto-Login scheiterte.
Items in song_list.dart und artist_list.dart faden/rutschen beim ersten
Erscheinen gestaffelt statt abrupt ein — angelehnt an HyperOS' fließende
Motion-Sprache. Läuft einmal pro Element, respektiert Reduce-Motion und
deckelt die Verzögerung ab Index 12.
Das Passwortfeld im Baka-Konto-Anmelde-Dialog wurde vor dem Absenden und
vor dem Speichern nicht getrimmt — ein durch Autofill eingefügtes
Leerzeichen ließ korrekte Logins scheitern. Gleicher Fix wie bereits in
settings_screen.dart (Commit 3d1e00646a) für denselben Symptom-Typ.
You are not authorized to merge this pull request.
This pull request can be merged automatically.
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.
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.
Zusammenfassung
Fuenf von Tinker gemeldete Bugs, je mit Root-Cause-Untersuchung vor dem Fix (systematic-debugging):
_transformEvent()setzteshuffleMode/repeatModenie imPlaybackState-> Anzeige blieb immer "aus", Buttons schalteten nie richtig um. Betrifft auch den Sperrbildschirm (gleiche Datenquelle).AudioSession-Konfiguration im ganzen Projekt -> Android verlor beim automatischen Songwechsel den Audio-Fokus.NowPlayingScreenexistierte schon, wurde aber nur vom Mini-Player geoeffnet, nicht bei Song-Tap in Bibliothek/Playlist/Server-Titeln.setState, nie ueberNavigator.push-> System-Zurueck-Geste hatte auf Nicht-Start-Tabs nichts zum Poppen. Jetzt perPopScopeabgefangen: springt zuerst zu Tab 0 zurueck.Nicht Teil dieses PRs (bereits geklaert, kein Code noetig)
Verifikation
flutter analyze: keine Befunde.Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.