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;