Implemented blocking logic on MMS received, for both unknown numbers and keyword filtering
This commit is contained in:
parent
8a1b75012b
commit
23080debfe
3 changed files with 63 additions and 32 deletions
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
@ -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,7 +28,33 @@ 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 {
|
||||
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()
|
||||
|
|
@ -49,7 +76,4 @@ class MmsReceiver : MmsReceivedReceiver() {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onError(context: Context, error: String) = context.showErrorToast(context.getString(R.string.couldnt_download_mms))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue