Added option to disable history and undo clear history + UX improvements (History Tab)

This commit is contained in:
Omar 2022-03-06 17:58:10 +02:00
parent 0e9392b6c5
commit 9b59c5299a
8 changed files with 100 additions and 13 deletions

View file

@ -163,4 +163,5 @@ const val APPBAR_MODE = "appbar_mode"
const val WALLPAPER_ACCENT = "wallpaper_accent"
const val SCREEN_ON_LYRICS = "screen_on_lyrics"
const val CIRCLE_PLAY_BUTTON = "circle_play_button"
const val SWIPE_ANYWHERE_NOW_PLAYING = "swipe_anywhere_now_playing"
const val SWIPE_ANYWHERE_NOW_PLAYING = "swipe_anywhere_now_playing"
const val KEEP_HISTORY = "keep_history"

View file

@ -31,6 +31,7 @@ import code.name.monkey.retromusic.service.MusicService.Companion.PLAY_STATE_CHA
import code.name.monkey.retromusic.service.MusicService.Companion.QUEUE_CHANGED
import code.name.monkey.retromusic.service.MusicService.Companion.REPEAT_MODE_CHANGED
import code.name.monkey.retromusic.service.MusicService.Companion.SHUFFLE_MODE_CHANGED
import code.name.monkey.retromusic.util.PreferenceUtil
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.koin.android.ext.android.inject
@ -123,7 +124,10 @@ abstract class AbsMusicServiceActivity : AbsBaseActivity(), IMusicServiceEventLi
if (entity != null) {
repository.updateHistorySong(MusicPlayerRemote.currentSong)
} else {
repository.addSongToHistory(MusicPlayerRemote.currentSong)
// Check whether keep history option is ON or OFF
if (PreferenceUtil.homeHistory) {
repository.addSongToHistory(MusicPlayerRemote.currentSong)
}
}
val songs = repository.checkSongExistInPlayCount(MusicPlayerRemote.currentSong.id)
if (songs.isNotEmpty()) {

View file

@ -50,6 +50,7 @@ class LibraryViewModel(
private val searchResults = MutableLiveData<List<Any>>()
private val fabMargin = MutableLiveData(0)
private val songHistory = MutableLiveData<List<Song>>()
private var previousSongHistory = ArrayList<HistoryEntity>()
val paletteColor: LiveData<Int> = _paletteColor
init {
@ -342,11 +343,27 @@ class LibraryViewModel(
fun clearHistory() {
viewModelScope.launch(IO) {
previousSongHistory = repository.historySong() as ArrayList<HistoryEntity>
repository.clearSongHistory()
}
songHistory.value = emptyList()
}
fun restoreHistory() {
viewModelScope.launch(IO) {
if (previousSongHistory.isNotEmpty()) {
val history = ArrayList<Song>()
for (song in previousSongHistory) {
repository.addSongToHistory(song.toSong())
history.add(song.toSong())
}
songHistory.postValue(history)
}
}
}
fun favorites() = repository.favorites()
fun clearSearchResult() {

View file

@ -14,14 +14,13 @@
*/
package code.name.monkey.retromusic.fragments.other
import android.graphics.Color
import android.os.Bundle
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import android.view.*
import androidx.activity.addCallback
import androidx.core.os.bundleOf
import androidx.core.view.doOnPreDraw
import androidx.core.view.isVisible
import androidx.navigation.fragment.FragmentNavigatorExtras
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
@ -44,6 +43,7 @@ import code.name.monkey.retromusic.interfaces.ICabCallback
import code.name.monkey.retromusic.interfaces.ICabHolder
import code.name.monkey.retromusic.model.Album
import code.name.monkey.retromusic.model.Artist
import code.name.monkey.retromusic.util.PreferenceUtil
import code.name.monkey.retromusic.util.RetroColorUtil
import code.name.monkey.retromusic.util.RetroUtil
import com.afollestad.materialcab.attached.AttachedCab
@ -51,8 +51,10 @@ import com.afollestad.materialcab.attached.destroy
import com.afollestad.materialcab.attached.isActive
import com.afollestad.materialcab.createCab
import com.google.android.material.shape.MaterialShapeDrawable
import com.google.android.material.snackbar.Snackbar
import com.google.android.material.transition.MaterialSharedAxis
class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_detail),
IArtistClickListener, IAlbumClickListener, ICabHolder {
private val args by navArgs<DetailListFragmentArgs>()
@ -162,8 +164,23 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de
adapter = songAdapter
layoutManager = linearLayoutManager()
}
libraryViewModel.observableHistorySongs().observe(viewLifecycleOwner) {
songAdapter.swapDataSet(it)
if (PreferenceUtil.homeHistory) { // Observe only if keep history is enabled
libraryViewModel.observableHistorySongs().observe(viewLifecycleOwner) {
songAdapter.swapDataSet(it)
binding.empty.isVisible = it.isEmpty()
}
}
else {
historyDisabled() // Update Ui
binding.emptyButton.setOnClickListener {
findNavController().navigate(
R.id.settingsActivity,
null,
navOptions
)
findNavController().popBackStack()
}
}
}
@ -236,6 +253,12 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de
return if (RetroUtil.isLandscape()) 4 else 2
}
private fun historyDisabled() {
binding.empty.isVisible = true
binding.emptyText.text = getString(R.string.history_disabled)
binding.emptyButton.isVisible = true
}
override fun onArtist(artistId: Long, view: View) {
findNavController().navigate(
R.id.artistDetailsFragment,
@ -305,11 +328,24 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de
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")
*/
R.id.action_clear_history -> {
if (binding.recyclerView.adapter?.itemCount!! > 0) {
libraryViewModel.clearHistory()
val snackBar =
Snackbar.make(binding.container,
getString(R.string.history_cleared),
Snackbar.LENGTH_LONG)
.setAction(getString(R.string.history_undo_button)) {
libraryViewModel.restoreHistory()
}
.setActionTextColor(Color.YELLOW)
val snackBarView = snackBar.view
snackBarView.translationY =
-(resources.getDimension(R.dimen.mini_player_height))
snackBar.show()
}
}
}
return false
}

View file

@ -637,6 +637,12 @@ object PreferenceUtil {
true
)
val homeHistory: Boolean
get() = sharedPreferences.getBoolean(
KEEP_HISTORY,
true
)
var audioFadeDuration
get() = sharedPreferences
.getInt(AUDIO_FADE_DURATION, 0)