diff --git a/CHANGELOG.md b/CHANGELOG.md
index 64f2a4152..091c490f7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.
## [Unreleased]
+### Fixed
+
+- screensaver stopping when device orientation changes
+
## [v1.6.12] - 2022-08-27
### Added
diff --git a/lib/widgets/viewer/screen_saver_page.dart b/lib/widgets/viewer/screen_saver_page.dart
index 9afc79eac..4351455bc 100644
--- a/lib/widgets/viewer/screen_saver_page.dart
+++ b/lib/widgets/viewer/screen_saver_page.dart
@@ -29,7 +29,7 @@ class ScreenSaverPage extends StatefulWidget {
State createState() => _ScreenSaverPageState();
}
-class _ScreenSaverPageState extends State {
+class _ScreenSaverPageState extends State with WidgetsBindingObserver {
late final ViewerController _viewerController;
CollectionLens? _slideshowCollection;
@@ -47,24 +47,24 @@ class _ScreenSaverPageState extends State {
);
source.stateNotifier.addListener(_onSourceStateChanged);
_initSlideshowCollection();
- }
-
- void _onSourceStateChanged() {
- if (_slideshowCollection == null) {
- _initSlideshowCollection();
- if (_slideshowCollection != null) {
- setState(() {});
- }
- }
+ WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
source.stateNotifier.removeListener(_onSourceStateChanged);
_viewerController.dispose();
+ WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
+ @override
+ void didChangeAppLifecycleState(AppLifecycleState state) {
+ if (state == AppLifecycleState.resumed) {
+ _viewerController.autopilot = true;
+ }
+ }
+
@override
Widget build(BuildContext context) {
Widget child;
@@ -102,6 +102,15 @@ class _ScreenSaverPageState extends State {
);
}
+ void _onSourceStateChanged() {
+ if (_slideshowCollection == null) {
+ _initSlideshowCollection();
+ if (_slideshowCollection != null) {
+ setState(() {});
+ }
+ }
+ }
+
void _initSlideshowCollection() {
if (source.stateNotifier.value != SourceState.ready || _slideshowCollection != null) return;