From d02df0a1a227952e844bb92748aca0c11129af56 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sat, 2 Jan 2021 11:24:56 +0100 Subject: [PATCH] improve message marking after delivery to avoid glitching --- .../smsmessenger/interfaces/MessagesDao.kt | 2 +- .../receivers/SmsStatusDeliveredReceiver.kt | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt index 6816f8cf..c3dc8d71 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt @@ -30,7 +30,7 @@ interface MessagesDao { fun markThreadRead(threadId: Long) @Query("UPDATE messages SET type = :type WHERE id = :id") - fun updateType(id: Long, type: Int) + fun updateType(id: Long, type: Int): Int @Query("DELETE FROM messages WHERE id = :id") fun delete(id: Long) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsStatusDeliveredReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsStatusDeliveredReceiver.kt index 92b523db..b7aa5593 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsStatusDeliveredReceiver.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsStatusDeliveredReceiver.kt @@ -4,6 +4,8 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.net.Uri +import android.os.Handler +import android.os.Looper import android.provider.Telephony import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.smsmessenger.extensions.messagesDB @@ -15,11 +17,19 @@ class SmsStatusDeliveredReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (intent.extras?.containsKey("message_uri") == true) { val uri = Uri.parse(intent.getStringExtra("message_uri")) - val id = uri?.lastPathSegment?.toLong() ?: 0L + val messageId = uri?.lastPathSegment?.toLong() ?: 0L ensureBackgroundThread { val type = Telephony.Sms.MESSAGE_TYPE_SENT - context.updateMessageType(id, type) - context.messagesDB.updateType(id, type) + context.updateMessageType(messageId, type) + val updated = context.messagesDB.updateType(messageId, type) + if (updated == 0) { + Handler(Looper.getMainLooper()).postDelayed({ + ensureBackgroundThread { + context.messagesDB.updateType(messageId, type) + } + }, 2000) + } + refreshMessages() } }