Commit 67ffa9d7 by zhangchengbo

feat:1.增加对于通话列表中加密手机号的转换与展示

2.手动输入手机号与通话列表中顺丰号码进行比对 3.删除黑名单时,对加密手机号进行校验处理
parent f54ad0d2
...@@ -6,7 +6,6 @@ import android.content.ActivityNotFoundException ...@@ -6,7 +6,6 @@ import android.content.ActivityNotFoundException
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.util.Log
import android.widget.Toast import android.widget.Toast
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.viewModels import androidx.activity.viewModels
...@@ -15,6 +14,8 @@ import androidx.compose.ui.platform.LocalContext ...@@ -15,6 +14,8 @@ import androidx.compose.ui.platform.LocalContext
import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.google.gson.Gson
import com.secspace.log.Log
import com.simplemobiletools.commons.R import com.simplemobiletools.commons.R
import com.simplemobiletools.commons.compose.alert_dialog.rememberAlertDialogState import com.simplemobiletools.commons.compose.alert_dialog.rememberAlertDialogState
import com.simplemobiletools.commons.compose.extensions.enableEdgeToEdgeSimple import com.simplemobiletools.commons.compose.extensions.enableEdgeToEdgeSimple
...@@ -28,8 +29,9 @@ import com.simplemobiletools.commons.dialogs.FilePickerDialog ...@@ -28,8 +29,9 @@ import com.simplemobiletools.commons.dialogs.FilePickerDialog
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.helpers.*
import com.simplemobiletools.commons.models.BlockedNumber import com.simplemobiletools.commons.models.BlockedNumber
import java.io.FileOutputStream import com.simplemobiletools.commons.utils.AESCommon
import java.io.OutputStream import com.simplemobiletools.commons.utils.PhoneFromUtilCommon
import com.simplemobiletools.commons.utils.PhoneUtilsCommon
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
...@@ -38,6 +40,8 @@ import kotlinx.coroutines.flow.asStateFlow ...@@ -38,6 +40,8 @@ import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import java.io.FileOutputStream
import java.io.OutputStream
class ManageBlockedNumbersActivity : BaseSimpleActivity() { class ManageBlockedNumbersActivity : BaseSimpleActivity() {
...@@ -53,7 +57,7 @@ class ManageBlockedNumbersActivity : BaseSimpleActivity() { ...@@ -53,7 +57,7 @@ class ManageBlockedNumbersActivity : BaseSimpleActivity() {
private val TAG = "ManageBlockedNumbersActivity" private val TAG = "ManageBlockedNumbersActivity"
override fun getAppIconIDs() = intent.getIntegerArrayListExtra(APP_ICON_IDS) ?: ArrayList() override fun getAppIconIDs() = intent.getIntegerArrayListExtra(APP_ICON_IDS) ?: ArrayList()
// //
override fun getAppLauncherName() = intent.getStringExtra(APP_LAUNCHER_NAME) ?: "" override fun getAppLauncherName() = intent.getStringExtra(APP_LAUNCHER_NAME) ?: ""
private val manageBlockedNumbersViewModel by viewModels<ManageBlockedNumbersViewModel>() private val manageBlockedNumbersViewModel by viewModels<ManageBlockedNumbersViewModel>()
...@@ -64,7 +68,29 @@ class ManageBlockedNumbersActivity : BaseSimpleActivity() { ...@@ -64,7 +68,29 @@ class ManageBlockedNumbersActivity : BaseSimpleActivity() {
setContent { setContent {
val context = LocalContext.current val context = LocalContext.current
val blockedNumbers by manageBlockedNumbersViewModel.blockedNumbers.collectAsStateWithLifecycle() val blockedNumbers by manageBlockedNumbersViewModel.blockedNumbers.collectAsStateWithLifecycle()
Log.d(TAG, "onCreate: 获取所有黑名单列表 blockedNumbers = $blockedNumbers") Log.d(TAG, "onCreate: 获取所有黑名单列表 blockedNumbers 是否为空 = ${blockedNumbers.isNullOrEmpty()}")
if (!blockedNumbers.isNullOrEmpty()) {
blockedNumbers!!.forEachIndexed { index, blockedNumber ->
android.util.Log.d(TAG, "onCreate: blockedNumber = ${blockedNumber.number}")
if (PhoneFromUtilCommon.isNumeric(blockedNumber.number) || blockedNumber.number.length < 11)return@forEachIndexed
Log.d(TAG, "onCreate: 获取所有黑名单列表 = ${Gson().toJson(blockedNumber)}")
var decryptResult = ""
decryptResult = if (!PhoneFromUtilCommon.isNumeric(blockedNumber.number)) {
val deCode = AESCommon.decrypt(blockedNumber.number)
PhoneUtilsCommon.phoneConvert(deCode)
} else {
blockedNumber.number
}
Log.d(TAG, "onCreate: 当前脱敏后的手机号码 = $decryptResult")
blockedNumbers!![index].normalizedNumber = blockedNumber.number
blockedNumbers!![index].number = decryptResult
}
Log.d(TAG, "onCreate: 获取所有黑名单列表 获取脱敏后的手机号 = ${Gson().toJson(blockedNumbers!!.map { it.number })}")
Log.d(TAG, "onCreate: 获取所有黑名单列表 获取转换后的手机号 = ${Gson().toJson(blockedNumbers)}")
}
LaunchedEffect(blockedNumbers) { LaunchedEffect(blockedNumbers) {
if (blockedNumbers?.any { blockedNumber -> blockedNumber.number.isBlockedNumberPattern() } == true) { if (blockedNumbers?.any { blockedNumber -> blockedNumber.number.isBlockedNumberPattern() } == true) {
...@@ -93,10 +119,37 @@ class ManageBlockedNumbersActivity : BaseSimpleActivity() { ...@@ -93,10 +119,37 @@ class ManageBlockedNumbersActivity : BaseSimpleActivity() {
updateBlockedNumbers() updateBlockedNumbers()
} }
) { blockedNumber -> ) { blockedNumber ->
Log.d(TAG, "onCreate: 添加成功黑名单 blockedNumber = $blockedNumber") android.util.Log.d(TAG, "onCreate: 添加黑名单手机号 blockedNumber= $blockedNumber length = ${blockedNumber.length}")
addBlockedNumber(blockedNumber) if (blockedNumber.length < 11 || blockedNumber.length > 11) {
clickedBlockedNumber = null addBlockedNumber(blockedNumber)
updateBlockedNumbers() clickedBlockedNumber = null
updateBlockedNumbers()
} else {
RecentsHelperCommon(context).getRecentCalls(false, Int.MAX_VALUE) { recents ->
if (recents.isEmpty()) return@getRecentCalls
Log.d(TAG, "onCreate 获取通话列表数据 = ${Gson().toJson(recents)}")
val listSfNumbers = recents.filter { it.isShunFeng }.map { it.phoneNumber }.distinct()
Log.d(TAG, "onCreate: 获取过滤顺丰手机号列表数据 = $listSfNumbers")
listSfNumbers.forEach { number ->
if (!PhoneFromUtilCommon.isNumeric(number)) {
val decode = AESCommon.decrypt(number)
Log.d(TAG, "onCreate: 获取顺丰手机号 number = $number decode = $decode blockedNumber = $blockedNumber")
if (decode == blockedNumber) {
Log.d(TAG, "onCreate: if 添加成功黑名单 blockedNumber = $blockedNumber")
addBlockedNumber(number)
}else{
addBlockedNumber(blockedNumber)
Log.d(TAG, "onCreate: else 添加成功黑名单 blockedNumber = $blockedNumber")
}
}
}
clickedBlockedNumber = null
updateBlockedNumbers()
}
}
} }
} }
...@@ -125,12 +178,12 @@ class ManageBlockedNumbersActivity : BaseSimpleActivity() { ...@@ -125,12 +178,12 @@ class ManageBlockedNumbersActivity : BaseSimpleActivity() {
blockedNumbers = blockedNumbers, blockedNumbers = blockedNumbers,
onDelete = { selectedKeys: Set<Long> -> onDelete = { selectedKeys: Set<Long> ->
if (blockedNumbers.isNullOrEmpty()) return@ManageBlockedNumbersScreen if (blockedNumbers.isNullOrEmpty()) return@ManageBlockedNumbersScreen
Log.d(TAG, "onCreate: 长按滑动模式 selectedKeys = $selectedKeys") Log.d(TAG, "onCreate: 单个删除模式 selectedKeys = $selectedKeys")
if(selectedKeys.size == 1){ if (selectedKeys.size == 1) {
deleteBlockedNumbers(blockedNumbers, selectedKeys) deleteBlockedNumbers(blockedNumbers, selectedKeys)
return@ManageBlockedNumbersScreen return@ManageBlockedNumbersScreen
} }
Log.d(TAG, "onCreate: 长按滑动模式 删除所有黑名单数据!") Log.d(TAG, "onCreate: 单个删除模式 删除所有黑名单数据!")
val allBlockKeys = blockedNumbers!!.map { it.id } val allBlockKeys = blockedNumbers!!.map { it.id }
var confirmationText = "" var confirmationText = ""
confirmationText = if (allBlockKeys == selectedKeys) { confirmationText = if (allBlockKeys == selectedKeys) {
...@@ -139,7 +192,7 @@ class ManageBlockedNumbersActivity : BaseSimpleActivity() { ...@@ -139,7 +192,7 @@ class ManageBlockedNumbersActivity : BaseSimpleActivity() {
"${getString(R.string.you_sure_delete_choose_blocked_numbers)}\n\n${getString(R.string.cannot_be_undone)}" "${getString(R.string.you_sure_delete_choose_blocked_numbers)}\n\n${getString(R.string.cannot_be_undone)}"
} }
ConfirmationDialog(this, confirmationText) { ConfirmationDialog(this, confirmationText) {
Log.d(TAG, "onCreate: 长按滑动模式 $confirmationText YES") Log.d(TAG, "onCreate: 单个删除模式 $confirmationText YES")
deleteBlockedNumbers(blockedNumbers, selectedKeys) deleteBlockedNumbers(blockedNumbers, selectedKeys)
} }
}, },
...@@ -153,14 +206,18 @@ class ManageBlockedNumbersActivity : BaseSimpleActivity() { ...@@ -153,14 +206,18 @@ class ManageBlockedNumbersActivity : BaseSimpleActivity() {
selectAllBlock = { selectAllBlock = {
if (blockedNumbers.isNullOrEmpty()) return@ManageBlockedNumbersScreen if (blockedNumbers.isNullOrEmpty()) return@ManageBlockedNumbersScreen
val confirmationText = "${getString(R.string.you_sure_delete_all_blocked_numbers)}\n\n${getString(R.string.cannot_be_undone)}" val confirmationText = "${getString(R.string.you_sure_delete_all_blocked_numbers)}\n\n${getString(R.string.cannot_be_undone)}"
Log.d(TAG, "onCreate: 点击选项模式 删除所有黑名单数据!") Log.d(TAG, "onCreate: 全选删除模式 删除所有黑名单数据!")
ConfirmationDialog(this, confirmationText) { ConfirmationDialog(this, confirmationText) {
Log.d(TAG, "onCreate: 点击选项模式 $confirmationText YES") Log.d(TAG, "onCreate: 全选删除模式 $confirmationText YES")
blockedNumbers!!.forEach { blockedNumber -> blockedNumbers!!.forEach { blockedNumber ->
deleteBlockedNumber(blockedNumber.number) if(!PhoneFromUtilCommon.isNumeric(blockedNumber.normalizedNumber)){
deleteBlockedNumber(blockedNumber.normalizedNumber )
}else{
deleteBlockedNumber(blockedNumber.number )
}
} }
Log.d(TAG, "onCreate: 全选删除模式 已成功删除所有黑名单数据!")
updateBlockedNumbers() updateBlockedNumbers()
Log.d(TAG, "onCreate: 点击选项模式 已成功删除所有黑名单数据!")
} }
} }
) )
...@@ -169,7 +226,7 @@ class ManageBlockedNumbersActivity : BaseSimpleActivity() { ...@@ -169,7 +226,7 @@ class ManageBlockedNumbersActivity : BaseSimpleActivity() {
} }
/** /**
* 长按滑动模式,删除选中黑名单 * 删除选中黑名单
*/ */
private fun deleteBlockedNumbers( private fun deleteBlockedNumbers(
blockedNumbers: ImmutableList<BlockedNumber>?, blockedNumbers: ImmutableList<BlockedNumber>?,
...@@ -178,10 +235,15 @@ class ManageBlockedNumbersActivity : BaseSimpleActivity() { ...@@ -178,10 +235,15 @@ class ManageBlockedNumbersActivity : BaseSimpleActivity() {
if (blockedNumbers.isNullOrEmpty()) return if (blockedNumbers.isNullOrEmpty()) return
blockedNumbers.filter { blockedNumber -> selectedKeys.contains(blockedNumber.id) } blockedNumbers.filter { blockedNumber -> selectedKeys.contains(blockedNumber.id) }
.forEach { blockedNumber -> .forEach { blockedNumber ->
deleteBlockedNumber(blockedNumber.number) Log.d(TAG, "onCreate: blockedNumber = ${blockedNumber.number} normalizedNumber = ${blockedNumber.normalizedNumber}")
if(!PhoneFromUtilCommon.isNumeric(blockedNumber.normalizedNumber)){
deleteBlockedNumber(blockedNumber.normalizedNumber )
}else{
deleteBlockedNumber(blockedNumber.number )
}
} }
updateBlockedNumbers() updateBlockedNumbers()
Log.d(TAG, "onCreate: 长按滑动模式 已成功删除所有黑名单数据!") Log.d(TAG, "onCreate: 单个删除模式 已成功删除所有黑名单数据!")
} }
private fun tryImportBlockedNumbers() { private fun tryImportBlockedNumbers() {
...@@ -261,7 +323,7 @@ class ManageBlockedNumbersActivity : BaseSimpleActivity() { ...@@ -261,7 +323,7 @@ class ManageBlockedNumbersActivity : BaseSimpleActivity() {
} }
private fun maybeSetDefaultCallerIdApp() { private fun maybeSetDefaultCallerIdApp() {
if (isQPlus() && baseConfig.appId.startsWith("com.simplemobiletools.dialer")) { if (isQPlus() && baseConfig.appId.startsWith("com.secspace.dialer")) {
setDefaultCallerIdApp() setDefaultCallerIdApp()
} }
} }
......
...@@ -5,4 +5,4 @@ import androidx.compose.runtime.Immutable ...@@ -5,4 +5,4 @@ import androidx.compose.runtime.Immutable
@Immutable @Immutable
@Keep @Keep
data class BlockedNumber(val id: Long, val number: String, val normalizedNumber: String, val numberToCompare: String, val contactName: String? = null) data class BlockedNumber(val id: Long, var number: String, var normalizedNumber: String, val numberToCompare: String, val contactName: String? = null)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment