diff --git a/app/src/main/java/code/name/monkey/retromusic/Constants.kt b/app/src/main/java/code/name/monkey/retromusic/Constants.kt index 13574349a..93012f84e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/Constants.kt +++ b/app/src/main/java/code/name/monkey/retromusic/Constants.kt @@ -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" \ No newline at end of file +const val SWIPE_ANYWHERE_NOW_PLAYING = "swipe_anywhere_now_playing" +const val PAUSE_HISTORY = "pause_history" \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt index 4c70a87bd..1e05c367f 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsMusicServiceActivity.kt @@ -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 pause history option is ON or OFF + if (!PreferenceUtil.pauseHistory) { + repository.addSongToHistory(MusicPlayerRemote.currentSong) + } } val songs = repository.checkSongExistInPlayCount(MusicPlayerRemote.currentSong.id) if (songs.isNotEmpty()) { 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 f5fe9076c..303807d49 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 @@ -50,6 +50,7 @@ class LibraryViewModel( private val searchResults = MutableLiveData>() private val fabMargin = MutableLiveData(0) private val songHistory = MutableLiveData>() + private var previousSongHistory = ArrayList() val paletteColor: LiveData = _paletteColor init { @@ -342,11 +343,27 @@ class LibraryViewModel( fun clearHistory() { viewModelScope.launch(IO) { + previousSongHistory = repository.historySong() as ArrayList + repository.clearSongHistory() } songHistory.value = emptyList() } + + fun restoreHistory() { + viewModelScope.launch(IO) { + if (previousSongHistory.isNotEmpty()) { + val history = ArrayList() + for (song in previousSongHistory) { + repository.addSongToHistory(song.toSong()) + history.add(song.toSong()) + } + songHistory.postValue(history) + } + } + } + fun favorites() = repository.favorites() fun clearSearchResult() { 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 70cf65df7..2714954b4 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 @@ -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() @@ -162,9 +164,12 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de adapter = songAdapter layoutManager = linearLayoutManager() } + libraryViewModel.observableHistorySongs().observe(viewLifecycleOwner) { songAdapter.swapDataSet(it) + binding.empty.isVisible = it.isEmpty() } + } private fun loadFavorite() { @@ -236,6 +241,7 @@ class DetailListFragment : AbsMainActivityFragment(R.layout.fragment_playlist_de return if (RetroUtil.isLandscape()) 4 else 2 } + override fun onArtist(artistId: Long, view: View) { findNavController().navigate( R.id.artistDetailsFragment, @@ -305,11 +311,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 } diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt index 990f611e9..cb46ec2da 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt @@ -637,6 +637,12 @@ object PreferenceUtil { true ) + val pauseHistory: Boolean + get() = sharedPreferences.getBoolean( + PAUSE_HISTORY, + false + ) + var audioFadeDuration get() = sharedPreferences .getInt(AUDIO_FADE_DURATION, 0) diff --git a/app/src/main/res/layout/fragment_playlist_detail.xml b/app/src/main/res/layout/fragment_playlist_detail.xml index ffaf5985d..e5af7fdbb 100644 --- a/app/src/main/res/layout/fragment_playlist_detail.xml +++ b/app/src/main/res/layout/fragment_playlist_detail.xml @@ -67,6 +67,7 @@ android:textAppearance="@style/TextViewHeadline5" android:textColor="?android:attr/textColorSecondary" tools:visibility="visible" /> + - \ No newline at end of file + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a43a1181e..54c6b2fc9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -356,6 +356,7 @@ If enough space is available, show volume controls in the now playing screen Extract accent color from wallpaper Only show music from /Music Folder + When enabled, newly played songs won\'t show in history Show album cover Navigate by Album Artist Album cover theme @@ -402,6 +403,7 @@ Volume controls Wallpaper accent color Whitelist music + Pause history Pro Black theme, Now playing themes, Carousel effect and more.. Profile @@ -547,4 +549,6 @@ %s created successfully Playlist already exists Added %d song(s) to %s + History cleared + Undo diff --git a/app/src/main/res/xml/pref_ui.xml b/app/src/main/res/xml/pref_ui.xml index 9c37d7e56..9fea05eae 100644 --- a/app/src/main/res/xml/pref_ui.xml +++ b/app/src/main/res/xml/pref_ui.xml @@ -40,6 +40,13 @@ android:summary="@string/pref_summary_suggestions" android:title="@string/pref_title_suggestions" /> + +