diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/SelectContactActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/SelectContactActivity.kt index 4e1dfdee..bab426b8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/SelectContactActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/SelectContactActivity.kt @@ -99,9 +99,7 @@ class SelectContactActivity : SimpleActivity() { } as ArrayList val contactSources = config.displayContactSources - if (!config.showAllContacts()) { - contacts = contacts.filter { contactSources.contains(it.source) } as ArrayList - } + contacts = contacts.filter { contactSources.contains(it.source) } as ArrayList Contact.sorting = config.sorting Contact.startWithSurname = config.startNameWithSurname diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/FilterContactSourcesAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/FilterContactSourcesAdapter.kt index 3dcd8deb..b1c6ab53 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/FilterContactSourcesAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/FilterContactSourcesAdapter.kt @@ -21,7 +21,7 @@ class FilterContactSourcesAdapter(val activity: SimpleActivity, private val cont init { contactSources.forEachIndexed { index, contactSource -> - if (activity.config.showAllContacts() || displayContactSources.contains(contactSource.name)) { + if (displayContactSources.contains(contactSource.name)) { selectedPositions.add(index) } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/dialogs/SelectContactsDialog.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/dialogs/SelectContactsDialog.kt index 358a7dcd..eed613d0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/dialogs/SelectContactsDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/dialogs/SelectContactsDialog.kt @@ -19,9 +19,7 @@ class SelectContactsDialog(val activity: SimpleActivity, initialContacts: ArrayL var allContacts = initialContacts if (selectContacts == null) { val contactSources = activity.config.displayContactSources - if (!activity.config.showAllContacts()) { - allContacts = allContacts.filter { contactSources.contains(it.source) } as ArrayList - } + allContacts = allContacts.filter { contactSources.contains(it.source) } as ArrayList initiallySelectedContacts = allContacts.filter { it.starred == 1 } as ArrayList } else { diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt index 4e632c8c..ac4fbfcb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/fragments/MyViewPagerFragment.kt @@ -99,15 +99,11 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) contacts.sort() allContacts = contacts - val filtered = if (this is GroupsFragment) { - contacts - } else if (this is FavoritesFragment) { - contacts.filter { it.starred == 1 } as ArrayList - } else { - val contactSources = config.displayContactSources - if (config.showAllContacts()) { - contacts - } else { + val filtered = when { + this is GroupsFragment -> contacts + this is FavoritesFragment -> contacts.filter { it.starred == 1 } as ArrayList + else -> { + val contactSources = config.displayContactSources contacts.filter { contactSources.contains(it.source) } as ArrayList } } diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Config.kt index ec516108..444a814c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Config.kt @@ -12,8 +12,6 @@ class Config(context: Context) : BaseConfig(context) { get() = prefs.getStringSet(DISPLAY_CONTACT_SOURCES, hashSetOf("-1")) set(displayContactSources) = prefs.edit().remove(DISPLAY_CONTACT_SOURCES).putStringSet(DISPLAY_CONTACT_SOURCES, displayContactSources).apply() - fun showAllContacts() = displayContactSources.size == 1 && displayContactSources.first() == "-1" - var showContactThumbnails: Boolean get() = prefs.getBoolean(SHOW_CONTACT_THUMBNAILS, true) set(showContactThumbnails) = prefs.edit().putBoolean(SHOW_CONTACT_THUMBNAILS, showContactThumbnails).apply() diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt index 98f4170d..c4a5663b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt @@ -35,7 +35,9 @@ class ContactsHelper(val activity: BaseSimpleActivity) { val contactsSize = contacts.size() var resultContacts = ArrayList(contactsSize) (0 until contactsSize).mapTo(resultContacts) { contacts.valueAt(it) } - resultContacts = resultContacts.distinctBy { it.contactId } as ArrayList + resultContacts = resultContacts.distinctBy { + it.getHashToCompare() + } as ArrayList // groups are obtained with contactID, not rawID, so assign them to proper contacts like this val groups = getContactGroups(getStoredGroups()) @@ -88,6 +90,7 @@ class ContactsHelper(val activity: BaseSimpleActivity) { val websites = ArrayList() val contact = Contact(id, prefix, firstName, middleName, surname, suffix, photoUri, number, emails, addresses, events, accountName, starred, contactId, thumbnailUri, null, notes, groups, organization, websites) + contacts.put(id, contact) } while (cursor.moveToNext()) } @@ -1214,16 +1217,14 @@ class ContactsHelper(val activity: BaseSimpleActivity) { activity.dbHelper.deleteContacts(localContacts) try { - val contactIDs = HashSet() val operations = ArrayList() val selection = "${ContactsContract.Data.CONTACT_ID} = ?" contacts.filter { it.source != SMT_PRIVATE }.forEach { ContentProviderOperation.newDelete(ContactsContract.Data.CONTENT_URI).apply { val selectionArgs = arrayOf(it.contactId.toString()) withSelection(selection, selectionArgs) - operations.add(this.build()) + operations.add(build()) } - contactIDs.add(it.id.toString()) } activity.contentResolver.applyBatch(ContactsContract.AUTHORITY, operations) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/DBHelper.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/DBHelper.kt index c082d6bf..e3729c19 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/DBHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/DBHelper.kt @@ -119,6 +119,10 @@ class DBHelper private constructor(val context: Context) : SQLiteOpenHelper(cont fun deleteContact(id: Int) = deleteContacts(arrayOf(id.toString())) fun deleteContacts(ids: Array) { + if (ids.isEmpty()) { + return + } + val args = TextUtils.join(", ", ids) val selection = "$CONTACTS_TABLE_NAME.$COL_ID IN ($args)" mDb.delete(CONTACTS_TABLE_NAME, selection, null) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/models/Contact.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/models/Contact.kt index a4a422a3..42cc04cd 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/models/Contact.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/models/Contact.kt @@ -12,6 +12,7 @@ data class Contact(val id: Int, var prefix: String, var firstName: String, var m companion object { var sorting = 0 var startWithSurname = false + val pattern = "\\D+".toRegex() } override fun compareTo(other: Contact): Int { @@ -81,4 +82,10 @@ data class Contact(val id: Int, var prefix: String, var firstName: String, var m fullName } } + + fun getHashToCompare(): Int { + val newPhoneNumbers = ArrayList() + phoneNumbers.mapTo(newPhoneNumbers, { PhoneNumber(it.value.replace(pattern, ""), 0) }) + return copy(id = 0, phoneNumbers = newPhoneNumbers).hashCode() + } }