diff --git a/mobile/lib/domain/models/config/advanced_config.dart b/mobile/lib/domain/models/config/advanced_config.dart new file mode 100644 index 0000000000..73574a3a68 --- /dev/null +++ b/mobile/lib/domain/models/config/advanced_config.dart @@ -0,0 +1,33 @@ +class AdvancedConfig { + final bool troubleshooting; + final bool enableHapticFeedback; + final bool readonlyModeEnabled; + + const AdvancedConfig({ + this.troubleshooting = false, + this.enableHapticFeedback = true, + this.readonlyModeEnabled = false, + }); + + AdvancedConfig copyWith({bool? troubleshooting, bool? enableHapticFeedback, bool? readonlyModeEnabled}) => + AdvancedConfig( + troubleshooting: troubleshooting ?? this.troubleshooting, + enableHapticFeedback: enableHapticFeedback ?? this.enableHapticFeedback, + readonlyModeEnabled: readonlyModeEnabled ?? this.readonlyModeEnabled, + ); + + @override + bool operator ==(Object other) => + identical(this, other) || + (other is AdvancedConfig && + other.troubleshooting == troubleshooting && + other.enableHapticFeedback == enableHapticFeedback && + other.readonlyModeEnabled == readonlyModeEnabled); + + @override + int get hashCode => Object.hash(troubleshooting, enableHapticFeedback, readonlyModeEnabled); + + @override + String toString() => + 'AdvancedConfig(troubleshooting: $troubleshooting, enableHapticFeedback: $enableHapticFeedback, readonlyModeEnabled: $readonlyModeEnabled)'; +} diff --git a/mobile/lib/domain/models/config/app_config.dart b/mobile/lib/domain/models/config/app_config.dart index bc089e621e..3ff6f192c7 100644 --- a/mobile/lib/domain/models/config/app_config.dart +++ b/mobile/lib/domain/models/config/app_config.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:immich_mobile/constants/colors.dart'; import 'package:immich_mobile/constants/enums.dart'; +import 'package:immich_mobile/domain/models/config/advanced_config.dart'; import 'package:immich_mobile/domain/models/config/album_config.dart'; import 'package:immich_mobile/domain/models/config/backup_config.dart'; import 'package:immich_mobile/domain/models/config/cleanup_config.dart'; @@ -43,6 +44,7 @@ abstract class AppConfig with _$AppConfig { @Default(NetworkConfig()) NetworkConfig network, @Default(ShareConfig()) ShareConfig share, @Default(FeatureMessageConfig()) FeatureMessageConfig featureMessage, + @Default(AdvancedConfig()) AdvancedConfig advanced, }) = _AppConfig; T read(SettingsKey key) => @@ -93,6 +95,9 @@ abstract class AppConfig with _$AppConfig { .slideshowLook => slideshow.look, .slideshowDirection => slideshow.direction, .featureMessageSeenRelease => featureMessage.seenRelease, + .advancedTroubleshooting => advanced.troubleshooting, + .advancedEnableHapticFeedback => advanced.enableHapticFeedback, + .advancedReadonlyModeEnabled => advanced.readonlyModeEnabled, }) as T; @@ -149,6 +154,9 @@ abstract class AppConfig with _$AppConfig { .slideshowLook => copyWith(slideshow: slideshow.copyWith(look: value as SlideshowLook)), .slideshowDirection => copyWith(slideshow: slideshow.copyWith(direction: value as SlideshowDirection)), .featureMessageSeenRelease => copyWith(featureMessage: featureMessage.copyWith(seenRelease: value as SemVer)), + .advancedTroubleshooting => copyWith(advanced: advanced.copyWith(troubleshooting: value as bool)), + .advancedEnableHapticFeedback => copyWith(advanced: advanced.copyWith(enableHapticFeedback: value as bool)), + .advancedReadonlyModeEnabled => copyWith(advanced: advanced.copyWith(readonlyModeEnabled: value as bool)), }; } } diff --git a/mobile/lib/domain/models/setting.model.dart b/mobile/lib/domain/models/setting.model.dart deleted file mode 100644 index d6d9e2902b..0000000000 --- a/mobile/lib/domain/models/setting.model.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:immich_mobile/domain/models/store.model.dart'; - -enum Setting { - advancedTroubleshooting(StoreKey.advancedTroubleshooting, false); - - const Setting(this.storeKey, this.defaultValue); - - final StoreKey storeKey; - final T defaultValue; -} diff --git a/mobile/lib/domain/models/settings_key.dart b/mobile/lib/domain/models/settings_key.dart index 85e58ffcf1..638962376f 100644 --- a/mobile/lib/domain/models/settings_key.dart +++ b/mobile/lib/domain/models/settings_key.dart @@ -78,7 +78,12 @@ enum SettingsKey { slideshowDirection(codec: EnumCodec(SlideshowDirection.values)), // Feature message - featureMessageSeenRelease(codec: SemVerCodec()); + featureMessageSeenRelease(codec: SemVerCodec()), + + // Advanced + advancedTroubleshooting(), + advancedEnableHapticFeedback(), + advancedReadonlyModeEnabled(); final ValueCodec? _codecOverride; diff --git a/mobile/lib/domain/models/store.model.dart b/mobile/lib/domain/models/store.model.dart index 086138e550..2c4042b044 100644 --- a/mobile/lib/domain/models/store.model.dart +++ b/mobile/lib/domain/models/store.model.dart @@ -3,16 +3,15 @@ enum StoreKey { version._(0), deviceId._(4), - advancedTroubleshooting._(114), - enableHapticFeedback._(126), manageLocalMediaAndroid._(137), - // Read-only Mode settings - readonlyModeEnabled._(138), syncMigrationStatus._(1013), // Legacy keys that have been migrated to the new metadata store + legacyAdvancedTroubleshooting._(114), + legacyEnableHapticFeedback._(126), + legacyReadonlyModeEnabled._(138), legacyServerUrl._(10), legacyAccessToken._(11), legacyServerEndpoint._(12), diff --git a/mobile/lib/domain/services/setting.service.dart b/mobile/lib/domain/services/setting.service.dart deleted file mode 100644 index 1823e46cf9..0000000000 --- a/mobile/lib/domain/services/setting.service.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:immich_mobile/domain/models/setting.model.dart'; -import 'package:immich_mobile/domain/services/store.service.dart'; - -// Singleton instance of SettingsService, to use in places -// where reactivity is not required -// ignore: non_constant_identifier_names -final AppSetting = SettingsService(storeService: StoreService.I); - -class SettingsService { - final StoreService _storeService; - - const SettingsService({required this._storeService}); - - T get(Setting setting) => _storeService.get(setting.storeKey, setting.defaultValue); - - Future set(Setting setting, T value) => _storeService.put(setting.storeKey, value); - - Stream watch(Setting setting) => _storeService.watch(setting.storeKey).map((v) => v ?? setting.defaultValue); -} diff --git a/mobile/lib/presentation/actions/asset_debug.action.dart b/mobile/lib/presentation/actions/asset_debug.action.dart index 16ad15700e..35910c7eb8 100644 --- a/mobile/lib/presentation/actions/asset_debug.action.dart +++ b/mobile/lib/presentation/actions/asset_debug.action.dart @@ -6,7 +6,7 @@ import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/generated/translations.g.dart'; import 'package:immich_mobile/presentation/actions/action.dart'; -import 'package:immich_mobile/providers/infrastructure/setting.provider.dart'; +import 'package:immich_mobile/providers/infrastructure/settings.provider.dart'; import 'package:immich_mobile/routing/router.dart'; class AssetDebugAction extends AssetActionBuilder { @@ -15,7 +15,7 @@ class AssetDebugAction extends AssetActionBuilder { @override ActionItem? create(BuildContext context, WidgetRef ref) { final asset = ref.watch(assetsActionProvider(source)).assets.singleOrNull; - final troubleshootEnabled = ref.watch(settingsProvider.notifier).get(.advancedTroubleshooting); + final troubleshootEnabled = ref.watch(appConfigProvider.select((s) => s.advanced.troubleshooting)); if (!troubleshootEnabled || asset == null) { return null; } diff --git a/mobile/lib/presentation/widgets/asset_viewer/viewer_kebab_menu.widget.dart b/mobile/lib/presentation/widgets/asset_viewer/viewer_kebab_menu.widget.dart index cbbc851108..005fad450c 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/viewer_kebab_menu.widget.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/viewer_kebab_menu.widget.dart @@ -6,7 +6,7 @@ import 'package:immich_mobile/extensions/build_context_extensions.dart'; import 'package:immich_mobile/providers/asset_viewer/asset_viewer.provider.dart'; import 'package:immich_mobile/providers/cast.provider.dart'; import 'package:immich_mobile/providers/infrastructure/current_album.provider.dart'; -import 'package:immich_mobile/providers/infrastructure/setting.provider.dart'; +import 'package:immich_mobile/providers/infrastructure/settings.provider.dart'; import 'package:immich_mobile/providers/infrastructure/timeline.provider.dart'; import 'package:immich_mobile/providers/routes.provider.dart'; import 'package:immich_mobile/providers/server_info.provider.dart'; @@ -34,7 +34,7 @@ class ViewerKebabMenu extends ConsumerWidget { final isInLockedView = ref.watch(inLockedViewProvider); final currentAlbum = ref.watch(currentRemoteAlbumProvider); final isArchived = asset is RemoteAsset && asset.visibility == AssetVisibility.archive; - final advancedTroubleshooting = ref.watch(settingsProvider.notifier).get(.advancedTroubleshooting); + final advancedTroubleshooting = ref.watch(appConfigProvider.select((c) => c.advanced.troubleshooting)); final actionContext = ActionButtonContext( asset: asset, diff --git a/mobile/lib/providers/haptic_feedback.provider.dart b/mobile/lib/providers/haptic_feedback.provider.dart index 850935163d..cc7b7a4e11 100644 --- a/mobile/lib/providers/haptic_feedback.provider.dart +++ b/mobile/lib/providers/haptic_feedback.provider.dart @@ -2,8 +2,7 @@ import 'dart:async'; import 'package:flutter/services.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:immich_mobile/providers/app_settings.provider.dart'; -import 'package:immich_mobile/services/app_settings.service.dart'; +import 'package:immich_mobile/providers/infrastructure/settings.provider.dart'; final hapticFeedbackProvider = StateNotifierProvider((ref) { return HapticNotifier(ref); @@ -16,31 +15,31 @@ class HapticNotifier extends StateNotifier { HapticNotifier(this._ref) : super(null); void selectionClick() { - if (_ref.read(appSettingsServiceProvider).getSetting(AppSettingsEnum.enableHapticFeedback)) { + if (_ref.read(appConfigProvider).advanced.enableHapticFeedback) { unawaited(HapticFeedback.selectionClick()); } } void lightImpact() { - if (_ref.read(appSettingsServiceProvider).getSetting(AppSettingsEnum.enableHapticFeedback)) { + if (_ref.read(appConfigProvider).advanced.enableHapticFeedback) { unawaited(HapticFeedback.lightImpact()); } } void mediumImpact() { - if (_ref.read(appSettingsServiceProvider).getSetting(AppSettingsEnum.enableHapticFeedback)) { + if (_ref.read(appConfigProvider).advanced.enableHapticFeedback) { unawaited(HapticFeedback.mediumImpact()); } } void heavyImpact() { - if (_ref.read(appSettingsServiceProvider).getSetting(AppSettingsEnum.enableHapticFeedback)) { + if (_ref.read(appConfigProvider).advanced.enableHapticFeedback) { unawaited(HapticFeedback.heavyImpact()); } } void vibrate() { - if (_ref.read(appSettingsServiceProvider).getSetting(AppSettingsEnum.enableHapticFeedback)) { + if (_ref.read(appConfigProvider).advanced.enableHapticFeedback) { unawaited(HapticFeedback.vibrate()); } } diff --git a/mobile/lib/providers/infrastructure/readonly_mode.provider.dart b/mobile/lib/providers/infrastructure/readonly_mode.provider.dart index be94a8a341..286b533193 100644 --- a/mobile/lib/providers/infrastructure/readonly_mode.provider.dart +++ b/mobile/lib/providers/infrastructure/readonly_mode.provider.dart @@ -1,24 +1,19 @@ import 'dart:async'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:immich_mobile/providers/app_settings.provider.dart'; import 'package:immich_mobile/providers/auth.provider.dart'; +import 'package:immich_mobile/providers/infrastructure/settings.provider.dart'; import 'package:immich_mobile/routing/router.dart'; -import 'package:immich_mobile/services/app_settings.service.dart'; class ReadOnlyModeNotifier extends Notifier { - late AppSettingsService _appSettingService; - @override bool build() { - _appSettingService = ref.read(appSettingsServiceProvider); - final readonlyMode = _appSettingService.getSetting(AppSettingsEnum.readonlyModeEnabled); - return readonlyMode; + return ref.read(appConfigProvider).advanced.readonlyModeEnabled; } void setMode(bool value) { final isLoggedIn = ref.read(authProvider).isAuthenticated; - unawaited(_appSettingService.setSetting(AppSettingsEnum.readonlyModeEnabled, value)); + unawaited(ref.read(settingsProvider).write(.advancedReadonlyModeEnabled, value)); state = value; if (value && isLoggedIn) { diff --git a/mobile/lib/providers/infrastructure/setting.provider.dart b/mobile/lib/providers/infrastructure/setting.provider.dart deleted file mode 100644 index 9e33017cab..0000000000 --- a/mobile/lib/providers/infrastructure/setting.provider.dart +++ /dev/null @@ -1,22 +0,0 @@ -// ignore_for_file: use-ref-and-state-synchronously - -import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:immich_mobile/domain/models/setting.model.dart'; -import 'package:immich_mobile/domain/services/setting.service.dart'; -import 'package:immich_mobile/providers/infrastructure/store.provider.dart'; - -class SettingsNotifier extends Notifier { - @override - SettingsService build() => SettingsService(storeService: ref.read(storeServiceProvider)); - - T get(Setting setting) => state.get(setting); - - Future set(Setting setting, T value) async { - await state.set(setting, value); - ref.invalidateSelf(); - } - - Stream watch(Setting setting) => state.watch(setting); -} - -final settingsProvider = NotifierProvider(SettingsNotifier.new); diff --git a/mobile/lib/services/app_settings.service.dart b/mobile/lib/services/app_settings.service.dart index 28bce32bb5..4a8b76b1ce 100644 --- a/mobile/lib/services/app_settings.service.dart +++ b/mobile/lib/services/app_settings.service.dart @@ -2,10 +2,7 @@ import 'package:immich_mobile/domain/models/store.model.dart'; import 'package:immich_mobile/entities/store.entity.dart'; enum AppSettingsEnum { - advancedTroubleshooting(StoreKey.advancedTroubleshooting, null, false), - manageLocalMediaAndroid(StoreKey.manageLocalMediaAndroid, null, false), - enableHapticFeedback(StoreKey.enableHapticFeedback, null, true), - readonlyModeEnabled(StoreKey.readonlyModeEnabled, "readonlyModeEnabled", false); + manageLocalMediaAndroid(StoreKey.manageLocalMediaAndroid, null, false); const AppSettingsEnum(this.storeKey, this.hiveKey, this.defaultValue); diff --git a/mobile/lib/utils/bootstrap.dart b/mobile/lib/utils/bootstrap.dart index fdf4d6344f..48c3dfff12 100644 --- a/mobile/lib/utils/bootstrap.dart +++ b/mobile/lib/utils/bootstrap.dart @@ -54,9 +54,6 @@ abstract final class Bootstrap { await StoreService.init(storeRepository: storeRepo, listenUpdates: listenStoreUpdates); await SessionRepository.ensureInitialized(drift); - - await SessionRepository.ensureInitialized(drift); - final settingsRepo = await SettingsRepository.ensureInitialized(drift); final logDb = await _initLogger(settingsRepository: settingsRepo, shouldBufferLogs: shouldBufferLogs); diff --git a/mobile/lib/utils/migration.dart b/mobile/lib/utils/migration.dart index 6a67fea899..1ab3b2902f 100644 --- a/mobile/lib/utils/migration.dart +++ b/mobile/lib/utils/migration.dart @@ -23,7 +23,7 @@ import 'package:immich_mobile/infrastructure/repositories/settings.repository.da import 'package:immich_mobile/models/auth/auxilary_endpoint.model.dart'; import 'package:immich_mobile/providers/album/album_sort_by_options.provider.dart'; -const int targetVersion = 27; +const int targetVersion = 28; Future migrateDatabaseIfNeeded(Drift drift) async { final int? storedVersion = Store.tryGet(StoreKey.version); @@ -44,6 +44,10 @@ Future migrateDatabaseIfNeeded(Drift drift) async { await _migrateTo27(drift); } + if (version < 28) { + await _migrateTo28(drift); + } + await Store.put(StoreKey.version, targetVersion); return; } @@ -161,6 +165,16 @@ Future _migrateTo27(Drift drift) async { await SessionRepository.instance.refresh(); } +Future _migrateTo28(Drift drift) async { + final migrator = _StoreMigrator.settings(drift); + await migrator.migrateBool(StoreKey.legacyAdvancedTroubleshooting, SettingsKey.advancedTroubleshooting); + await migrator.migrateBool(StoreKey.legacyEnableHapticFeedback, SettingsKey.advancedEnableHapticFeedback); + await migrator.migrateBool(StoreKey.legacyReadonlyModeEnabled, SettingsKey.advancedReadonlyModeEnabled); + await migrator.complete(); + + await SettingsRepository.instance.refresh(); +} + Future _migrateAlbumSortMode(_StoreMigrator migrator) async { final raw = await migrator.readLegacyStoreInt(StoreKey.legacySelectedAlbumSortOrder.id); final mode = AlbumSortMode.values.firstWhereOrNull((e) => raw != null && e.storeIndex == raw); diff --git a/mobile/lib/widgets/settings/advanced_settings.dart b/mobile/lib/widgets/settings/advanced_settings.dart index cb035a22e9..5eb104ce32 100644 --- a/mobile/lib/widgets/settings/advanced_settings.dart +++ b/mobile/lib/widgets/settings/advanced_settings.dart @@ -28,7 +28,11 @@ class AdvancedSettings extends HookConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { - final advancedTroubleshooting = useAppSettingsState(AppSettingsEnum.advancedTroubleshooting); + final advancedTroubleshooting = useState(ref.watch(appConfigProvider).advanced.troubleshooting); + useValueChanged( + advancedTroubleshooting.value, + (_, __) => unawaited(ref.read(settingsProvider).write(.advancedTroubleshooting, advancedTroubleshooting.value)), + ); final manageLocalMediaAndroid = useAppSettingsState(AppSettingsEnum.manageLocalMediaAndroid); final isManageMediaSupported = useState(false); final manageMediaAndroidPermission = useState(false); @@ -38,7 +42,7 @@ class AdvancedSettings extends HookConsumerWidget { preferRemote.value, (_, __) => unawaited(ref.read(settingsProvider).write(.imagePreferRemote, preferRemote.value)), ); - final readonlyModeEnabled = useAppSettingsState(AppSettingsEnum.readonlyModeEnabled); + final readonlyModeEnabled = useState(ref.watch(appConfigProvider).advanced.readonlyModeEnabled); final logLevel = Level.LEVELS[levelId.value].name; diff --git a/mobile/lib/widgets/settings/preference_settings/haptic_setting.dart b/mobile/lib/widgets/settings/preference_settings/haptic_setting.dart index c5003a9ced..0587518027 100644 --- a/mobile/lib/widgets/settings/preference_settings/haptic_setting.dart +++ b/mobile/lib/widgets/settings/preference_settings/haptic_setting.dart @@ -1,21 +1,27 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/extensions/translate_extensions.dart'; -import 'package:immich_mobile/services/app_settings.service.dart'; -import 'package:immich_mobile/utils/hooks/app_settings_update_hook.dart'; +import 'package:immich_mobile/providers/infrastructure/settings.provider.dart'; import 'package:immich_mobile/widgets/settings/setting_group_title.dart'; import 'package:immich_mobile/widgets/settings/settings_switch_list_tile.dart'; -class HapticSetting extends HookWidget { +class HapticSetting extends HookConsumerWidget { const HapticSetting({super.key}); @override - Widget build(BuildContext context) { - final hapticFeedbackSetting = useAppSettingsState(AppSettingsEnum.enableHapticFeedback); - final isHapticFeedbackEnabled = useValueNotifier(hapticFeedbackSetting.value); + Widget build(BuildContext context, WidgetRef ref) { + final isHapticFeedbackEnabled = useState(ref.watch(appConfigProvider).advanced.enableHapticFeedback); + useValueChanged( + isHapticFeedbackEnabled.value, + (_, __) => + unawaited(ref.read(settingsProvider).write(.advancedEnableHapticFeedback, isHapticFeedbackEnabled.value)), + ); void onHapticFeedbackChange(bool isEnabled) { - hapticFeedbackSetting.value = isEnabled; + isHapticFeedbackEnabled.value = isEnabled; } return Column( diff --git a/mobile/test/domain/services/store_service_test.dart b/mobile/test/domain/services/store_service_test.dart index 379976bbb4..f1616aa2eb 100644 --- a/mobile/test/domain/services/store_service_test.dart +++ b/mobile/test/domain/services/store_service_test.dart @@ -23,12 +23,12 @@ void main() { // For generics, we need to provide fallback to each concrete type to avoid runtime errors registerFallbackValue(StoreKey.legacyAccessToken); registerFallbackValue(StoreKey.version); - registerFallbackValue(StoreKey.advancedTroubleshooting); + registerFallbackValue(StoreKey.legacyAdvancedTroubleshooting); when(() => mockDriftStoreRepo.getAll()).thenAnswer( (_) async => [ const StoreDto(StoreKey.legacyAccessToken, _kAccessToken), - const StoreDto(StoreKey.advancedTroubleshooting, _kAdvancedTroubleshooting), + const StoreDto(StoreKey.legacyAdvancedTroubleshooting, _kAdvancedTroubleshooting), const StoreDto(StoreKey.version, _kVersion), ], ); @@ -46,7 +46,7 @@ void main() { test('Populates the internal cache on init', () { verify(() => mockDriftStoreRepo.getAll()).called(1); expect(sut.tryGet(StoreKey.legacyAccessToken), _kAccessToken); - expect(sut.tryGet(StoreKey.advancedTroubleshooting), _kAdvancedTroubleshooting); + expect(sut.tryGet(StoreKey.legacyAdvancedTroubleshooting), _kAdvancedTroubleshooting); expect(sut.tryGet(StoreKey.version), _kVersion); // Other keys should be null expect(sut.tryGet(StoreKey.deviceId), isNull); @@ -147,7 +147,7 @@ void main() { await sut.clear(); verify(() => mockDriftStoreRepo.deleteAll()).called(1); expect(sut.tryGet(StoreKey.legacyAccessToken), isNull); - expect(sut.tryGet(StoreKey.advancedTroubleshooting), isNull); + expect(sut.tryGet(StoreKey.legacyAdvancedTroubleshooting), isNull); expect(sut.tryGet(StoreKey.version), isNull); }); }); diff --git a/mobile/test/infrastructure/repositories/store_repository_test.dart b/mobile/test/infrastructure/repositories/store_repository_test.dart index 2286b99efe..9962f34314 100644 --- a/mobile/test/infrastructure/repositories/store_repository_test.dart +++ b/mobile/test/infrastructure/repositories/store_repository_test.dart @@ -17,7 +17,7 @@ Future _populateStore(Drift db) async { batch.insert( db.storeEntity, StoreEntityCompanion( - id: Value(StoreKey.advancedTroubleshooting.id), + id: Value(StoreKey.legacyAdvancedTroubleshooting.id), intValue: const Value(_kTestAdvancedTroubleshooting ? 1 : 0), stringValue: const Value(null), ), @@ -72,10 +72,10 @@ void main() { }); test('converts bool', () async { - bool? advancedTroubleshooting = await sut.tryGet(StoreKey.advancedTroubleshooting); + bool? advancedTroubleshooting = await sut.tryGet(StoreKey.legacyAdvancedTroubleshooting); expect(advancedTroubleshooting, isNull); - await sut.upsert(StoreKey.advancedTroubleshooting, _kTestAdvancedTroubleshooting); - advancedTroubleshooting = await sut.tryGet(StoreKey.advancedTroubleshooting); + await sut.upsert(StoreKey.legacyAdvancedTroubleshooting, _kTestAdvancedTroubleshooting); + advancedTroubleshooting = await sut.tryGet(StoreKey.legacyAdvancedTroubleshooting); expect(advancedTroubleshooting, _kTestAdvancedTroubleshooting); }); }); @@ -86,10 +86,10 @@ void main() { }); test('delete()', () async { - bool? advancedTroubleshooting = await sut.tryGet(StoreKey.advancedTroubleshooting); + bool? advancedTroubleshooting = await sut.tryGet(StoreKey.legacyAdvancedTroubleshooting); expect(advancedTroubleshooting, isFalse); - await sut.delete(StoreKey.advancedTroubleshooting); - advancedTroubleshooting = await sut.tryGet(StoreKey.advancedTroubleshooting); + await sut.delete(StoreKey.legacyAdvancedTroubleshooting); + advancedTroubleshooting = await sut.tryGet(StoreKey.legacyAdvancedTroubleshooting); expect(advancedTroubleshooting, isNull); }); @@ -136,12 +136,12 @@ void main() { [ const StoreDto(StoreKey.version, _kTestVersion), const StoreDto(StoreKey.legacyAccessToken, _kTestAccessToken), - const StoreDto(StoreKey.advancedTroubleshooting, _kTestAdvancedTroubleshooting), + const StoreDto(StoreKey.legacyAdvancedTroubleshooting, _kTestAdvancedTroubleshooting), ], [ const StoreDto(StoreKey.version, _kTestVersion + 10), const StoreDto(StoreKey.legacyAccessToken, _kTestAccessToken), - const StoreDto(StoreKey.advancedTroubleshooting, _kTestAdvancedTroubleshooting), + const StoreDto(StoreKey.legacyAdvancedTroubleshooting, _kTestAdvancedTroubleshooting), ], ]), ), diff --git a/mobile/test/unit/presentation/actions/asset_debug_action_test.dart b/mobile/test/unit/presentation/actions/asset_debug_action_test.dart index f545075809..e714c12018 100644 --- a/mobile/test/unit/presentation/actions/asset_debug_action_test.dart +++ b/mobile/test/unit/presentation/actions/asset_debug_action_test.dart @@ -1,6 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:immich_mobile/domain/models/store.model.dart'; -import 'package:immich_mobile/domain/services/store.service.dart'; +import 'package:immich_mobile/infrastructure/repositories/settings.repository.dart'; import 'package:immich_mobile/presentation/actions/action.widget.dart'; import 'package:immich_mobile/presentation/actions/asset_debug.action.dart'; import 'package:immich_ui/immich_ui.dart'; @@ -13,7 +12,7 @@ void main() { setUp(() async { context = await PresentationContext.create(); - await StoreService.I.put(StoreKey.advancedTroubleshooting, true); + await SettingsRepository.instance.write(.advancedTroubleshooting, true); }); tearDown(() async { @@ -42,7 +41,7 @@ void main() { }); testWidgets('hidden when advanced troubleshooting is off', (tester) async { - await StoreService.I.put(StoreKey.advancedTroubleshooting, false); + await SettingsRepository.instance.write(.advancedTroubleshooting, false); await tester.pumpTestWidget( context,