From cf75ab71d46b3d3ed77f95028f0f539895157c85 Mon Sep 17 00:00:00 2001 From: tibbi Date: Fri, 1 Jan 2021 17:04:41 +0100 Subject: [PATCH] make sure sent messages have proper SIM card associated --- app/src/main/AndroidManifest.xml | 11 ++++---- .../smsmessenger/activities/ThreadActivity.kt | 26 ++++++++++++++++--- .../smsmessenger/extensions/Context.kt | 10 +++++++ .../smsmessenger/models/Message.kt | 2 +- ...ntReceiver.kt => MmsStatusSentReceiver.kt} | 7 ++--- .../receivers/SmsStatusDeliveredReceiver.kt | 13 ++++++++++ .../receivers/SmsStatusSentReceiver.kt | 13 ++++++++++ 7 files changed, 70 insertions(+), 12 deletions(-) rename app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/{SmsSentReceiver.kt => MmsStatusSentReceiver.kt} (52%) create mode 100644 app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsStatusDeliveredReceiver.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsStatusSentReceiver.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 814fde4a..cfc04a2b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -121,6 +121,12 @@ + + + + + + @@ -149,11 +155,6 @@ android:exported="true" android:taskAffinity="com.klinker.android.messaging.MMS_RECEIVED" /> - - lastMaxId }.forEach { - messagesDB.insertOrIgnore(it) + messages.filter { !it.isReceivedMessage() && it.id > lastMaxId }.forEach { latestMessage -> + // subscriptionIds seem to be not filled out at sending with multiple SIM cards, so fill it manually + if (SubscriptionManager.from(this).activeSubscriptionInfoList?.size ?: 0 > 1) { + val SIMId = availableSIMCards.getOrNull(currentSIMCardIndex)?.subscriptionId + if (SIMId != null) { + updateMessageSubscriptionId(latestMessage.id, SIMId) + latestMessage.subscriptionId = SIMId + } + } + + messagesDB.insertOrIgnore(latestMessage) } setupAdapter() 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 0cd08cd6..1c1b1be5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -554,6 +554,16 @@ fun Context.markThreadMessagesUnread(threadId: Long) { } } +fun Context.updateMessageSubscriptionId(messageId: Long, subscriptionId: Int) { + val uri = Sms.CONTENT_URI + val contentValues = ContentValues().apply { + put(Sms.SUBSCRIPTION_ID, subscriptionId) + } + val selection = "${Sms._ID} = ?" + val selectionArgs = arrayOf(messageId.toString()) + contentResolver.update(uri, contentValues, selection, selectionArgs) +} + fun Context.updateUnreadCountBadge(conversations: List) { val unreadCount = conversations.count { !it.read } if (unreadCount == 0) { diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/Message.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/Message.kt index a9580099..54d96d04 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/Message.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/Message.kt @@ -19,7 +19,7 @@ data class Message( @ColumnInfo(name = "attachment") val attachment: MessageAttachment?, @ColumnInfo(name = "sender_name") var senderName: String, @ColumnInfo(name = "sender_photo_uri") val senderPhotoUri: String, - @ColumnInfo(name = "subscription_id") val subscriptionId: Int) : ThreadItem() { + @ColumnInfo(name = "subscription_id") var subscriptionId: Int) : ThreadItem() { fun isReceivedMessage() = type == Telephony.Sms.MESSAGE_TYPE_INBOX } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsSentReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MmsStatusSentReceiver.kt similarity index 52% rename from app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsSentReceiver.kt rename to app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MmsStatusSentReceiver.kt index 2321c414..a007865a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsSentReceiver.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MmsStatusSentReceiver.kt @@ -1,12 +1,13 @@ package com.simplemobiletools.smsmessenger.receivers +import android.content.BroadcastReceiver import android.content.Context import android.content.Intent -import com.klinker.android.send_message.SentReceiver import com.simplemobiletools.smsmessenger.helpers.refreshMessages -class SmsSentReceiver : SentReceiver() { - override fun onMessageStatusUpdated(context: Context, intent: Intent, receiverResultCode: Int) { +class MmsStatusSentReceiver : BroadcastReceiver() { + + override fun onReceive(context: Context, intent: Intent) { refreshMessages() } } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsStatusDeliveredReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsStatusDeliveredReceiver.kt new file mode 100644 index 00000000..fb87699d --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsStatusDeliveredReceiver.kt @@ -0,0 +1,13 @@ +package com.simplemobiletools.smsmessenger.receivers + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import com.simplemobiletools.smsmessenger.helpers.refreshMessages + +class SmsStatusDeliveredReceiver : BroadcastReceiver() { + + override fun onReceive(context: Context, intent: Intent) { + refreshMessages() + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsStatusSentReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsStatusSentReceiver.kt new file mode 100644 index 00000000..0b6931d4 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsStatusSentReceiver.kt @@ -0,0 +1,13 @@ +package com.simplemobiletools.smsmessenger.receivers + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import com.simplemobiletools.smsmessenger.helpers.refreshMessages + +class SmsStatusSentReceiver : BroadcastReceiver() { + + override fun onReceive(context: Context, intent: Intent) { + refreshMessages() + } +}