From 48289ef006ef3c2845f5ca42ba9d05a1cb58086a Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Sat, 28 May 2022 19:57:26 -0600 Subject: [PATCH] all: make callbacks initialize impls Make addCallback calls (or similar) initalize the caller by calling the specific callback methods. This is primarily intended as a fix to an issue where the music library would actually reload during a warm start. This is extremely bad, but I hope it doesn't make the app too unusable until the next version. --- .../main/java/org/oxycblt/auxio/music/MusicStore.kt | 1 + .../java/org/oxycblt/auxio/music/MusicViewModel.kt | 2 +- .../org/oxycblt/auxio/playback/PlaybackViewModel.kt | 12 ------------ .../auxio/playback/state/PlaybackStateManager.kt | 9 +++++++++ .../auxio/playback/system/MediaSessionComponent.kt | 7 ------- .../oxycblt/auxio/playback/system/PlaybackService.kt | 7 ------- 6 files changed, 11 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt index 4c8f408f2..92a942413 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt @@ -54,6 +54,7 @@ class MusicStore private constructor() { private val callbacks = mutableListOf() fun addCallback(callback: Callback) { + response?.let(callback::onMusicUpdate) callbacks.add(callback) } diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicViewModel.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicViewModel.kt index 0b4ef4660..da42f04ef 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicViewModel.kt @@ -43,7 +43,7 @@ class MusicViewModel : ViewModel(), MusicStore.Callback { * navigated to and because SnackBars will have the best UX here. */ fun loadMusic(context: Context) { - if (musicStore.library != null || isBusy) { + if (_loaderResponse.value != null || isBusy) { logD("Loader is busy/already completed, not reloading") return } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt index 9c49d44c4..c14ce05ad 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/PlaybackViewModel.kt @@ -83,18 +83,6 @@ class PlaybackViewModel : ViewModel(), PlaybackStateManager.Callback, MusicStore init { musicStore.addCallback(this) playbackManager.addCallback(this) - - // If the PlaybackViewModel was cleared [Signified by PlaybackStateManager still being - // around & the fact that we are in the init function], then attempt to restore the - // ViewModel state. If it isn't, then wait for MainFragment to give the command to restore - // PlaybackStateManager. - if (playbackManager.isInitialized) { - onNewPlayback(playbackManager.index, playbackManager.queue, playbackManager.parent) - onPositionChanged(playbackManager.positionMs) - onPlayingChanged(playbackManager.isPlaying) - onShuffledChanged(playbackManager.isShuffled) - onRepeatChanged(playbackManager.repeatMode) - } } // --- PLAYING FUNCTIONS --- diff --git a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt index 303a75bd7..fd8e02ccb 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/state/PlaybackStateManager.kt @@ -96,6 +96,15 @@ class PlaybackStateManager private constructor() { * [removeCallback] when done. */ fun addCallback(callback: Callback) { + if (isInitialized) { + callback.onNewPlayback(index, queue, parent) + callback.onSeek(positionMs) + callback.onPositionChanged(positionMs) + callback.onRepeatChanged(repeatMode) + callback.onShuffledChanged(isShuffled) + callback.onPlayingChanged(isPlaying) + } + callbacks.add(callback) } diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/MediaSessionComponent.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/MediaSessionComponent.kt index e46085d00..be2f0466a 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/system/MediaSessionComponent.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/system/MediaSessionComponent.kt @@ -55,13 +55,6 @@ class MediaSessionComponent(private val context: Context, private val player: Pl playbackManager.addCallback(this) settingsManager.addCallback(this) mediaSession.setCallback(this) - - if (playbackManager.isInitialized) { - updateMediaMetadata(playbackManager.song) - invalidateSessionState() - onRepeatChanged(playbackManager.repeatMode) - onShuffledChanged(playbackManager.isShuffled) - } } fun release() { diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt index f10c8134d..383b42f56 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt @@ -139,13 +139,6 @@ class PlaybackService : // --- PLAYBACKSTATEMANAGER SETUP --- playbackManager.addCallback(this) - if (playbackManager.isInitialized) { - loadSong(playbackManager.song) - onSeek(playbackManager.positionMs) - onPlayingChanged(playbackManager.isPlaying) - onShuffledChanged(playbackManager.isShuffled) - onRepeatChanged(playbackManager.repeatMode) - } // --- SETTINGSMANAGER SETUP ---