From 876fe26247d95928a90c73f3192307043438390c Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Wed, 22 Dec 2021 11:24:57 +0900 Subject: [PATCH] fixed UI mode switch in viewer for Android <10 --- .../deckers/thibault/aves/channel/calls/DeviceHandler.kt | 1 + lib/model/device.dart | 6 ++++-- lib/widgets/viewer/entry_viewer_stack.dart | 9 ++++++++- lib/widgets/viewer/panorama_page.dart | 9 ++++++++- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/DeviceHandler.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/DeviceHandler.kt index 407686da2..e9c9fbc26 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/DeviceHandler.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/DeviceHandler.kt @@ -36,6 +36,7 @@ class DeviceHandler(private val context: Context) : MethodCallHandler { "canRenderGoogleMaps" to (sdkInt >= Build.VERSION_CODES.KITKAT_WATCH), "hasFilePicker" to (sdkInt >= Build.VERSION_CODES.KITKAT), "showPinShortcutFeedback" to (sdkInt >= Build.VERSION_CODES.O), + "supportEdgeToEdgeUIMode" to (sdkInt >= Build.VERSION_CODES.Q), ) ) } diff --git a/lib/model/device.dart b/lib/model/device.dart index 0e4296866..7a8ab076b 100644 --- a/lib/model/device.dart +++ b/lib/model/device.dart @@ -6,7 +6,7 @@ final Device device = Device._private(); class Device { late final String _userAgent; late final bool _canGrantDirectoryAccess, _canPinShortcut, _canPrint, _canRenderFlagEmojis, _canRenderGoogleMaps; - late final bool _hasFilePicker, _showPinShortcutFeedback; + late final bool _hasFilePicker, _showPinShortcutFeedback, _supportEdgeToEdgeUIMode; String get userAgent => _userAgent; @@ -20,11 +20,12 @@ class Device { bool get canRenderGoogleMaps => _canRenderGoogleMaps; - // TODO TLAD toggle settings > import/export, about > bug report > save bool get hasFilePicker => _hasFilePicker; bool get showPinShortcutFeedback => _showPinShortcutFeedback; + bool get supportEdgeToEdgeUIMode => _supportEdgeToEdgeUIMode; + Device._private(); Future init() async { @@ -39,5 +40,6 @@ class Device { _canRenderGoogleMaps = capabilities['canRenderGoogleMaps'] ?? false; _hasFilePicker = capabilities['hasFilePicker'] ?? false; _showPinShortcutFeedback = capabilities['showPinShortcutFeedback'] ?? false; + _supportEdgeToEdgeUIMode = capabilities['supportEdgeToEdgeUIMode'] ?? false; } } diff --git a/lib/widgets/viewer/entry_viewer_stack.dart b/lib/widgets/viewer/entry_viewer_stack.dart index f9004e3ba..299ea5bf2 100644 --- a/lib/widgets/viewer/entry_viewer_stack.dart +++ b/lib/widgets/viewer/entry_viewer_stack.dart @@ -1,5 +1,6 @@ import 'dart:math'; +import 'package:aves/model/device.dart'; import 'package:aves/model/entry.dart'; import 'package:aves/model/filters/filters.dart'; import 'package:aves/model/highlight.dart'; @@ -538,7 +539,13 @@ class _EntryViewerStackState extends State with FeedbackMixin, // system UI - static void _showSystemUI() => SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge); + static void _showSystemUI() { + if (device.supportEdgeToEdgeUIMode) { + SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge); + } else { + SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: SystemUiOverlay.values); + } + } static void _hideSystemUI() => SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersive); diff --git a/lib/widgets/viewer/panorama_page.dart b/lib/widgets/viewer/panorama_page.dart index 9e13e9965..5cdaa4dd1 100644 --- a/lib/widgets/viewer/panorama_page.dart +++ b/lib/widgets/viewer/panorama_page.dart @@ -1,5 +1,6 @@ import 'dart:math'; +import 'package:aves/model/device.dart'; import 'package:aves/model/entry.dart'; import 'package:aves/model/entry_images.dart'; import 'package:aves/model/panorama.dart'; @@ -148,7 +149,13 @@ class _PanoramaPageState extends State { // system UI - static void _showSystemUI() => SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge); + static void _showSystemUI() { + if (device.supportEdgeToEdgeUIMode) { + SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge); + } else { + SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: SystemUiOverlay.values); + } + } static void _hideSystemUI() => SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersive);