adding Search at Recents too

This commit is contained in:
tibbi 2020-11-04 16:24:25 +01:00
parent 56034b98cb
commit 567fb8212a
3 changed files with 35 additions and 5 deletions

View File

@ -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<Re
private var fontSize = activity.getTextSize()
private val areMultipleSIMsAvailable = activity.areMultipleSIMsAvailable()
private val redColor = resources.getColor(R.color.md_red_700)
private var textToHighlight = ""
init {
initDrawables()
@ -203,11 +205,15 @@ class RecentCallsAdapter(activity: SimpleActivity, var recentCalls: ArrayList<Re
}
}
fun updateItems(newItems: ArrayList<RecentCall>) {
fun updateItems(newItems: ArrayList<RecentCall>, highlightText: String = "") {
if (newItems.hashCode() != recentCalls.hashCode()) {
recentCalls = newItems.clone() as ArrayList<RecentCall>
textToHighlight = highlightText
notifyDataSetChanged()
finishActMode()
} else if (textToHighlight != highlightText) {
textToHighlight = highlightText
notifyDataSetChanged()
}
}
@ -216,9 +222,13 @@ class RecentCallsAdapter(activity: SimpleActivity, var recentCalls: ArrayList<Re
private fun setupView(view: View, call: RecentCall) {
view.apply {
item_recents_frame.isSelected = selectedKeys.contains(call.id)
var nameToShow = call.name
var nameToShow = SpannableString(call.name)
if (call.neighbourIDs.isNotEmpty()) {
nameToShow += " (${call.neighbourIDs.size + 1})"
nameToShow = SpannableString("$nameToShow (${call.neighbourIDs.size + 1})")
}
if (textToHighlight.isNotEmpty() && nameToShow.contains(textToHighlight, true)) {
nameToShow = SpannableString(nameToShow.toString().highlightTextPart(textToHighlight, adjustedPrimaryColor))
}
item_recents_name.apply {

View File

@ -6,6 +6,7 @@ import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.MyContactsContentProvider
import com.simplemobiletools.commons.helpers.PERMISSION_READ_CALL_LOG
import com.simplemobiletools.commons.helpers.SimpleContactsHelper
import com.simplemobiletools.commons.helpers.mydebug
import com.simplemobiletools.dialer.R
import com.simplemobiletools.dialer.activities.SimpleActivity
import com.simplemobiletools.dialer.adapters.RecentCallsAdapter
@ -16,6 +17,8 @@ import com.simplemobiletools.dialer.models.RecentCall
import kotlinx.android.synthetic.main.fragment_recents.view.*
class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet), RefreshItemsListener {
private var allRecentCalls = ArrayList<RecentCall>()
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<RecentCall>
(recents_list.adapter as? RecentCallsAdapter)?.updateItems(recentCalls, text)
}
}

View File

@ -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<Int>, val simID: Int)
var neighbourIDs: ArrayList<Int>, 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)
}
}