From 073629764ed25db91e940603795252a36d6c0163 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Sun, 27 May 2018 21:22:17 +0200 Subject: [PATCH] Added sectioned fastscrolling to nick and buffer lists --- app/build.gradle.kts | 1 + .../quasseldroid/ui/chat/buffers/BufferListAdapter.kt | 5 ++++- .../ui/chat/messages/QuasselMessageRenderer.kt | 2 +- .../quasseldroid/ui/chat/nicks/NickListAdapter.kt | 10 +++++++++- .../quasseldroid/ui/chat/nicks/NickListFragment.kt | 1 + .../kuschku/quasseldroid/util/ui/DrawerRecyclerView.kt | 4 ++-- app/src/main/res/layout/fragment_chat_list.xml | 6 ++++-- app/src/main/res/layout/fragment_nick_list.xml | 5 ++++- .../kuschku/quasseldroid/viewmodel/data/IrcUserItem.kt | 1 + 9 files changed, 27 insertions(+), 8 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a38f2ac74..bbdc960c5 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -166,6 +166,7 @@ dependencies { // UI implementation("me.zhanghai.android.materialprogressbar", "library", "1.4.2") + implementation("com.simplecityapps", "recyclerview-fastscroll", "1.0.18") withVersion("0.9.6.0") { implementation("com.afollestad.material-dialogs", "core", version) implementation("com.afollestad.material-dialogs", "commons", version) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt index be60564e2..b8f769479 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt @@ -29,6 +29,7 @@ import android.widget.ImageView import android.widget.TextView import butterknife.BindView import butterknife.ButterKnife +import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView import de.kuschku.libquassel.protocol.BufferId import de.kuschku.libquassel.protocol.Buffer_Activity import de.kuschku.libquassel.protocol.NetworkId @@ -57,7 +58,9 @@ class BufferListAdapter( override fun areContentsTheSame(oldItem: BufferListItem, newItem: BufferListItem) = oldItem == newItem } -) { +), FastScrollRecyclerView.SectionedAdapter { + override fun getSectionName(position: Int) = getItem(position).props.network.networkName + private var clickListener: ((BufferId) -> Unit)? = null private var longClickListener: ((BufferId) -> Unit)? = null private var updateFinishedListener: ((List<BufferListItem>) -> Unit)? = null diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt index 7b5a0cce5..31fd41ade 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt @@ -128,7 +128,7 @@ class QuasselMessageRenderer @Inject constructor( viewHolder.realname?.setTextColor(getColor(1, 0)) viewHolder.combined?.setTextColor(getColor(0, 0)) viewHolder.content?.setTextColor(getColor(0, 0)) - viewHolder.itemView.background = LayerDrawable( + viewHolder.messageContainer?.background = LayerDrawable( arrayOf( ColorDrawable(getColor(2, 0)), getDrawable(3) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListAdapter.kt index 024db116d..ffb92f96a 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListAdapter.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListAdapter.kt @@ -29,8 +29,11 @@ import android.widget.ImageView import android.widget.TextView import butterknife.BindView import butterknife.ButterKnife +import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView +import de.kuschku.libquassel.util.helpers.nullIf import de.kuschku.quasseldroid.R import de.kuschku.quasseldroid.settings.MessageSettings +import de.kuschku.quasseldroid.util.helper.letIf import de.kuschku.quasseldroid.util.helper.loadAvatars import de.kuschku.quasseldroid.util.helper.visibleIf import de.kuschku.quasseldroid.util.ui.SpanFormatter @@ -46,7 +49,12 @@ class NickListAdapter( override fun areContentsTheSame(oldItem: IrcUserItem?, newItem: IrcUserItem?) = oldItem == newItem - }) { + }), FastScrollRecyclerView.SectionedAdapter { + override fun getSectionName(position: Int) = getItem(position).let { + it.modes.letIf(it.modes.isNotEmpty()) { it.substring(0, 1) } + + (it.initial.nullIf(String?::isNullOrBlank) ?: "123") + } + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NickViewHolder { val holder = NickViewHolder( LayoutInflater.from(parent.context).inflate( diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListFragment.kt index 6b00e1e4c..936fbe74f 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListFragment.kt @@ -146,6 +146,7 @@ class NickListFragment : ServiceBoundFragment() { if (messageSettings.squareAvatars) it.buildRect(initial, senderColor) else it.buildRound(initial, senderColor) }, + initial = initial, modes = when (messageSettings.showPrefix) { MessageSettings.ShowPrefixMode.ALL -> it.modes diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/DrawerRecyclerView.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/DrawerRecyclerView.kt index d092b8b9d..e4cb9d8cc 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/DrawerRecyclerView.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/DrawerRecyclerView.kt @@ -24,15 +24,15 @@ import android.graphics.Canvas import android.graphics.Rect import android.graphics.drawable.Drawable import android.support.v4.view.ViewCompat -import android.support.v7.widget.RecyclerView import android.util.AttributeSet +import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView import de.kuschku.quasseldroid.R class DrawerRecyclerView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 -) : RecyclerView(context, attrs, defStyleAttr) { +) : FastScrollRecyclerView(context, attrs, defStyleAttr) { private var mInsetForeground: Drawable? = null private var mInsets: Rect? = null private val mTempRect = Rect() diff --git a/app/src/main/res/layout/fragment_chat_list.xml b/app/src/main/res/layout/fragment_chat_list.xml index 1b012fa57..d504210af 100644 --- a/app/src/main/res/layout/fragment_chat_list.xml +++ b/app/src/main/res/layout/fragment_chat_list.xml @@ -49,10 +49,12 @@ </android.support.design.widget.AppBarLayout> - <android.support.v7.widget.RecyclerView + <com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView android:id="@+id/chatList" android:layout_width="match_parent" android:layout_height="match_parent" - android:scrollbars="vertical" + app:fastScrollPopupBgColor="?colorAccent" + app:fastScrollPopupTextColor="?colorTextPrimaryInverse" + app:fastScrollThumbColor="?colorAccent" tools:listitem="@layout/widget_buffer" /> </LinearLayout> diff --git a/app/src/main/res/layout/fragment_nick_list.xml b/app/src/main/res/layout/fragment_nick_list.xml index 7fb62aa72..6d4396b2b 100644 --- a/app/src/main/res/layout/fragment_nick_list.xml +++ b/app/src/main/res/layout/fragment_nick_list.xml @@ -18,6 +18,7 @@ --> <de.kuschku.quasseldroid.util.ui.DrawerRecyclerView xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/nickList" android:layout_width="match_parent" @@ -25,6 +26,8 @@ android:background="?attr/colorBackground" android:clipToPadding="false" android:fitsSystemWindows="true" - android:scrollbars="vertical" + app:fastScrollPopupBgColor="?colorAccent" + app:fastScrollPopupTextColor="?colorTextPrimaryInverse" + app:fastScrollThumbColor="?colorAccent" tools:listitem="@layout/widget_nick" tools:showIn="@layout/activity_main" /> diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/IrcUserItem.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/IrcUserItem.kt index ec8bfd49c..da69e6f49 100644 --- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/IrcUserItem.kt +++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/IrcUserItem.kt @@ -31,6 +31,7 @@ data class IrcUserItem( val self: Boolean, val networkCasemapping: String?, val avatarUrls: List<Avatar> = emptyList(), + val initial: String? = "", val fallbackDrawable: Drawable? = null, val displayNick: CharSequence? = null ) -- GitLab