From b74feda9c8fddb4ebe10f2cec8c3752cd43331da Mon Sep 17 00:00:00 2001 From: tomaThomas Date: Fri, 11 Oct 2024 21:26:14 +0200 Subject: [PATCH] Add setting to hide search in playlist --- .../code/name/monkey/retromusic/Constants.kt | 3 +- .../song/OrderablePlaylistSongAdapter.kt | 6 ++- .../playlists/PlaylistDetailsFragment.kt | 53 ++++++++++++++----- .../monkey/retromusic/util/PreferenceUtil.kt | 3 ++ .../layout/fragment_playlist_detail_new.xml | 25 ++++++--- app/src/main/res/values/strings.xml | 3 ++ app/src/main/res/xml/pref_ui.xml | 7 +++ 7 files changed, 80 insertions(+), 20 deletions(-) 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 4cb587575..400b1c473 100644 --- a/app/src/main/java/code/name/monkey/retromusic/Constants.kt +++ b/app/src/main/java/code/name/monkey/retromusic/Constants.kt @@ -161,4 +161,5 @@ const val CIRCLE_PLAY_BUTTON = "circle_play_button" const val SWIPE_ANYWHERE_NOW_PLAYING = "swipe_anywhere_now_playing" const val PAUSE_HISTORY = "pause_history" const val MANAGE_AUDIO_FOCUS = "manage_audio_focus" -const val SWIPE_DOWN_DISMISS = "swipe_to_dismiss" \ No newline at end of file +const val SWIPE_DOWN_DISMISS = "swipe_to_dismiss" +const val ENABLE_SEARCH_PLAYLIST= "enable_search_playlist" \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt b/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt index a9f9c0c2d..78f2f53f6 100644 --- a/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt +++ b/app/src/main/java/code/name/monkey/retromusic/adapter/song/OrderablePlaylistSongAdapter.kt @@ -107,7 +107,7 @@ class OrderablePlaylistSongAdapter( super.onClick(v) } else { val position = fullDataSet.indexOf(dataSet.get(layoutPosition)) - MusicPlayerRemote.openQueue(fullDataSet, position, true) + MusicPlayerRemote.openQueueKeepShuffleMode(fullDataSet, position, true) } } @@ -167,4 +167,8 @@ class OrderablePlaylistSongAdapter( } notifyDataSetChanged() } + + fun hasSongs(): Boolean { + return itemCount > 0 || (filtered && fullDataSet.size > 0) + } } diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt index c007c935b..a02cb3dde 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/playlists/PlaylistDetailsFragment.kt @@ -30,6 +30,7 @@ import code.name.monkey.retromusic.helper.MusicPlayerRemote import code.name.monkey.retromusic.helper.menu.PlaylistMenuHelper import code.name.monkey.retromusic.model.Song import code.name.monkey.retromusic.util.MusicUtil +import code.name.monkey.retromusic.util.PreferenceUtil import code.name.monkey.retromusic.util.ThemedFastScroller import com.bumptech.glide.Glide import com.google.android.material.shape.MaterialShapeDrawable @@ -79,6 +80,7 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli // binding.container.transitionName = playlist.playlistEntity.playlistName setUpRecyclerView() + setUpSearch() setupButtons() viewModel.getPlaylist().observe(viewLifecycleOwner) { playlistWithSongs -> playlist = playlistWithSongs @@ -120,6 +122,33 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli } } + private fun setUpSearch() { + if (!PreferenceUtil.enableSearchPlaylist) { + binding.playlistSearchView.visibility = View.GONE + } else { + binding.playlistSearchView.visibility = View.VISIBLE + } + binding.playlistSearchView.addTextChangedListener { text -> + lifecycleScope.launch { + _searchFlow.emit(text) + binding.clearSearch.visibility = + if (text.isNullOrBlank()) View.GONE else View.VISIBLE + } + } + binding.clearSearch.setOnClickListener { + lifecycleScope.launch { + _searchFlow.emit(null) + binding.playlistSearchView.clearText() + binding.clearSearch.visibility = View.GONE + } + } + lifecycleScope.launch { + _searchFlow.debounce(300).collect { text -> + playlistSongAdapter.onFilter(text) + } + } + } + private fun setUpRecyclerView() { playlistSongAdapter = OrderablePlaylistSongAdapter( arguments.extraPlaylistId, @@ -127,16 +156,6 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli ArrayList(), R.layout.item_queue ) - binding.playlistSearchView.addTextChangedListener { text -> - lifecycleScope.launch { - _searchFlow.emit(text) - } - } - lifecycleScope.launch { - _searchFlow.debounce(300).collect { text -> - playlistSongAdapter.onFilter(text) - } - } val dragDropManager = RecyclerViewDragDropManager() @@ -168,8 +187,18 @@ class PlaylistDetailsFragment : AbsMainActivityFragment(R.layout.fragment_playli } private fun checkIsEmpty() { - binding.empty.isVisible = playlistSongAdapter.itemCount == 0 - binding.emptyText.isVisible = playlistSongAdapter.itemCount == 0 + if (_binding != null) { + if (playlistSongAdapter.itemCount != 0) { + binding.empty.isVisible = false + } else { + binding.empty.isVisible = true + if (playlistSongAdapter.hasSongs()) { + binding.emptyText.text = getString(R.string.no_search_results) + } else { + binding.emptyText.text = getString(R.string.no_songs) + } + } + } } override fun onDestroy() { 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 6613c22ab..f01bb0346 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 @@ -680,6 +680,9 @@ object PreferenceUtil { val rememberLastTab: Boolean get() = sharedPreferences.getBoolean(REMEMBER_LAST_TAB, true) + val enableSearchPlaylist: Boolean + get() = sharedPreferences.getBoolean(ENABLE_SEARCH_PLAYLIST, true) + var lastTab: Int get() = sharedPreferences .getInt(LAST_USED_TAB, 0) diff --git a/app/src/main/res/layout/fragment_playlist_detail_new.xml b/app/src/main/res/layout/fragment_playlist_detail_new.xml index 3761902e3..a968a6989 100644 --- a/app/src/main/res/layout/fragment_playlist_detail_new.xml +++ b/app/src/main/res/layout/fragment_playlist_detail_new.xml @@ -35,16 +35,28 @@ android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_constraintTop_toBottomOf="@id/play_button" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toLeftOf="@id/clear_search" android:background="@null" android:hint="@string/action_search" android:inputType="text|textAutoComplete" - android:paddingStart="16dp" - android:paddingEnd="16dp" - android:paddingTop="8dp" - android:paddingBottom="8dp" + android:padding="12dp" android:textAppearance="@style/TextViewSubtitle1"> + + No purchase found. No results You have no songs + No search results Normal Normal lyrics %s is not listed in the media store.]]> @@ -365,6 +366,7 @@ License details for open source software When enabled, newly played songs won\'t show in history Navigate to the last used tab on start + Show a search field in a playlist Display synced lyrics over album cover Show New Music Mix on homescreen Enables changing song by swiping anywhere on the now playing screen @@ -412,6 +414,7 @@ Open source licences Pause history Remember last tab + Enable search in playlist Show lyrics Show suggestions Swipe anywhere to change song diff --git a/app/src/main/res/xml/pref_ui.xml b/app/src/main/res/xml/pref_ui.xml index 3517e949b..58020fa24 100644 --- a/app/src/main/res/xml/pref_ui.xml +++ b/app/src/main/res/xml/pref_ui.xml @@ -67,6 +67,13 @@ android:summary="@string/pref_summary_remember_tab" android:title="@string/pref_title_remember_tab" /> + +