mirror of
https://gitlab.com/mysocialportal/relatica
synced 2024-10-18 12:23:31 +00:00
Add data persistence for focus mode
This commit is contained in:
parent
6ff5092d60
commit
7d6b0bee41
3 changed files with 49 additions and 17 deletions
|
@ -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<SettingsService>().focusModeData = updatedState;
|
||||
state = updatedState;
|
||||
}
|
||||
|
||||
@override
|
||||
FocusModeData build() {
|
||||
print('Building FocusMode provider');
|
||||
state = const FocusModeData(false);
|
||||
final storedFocusMode = getIt<SettingsService>().focusModeData;
|
||||
setMode(storedFocusMode);
|
||||
return state;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ part of 'focus_mode.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$focusModeHash() => r'd9eab6fca9c114d94a42a9cb45dcea74ee82c567';
|
||||
String _$focusModeHash() => r'93028f8514cecda8ce68506ec242f4d26d63b4b2';
|
||||
|
||||
/// See also [FocusMode].
|
||||
@ProviderFor(FocusMode)
|
||||
|
|
|
@ -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<void> 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<String, dynamic> json = jsonDecode(fmString!);
|
||||
final fm = FocusModeData.fromJson(json);
|
||||
return fm;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue