mirror of
https://github.com/SimpleMobileTools/Simple-SMS-Messenger.git
synced 2025-02-17 04:00:35 +01:00
fetch all drafts at once for better performance
This commit is contained in:
parent
dbab7f20d0
commit
29c0666243
@ -266,11 +266,8 @@ class ConversationsAdapter(
|
||||
|
||||
private fun fetchDrafts(drafts: HashMap<Long, String?>) {
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -802,6 +802,25 @@ fun Context.getSmsDraft(threadId: Long): String? {
|
||||
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) {
|
||||
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
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user