Store anonymized call numbers in shared preferences
This commit is contained in:
parent
fc3f6c58ce
commit
079bbb20f5
1 changed files with 29 additions and 7 deletions
|
@ -61,7 +61,9 @@ class CallRedirectionService : CallRedirectionService() {
|
||||||
initialPhoneAccount: PhoneAccountHandle,
|
initialPhoneAccount: PhoneAccountHandle,
|
||||||
allowInteractiveResponse: Boolean,
|
allowInteractiveResponse: Boolean,
|
||||||
) {
|
) {
|
||||||
Log.d("Redirection", "onPlaceCall triggered: uri=$handle, interactive=$allowInteractiveResponse")
|
val phoneNumber = handle.schemeSpecificPart
|
||||||
|
val numberAlias = getAnonymizedAlias(phoneNumber)
|
||||||
|
Log.d("Redirection", "onPlaceCall triggered: alias=$numberAlias, interactive=$allowInteractiveResponse")
|
||||||
|
|
||||||
val capabilities = connectivityManager
|
val capabilities = connectivityManager
|
||||||
?.getNetworkCapabilities(connectivityManager?.activeNetwork)
|
?.getNetworkCapabilities(connectivityManager?.activeNetwork)
|
||||||
|
@ -100,10 +102,6 @@ class CallRedirectionService : CallRedirectionService() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
val phoneNumber = handle.schemeSpecificPart
|
|
||||||
val numberAlias = getAnonymizedNumberAlias(phoneNumber)
|
|
||||||
Log.d("Redirection", "Processing call to: $numberAlias")
|
|
||||||
|
|
||||||
if (prefs.redirectInternationalOnly && !isInternationalNumber(phoneNumber)) {
|
if (prefs.redirectInternationalOnly && !isInternationalNumber(phoneNumber)) {
|
||||||
Log.d("Redirection", "Aborting: number $numberAlias is not international and pref requires it")
|
Log.d("Redirection", "Aborting: number $numberAlias is not international and pref requires it")
|
||||||
placeCallUnmodified()
|
placeCallUnmodified()
|
||||||
|
@ -116,6 +114,8 @@ class CallRedirectionService : CallRedirectionService() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Log.d("Redirection", "Number $numberAlias is not in filters, processing redirection...")
|
||||||
|
|
||||||
val records: Array<Record>
|
val records: Array<Record>
|
||||||
try {
|
try {
|
||||||
records = getRecordsFromPhoneNumber(phoneNumber)
|
records = getRecordsFromPhoneNumber(phoneNumber)
|
||||||
|
@ -201,8 +201,30 @@ class CallRedirectionService : CallRedirectionService() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getAnonymizedAlias(number: String): String {
|
private fun getAnonymizedAlias(number: String): String {
|
||||||
val contactId = getContactIdByPhoneNumber(number)
|
val prefs = getSharedPreferences("anonymized_numbers", MODE_PRIVATE)
|
||||||
return if (contactId != null) "#$contactId" else "#???"
|
|
||||||
|
// Return existing alias if already mapped
|
||||||
|
val existing = prefs.getString(number, null)
|
||||||
|
if (existing != null) return existing
|
||||||
|
|
||||||
|
// Start from current counter
|
||||||
|
var counter = prefs.getInt("counter", 1)
|
||||||
|
var alias: String
|
||||||
|
|
||||||
|
// Find the first unused alias (safety check)
|
||||||
|
while (true) {
|
||||||
|
alias = "#$counter"
|
||||||
|
if (!prefs.all.containsValue(alias)) break
|
||||||
|
counter++
|
||||||
|
}
|
||||||
|
|
||||||
|
// Store new alias and increment counter
|
||||||
|
prefs.edit()
|
||||||
|
.putString(number, alias)
|
||||||
|
.putInt("counter", counter + 1)
|
||||||
|
.apply()
|
||||||
|
|
||||||
|
return alias
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isInternationalNumber(phoneNumber: String): Boolean {
|
private fun isInternationalNumber(phoneNumber: String): Boolean {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue