diff options
-rw-r--r-- | sdk/src/java/org/lineageos/internal/phone/SensitivePhoneNumbers.java | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/sdk/src/java/org/lineageos/internal/phone/SensitivePhoneNumbers.java b/sdk/src/java/org/lineageos/internal/phone/SensitivePhoneNumbers.java index b5a00dc5..a87e2b09 100644 --- a/sdk/src/java/org/lineageos/internal/phone/SensitivePhoneNumbers.java +++ b/sdk/src/java/org/lineageos/internal/phone/SensitivePhoneNumbers.java @@ -20,6 +20,7 @@ package org.lineageos.internal.phone; import android.content.Context; import android.os.Environment; import android.telephony.PhoneNumberUtils; +import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.text.TextUtils; @@ -35,6 +36,7 @@ import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; public class SensitivePhoneNumbers { private final String LOG_TAG = this.getClass().getSimpleName(); @@ -96,17 +98,37 @@ public class SensitivePhoneNumbers { } public boolean isSensitiveNumber(Context context, String numberToCheck, int subId) { - TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class); - - if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { - subId = SubscriptionManager.getDefaultSubscriptionId(); + SubscriptionManager subManager = context.getSystemService(SubscriptionManager.class); + + List<SubscriptionInfo> list = subManager.getActiveSubscriptionInfoList(); + if (list != null) { + // Test all subscriptions so an accidential use of a wrong sim also hides the number + for (SubscriptionInfo subInfo : list) { + String mcc = String.valueOf(subInfo.getMcc()); + if (isSensitiveNumber(numberToCheck, mcc)) { + return true; + } + } + } else { + // Fall back to check with the passed subId + TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class); + if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { + subId = SubscriptionManager.getDefaultSubscriptionId(); + } + String networkUsed = telephonyManager.getNetworkOperator(subId); + if (!TextUtils.isEmpty(networkUsed)) { + String networkMCC = networkUsed.substring(0, 3); + return isSensitiveNumber(numberToCheck, networkMCC); + } } - String networkUsed = telephonyManager.getNetworkOperator(subId); - if (!TextUtils.isEmpty(networkUsed)) { - String networkMCC = networkUsed.substring(0, 3); - if (mSensitiveNumbersMap.containsKey(networkMCC)) { - for (String num : mSensitiveNumbersMap.get(networkMCC)) { + return false; + } + + private boolean isSensitiveNumber(String numberToCheck, String mcc) { + if (!TextUtils.isEmpty(numberToCheck)) { + if (mSensitiveNumbersMap.containsKey(mcc)) { + for (String num : mSensitiveNumbersMap.get(mcc)) { if (PhoneNumberUtils.compare(numberToCheck, num)) { return true; } |