From 29c066624347eef2b39b3b682d877bf309afb7ed Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 18 Oct 2021 19:22:06 +0200 Subject: [PATCH] fetch all drafts at once for better performance --- .../adapters/ConversationsAdapter.kt | 7 +-- .../smsmessenger/extensions/Context.kt | 48 +++++++++++++------ 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt index b7b8ca89..07741f4e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt @@ -266,11 +266,8 @@ class ConversationsAdapter( private fun fetchDrafts(drafts: HashMap) { drafts.clear() - conversations.forEach { conversation -> - val draft = activity.getSmsDraft(conversation.threadId) - if (draft != null) { - drafts[conversation.threadId] = draft - } + for ((threadId, draft) in activity.getAllDrafts()) { + drafts[threadId] = draft } } 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 18bc4878..02774d3f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -802,6 +802,25 @@ fun Context.getSmsDraft(threadId: Long): String? { return null } +fun Context.getAllDrafts(): HashMap { + val drafts = HashMap() + val uri = Sms.Draft.CONTENT_URI + val projection = arrayOf(Sms.BODY, Sms.THREAD_ID) + + try { + queryCursor(uri, projection) { cursor -> + cursor.use { + val threadId = cursor.getLongValue(Sms.THREAD_ID) + val draft = cursor.getStringValue(Sms.BODY) ?: return@queryCursor + drafts[threadId] = draft + } + } + } catch (e: Exception) { + } + + return drafts +} + fun Context.saveSmsDraft(body: String, threadId: Long) { val uri = Sms.Draft.CONTENT_URI val contentValues = ContentValues().apply { @@ -874,21 +893,20 @@ fun Context.getFileSizeFromUri(uri: Uri): Long { // if "content://" uri scheme, try contentResolver table if (uri.scheme.equals(ContentResolver.SCHEME_CONTENT)) { - return contentResolver.query(uri, arrayOf(OpenableColumns.SIZE), null, null, null) - ?.use { cursor -> - // maybe shouldn't trust ContentResolver for size: - // https://stackoverflow.com/questions/48302972/content-resolver-returns-wrong-size - val sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE) - if (sizeIndex == -1) { - return@use FILE_SIZE_NONE - } - cursor.moveToFirst() - return try { - cursor.getLong(sizeIndex) - } catch (_: Throwable) { - FILE_SIZE_NONE - } - } ?: FILE_SIZE_NONE + return contentResolver.query(uri, arrayOf(OpenableColumns.SIZE), null, null, null)?.use { cursor -> + // maybe shouldn't trust ContentResolver for size: + // https://stackoverflow.com/questions/48302972/content-resolver-returns-wrong-size + val sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE) + if (sizeIndex == -1) { + return@use FILE_SIZE_NONE + } + cursor.moveToFirst() + return try { + cursor.getLong(sizeIndex) + } catch (_: Throwable) { + FILE_SIZE_NONE + } + } ?: FILE_SIZE_NONE } else { return FILE_SIZE_NONE }