Equalizer-Fix für Xiaomi/MIUI (Dolby Atmos) + In-App-YouTube-Suche als Extra-Tab

- openSystemPanel(): Xiaomi-Sound-Settings-Intent zuerst, dann
  Settings.ACTION_SOUND_SETTINGS, dann Android-Standard-Intent als
  Fallback. Behebt "kein System-Klangeffekte" trotz Dolby Atmos auf
  MIUI/HyperOS (POCO X7 Pro), wo der Standard-Intent keine Activity findet.
- Neuer Tab "YT-Suche": YouTube-Suche über den bestehenden
  /api/search-Endpunkt des Baka-Proxys, Ergebnisliste mit Thumbnail
  (YouTube-CDN), Titel, Dauer und Download-Knopf pro Treffer — derselbe
  Download-Weg wie im bestehenden Download-Tab.

574 Tests grün, flutter analyze ohne Befund, Kotlin kompiliert sauber
(gradlew :app:compileDebugKotlin). Xiaomi-Fix konnte nicht auf echter
Hardware getestet werden.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VM2JK5mV7AL1g2Rt6H6h9w
This commit is contained in:
Hermes (Server)
2026-08-25 21:03:46 +02:00
co-authored by Claude Sonnet 5
parent 9e65ddcbb5
commit f0313724d4
9 changed files with 796 additions and 7 deletions
+38
View File
@@ -5,6 +5,44 @@ Format angelehnt an [Keep a Changelog](https://keepachangelog.com/de/1.0.0/).
## [Unreleased]
### 🎚️📺 Equalizer-Fix (Xiaomi) + In-App-YouTube-Suche, Extra-Tab (2026-08-25)
- 🎚️ **Equalizer: "kein System-Klangeffekte" trotz Dolby Atmos behoben.**
`openSystemPanel()` nutzte bisher nur den Android-Standard-Intent
(`ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL`) — dafür registriert
MIUI/HyperOS auf dem POCO X7 Pro keine Activity, `resolveActivity()`
liefert dort immer `null`. Neu: zuerst der Xiaomi-Weg direkt zur
System-Ton-Seite (`com.android.settings.Settings$SoundSettingsActivity`,
wo Dolby Atmos liegt), danach `Settings.ACTION_SOUND_SETTINGS` als
universeller Fallback, zuletzt weiter der Android-Standard-Intent für
Geräte, die den unterstützen. Kotlin kompiliert sauber
(`gradlew :app:compileDebugKotlin`); echtes Testen auf einem POCO X7 Pro
war von hier aus nicht möglich.
- 📺 **In-App-YouTube-Suche — neuer Extra-Tab "YT-Suche" (zum Testen).**
Bisher ließ sich nur eine YouTube-Adresse einfügen; jetzt gibt es eine
echte Suche mit Ergebnisliste (Vorschaubild, Titel, Dauer) und
Download-Knopf pro Treffer. Nutzt den bereits vorhandenen
`/api/search`-Endpunkt des Baka-Proxys (yt-dlp-gestützt, dieselbe
Anmeldung wie der bestehende YouTube-Downloader) — kein neuer Server,
kein YouTube-API-Key nötig. Die Vorschaubilder kommen direkt von
YouTubes öffentlichem Thumbnail-CDN, aus der Video-ID der Ergebnis-URL.
Der Download-Knopf läuft über denselben Weg wie im Download-Tab
(Baka-Proxy → App-Zwischenordner → MediaStore → Bibliotheks-Scan).
- 🐛 **Beim Testen gefunden:** `YtDownloadService.herunterladen()`
(Future.any + `.timeout()`) lässt sich nicht sicher aus einem
`testWidgets()`-Test heraus aufrufen — der Timeout-Timer bleibt unter
Flutters `fake_async`-Testbindung dauerhaft "pending" und lässt den Lauf
hängen bzw. an der Pending-Timer-Prüfung scheitern (reproduziert auch
ganz ohne die neue UI). Genau deshalb hat auch der bestehende
Download-Knopf im Download-Tab keinen eigenen Widget-Test — die
Download-Logik selbst ist über `yt_download_test.dart` schon ausführlich
abgedeckt, an `YtDownloadService` wurde nichts geändert.
-**Getestet:** 574 Tests grün (vorher 557), `flutter analyze` ohne
Befund. Neu: Tests für `youtubeVideoId`/Thumbnail-Ableitung, für
`YtSearchService.suchen` (Anmeldung, Erfolg, 401, Fehlertext, Timeout,
neue Suche ersetzt alte Treffer) und zwei Widget-Tests für den neuen Tab
(Anmelde-Hinweis, Suchergebnisse mit Titel/Dauer).
### 🔒 Worktree-Lock gegen Doppelarbeit (2026-08-25)
Aus der Workflow-Analyse desselben Tages (Dustin↔Hermes↔Claude, siehe