From 6adf09254b3b15435aca81f3d03b9e6f4fdb5c54 Mon Sep 17 00:00:00 2001 From: Omar Date: Fri, 4 Mar 2022 14:00:26 +0200 Subject: [PATCH 1/6] Added menu item to clear history (only shown on history page) --- .../fragments/other/DetailListFragment.kt | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/other/DetailListFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/other/DetailListFragment.kt index 9b28980ac..70cf65df7 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/other/DetailListFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/other/DetailListFragment.kt @@ -15,6 +15,9 @@ package code.name.monkey.retromusic.fragments.other import android.os.Bundle +import android.view.Menu +import android.view.MenuInflater +import android.view.MenuItem import android.view.View import androidx.activity.addCallback import androidx.core.os.bundleOf @@ -55,6 +58,12 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de private val args by navArgs() private var _binding: FragmentPlaylistDetailBinding? = null private val binding get() = _binding!! + private var showClearHistoryOption = false + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setHasOptionsMenu(true) + } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -81,7 +90,10 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de TOP_ALBUMS -> loadAlbums(R.string.top_albums, TOP_ALBUMS) RECENT_ALBUMS -> loadAlbums(R.string.recent_albums, RECENT_ALBUMS) FAVOURITES -> loadFavorite() - HISTORY_PLAYLIST -> loadHistory() + HISTORY_PLAYLIST -> { + loadHistory() + showClearHistoryOption = true // Reference to onCreateOptionsMenu + } LAST_ADDED_PLAYLIST -> lastAddedSongs() TOP_PLAYED_PLAYLIST -> topPlayed() } @@ -281,4 +293,24 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de } return cab as AttachedCab } + + override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { + super.onCreateOptionsMenu(menu, inflater) + inflater.inflate(R.menu.menu_clear_history, menu) + if (showClearHistoryOption) { + menu.findItem(R.id.action_clear_history).isVisible = true // Show Clear History option + } + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + + when (item.itemId) { + R.id.action_clear_history -> libraryViewModel.clearHistory() + /* + TODO("Show a snackbar showing that history has been successfully + cleared and that will have an undo button") + */ + } + return false + } } From 0cdc83818a0ac876e757041188d623709ea18333 Mon Sep 17 00:00:00 2001 From: Omar Date: Fri, 4 Mar 2022 14:01:34 +0200 Subject: [PATCH 2/6] Added a query to clear song history --- app/src/main/java/code/name/monkey/retromusic/db/HistoryDao.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/code/name/monkey/retromusic/db/HistoryDao.kt b/app/src/main/java/code/name/monkey/retromusic/db/HistoryDao.kt index d8c6578d1..c8b2e3165 100644 --- a/app/src/main/java/code/name/monkey/retromusic/db/HistoryDao.kt +++ b/app/src/main/java/code/name/monkey/retromusic/db/HistoryDao.kt @@ -39,4 +39,7 @@ interface HistoryDao { @Query("SELECT * FROM HistoryEntity ORDER BY time_played DESC LIMIT $HISTORY_LIMIT") fun observableHistorySongs(): LiveData> + + @Query("DELETE FROM HistoryEntity") + suspend fun clearHistory() } From 71282919d357ad98ada1cdef669697b7466f2351 Mon Sep 17 00:00:00 2001 From: Omar Date: Fri, 4 Mar 2022 14:03:45 +0200 Subject: [PATCH 3/6] Added clear history fun & change observableHistorySongs to MutableLiveData --- .../retromusic/fragments/LibraryViewModel.kt | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt index be3904175..b462da4aa 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/LibraryViewModel.kt @@ -49,6 +49,7 @@ class LibraryViewModel( private val genres = MutableLiveData>() private val searchResults = MutableLiveData>() private val fabMargin = MutableLiveData(0) + private val songHistory = MutableLiveData>() val paletteColor: LiveData = _paletteColor init { @@ -320,20 +321,30 @@ class LibraryViewModel( emit(repository.contributor()) } - fun observableHistorySongs(): LiveData> = liveData { + fun observableHistorySongs(): LiveData> { val songs = repository.historySong().map { it.toSong() } - emit(songs) + songHistory.value = songs // Cleaning up deleted or moved songs - songs.forEach { song -> - if (!File(song.data).exists() || song.id == -1L) { - repository.deleteSongInHistory(song.id) + viewModelScope.launch { + songs.forEach { song -> + if (!File(song.data).exists() || song.id == -1L) { + repository.deleteSongInHistory(song.id) + } } } - emit(repository.historySong().map { + songHistory.value = repository.historySong().map { it.toSong() - }) + } + return songHistory + } + + fun clearHistory() { + viewModelScope.launch(IO) { + repository.clearSongHistory() + } + songHistory.value = emptyList() } fun favorites() = repository.favorites() From 4562afd544cbebe6d840783cda7d65c998859637 Mon Sep 17 00:00:00 2001 From: Omar Date: Fri, 4 Mar 2022 14:04:21 +0200 Subject: [PATCH 4/6] Created new menu with item "Clear History" --- app/src/main/res/menu/menu_clear_history.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 app/src/main/res/menu/menu_clear_history.xml diff --git a/app/src/main/res/menu/menu_clear_history.xml b/app/src/main/res/menu/menu_clear_history.xml new file mode 100644 index 000000000..5563e2d95 --- /dev/null +++ b/app/src/main/res/menu/menu_clear_history.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file From ddf801f9f3d341fc4a0657292f1a16a7af35e0d6 Mon Sep 17 00:00:00 2001 From: Omar Date: Fri, 4 Mar 2022 14:05:41 +0200 Subject: [PATCH 5/6] Added clear history function to repositories --- .../code/name/monkey/retromusic/repository/Repository.kt | 5 +++++ .../code/name/monkey/retromusic/repository/RoomRepository.kt | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt index 71d79ef6a..9ab706a7f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/Repository.kt @@ -100,6 +100,7 @@ interface Repository { suspend fun updateSongInPlayCount(playCountEntity: PlayCountEntity) suspend fun deleteSongInPlayCount(playCountEntity: PlayCountEntity) suspend fun deleteSongInHistory(songId: Long) + suspend fun clearSongHistory() suspend fun checkSongExistInPlayCount(songId: Long): List suspend fun playCountSongs(): List suspend fun blackListPaths(): List @@ -330,6 +331,10 @@ class RealRepository( override suspend fun deleteSongInHistory(songId: Long) = roomRepository.deleteSongInHistory(songId) + override suspend fun clearSongHistory() { + roomRepository.clearSongHistory() + } + override suspend fun checkSongExistInPlayCount(songId: Long): List = roomRepository.checkSongExistInPlayCount(songId) diff --git a/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt b/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt index d2b8ec619..ab1fa058b 100644 --- a/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt +++ b/app/src/main/java/code/name/monkey/retromusic/repository/RoomRepository.kt @@ -39,6 +39,7 @@ interface RoomRepository { suspend fun updateSongInPlayCount(playCountEntity: PlayCountEntity) suspend fun deleteSongInPlayCount(playCountEntity: PlayCountEntity) suspend fun deleteSongInHistory(songId: Long) + suspend fun clearSongHistory() suspend fun checkSongExistInPlayCount(songId: Long): List suspend fun playCountSongs(): List suspend fun insertBlacklistPath(blackListStoreEntities: List) @@ -170,6 +171,10 @@ class RealRoomRepository( historyDao.deleteSongInHistory(songId) } + override suspend fun clearSongHistory() { + historyDao.clearHistory() + } + override suspend fun checkSongExistInPlayCount(songId: Long): List = playCountDao.checkSongExistInPlayCount(songId) From 39c06ec652d6c5736e867bb8141f016270c43947 Mon Sep 17 00:00:00 2001 From: Omar Date: Fri, 4 Mar 2022 14:06:21 +0200 Subject: [PATCH 6/6] Added string for 'clear history' menu item --- app/src/main/res/values/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e59a3b283..2c97ba5d3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -206,6 +206,7 @@ Need more help? Hinge History + Clear History Home Horizontal flip Image