From c7a5d68781c2c7ff463126fb6819748bb924efce Mon Sep 17 00:00:00 2001 From: Dr-Blank <64108942+Dr-Blank@users.noreply.github.com> Date: Mon, 30 Sep 2024 02:10:28 -0400 Subject: [PATCH] disable shake detector when player not playing anything --- .../providers/shake_detector.dart | 44 ++++++++++++++----- .../providers/shake_detector.g.dart | 2 +- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/lib/features/shake_detection/providers/shake_detector.dart b/lib/features/shake_detection/providers/shake_detector.dart index 22c07c2..55a28d7 100644 --- a/lib/features/shake_detection/providers/shake_detector.dart +++ b/lib/features/shake_detection/providers/shake_detector.dart @@ -19,6 +19,8 @@ Logger _logger = Logger('ShakeDetector'); @riverpod class ShakeDetector extends _$ShakeDetector { + bool wasPlayerLoaded = false; + @override core.ShakeDetector? build() { final appSettings = ref.watch(appSettingsProvider); @@ -34,18 +36,29 @@ class ShakeDetector extends _$ShakeDetector { // when paused or playing // if no book is loaded, shake detection should not be enabled - // final player = ref.watch(audiobookPlayerProvider); + final player = ref.watch(simpleAudiobookPlayerProvider); + player.playerStateStream.listen((event) { + if (event.processingState == ProcessingState.idle && wasPlayerLoaded) { + _logger.config('Player is now not loaded, invalidating'); + wasPlayerLoaded = false; + ref.invalidateSelf(); + } + if (event.processingState != ProcessingState.idle && !wasPlayerLoaded) { + _logger.config('Player is now loaded, invalidating'); + wasPlayerLoaded = true; + ref.invalidateSelf(); + } + }); + + if (player.book == null) { + _logger.config('No book is loaded, disabling shake detection'); + wasPlayerLoaded = false; + return null; + } else { + _logger.finer('Book is loaded, marking player as loaded'); + wasPlayerLoaded = true; + } - // if (player.book == null) { - // _logger.config('No book is loaded'); - // return null; - // } - // if (!player.playing && !shakeDetectionSettings.isActiveWhenPaused) { - // _logger.config( - // 'Shake detection is disabled when paused and player is not playing', - // ); - // return null; - // } // if sleep timer is not enabled, shake detection should not be enabled final sleepTimer = ref.watch(sleepTimerProvider); if (!shakeDetectionSettings.shakeAction.isPlaybackManagementEnabled && @@ -95,13 +108,22 @@ class ShakeDetector extends _$ShakeDetector { return true; case ShakeAction.fastForward: _logger.fine('Fast forwarding'); + if (!player.playing) { + _logger.warning('Player is not playing'); + return false; + } player.seek(player.position + const Duration(seconds: 30)); return true; case ShakeAction.rewind: _logger.fine('Rewinding'); + if (!player.playing) { + _logger.warning('Player is not playing'); + return false; + } player.seek(player.position - const Duration(seconds: 30)); return true; case ShakeAction.playPause: + _logger.fine('Toggling play/pause'); player.togglePlayPause(); return true; default: diff --git a/lib/features/shake_detection/providers/shake_detector.g.dart b/lib/features/shake_detection/providers/shake_detector.g.dart index f316b1f..0f4285f 100644 --- a/lib/features/shake_detection/providers/shake_detector.g.dart +++ b/lib/features/shake_detection/providers/shake_detector.g.dart @@ -6,7 +6,7 @@ part of 'shake_detector.dart'; // RiverpodGenerator // ************************************************************************** -String _$shakeDetectorHash() => r'e22fbd7a3b0143db3a9e2c8489749ee0dd8cd25a'; +String _$shakeDetectorHash() => r'2a380bab1d4021d05d2ae40fec964a5f33d3730c'; /// See also [ShakeDetector]. @ProviderFor(ShakeDetector)