From 9b758b617d31039ef8ccac36b2c6b8f015bc0845 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 13 Apr 2020 21:58:12 +0200 Subject: [PATCH] adding a fastscroller with letters at the contact list --- app/build.gradle | 1 + .../smsmessenger/activities/MainActivity.kt | 2 +- .../activities/NewConversationActivity.kt | 35 +++++++++++++++++++ .../main/res/layout/activity_conversation.xml | 18 ++++++++++ 4 files changed, 55 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index dc1d6854..c9990489 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -40,4 +40,5 @@ dependencies { implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta4' implementation 'org.greenrobot:eventbus:3.2.0' implementation 'com.klinkerapps:android-smsmms:5.2.6' + implementation 'com.github.tibbi:IndicatorFastScroll:08f512858a' } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt index 47524936..a3812c82 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt @@ -212,7 +212,7 @@ class MainActivity : SimpleActivity() { } private fun launchAbout() { - val licenses = LICENSE_EVENT_BUS or LICENSE_SMS_MMS + val licenses = LICENSE_EVENT_BUS or LICENSE_SMS_MMS or LICENSE_INDICATOR_FAST_SCROLL val faqItems = arrayListOf( FAQItem(R.string.faq_1_title, R.string.faq_1_text), diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/NewConversationActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/NewConversationActivity.kt index bdcc2dee..3daea057 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/NewConversationActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/NewConversationActivity.kt @@ -1,9 +1,11 @@ package com.simplemobiletools.smsmessenger.activities import android.content.Intent +import android.content.res.ColorStateList import android.net.Uri import android.os.Bundle import android.view.WindowManager +import com.reddit.indicatorfastscroll.FastScrollItemIndicator import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS import com.simplemobiletools.commons.helpers.ensureBackgroundThread @@ -14,6 +16,8 @@ import com.simplemobiletools.smsmessenger.helpers.* import com.simplemobiletools.smsmessenger.models.Contact import kotlinx.android.synthetic.main.activity_conversation.* import kotlinx.android.synthetic.main.item_suggested_contact.view.* +import java.util.* +import kotlin.collections.ArrayList class NewConversationActivity : SimpleActivity() { private var allContacts = ArrayList() @@ -73,6 +77,18 @@ class NewConversationActivity : SimpleActivity() { } } } + + val states = arrayOf(intArrayOf(android.R.attr.state_enabled), + intArrayOf(-android.R.attr.state_enabled), + intArrayOf(-android.R.attr.state_checked), + intArrayOf(android.R.attr.state_pressed) + ) + val textColor = config.textColor + val colors = intArrayOf(textColor, textColor, textColor, textColor) + val myList = ColorStateList(states, colors) + contacts_letter_fastscroller.textColor = myList + contacts_letter_fastscroller_thumb.setupWithFastScroller(contacts_letter_fastscroller) + contacts_letter_fastscroller_thumb.textColor = config.primaryColor.getContrastColor() } private fun isThirdPartyIntent(): Boolean { @@ -88,6 +104,7 @@ class NewConversationActivity : SimpleActivity() { fillSuggestedContacts { getAvailableContacts { allContacts = it + runOnUiThread { setupAdapter(allContacts) } @@ -112,6 +129,8 @@ class NewConversationActivity : SimpleActivity() { }.apply { contacts_list.adapter = this } + + setupLetterFastscroller(contacts) } private fun fillSuggestedContacts(callback: () -> Unit) { @@ -142,6 +161,22 @@ class NewConversationActivity : SimpleActivity() { } } + private fun setupLetterFastscroller(contacts: ArrayList) { + contacts_letter_fastscroller.setupWithRecyclerView(contacts_list, { position -> + try { + val name = contacts[position].name + var character = if (name.isNotEmpty()) name.substring(0, 1) else "" + if (!character.areLettersOnly()) { + character = "#" + } + + FastScrollItemIndicator.Text(character.toUpperCase(Locale.getDefault())) + } catch (e: Exception) { + FastScrollItemIndicator.Text("") + } + }) + } + private fun launchThreadActivity(phoneNumber: String, name: String) { val text = intent.getStringExtra(Intent.EXTRA_TEXT) ?: "" Intent(this, ThreadActivity::class.java).apply { diff --git a/app/src/main/res/layout/activity_conversation.xml b/app/src/main/res/layout/activity_conversation.xml index 8bd98fc8..79704e5d 100644 --- a/app/src/main/res/layout/activity_conversation.xml +++ b/app/src/main/res/layout/activity_conversation.xml @@ -105,4 +105,22 @@ android:scrollbars="none" app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager" /> + + + +