From 128f191264fbf97641ee2f9e63b8083e33867e0e Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 15 Sep 2019 11:26:04 +0200 Subject: [PATCH] show all available contact phone numbers at View screen --- .../pro/activities/ViewContactActivity.kt | 39 ++++++++++++++----- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ViewContactActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ViewContactActivity.kt index 4d2296ae..2bcec6eb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ViewContactActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/ViewContactActivity.kt @@ -18,6 +18,7 @@ import com.simplemobiletools.contacts.pro.dialogs.CallConfirmationDialog import com.simplemobiletools.contacts.pro.extensions.* import com.simplemobiletools.contacts.pro.helpers.* import com.simplemobiletools.contacts.pro.models.Contact +import com.simplemobiletools.contacts.pro.models.PhoneNumber import kotlinx.android.synthetic.main.activity_view_contact.* import kotlinx.android.synthetic.main.item_event.view.* import kotlinx.android.synthetic.main.item_view_address.view.* @@ -32,6 +33,7 @@ class ViewContactActivity : ContactActivity() { private var isViewIntent = false private var wasEditLaunched = false private var shownContactSources = ArrayList() + private var duplicateContacts = ArrayList() private var showFields = 0 override fun onCreate(savedInstanceState: Bundle?) { @@ -196,7 +198,12 @@ class ViewContactActivity : ContactActivity() { window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN) setupFavorite() setupNames() - setupPhoneNumbers() + setupContactSources() + + getDuplicateContacts { + setupPhoneNumbers() + } + setupEmails() setupAddresses() setupIMs() @@ -205,8 +212,6 @@ class ViewContactActivity : ContactActivity() { setupOrganization() setupWebsites() setupGroups() - setupContactSources() - checkDuplicateContacts() } private fun launchEditContact(contact: Contact) { @@ -274,7 +279,21 @@ class ViewContactActivity : ContactActivity() { private fun setupPhoneNumbers() { contact_numbers_holder.removeAllViews() - val phoneNumbers = contact!!.phoneNumbers + var phoneNumbers = contact!!.phoneNumbers.toMutableSet() as LinkedHashSet + duplicateContacts.forEach { + it.phoneNumbers.forEach { + phoneNumbers.add(it) + } + } + + phoneNumbers = phoneNumbers.distinctBy { + if (it.normalizedNumber != null && it.normalizedNumber!!.length >= 7) { + it.normalizedNumber?.substring(it.normalizedNumber!!.length - 7) + } else { + it.normalizedNumber + } + }.toMutableSet() as LinkedHashSet + if (phoneNumbers.isNotEmpty() && showFields and SHOW_PHONE_NUMBERS_FIELD != 0) { phoneNumbers.forEach { layoutInflater.inflate(R.layout.item_view_phone_number, contact_numbers_holder, false).apply { @@ -480,19 +499,21 @@ class ViewContactActivity : ContactActivity() { } } - private fun checkDuplicateContacts() { + private fun getDuplicateContacts(callback: () -> Unit) { ContactsHelper(this).getDuplicatesOfContact(contact!!, false) { contacts -> ensureBackgroundThread { - val duplicates = ArrayList() + duplicateContacts.clear() contacts.forEach { val duplicate = ContactsHelper(this).getContactWithId(it.id, it.isPrivate()) if (duplicate != null) { - duplicates.add(duplicate) + duplicateContacts.add(duplicate) } } - val currContactSources = duplicates.map { it.source } runOnUiThread { + callback() + + val currContactSources = duplicateContacts.map { it.source } if (currContactSources.toString() != shownContactSources.toString()) { for (i in (contact_sources_holder.childCount - 1) downTo 1) { contact_sources_holder.removeView(contact_sources_holder.getChildAt(i)) @@ -501,7 +522,7 @@ class ViewContactActivity : ContactActivity() { } if (shownContactSources.isEmpty()) { - duplicates.forEach { + duplicateContacts.forEach { addContactSource(it) shownContactSources.add(it.source) }