From 567fb8212a32fb4ce2c500eef3c771e82c24f836 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 4 Nov 2020 16:24:25 +0100 Subject: [PATCH] adding Search at Recents too --- .../dialer/adapters/RecentCallsAdapter.kt | 16 +++++++++++++--- .../dialer/fragments/RecentsFragment.kt | 11 ++++++++++- .../dialer/models/RecentCall.kt | 13 ++++++++++++- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/RecentCallsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/RecentCallsAdapter.kt index fcb6a262..5043c3c2 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/RecentCallsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/RecentCallsAdapter.kt @@ -4,6 +4,7 @@ import android.content.Intent import android.graphics.drawable.Drawable import android.net.Uri import android.provider.CallLog.Calls +import android.text.SpannableString import android.text.TextUtils import android.util.TypedValue import android.view.Menu @@ -33,6 +34,7 @@ class RecentCallsAdapter(activity: SimpleActivity, var recentCalls: ArrayList) { + fun updateItems(newItems: ArrayList, highlightText: String = "") { if (newItems.hashCode() != recentCalls.hashCode()) { recentCalls = newItems.clone() as ArrayList + textToHighlight = highlightText notifyDataSetChanged() finishActMode() + } else if (textToHighlight != highlightText) { + textToHighlight = highlightText + notifyDataSetChanged() } } @@ -216,9 +222,13 @@ class RecentCallsAdapter(activity: SimpleActivity, var recentCalls: ArrayList() + override fun setupFragment() { val placeholderResId = if (context.hasPermission(PERMISSION_READ_CALL_LOG)) { R.string.no_previous_calls @@ -47,6 +50,7 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage RecentsHelper(context).getRecentCalls { recents -> SimpleContactsHelper(context).getAvailableContacts(false) { contacts -> val privateContacts = MyContactsContentProvider.getSimpleContacts(context, privateCursor) + recents.filter { it.phoneNumber == it.name }.forEach { recent -> var wasNameFilled = false if (privateContacts.isNotEmpty()) { @@ -65,6 +69,7 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage } } + allRecentCalls = recents activity?.runOnUiThread { gotRecents(recents) } @@ -111,10 +116,14 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage } override fun onSearchClosed() { - + (recents_list.adapter as? RecentCallsAdapter)?.updateItems(allRecentCalls) } override fun onSearchQueryChanged(text: String) { + val recentCalls = allRecentCalls.filter { + it.name.contains(text, true) || it.doesContainPhoneNumber(text) + }.toMutableList() as ArrayList + (recents_list.adapter as? RecentCallsAdapter)?.updateItems(recentCalls, text) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/models/RecentCall.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/models/RecentCall.kt index 04107a20..3287aa13 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/models/RecentCall.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/models/RecentCall.kt @@ -1,4 +1,15 @@ package com.simplemobiletools.dialer.models +import android.telephony.PhoneNumberUtils +import com.simplemobiletools.commons.extensions.normalizePhoneNumber + data class RecentCall(var id: Int, var phoneNumber: String, var name: String, var photoUri: String, var startTS: Int, var duration: Int, var type: Int, - var neighbourIDs: ArrayList, val simID: Int) + var neighbourIDs: ArrayList, val simID: Int) { + fun doesContainPhoneNumber(text: String): Boolean { + val normalizedText = text.normalizePhoneNumber() + return PhoneNumberUtils.compare(phoneNumber.normalizePhoneNumber(), normalizedText) || + phoneNumber.contains(text) || + phoneNumber.normalizePhoneNumber().contains(normalizedText) || + phoneNumber.contains(normalizedText) + } +}