Exit Playlist page when playlist is deleted

This commit is contained in:
Prathamesh More 2022-03-27 19:55:58 +05:30
parent 0c4cabc755
commit b4dc50306f
5 changed files with 22 additions and 15 deletions

View file

@ -64,4 +64,7 @@ interface PlaylistDao {
@Query("SELECT * FROM SongEntity WHERE playlist_creator_id= :playlistId") @Query("SELECT * FROM SongEntity WHERE playlist_creator_id= :playlistId")
fun favoritesSongs(playlistId: Long): List<SongEntity> fun favoritesSongs(playlistId: Long): List<SongEntity>
@Query("SELECT EXISTS(SELECT * FROM PlaylistEntity WHERE playlist_id = :playlistId)")
fun checkPlaylistExists(playlistId: Long): LiveData<Boolean>
} }

View file

@ -9,6 +9,7 @@ import androidx.activity.addCallback
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.doOnPreDraw import androidx.core.view.doOnPreDraw
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs import androidx.navigation.fragment.navArgs
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@ -58,7 +59,6 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli
enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true).addTarget(view) enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true).addTarget(view)
returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false) returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
setHasOptionsMenu(true) setHasOptionsMenu(true)
mainActivity.addMusicServiceEventListener(viewModel)
mainActivity.setSupportActionBar(binding.toolbar) mainActivity.setSupportActionBar(binding.toolbar)
ViewCompat.setTransitionName(binding.container, "playlist") ViewCompat.setTransitionName(binding.container, "playlist")
playlist = arguments.extraPlaylist playlist = arguments.extraPlaylist
@ -67,6 +67,11 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli
viewModel.getSongs().observe(viewLifecycleOwner) { viewModel.getSongs().observe(viewLifecycleOwner) {
songs(it.toSongs()) songs(it.toSongs())
} }
viewModel.playlistExists().observe(viewLifecycleOwner) {
if (!it) {
findNavController().navigateUp()
}
}
postponeEnterTransition() postponeEnterTransition()
requireView().doOnPreDraw { startPostponedEnterTransition() } requireView().doOnPreDraw { startPostponedEnterTransition() }
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) { requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {

View file

@ -22,24 +22,15 @@ import code.name.monkey.retromusic.db.SongEntity
import code.name.monkey.retromusic.interfaces.IMusicServiceEventListener import code.name.monkey.retromusic.interfaces.IMusicServiceEventListener
import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.model.Song
import code.name.monkey.retromusic.repository.RealRepository import code.name.monkey.retromusic.repository.RealRepository
import code.name.monkey.retromusic.repository.RealRoomRepository
class PlaylistDetailsViewModel( class PlaylistDetailsViewModel(
private val realRepository: RealRepository, private val realRepository: RealRepository,
private var playlist: PlaylistWithSongs private var playlist: PlaylistWithSongs
) : ViewModel(), IMusicServiceEventListener { ) : ViewModel() {
private val playListSongs = MutableLiveData<List<Song>>()
fun getSongs(): LiveData<List<SongEntity>> = fun getSongs(): LiveData<List<SongEntity>> =
realRepository.playlistSongs(playlist.playlistEntity.playListId) realRepository.playlistSongs(playlist.playlistEntity.playListId)
override fun onMediaStoreChanged() {} fun playlistExists(): LiveData<Boolean> =
override fun onServiceConnected() {} realRepository.checkPlaylistExists(playlist.playlistEntity.playListId)
override fun onServiceDisconnected() {}
override fun onQueueChanged() {}
override fun onPlayingMetaChanged() {}
override fun onPlayStateChanged() {}
override fun onRepeatModeChanged() {}
override fun onShuffleModeChanged() {}
override fun onFavoriteStateChanged() {}
} }

View file

@ -111,6 +111,7 @@ interface Repository {
suspend fun searchAlbums(query: String): List<Album> suspend fun searchAlbums(query: String): List<Album>
suspend fun isSongFavorite(songId: Long): Boolean suspend fun isSongFavorite(songId: Long): Boolean
fun getSongByGenre(genreId: Long): Song fun getSongByGenre(genreId: Long): Song
fun checkPlaylistExists(playListId: Long): LiveData<Boolean>
} }
class RealRepository( class RealRepository(
@ -277,6 +278,9 @@ class RealRepository(
override suspend fun checkPlaylistExists(playlistName: String): List<PlaylistEntity> = override suspend fun checkPlaylistExists(playlistName: String): List<PlaylistEntity> =
roomRepository.checkPlaylistExists(playlistName) roomRepository.checkPlaylistExists(playlistName)
override fun checkPlaylistExists(playListId: Long): LiveData<Boolean> =
roomRepository.checkPlaylistExists(playListId)
override suspend fun createPlaylist(playlistEntity: PlaylistEntity): Long = override suspend fun createPlaylist(playlistEntity: PlaylistEntity): Long =
roomRepository.createPlaylist(playlistEntity) roomRepository.createPlaylist(playlistEntity)
@ -377,7 +381,7 @@ class RealRepository(
} }
override suspend fun suggestions(): List<Song> { override suspend fun suggestions(): List<Song> {
if (!PreferenceUtil.homeSuggestions) return listOf<Song>() if (!PreferenceUtil.homeSuggestions) return listOf()
return NotPlayedPlaylist().songs().shuffled().takeIf { return NotPlayedPlaylist().songs().shuffled().takeIf {
it.size > 9 it.size > 9
} ?: emptyList() } ?: emptyList()

View file

@ -49,6 +49,7 @@ interface RoomRepository {
suspend fun blackListPaths(): List<BlackListStoreEntity> suspend fun blackListPaths(): List<BlackListStoreEntity>
suspend fun deleteSongs(songs: List<Song>) suspend fun deleteSongs(songs: List<Song>)
suspend fun isSongFavorite(context: Context, songId: Long): Boolean suspend fun isSongFavorite(context: Context, songId: Long): Boolean
fun checkPlaylistExists(playListId: Long): LiveData<Boolean>
} }
class RealRoomRepository( class RealRoomRepository(
@ -97,6 +98,9 @@ class RealRoomRepository(
override fun getSongs(playListId: Long): LiveData<List<SongEntity>> = override fun getSongs(playListId: Long): LiveData<List<SongEntity>> =
playlistDao.songsFromPlaylist(playListId) playlistDao.songsFromPlaylist(playListId)
override fun checkPlaylistExists(playListId: Long): LiveData<Boolean> =
playlistDao.checkPlaylistExists(playListId)
override suspend fun deletePlaylistEntities(playlistEntities: List<PlaylistEntity>) = override suspend fun deletePlaylistEntities(playlistEntities: List<PlaylistEntity>) =
playlistDao.deletePlaylists(playlistEntities) playlistDao.deletePlaylists(playlistEntities)