From 085990c854d2b93fa23725b3eaf14c01ca18a9d8 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Sat, 3 Jul 2021 17:17:43 +0900 Subject: [PATCH] fixed tests --- lib/model/settings/screen_on.dart | 4 ++-- lib/model/settings/settings.dart | 6 +++--- lib/services/services.dart | 3 +++ lib/services/window_service.dart | 19 +++++++++++++++---- lib/widgets/viewer/entry_action_delegate.dart | 5 ++--- lib/widgets/viewer/entry_viewer_stack.dart | 7 +++---- test/fake/window_service.dart | 8 ++++++++ test/model/collection_source_test.dart | 3 +++ 8 files changed, 39 insertions(+), 16 deletions(-) create mode 100644 test/fake/window_service.dart diff --git a/lib/model/settings/screen_on.dart b/lib/model/settings/screen_on.dart index ff7e851f0..acf1ebf8b 100644 --- a/lib/model/settings/screen_on.dart +++ b/lib/model/settings/screen_on.dart @@ -1,4 +1,4 @@ -import 'package:aves/services/window_service.dart'; +import 'package:aves/services/services.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:flutter/widgets.dart'; @@ -19,6 +19,6 @@ extension ExtraKeepScreenOn on KeepScreenOn { } void apply() { - WindowService.keepScreenOn(this == KeepScreenOn.always); + windowService.keepScreenOn(this == KeepScreenOn.always); } } diff --git a/lib/model/settings/settings.dart b/lib/model/settings/settings.dart index 7da176835..3bc70e6f9 100644 --- a/lib/model/settings/settings.dart +++ b/lib/model/settings/settings.dart @@ -4,7 +4,7 @@ import 'package:aves/model/filters/filters.dart'; import 'package:aves/model/settings/enums.dart'; import 'package:aves/model/settings/screen_on.dart'; import 'package:aves/model/source/enums.dart'; -import 'package:aves/services/window_service.dart'; +import 'package:aves/services/services.dart'; import 'package:aves/utils/pedantic.dart'; import 'package:collection/collection.dart'; import 'package:firebase_core/firebase_core.dart'; @@ -99,7 +99,7 @@ class Settings extends ChangeNotifier { Future init() async { _prefs = await SharedPreferences.getInstance(); - _isRotationLocked = await WindowService.isRotationLocked(); + _isRotationLocked = await windowService.isRotationLocked(); } // Crashlytics initialization is separated from the main settings initialization @@ -385,7 +385,7 @@ class Settings extends ChangeNotifier { if (_isRotationLocked != newValue) { _isRotationLocked = newValue; if (!_isRotationLocked) { - WindowService.requestOrientation(); + windowService.requestOrientation(); } notifyListeners(); } diff --git a/lib/services/services.dart b/lib/services/services.dart index 1ffdf90b6..04c0feebf 100644 --- a/lib/services/services.dart +++ b/lib/services/services.dart @@ -6,6 +6,7 @@ import 'package:aves/services/media_store_service.dart'; import 'package:aves/services/metadata_service.dart'; import 'package:aves/services/storage_service.dart'; import 'package:aves/services/time_service.dart'; +import 'package:aves/services/window_service.dart'; import 'package:get_it/get_it.dart'; import 'package:path/path.dart' as p; @@ -21,6 +22,7 @@ final MediaStoreService mediaStoreService = getIt(); final MetadataService metadataService = getIt(); final StorageService storageService = getIt(); final TimeService timeService = getIt(); +final WindowService windowService = getIt(); void initPlatformServices() { getIt.registerLazySingleton(() => p.Context()); @@ -33,4 +35,5 @@ void initPlatformServices() { getIt.registerLazySingleton(() => PlatformMetadataService()); getIt.registerLazySingleton(() => PlatformStorageService()); getIt.registerLazySingleton(() => PlatformTimeService()); + getIt.registerLazySingleton(() => PlatformWindowService()); } diff --git a/lib/services/window_service.dart b/lib/services/window_service.dart index 3495fa33a..53659781b 100644 --- a/lib/services/window_service.dart +++ b/lib/services/window_service.dart @@ -2,10 +2,19 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; -class WindowService { +abstract class WindowService { + Future keepScreenOn(bool on); + + Future isRotationLocked(); + + Future requestOrientation([Orientation? orientation]); +} + +class PlatformWindowService implements WindowService { static const platform = MethodChannel('deckers.thibault/aves/window'); - static Future keepScreenOn(bool on) async { + @override + Future keepScreenOn(bool on) async { try { await platform.invokeMethod('keepScreenOn', { 'on': on, @@ -15,7 +24,8 @@ class WindowService { } } - static Future isRotationLocked() async { + @override + Future isRotationLocked() async { try { final result = await platform.invokeMethod('isRotationLocked'); if (result != null) return result as bool; @@ -25,7 +35,8 @@ class WindowService { return false; } - static Future requestOrientation([Orientation? orientation]) async { + @override + Future requestOrientation([Orientation? orientation]) async { // cf Android `ActivityInfo.ScreenOrientation` late final int orientationCode; switch (orientation) { diff --git a/lib/widgets/viewer/entry_action_delegate.dart b/lib/widgets/viewer/entry_action_delegate.dart index 4f6480a3e..05fbe3821 100644 --- a/lib/widgets/viewer/entry_action_delegate.dart +++ b/lib/widgets/viewer/entry_action_delegate.dart @@ -12,7 +12,6 @@ import 'package:aves/ref/mime_types.dart'; import 'package:aves/services/android_app_service.dart'; import 'package:aves/services/image_op_events.dart'; import 'package:aves/services/services.dart'; -import 'package:aves/services/window_service.dart'; import 'package:aves/theme/durations.dart'; import 'package:aves/utils/pedantic.dart'; import 'package:aves/widgets/collection/collection_page.dart'; @@ -124,10 +123,10 @@ class EntryActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAwareMix Future _rotateScreen(BuildContext context) async { switch (context.read().orientation) { case Orientation.landscape: - await WindowService.requestOrientation(Orientation.portrait); + await windowService.requestOrientation(Orientation.portrait); break; case Orientation.portrait: - await WindowService.requestOrientation(Orientation.landscape); + await windowService.requestOrientation(Orientation.landscape); break; } } diff --git a/lib/widgets/viewer/entry_viewer_stack.dart b/lib/widgets/viewer/entry_viewer_stack.dart index ea196c17a..ad5678289 100644 --- a/lib/widgets/viewer/entry_viewer_stack.dart +++ b/lib/widgets/viewer/entry_viewer_stack.dart @@ -9,7 +9,6 @@ import 'package:aves/model/settings/enums.dart'; import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/source/collection_lens.dart'; import 'package:aves/services/services.dart'; -import 'package:aves/services/window_service.dart'; import 'package:aves/theme/durations.dart'; import 'package:aves/utils/change_notifier.dart'; import 'package:aves/widgets/collection/collection_page.dart'; @@ -122,7 +121,7 @@ class _EntryViewerStackState extends State with SingleTickerPr WidgetsBinding.instance!.addObserver(this); WidgetsBinding.instance!.addPostFrameCallback((_) => _initOverlay()); if (settings.keepScreenOn == KeepScreenOn.viewerOnly) { - WindowService.keepScreenOn(true); + windowService.keepScreenOn(true); } } @@ -511,9 +510,9 @@ class _EntryViewerStackState extends State with SingleTickerPr void _onLeave() { _showSystemUI(); - WindowService.requestOrientation(); + windowService.requestOrientation(); if (settings.keepScreenOn == KeepScreenOn.viewerOnly) { - WindowService.keepScreenOn(false); + windowService.keepScreenOn(false); } } diff --git a/test/fake/window_service.dart b/test/fake/window_service.dart new file mode 100644 index 000000000..07cb2f1f8 --- /dev/null +++ b/test/fake/window_service.dart @@ -0,0 +1,8 @@ +import 'package:aves/services/window_service.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter_test/flutter_test.dart'; + +class FakeWindowService extends Fake implements WindowService { + @override + Future isRotationLocked() => SynchronousFuture(false); +} diff --git a/test/model/collection_source_test.dart b/test/model/collection_source_test.dart index 9c69ec17d..b2767d30d 100644 --- a/test/model/collection_source_test.dart +++ b/test/model/collection_source_test.dart @@ -15,6 +15,7 @@ import 'package:aves/services/metadata_service.dart'; import 'package:aves/services/services.dart'; import 'package:aves/services/storage_service.dart'; import 'package:aves/services/time_service.dart'; +import 'package:aves/services/window_service.dart'; import 'package:aves/utils/android_file_utils.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -27,6 +28,7 @@ import '../fake/metadata_db.dart'; import '../fake/metadata_service.dart'; import '../fake/storage_service.dart'; import '../fake/time_service.dart'; +import '../fake/window_service.dart'; void main() { const testAlbum = '${FakeStorageService.primaryPath}Pictures/test'; @@ -44,6 +46,7 @@ void main() { getIt.registerLazySingleton(() => FakeMetadataService()); getIt.registerLazySingleton(() => FakeStorageService()); getIt.registerLazySingleton(() => FakeTimeService()); + getIt.registerLazySingleton(() => FakeWindowService()); await settings.init(); });