From 92fc1bee021051c3a2d4ef97e72b0d063bd397bf Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 12 Dec 2017 22:37:56 +0100 Subject: [PATCH] implement the Filter functionality --- .../contacts/activities/MainActivity.kt | 2 +- .../contacts/adapters/FilterContactSourcesAdapter.kt | 2 +- .../com/simplemobiletools/contacts/helpers/Config.kt | 2 ++ .../simplemobiletools/contacts/helpers/ContactsHelper.kt | 7 ++++++- .../com/simplemobiletools/contacts/overloads/String.kt | 9 +++++++++ 5 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/contacts/overloads/String.kt diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt index 55eab5c9..307c49a8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/activities/MainActivity.kt @@ -151,7 +151,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { } contacts_fastscroller.setViews(contacts_list) { - val item = contacts.getOrNull(it) + val item = (contacts_list.adapter as ContactsAdapter).contactItems.getOrNull(it) contacts_fastscroller.updateBubbleText(item?.getBubbleText() ?: "") } } else { 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 9e42c9c1..d8c815e8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/FilterContactSourcesAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/adapters/FilterContactSourcesAdapter.kt @@ -18,7 +18,7 @@ class FilterContactSourcesAdapter(val activity: SimpleActivity, val contactSourc init { contactSources.forEachIndexed { index, value -> - if ((displayContactSources.size == 1 && displayContactSources.first() == "-1") || displayContactSources.contains(value)) { + if (activity.config.showAllContacts() || displayContactSources.contains(value)) { selectedPositions.add(index) } } 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 e479738c..048dea2c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/Config.kt @@ -20,4 +20,6 @@ class Config(context: Context) : BaseConfig(context) { var displayContactSources: Set 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" } 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 51c56a7f..b779e888 100644 --- a/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/helpers/ContactsHelper.kt @@ -10,6 +10,7 @@ import com.simplemobiletools.commons.helpers.SORT_DESCENDING import com.simplemobiletools.contacts.activities.SimpleActivity import com.simplemobiletools.contacts.extensions.config import com.simplemobiletools.contacts.models.Contact +import com.simplemobiletools.contacts.overloads.times import java.util.* class ContactsHelper(val activity: SimpleActivity) { @@ -38,12 +39,16 @@ class ContactsHelper(val activity: SimpleActivity) { fun getContacts(callback: (ArrayList) -> Unit) { val contacts = HashMap() Thread { + val sources = activity.config.displayContactSources + val questionMarks = ("?," * sources.size).trimEnd(',') val uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI val projection = getContactProjection() + val selection = if (activity.config.showAllContacts()) null else "${ContactsContract.RawContacts.ACCOUNT_NAME} IN ($questionMarks)" + val selectionArgs = if (activity.config.showAllContacts()) null else sources.toTypedArray() val sortOrder = getSortString() var cursor: Cursor? = null try { - cursor = activity.contentResolver.query(uri, projection, null, null, sortOrder) + cursor = activity.contentResolver.query(uri, projection, selection, selectionArgs, sortOrder) if (cursor?.moveToFirst() == true) { do { val id = cursor.getIntValue(ContactsContract.CommonDataKinds.Phone.CONTACT_ID) diff --git a/app/src/main/kotlin/com/simplemobiletools/contacts/overloads/String.kt b/app/src/main/kotlin/com/simplemobiletools/contacts/overloads/String.kt new file mode 100644 index 00000000..3391c7de --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/contacts/overloads/String.kt @@ -0,0 +1,9 @@ +package com.simplemobiletools.contacts.overloads + +operator fun String.times(x: Int): String { + val stringBuffer = StringBuffer() + for (i in 1..x) { + stringBuffer.append(this) + } + return stringBuffer.toString() +}