diff --git a/lib/riverpod_controllers/focus_mode.dart b/lib/riverpod_controllers/focus_mode.dart index 102a220..96f412e 100644 --- a/lib/riverpod_controllers/focus_mode.dart +++ b/lib/riverpod_controllers/focus_mode.dart @@ -2,7 +2,9 @@ import 'dart:async'; import 'package:riverpod_annotation/riverpod_annotation.dart'; +import '../globals.dart'; import '../models/focus_mode_data.dart'; +import '../services/setting_service.dart'; part 'focus_mode.g.dart'; @@ -12,21 +14,25 @@ class FocusMode extends _$FocusMode { void setMode(FocusModeData newMode) { _disableTimer?.cancel(); + var updatedState = newMode; if (newMode.enabled && newMode.disableTime != null) { - _disableTimer = - Timer(newMode.disableTime!.difference(DateTime.now()), () { - print('disabling mode'); - state = const FocusModeData(false); + final timeDifference = newMode.disableTime!.difference(DateTime.now()); + if (timeDifference.isNegative || timeDifference.inMicroseconds == 0) { + updatedState = FocusModeData.disabled(); + } + _disableTimer = Timer(timeDifference, () { + state = FocusModeData.disabled(); }); } - print('New focus mode: $newMode'); - state = newMode; + + getIt().focusModeData = updatedState; + state = updatedState; } @override FocusModeData build() { - print('Building FocusMode provider'); - state = const FocusModeData(false); + final storedFocusMode = getIt().focusModeData; + setMode(storedFocusMode); return state; } } diff --git a/lib/riverpod_controllers/focus_mode.g.dart b/lib/riverpod_controllers/focus_mode.g.dart index a2722e0..8338cb0 100644 --- a/lib/riverpod_controllers/focus_mode.g.dart +++ b/lib/riverpod_controllers/focus_mode.g.dart @@ -6,7 +6,7 @@ part of 'focus_mode.dart'; // RiverpodGenerator // ************************************************************************** -String _$focusModeHash() => r'd9eab6fca9c114d94a42a9cb45dcea74ee82c567'; +String _$focusModeHash() => r'93028f8514cecda8ce68506ec242f4d26d63b4b2'; /// See also [FocusMode]. @ProviderFor(FocusMode) diff --git a/lib/services/setting_service.dart b/lib/services/setting_service.dart index 2377056..6a1a7b9 100644 --- a/lib/services/setting_service.dart +++ b/lib/services/setting_service.dart @@ -5,9 +5,19 @@ import 'package:flutter/material.dart'; import 'package:logging/logging.dart'; import 'package:shared_preferences/shared_preferences.dart'; +import '../models/focus_mode_data.dart'; import '../models/settings/network_capabilities_settings.dart'; import '../utils/theme_mode_extensions.dart'; +const _lowBandwidthModeKey = 'LowBandwidthMode'; +const _themeModeKey = 'ThemeMode'; +const _colorBlindnessTestingModeKey = 'ColorBlindnessTestingMode'; +const _logLevelKey = 'LogLevel'; +const _networkCapabilitiesKey = 'NetworkCapabilities'; +const _notificationGroupingKey = 'NotificationGrouping'; +const _spoilerHidingEnabledKey = 'SpoilerHidingEnabled'; +const _focusModeKey = 'FocusMode'; + class SettingsService extends ChangeNotifier { late final SharedPreferences _prefs; var _initialized = false; @@ -86,6 +96,18 @@ class SettingsService extends ChangeNotifier { notifyListeners(); } + FocusModeData _focusModeData = FocusModeData.disabled(); + + FocusModeData get focusModeData => _focusModeData; + + set focusModeData(FocusModeData updatedData) { + _focusModeData = updatedData; + final jsonData = _focusModeData.toJson(); + final jsonString = jsonEncode(jsonData); + _prefs.setString(_focusModeKey, jsonString); + notifyListeners(); + } + Future initialize() async { if (_initialized) { return; @@ -98,18 +120,11 @@ class SettingsService extends ChangeNotifier { _colorBlindnessType = _colorBlindnessTypeFromPrefs(_prefs); _logLevel = _levelFromPrefs(_prefs); _networkCapabilities = _networkCapabilitiesFromPrefs(_prefs); + _focusModeData = _focusModeDataFromPrefs(_prefs); _initialized = true; } } -const _lowBandwidthModeKey = 'LowBandwidthMode'; -const _themeModeKey = 'ThemeMode'; -const _colorBlindnessTestingModeKey = 'ColorBlindnessTestingMode'; -const _logLevelKey = 'LogLevel'; -const _networkCapabilitiesKey = 'NetworkCapabilities'; -const _notificationGroupingKey = 'NotificationGrouping'; -const _spoilerHidingEnabledKey = 'SpoilerHidingEnabled'; - ColorBlindnessType _colorBlindnessTypeFromPrefs(SharedPreferences prefs) { final cbString = prefs.getString(_colorBlindnessTestingModeKey); if (cbString?.isEmpty ?? true) { @@ -149,3 +164,14 @@ Level _levelFromPrefs(SharedPreferences prefs) { _ => Level.OFF, }; } + +FocusModeData _focusModeDataFromPrefs(SharedPreferences prefs) { + final fmString = prefs.getString(_focusModeKey); + if (fmString?.isEmpty ?? true) { + return FocusModeData.disabled(); + } + + final Map json = jsonDecode(fmString!); + final fm = FocusModeData.fromJson(json); + return fm; +}