From 97c56f9e57a062c636b69bcfecd7ca4701e0c3cc Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Mon, 15 Nov 2021 11:26:59 +0530 Subject: [PATCH] Fixed IllegalStateException when deleting multiple songs --- app/build.gradle | 2 +- .../fragments/player/PlayerAlbumCoverFragment.kt | 2 +- .../monkey/retromusic/helper/MusicPlayerRemote.kt | 9 +++++++++ .../monkey/retromusic/service/MusicService.java | 13 ++++++++++++- .../code/name/monkey/retromusic/util/MusicUtil.kt | 12 +----------- appthemehelper/build.gradle | 2 +- 6 files changed, 25 insertions(+), 15 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8827023d..e2129b7e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -121,7 +121,7 @@ dependencies { implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" implementation 'com.google.android.play:core-ktx:1.8.1' - implementation 'com.google.android.material:material:1.5.0-alpha05' + implementation 'com.google.android.material:material:1.5.0-beta01' def retrofit_version = '2.9.0' implementation "com.squareup.retrofit2:retrofit:$retrofit_version" diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt index 9249fcb7..876f1688 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/player/PlayerAlbumCoverFragment.kt @@ -281,7 +281,7 @@ class PlayerAlbumCoverFragment : AbsMusicServiceFragment(R.layout.fragment_playe private fun updatePlayingQueue() { binding.viewPager.apply { adapter = AlbumCoverPagerAdapter(childFragmentManager, MusicPlayerRemote.playingQueue) - adapter!!.notifyDataSetChanged() + adapter?.notifyDataSetChanged() currentItem = MusicPlayerRemote.position onPageSelected(MusicPlayerRemote.position) } diff --git a/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt b/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt index 60441b85..285aa2ad 100644 --- a/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt +++ b/app/src/main/java/code/name/monkey/retromusic/helper/MusicPlayerRemote.kt @@ -392,6 +392,15 @@ object MusicPlayerRemote : KoinComponent { return false } + @JvmStatic + fun removeFromQueue(songs: List): Boolean { + if (musicService != null) { + musicService!!.removeSongs(songs) + return true + } + return false + } + fun removeFromQueue(position: Int): Boolean { if (musicService != null && position >= 0 && position < playingQueue.size) { musicService!!.removeSong(position) diff --git a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java index e0e5c95d..95799879 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java +++ b/app/src/main/java/code/name/monkey/retromusic/service/MusicService.java @@ -1190,7 +1190,7 @@ public class MusicService extends MediaBrowserServiceCompat notifyChange(QUEUE_CHANGED); } - public void removeSong(@NonNull Song song) { + public void removeSongImpl(@NonNull Song song) { for (int i = 0; i < playingQueue.size(); i++) { if (playingQueue.get(i).getId() == song.getId()) { playingQueue.remove(i); @@ -1202,6 +1202,17 @@ public class MusicService extends MediaBrowserServiceCompat originalPlayingQueue.remove(i); } } + } + + public void removeSong(@NonNull Song song) { + removeSongImpl(song); + notifyChange(QUEUE_CHANGED); + } + + public void removeSongs(@NonNull List songs) { + for (Song song : songs) { + removeSongImpl(song); + } notifyChange(QUEUE_CHANGED); } 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 38f54a56..9971afb7 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 @@ -25,7 +25,6 @@ import code.name.monkey.retromusic.model.Playlist import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.lyrics.AbsSynchronizedLyrics import code.name.monkey.retromusic.repository.RealPlaylistRepository -import code.name.monkey.retromusic.repository.RealSongRepository import code.name.monkey.retromusic.repository.Repository import code.name.monkey.retromusic.repository.SongRepository import code.name.monkey.retromusic.service.MusicService @@ -474,16 +473,7 @@ object MusicUtil : KoinComponent { null, null ) if (cursor != null) { - // Step 1: Remove selected tracks from the current playlist, as well - // as from the album art cache - cursor.moveToFirst() - while (!cursor.isAfterLast) { - val id = cursor.getLong(BaseColumns._ID) - val song: Song = RealSongRepository(context).song(id) - removeFromQueue(song) - cursor.moveToNext() - } - + removeFromQueue(songs) // Step 2: Remove files from card cursor.moveToFirst() diff --git a/appthemehelper/build.gradle b/appthemehelper/build.gradle index f2b4a06b..3d7eaed8 100644 --- a/appthemehelper/build.gradle +++ b/appthemehelper/build.gradle @@ -24,7 +24,7 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.3.1' - implementation 'com.google.android.material:material:1.5.0-alpha05' + implementation 'com.google.android.material:material:1.5.0-beta01' implementation 'androidx.preference:preference-ktx:1.1.1' implementation 'androidx.cardview:cardview:1.0.0'