import 'package:flutter/foundation.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../services/logger_service.dart'; /// Nutzer-Einstellungen, die die ganze App betreffen. Werden beim Start /// einmal geladen und bei jeder Änderung sofort gespeichert. class AppSettings extends ChangeNotifier { static const _keyGroupCovers = 'gleiche_kategorie_gleiches_cover'; static const _keyAutoPlayHeadphones = 'autoplay_kopfhoerer'; static const _keyNormalizeVolume = 'gleiche_lautstaerke'; // Schlüssel gehört dem Logger — der liest ihn beim Start selbst. static const _keyDiagnose = LoggerService.diagnoseKey; bool _groupCoversByCategory = true; bool _autoPlayOnHeadphones = false; bool _normalizeVolume = true; bool _sendeDiagnosedaten = true; /// "Gleiche Kategorie = gleiches Coverbild" — an: das Cover kommt von der /// ersten Kategorie des Songs, aus: jeder Song zeigt sein eigenes Bild. bool get groupCoversByCategory => _groupCoversByCategory; /// Wiedergabe automatisch starten, sobald Kopfhörer verbunden werden. bool get autoPlayOnHeadphones => _autoPlayOnHeadphones; /// "Gleiche Lautstärke": laute Titel werden anhand ihres ReplayGain-Tags /// auf das Niveau der leiseren abgesenkt. bool get normalizeVolume => _normalizeVolume; /// Fehler- und Absturzberichte an logs.baka-net.de senden. /// Aus: die App protokolliert weiter lokal, aber nichts verlässt das Gerät. bool get sendeDiagnosedaten => _sendeDiagnosedaten; Future init() async { final prefs = await SharedPreferences.getInstance(); _groupCoversByCategory = prefs.getBool(_keyGroupCovers) ?? true; _autoPlayOnHeadphones = prefs.getBool(_keyAutoPlayHeadphones) ?? false; _normalizeVolume = prefs.getBool(_keyNormalizeVolume) ?? true; _sendeDiagnosedaten = prefs.getBool(_keyDiagnose) ?? true; // An den Logger durchreichen, damit Anzeige und tatsächliches // Sendeverhalten nicht auseinanderlaufen können. logger.sendeDiagnosedaten = _sendeDiagnosedaten; notifyListeners(); } Future setGroupCoversByCategory(bool value) async { if (_groupCoversByCategory == value) return; _groupCoversByCategory = value; notifyListeners(); final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_keyGroupCovers, value); } Future setNormalizeVolume(bool value) async { if (_normalizeVolume == value) return; _normalizeVolume = value; notifyListeners(); final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_keyNormalizeVolume, value); } Future setAutoPlayOnHeadphones(bool value) async { if (_autoPlayOnHeadphones == value) return; _autoPlayOnHeadphones = value; notifyListeners(); final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_keyAutoPlayHeadphones, value); } Future setSendeDiagnosedaten(bool value) async { if (_sendeDiagnosedaten == value) return; _sendeDiagnosedaten = value; logger.sendeDiagnosedaten = value; notifyListeners(); final prefs = await SharedPreferences.getInstance(); await prefs.setBool(_keyDiagnose, value); } }