mirror of
https://github.com/Dr-Blank/Vaani.git
synced 2026-07-06 17:31:33 +00:00
enhance shake action handling to avoid unnecessary feedback
This commit is contained in:
parent
195d303404
commit
a15d634cd2
4 changed files with 26 additions and 18 deletions
|
|
@ -48,7 +48,7 @@ class ShakeDetector extends _$ShakeDetector {
|
||||||
// }
|
// }
|
||||||
// if sleep timer is not enabled, shake detection should not be enabled
|
// if sleep timer is not enabled, shake detection should not be enabled
|
||||||
final sleepTimer = ref.watch(sleepTimerProvider);
|
final sleepTimer = ref.watch(sleepTimerProvider);
|
||||||
if (!shakeDetectionSettings.isPlaybackManagementEnabled &&
|
if (!shakeDetectionSettings.shakeAction.isPlaybackManagementEnabled &&
|
||||||
sleepTimer == null) {
|
sleepTimer == null) {
|
||||||
_logger
|
_logger
|
||||||
.config('No playback management is enabled and sleep timer is off, '
|
.config('No playback management is enabled and sleep timer is off, '
|
||||||
|
|
@ -60,47 +60,52 @@ class ShakeDetector extends _$ShakeDetector {
|
||||||
final detector = core.ShakeDetector(
|
final detector = core.ShakeDetector(
|
||||||
shakeDetectionSettings,
|
shakeDetectionSettings,
|
||||||
() {
|
() {
|
||||||
doShakeAction(
|
final wasActionComplete = doShakeAction(
|
||||||
shakeDetectionSettings.shakeAction,
|
shakeDetectionSettings.shakeAction,
|
||||||
ref: ref,
|
ref: ref,
|
||||||
);
|
);
|
||||||
shakeDetectionSettings.feedback.forEach(postShakeFeedback);
|
if (wasActionComplete) {
|
||||||
|
shakeDetectionSettings.feedback.forEach(postShakeFeedback);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
ref.onDispose(detector.dispose);
|
ref.onDispose(detector.dispose);
|
||||||
return detector;
|
return detector;
|
||||||
}
|
}
|
||||||
|
|
||||||
void doShakeAction(
|
/// Perform the shake action and return whether the action was successful
|
||||||
|
bool doShakeAction(
|
||||||
ShakeAction shakeAction, {
|
ShakeAction shakeAction, {
|
||||||
required Ref ref,
|
required Ref ref,
|
||||||
}) {
|
}) {
|
||||||
final player = ref.read(simpleAudiobookPlayerProvider);
|
final player = ref.read(simpleAudiobookPlayerProvider);
|
||||||
if (player.book == null) {
|
if (player.book == null && shakeAction.isPlaybackManagementEnabled) {
|
||||||
_logger.warning('No book is loaded');
|
_logger.warning('No book is loaded');
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
switch (shakeAction) {
|
switch (shakeAction) {
|
||||||
case ShakeAction.resetSleepTimer:
|
case ShakeAction.resetSleepTimer:
|
||||||
_logger.fine('Resetting sleep timer');
|
_logger.fine('Resetting sleep timer');
|
||||||
var sleepTimer = ref.read(sleepTimerProvider);
|
var sleepTimer = ref.read(sleepTimerProvider);
|
||||||
if (sleepTimer == null) {
|
if (sleepTimer == null || !sleepTimer.isActive) {
|
||||||
_logger.warning('No sleep timer is running');
|
_logger.warning('No sleep timer is running');
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
sleepTimer!.restartTimer();
|
sleepTimer.restartTimer();
|
||||||
break;
|
return true;
|
||||||
case ShakeAction.fastForward:
|
case ShakeAction.fastForward:
|
||||||
_logger.fine('Fast forwarding');
|
_logger.fine('Fast forwarding');
|
||||||
player.seek(player.position + const Duration(seconds: 30));
|
player.seek(player.position + const Duration(seconds: 30));
|
||||||
break;
|
return true;
|
||||||
case ShakeAction.rewind:
|
case ShakeAction.rewind:
|
||||||
_logger.fine('Rewinding');
|
_logger.fine('Rewinding');
|
||||||
player.seek(player.position - const Duration(seconds: 30));
|
player.seek(player.position - const Duration(seconds: 30));
|
||||||
break;
|
return true;
|
||||||
case ShakeAction.playPause:
|
case ShakeAction.playPause:
|
||||||
player.togglePlayPause();
|
player.togglePlayPause();
|
||||||
break;
|
return true;
|
||||||
default:
|
default:
|
||||||
break;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -136,18 +141,18 @@ class ShakeDetector extends _$ShakeDetector {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension on ShakeDetectionSettings {
|
extension on ShakeAction {
|
||||||
bool get isActiveWhenPaused {
|
bool get isActiveWhenPaused {
|
||||||
// If the shake action is play/pause, it should be required when not playing
|
// If the shake action is play/pause, it should be required when not playing
|
||||||
return shakeAction == ShakeAction.playPause;
|
return this == ShakeAction.playPause;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get isPlaybackManagementEnabled {
|
bool get isPlaybackManagementEnabled {
|
||||||
return {ShakeAction.playPause, ShakeAction.fastForward, ShakeAction.rewind}
|
return {ShakeAction.playPause, ShakeAction.fastForward, ShakeAction.rewind}
|
||||||
.contains(shakeAction);
|
.contains(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get shouldActOnSleepTimer {
|
bool get shouldActOnSleepTimer {
|
||||||
return {ShakeAction.resetSleepTimer}.contains(shakeAction);
|
return {ShakeAction.resetSleepTimer}.contains(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ part of 'shake_detector.dart';
|
||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$shakeDetectorHash() => r'b246be847d3ff8310f16abd683a4428dca60efdb';
|
String _$shakeDetectorHash() => r'e22fbd7a3b0143db3a9e2c8489749ee0dd8cd25a';
|
||||||
|
|
||||||
/// See also [ShakeDetector].
|
/// See also [ShakeDetector].
|
||||||
@ProviderFor(ShakeDetector)
|
@ProviderFor(ShakeDetector)
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,9 @@ class SleepTimer {
|
||||||
/// The timer that will pause the player
|
/// The timer that will pause the player
|
||||||
Timer? timer;
|
Timer? timer;
|
||||||
|
|
||||||
|
/// is the sleep timer actively counting down
|
||||||
|
bool get isActive => timer != null && timer!.isActive;
|
||||||
|
|
||||||
/// for internal use only
|
/// for internal use only
|
||||||
/// when the timer was started
|
/// when the timer was started
|
||||||
DateTime? startedAt;
|
DateTime? startedAt;
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ final appLogger = Logger('vaani');
|
||||||
void main() async {
|
void main() async {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
// Configure the root Logger
|
// Configure the root Logger
|
||||||
Logger.root.level = Level.ALL; // Capture all logs
|
Logger.root.level = Level.FINE; // Capture all logs
|
||||||
Logger.root.onRecord.listen((record) {
|
Logger.root.onRecord.listen((record) {
|
||||||
// Print log records to the console
|
// Print log records to the console
|
||||||
debugPrint(
|
debugPrint(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue