From 04873f124098d73c6f8fcefba159a2097c65311a Mon Sep 17 00:00:00 2001 From: David Senk Date: Thu, 19 Sep 2024 20:49:12 -0400 Subject: [PATCH] minor refactoring / cleaning --- lib/Globals.dart | 30 +++++++++++++++++++++ lib/Listen.dart | 1 + lib/ListenHandler.dart | 61 +++++++++++++++++++++++++++++++----------- 3 files changed, 76 insertions(+), 16 deletions(-) diff --git a/lib/Globals.dart b/lib/Globals.dart index f1b757b..44a3da2 100644 --- a/lib/Globals.dart +++ b/lib/Globals.dart @@ -17,6 +17,36 @@ Future setupListenHandler() async { _session = await AudioSession.instance; await _session.configure(const AudioSessionConfiguration.music()); + + //TODO: Do I need to handle these events? audioplayers may be doing it already + //_session.interruptionEventStream.listen((event) { + // if (event.begin) { + // switch (event.type) { + // case AudioInterruptionType.duck: + // _listenHandler.duck(); + // break; + // case AudioInterruptionType.pause: + // case AudioInterruptionType.unknown: + // _listenHandler.pause(); + // break; + // } + // } else { + // switch (event.type) { + // case AudioInterruptionType.duck: + // _listenHandler.unDuck(); + // break; + // case AudioInterruptionType.pause: + // _listenHandler.play(); + // break; + // case AudioInterruptionType.unknown: + // break; + // } + // } + //}); + + //_session.becomingNoisyEventStream.listen((_) { + // _listenHandler.pause(); + //}); } ListenHandler getListenHandlder() => _listenHandler; diff --git a/lib/Listen.dart b/lib/Listen.dart index f0b1771..ab5ad1e 100644 --- a/lib/Listen.dart +++ b/lib/Listen.dart @@ -45,6 +45,7 @@ class _PlayControlsState extends State print("Listen init"); _listenHandler.playbackState.listen((PlaybackState state) { + print("Playback state changed"); setState(() {}); }); } diff --git a/lib/ListenHandler.dart b/lib/ListenHandler.dart index 902981f..8357f77 100644 --- a/lib/ListenHandler.dart +++ b/lib/ListenHandler.dart @@ -11,6 +11,35 @@ class ListenHandler extends BaseAudioHandler { setup_player() { _player.setReleaseMode(ReleaseMode.release); + _player.onPlayerStateChanged.listen((event) { + print("Received audioplayers event: $event"); + + switch (event) { + case PlayerState.playing: + super.playbackState.add(PlaybackState( + controls: [ + MediaControl.stop, + MediaControl.pause, + ], + systemActions: { + MediaAction.stop, + MediaAction.pause, + }, + playing: true, + )); + break; + case PlayerState.paused: + case PlayerState.stopped: + case PlayerState.completed: + case PlayerState.disposed: + super.playbackState.add(PlaybackState( + controls: [], + systemActions: {}, + playing: false, + )); + break; + } + }); } ListenHandler() { @@ -19,31 +48,31 @@ class ListenHandler extends BaseAudioHandler { bool isPlaying() => super.playbackState.value.playing; + double _duckVol = 0; + + void duck() { + //TODO: Confirm I need to do this manually, it looks like audioplayers already does this + print("Duck requested"); + //_duckVol = _player.volume; + + //_player.setVolume(_duckVol - 0.4 > 0 ? _duckVol - 0.4 : 0.0); + } + + void unDuck() { + //TODO: Confirm I need to do this manually, it looks like audioplayers already does this + print("Unduck requested"); + //_player.setVolume(_duckVol); + } + @override Future play() async { if (await startAudioSession()) { _player.play(_radioSource, mode: PlayerMode.mediaPlayer); - super.playbackState.add(PlaybackState( - controls: [ - MediaControl.stop, - MediaControl.pause, - ], - systemActions: { - MediaAction.stop, - MediaAction.pause, - }, - playing: true, - )); } } @override Future pause() async { - super.playbackState.add(PlaybackState( - controls: [], - systemActions: {}, - playing: false, - )); await stopAudioSession(); _player.stop(); }