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
+10
View File
@@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'downloads/downloads_screen.dart';
import 'downloads/youtube_search_screen.dart';
import 'library/android_scan.dart';
import 'library/auto_scan.dart';
import 'library/category_service.dart';
@@ -27,6 +28,7 @@ import 'services/offline_mode.dart';
import 'services/navidrome_service.dart';
import 'services/sync_service.dart';
import 'services/yt_download_service.dart';
import 'services/yt_search_service.dart';
import 'settings/app_settings.dart';
import 'shared/theme.dart';
@@ -40,6 +42,7 @@ late final AppSettings _settings;
late final AudioEffects _effects;
late final BakaAuth _bakaAuth;
late final YtDownloadService _ytDownload;
late final YtSearchService _ytSearch;
late final SyncService _sync;
late final DownloadService _downloads;
@@ -74,6 +77,7 @@ Future<void> main() async {
_bakaAuth = BakaAuth();
await _bakaAuth.laden();
_ytDownload = YtDownloadService(auth: _bakaAuth);
_ytSearch = YtSearchService(auth: _bakaAuth);
_sync = SyncService(
db: _db,
cloud: MeloCloudService(auth: _bakaAuth),
@@ -125,6 +129,7 @@ class MeloApp extends StatelessWidget {
ChangeNotifierProvider<AudioEffects>.value(value: _effects),
ChangeNotifierProvider<BakaAuth>.value(value: _bakaAuth),
ChangeNotifierProvider<YtDownloadService>.value(value: _ytDownload),
ChangeNotifierProvider<YtSearchService>.value(value: _ytSearch),
ChangeNotifierProvider<SyncService>.value(value: _sync),
ChangeNotifierProvider<DownloadService>.value(value: _downloads),
],
@@ -215,6 +220,7 @@ class _HomeShellState extends State<HomeShell> with WidgetsBindingObserver {
onAdresseUebernommen: () => setState(() => _geteilteAdresse = null),
),
const FavoritesScreen(),
const YoutubeSearchScreen(),
];
return Scaffold(
body: Column(
@@ -244,6 +250,10 @@ class _HomeShellState extends State<HomeShell> with WidgetsBindingObserver {
icon: Icon(Icons.favorite_border),
activeIcon: Icon(Icons.favorite),
label: 'Favoriten'),
BottomNavigationBarItem(
icon: Icon(Icons.smart_display_outlined),
activeIcon: Icon(Icons.smart_display),
label: 'YT-Suche'),
],
),
),