improving blocked number checking performance
This commit is contained in:
parent
b90110b108
commit
b5cd6aafbc
|
@ -56,7 +56,7 @@ android {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'com.simplemobiletools:commons:5.28.14'
|
implementation 'com.simplemobiletools:commons:5.28.18'
|
||||||
implementation 'org.greenrobot:eventbus:3.2.0'
|
implementation 'org.greenrobot:eventbus:3.2.0'
|
||||||
implementation 'com.klinkerapps:android-smsmms:5.2.6'
|
implementation 'com.klinkerapps:android-smsmms:5.2.6'
|
||||||
implementation 'com.github.tibbi:IndicatorFastScroll:08f512858a'
|
implementation 'com.github.tibbi:IndicatorFastScroll:08f512858a'
|
||||||
|
|
|
@ -48,6 +48,7 @@ fun Context.getMessages(threadId: Int): ArrayList<Message> {
|
||||||
val sortOrder = "${Sms._ID} DESC LIMIT 100"
|
val sortOrder = "${Sms._ID} DESC LIMIT 100"
|
||||||
|
|
||||||
val blockStatus = HashMap<String, Boolean>()
|
val blockStatus = HashMap<String, Boolean>()
|
||||||
|
val blockedNumbers = getBlockedNumbers()
|
||||||
var messages = ArrayList<Message>()
|
var messages = ArrayList<Message>()
|
||||||
queryCursor(uri, projection, selection, selectionArgs, sortOrder, showErrors = true) { cursor ->
|
queryCursor(uri, projection, selection, selectionArgs, sortOrder, showErrors = true) { cursor ->
|
||||||
val senderNumber = cursor.getStringValue(Sms.ADDRESS) ?: return@queryCursor
|
val senderNumber = cursor.getStringValue(Sms.ADDRESS) ?: return@queryCursor
|
||||||
|
@ -55,7 +56,7 @@ fun Context.getMessages(threadId: Int): ArrayList<Message> {
|
||||||
val isNumberBlocked = if (blockStatus.containsKey(senderNumber)) {
|
val isNumberBlocked = if (blockStatus.containsKey(senderNumber)) {
|
||||||
blockStatus[senderNumber]!!
|
blockStatus[senderNumber]!!
|
||||||
} else {
|
} else {
|
||||||
val isBlocked = isNumberBlocked(senderNumber)
|
val isBlocked = isNumberBlocked(senderNumber, blockedNumbers)
|
||||||
blockStatus[senderNumber] = isBlocked
|
blockStatus[senderNumber] = isBlocked
|
||||||
isBlocked
|
isBlocked
|
||||||
}
|
}
|
||||||
|
@ -148,7 +149,7 @@ fun Context.getMMS(threadId: Int? = null, sortOrder: String? = null): ArrayList<
|
||||||
messages.add(message)
|
messages.add(message)
|
||||||
|
|
||||||
participants.forEach {
|
participants.forEach {
|
||||||
contactsMap.put(it.rawId, it)
|
contactsMap[it.rawId] = it
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,6 +190,7 @@ fun Context.getConversations(): ArrayList<Conversation> {
|
||||||
|
|
||||||
val conversations = ArrayList<Conversation>()
|
val conversations = ArrayList<Conversation>()
|
||||||
val simpleContactHelper = SimpleContactsHelper(this)
|
val simpleContactHelper = SimpleContactsHelper(this)
|
||||||
|
val blockedNumbers = getBlockedNumbers()
|
||||||
queryCursor(uri, projection, selection, selectionArgs, sortOrder, true) { cursor ->
|
queryCursor(uri, projection, selection, selectionArgs, sortOrder, true) { cursor ->
|
||||||
val id = cursor.getIntValue(Threads._ID)
|
val id = cursor.getIntValue(Threads._ID)
|
||||||
var snippet = cursor.getStringValue(Threads.SNIPPET) ?: ""
|
var snippet = cursor.getStringValue(Threads.SNIPPET) ?: ""
|
||||||
|
@ -204,7 +206,7 @@ fun Context.getConversations(): ArrayList<Conversation> {
|
||||||
val rawIds = cursor.getStringValue(Threads.RECIPIENT_IDS)
|
val rawIds = cursor.getStringValue(Threads.RECIPIENT_IDS)
|
||||||
val recipientIds = rawIds.split(" ").filter { it.areDigitsOnly() }.map { it.toInt() }.toMutableList()
|
val recipientIds = rawIds.split(" ").filter { it.areDigitsOnly() }.map { it.toInt() }.toMutableList()
|
||||||
val phoneNumbers = getThreadPhoneNumbers(recipientIds)
|
val phoneNumbers = getThreadPhoneNumbers(recipientIds)
|
||||||
if (phoneNumbers.any { isNumberBlocked(it) }) {
|
if (phoneNumbers.any { isNumberBlocked(it, blockedNumbers) }) {
|
||||||
return@queryCursor
|
return@queryCursor
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -378,13 +380,14 @@ fun Context.getSuggestedContacts(privateContacts: ArrayList<SimpleContact>): Arr
|
||||||
val selection = "1 == 1) GROUP BY (${Sms.ADDRESS}"
|
val selection = "1 == 1) GROUP BY (${Sms.ADDRESS}"
|
||||||
val selectionArgs = null
|
val selectionArgs = null
|
||||||
val sortOrder = "${Sms.DATE} DESC LIMIT 20"
|
val sortOrder = "${Sms.DATE} DESC LIMIT 20"
|
||||||
|
val blockedNumbers = getBlockedNumbers()
|
||||||
|
|
||||||
queryCursor(uri, projection, selection, selectionArgs, sortOrder, showErrors = true) { cursor ->
|
queryCursor(uri, projection, selection, selectionArgs, sortOrder, showErrors = true) { cursor ->
|
||||||
val senderNumber = cursor.getStringValue(Sms.ADDRESS) ?: return@queryCursor
|
val senderNumber = cursor.getStringValue(Sms.ADDRESS) ?: return@queryCursor
|
||||||
val namePhoto = getNameAndPhotoFromPhoneNumber(senderNumber)
|
val namePhoto = getNameAndPhotoFromPhoneNumber(senderNumber)
|
||||||
var senderName = namePhoto?.name ?: ""
|
var senderName = namePhoto?.name ?: ""
|
||||||
var photoUri = namePhoto?.photoUri ?: ""
|
var photoUri = namePhoto?.photoUri ?: ""
|
||||||
if (namePhoto == null || isNumberBlocked(senderNumber)) {
|
if (namePhoto == null || isNumberBlocked(senderNumber, blockedNumbers)) {
|
||||||
return@queryCursor
|
return@queryCursor
|
||||||
} else if (namePhoto.name == senderNumber) {
|
} else if (namePhoto.name == senderNumber) {
|
||||||
if (privateContacts.isNotEmpty()) {
|
if (privateContacts.isNotEmpty()) {
|
||||||
|
@ -499,16 +502,6 @@ fun Context.getThreadId(addresses: Set<String>): Long {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Context.isNumberBlocked(number: String): Boolean {
|
|
||||||
if (!isNougatPlus()) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
val blockedNumbers = getBlockedNumbers()
|
|
||||||
val numberToCompare = number.trimToComparableNumber()
|
|
||||||
return blockedNumbers.map { it.numberToCompare }.contains(numberToCompare) || blockedNumbers.map { it.number }.contains(numberToCompare)
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("NewApi")
|
@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?, messageId: Int, isMMS: Boolean) {
|
||||||
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
||||||
|
|
|
@ -3,10 +3,10 @@ package com.simplemobiletools.smsmessenger.receivers
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
|
import com.simplemobiletools.commons.extensions.isNumberBlocked
|
||||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||||
import com.simplemobiletools.smsmessenger.R
|
import com.simplemobiletools.smsmessenger.R
|
||||||
import com.simplemobiletools.smsmessenger.extensions.getLatestMMS
|
import com.simplemobiletools.smsmessenger.extensions.getLatestMMS
|
||||||
import com.simplemobiletools.smsmessenger.extensions.isNumberBlocked
|
|
||||||
import com.simplemobiletools.smsmessenger.extensions.showReceivedMessageNotification
|
import com.simplemobiletools.smsmessenger.extensions.showReceivedMessageNotification
|
||||||
|
|
||||||
// more info at https://github.com/klinker41/android-smsmms
|
// more info at https://github.com/klinker41/android-smsmms
|
||||||
|
|
|
@ -4,9 +4,9 @@ import android.content.BroadcastReceiver
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.provider.Telephony
|
import android.provider.Telephony
|
||||||
|
import com.simplemobiletools.commons.extensions.isNumberBlocked
|
||||||
import com.simplemobiletools.smsmessenger.extensions.getThreadId
|
import com.simplemobiletools.smsmessenger.extensions.getThreadId
|
||||||
import com.simplemobiletools.smsmessenger.extensions.insertNewSMS
|
import com.simplemobiletools.smsmessenger.extensions.insertNewSMS
|
||||||
import com.simplemobiletools.smsmessenger.extensions.isNumberBlocked
|
|
||||||
import com.simplemobiletools.smsmessenger.extensions.showReceivedMessageNotification
|
import com.simplemobiletools.smsmessenger.extensions.showReceivedMessageNotification
|
||||||
import com.simplemobiletools.smsmessenger.helpers.refreshMessages
|
import com.simplemobiletools.smsmessenger.helpers.refreshMessages
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue