From 2e0d6a877d356baea1e44ed2dffd68326ef89245 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 27 Jul 2020 22:37:11 +0200 Subject: [PATCH] improving the unread messages counter badge --- app/build.gradle | 2 +- .../smsmessenger/extensions/Context.kt | 26 +++++++------------ .../interfaces/ConversationsDao.kt | 3 +++ .../receivers/MarkAsReadReceiver.kt | 2 ++ .../smsmessenger/receivers/MmsReceiver.kt | 6 ++--- .../smsmessenger/receivers/SmsReceiver.kt | 1 + 6 files changed, 18 insertions(+), 22 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 986817be..4f393c5b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,7 +61,7 @@ dependencies { implementation 'org.greenrobot:eventbus:3.2.0' implementation 'com.klinkerapps:android-smsmms:5.2.6' implementation 'com.github.tibbi:IndicatorFastScroll:08f512858a' - implementation "me.leolin:ShortcutBadger:1.1.22@aar" + implementation "me.leolin:ShortcutBadger:1.1.22" kapt "androidx.room:room-compiler:2.2.5" implementation "androidx.room:room-runtime:2.2.5" 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 81c6add9..126b2e5f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -452,23 +452,6 @@ fun Context.getNameAndPhotoFromPhoneNumber(number: String): NamePhoto? { return NamePhoto(number, null) } -fun Context.updateUnreadCountBadge(conversations : ArrayList){ - var count = 0 - - conversations.forEach { - if(!it.read) { - count++ - } - } - - if(count == 0) { - ShortcutBadger.removeCount(this) - } else { - ShortcutBadger.applyCount(this,count) - } -} - - fun Context.insertNewSMS(address: String, subject: String, body: String, date: Long, read: Int, threadId: Long, type: Int, subscriptionId: Int): Int { val uri = Sms.CONTENT_URI val contentValues = ContentValues().apply { @@ -540,6 +523,15 @@ fun Context.markThreadMessagesUnread(threadId: Int) { } } +fun Context.updateUnreadCountBadge(conversations: List) { + val unreadCount = conversations.count { !it.read } + if (unreadCount == 0) { + ShortcutBadger.removeCount(this) + } else { + ShortcutBadger.applyCount(this, unreadCount) + } +} + @SuppressLint("NewApi") fun Context.getThreadId(address: String): Long { return if (isMarshmallowPlus()) { diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/ConversationsDao.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/ConversationsDao.kt index 72d69763..d50507f7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/ConversationsDao.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/ConversationsDao.kt @@ -14,6 +14,9 @@ interface ConversationsDao { @Query("SELECT * FROM conversations") fun getAll(): List + @Query("SELECT * FROM conversations WHERE read = 0") + fun getUnreadConversations(): List + @Query("UPDATE conversations SET read = 1 WHERE thread_id = :threadId") fun markRead(threadId: Long) 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 be4c48e5..3ef30ed4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MarkAsReadReceiver.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MarkAsReadReceiver.kt @@ -7,6 +7,7 @@ import com.simplemobiletools.commons.extensions.notificationManager import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.smsmessenger.extensions.conversationsDB import com.simplemobiletools.smsmessenger.extensions.markThreadMessagesRead +import com.simplemobiletools.smsmessenger.extensions.updateUnreadCountBadge import com.simplemobiletools.smsmessenger.helpers.MARK_AS_READ import com.simplemobiletools.smsmessenger.helpers.THREAD_ID @@ -19,6 +20,7 @@ class MarkAsReadReceiver : BroadcastReceiver() { ensureBackgroundThread { context.markThreadMessagesRead(threadId) context.conversationsDB.markRead(threadId.toLong()) + context.updateUnreadCountBadge(context.conversationsDB.getUnreadConversations()) } } } 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 1738138b..e132c5f3 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MmsReceiver.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/MmsReceiver.kt @@ -6,10 +6,7 @@ import com.bumptech.glide.Glide import com.simplemobiletools.commons.extensions.isNumberBlocked import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.smsmessenger.R -import com.simplemobiletools.smsmessenger.extensions.conversationsDB -import com.simplemobiletools.smsmessenger.extensions.getConversations -import com.simplemobiletools.smsmessenger.extensions.getLatestMMS -import com.simplemobiletools.smsmessenger.extensions.showReceivedMessageNotification +import com.simplemobiletools.smsmessenger.extensions.* // more info at https://github.com/klinker41/android-smsmms class MmsReceiver : com.klinker.android.send_message.MmsReceivedReceiver() { @@ -36,6 +33,7 @@ class MmsReceiver : com.klinker.android.send_message.MmsReceivedReceiver() { context.showReceivedMessageNotification(address, mms.body, mms.thread, glideBitmap) val conversation = context.getConversations(mms.thread.toLong()).firstOrNull() ?: return@ensureBackgroundThread context.conversationsDB.insertOrUpdate(conversation) + context.updateUnreadCountBadge(context.conversationsDB.getUnreadConversations()) } } 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 28daec33..37380eca 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsReceiver.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsReceiver.kt @@ -37,6 +37,7 @@ class SmsReceiver : BroadcastReceiver() { ensureBackgroundThread { val conversation = context.getConversations(threadId).firstOrNull() ?: return@ensureBackgroundThread context.conversationsDB.insertOrUpdate(conversation) + context.updateUnreadCountBadge(context.conversationsDB.getUnreadConversations()) } } }