diff --git a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt
index bb57387c0..c804bc496 100644
--- a/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt
+++ b/app/src/main/java/org/oxycblt/auxio/home/HomeFragment.kt
@@ -32,24 +32,25 @@ import com.google.android.material.tabs.TabLayoutMediator
import org.oxycblt.auxio.MainFragmentDirections
import org.oxycblt.auxio.R
import org.oxycblt.auxio.databinding.FragmentHomeBinding
-import org.oxycblt.auxio.home.pager.AlbumListFragment
-import org.oxycblt.auxio.home.pager.ArtistListFragment
-import org.oxycblt.auxio.home.pager.GenreListFragment
-import org.oxycblt.auxio.home.pager.SongListFragment
import org.oxycblt.auxio.logD
import org.oxycblt.auxio.logE
import org.oxycblt.auxio.playback.PlaybackViewModel
+import org.oxycblt.auxio.recycler.DisplayMode
import java.lang.Exception
/**
* The main "Launching Point" fragment of Auxio, allowing navigation to the detail
* views for each respective fragment.
* TODO: Re-add sorting (but new and improved)
- * TODO: Fix issue where elevation will act wrong when switching tabs
+ * TODO: Add lift-on-scroll eventually
* @author OxygenCobalt
*/
class HomeFragment : Fragment() {
private val playbackModel: PlaybackViewModel by activityViewModels()
+ private val tabs = arrayOf(
+ DisplayMode.SHOW_SONGS, DisplayMode.SHOW_ALBUMS,
+ DisplayMode.SHOW_ARTISTS, DisplayMode.SHOW_GENRES
+ )
override fun onCreateView(
inflater: LayoutInflater,
@@ -106,12 +107,11 @@ class HomeFragment : Fragment() {
}
TabLayoutMediator(binding.homeTabs, binding.homePager) { tab, pos ->
- val labelRes = when (pos) {
- 0 -> R.string.lbl_songs
- 1 -> R.string.lbl_albums
- 2 -> R.string.lbl_artists
- 3 -> R.string.lbl_genres
- else -> error("Unreachable")
+ val labelRes = when (tabs[pos]) {
+ DisplayMode.SHOW_SONGS -> R.string.lbl_songs
+ DisplayMode.SHOW_ALBUMS -> R.string.lbl_albums
+ DisplayMode.SHOW_ARTISTS -> R.string.lbl_artists
+ DisplayMode.SHOW_GENRES -> R.string.lbl_genres
}
tab.setText(labelRes)
@@ -128,16 +128,8 @@ class HomeFragment : Fragment() {
private inner class HomePagerAdapter :
FragmentStateAdapter(childFragmentManager, viewLifecycleOwner.lifecycle) {
- override fun createFragment(position: Int): Fragment {
- return when (position) {
- 0 -> SongListFragment()
- 1 -> AlbumListFragment()
- 2 -> ArtistListFragment()
- 3 -> GenreListFragment()
- else -> error("Unreachable")
- }
- }
- override fun getItemCount(): Int = 4
+ override fun getItemCount(): Int = tabs.size
+ override fun createFragment(position: Int): Fragment = HomeListFragment.new(tabs[position])
}
}
diff --git a/app/src/main/java/org/oxycblt/auxio/home/pager/SongListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/HomeListFragment.kt
similarity index 50%
rename from app/src/main/java/org/oxycblt/auxio/home/pager/SongListFragment.kt
rename to app/src/main/java/org/oxycblt/auxio/home/HomeListFragment.kt
index fb2decae9..22627a0d7 100644
--- a/app/src/main/java/org/oxycblt/auxio/home/pager/SongListFragment.kt
+++ b/app/src/main/java/org/oxycblt/auxio/home/HomeListFragment.kt
@@ -1,6 +1,6 @@
/*
* Copyright (c) 2021 Auxio Project
- * GenreListFragment.kt is part of Auxio.
+ * HomeListFragment.kt is part of Auxio.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,7 +16,7 @@
* along with this program. If not, see .
*/
-package org.oxycblt.auxio.home.pager
+package org.oxycblt.auxio.home
import android.os.Bundle
import android.view.LayoutInflater
@@ -24,17 +24,25 @@ import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
+import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.GridLayoutManager
import org.oxycblt.auxio.databinding.FragmentHomeListBinding
-import org.oxycblt.auxio.home.HomeAdapter
-import org.oxycblt.auxio.music.MusicStore
+import org.oxycblt.auxio.music.Album
+import org.oxycblt.auxio.music.Artist
+import org.oxycblt.auxio.music.Genre
import org.oxycblt.auxio.music.Song
import org.oxycblt.auxio.playback.PlaybackViewModel
+import org.oxycblt.auxio.recycler.DisplayMode
import org.oxycblt.auxio.spans
import org.oxycblt.auxio.ui.newMenu
-class SongListFragment : Fragment() {
+/*
+ * Fragment that contains a list of items specified by a [DisplayMode].
+ */
+class HomeListFragment : Fragment() {
+ private val homeModel: HomeViewModel by viewModels()
private val playbackModel: PlaybackViewModel by viewModels()
+ private lateinit var displayMode: DisplayMode
override fun onCreateView(
inflater: LayoutInflater,
@@ -45,13 +53,28 @@ class SongListFragment : Fragment() {
val homeAdapter = HomeAdapter(
doOnClick = { item ->
- playbackModel.playSong(item as Song)
+ when (item) {
+ is Song -> playbackModel.playSong(item)
+
+ is Album -> findNavController().navigate(
+ HomeFragmentDirections.actionShowAlbum(item.id)
+ )
+
+ is Artist -> findNavController().navigate(
+ HomeFragmentDirections.actionShowArtist(item.id)
+ )
+
+ is Genre -> findNavController().navigate(
+ HomeFragmentDirections.actionShowGenre(item.id)
+ )
+
+ else -> {
+ }
+ }
},
::newMenu
)
- homeAdapter.updateData(MusicStore.getInstance().songs)
-
// --- UI SETUP ---
binding.homeRecycler.apply {
@@ -63,6 +86,30 @@ class SongListFragment : Fragment() {
}
}
+ // --- VIEWMODEL SETUP ---
+
+ val data = when (displayMode) {
+ DisplayMode.SHOW_SONGS -> homeModel.songs
+ DisplayMode.SHOW_ALBUMS -> homeModel.albums
+ DisplayMode.SHOW_ARTISTS -> homeModel.artists
+ DisplayMode.SHOW_GENRES -> homeModel.genres
+ }
+
+ data.observe(viewLifecycleOwner) { data ->
+ homeAdapter.updateData(data)
+ }
+
return binding.root
}
+
+ companion object {
+ /*
+ * Instantiates this fragment for use in a ViewPager.
+ */
+ fun new(mode: DisplayMode): HomeListFragment {
+ val fragment = HomeListFragment()
+ fragment.displayMode = mode
+ return fragment
+ }
+ }
}
diff --git a/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt b/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt
new file mode 100644
index 000000000..f5c5e4324
--- /dev/null
+++ b/app/src/main/java/org/oxycblt/auxio/home/HomeViewModel.kt
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2021 Auxio Project
+ * HomeViewModel.kt is part of Auxio.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package org.oxycblt.auxio.home
+
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import org.oxycblt.auxio.music.Album
+import org.oxycblt.auxio.music.Artist
+import org.oxycblt.auxio.music.Genre
+import org.oxycblt.auxio.music.MusicStore
+import org.oxycblt.auxio.music.Song
+
+class HomeViewModel : ViewModel() {
+ private val mGenres = MutableLiveData(listOf())
+ val genres: LiveData> get() = mGenres
+
+ private val mArtists = MutableLiveData(listOf())
+ val artists: LiveData> get() = mArtists
+
+ private val mAlbums = MutableLiveData(listOf())
+ val albums: LiveData> get() = mAlbums
+
+ private val mSongs = MutableLiveData(listOf())
+ val songs: LiveData> get() = mSongs
+
+ private val musicStore = MusicStore.getInstance()
+
+ init {
+ mGenres.value = musicStore.genres
+ mArtists.value = musicStore.artists
+ mAlbums.value = musicStore.albums
+ mSongs.value = musicStore.songs
+ }
+}
diff --git a/app/src/main/java/org/oxycblt/auxio/home/pager/AlbumListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/pager/AlbumListFragment.kt
deleted file mode 100644
index 43df5c1e2..000000000
--- a/app/src/main/java/org/oxycblt/auxio/home/pager/AlbumListFragment.kt
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2021 Auxio Project
- * GenreListFragment.kt is part of Auxio.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package org.oxycblt.auxio.home.pager
-
-import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.fragment.app.Fragment
-import androidx.navigation.fragment.findNavController
-import androidx.recyclerview.widget.GridLayoutManager
-import org.oxycblt.auxio.databinding.FragmentHomeListBinding
-import org.oxycblt.auxio.home.HomeAdapter
-import org.oxycblt.auxio.home.HomeFragmentDirections
-import org.oxycblt.auxio.music.MusicStore
-import org.oxycblt.auxio.spans
-import org.oxycblt.auxio.ui.newMenu
-
-class AlbumListFragment : Fragment() {
- override fun onCreateView(
- inflater: LayoutInflater,
- container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View {
- val binding = FragmentHomeListBinding.inflate(inflater)
-
- val homeAdapter = HomeAdapter(
- doOnClick = { item ->
- findNavController().navigate(HomeFragmentDirections.actionShowAlbum(item.id))
- },
- ::newMenu
- )
-
- homeAdapter.updateData(MusicStore.getInstance().albums)
-
- // --- UI SETUP ---
-
- binding.homeRecycler.apply {
- adapter = homeAdapter
- setHasFixedSize(true)
-
- if (spans != 1) {
- layoutManager = GridLayoutManager(requireContext(), spans)
- }
- }
-
- return binding.root
- }
-}
diff --git a/app/src/main/java/org/oxycblt/auxio/home/pager/ArtistListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/pager/ArtistListFragment.kt
deleted file mode 100644
index f88757b63..000000000
--- a/app/src/main/java/org/oxycblt/auxio/home/pager/ArtistListFragment.kt
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2021 Auxio Project
- * GenreListFragment.kt is part of Auxio.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package org.oxycblt.auxio.home.pager
-
-import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.fragment.app.Fragment
-import androidx.navigation.fragment.findNavController
-import androidx.recyclerview.widget.GridLayoutManager
-import org.oxycblt.auxio.databinding.FragmentHomeListBinding
-import org.oxycblt.auxio.home.HomeAdapter
-import org.oxycblt.auxio.home.HomeFragmentDirections
-import org.oxycblt.auxio.music.MusicStore
-import org.oxycblt.auxio.spans
-import org.oxycblt.auxio.ui.newMenu
-
-class ArtistListFragment : Fragment() {
- override fun onCreateView(
- inflater: LayoutInflater,
- container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View {
- val binding = FragmentHomeListBinding.inflate(inflater)
-
- val homeAdapter = HomeAdapter(
- doOnClick = { item ->
- findNavController().navigate(HomeFragmentDirections.actionShowArtist(item.id))
- },
- ::newMenu
- )
-
- homeAdapter.updateData(MusicStore.getInstance().artists)
-
- // --- UI SETUP ---
-
- binding.homeRecycler.apply {
- adapter = homeAdapter
- setHasFixedSize(true)
-
- if (spans != 1) {
- layoutManager = GridLayoutManager(requireContext(), spans)
- }
- }
-
- return binding.root
- }
-}
diff --git a/app/src/main/java/org/oxycblt/auxio/home/pager/GenreListFragment.kt b/app/src/main/java/org/oxycblt/auxio/home/pager/GenreListFragment.kt
deleted file mode 100644
index 04fcc6806..000000000
--- a/app/src/main/java/org/oxycblt/auxio/home/pager/GenreListFragment.kt
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2021 Auxio Project
- * GenreListFragment.kt is part of Auxio.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package org.oxycblt.auxio.home.pager
-
-import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.fragment.app.Fragment
-import androidx.navigation.fragment.findNavController
-import androidx.recyclerview.widget.GridLayoutManager
-import org.oxycblt.auxio.databinding.FragmentHomeListBinding
-import org.oxycblt.auxio.home.HomeAdapter
-import org.oxycblt.auxio.home.HomeFragmentDirections
-import org.oxycblt.auxio.music.MusicStore
-import org.oxycblt.auxio.spans
-import org.oxycblt.auxio.ui.newMenu
-
-class GenreListFragment : Fragment() {
- override fun onCreateView(
- inflater: LayoutInflater,
- container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View {
- val binding = FragmentHomeListBinding.inflate(inflater)
-
- val homeAdapter = HomeAdapter(
- doOnClick = { item ->
- findNavController().navigate(HomeFragmentDirections.actionShowGenre(item.id))
- },
- ::newMenu
- )
-
- homeAdapter.updateData(MusicStore.getInstance().genres)
-
- // --- UI SETUP ---
-
- binding.homeRecycler.apply {
- adapter = homeAdapter
- setHasFixedSize(true)
-
- if (spans != 1) {
- layoutManager = GridLayoutManager(requireContext(), spans)
- }
- }
-
- return binding.root
- }
-}
diff --git a/app/src/main/java/org/oxycblt/auxio/recycler/DisplayMode.kt b/app/src/main/java/org/oxycblt/auxio/recycler/DisplayMode.kt
index b9df96c1a..4c82c5bbc 100644
--- a/app/src/main/java/org/oxycblt/auxio/recycler/DisplayMode.kt
+++ b/app/src/main/java/org/oxycblt/auxio/recycler/DisplayMode.kt
@@ -19,7 +19,6 @@
package org.oxycblt.auxio.recycler
import androidx.annotation.DrawableRes
-import androidx.annotation.IdRes
import org.oxycblt.auxio.R
/**
@@ -27,35 +26,11 @@ import org.oxycblt.auxio.R
* @author OxygenCobalt
*/
enum class DisplayMode(@DrawableRes val iconRes: Int) {
- SHOW_ALL(R.drawable.ic_sort_none),
SHOW_GENRES(R.drawable.ic_genre),
SHOW_ARTISTS(R.drawable.ic_artist),
SHOW_ALBUMS(R.drawable.ic_album),
SHOW_SONGS(R.drawable.ic_song);
- fun isAllOr(value: DisplayMode) = this == SHOW_ALL || this == value
-
- @IdRes
- fun toId(): Int {
- return when (this) {
- SHOW_ALL -> R.id.option_filter_all
- SHOW_GENRES -> R.id.option_filter_genres
- SHOW_ARTISTS -> R.id.option_filter_artists
- SHOW_ALBUMS -> R.id.option_filter_albums
- SHOW_SONGS -> R.id.option_filter_songs
- }
- }
-
- fun toInt(): Int {
- return when (this) {
- SHOW_ALL -> CONST_SHOW_ALL
- SHOW_GENRES -> CONST_SHOW_GENRES
- SHOW_ARTISTS -> CONST_SHOW_ARTISTS
- SHOW_ALBUMS -> CONST_SHOW_ALBUMS
- SHOW_SONGS -> CONST_SHOW_SONGS
- }
- }
-
companion object {
const val CONST_SHOW_ALL = 0xA107
const val CONST_SHOW_GENRES = 0xA108
@@ -63,30 +38,22 @@ enum class DisplayMode(@DrawableRes val iconRes: Int) {
const val CONST_SHOW_ALBUMS = 0xA10A
const val CONST_SHOW_SONGS = 0xA10B
- fun fromId(@IdRes id: Int): DisplayMode {
- return when (id) {
- R.id.option_filter_all -> SHOW_ALL
- R.id.option_filter_songs -> SHOW_SONGS
- R.id.option_filter_albums -> SHOW_ALBUMS
- R.id.option_filter_artists -> SHOW_ARTISTS
- R.id.option_filter_genres -> SHOW_GENRES
-
- else -> SHOW_ALL
+ fun toSearchInt(value: DisplayMode?): Int {
+ return when (value) {
+ SHOW_SONGS -> CONST_SHOW_SONGS
+ SHOW_ALBUMS -> CONST_SHOW_ALBUMS
+ SHOW_ARTISTS -> CONST_SHOW_ARTISTS
+ SHOW_GENRES -> CONST_SHOW_GENRES
+ null -> CONST_SHOW_ALL
}
}
- /**
- * Get an enum for an int constant
- * @return The [DisplayMode] if the constant is valid, null otherwise.
- */
- fun fromInt(value: Int): DisplayMode? {
+ fun fromSearchInt(value: Int): DisplayMode? {
return when (value) {
- CONST_SHOW_ALL -> SHOW_ALL
- CONST_SHOW_GENRES -> SHOW_GENRES
- CONST_SHOW_ARTISTS -> SHOW_ARTISTS
- CONST_SHOW_ALBUMS -> SHOW_ALBUMS
CONST_SHOW_SONGS -> SHOW_SONGS
-
+ CONST_SHOW_ALBUMS -> SHOW_ALBUMS
+ CONST_SHOW_ARTISTS -> SHOW_ARTISTS
+ CONST_SHOW_GENRES -> SHOW_GENRES
else -> null
}
}
diff --git a/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt b/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt
index fb0bf311d..447f22e67 100644
--- a/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt
+++ b/app/src/main/java/org/oxycblt/auxio/search/SearchFragment.kt
@@ -43,6 +43,7 @@ import org.oxycblt.auxio.music.Genre
import org.oxycblt.auxio.music.Header
import org.oxycblt.auxio.music.Song
import org.oxycblt.auxio.playback.PlaybackViewModel
+import org.oxycblt.auxio.recycler.DisplayMode
import org.oxycblt.auxio.spans
import org.oxycblt.auxio.ui.newMenu
@@ -75,7 +76,15 @@ class SearchFragment : Fragment() {
binding.lifecycleOwner = viewLifecycleOwner
binding.searchToolbar.apply {
- menu.findItem(searchModel.filterMode.toId()).isChecked = true
+ val itemId = when (searchModel.filterMode) {
+ DisplayMode.SHOW_SONGS -> R.id.option_filter_songs
+ DisplayMode.SHOW_ALBUMS -> R.id.option_filter_albums
+ DisplayMode.SHOW_ARTISTS -> R.id.option_filter_artists
+ DisplayMode.SHOW_GENRES -> R.id.option_filter_genres
+ null -> R.id.option_filter_all
+ }
+
+ menu.findItem(itemId).isChecked = true
setNavigationOnClickListener {
requireView().rootView.clearFocus()
diff --git a/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt b/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt
index 9e87fe4b5..9447bf3eb 100644
--- a/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt
+++ b/app/src/main/java/org/oxycblt/auxio/search/SearchViewModel.kt
@@ -39,13 +39,13 @@ import org.oxycblt.auxio.settings.SettingsManager
class SearchViewModel : ViewModel() {
private val mSearchResults = MutableLiveData(listOf())
private var mIsNavigating = false
- private var mFilterMode = DisplayMode.SHOW_ALL
+ private var mFilterMode: DisplayMode? = null
private var mLastQuery = ""
/** Current search results from the last [doSearch] call. */
val searchResults: LiveData> get() = mSearchResults
val isNavigating: Boolean get() = mIsNavigating
- val filterMode: DisplayMode get() = mFilterMode
+ val filterMode: DisplayMode? get() = mFilterMode
private val musicStore = MusicStore.getInstance()
private val settingsManager = SettingsManager.getInstance()
@@ -70,31 +70,33 @@ class SearchViewModel : ViewModel() {
viewModelScope.launch {
val results = mutableListOf()
- if (mFilterMode.isAllOr(DisplayMode.SHOW_ARTISTS)) {
- musicStore.artists.filterByOrNull(query)?.let { artists ->
- results.add(Header(id = -2, name = context.getString(R.string.lbl_artists)))
- results.addAll(artists)
+ // A filter mode of null means to not filter at all.
+
+ if (mFilterMode == null || mFilterMode == DisplayMode.SHOW_SONGS) {
+ musicStore.songs.filterByOrNull(query)?.let { songs ->
+ results.add(Header(id = -2, name = context.getString(R.string.lbl_songs)))
+ results.addAll(songs)
}
}
- if (mFilterMode.isAllOr(DisplayMode.SHOW_ALBUMS)) {
+ if (mFilterMode == null || mFilterMode == DisplayMode.SHOW_ALBUMS) {
musicStore.albums.filterByOrNull(query)?.let { albums ->
results.add(Header(id = -3, name = context.getString(R.string.lbl_albums)))
results.addAll(albums)
}
}
- if (mFilterMode.isAllOr(DisplayMode.SHOW_GENRES)) {
- musicStore.genres.filterByOrNull(query)?.let { genres ->
- results.add(Header(id = -4, name = context.getString(R.string.lbl_genres)))
- results.addAll(genres)
+ if (mFilterMode == null || mFilterMode == DisplayMode.SHOW_ARTISTS) {
+ musicStore.artists.filterByOrNull(query)?.let { artists ->
+ results.add(Header(id = -4, name = context.getString(R.string.lbl_artists)))
+ results.addAll(artists)
}
}
- if (mFilterMode.isAllOr(DisplayMode.SHOW_SONGS)) {
- musicStore.songs.filterByOrNull(query)?.let { songs ->
- results.add(Header(id = -5, name = context.getString(R.string.lbl_songs)))
- results.addAll(songs)
+ if (mFilterMode == null || mFilterMode == DisplayMode.SHOW_GENRES) {
+ musicStore.genres.filterByOrNull(query)?.let { genres ->
+ results.add(Header(id = -5, name = context.getString(R.string.lbl_genres)))
+ results.addAll(genres)
}
}
@@ -107,7 +109,14 @@ class SearchViewModel : ViewModel() {
* New value will be pushed to [filterMode].
*/
fun updateFilterModeWithId(@IdRes id: Int, context: Context) {
- mFilterMode = DisplayMode.fromId(id)
+ mFilterMode = when (id) {
+ R.id.option_filter_songs -> DisplayMode.SHOW_SONGS
+ R.id.option_filter_albums -> DisplayMode.SHOW_ALBUMS
+ R.id.option_filter_artists -> DisplayMode.SHOW_ARTISTS
+ R.id.option_filter_genres -> DisplayMode.SHOW_GENRES
+
+ else -> null
+ }
settingsManager.searchFilterMode = mFilterMode
diff --git a/app/src/main/java/org/oxycblt/auxio/settings/SettingsCompat.kt b/app/src/main/java/org/oxycblt/auxio/settings/SettingsCompat.kt
index 74db3de55..7bec5b494 100644
--- a/app/src/main/java/org/oxycblt/auxio/settings/SettingsCompat.kt
+++ b/app/src/main/java/org/oxycblt/auxio/settings/SettingsCompat.kt
@@ -24,7 +24,6 @@ import androidx.core.content.edit
import org.oxycblt.auxio.accent.ACCENTS
import org.oxycblt.auxio.accent.Accent
import org.oxycblt.auxio.playback.state.PlaybackMode
-import org.oxycblt.auxio.recycler.DisplayMode
// A couple of utils for migrating from old settings values to the new
// formats used in 1.3.2 & 1.4.0
@@ -84,23 +83,6 @@ fun handleAccentCompat(prefs: SharedPreferences): Accent {
return ACCENTS[prefs.getInt(SettingsManager.KEY_ACCENT, 5)]
}
-fun handleLibDisplayCompat(prefs: SharedPreferences): DisplayMode {
- if (prefs.contains(OldKeys.KEY_LIB_MODE)) {
- val mode = prefs.handleOldDisplayMode(OldKeys.KEY_LIB_MODE) ?: DisplayMode.SHOW_ARTISTS
-
- prefs.edit {
- putInt(SettingsManager.KEY_LIB_DISPLAY_MODE, mode.toInt())
- remove(OldKeys.KEY_LIB_MODE)
- apply()
- }
-
- return mode
- }
-
- return prefs.getData(SettingsManager.KEY_LIB_DISPLAY_MODE, DisplayMode::fromInt)
- ?: DisplayMode.SHOW_ARTISTS
-}
-
fun handleSongPlayModeCompat(prefs: SharedPreferences): PlaybackMode {
if (prefs.contains(OldKeys.KEY_SONG_PLAYBACK_MODE)) {
val mode = when (prefs.getStringOrNull(OldKeys.KEY_SONG_PLAYBACK_MODE)) {
@@ -125,44 +107,13 @@ fun handleSongPlayModeCompat(prefs: SharedPreferences): PlaybackMode {
?: PlaybackMode.ALL_SONGS
}
-fun handleSearchModeCompat(prefs: SharedPreferences): DisplayMode {
- if (prefs.contains(OldKeys.KEY_SEARCH_FILTER)) {
- val mode = prefs.handleOldDisplayMode(OldKeys.KEY_SEARCH_FILTER) ?: DisplayMode.SHOW_ALL
-
- prefs.edit {
- putInt(SettingsManager.KEY_SEARCH_FILTER_MODE, mode.toInt())
- remove(OldKeys.KEY_SEARCH_FILTER)
- apply()
- }
-
- return mode
- }
-
- return prefs.getData(SettingsManager.KEY_SEARCH_FILTER_MODE, DisplayMode::fromInt)
- ?: DisplayMode.SHOW_ALL
-}
-
-private fun SharedPreferences.handleOldDisplayMode(key: String): DisplayMode? {
- return when (getStringOrNull(key)) {
- EntryValues.SHOW_GENRES -> DisplayMode.SHOW_GENRES
- EntryValues.SHOW_ARTISTS -> DisplayMode.SHOW_ARTISTS
- EntryValues.SHOW_ALBUMS -> DisplayMode.SHOW_ALBUMS
- EntryValues.SHOW_SONGS -> DisplayMode.SHOW_SONGS
- EntryValues.SHOW_ALL -> DisplayMode.SHOW_ALL
-
- else -> null
- }
-}
-
/**
* Cache of the old keys used in Auxio.
*/
private object OldKeys {
const val KEY_ACCENT = "KEY_ACCENT"
const val KEY_THEME = "KEY_THEME"
- const val KEY_LIB_MODE = "KEY_LIBRARY_DISPLAY_MODE"
const val KEY_SONG_PLAYBACK_MODE = "KEY_SONG_PLAY_MODE"
- const val KEY_SEARCH_FILTER = "KEY_SEARCH"
}
/**
@@ -173,12 +124,6 @@ private object EntryValues {
const val THEME_LIGHT = "LIGHT"
const val THEME_DARK = "DARK"
- const val SHOW_GENRES = "SHOW_GENRES"
- const val SHOW_ARTISTS = "SHOW_ARTISTS"
- const val SHOW_ALBUMS = "SHOW_ALBUMS"
- const val SHOW_SONGS = "SHOW_SONGS"
- const val SHOW_ALL = "SHOW_ALL"
-
const val IN_GENRE = "IN_GENRE"
const val IN_ARTIST = "IN_ARTIST"
const val IN_ALBUM = "IN_ALBUM"
diff --git a/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt b/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt
index f40a75aa5..9d1db8b15 100644
--- a/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt
+++ b/app/src/main/java/org/oxycblt/auxio/settings/SettingsListFragment.kt
@@ -34,7 +34,6 @@ import org.oxycblt.auxio.excluded.ExcludedDialog
import org.oxycblt.auxio.isNight
import org.oxycblt.auxio.logD
import org.oxycblt.auxio.playback.PlaybackViewModel
-import org.oxycblt.auxio.recycler.DisplayMode
import org.oxycblt.auxio.settings.ui.IntListPrefDialog
import org.oxycblt.auxio.settings.ui.IntListPreference
import org.oxycblt.auxio.showToast
@@ -120,15 +119,6 @@ class SettingsListFragment : PreferenceFragmentCompat() {
summary = Accent.get().getDetailedSummary(context)
}
- SettingsManager.KEY_LIB_DISPLAY_MODE -> {
- setIcon(settingsManager.libraryDisplayMode.iconRes)
-
- onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, value ->
- setIcon(DisplayMode.fromInt(value as Int)!!.iconRes)
- true
- }
- }
-
SettingsManager.KEY_SHOW_COVERS -> {
onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, _ ->
Coil.imageLoader(requireContext()).apply {
diff --git a/app/src/main/java/org/oxycblt/auxio/settings/SettingsManager.kt b/app/src/main/java/org/oxycblt/auxio/settings/SettingsManager.kt
index 729b2c039..166ce4b11 100644
--- a/app/src/main/java/org/oxycblt/auxio/settings/SettingsManager.kt
+++ b/app/src/main/java/org/oxycblt/auxio/settings/SettingsManager.kt
@@ -80,10 +80,6 @@ class SettingsManager private constructor(context: Context) :
val useAltNotifAction: Boolean
get() = sharedPrefs.getBoolean(KEY_USE_ALT_NOTIFICATION_ACTION, false)
- /** What to display on the library. */
- val libraryDisplayMode: DisplayMode
- get() = handleLibDisplayCompat(sharedPrefs)
-
/**
* Whether to even loading embedded covers
*/
@@ -118,17 +114,6 @@ class SettingsManager private constructor(context: Context) :
val pauseOnLoop: Boolean
get() = sharedPrefs.getBoolean(KEY_LOOP_PAUSE, false)
- /** The current [SortMode] of the library. */
- var librarySortMode: SortMode
- get() = sharedPrefs.getData(KEY_LIB_SORT_MODE, SortMode::fromInt) ?: SortMode.ALPHA_DOWN
-
- set(value) {
- sharedPrefs.edit {
- putInt(KEY_LIB_SORT_MODE, value.toInt())
- apply()
- }
- }
-
var albumSortMode: SortMode
get() = sharedPrefs.getData(KEY_ALBUM_SORT_MODE, SortMode::fromInt) ?: SortMode.NUMERIC_DOWN
set(value) {
@@ -157,12 +142,12 @@ class SettingsManager private constructor(context: Context) :
}
/** The current filter mode of the search tab */
- var searchFilterMode: DisplayMode
- get() = handleSearchModeCompat(sharedPrefs)
+ var searchFilterMode: DisplayMode?
+ get() = sharedPrefs.getData(KEY_SEARCH_FILTER_MODE, DisplayMode::fromSearchInt)
set(value) {
sharedPrefs.edit {
- putInt(KEY_SEARCH_FILTER_MODE, value.toInt())
+ putInt(KEY_SEARCH_FILTER_MODE, DisplayMode.toSearchInt(value))
apply()
}
}
@@ -191,10 +176,6 @@ class SettingsManager private constructor(context: Context) :
it.onNotifActionUpdate(useAltNotifAction)
}
- KEY_LIB_DISPLAY_MODE -> callbacks.forEach {
- it.onLibDisplayModeUpdate(libraryDisplayMode)
- }
-
KEY_SHOW_COVERS -> callbacks.forEach {
it.onShowCoverUpdate(showCovers)
}
@@ -213,7 +194,6 @@ class SettingsManager private constructor(context: Context) :
interface Callback {
fun onColorizeNotifUpdate(doColorize: Boolean) {}
fun onNotifActionUpdate(useAltAction: Boolean) {}
- fun onLibDisplayModeUpdate(displayMode: DisplayMode) {}
fun onShowCoverUpdate(showCovers: Boolean) {}
fun onQualityCoverUpdate(doQualityCovers: Boolean) {}
}
@@ -223,7 +203,6 @@ class SettingsManager private constructor(context: Context) :
const val KEY_BLACK_THEME = "KEY_BLACK_THEME"
const val KEY_ACCENT = "KEY_ACCENT2"
- const val KEY_LIB_DISPLAY_MODE = "KEY_LIB_MODE"
const val KEY_SHOW_COVERS = "KEY_SHOW_COVERS"
const val KEY_QUALITY_COVERS = "KEY_QUALITY_COVERS"
const val KEY_COLORIZE_NOTIFICATION = "KEY_COLOR_NOTIF"
diff --git a/app/src/main/res/values/styles_core.xml b/app/src/main/res/values/styles_core.xml
index 31b9064b0..c91dc0313 100644
--- a/app/src/main/res/values/styles_core.xml
+++ b/app/src/main/res/values/styles_core.xml
@@ -25,7 +25,6 @@
- ?attr/colorSurface
- ?attr/colorSurface
- - @color/secondary_text
- @font/inter
- @drawable/ui_cursor
diff --git a/app/src/main/res/xml/prefs_main.xml b/app/src/main/res/xml/prefs_main.xml
index 41fcd0036..35c179e59 100644
--- a/app/src/main/res/xml/prefs_main.xml
+++ b/app/src/main/res/xml/prefs_main.xml
@@ -34,15 +34,6 @@
app:layout="@layout/item_header"
app:title="@string/set_display">
-
-