From 1c27ff3421dbf7820608237dc60a974955efb022 Mon Sep 17 00:00:00 2001 From: Steven Schoen Date: Mon, 23 Sep 2019 14:33:06 -0700 Subject: [PATCH] Handle search adapter updates in MainActivity --- .../java/com/iven/musicplayergo/MainActivity.kt | 12 ++++++++++-- .../src/main/java/com/iven/musicplayergo/Utils.kt | 13 +++++-------- .../iven/musicplayergo/adapters/ArtistsAdapter.kt | 4 ++-- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/project/app/src/main/java/com/iven/musicplayergo/MainActivity.kt b/project/app/src/main/java/com/iven/musicplayergo/MainActivity.kt index 7064f1901..5b96630b7 100644 --- a/project/app/src/main/java/com/iven/musicplayergo/MainActivity.kt +++ b/project/app/src/main/java/com/iven/musicplayergo/MainActivity.kt @@ -125,6 +125,7 @@ class MainActivity : AppCompatActivity() { private lateinit var mSelectedArtistSongs: MutableList private lateinit var mSelectedArtistAlbums: List private var mNavigationArtist: String? = "unknown" + private var mFilteredArtists: List? = null //player private lateinit var mMediaPlayerHolder: MediaPlayerHolder @@ -206,7 +207,14 @@ class MainActivity : AppCompatActivity() { val searchView = search.actionView as SearchView searchView.setIconifiedByDefault(false) - Utils.setupSearch(searchView, mArtistsAdapter, mArtists, mIndicatorFastScrollerView) + Utils.setupSearch(searchView, mArtists, mIndicatorFastScrollerView, onResultsChanged = { newResults -> + mFilteredArtists = if (newResults.isEmpty()) { + null + } else { + newResults + } + mArtistsAdapter.setArtists(mFilteredArtists ?: mArtists) + }) } return super.onCreateOptionsMenu(menu) } @@ -525,7 +533,7 @@ class MainActivity : AppCompatActivity() { mIndicatorFastScrollerView.setupWithRecyclerView( mArtistsRecyclerView, { position -> - val item = mArtists[position] // Get your model object + val item = (mFilteredArtists ?: mArtists)[position] // Get your model object // or fetch the section at [position] from your database FastScrollItemIndicator.Text( diff --git a/project/app/src/main/java/com/iven/musicplayergo/Utils.kt b/project/app/src/main/java/com/iven/musicplayergo/Utils.kt index 7957001fa..d0d57a3c2 100644 --- a/project/app/src/main/java/com/iven/musicplayergo/Utils.kt +++ b/project/app/src/main/java/com/iven/musicplayergo/Utils.kt @@ -10,7 +10,6 @@ import android.widget.Toast import androidx.appcompat.widget.SearchView import androidx.core.content.ContextCompat import androidx.core.graphics.ColorUtils -import com.iven.musicplayergo.adapters.ArtistsAdapter import com.pranavpandey.android.dynamic.toasts.DynamicToast import com.reddit.indicatorfastscroll.FastScrollerView @@ -28,16 +27,16 @@ object Utils { @JvmStatic fun setupSearch( searchView: SearchView, - artistsAdapter: ArtistsAdapter, artists: List, - indicator: FastScrollerView + indicator: FastScrollerView, + onResultsChanged: (List) -> Unit ) { searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { override fun onQueryTextChange(newText: String): Boolean { - processQuery(newText, artistsAdapter, artists) + onResultsChanged(processQuery(newText, artists)) return false } @@ -55,7 +54,7 @@ object Utils { @SuppressLint("DefaultLocale") @JvmStatic - private fun processQuery(query: String, artistsAdapter: ArtistsAdapter, artists: List) { + private fun processQuery(query: String, artists: List): List { // in real app you'd have it instantiated just once val results = mutableListOf() @@ -70,9 +69,7 @@ object Utils { e.printStackTrace() } - if (results.size > 0) { - artistsAdapter.setQueryResults(results) - } + return results } //get theme diff --git a/project/app/src/main/java/com/iven/musicplayergo/adapters/ArtistsAdapter.kt b/project/app/src/main/java/com/iven/musicplayergo/adapters/ArtistsAdapter.kt index 770a10058..f0b9f7bae 100644 --- a/project/app/src/main/java/com/iven/musicplayergo/adapters/ArtistsAdapter.kt +++ b/project/app/src/main/java/com/iven/musicplayergo/adapters/ArtistsAdapter.kt @@ -19,13 +19,13 @@ class ArtistsAdapter( RecyclerView.Adapter() { var onArtistClick: ((String?) -> Unit)? = null - private var mArtists = artists + private var mArtists: List = artists init { Collections.sort(mArtists, String.CASE_INSENSITIVE_ORDER) } - fun setQueryResults(artists: MutableList) { + fun setArtists(artists: List) { mArtists = artists notifyDataSetChanged() }