From a85eb77d3137ae285751e191f90ca0ad7d7bd994 Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 17 Jun 2020 21:45:17 +0200 Subject: [PATCH] fix #47, mark the whole conversation as read with Mark as Read at notification --- .../smsmessenger/extensions/Context.kt | 20 +++++++++++++++---- .../smsmessenger/helpers/Constants.kt | 2 -- .../receivers/MarkAsReadReceiver.kt | 13 ++++-------- .../smsmessenger/receivers/MmsReceiver.kt | 2 +- .../smsmessenger/receivers/SmsReceiver.kt | 4 ++-- 5 files changed, 23 insertions(+), 18 deletions(-) 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 3e992fb5..d534d4c4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -23,7 +23,9 @@ import com.simplemobiletools.commons.models.SimpleContact import com.simplemobiletools.smsmessenger.R import com.simplemobiletools.smsmessenger.activities.ThreadActivity import com.simplemobiletools.smsmessenger.databases.MessagesDatabase -import com.simplemobiletools.smsmessenger.helpers.* +import com.simplemobiletools.smsmessenger.helpers.Config +import com.simplemobiletools.smsmessenger.helpers.MARK_AS_READ +import com.simplemobiletools.smsmessenger.helpers.THREAD_ID import com.simplemobiletools.smsmessenger.interfaces.ConversationsDao import com.simplemobiletools.smsmessenger.models.* import com.simplemobiletools.smsmessenger.receivers.MarkAsReadReceiver @@ -497,6 +499,18 @@ fun Context.markMessageRead(id: Int, isMMS: Boolean) { contentResolver.update(uri, contentValues, selection, selectionArgs) } +fun Context.markThreadMessagesRead(threadId: Int) { + arrayOf(Mms.CONTENT_URI, Sms.CONTENT_URI).forEach { uri -> + val contentValues = ContentValues().apply { + put(Sms.READ, 1) + put(Sms.SEEN, 1) + } + val selection = "${Sms.THREAD_ID} = ?" + val selectionArgs = arrayOf(threadId.toString()) + contentResolver.update(uri, contentValues, selection, selectionArgs) + } +} + @SuppressLint("NewApi") fun Context.getThreadId(address: String): Long { return if (isMarshmallowPlus()) { @@ -524,7 +538,7 @@ fun Context.getThreadId(addresses: Set): Long { } @SuppressLint("NewApi") -fun Context.showReceivedMessageNotification(address: String, body: String, threadID: Int, bitmap: Bitmap?, messageId: Int, isMMS: Boolean) { +fun Context.showReceivedMessageNotification(address: String, body: String, threadID: Int, bitmap: Bitmap?) { val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION) val channelId = "simple_sms_messenger" @@ -556,8 +570,6 @@ fun Context.showReceivedMessageNotification(address: String, body: String, threa val markAsReadIntent = Intent(this, MarkAsReadReceiver::class.java).apply { action = MARK_AS_READ - putExtra(MESSAGE_ID, messageId) - putExtra(MESSAGE_IS_MMS, isMMS) putExtra(THREAD_ID, threadID) } val markAsReadPendingIntent = PendingIntent.getBroadcast(this, 0, markAsReadIntent, PendingIntent.FLAG_CANCEL_CURRENT) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt index 8620bfa8..d3cf7cd1 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt @@ -13,8 +13,6 @@ const val USE_SIM_ID_PREFIX = "use_sim_id_" private const val PATH = "com.simplemobiletools.smsmessenger.action." const val MARK_AS_READ = PATH + "mark_as_read" -const val MESSAGE_ID = "message_id" -const val MESSAGE_IS_MMS = "message_is_mms" // view types for the thread list view const val THREAD_DATE_TIME = 1 diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MarkAsReadReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MarkAsReadReceiver.kt index 6dc79f93..be4c48e5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MarkAsReadReceiver.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MarkAsReadReceiver.kt @@ -6,23 +6,18 @@ import android.content.Intent import com.simplemobiletools.commons.extensions.notificationManager import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.smsmessenger.extensions.conversationsDB -import com.simplemobiletools.smsmessenger.extensions.markMessageRead +import com.simplemobiletools.smsmessenger.extensions.markThreadMessagesRead import com.simplemobiletools.smsmessenger.helpers.MARK_AS_READ -import com.simplemobiletools.smsmessenger.helpers.MESSAGE_ID -import com.simplemobiletools.smsmessenger.helpers.MESSAGE_IS_MMS import com.simplemobiletools.smsmessenger.helpers.THREAD_ID class MarkAsReadReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { when (intent.action) { MARK_AS_READ -> { - val messageId = intent.getIntExtra(MESSAGE_ID, 0) - context.notificationManager.cancel(messageId) + val threadId = intent.getIntExtra(THREAD_ID, 0) + context.notificationManager.cancel(threadId) ensureBackgroundThread { - val isMMS = intent.getBooleanExtra(MESSAGE_IS_MMS, false) - context.markMessageRead(messageId, isMMS) - - val threadId = intent.getIntExtra(THREAD_ID, 0) + context.markThreadMessagesRead(threadId) context.conversationsDB.markRead(threadId.toLong()) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MmsReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MmsReceiver.kt index 9cdb9a1a..b098bb99 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MmsReceiver.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MmsReceiver.kt @@ -33,7 +33,7 @@ class MmsReceiver : com.klinker.android.send_message.MmsReceivedReceiver() { null } - context.showReceivedMessageNotification(address, mms.body, mms.thread, glideBitmap, mms.id, true) + context.showReceivedMessageNotification(address, mms.body, mms.thread, glideBitmap) val conversation = context.getConversations(mms.thread.toLong()).firstOrNull() ?: return@ensureBackgroundThread context.conversationsDB.insertOrUpdate(conversation) } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsReceiver.kt index a57e042a..28daec33 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsReceiver.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsReceiver.kt @@ -30,8 +30,8 @@ class SmsReceiver : BroadcastReceiver() { } if (!context.isNumberBlocked(address)) { - val messageId = context.insertNewSMS(address, subject, body, date, read, threadId, type, subscriptionId) - context.showReceivedMessageNotification(address, body, threadId.toInt(), null, messageId, false) + context.insertNewSMS(address, subject, body, date, read, threadId, type, subscriptionId) + context.showReceivedMessageNotification(address, body, threadId.toInt(), null) refreshMessages() ensureBackgroundThread {