From a36e47b3f5fb3071cdb067266626aa2a80e5ff81 Mon Sep 17 00:00:00 2001 From: Agnieszka C <85929121+Aga-C@users.noreply.github.com> Date: Mon, 4 Mar 2024 20:07:28 +0100 Subject: [PATCH 1/3] Removed call history limit (#125) --- .../phone/fragments/RecentsFragment.kt | 6 ++---- .../fossify/phone/helpers/RecentsHelper.kt | 21 +++++++++++++------ 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/phone/fragments/RecentsFragment.kt b/app/src/main/kotlin/org/fossify/phone/fragments/RecentsFragment.kt index 68ac512f..8c439296 100644 --- a/app/src/main/kotlin/org/fossify/phone/fragments/RecentsFragment.kt +++ b/app/src/main/kotlin/org/fossify/phone/fragments/RecentsFragment.kt @@ -61,8 +61,7 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage override fun refreshItems(callback: (() -> Unit)?) { val privateCursor = context?.getMyContactsCursor(false, true) val groupSubsequentCalls = context?.config?.groupSubsequentCalls ?: false - val querySize = allRecentCalls.size.coerceAtLeast(MIN_RECENTS_THRESHOLD) - RecentsHelper(context).getRecentCalls(groupSubsequentCalls, querySize) { recents -> + RecentsHelper(context).getRecentCalls(groupSubsequentCalls, MIN_RECENTS_THRESHOLD, allRecentCalls) { recents -> ContactsHelper(context).getContacts(showOnlyContactsWithNumbers = true) { contacts -> val privateContacts = MyContactsContentProvider.getContacts(context, privateCursor) @@ -126,8 +125,7 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage private fun getMoreRecentCalls() { val privateCursor = context?.getMyContactsCursor(false, true) val groupSubsequentCalls = context?.config?.groupSubsequentCalls ?: false - val querySize = allRecentCalls.size.plus(MIN_RECENTS_THRESHOLD) - RecentsHelper(context).getRecentCalls(groupSubsequentCalls, querySize) { recents -> + RecentsHelper(context).getRecentCalls(groupSubsequentCalls, MIN_RECENTS_THRESHOLD, allRecentCalls) { recents -> ContactsHelper(context).getContacts(showOnlyContactsWithNumbers = true) { contacts -> val privateContacts = MyContactsContentProvider.getContacts(context, privateCursor) diff --git a/app/src/main/kotlin/org/fossify/phone/helpers/RecentsHelper.kt b/app/src/main/kotlin/org/fossify/phone/helpers/RecentsHelper.kt index 2e30f870..e946c843 100644 --- a/app/src/main/kotlin/org/fossify/phone/helpers/RecentsHelper.kt +++ b/app/src/main/kotlin/org/fossify/phone/helpers/RecentsHelper.kt @@ -17,7 +17,7 @@ class RecentsHelper(private val context: Context) { private val QUERY_LIMIT = 200 private val contentUri = Calls.CONTENT_URI - fun getRecentCalls(groupSubsequentCalls: Boolean, maxSize: Int = QUERY_LIMIT, callback: (List) -> Unit) { + fun getRecentCalls(groupSubsequentCalls: Boolean, maxSize: Int = QUERY_LIMIT, previousRecents: List = ArrayList(), callback: (List) -> Unit) { val privateCursor = context.getMyContactsCursor(false, true) ensureBackgroundThread { if (!context.hasPermission(PERMISSION_READ_CALL_LOG)) { @@ -31,13 +31,13 @@ class RecentsHelper(private val context: Context) { contacts.addAll(privateContacts) } - getRecents(contacts, groupSubsequentCalls, maxSize, callback = callback) + getRecents(contacts, groupSubsequentCalls, maxSize, previousRecents, callback = callback) } } } @SuppressLint("NewApi") - private fun getRecents(contacts: List, groupSubsequentCalls: Boolean, maxSize: Int, callback: (List) -> Unit) { + private fun getRecents(contacts: List, groupSubsequentCalls: Boolean, maxSize: Int, previousRecents: List, callback: (List) -> Unit) { val recentCalls = mutableListOf() var previousRecentCallFrom = "" @@ -61,16 +61,25 @@ class RecentsHelper(private val context: Context) { accountIdToSimIDMap[it.handle.id] = it.id } + var selection: String? = null + var selectionParams: Array? = null + + val lastId = previousRecents.lastOrNull()?.id + if (lastId != null) { + selection = "${Calls._ID} < ?" + selectionParams = arrayOf(lastId.toString()) + } + val cursor = if (isNougatPlus()) { // https://issuetracker.google.com/issues/175198972?pli=1#comment6 val limitedUri = contentUri.buildUpon() .appendQueryParameter(Calls.LIMIT_PARAM_KEY, QUERY_LIMIT.toString()) .build() val sortOrder = "${Calls.DATE} DESC" - context.contentResolver.query(limitedUri, projection, null, null, sortOrder) + context.contentResolver.query(limitedUri, projection, selection, selectionParams, sortOrder) } else { val sortOrder = "${Calls.DATE} DESC LIMIT $QUERY_LIMIT" - context.contentResolver.query(contentUri, projection, null, null, sortOrder) + context.contentResolver.query(contentUri, projection, selection, selectionParams, sortOrder) } val contactsWithMultipleNumbers = contacts.filter { it.phoneNumbers.size > 1 } @@ -196,7 +205,7 @@ class RecentsHelper(private val context: Context) { val recentResult = recentCalls .filter { !context.isNumberBlocked(it.phoneNumber, blockedNumbers) } - callback(recentResult) + callback(previousRecents.plus(recentResult)) } fun removeRecentCalls(ids: List, callback: () -> Unit) { From fd002b26f54e08c887f6596f7cafda7d45364954 Mon Sep 17 00:00:00 2001 From: Naveen Date: Mon, 18 Mar 2024 03:42:53 +0530 Subject: [PATCH 2/3] Minor code improvement --- .../phone/fragments/RecentsFragment.kt | 4 +-- .../fossify/phone/helpers/RecentsHelper.kt | 29 ++++++++++++++----- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/phone/fragments/RecentsFragment.kt b/app/src/main/kotlin/org/fossify/phone/fragments/RecentsFragment.kt index 8c439296..f2d8cce6 100644 --- a/app/src/main/kotlin/org/fossify/phone/fragments/RecentsFragment.kt +++ b/app/src/main/kotlin/org/fossify/phone/fragments/RecentsFragment.kt @@ -59,7 +59,7 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage } override fun refreshItems(callback: (() -> Unit)?) { - val privateCursor = context?.getMyContactsCursor(false, true) + val privateCursor = context?.getMyContactsCursor(favoritesOnly = false, withPhoneNumbersOnly = true) val groupSubsequentCalls = context?.config?.groupSubsequentCalls ?: false RecentsHelper(context).getRecentCalls(groupSubsequentCalls, MIN_RECENTS_THRESHOLD, allRecentCalls) { recents -> ContactsHelper(context).getContacts(showOnlyContactsWithNumbers = true) { contacts -> @@ -123,7 +123,7 @@ class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPage } private fun getMoreRecentCalls() { - val privateCursor = context?.getMyContactsCursor(false, true) + val privateCursor = context?.getMyContactsCursor(favoritesOnly = false, withPhoneNumbersOnly = true) val groupSubsequentCalls = context?.config?.groupSubsequentCalls ?: false RecentsHelper(context).getRecentCalls(groupSubsequentCalls, MIN_RECENTS_THRESHOLD, allRecentCalls) { recents -> ContactsHelper(context).getContacts(showOnlyContactsWithNumbers = true) { contacts -> diff --git a/app/src/main/kotlin/org/fossify/phone/helpers/RecentsHelper.kt b/app/src/main/kotlin/org/fossify/phone/helpers/RecentsHelper.kt index e946c843..42b7c638 100644 --- a/app/src/main/kotlin/org/fossify/phone/helpers/RecentsHelper.kt +++ b/app/src/main/kotlin/org/fossify/phone/helpers/RecentsHelper.kt @@ -13,12 +13,20 @@ import org.fossify.phone.extensions.getAvailableSIMCardLabels import org.fossify.phone.models.RecentCall class RecentsHelper(private val context: Context) { - private val COMPARABLE_PHONE_NUMBER_LENGTH = 9 - private val QUERY_LIMIT = 200 + companion object { + private const val COMPARABLE_PHONE_NUMBER_LENGTH = 9 + private const val QUERY_LIMIT = 200 + } + private val contentUri = Calls.CONTENT_URI - fun getRecentCalls(groupSubsequentCalls: Boolean, maxSize: Int = QUERY_LIMIT, previousRecents: List = ArrayList(), callback: (List) -> Unit) { - val privateCursor = context.getMyContactsCursor(false, true) + fun getRecentCalls( + groupSubsequentCalls: Boolean, + maxSize: Int = QUERY_LIMIT, + previousRecents: List = ArrayList(), + callback: (List) -> Unit, + ) { + val privateCursor = context.getMyContactsCursor(favoritesOnly = false, withPhoneNumbersOnly = true) ensureBackgroundThread { if (!context.hasPermission(PERMISSION_READ_CALL_LOG)) { callback(ArrayList()) @@ -37,8 +45,13 @@ class RecentsHelper(private val context: Context) { } @SuppressLint("NewApi") - private fun getRecents(contacts: List, groupSubsequentCalls: Boolean, maxSize: Int, previousRecents: List, callback: (List) -> Unit) { - + private fun getRecents( + contacts: List, + groupSubsequentCalls: Boolean, + maxSize: Int, + previousRecents: List, + callback: (List) -> Unit, + ) { val recentCalls = mutableListOf() var previousRecentCallFrom = "" var previousStartTS = 0 @@ -232,8 +245,8 @@ class RecentsHelper(private val context: Context) { } fun restoreRecentCalls(activity: SimpleActivity, objects: List, callback: () -> Unit) { - activity.handlePermission(PERMISSION_WRITE_CALL_LOG) { - if (it) { + activity.handlePermission(PERMISSION_WRITE_CALL_LOG) { granted -> + if (granted) { ensureBackgroundThread { val values = objects .sortedBy { it.startTS } From 38de8ee44650536a4eaccbf3e8240181650b3fc8 Mon Sep 17 00:00:00 2001 From: Agnieszka C <85929121+Aga-C@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:49:16 +0100 Subject: [PATCH 3/3] Update RecentsHelper.kt --- .../kotlin/org/fossify/phone/helpers/RecentsHelper.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/phone/helpers/RecentsHelper.kt b/app/src/main/kotlin/org/fossify/phone/helpers/RecentsHelper.kt index 42b7c638..11a2aaab 100644 --- a/app/src/main/kotlin/org/fossify/phone/helpers/RecentsHelper.kt +++ b/app/src/main/kotlin/org/fossify/phone/helpers/RecentsHelper.kt @@ -77,10 +77,10 @@ class RecentsHelper(private val context: Context) { var selection: String? = null var selectionParams: Array? = null - val lastId = previousRecents.lastOrNull()?.id - if (lastId != null) { - selection = "${Calls._ID} < ?" - selectionParams = arrayOf(lastId.toString()) + val lastDate = previousRecents.lastOrNull()?.startTS + if (lastDate != null) { + selection = "${Calls.DATE} < ?" + selectionParams = arrayOf((lastDate * 1000L).toString()) } val cursor = if (isNougatPlus()) {