From d877bfbdfb93726fdd9cf56cec57f1e94835012e Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Tue, 17 May 2022 19:34:25 +0530 Subject: [PATCH] [MusicService] Save songs to history and play count with Coroutines --- .../retromusic/appwidgets/AppWidgetCircle.kt | 2 +- .../monkey/retromusic/service/MusicService.kt | 76 ++++++------------- .../name/monkey/retromusic/util/MusicUtil.kt | 5 +- 3 files changed, 26 insertions(+), 57 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCircle.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCircle.kt index cdb48a063..6ca5b050e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCircle.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCircle.kt @@ -89,7 +89,7 @@ class AppWidgetCircle : BaseAppWidget() { ).toBitmap() ) val isFavorite = runBlocking(Dispatchers.IO) { - return@runBlocking MusicUtil.repository.isSongFavorite(song.id) + return@runBlocking MusicUtil.isFavorite(song) } val favoriteRes = if (isFavorite) R.drawable.ic_favorite else R.drawable.ic_favorite_border diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt index 0990961b0..2c4afb7fa 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.kt @@ -303,38 +303,12 @@ class MusicService : MediaBrowserServiceCompat(), initNotification() mediaStoreObserver = MediaStoreObserver(this, playerHandler!!) throttledSeekHandler = ThrottledSeekHandler(this, playerHandler!!) - contentResolver - .registerContentObserver( - MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, true, mediaStoreObserver - ) - contentResolver - .registerContentObserver( - MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, true, mediaStoreObserver - ) - contentResolver - .registerContentObserver( - MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI, true, mediaStoreObserver - ) - contentResolver - .registerContentObserver( - MediaStore.Audio.Genres.EXTERNAL_CONTENT_URI, true, mediaStoreObserver - ) - contentResolver - .registerContentObserver( - MediaStore.Audio.Media.INTERNAL_CONTENT_URI, true, mediaStoreObserver - ) - contentResolver - .registerContentObserver( - MediaStore.Audio.Albums.INTERNAL_CONTENT_URI, true, mediaStoreObserver - ) - contentResolver - .registerContentObserver( - MediaStore.Audio.Artists.INTERNAL_CONTENT_URI, true, mediaStoreObserver - ) - contentResolver - .registerContentObserver( - MediaStore.Audio.Genres.INTERNAL_CONTENT_URI, true, mediaStoreObserver - ) + contentResolver.registerContentObserver(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, + true, + mediaStoreObserver) + contentResolver.registerContentObserver(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, + true, + mediaStoreObserver) val audioVolumeObserver = AudioVolumeObserver(this) audioVolumeObserver.register(AudioManager.STREAM_MUSIC, this) registerOnSharedPreferenceChangedListener(this) @@ -858,7 +832,8 @@ class MusicService : MediaBrowserServiceCompat(), fun toggleFavorite() { serviceScope.launch { - toggleFavorite(this@MusicService, currentSong) + toggleFavorite(currentSong) + sendBroadcast(Intent(FAVORITE_STATE_CHANGED)) } } @@ -874,6 +849,7 @@ class MusicService : MediaBrowserServiceCompat(), fun quit() { pause() stopForeground(true) + isForeground = false notificationManager?.cancel(PlayingNotification.NOTIFICATION_ID) playbackManager.release() AudioManagerCompat.abandonAudioFocusRequest(audioManager!!, @@ -1066,7 +1042,8 @@ class MusicService : MediaBrowserServiceCompat(), .putString(MediaMetadataCompat.METADATA_KEY_ALBUM, song.albumName) .putString(MediaMetadataCompat.METADATA_KEY_TITLE, song.title) .putLong(MediaMetadataCompat.METADATA_KEY_DURATION, song.duration) - .putLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER, (getPosition() + 1).toLong()) + .putLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER, + (getPosition() + 1).toLong()) .putLong(MediaMetadataCompat.METADATA_KEY_YEAR, song.year.toLong()) .putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, null) .putLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS, playingQueue.size.toLong()) @@ -1128,17 +1105,6 @@ class MusicService : MediaBrowserServiceCompat(), playingNotification?.updateFavorite(isFavorite) startForegroundOrNotify() } - - updateMediaSessionMetaData() - updateMediaSessionPlaybackState() - savePosition() - savePositionInTrack() - val currentSong = currentSong - HistoryStore.getInstance(this).addSongId(currentSong.id) - if (songPlayCountHelper.shouldBumpPlayCount()) { - SongPlayCountStore.getInstance(this).bumpPlayCount(songPlayCountHelper.song.id) - } - songPlayCountHelper.notifySongChanged(currentSong) } META_CHANGED -> { playingNotification?.updateMetadata(currentSong) { startForegroundOrNotify() } @@ -1149,14 +1115,17 @@ class MusicService : MediaBrowserServiceCompat(), updateMediaSessionMetaData() updateMediaSessionPlaybackState() - savePosition() - savePositionInTrack() - val currentSong = currentSong - HistoryStore.getInstance(this).addSongId(currentSong.id) - if (songPlayCountHelper.shouldBumpPlayCount()) { - SongPlayCountStore.getInstance(this).bumpPlayCount(songPlayCountHelper.song.id) + serviceScope.launch(IO) { + savePosition() + savePositionInTrack() + val currentSong = currentSong + HistoryStore.getInstance(this@MusicService).addSongId(currentSong.id) + if (songPlayCountHelper.shouldBumpPlayCount()) { + SongPlayCountStore.getInstance(this@MusicService) + .bumpPlayCount(songPlayCountHelper.song.id) + } + songPlayCountHelper.notifySongChanged(currentSong) } - songPlayCountHelper.notifySongChanged(currentSong) } QUEUE_CHANGED -> { mediaSession?.setQueueTitle(getString(R.string.now_playing_queue)) @@ -1394,7 +1363,8 @@ class MusicService : MediaBrowserServiceCompat(), const val ACTION_QUIT = "$RETRO_MUSIC_PACKAGE_NAME.quitservice" const val ACTION_PENDING_QUIT = "$RETRO_MUSIC_PACKAGE_NAME.pendingquitservice" const val INTENT_EXTRA_PLAYLIST = RETRO_MUSIC_PACKAGE_NAME + "intentextra.playlist" - const val INTENT_EXTRA_SHUFFLE_MODE = "$RETRO_MUSIC_PACKAGE_NAME.intentextra.shufflemode" + const val INTENT_EXTRA_SHUFFLE_MODE = + "$RETRO_MUSIC_PACKAGE_NAME.intentextra.shufflemode" const val APP_WIDGET_UPDATE = "$RETRO_MUSIC_PACKAGE_NAME.appreciate" const val EXTRA_APP_WIDGET_NAME = RETRO_MUSIC_PACKAGE_NAME + "app_widget_name" diff --git a/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt index 43a7cbb0a..feeb5c37b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/MusicUtil.kt @@ -332,8 +332,8 @@ object MusicUtil : KoinComponent { return false } - val repository = get() - suspend fun toggleFavorite(context: Context, song: Song) { + private val repository = get() + suspend fun toggleFavorite(song: Song) { withContext(IO) { val playlist: PlaylistEntity = repository.favoritePlaylist() val songEntity = song.toSongEntity(playlist.playListId) @@ -343,7 +343,6 @@ object MusicUtil : KoinComponent { } else { repository.insertSongs(listOf(song.toSongEntity(playlist.playListId))) } - context.sendBroadcast(Intent(MusicService.FAVORITE_STATE_CHANGED)) } }