From 7dcaf5b1a64112d001d442cecf2687c7896b7efa Mon Sep 17 00:00:00 2001 From: Nite Date: Mon, 23 Nov 2020 13:55:28 +0100 Subject: [PATCH] Added Fastscroll Library with section popup support Fixed collation for the sorting of tha Artist list --- dependencies.gradle | 2 ++ ultrasonic/build.gradle | 1 + .../ultrasonic/activity/ArtistRowAdapter.kt | 13 ++++++++++--- ultrasonic/src/main/res/layout/select_artist.xml | 16 ++++++++++------ 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index be338ccc..cffa0219 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -38,6 +38,7 @@ ext.versions = [ robolectric : "4.4", dexter : "6.1.2", timber : "4.7.1", + fastScroll : "2.0.1", ] ext.gradlePlugins = [ @@ -77,6 +78,7 @@ ext.other = [ picasso : "com.squareup.picasso:picasso:$versions.picasso", dexter : "com.karumi:dexter:$versions.dexter", timber : "com.jakewharton.timber:timber:$versions.timber", + fastScroll : "com.simplecityapps:recyclerview-fastscroll:$versions.fastScroll", ] ext.testing = [ diff --git a/ultrasonic/build.gradle b/ultrasonic/build.gradle index 479eb980..415ea07a 100644 --- a/ultrasonic/build.gradle +++ b/ultrasonic/build.gradle @@ -77,6 +77,7 @@ dependencies { implementation other.koinAndroid implementation other.koinViewModel implementation other.okhttpLogging + implementation other.fastScroll kapt androidSupport.room diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/ArtistRowAdapter.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/ArtistRowAdapter.kt index 4f355ba0..52858a3c 100644 --- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/ArtistRowAdapter.kt +++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/activity/ArtistRowAdapter.kt @@ -29,11 +29,13 @@ import android.widget.PopupMenu import android.widget.RelativeLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView +import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView.SectionedAdapter import org.moire.ultrasonic.R import org.moire.ultrasonic.data.ActiveServerProvider.Companion.isOffline import org.moire.ultrasonic.domain.Artist import org.moire.ultrasonic.domain.MusicDirectory import org.moire.ultrasonic.util.ImageLoader +import java.text.Collator /** * Creates a Row in a RecyclerView which contains the details of an Artist @@ -45,14 +47,14 @@ class ArtistRowAdapter( val onArtistClick: (Artist) -> Unit, val onContextMenuClick: (MenuItem, Artist) -> Boolean, val onFolderClick: (view: View) -> Unit, - val imageLoader: ImageLoader -) : RecyclerView.Adapter() { + private val imageLoader: ImageLoader +) : RecyclerView.Adapter(), SectionedAdapter { /** * Sets the data to be displayed in the RecyclerView */ fun setData(data: List) { - artistList = data.sortedBy { t -> t.name } + artistList = data.sortedWith(compareBy(Collator.getInstance()){ t -> t.name }) notifyDataSetChanged() } @@ -133,6 +135,11 @@ class ArtistRowAdapter( return if (position == 0 && shouldShowHeader) TYPE_HEADER else TYPE_ITEM } + override fun getSectionName(position: Int): String { + val listPosition = if (shouldShowHeader) position - 1 else position + return getSectionFromName(artistList[listPosition].name ?: " ") + } + private fun getSectionForArtist(artistPosition: Int): String { if (artistPosition == 0) return getSectionFromName(artistList[artistPosition].name ?: " ") diff --git a/ultrasonic/src/main/res/layout/select_artist.xml b/ultrasonic/src/main/res/layout/select_artist.xml index 78448455..455f8531 100644 --- a/ultrasonic/src/main/res/layout/select_artist.xml +++ b/ultrasonic/src/main/res/layout/select_artist.xml @@ -13,18 +13,22 @@ a:layout_height="0dip" a:layout_weight="1.0"> - + app:fastScrollAutoHide="true" + app:fastScrollAutoHideDelay="2000" + app:fastScrollPopupTextSize="28sp" + app:fastScrollPopupBackgroundSize="42dp" + app:fastScrollPopupBgColor="@color/cyan" + app:fastScrollPopupTextColor="@android:color/primary_text_dark" + app:fastScrollPopupPosition="adjacent" + app:fastScrollTrackColor="@color/dividerColor" + app:fastScrollThumbColor="@color/cyan" />