From b545a0dd9ebaa709fa7fe62c80e9353d48c7d354 Mon Sep 17 00:00:00 2001 From: theoUniv <149110726+theoUniv@users.noreply.github.com> Date: Tue, 26 Mar 2024 06:40:04 +0100 Subject: [PATCH] Formatting the phone number with user's region Example: (US) 5554567890 -> (555)456-7890 (France) 0781635535 -> 07 81 63 55 35 Original PR: https://github.com/FossifyOrg/Contacts/pull/72 --------- Co-authored-by: Naveen Singh <36371707+naveensingh@users.noreply.github.com> Co-authored-by: Naveen --- .../contacts/activities/SettingsActivity.kt | 9 +++++++++ .../contacts/activities/ViewContactActivity.kt | 13 ++++++++----- .../fossify/contacts/adapters/ContactsAdapter.kt | 13 +++++++++++-- .../org/fossify/contacts/extensions/Activity.kt | 1 - .../org/fossify/contacts/extensions/String.kt | 13 +++++++++++++ .../kotlin/org/fossify/contacts/helpers/Config.kt | 4 ++++ .../org/fossify/contacts/helpers/Constants.kt | 1 + app/src/main/res/layout/activity_settings.xml | 15 +++++++++++++++ app/src/main/res/values/strings.xml | 1 + 9 files changed, 62 insertions(+), 8 deletions(-) create mode 100644 app/src/main/kotlin/org/fossify/contacts/extensions/String.kt diff --git a/app/src/main/kotlin/org/fossify/contacts/activities/SettingsActivity.kt b/app/src/main/kotlin/org/fossify/contacts/activities/SettingsActivity.kt index d0d822fd..97bbdb23 100644 --- a/app/src/main/kotlin/org/fossify/contacts/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/org/fossify/contacts/activities/SettingsActivity.kt @@ -52,6 +52,7 @@ class SettingsActivity : SimpleActivity() { setupLanguage() setupShowContactThumbnails() setupShowPhoneNumbers() + setupEnableNumberFormatting() setupShowContactsWithNumbers() setupStartNameWithSurname() setupMergeDuplicateContacts() @@ -165,6 +166,14 @@ class SettingsActivity : SimpleActivity() { } } + private fun setupEnableNumberFormatting(){ + binding.settingsFormatPhoneNumbers.isChecked = config.formatPhoneNumbers + binding.settingsFormatPhoneNumbersHolder.setOnClickListener{ + binding.settingsFormatPhoneNumbers.toggle() + config.formatPhoneNumbers = binding.settingsFormatPhoneNumbers.isChecked + } + } + private fun setupShowPhoneNumbers() { binding.settingsShowPhoneNumbers.isChecked = config.showPhoneNumbers binding.settingsShowPhoneNumbersHolder.setOnClickListener { diff --git a/app/src/main/kotlin/org/fossify/contacts/activities/ViewContactActivity.kt b/app/src/main/kotlin/org/fossify/contacts/activities/ViewContactActivity.kt index 53105cbb..81c70041 100644 --- a/app/src/main/kotlin/org/fossify/contacts/activities/ViewContactActivity.kt +++ b/app/src/main/kotlin/org/fossify/contacts/activities/ViewContactActivity.kt @@ -2,12 +2,14 @@ package org.fossify.contacts.activities import android.content.ActivityNotFoundException import android.content.ContentUris +import android.content.Context import android.content.Intent import android.media.AudioManager import android.media.RingtoneManager import android.net.Uri import android.os.Bundle import android.provider.ContactsContract +import android.telephony.PhoneNumberUtils import android.view.View import android.view.WindowManager import android.widget.RelativeLayout @@ -27,10 +29,7 @@ import org.fossify.contacts.R import org.fossify.contacts.databinding.* import org.fossify.contacts.dialogs.ChooseSocialDialog import org.fossify.contacts.dialogs.ManageVisibleFieldsDialog -import org.fossify.contacts.extensions.config -import org.fossify.contacts.extensions.editContact -import org.fossify.contacts.extensions.getPackageDrawable -import org.fossify.contacts.extensions.startCallIntent +import org.fossify.contacts.extensions.* import org.fossify.contacts.helpers.* import java.util.Locale @@ -383,7 +382,11 @@ class ViewContactActivity : ContactActivity() { phoneNumbers.forEach { phoneNumber -> ItemViewPhoneNumberBinding.inflate(layoutInflater, binding.contactNumbersHolder, false).apply { binding.contactNumbersHolder.addView(root) - contactNumber.text = phoneNumber.value + if (config.formatPhoneNumbers) { + contactNumber.text = phoneNumber.value.formatPhoneNumber() + } else { + contactNumber.text = phoneNumber.value + } contactNumberType.text = getPhoneNumberTypeText(phoneNumber.type, phoneNumber.label) root.copyOnLongClick(phoneNumber.value) diff --git a/app/src/main/kotlin/org/fossify/contacts/adapters/ContactsAdapter.kt b/app/src/main/kotlin/org/fossify/contacts/adapters/ContactsAdapter.kt index 88641ed1..dc30f3e8 100644 --- a/app/src/main/kotlin/org/fossify/contacts/adapters/ContactsAdapter.kt +++ b/app/src/main/kotlin/org/fossify/contacts/adapters/ContactsAdapter.kt @@ -1,6 +1,7 @@ package org.fossify.contacts.adapters import android.annotation.SuppressLint +import android.content.Context import android.content.Intent import android.content.pm.ShortcutInfo import android.content.pm.ShortcutManager @@ -8,6 +9,7 @@ import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable import android.graphics.drawable.Icon import android.graphics.drawable.LayerDrawable +import android.telephony.PhoneNumberUtils import android.util.TypedValue import android.view.Menu import android.view.MotionEvent @@ -40,11 +42,13 @@ import org.fossify.contacts.activities.ViewContactActivity import org.fossify.contacts.dialogs.CreateNewGroupDialog import org.fossify.contacts.extensions.config import org.fossify.contacts.extensions.editContact +import org.fossify.contacts.extensions.formatPhoneNumber import org.fossify.contacts.extensions.shareContacts import org.fossify.contacts.helpers.* import org.fossify.contacts.interfaces.RefreshContactsListener import org.fossify.contacts.interfaces.RemoveFromGroupListener import java.util.Collections +import java.util.Locale class ContactsAdapter( activity: SimpleActivity, @@ -155,6 +159,7 @@ class ContactsAdapter( if (showPhoneNumbers) org.fossify.commons.R.layout.item_contact_with_number else org.fossify.commons.R.layout.item_contact_without_number } } + return createViewHolder(layout, parent) } @@ -408,8 +413,12 @@ class ContactsAdapter( } else { contact.phoneNumbers.firstOrNull { it.value.contains(textToHighlight) } ?: contact.phoneNumbers.firstOrNull() } - - val numberText = phoneNumberToUse?.value ?: "" + val phoneNumberToFormat = phoneNumberToUse?.value ?: "" + val numberText = if (config.formatPhoneNumbers) { + phoneNumberToFormat.formatPhoneNumber() + } else { + phoneNumberToUse?.value ?: "" + } findViewById(org.fossify.commons.R.id.item_contact_number).apply { text = if (textToHighlight.isEmpty()) numberText else numberText.highlightTextPart(textToHighlight, properPrimaryColor, false, true) setTextColor(textColor) diff --git a/app/src/main/kotlin/org/fossify/contacts/extensions/Activity.kt b/app/src/main/kotlin/org/fossify/contacts/extensions/Activity.kt index a01444c9..96353f8e 100644 --- a/app/src/main/kotlin/org/fossify/contacts/extensions/Activity.kt +++ b/app/src/main/kotlin/org/fossify/contacts/extensions/Activity.kt @@ -140,4 +140,3 @@ fun SimpleActivity.tryImportContactsFromFile(uri: Uri, callback: (Boolean) -> Un fun SimpleActivity.showImportContactsDialog(path: String, callback: (Boolean) -> Unit) { ImportContactsDialog(this, path, callback) } - diff --git a/app/src/main/kotlin/org/fossify/contacts/extensions/String.kt b/app/src/main/kotlin/org/fossify/contacts/extensions/String.kt new file mode 100644 index 00000000..fa991602 --- /dev/null +++ b/app/src/main/kotlin/org/fossify/contacts/extensions/String.kt @@ -0,0 +1,13 @@ +package org.fossify.contacts.extensions + +import android.telephony.PhoneNumberUtils +import java.util.Locale + +fun String.formatPhoneNumber(minimumLength: Int = 4): String { + val country = Locale.getDefault().country + return if (this.length >= minimumLength) { + PhoneNumberUtils.formatNumber(this, country).toString() + } else { + this + } +} diff --git a/app/src/main/kotlin/org/fossify/contacts/helpers/Config.kt b/app/src/main/kotlin/org/fossify/contacts/helpers/Config.kt index 5be4a497..0406cf43 100644 --- a/app/src/main/kotlin/org/fossify/contacts/helpers/Config.kt +++ b/app/src/main/kotlin/org/fossify/contacts/helpers/Config.kt @@ -9,6 +9,10 @@ class Config(context: Context) : BaseConfig(context) { fun newInstance(context: Context) = Config(context) } + var formatPhoneNumbers: Boolean + get() = prefs.getBoolean(FORMAT_PHONE_NUMBERS, true) + set(formatPhoneNumbers) = prefs.edit().putBoolean(FORMAT_PHONE_NUMBERS, formatPhoneNumbers).apply() + var showTabs: Int get() = prefs.getInt(SHOW_TABS, ALL_TABS_MASK) set(showTabs) = prefs.edit().putInt(SHOW_TABS, showTabs).apply() diff --git a/app/src/main/kotlin/org/fossify/contacts/helpers/Constants.kt b/app/src/main/kotlin/org/fossify/contacts/helpers/Constants.kt index 54b82971..c6e8c5a4 100644 --- a/app/src/main/kotlin/org/fossify/contacts/helpers/Constants.kt +++ b/app/src/main/kotlin/org/fossify/contacts/helpers/Constants.kt @@ -11,6 +11,7 @@ const val ADD_NEW_CONTACT_NUMBER = "add_new_contact_number" const val DEFAULT_FILE_NAME = "contacts.vcf" const val AVOID_CHANGING_TEXT_TAG = "avoid_changing_text_tag" const val AVOID_CHANGING_VISIBILITY_TAG = "avoid_changing_visibility_tag" +const val FORMAT_PHONE_NUMBERS = "format_phone_numbers" const val AUTOMATIC_BACKUP_REQUEST_CODE = 10001 const val AUTO_BACKUP_INTERVAL_IN_DAYS = 1 diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 4c185984..fe697987 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -327,6 +327,21 @@ + + + + + + Show phone numbers Show contact thumbnails + Format phone numbers Show a dialpad button on the main screen On contact click Call contact