diff --git a/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt b/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt index a8e7cbdb9..fe94eb1a3 100644 --- a/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt +++ b/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt @@ -47,8 +47,11 @@ object PlaylistsHelper { ) } } + sortPlaylists(playlists) + } - when ( + private fun sortPlaylists(playlists: List): List { + return when ( PreferenceHelper.getString(PreferenceKeys.PLAYLISTS_ORDER, "creation_date") ) { "creation_date" -> playlists @@ -56,7 +59,6 @@ object PlaylistsHelper { "alphabetic" -> playlists.sortedBy { it.name?.lowercase() } "alphabetic_reversed" -> playlists.sortedBy { it.name?.lowercase() } .reversed() - else -> playlists } } diff --git a/app/src/main/java/com/github/libretube/ui/fragments/LibraryFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/LibraryFragment.kt index 0433157a8..a350adb89 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/LibraryFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/LibraryFragment.kt @@ -20,6 +20,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.github.libretube.R import com.github.libretube.api.PlaylistsHelper +import com.github.libretube.api.obj.Playlists import com.github.libretube.constants.PreferenceKeys import com.github.libretube.databinding.FragmentLibraryBinding import com.github.libretube.db.DatabaseHolder @@ -31,6 +32,7 @@ import com.github.libretube.ui.adapters.PlaylistBookmarkAdapter import com.github.libretube.ui.adapters.PlaylistsAdapter import com.github.libretube.ui.dialogs.CreatePlaylistDialog import com.github.libretube.ui.models.PlayerViewModel +import com.github.libretube.ui.sheets.BaseBottomSheet import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -95,6 +97,20 @@ class LibraryFragment : Fragment() { fetchPlaylists() }.show(childFragmentManager, CreatePlaylistDialog::class.java.name) } + + binding.sortTV.setOnClickListener { + val sortOptions = resources.getStringArray(R.array.playlistSortingOptions) + val sortOptionValues = resources.getStringArray(R.array.playlistSortingOptionsValues) + + BaseBottomSheet().apply { + setSimpleItems(sortOptions.toList()) { index -> + binding.sortTV.text = sortOptions[index] + val value = sortOptionValues[index] + PreferenceHelper.putString(PreferenceKeys.PLAYLISTS_ORDER, value) + fetchPlaylists() + } + }.show(childFragmentManager) + } } override fun onDestroyView() { @@ -143,26 +159,32 @@ class LibraryFragment : Fragment() { binding.playlistRefresh.isRefreshing = false if (playlists.isNotEmpty()) { - val playlistsAdapter = PlaylistsAdapter( - playlists.toMutableList(), - PlaylistsHelper.getPrivatePlaylistType() - ) - - // listen for playlists to become deleted - playlistsAdapter.registerAdapterDataObserver(object : - RecyclerView.AdapterDataObserver() { - override fun onItemRangeRemoved(positionStart: Int, itemCount: Int) { - _binding?.nothingHere?.isVisible = playlistsAdapter.itemCount == 0 - super.onItemRangeRemoved(positionStart, itemCount) - } - }) - - binding.nothingHere.isGone = true - binding.playlistRecView.adapter = playlistsAdapter + showPlaylists(playlists) } else { binding.nothingHere.isVisible = true } } } } + + private fun showPlaylists(playlists: List) { + val binding = _binding ?: return + + val playlistsAdapter = PlaylistsAdapter( + playlists.toMutableList(), + PlaylistsHelper.getPrivatePlaylistType() + ) + + // listen for playlists to become deleted + playlistsAdapter.registerAdapterDataObserver(object : + RecyclerView.AdapterDataObserver() { + override fun onItemRangeRemoved(positionStart: Int, itemCount: Int) { + _binding?.nothingHere?.isVisible = playlistsAdapter.itemCount == 0 + super.onItemRangeRemoved(positionStart, itemCount) + } + }) + + binding.nothingHere.isGone = true + binding.playlistRecView.adapter = playlistsAdapter + } } diff --git a/app/src/main/res/layout/fragment_library.xml b/app/src/main/res/layout/fragment_library.xml index 50565897b..634d0047f 100644 --- a/app/src/main/res/layout/fragment_library.xml +++ b/app/src/main/res/layout/fragment_library.xml @@ -78,14 +78,32 @@ android:orientation="vertical" android:padding="10dp"> - + android:orientation="horizontal"> + + + + + + - - - - - - \ No newline at end of file