Merge pull request #210 from gardener2/mms-blocking-fix

Implemented blocking logic on MMS received
This commit is contained in:
Naveen Singh 2024-11-29 19:02:16 +05:30 committed by GitHub
commit 15a521df7c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 63 additions and 32 deletions

View file

@ -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
}
}

View file

@ -6,13 +6,14 @@ import android.os.Handler
import android.os.Looper import android.os.Looper
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.klinker.android.send_message.MmsReceivedReceiver import com.klinker.android.send_message.MmsReceivedReceiver
import org.fossify.commons.extensions.isNumberBlocked import org.fossify.commons.extensions.*
import org.fossify.commons.extensions.normalizePhoneNumber import org.fossify.commons.helpers.SimpleContactsHelper
import org.fossify.commons.extensions.showErrorToast
import org.fossify.commons.helpers.ensureBackgroundThread import org.fossify.commons.helpers.ensureBackgroundThread
import org.fossify.messages.R import org.fossify.messages.R
import org.fossify.messages.extensions.* import org.fossify.messages.extensions.*
import org.fossify.messages.helpers.ReceiverUtils.isMessageFilteredOut
import org.fossify.messages.helpers.refreshMessages import org.fossify.messages.helpers.refreshMessages
import org.fossify.messages.models.Message
// more info at https://github.com/klinker41/android-smsmms // more info at https://github.com/klinker41/android-smsmms
class MmsReceiver : MmsReceivedReceiver() { class MmsReceiver : MmsReceivedReceiver() {
@ -27,29 +28,52 @@ class MmsReceiver : MmsReceivedReceiver() {
val address = mms.getSender()?.phoneNumbers?.first()?.normalizedNumber ?: "" val address = mms.getSender()?.phoneNumbers?.first()?.normalizedNumber ?: ""
val size = context.resources.getDimension(R.dimen.notification_large_icon_size).toInt() val size = context.resources.getDimension(R.dimen.notification_large_icon_size).toInt()
val privateCursor = context.getMyContactsCursor(false, true)
ensureBackgroundThread { ensureBackgroundThread {
val glideBitmap = try { if (context.baseConfig.blockUnknownNumbers) {
Glide.with(context) val simpleContactsHelper = SimpleContactsHelper(context)
.asBitmap() simpleContactsHelper.exists(address, privateCursor) { exists ->
.load(mms.attachment!!.attachments.first().getUri()) if (exists) {
.centerCrop() handleMmsMessage(context, mms, size, address)
.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()
} }
} else {
handleMmsMessage(context, mms, size, address)
} }
} }
} }
override fun onError(context: Context, error: String) = context.showErrorToast(context.getString(R.string.couldnt_download_mms)) 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()
}
}
}
} }

View file

@ -14,6 +14,7 @@ import org.fossify.commons.helpers.ensureBackgroundThread
import org.fossify.commons.models.PhoneNumber import org.fossify.commons.models.PhoneNumber
import org.fossify.commons.models.SimpleContact import org.fossify.commons.models.SimpleContact
import org.fossify.messages.extensions.* import org.fossify.messages.extensions.*
import org.fossify.messages.helpers.ReceiverUtils.isMessageFilteredOut
import org.fossify.messages.helpers.refreshMessages import org.fossify.messages.helpers.refreshMessages
import org.fossify.messages.models.Message import org.fossify.messages.models.Message
@ -40,7 +41,6 @@ class SmsReceiver : BroadcastReceiver() {
date = System.currentTimeMillis() date = System.currentTimeMillis()
threadId = context.getThreadId(address) threadId = context.getThreadId(address)
} }
if (context.baseConfig.blockUnknownNumbers) { if (context.baseConfig.blockUnknownNumbers) {
val simpleContactsHelper = SimpleContactsHelper(context) val simpleContactsHelper = SimpleContactsHelper(context)
simpleContactsHelper.exists(address, privateCursor) { exists -> 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
}
} }