From d5af551001ba2c196ada970fe2bca5cf56f50d2b Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 8 May 2020 23:21:50 +0200 Subject: [PATCH] speed up MMS fetching by caching participants --- .../smsmessenger/extensions/Context.kt | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt index 97dd03ba..8634f708 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -52,7 +52,7 @@ fun Context.getMessages(threadId: Int): ArrayList { val senderNumber = cursor.getStringValue(Sms.ADDRESS) val isNumberBlocked = if (blockStatus.containsKey(senderNumber)) { - blockStatus[senderNumber] ?: false + blockStatus[senderNumber]!! } else { val isBlocked = isNumberBlocked(senderNumber) blockStatus[senderNumber] = isBlocked @@ -85,7 +85,7 @@ fun Context.getMessages(threadId: Int): ArrayList { return messages } -// as soon as a message contains multiple recipients it count as an MMS instead of SMS +// as soon as a message contains multiple recipients it counts as an MMS instead of SMS fun Context.getMMS(threadId: Int? = null, sortOrder: String? = null): ArrayList { val uri = Mms.CONTENT_URI val projection = arrayOf( @@ -110,13 +110,21 @@ fun Context.getMMS(threadId: Int? = null, sortOrder: String? = null): ArrayList< val messages = ArrayList() val contactsMap = HashMap() + val threadParticipants = HashMap>() queryCursor(uri, projection, selection, selectionArgs, sortOrder, showErrors = true) { cursor -> val mmsId = cursor.getIntValue(Mms._ID) val type = cursor.getIntValue(Mms.MESSAGE_BOX) val date = cursor.getLongValue(Mms.DATE).toInt() val read = cursor.getIntValue(Mms.READ) == 1 val threadId = cursor.getIntValue(Mms.THREAD_ID) - val participants = getThreadParticipants(threadId, contactsMap) + val participants = if (threadParticipants.containsKey(threadId)) { + threadParticipants[threadId]!! + } else { + val parts = getThreadParticipants(threadId, contactsMap) + threadParticipants[threadId] = parts + parts + } + val isMMS = true val attachment = getMmsAttachment(mmsId) val body = attachment?.text ?: ""