mirror of
https://github.com/SimpleMobileTools/Simple-SMS-Messenger.git
synced 2025-06-05 21:49:22 +02:00
fetch all drafts at once for better performance
This commit is contained in:
@@ -266,11 +266,8 @@ class ConversationsAdapter(
|
|||||||
|
|
||||||
private fun fetchDrafts(drafts: HashMap<Long, String?>) {
|
private fun fetchDrafts(drafts: HashMap<Long, String?>) {
|
||||||
drafts.clear()
|
drafts.clear()
|
||||||
conversations.forEach { conversation ->
|
for ((threadId, draft) in activity.getAllDrafts()) {
|
||||||
val draft = activity.getSmsDraft(conversation.threadId)
|
drafts[threadId] = draft
|
||||||
if (draft != null) {
|
|
||||||
drafts[conversation.threadId] = draft
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -802,6 +802,25 @@ fun Context.getSmsDraft(threadId: Long): String? {
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun Context.getAllDrafts(): HashMap<Long, String?> {
|
||||||
|
val drafts = HashMap<Long, String?>()
|
||||||
|
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) {
|
fun Context.saveSmsDraft(body: String, threadId: Long) {
|
||||||
val uri = Sms.Draft.CONTENT_URI
|
val uri = Sms.Draft.CONTENT_URI
|
||||||
val contentValues = ContentValues().apply {
|
val contentValues = ContentValues().apply {
|
||||||
@@ -874,21 +893,20 @@ fun Context.getFileSizeFromUri(uri: Uri): Long {
|
|||||||
|
|
||||||
// if "content://" uri scheme, try contentResolver table
|
// if "content://" uri scheme, try contentResolver table
|
||||||
if (uri.scheme.equals(ContentResolver.SCHEME_CONTENT)) {
|
if (uri.scheme.equals(ContentResolver.SCHEME_CONTENT)) {
|
||||||
return contentResolver.query(uri, arrayOf(OpenableColumns.SIZE), null, null, null)
|
return contentResolver.query(uri, arrayOf(OpenableColumns.SIZE), null, null, null)?.use { cursor ->
|
||||||
?.use { cursor ->
|
// maybe shouldn't trust ContentResolver for size:
|
||||||
// maybe shouldn't trust ContentResolver for size:
|
// https://stackoverflow.com/questions/48302972/content-resolver-returns-wrong-size
|
||||||
// https://stackoverflow.com/questions/48302972/content-resolver-returns-wrong-size
|
val sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE)
|
||||||
val sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE)
|
if (sizeIndex == -1) {
|
||||||
if (sizeIndex == -1) {
|
return@use FILE_SIZE_NONE
|
||||||
return@use FILE_SIZE_NONE
|
}
|
||||||
}
|
cursor.moveToFirst()
|
||||||
cursor.moveToFirst()
|
return try {
|
||||||
return try {
|
cursor.getLong(sizeIndex)
|
||||||
cursor.getLong(sizeIndex)
|
} catch (_: Throwable) {
|
||||||
} catch (_: Throwable) {
|
FILE_SIZE_NONE
|
||||||
FILE_SIZE_NONE
|
}
|
||||||
}
|
} ?: FILE_SIZE_NONE
|
||||||
} ?: FILE_SIZE_NONE
|
|
||||||
} else {
|
} else {
|
||||||
return FILE_SIZE_NONE
|
return FILE_SIZE_NONE
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user