From 23080debfe39dfbd911bc3ad9f7f0d598d32cb10 Mon Sep 17 00:00:00 2001 From: gardener2 Date: Sat, 24 Aug 2024 17:16:38 -0600 Subject: [PATCH] Implemented blocking logic on MMS received, for both unknown numbers and keyword filtering --- .../fossify/messages/helpers/ReceiverUtils.kt | 17 +++++ .../fossify/messages/receivers/MmsReceiver.kt | 66 +++++++++++++------ .../fossify/messages/receivers/SmsReceiver.kt | 12 +--- 3 files changed, 63 insertions(+), 32 deletions(-) create mode 100644 app/src/main/kotlin/org/fossify/messages/helpers/ReceiverUtils.kt diff --git a/app/src/main/kotlin/org/fossify/messages/helpers/ReceiverUtils.kt b/app/src/main/kotlin/org/fossify/messages/helpers/ReceiverUtils.kt new file mode 100644 index 00000000..e7d8b483 --- /dev/null +++ b/app/src/main/kotlin/org/fossify/messages/helpers/ReceiverUtils.kt @@ -0,0 +1,17 @@ +package org.fossify.messages.helpers + +import android.content.Context +import org.fossify.messages.extensions.config + +object ReceiverUtils { + + fun isMessageFilteredOut(context: Context, body: String): Boolean { + for (blockedKeyword in context.config.blockedKeywords) { + if (body.contains(blockedKeyword, ignoreCase = true)) { + return true + } + } + + return false + } +} diff --git a/app/src/main/kotlin/org/fossify/messages/receivers/MmsReceiver.kt b/app/src/main/kotlin/org/fossify/messages/receivers/MmsReceiver.kt index b34c9545..c8c1c136 100644 --- a/app/src/main/kotlin/org/fossify/messages/receivers/MmsReceiver.kt +++ b/app/src/main/kotlin/org/fossify/messages/receivers/MmsReceiver.kt @@ -6,13 +6,14 @@ import android.os.Handler import android.os.Looper import com.bumptech.glide.Glide import com.klinker.android.send_message.MmsReceivedReceiver -import org.fossify.commons.extensions.isNumberBlocked -import org.fossify.commons.extensions.normalizePhoneNumber -import org.fossify.commons.extensions.showErrorToast +import org.fossify.commons.extensions.* +import org.fossify.commons.helpers.SimpleContactsHelper import org.fossify.commons.helpers.ensureBackgroundThread import org.fossify.messages.R import org.fossify.messages.extensions.* +import org.fossify.messages.helpers.ReceiverUtils.isMessageFilteredOut import org.fossify.messages.helpers.refreshMessages +import org.fossify.messages.models.Message // more info at https://github.com/klinker41/android-smsmms class MmsReceiver : MmsReceivedReceiver() { @@ -27,29 +28,52 @@ class MmsReceiver : MmsReceivedReceiver() { val address = mms.getSender()?.phoneNumbers?.first()?.normalizedNumber ?: "" val size = context.resources.getDimension(R.dimen.notification_large_icon_size).toInt() + val privateCursor = context.getMyContactsCursor(false, true) ensureBackgroundThread { - val glideBitmap = try { - Glide.with(context) - .asBitmap() - .load(mms.attachment!!.attachments.first().getUri()) - .centerCrop() - .into(size, size) - .get() - } catch (e: Exception) { - null - } - - Handler(Looper.getMainLooper()).post { - context.showReceivedMessageNotification(mms.id, address, mms.body, mms.threadId, glideBitmap) - val conversation = context.getConversations(mms.threadId).firstOrNull() ?: return@post - ensureBackgroundThread { - context.insertOrUpdateConversation(conversation) - context.updateUnreadCountBadge(context.conversationsDB.getUnreadConversations()) - refreshMessages() + if (context.baseConfig.blockUnknownNumbers) { + val simpleContactsHelper = SimpleContactsHelper(context) + simpleContactsHelper.exists(address, privateCursor) { exists -> + if (exists) { + handleMmsMessage(context, mms, size, address) + } } + } else { + handleMmsMessage(context, mms, size, address) } } } override fun onError(context: Context, error: String) = context.showErrorToast(context.getString(R.string.couldnt_download_mms)) + + private fun handleMmsMessage( + context: Context, + mms: Message, + size: Int, + address: String + ) { + if (isMessageFilteredOut(context, mms.body)) { + return + } + + val glideBitmap = try { + Glide.with(context) + .asBitmap() + .load(mms.attachment!!.attachments.first().getUri()) + .centerCrop() + .into(size, size) + .get() + } catch (e: Exception) { + null + } + + Handler(Looper.getMainLooper()).post { + context.showReceivedMessageNotification(mms.id, address, mms.body, mms.threadId, glideBitmap) + val conversation = context.getConversations(mms.threadId).firstOrNull() ?: return@post + ensureBackgroundThread { + context.insertOrUpdateConversation(conversation) + context.updateUnreadCountBadge(context.conversationsDB.getUnreadConversations()) + refreshMessages() + } + } + } } diff --git a/app/src/main/kotlin/org/fossify/messages/receivers/SmsReceiver.kt b/app/src/main/kotlin/org/fossify/messages/receivers/SmsReceiver.kt index 326cc03c..9ffe81d0 100644 --- a/app/src/main/kotlin/org/fossify/messages/receivers/SmsReceiver.kt +++ b/app/src/main/kotlin/org/fossify/messages/receivers/SmsReceiver.kt @@ -14,6 +14,7 @@ import org.fossify.commons.helpers.ensureBackgroundThread import org.fossify.commons.models.PhoneNumber import org.fossify.commons.models.SimpleContact import org.fossify.messages.extensions.* +import org.fossify.messages.helpers.ReceiverUtils.isMessageFilteredOut import org.fossify.messages.helpers.refreshMessages import org.fossify.messages.models.Message @@ -40,7 +41,6 @@ class SmsReceiver : BroadcastReceiver() { date = System.currentTimeMillis() threadId = context.getThreadId(address) } - if (context.baseConfig.blockUnknownNumbers) { val simpleContactsHelper = SimpleContactsHelper(context) simpleContactsHelper.exists(address, privateCursor) { exists -> @@ -122,14 +122,4 @@ class SmsReceiver : BroadcastReceiver() { } } } - - private fun isMessageFilteredOut(context: Context, body: String): Boolean { - for (blockedKeyword in context.config.blockedKeywords) { - if (body.contains(blockedKeyword, ignoreCase = true)) { - return true - } - } - - return false - } }