Loading src/java/com/android/internal/telephony/CarrierPrivilegesTracker.java +62 −1 Original line number Diff line number Diff line Loading @@ -19,7 +19,13 @@ package com.android.internal.telephony; import static android.telephony.CarrierConfigManager.EXTRA_SLOT_INDEX; import static android.telephony.CarrierConfigManager.EXTRA_SUBSCRIPTION_INDEX; import static android.telephony.CarrierConfigManager.KEY_CARRIER_CERTIFICATE_STRING_ARRAY; import static android.telephony.SubscriptionManager.INVALID_SIM_SLOT_INDEX; import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID; import static android.telephony.TelephonyManager.EXTRA_SIM_STATE; import static android.telephony.TelephonyManager.SIM_STATE_ABSENT; import static android.telephony.TelephonyManager.SIM_STATE_LOADED; import static android.telephony.TelephonyManager.SIM_STATE_NOT_READY; import static android.telephony.TelephonyManager.SIM_STATE_UNKNOWN; import android.annotation.NonNull; import android.content.BroadcastReceiver; Loading @@ -39,6 +45,7 @@ import android.os.RegistrantList; import android.os.UserManager; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.util.ArrayMap; import android.util.ArraySet; import android.util.IntArray; Loading Loading @@ -76,14 +83,25 @@ public class CarrierPrivilegesTracker extends Handler { */ private static final int ACTION_CARRIER_CONFIG_CERTS_UPDATED = 3; /** * Action for tracking when the Phone's SIM state changes. * arg1: slotId that this Action applies to * arg2: simState reported by this Broadcast */ private static final int ACTION_SIM_STATE_UPDATED = 4; private final Context mContext; private final Phone mPhone; private final CarrierConfigManager mCarrierConfigManager; private final PackageManager mPackageManager; private final UserManager mUserManager; private final TelephonyManager mTelephonyManager; private final RegistrantList mRegistrantList; private final Set<String> mCarrierConfigCerts; // TODO(b/151981841): Use Set<UiccAccessRule> to also check for package names loaded from SIM private final Set<String> mUiccCerts; // Map of PackageName -> Certificate hashes for that Package private final Map<String, Set<String>> mInstalledPackageCerts; private int[] mPrivilegedUids; Loading @@ -109,6 +127,20 @@ public class CarrierPrivilegesTracker extends Handler { slotIndex)); break; } case TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED: // fall through case TelephonyManager.ACTION_SIM_APPLICATION_STATE_CHANGED: { Bundle extras = intent.getExtras(); int simState = extras.getInt(EXTRA_SIM_STATE, SIM_STATE_UNKNOWN); int slotId = extras.getInt(PhoneConstants.PHONE_KEY, INVALID_SIM_SLOT_INDEX); if (simState != SIM_STATE_ABSENT && simState != SIM_STATE_NOT_READY && simState != SIM_STATE_LOADED) return; sendMessage(obtainMessage(ACTION_SIM_STATE_UPDATED, slotId, simState)); break; } } } }; Loading @@ -120,14 +152,18 @@ public class CarrierPrivilegesTracker extends Handler { mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class); mPackageManager = context.getSystemService(PackageManager.class); mUserManager = context.getSystemService(UserManager.class); mTelephonyManager = context.getSystemService(TelephonyManager.class); mPhone = phone; IntentFilter filter = new IntentFilter(); filter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED); filter.addAction(TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED); filter.addAction(TelephonyManager.ACTION_SIM_APPLICATION_STATE_CHANGED); mContext.registerReceiver(mIntentReceiver, filter); mRegistrantList = new RegistrantList(); mCarrierConfigCerts = new ArraySet<>(); mUiccCerts = new ArraySet<>(); mInstalledPackageCerts = new ArrayMap<>(); mPrivilegedUids = new int[0]; } Loading @@ -147,6 +183,10 @@ public class CarrierPrivilegesTracker extends Handler { handleCarrierConfigUpdated(msg.arg1, msg.arg2); break; } case ACTION_SIM_STATE_UPDATED: { handleSimStateChanged(msg.arg1, msg.arg2); break; } default: { Log.e(TAG, "Received unknown msg type: " + msg.what); break; Loading Loading @@ -187,6 +227,27 @@ public class CarrierPrivilegesTracker extends Handler { maybeUpdateCertsAndNotifyRegistrants(mCarrierConfigCerts, updatedCarrierConfigCerts); } private void handleSimStateChanged(int slotId, int simState) { if (slotId != mPhone.getPhoneId()) return; Set<String> updatedUiccCerts = new ArraySet<>(); // Only include the UICC certs if the SIM is fully loaded if (simState == SIM_STATE_LOADED) { TelephonyManager telMan = mTelephonyManager.createForSubscriptionId(mPhone.getSubId()); if (telMan.hasIccCard(mPhone.getPhoneId())) { List<String> uiccCerts = telMan.getCertsFromCarrierPrivilegeAccessRules(); if (uiccCerts != null) { for (String cert : uiccCerts) { updatedUiccCerts.add(cert.toUpperCase()); } } } } maybeUpdateCertsAndNotifyRegistrants(mUiccCerts, updatedUiccCerts); } private void maybeUpdateCertsAndNotifyRegistrants( Set<String> currentCerts, Set<String> updatedCerts) { if (!currentCerts.equals(updatedCerts)) { Loading Loading @@ -232,7 +293,7 @@ public class CarrierPrivilegesTracker extends Handler { private boolean isPackagePrivileged(Set<String> certs) { for (String cert : certs) { if (mCarrierConfigCerts.contains(cert)) { if (mCarrierConfigCerts.contains(cert) || mUiccCerts.contains(cert)) { return true; } } Loading Loading
src/java/com/android/internal/telephony/CarrierPrivilegesTracker.java +62 −1 Original line number Diff line number Diff line Loading @@ -19,7 +19,13 @@ package com.android.internal.telephony; import static android.telephony.CarrierConfigManager.EXTRA_SLOT_INDEX; import static android.telephony.CarrierConfigManager.EXTRA_SUBSCRIPTION_INDEX; import static android.telephony.CarrierConfigManager.KEY_CARRIER_CERTIFICATE_STRING_ARRAY; import static android.telephony.SubscriptionManager.INVALID_SIM_SLOT_INDEX; import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID; import static android.telephony.TelephonyManager.EXTRA_SIM_STATE; import static android.telephony.TelephonyManager.SIM_STATE_ABSENT; import static android.telephony.TelephonyManager.SIM_STATE_LOADED; import static android.telephony.TelephonyManager.SIM_STATE_NOT_READY; import static android.telephony.TelephonyManager.SIM_STATE_UNKNOWN; import android.annotation.NonNull; import android.content.BroadcastReceiver; Loading @@ -39,6 +45,7 @@ import android.os.RegistrantList; import android.os.UserManager; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.util.ArrayMap; import android.util.ArraySet; import android.util.IntArray; Loading Loading @@ -76,14 +83,25 @@ public class CarrierPrivilegesTracker extends Handler { */ private static final int ACTION_CARRIER_CONFIG_CERTS_UPDATED = 3; /** * Action for tracking when the Phone's SIM state changes. * arg1: slotId that this Action applies to * arg2: simState reported by this Broadcast */ private static final int ACTION_SIM_STATE_UPDATED = 4; private final Context mContext; private final Phone mPhone; private final CarrierConfigManager mCarrierConfigManager; private final PackageManager mPackageManager; private final UserManager mUserManager; private final TelephonyManager mTelephonyManager; private final RegistrantList mRegistrantList; private final Set<String> mCarrierConfigCerts; // TODO(b/151981841): Use Set<UiccAccessRule> to also check for package names loaded from SIM private final Set<String> mUiccCerts; // Map of PackageName -> Certificate hashes for that Package private final Map<String, Set<String>> mInstalledPackageCerts; private int[] mPrivilegedUids; Loading @@ -109,6 +127,20 @@ public class CarrierPrivilegesTracker extends Handler { slotIndex)); break; } case TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED: // fall through case TelephonyManager.ACTION_SIM_APPLICATION_STATE_CHANGED: { Bundle extras = intent.getExtras(); int simState = extras.getInt(EXTRA_SIM_STATE, SIM_STATE_UNKNOWN); int slotId = extras.getInt(PhoneConstants.PHONE_KEY, INVALID_SIM_SLOT_INDEX); if (simState != SIM_STATE_ABSENT && simState != SIM_STATE_NOT_READY && simState != SIM_STATE_LOADED) return; sendMessage(obtainMessage(ACTION_SIM_STATE_UPDATED, slotId, simState)); break; } } } }; Loading @@ -120,14 +152,18 @@ public class CarrierPrivilegesTracker extends Handler { mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class); mPackageManager = context.getSystemService(PackageManager.class); mUserManager = context.getSystemService(UserManager.class); mTelephonyManager = context.getSystemService(TelephonyManager.class); mPhone = phone; IntentFilter filter = new IntentFilter(); filter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED); filter.addAction(TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED); filter.addAction(TelephonyManager.ACTION_SIM_APPLICATION_STATE_CHANGED); mContext.registerReceiver(mIntentReceiver, filter); mRegistrantList = new RegistrantList(); mCarrierConfigCerts = new ArraySet<>(); mUiccCerts = new ArraySet<>(); mInstalledPackageCerts = new ArrayMap<>(); mPrivilegedUids = new int[0]; } Loading @@ -147,6 +183,10 @@ public class CarrierPrivilegesTracker extends Handler { handleCarrierConfigUpdated(msg.arg1, msg.arg2); break; } case ACTION_SIM_STATE_UPDATED: { handleSimStateChanged(msg.arg1, msg.arg2); break; } default: { Log.e(TAG, "Received unknown msg type: " + msg.what); break; Loading Loading @@ -187,6 +227,27 @@ public class CarrierPrivilegesTracker extends Handler { maybeUpdateCertsAndNotifyRegistrants(mCarrierConfigCerts, updatedCarrierConfigCerts); } private void handleSimStateChanged(int slotId, int simState) { if (slotId != mPhone.getPhoneId()) return; Set<String> updatedUiccCerts = new ArraySet<>(); // Only include the UICC certs if the SIM is fully loaded if (simState == SIM_STATE_LOADED) { TelephonyManager telMan = mTelephonyManager.createForSubscriptionId(mPhone.getSubId()); if (telMan.hasIccCard(mPhone.getPhoneId())) { List<String> uiccCerts = telMan.getCertsFromCarrierPrivilegeAccessRules(); if (uiccCerts != null) { for (String cert : uiccCerts) { updatedUiccCerts.add(cert.toUpperCase()); } } } } maybeUpdateCertsAndNotifyRegistrants(mUiccCerts, updatedUiccCerts); } private void maybeUpdateCertsAndNotifyRegistrants( Set<String> currentCerts, Set<String> updatedCerts) { if (!currentCerts.equals(updatedCerts)) { Loading Loading @@ -232,7 +293,7 @@ public class CarrierPrivilegesTracker extends Handler { private boolean isPackagePrivileged(Set<String> certs) { for (String cert : certs) { if (mCarrierConfigCerts.contains(cert)) { if (mCarrierConfigCerts.contains(cert) || mUiccCerts.contains(cert)) { return true; } } Loading