adguard-home-manager/lib/providers/app_config_provider.dart

390 lines
9.7 KiB
Dart
Raw Normal View History

2023-09-09 21:17:01 +02:00
import 'package:flutter/material.dart';
import 'package:device_info_plus/device_info_plus.dart';
2022-09-27 15:43:52 +02:00
import 'package:flutter/scheduler.dart';
2023-09-09 21:17:01 +02:00
import 'package:sentry_flutter/sentry_flutter.dart';
2024-02-02 20:37:27 +01:00
import 'package:shared_preferences/shared_preferences.dart';
import 'package:package_info_plus/package_info_plus.dart';
2023-09-09 21:17:01 +02:00
import 'package:adguard_home_manager/constants/enums.dart';
import 'package:adguard_home_manager/config/home_top_items_default_order.dart';
2023-05-17 21:50:13 +02:00
import 'package:adguard_home_manager/models/github_release.dart';
2022-09-30 01:23:28 +02:00
import 'package:adguard_home_manager/models/app_log.dart';
class AppConfigProvider with ChangeNotifier {
2024-02-02 20:37:27 +01:00
final SharedPreferences sharedPreferencesInstance;
AppConfigProvider({
required this.sharedPreferencesInstance
});
PackageInfo? _appInfo;
AndroidDeviceInfo? _androidDeviceInfo;
IosDeviceInfo? _iosDeviceInfo;
int _selectedScreen = 0;
2023-04-30 22:54:39 +02:00
int? _selectedSettingsScreen;
bool _showingSnackbar = false;
2024-02-02 20:37:27 +01:00
bool _supportsDynamicTheme = true;
2022-09-27 15:43:52 +02:00
int _selectedTheme = 0;
2022-10-26 14:26:09 +02:00
bool _useDynamicColor = true;
int _staticColor = 0;
2024-09-11 18:13:26 +02:00
final bool _useThemeColorForStatus = false;
2022-09-27 15:43:52 +02:00
2022-09-29 23:12:24 +02:00
int _selectedClientsTab = 0;
2022-10-07 20:48:05 +02:00
int _selectedFiltersTab = 0;
2022-09-29 23:12:24 +02:00
2023-09-09 21:17:01 +02:00
List<HomeTopItems> _homeTopItemsOrder = homeTopItemsDefaultOrder;
2024-02-02 20:37:27 +01:00
bool _hideServerAddress = false;
2023-09-09 21:25:21 +02:00
2022-09-30 01:23:28 +02:00
final List<AppLog> _logs = [];
2022-09-30 00:24:56 +02:00
2024-02-02 20:37:27 +01:00
bool _overrideSslCheck = false;
2022-09-30 02:24:49 +02:00
2024-02-02 20:37:27 +01:00
bool _hideZeroValues = false;
2024-02-02 20:37:27 +01:00
bool _showTimeLogs = false;
2023-05-20 21:12:52 +02:00
2024-02-02 20:37:27 +01:00
bool _showIpLogs = false;
2024-02-02 20:37:27 +01:00
bool _combinedChartHome = false;
2023-05-20 22:57:38 +02:00
2022-10-29 19:16:05 +02:00
String? _doNotRememberVersion;
2023-05-17 21:50:13 +02:00
GitHubRelease? _appUpdatesAvailable;
PackageInfo? get getAppInfo {
return _appInfo;
}
AndroidDeviceInfo? get androidDeviceInfo {
return _androidDeviceInfo;
}
IosDeviceInfo? get iosDeviceInfo {
return _iosDeviceInfo;
}
2022-09-27 15:43:52 +02:00
ThemeMode get selectedTheme {
switch (_selectedTheme) {
case 0:
return SchedulerBinding.instance.window.platformBrightness == Brightness.light
? ThemeMode.light
: ThemeMode.dark;
case 1:
return ThemeMode.light;
case 2:
return ThemeMode.dark;
default:
return ThemeMode.light;
}
}
2024-02-02 20:37:27 +01:00
bool get supportsDynamicTheme {
return _supportsDynamicTheme;
}
2022-09-27 15:43:52 +02:00
int get selectedThemeNumber {
return _selectedTheme;
}
2022-09-29 23:12:24 +02:00
int get selectedClientsTab {
return _selectedClientsTab;
}
2022-09-27 15:43:52 +02:00
2022-10-07 20:48:05 +02:00
int get selectedFiltersTab {
return _selectedFiltersTab;
}
2022-09-30 01:23:28 +02:00
List<AppLog> get logs {
2022-09-30 00:24:56 +02:00
return _logs;
}
2022-09-30 02:24:49 +02:00
bool get overrideSslCheck {
2024-02-02 20:37:27 +01:00
return _overrideSslCheck;
2022-09-30 02:24:49 +02:00
}
bool get hideZeroValues {
2024-02-02 20:37:27 +01:00
return _hideZeroValues;
}
int get selectedScreen {
return _selectedScreen;
}
bool get showingSnackbar {
return _showingSnackbar;
}
2022-10-26 14:26:09 +02:00
bool get useDynamicColor {
return _useDynamicColor;
}
int get staticColor {
return _staticColor;
}
2022-10-26 15:22:50 +02:00
bool get useThemeColorForStatus {
return _useThemeColorForStatus;
}
2023-05-20 21:12:52 +02:00
bool get showTimeLogs {
2024-02-02 20:37:27 +01:00
return _showTimeLogs;
2023-05-20 21:12:52 +02:00
}
bool get showIpLogs {
2024-02-02 20:37:27 +01:00
return _showIpLogs;
}
2023-05-20 22:57:38 +02:00
bool get combinedChartHome {
2024-02-02 20:37:27 +01:00
return _combinedChartHome;
2023-05-20 22:57:38 +02:00
}
2022-10-29 19:16:05 +02:00
String? get doNotRememberVersion {
return _doNotRememberVersion;
}
2023-04-30 22:54:39 +02:00
int? get selectedSettingsScreen {
return _selectedSettingsScreen;
}
2023-05-17 21:50:13 +02:00
GitHubRelease? get appUpdatesAvailable {
return _appUpdatesAvailable;
}
2023-09-09 21:17:01 +02:00
List<HomeTopItems> get homeTopItemsOrder {
return _homeTopItemsOrder;
}
2023-09-09 21:25:21 +02:00
bool get hideServerAddress {
2024-02-02 20:37:27 +01:00
return _hideServerAddress;
2023-09-09 21:25:21 +02:00
}
2024-02-02 20:37:27 +01:00
void setSupportsDynamicTheme(bool value) {
_supportsDynamicTheme = value;
}
void setAppInfo(PackageInfo appInfo) {
_appInfo = appInfo;
}
void setAndroidInfo(AndroidDeviceInfo deviceInfo) {
_androidDeviceInfo = deviceInfo;
}
void setIosInfo(IosDeviceInfo deviceInfo) {
_iosDeviceInfo = deviceInfo;
}
2022-09-27 15:43:52 +02:00
2022-09-29 23:12:24 +02:00
void setSelectedClientsTab(int tab) {
_selectedClientsTab = tab;
notifyListeners();
}
2022-10-07 20:48:05 +02:00
void setSelectedFiltersTab(int tab) {
_selectedFiltersTab = tab;
notifyListeners();
}
2022-09-30 01:23:28 +02:00
void addLog(AppLog log) {
2022-09-30 00:24:56 +02:00
_logs.add(log);
notifyListeners();
}
void setSelectedScreen(int screen) {
_selectedScreen = screen;
notifyListeners();
}
2022-10-09 20:03:17 +02:00
void setShowingSnackbar(bool status) async {
_showingSnackbar = status;
notifyListeners();
}
2023-05-02 13:42:01 +02:00
void setSelectedSettingsScreen({required int? screen, bool? notify}) {
2023-04-30 22:54:39 +02:00
_selectedSettingsScreen = screen;
2023-05-02 13:42:01 +02:00
if (notify == true) {
notifyListeners();
}
2023-04-30 22:54:39 +02:00
}
2023-05-25 21:14:26 +02:00
void setAppUpdatesAvailable(GitHubRelease? value) {
2023-05-17 21:50:13 +02:00
_appUpdatesAvailable = value;
notifyListeners();
}
2022-09-30 02:24:49 +02:00
Future<bool> setOverrideSslCheck(bool status) async {
2024-02-02 20:37:27 +01:00
try {
sharedPreferencesInstance.setBool('overrideSslCheck', status);
_overrideSslCheck = status;
2022-09-30 02:24:49 +02:00
notifyListeners();
return true;
2024-02-02 20:37:27 +01:00
} catch (e, stackTrace) {
Sentry.captureException(e, stackTrace: stackTrace);
2022-09-30 02:24:49 +02:00
return false;
}
}
Future<bool> setHideZeroValues(bool status) async {
2024-02-02 20:37:27 +01:00
try {
sharedPreferencesInstance.setBool('hideZeroValues', status);
_hideZeroValues = status;
notifyListeners();
return true;
2024-02-02 20:37:27 +01:00
} catch (e, stackTrace) {
Sentry.captureException(e, stackTrace: stackTrace);
return false;
}
}
2022-09-30 02:24:49 +02:00
2023-05-20 21:12:52 +02:00
Future<bool> setshowTimeLogs(bool status) async {
2024-02-02 20:37:27 +01:00
try {
sharedPreferencesInstance.setBool('showTimeLogs', status);
_showTimeLogs = status;
2023-05-20 21:12:52 +02:00
notifyListeners();
return true;
2024-02-02 20:37:27 +01:00
} catch (e, stackTrace) {
Sentry.captureException(e, stackTrace: stackTrace);
2023-05-20 21:12:52 +02:00
return false;
}
}
Future<bool> setShowIpLogs(bool status) async {
2024-02-02 20:37:27 +01:00
try {
sharedPreferencesInstance.setBool('showIpLogs', status);
_showIpLogs = status;
notifyListeners();
return true;
2024-02-02 20:37:27 +01:00
} catch (e, stackTrace) {
Sentry.captureException(e, stackTrace: stackTrace);
return false;
}
}
2022-09-27 15:43:52 +02:00
Future<bool> setSelectedTheme(int value) async {
2024-02-02 20:37:27 +01:00
try {
sharedPreferencesInstance.setInt('selectedTheme', value);
2022-09-27 15:43:52 +02:00
_selectedTheme = value;
notifyListeners();
return true;
2024-02-02 20:37:27 +01:00
} catch (e, stackTrace) {
Sentry.captureException(e, stackTrace: stackTrace);
2022-09-27 15:43:52 +02:00
return false;
}
}
2022-10-26 14:26:09 +02:00
Future<bool> setUseDynamicColor(bool value) async {
2024-02-02 20:37:27 +01:00
try {
sharedPreferencesInstance.setBool('useDynamicColor', value);
2022-10-26 14:26:09 +02:00
_useDynamicColor = value;
notifyListeners();
return true;
2024-02-02 20:37:27 +01:00
} catch (e, stackTrace) {
Sentry.captureException(e, stackTrace: stackTrace);
2022-10-26 15:22:50 +02:00
return false;
}
}
2023-05-20 22:57:38 +02:00
Future<bool> setCombinedChartHome(bool value) async {
2024-02-02 20:37:27 +01:00
try {
sharedPreferencesInstance.setBool('combinedChart', value);
_combinedChartHome = value;
2023-05-20 22:57:38 +02:00
notifyListeners();
return true;
2024-02-02 20:37:27 +01:00
} catch (e, stackTrace) {
Sentry.captureException(e, stackTrace: stackTrace);
2023-05-20 22:57:38 +02:00
return false;
}
}
2022-10-26 14:26:09 +02:00
Future<bool> setStaticColor(int value) async {
2024-02-02 20:37:27 +01:00
try {
sharedPreferencesInstance.setInt('staticColor', value);
2022-10-26 14:26:09 +02:00
_staticColor = value;
notifyListeners();
return true;
2024-02-02 20:37:27 +01:00
} catch (e, stackTrace) {
Sentry.captureException(e, stackTrace: stackTrace);
2022-10-26 14:26:09 +02:00
return false;
}
}
2023-09-09 21:17:01 +02:00
Future<bool> setHomeTopItemsOrder(List<HomeTopItems> order) async {
2024-02-02 20:37:27 +01:00
try {
sharedPreferencesInstance.setStringList('homeTopItemsOrder', List<String>.from(order.map((e) => e.name)));
2023-09-09 21:17:01 +02:00
_homeTopItemsOrder = order;
notifyListeners();
return true;
2024-02-02 20:37:27 +01:00
} catch (e, stackTrace) {
Sentry.captureException(e, stackTrace: stackTrace);
2023-09-09 21:17:01 +02:00
return false;
}
}
2023-09-09 21:25:21 +02:00
Future<bool> setHideServerAddress(bool value) async {
2024-02-02 20:37:27 +01:00
try {
sharedPreferencesInstance.setBool('hideServerAddress', value);
_hideServerAddress = value;
2023-09-09 21:25:21 +02:00
notifyListeners();
return true;
2024-02-02 20:37:27 +01:00
} catch (e, stackTrace) {
Sentry.captureException(e, stackTrace: stackTrace);
2023-09-09 21:25:21 +02:00
return false;
}
}
2022-10-29 19:16:05 +02:00
Future<bool> setDoNotRememberVersion(String value) async {
2024-02-02 20:37:27 +01:00
final updated = await sharedPreferencesInstance.setString('hideServerAddress', value);
return updated;
}
2024-02-02 20:37:27 +01:00
void saveFromSharedPreferences() {
_selectedTheme = sharedPreferencesInstance.getInt('selectedTheme') ?? 0;
_overrideSslCheck = sharedPreferencesInstance.getBool('overrideSslCheck') ?? false;
_hideZeroValues = sharedPreferencesInstance.getBool('hideZeroValues') ?? false;
_useDynamicColor = sharedPreferencesInstance.getBool('useDynamicColor') ?? true;
_staticColor = sharedPreferencesInstance.getInt('staticColor') ?? 0;
_showTimeLogs = sharedPreferencesInstance.getBool('showTimeLogs') ?? false;
_doNotRememberVersion = sharedPreferencesInstance.getString('doNotRememberVersion');
_showIpLogs = sharedPreferencesInstance.getBool('showIpLogs') ?? false;
_combinedChartHome = sharedPreferencesInstance.getBool('combinedChart') ?? false;
_hideServerAddress = sharedPreferencesInstance.getBool('hideServerAddress') ?? false;
if (sharedPreferencesInstance.getStringList('homeTopItemsOrder') != null) {
2023-09-09 21:17:01 +02:00
try {
2024-02-07 19:55:44 +01:00
_homeTopItemsOrder = List<HomeTopItems>.from(
2024-02-02 20:37:27 +01:00
List<String>.from(sharedPreferencesInstance.getStringList('homeTopItemsOrder')!).map((e) {
2023-09-09 21:17:01 +02:00
switch (e) {
case 'queriedDomains':
return HomeTopItems.queriedDomains;
case 'blockedDomains':
return HomeTopItems.blockedDomains;
case 'recurrentClients':
return HomeTopItems.recurrentClients;
case 'topUpstreams':
return HomeTopItems.topUpstreams;
case 'avgUpstreamResponseTime':
return HomeTopItems.avgUpstreamResponseTime;
2023-09-09 21:17:01 +02:00
default:
return null;
}
}).where((e) => e != null).toList()
);
} catch (e) {
Sentry.captureException(e);
_homeTopItemsOrder = homeTopItemsDefaultOrder;
}
}
2022-09-27 15:43:52 +02:00
}
}