From 87a0ef5a42cba10339e7c68bd77da6897c2f0165 Mon Sep 17 00:00:00 2001
From: Ryan Harg <3821-ryan_harg@users.noreply.dev.funkwhale.audio>
Date: Fri, 9 Dec 2022 08:49:41 +0000
Subject: [PATCH] Filter favorites
---
app/src/main/AndroidManifest.xml | 1 +
.../ffa/adapters/FavoritesAdapter.kt | 10 +++
.../ffa/fragments/AddToPlaylistDialog.kt | 2 +-
.../funkwhale/ffa/fragments/FFAFragment.kt | 27 ++++++--
.../ffa/fragments/FavoritesFragment.kt | 20 +++++-
.../ffa/fragments/LandscapeQueueFragment.kt | 2 +-
.../funkwhale/ffa/fragments/QueueFragment.kt | 2 +-
.../funkwhale/ffa/fragments/TracksFragment.kt | 10 +--
.../java/audio/funkwhale/ffa/model/Track.kt | 13 ++--
.../audio/funkwhale/ffa/utils/Extensions.kt | 3 +
.../main/res/layout/fragment_favorites.xml | 15 ++++-
.../audio/funkwhale/ffa/model/TrackTest.kt | 64 +++++++++++++++++++
.../funkwhale/ffa/utils/ExtensionsKtTest.kt | 30 +++++++++
changes/changelog.d/132.feature | 1 +
14 files changed, 180 insertions(+), 20 deletions(-)
create mode 100644 app/src/test/java/audio/funkwhale/ffa/model/TrackTest.kt
create mode 100644 app/src/test/java/audio/funkwhale/ffa/utils/ExtensionsKtTest.kt
create mode 100644 changes/changelog.d/132.feature
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 24462a3..3dd0c98 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
+
diff --git a/app/src/main/java/audio/funkwhale/ffa/adapters/FavoritesAdapter.kt b/app/src/main/java/audio/funkwhale/ffa/adapters/FavoritesAdapter.kt
index afe16e5..8a1728e 100644
--- a/app/src/main/java/audio/funkwhale/ffa/adapters/FavoritesAdapter.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/adapters/FavoritesAdapter.kt
@@ -37,6 +37,7 @@ class FavoritesAdapter(
private lateinit var binding: RowTrackBinding
var currentTrack: Track? = null
+ var filter = ""
override fun getItemCount() = data.size
@@ -44,6 +45,15 @@ class FavoritesAdapter(
return data[position].id.toLong()
}
+ override fun applyFilter() {
+ data.clear()
+ getUnfilteredData().map {
+ if (it.matchesFilter(filter)) {
+ data.add(it)
+ }
+ }
+ }
+
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
binding = RowTrackBinding.inflate(layoutInflater, parent, false)
diff --git a/app/src/main/java/audio/funkwhale/ffa/fragments/AddToPlaylistDialog.kt b/app/src/main/java/audio/funkwhale/ffa/fragments/AddToPlaylistDialog.kt
index fee6330..3e424ad 100644
--- a/app/src/main/java/audio/funkwhale/ffa/fragments/AddToPlaylistDialog.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/fragments/AddToPlaylistDialog.kt
@@ -106,7 +106,7 @@ object AddToPlaylistDialog {
fetch().untilNetwork(lifecycleScope) { data, isCache, _, hasMore ->
if (isCache) {
- adapter.data = data.toMutableList()
+ adapter.setUnfilteredData(data.toMutableList())
adapter.notifyDataSetChanged()
return@untilNetwork
diff --git a/app/src/main/java/audio/funkwhale/ffa/fragments/FFAFragment.kt b/app/src/main/java/audio/funkwhale/ffa/fragments/FFAFragment.kt
index 0303c87..375087c 100644
--- a/app/src/main/java/audio/funkwhale/ffa/fragments/FFAFragment.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/fragments/FFAFragment.kt
@@ -18,12 +18,26 @@ import com.google.gson.Gson
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.Job
-import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
abstract class FFAAdapter : RecyclerView.Adapter() {
var data: MutableList = mutableListOf()
+ private var unfilteredData: MutableList = mutableListOf()
+
+ fun getUnfilteredData(): MutableList {
+ return unfilteredData
+ }
+
+ fun setUnfilteredData(data: MutableList) {
+ unfilteredData = data
+ applyFilter()
+ }
+
+ open fun applyFilter() {
+ data.clear()
+ data.addAll(unfilteredData)
+ }
init {
super.setHasStableIds(true)
@@ -130,19 +144,20 @@ abstract class FFAFragment>() : Fragment() {
if (isCache) {
moreLoading = false
- adapter.data = data.toMutableList()
+ adapter.setUnfilteredData(data.toMutableList())
adapter.notifyDataSetChanged()
return@launch
}
if (first) {
- adapter.data.clear()
+ adapter.getUnfilteredData().clear()
}
onDataFetched(data)
- adapter.data.addAll(data)
+ adapter.getUnfilteredData().addAll(data)
+ adapter.applyFilter()
withContext(IO) {
try {
@@ -150,7 +165,7 @@ abstract class FFAFragment>() : Fragment() {
FFACache.set(
context,
cacheId,
- Gson().toJson(repository.cache(adapter.data)).toString()
+ Gson().toJson(repository.cache(adapter.getUnfilteredData())).toString()
)
}
} catch (e: ConcurrentModificationException) {
@@ -161,7 +176,7 @@ abstract class FFAFragment>() : Fragment() {
(repository.upstream as? HttpUpstream<*, *>)?.let { upstream ->
if (!isCache && upstream.behavior == HttpUpstream.Behavior.Progressive) {
if (first || needsMoreOffscreenPages()) {
- fetch(Repository.Origin.Network.origin, adapter.data.size)
+ fetch(Repository.Origin.Network.origin, adapter.getUnfilteredData().size)
} else {
moreLoading = false
}
diff --git a/app/src/main/java/audio/funkwhale/ffa/fragments/FavoritesFragment.kt b/app/src/main/java/audio/funkwhale/ffa/fragments/FavoritesFragment.kt
index bd5b53d..8efdda1 100644
--- a/app/src/main/java/audio/funkwhale/ffa/fragments/FavoritesFragment.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/fragments/FavoritesFragment.kt
@@ -1,6 +1,8 @@
package audio.funkwhale.ffa.fragments
import android.os.Bundle
+import android.text.Editable
+import android.text.TextWatcher
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -53,6 +55,20 @@ class FavoritesFragment : FFAFragment