From 8d12becafb4c93649750e9c94bfe3b4cd70d7880 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 5 Jan 2019 19:50:48 +0100 Subject: [PATCH] fix #288, add an option to show letters at dialpad --- .../pro/activities/DialpadActivity.kt | 18 +++- .../pro/activities/SettingsActivity.kt | 9 ++ .../contacts/pro/helpers/Config.kt | 4 + .../contacts/pro/helpers/Constants.kt | 1 + app/src/main/res/layout/activity_dialpad.xml | 93 +++++++++++++++++++ app/src/main/res/layout/activity_settings.xml | 24 +++++ app/src/main/res/values/styles.xml | 8 +- 7 files changed, 155 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/DialpadActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/DialpadActivity.kt index ceedf0ff..92ddb569 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/DialpadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/DialpadActivity.kt @@ -7,6 +7,7 @@ import android.net.Uri import android.os.Build import android.os.Bundle import android.provider.Telephony.Sms.Intents.SECRET_CODE_ACTION +import android.telephony.PhoneNumberUtils import android.telephony.TelephonyManager import android.view.KeyEvent import android.view.Menu @@ -58,6 +59,11 @@ class DialpadActivity : SimpleActivity() { val callIcon = resources.getColoredDrawableWithColor(R.drawable.ic_phone_huge, if (isBlackAndWhiteTheme()) Color.BLACK else Color.WHITE) dialpad_call_button.setImageDrawable(callIcon) dialpad_call_button.background.applyColorFilter(getAdjustedPrimaryColor()) + + val showLetters = config.showDialpadLetters + arrayOf(dialpad_2_letters, dialpad_3_letters, dialpad_4_letters, dialpad_5_letters, dialpad_6_letters, dialpad_7_letters, dialpad_8_letters, dialpad_9_letters).forEach { + it.beVisibleIf(showLetters) + } } override fun onResume() { @@ -159,8 +165,18 @@ class DialpadActivity : SimpleActivity() { return } + val showLetters = config.showDialpadLetters (dialpad_list.adapter as? ContactsAdapter)?.finishActMode() - val filtered = contacts.filter { it.doesContainPhoneNumber(text) } as ArrayList + val filtered = contacts.filter { + val convertedName = PhoneNumberUtils.convertKeypadLettersToDigits(it.getNameToDisplay()) + it.doesContainPhoneNumber(text) || (showLetters && convertedName.contains(text, true)) + }.sortedWith(compareBy { + if (showLetters) { + !it.doesContainPhoneNumber(text) + } else { + true + } + }).toMutableList() as ArrayList ContactsAdapter(this, filtered, null, LOCATION_DIALPAD, null, dialpad_list, dialpad_fastscroller, text) { callContact(it as Contact) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/SettingsActivity.kt index db351714..1f38eb4f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/SettingsActivity.kt @@ -42,6 +42,7 @@ class SettingsActivity : SimpleActivity() { setupFilterDuplicates() setupShowCallConfirmation() setupShowDialpadButton() + setupShowDialpadLetters() setupOnContactClick() updateTextColors(settings_holder) } @@ -147,6 +148,14 @@ class SettingsActivity : SimpleActivity() { } } + private fun setupShowDialpadLetters() { + settings_show_dialpad_letters.isChecked = config.showDialpadLetters + settings_show_dialpad_letters_holder.setOnClickListener { + settings_show_dialpad_letters.toggle() + config.showDialpadLetters = settings_show_dialpad_letters.isChecked + } + } + private fun setupOnContactClick() { settings_on_contact_click.text = getOnContactClickText() settings_on_contact_click_holder.setOnClickListener { diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Config.kt index 483ac685..2ebed933 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Config.kt @@ -64,4 +64,8 @@ class Config(context: Context) : BaseConfig(context) { var showDialpadButton: Boolean get() = prefs.getBoolean(SHOW_DIALPAD_BUTTON, true) set(showDialpadButton) = prefs.edit().putBoolean(SHOW_DIALPAD_BUTTON, showDialpadButton).apply() + + var showDialpadLetters: Boolean + get() = prefs.getBoolean(SHOW_DIALPAD_LETTERS, false) + set(showDialpadLetters) = prefs.edit().putBoolean(SHOW_DIALPAD_LETTERS, showDialpadLetters).apply() } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Constants.kt index 9a59aaa4..743ecfac 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/helpers/Constants.kt @@ -18,6 +18,7 @@ const val SHOW_TABS = "show_tabs" const val FILTER_DUPLICATES = "filter_duplicates" const val SHOW_CALL_CONFIRMATION = "show_call_confirmation" const val SHOW_DIALPAD_BUTTON = "show_dialpad_button" +const val SHOW_DIALPAD_LETTERS = "show_dialpad_letters" const val CONTACT_ID = "contact_id" const val SMT_PRIVATE = "smt_private" // used at the contact source of local contacts hidden from other apps diff --git a/app/src/main/res/layout/activity_dialpad.xml b/app/src/main/res/layout/activity_dialpad.xml index 6d06a8b4..721bab1f 100644 --- a/app/src/main/res/layout/activity_dialpad.xml +++ b/app/src/main/res/layout/activity_dialpad.xml @@ -90,6 +90,17 @@ app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toEndOf="@+id/dialpad_1"/> + + + + + + + + + + + + + + + + + + + + + + center - @dimen/medium_margin + @dimen/normal_margin @dimen/normal_margin @dimen/dialpad_text_size ?attr/selectableItemBackgroundBorderless + +