Loading src/java/com/android/internal/telephony/CarrierPrivilegesTracker.java +19 −31 Original line number Original line Diff line number Diff line Loading @@ -16,11 +16,8 @@ package com.android.internal.telephony; 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.CarrierConfigManager.KEY_CARRIER_CERTIFICATE_STRING_ARRAY; import static android.telephony.SubscriptionManager.INVALID_SIM_SLOT_INDEX; import static android.telephony.SubscriptionManager.INVALID_SIM_SLOT_INDEX; import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID; import static android.telephony.TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS; import static android.telephony.TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS; import static android.telephony.TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS; import static android.telephony.TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS; import static android.telephony.TelephonyManager.CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED; import static android.telephony.TelephonyManager.CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED; Loading Loading @@ -130,6 +127,13 @@ public class CarrierPrivilegesTracker extends Handler { | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS; | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS; /** * All carrier config keys used in this class should list here in alphabetical order. */ private static final String[] CARRIER_CONFIG_KEYS = { KEY_CARRIER_CERTIFICATE_STRING_ARRAY, }; /** /** * Action to register a Registrant with this Tracker. * Action to register a Registrant with this Tracker. * obj: Registrant that will be notified of Carrier Privileged UID changes. * obj: Registrant that will be notified of Carrier Privileged UID changes. Loading @@ -142,13 +146,6 @@ public class CarrierPrivilegesTracker extends Handler { */ */ private static final int ACTION_UNREGISTER_LISTENER = 2; private static final int ACTION_UNREGISTER_LISTENER = 2; /** * Action for tracking when Carrier Configs are updated. * arg1: Subscription Id for the Carrier Configs update being broadcast * arg2: Slot Index for the Carrier Configs update being broadcast */ private static final int ACTION_CARRIER_CONFIG_CERTS_UPDATED = 3; /** /** * Action for tracking when the Phone's SIM state changes. * Action for tracking when the Phone's SIM state changes. * arg1: slotId that this Action applies to * arg1: slotId that this Action applies to Loading Loading @@ -298,19 +295,6 @@ public class CarrierPrivilegesTracker extends Handler { if (action == null) return; if (action == null) return; switch (action) { switch (action) { case CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED: { Bundle extras = intent.getExtras(); int slotIndex = extras.getInt(EXTRA_SLOT_INDEX); int subId = extras.getInt( EXTRA_SUBSCRIPTION_INDEX, INVALID_SUBSCRIPTION_ID); sendMessage( obtainMessage( ACTION_CARRIER_CONFIG_CERTS_UPDATED, subId, slotIndex)); break; } case TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED: // fall through case TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED: // fall through case TelephonyManager.ACTION_SIM_APPLICATION_STATE_CHANGED: { case TelephonyManager.ACTION_SIM_APPLICATION_STATE_CHANGED: { Bundle extras = intent.getExtras(); Bundle extras = intent.getExtras(); Loading Loading @@ -373,13 +357,16 @@ public class CarrierPrivilegesTracker extends Handler { mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE); mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE); mCarrierConfigManager = mCarrierConfigManager = (CarrierConfigManager) mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE); (CarrierConfigManager) mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE); // Callback is executed in handler thread and directly handles carrier config update mCarrierConfigManager.registerCarrierConfigChangeListener(this::post, (slotIndex, subId, carrierId, specificCarrierId) -> handleCarrierConfigUpdated( subId, slotIndex)); mTelephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); mTelephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); mTelephonyRegistryManager = mTelephonyRegistryManager = (TelephonyRegistryManager) (TelephonyRegistryManager) mContext.getSystemService(Context.TELEPHONY_REGISTRY_SERVICE); mContext.getSystemService(Context.TELEPHONY_REGISTRY_SERVICE); IntentFilter certFilter = new IntentFilter(); IntentFilter certFilter = new IntentFilter(); certFilter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED); certFilter.addAction(TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED); certFilter.addAction(TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED); certFilter.addAction(TelephonyManager.ACTION_SIM_APPLICATION_STATE_CHANGED); certFilter.addAction(TelephonyManager.ACTION_SIM_APPLICATION_STATE_CHANGED); mContext.registerReceiver(mIntentReceiver, certFilter); mContext.registerReceiver(mIntentReceiver, certFilter); Loading Loading @@ -409,12 +396,6 @@ public class CarrierPrivilegesTracker extends Handler { handleUnregisterListener((Handler) msg.obj); handleUnregisterListener((Handler) msg.obj); break; break; } } case ACTION_CARRIER_CONFIG_CERTS_UPDATED: { int subId = msg.arg1; int slotIndex = msg.arg2; handleCarrierConfigUpdated(subId, slotIndex); break; } case ACTION_SIM_STATE_UPDATED: { case ACTION_SIM_STATE_UPDATED: { handleSimStateChanged(msg.arg1, msg.arg2); handleSimStateChanged(msg.arg1, msg.arg2); break; break; Loading Loading @@ -491,7 +472,14 @@ public class CarrierPrivilegesTracker extends Handler { @NonNull @NonNull private List<UiccAccessRule> getCarrierConfigRules(int subId) { private List<UiccAccessRule> getCarrierConfigRules(int subId) { PersistableBundle carrierConfigs = mCarrierConfigManager.getConfigForSubId(subId); PersistableBundle carrierConfigs = null; try { carrierConfigs = mCarrierConfigManager.getConfigForSubId(subId, CARRIER_CONFIG_KEYS); } catch (RuntimeException e) { mLocalLog.log("CarrierConfigLoader is not available, try it later."); } // CarrierConfigManager#isConfigForIdentifiedCarrier can handle null or empty bundle if (!mCarrierConfigManager.isConfigForIdentifiedCarrier(carrierConfigs)) { if (!mCarrierConfigManager.isConfigForIdentifiedCarrier(carrierConfigs)) { return Collections.EMPTY_LIST; return Collections.EMPTY_LIST; } } Loading tests/telephonytests/src/com/android/internal/telephony/CarrierPrivilegesTrackerTest.java +22 −19 Original line number Original line Diff line number Diff line Loading @@ -17,8 +17,6 @@ package com.android.internal.telephony; package com.android.internal.telephony; import static android.os.UserHandle.SYSTEM; import static android.os.UserHandle.SYSTEM; 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.CarrierConfigManager.KEY_CARRIER_CERTIFICATE_STRING_ARRAY; import static android.telephony.CarrierConfigManager.KEY_CARRIER_CONFIG_APPLIED_BOOL; import static android.telephony.CarrierConfigManager.KEY_CARRIER_CONFIG_APPLIED_BOOL; import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID; import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID; Loading Loading @@ -76,8 +74,8 @@ import org.junit.Before; import org.junit.Ignore; import org.junit.Ignore; import org.junit.Test; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.InOrder; import org.mockito.InOrder; import org.mockito.Mock; import java.security.MessageDigest; import java.security.MessageDigest; import java.util.ArrayList; import java.util.ArrayList; Loading Loading @@ -129,11 +127,10 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS; | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS; @Mock private Signature mSignature; private PersistableBundle mCarrierConfigs; private PersistableBundle mCarrierConfigs; private CarrierPrivilegesTrackerTestHandler mHandler; private CarrierPrivilegesTrackerTestHandler mHandler; private CarrierPrivilegesTracker mCarrierPrivilegesTracker; private CarrierPrivilegesTracker mCarrierPrivilegesTracker; private CarrierConfigManager.CarrierConfigChangeListener mCarrierConfigChangeListener; @Before @Before public void setUp() throws Exception { public void setUp() throws Exception { Loading Loading @@ -164,7 +161,8 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { private void setupCarrierConfigRules(String... rules) { private void setupCarrierConfigRules(String... rules) { mCarrierConfigs.putStringArray(KEY_CARRIER_CERTIFICATE_STRING_ARRAY, rules); mCarrierConfigs.putStringArray(KEY_CARRIER_CERTIFICATE_STRING_ARRAY, rules); mCarrierConfigs.putBoolean(KEY_CARRIER_CONFIG_APPLIED_BOOL, true); mCarrierConfigs.putBoolean(KEY_CARRIER_CONFIG_APPLIED_BOOL, true); when(mCarrierConfigManager.getConfigForSubId(SUB_ID)).thenReturn(mCarrierConfigs); when(mCarrierConfigManager.getConfigForSubId(eq(SUB_ID), any())) .thenReturn(mCarrierConfigs); } } private static String carrierConfigRuleString(String certificateHash, String... packageNames) { private static String carrierConfigRuleString(String certificateHash, String... packageNames) { Loading Loading @@ -222,8 +220,14 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { * #setupInstalledPackages}. * #setupInstalledPackages}. */ */ private CarrierPrivilegesTracker createCarrierPrivilegesTracker() throws Exception { private CarrierPrivilegesTracker createCarrierPrivilegesTracker() throws Exception { // Capture CarrierConfigChangeListener to emulate the carrier config change notification ArgumentCaptor<CarrierConfigManager.CarrierConfigChangeListener> listenerArgumentCaptor = ArgumentCaptor.forClass(CarrierConfigManager.CarrierConfigChangeListener.class); CarrierPrivilegesTracker cpt = CarrierPrivilegesTracker cpt = new CarrierPrivilegesTracker(mTestableLooper.getLooper(), mPhone, mContext); new CarrierPrivilegesTracker(mTestableLooper.getLooper(), mPhone, mContext); verify(mCarrierConfigManager).registerCarrierConfigChangeListener(any(), listenerArgumentCaptor.capture()); mCarrierConfigChangeListener = listenerArgumentCaptor.getAllValues().get(0); mTestableLooper.processAllMessages(); mTestableLooper.processAllMessages(); cpt.registerCarrierPrivilegesListener(mHandler, REGISTRANT_WHAT, null); cpt.registerCarrierPrivilegesListener(mHandler, REGISTRANT_WHAT, null); Loading Loading @@ -371,7 +375,7 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { verifyCarrierPrivilegesChangedUpdates(List.of()); verifyCarrierPrivilegesChangedUpdates(List.of()); // Clear UIDs // Clear UIDs sendCarrierConfigChangedIntent(INVALID_SUBSCRIPTION_ID, PHONE_ID); sendCarrierConfigChanged(INVALID_SUBSCRIPTION_ID, PHONE_ID); mTestableLooper.processAllMessages(); mTestableLooper.processAllMessages(); verifyCurrentState(Set.of(), new int[0]); verifyCurrentState(Set.of(), new int[0]); Loading @@ -389,7 +393,7 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { setupCarrierConfigRules( setupCarrierConfigRules( carrierConfigRuleString(getHash(CERT_1)), carrierConfigRuleString(getHash(CERT_2))); carrierConfigRuleString(getHash(CERT_1)), carrierConfigRuleString(getHash(CERT_2))); sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID); sendCarrierConfigChanged(SUB_ID, PHONE_ID); mTestableLooper.processAllMessages(); mTestableLooper.processAllMessages(); verifyCurrentState(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS); verifyCurrentState(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS); Loading @@ -403,7 +407,7 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { // Start with privileges. Incorrect phoneId shouldn't affect certs // Start with privileges. Incorrect phoneId shouldn't affect certs setupCarrierPrivilegesTrackerWithCarrierConfigUids(); setupCarrierPrivilegesTrackerWithCarrierConfigUids(); sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID_INCORRECT); sendCarrierConfigChanged(SUB_ID, PHONE_ID_INCORRECT); mTestableLooper.processAllMessages(); mTestableLooper.processAllMessages(); verifyCurrentState(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS); verifyCurrentState(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS); Loading @@ -417,7 +421,7 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { // Start with privileges, verify clearing certs clears UIDs // Start with privileges, verify clearing certs clears UIDs setupCarrierPrivilegesTrackerWithCarrierConfigUids(); setupCarrierPrivilegesTrackerWithCarrierConfigUids(); sendCarrierConfigChangedIntent(INVALID_SUBSCRIPTION_ID, PHONE_ID); sendCarrierConfigChanged(INVALID_SUBSCRIPTION_ID, PHONE_ID); mTestableLooper.processAllMessages(); mTestableLooper.processAllMessages(); verifyCurrentState(Set.of(), new int[0]); verifyCurrentState(Set.of(), new int[0]); Loading @@ -434,9 +438,10 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { setupCarrierPrivilegesTrackerWithCarrierConfigUids(); setupCarrierPrivilegesTrackerWithCarrierConfigUids(); mCarrierConfigs.putBoolean(KEY_CARRIER_CONFIG_APPLIED_BOOL, false); mCarrierConfigs.putBoolean(KEY_CARRIER_CONFIG_APPLIED_BOOL, false); when(mCarrierConfigManager.getConfigForSubId(SUB_ID)).thenReturn(mCarrierConfigs); when(mCarrierConfigManager.getConfigForSubId(eq(SUB_ID), any())) .thenReturn(mCarrierConfigs); sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID); sendCarrierConfigChanged(SUB_ID, PHONE_ID); mTestableLooper.processAllMessages(); mTestableLooper.processAllMessages(); verifyCurrentState(Set.of(), new int[0]); verifyCurrentState(Set.of(), new int[0]); Loading @@ -456,7 +461,7 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { carrierConfigRuleString(getHash(CERT_1), PACKAGE_1), carrierConfigRuleString(getHash(CERT_1), PACKAGE_1), carrierConfigRuleString(getHash(CERT_2), PACKAGE_1)); carrierConfigRuleString(getHash(CERT_2), PACKAGE_1)); sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID); sendCarrierConfigChanged(SUB_ID, PHONE_ID); mTestableLooper.processAllMessages(); mTestableLooper.processAllMessages(); verifyCurrentState(Set.of(PACKAGE_1), new int[] {UID_1}); verifyCurrentState(Set.of(PACKAGE_1), new int[] {UID_1}); Loading @@ -469,7 +474,7 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { carrierConfigRuleString(getHash(CERT_1), PACKAGE_1), carrierConfigRuleString(getHash(CERT_1), PACKAGE_1), carrierConfigRuleString(getHash(CERT_2), PACKAGE_1, PACKAGE_2)); carrierConfigRuleString(getHash(CERT_2), PACKAGE_1, PACKAGE_2)); sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID); sendCarrierConfigChanged(SUB_ID, PHONE_ID); mTestableLooper.processAllMessages(); mTestableLooper.processAllMessages(); verifyCurrentState(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS); verifyCurrentState(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS); Loading Loading @@ -1137,11 +1142,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { verify(mPackageManager).queryIntentServices(any(), anyInt()); verify(mPackageManager).queryIntentServices(any(), anyInt()); } } private void sendCarrierConfigChangedIntent(int subId, int phoneId) { private void sendCarrierConfigChanged(int subId, int phoneId) { mContext.sendBroadcast( mCarrierConfigChangeListener.onCarrierConfigChanged(phoneId, subId, new Intent(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED) TelephonyManager.UNKNOWN_CARRIER_ID, TelephonyManager.UNKNOWN_CARRIER_ID); .putExtra(EXTRA_SUBSCRIPTION_INDEX, subId) .putExtra(EXTRA_SLOT_INDEX, phoneId)); } } private void sendSimCardStateChangedIntent(int phoneId, int simState) { private void sendSimCardStateChangedIntent(int phoneId, int simState) { Loading Loading
src/java/com/android/internal/telephony/CarrierPrivilegesTracker.java +19 −31 Original line number Original line Diff line number Diff line Loading @@ -16,11 +16,8 @@ package com.android.internal.telephony; 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.CarrierConfigManager.KEY_CARRIER_CERTIFICATE_STRING_ARRAY; import static android.telephony.SubscriptionManager.INVALID_SIM_SLOT_INDEX; import static android.telephony.SubscriptionManager.INVALID_SIM_SLOT_INDEX; import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID; import static android.telephony.TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS; import static android.telephony.TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS; import static android.telephony.TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS; import static android.telephony.TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS; import static android.telephony.TelephonyManager.CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED; import static android.telephony.TelephonyManager.CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED; Loading Loading @@ -130,6 +127,13 @@ public class CarrierPrivilegesTracker extends Handler { | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS; | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS; /** * All carrier config keys used in this class should list here in alphabetical order. */ private static final String[] CARRIER_CONFIG_KEYS = { KEY_CARRIER_CERTIFICATE_STRING_ARRAY, }; /** /** * Action to register a Registrant with this Tracker. * Action to register a Registrant with this Tracker. * obj: Registrant that will be notified of Carrier Privileged UID changes. * obj: Registrant that will be notified of Carrier Privileged UID changes. Loading @@ -142,13 +146,6 @@ public class CarrierPrivilegesTracker extends Handler { */ */ private static final int ACTION_UNREGISTER_LISTENER = 2; private static final int ACTION_UNREGISTER_LISTENER = 2; /** * Action for tracking when Carrier Configs are updated. * arg1: Subscription Id for the Carrier Configs update being broadcast * arg2: Slot Index for the Carrier Configs update being broadcast */ private static final int ACTION_CARRIER_CONFIG_CERTS_UPDATED = 3; /** /** * Action for tracking when the Phone's SIM state changes. * Action for tracking when the Phone's SIM state changes. * arg1: slotId that this Action applies to * arg1: slotId that this Action applies to Loading Loading @@ -298,19 +295,6 @@ public class CarrierPrivilegesTracker extends Handler { if (action == null) return; if (action == null) return; switch (action) { switch (action) { case CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED: { Bundle extras = intent.getExtras(); int slotIndex = extras.getInt(EXTRA_SLOT_INDEX); int subId = extras.getInt( EXTRA_SUBSCRIPTION_INDEX, INVALID_SUBSCRIPTION_ID); sendMessage( obtainMessage( ACTION_CARRIER_CONFIG_CERTS_UPDATED, subId, slotIndex)); break; } case TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED: // fall through case TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED: // fall through case TelephonyManager.ACTION_SIM_APPLICATION_STATE_CHANGED: { case TelephonyManager.ACTION_SIM_APPLICATION_STATE_CHANGED: { Bundle extras = intent.getExtras(); Bundle extras = intent.getExtras(); Loading Loading @@ -373,13 +357,16 @@ public class CarrierPrivilegesTracker extends Handler { mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE); mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE); mCarrierConfigManager = mCarrierConfigManager = (CarrierConfigManager) mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE); (CarrierConfigManager) mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE); // Callback is executed in handler thread and directly handles carrier config update mCarrierConfigManager.registerCarrierConfigChangeListener(this::post, (slotIndex, subId, carrierId, specificCarrierId) -> handleCarrierConfigUpdated( subId, slotIndex)); mTelephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); mTelephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); mTelephonyRegistryManager = mTelephonyRegistryManager = (TelephonyRegistryManager) (TelephonyRegistryManager) mContext.getSystemService(Context.TELEPHONY_REGISTRY_SERVICE); mContext.getSystemService(Context.TELEPHONY_REGISTRY_SERVICE); IntentFilter certFilter = new IntentFilter(); IntentFilter certFilter = new IntentFilter(); certFilter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED); certFilter.addAction(TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED); certFilter.addAction(TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED); certFilter.addAction(TelephonyManager.ACTION_SIM_APPLICATION_STATE_CHANGED); certFilter.addAction(TelephonyManager.ACTION_SIM_APPLICATION_STATE_CHANGED); mContext.registerReceiver(mIntentReceiver, certFilter); mContext.registerReceiver(mIntentReceiver, certFilter); Loading Loading @@ -409,12 +396,6 @@ public class CarrierPrivilegesTracker extends Handler { handleUnregisterListener((Handler) msg.obj); handleUnregisterListener((Handler) msg.obj); break; break; } } case ACTION_CARRIER_CONFIG_CERTS_UPDATED: { int subId = msg.arg1; int slotIndex = msg.arg2; handleCarrierConfigUpdated(subId, slotIndex); break; } case ACTION_SIM_STATE_UPDATED: { case ACTION_SIM_STATE_UPDATED: { handleSimStateChanged(msg.arg1, msg.arg2); handleSimStateChanged(msg.arg1, msg.arg2); break; break; Loading Loading @@ -491,7 +472,14 @@ public class CarrierPrivilegesTracker extends Handler { @NonNull @NonNull private List<UiccAccessRule> getCarrierConfigRules(int subId) { private List<UiccAccessRule> getCarrierConfigRules(int subId) { PersistableBundle carrierConfigs = mCarrierConfigManager.getConfigForSubId(subId); PersistableBundle carrierConfigs = null; try { carrierConfigs = mCarrierConfigManager.getConfigForSubId(subId, CARRIER_CONFIG_KEYS); } catch (RuntimeException e) { mLocalLog.log("CarrierConfigLoader is not available, try it later."); } // CarrierConfigManager#isConfigForIdentifiedCarrier can handle null or empty bundle if (!mCarrierConfigManager.isConfigForIdentifiedCarrier(carrierConfigs)) { if (!mCarrierConfigManager.isConfigForIdentifiedCarrier(carrierConfigs)) { return Collections.EMPTY_LIST; return Collections.EMPTY_LIST; } } Loading
tests/telephonytests/src/com/android/internal/telephony/CarrierPrivilegesTrackerTest.java +22 −19 Original line number Original line Diff line number Diff line Loading @@ -17,8 +17,6 @@ package com.android.internal.telephony; package com.android.internal.telephony; import static android.os.UserHandle.SYSTEM; import static android.os.UserHandle.SYSTEM; 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.CarrierConfigManager.KEY_CARRIER_CERTIFICATE_STRING_ARRAY; import static android.telephony.CarrierConfigManager.KEY_CARRIER_CONFIG_APPLIED_BOOL; import static android.telephony.CarrierConfigManager.KEY_CARRIER_CONFIG_APPLIED_BOOL; import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID; import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID; Loading Loading @@ -76,8 +74,8 @@ import org.junit.Before; import org.junit.Ignore; import org.junit.Ignore; import org.junit.Test; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.InOrder; import org.mockito.InOrder; import org.mockito.Mock; import java.security.MessageDigest; import java.security.MessageDigest; import java.util.ArrayList; import java.util.ArrayList; Loading Loading @@ -129,11 +127,10 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS; | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS; @Mock private Signature mSignature; private PersistableBundle mCarrierConfigs; private PersistableBundle mCarrierConfigs; private CarrierPrivilegesTrackerTestHandler mHandler; private CarrierPrivilegesTrackerTestHandler mHandler; private CarrierPrivilegesTracker mCarrierPrivilegesTracker; private CarrierPrivilegesTracker mCarrierPrivilegesTracker; private CarrierConfigManager.CarrierConfigChangeListener mCarrierConfigChangeListener; @Before @Before public void setUp() throws Exception { public void setUp() throws Exception { Loading Loading @@ -164,7 +161,8 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { private void setupCarrierConfigRules(String... rules) { private void setupCarrierConfigRules(String... rules) { mCarrierConfigs.putStringArray(KEY_CARRIER_CERTIFICATE_STRING_ARRAY, rules); mCarrierConfigs.putStringArray(KEY_CARRIER_CERTIFICATE_STRING_ARRAY, rules); mCarrierConfigs.putBoolean(KEY_CARRIER_CONFIG_APPLIED_BOOL, true); mCarrierConfigs.putBoolean(KEY_CARRIER_CONFIG_APPLIED_BOOL, true); when(mCarrierConfigManager.getConfigForSubId(SUB_ID)).thenReturn(mCarrierConfigs); when(mCarrierConfigManager.getConfigForSubId(eq(SUB_ID), any())) .thenReturn(mCarrierConfigs); } } private static String carrierConfigRuleString(String certificateHash, String... packageNames) { private static String carrierConfigRuleString(String certificateHash, String... packageNames) { Loading Loading @@ -222,8 +220,14 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { * #setupInstalledPackages}. * #setupInstalledPackages}. */ */ private CarrierPrivilegesTracker createCarrierPrivilegesTracker() throws Exception { private CarrierPrivilegesTracker createCarrierPrivilegesTracker() throws Exception { // Capture CarrierConfigChangeListener to emulate the carrier config change notification ArgumentCaptor<CarrierConfigManager.CarrierConfigChangeListener> listenerArgumentCaptor = ArgumentCaptor.forClass(CarrierConfigManager.CarrierConfigChangeListener.class); CarrierPrivilegesTracker cpt = CarrierPrivilegesTracker cpt = new CarrierPrivilegesTracker(mTestableLooper.getLooper(), mPhone, mContext); new CarrierPrivilegesTracker(mTestableLooper.getLooper(), mPhone, mContext); verify(mCarrierConfigManager).registerCarrierConfigChangeListener(any(), listenerArgumentCaptor.capture()); mCarrierConfigChangeListener = listenerArgumentCaptor.getAllValues().get(0); mTestableLooper.processAllMessages(); mTestableLooper.processAllMessages(); cpt.registerCarrierPrivilegesListener(mHandler, REGISTRANT_WHAT, null); cpt.registerCarrierPrivilegesListener(mHandler, REGISTRANT_WHAT, null); Loading Loading @@ -371,7 +375,7 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { verifyCarrierPrivilegesChangedUpdates(List.of()); verifyCarrierPrivilegesChangedUpdates(List.of()); // Clear UIDs // Clear UIDs sendCarrierConfigChangedIntent(INVALID_SUBSCRIPTION_ID, PHONE_ID); sendCarrierConfigChanged(INVALID_SUBSCRIPTION_ID, PHONE_ID); mTestableLooper.processAllMessages(); mTestableLooper.processAllMessages(); verifyCurrentState(Set.of(), new int[0]); verifyCurrentState(Set.of(), new int[0]); Loading @@ -389,7 +393,7 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { setupCarrierConfigRules( setupCarrierConfigRules( carrierConfigRuleString(getHash(CERT_1)), carrierConfigRuleString(getHash(CERT_2))); carrierConfigRuleString(getHash(CERT_1)), carrierConfigRuleString(getHash(CERT_2))); sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID); sendCarrierConfigChanged(SUB_ID, PHONE_ID); mTestableLooper.processAllMessages(); mTestableLooper.processAllMessages(); verifyCurrentState(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS); verifyCurrentState(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS); Loading @@ -403,7 +407,7 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { // Start with privileges. Incorrect phoneId shouldn't affect certs // Start with privileges. Incorrect phoneId shouldn't affect certs setupCarrierPrivilegesTrackerWithCarrierConfigUids(); setupCarrierPrivilegesTrackerWithCarrierConfigUids(); sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID_INCORRECT); sendCarrierConfigChanged(SUB_ID, PHONE_ID_INCORRECT); mTestableLooper.processAllMessages(); mTestableLooper.processAllMessages(); verifyCurrentState(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS); verifyCurrentState(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS); Loading @@ -417,7 +421,7 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { // Start with privileges, verify clearing certs clears UIDs // Start with privileges, verify clearing certs clears UIDs setupCarrierPrivilegesTrackerWithCarrierConfigUids(); setupCarrierPrivilegesTrackerWithCarrierConfigUids(); sendCarrierConfigChangedIntent(INVALID_SUBSCRIPTION_ID, PHONE_ID); sendCarrierConfigChanged(INVALID_SUBSCRIPTION_ID, PHONE_ID); mTestableLooper.processAllMessages(); mTestableLooper.processAllMessages(); verifyCurrentState(Set.of(), new int[0]); verifyCurrentState(Set.of(), new int[0]); Loading @@ -434,9 +438,10 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { setupCarrierPrivilegesTrackerWithCarrierConfigUids(); setupCarrierPrivilegesTrackerWithCarrierConfigUids(); mCarrierConfigs.putBoolean(KEY_CARRIER_CONFIG_APPLIED_BOOL, false); mCarrierConfigs.putBoolean(KEY_CARRIER_CONFIG_APPLIED_BOOL, false); when(mCarrierConfigManager.getConfigForSubId(SUB_ID)).thenReturn(mCarrierConfigs); when(mCarrierConfigManager.getConfigForSubId(eq(SUB_ID), any())) .thenReturn(mCarrierConfigs); sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID); sendCarrierConfigChanged(SUB_ID, PHONE_ID); mTestableLooper.processAllMessages(); mTestableLooper.processAllMessages(); verifyCurrentState(Set.of(), new int[0]); verifyCurrentState(Set.of(), new int[0]); Loading @@ -456,7 +461,7 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { carrierConfigRuleString(getHash(CERT_1), PACKAGE_1), carrierConfigRuleString(getHash(CERT_1), PACKAGE_1), carrierConfigRuleString(getHash(CERT_2), PACKAGE_1)); carrierConfigRuleString(getHash(CERT_2), PACKAGE_1)); sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID); sendCarrierConfigChanged(SUB_ID, PHONE_ID); mTestableLooper.processAllMessages(); mTestableLooper.processAllMessages(); verifyCurrentState(Set.of(PACKAGE_1), new int[] {UID_1}); verifyCurrentState(Set.of(PACKAGE_1), new int[] {UID_1}); Loading @@ -469,7 +474,7 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { carrierConfigRuleString(getHash(CERT_1), PACKAGE_1), carrierConfigRuleString(getHash(CERT_1), PACKAGE_1), carrierConfigRuleString(getHash(CERT_2), PACKAGE_1, PACKAGE_2)); carrierConfigRuleString(getHash(CERT_2), PACKAGE_1, PACKAGE_2)); sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID); sendCarrierConfigChanged(SUB_ID, PHONE_ID); mTestableLooper.processAllMessages(); mTestableLooper.processAllMessages(); verifyCurrentState(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS); verifyCurrentState(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS); Loading Loading @@ -1137,11 +1142,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { verify(mPackageManager).queryIntentServices(any(), anyInt()); verify(mPackageManager).queryIntentServices(any(), anyInt()); } } private void sendCarrierConfigChangedIntent(int subId, int phoneId) { private void sendCarrierConfigChanged(int subId, int phoneId) { mContext.sendBroadcast( mCarrierConfigChangeListener.onCarrierConfigChanged(phoneId, subId, new Intent(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED) TelephonyManager.UNKNOWN_CARRIER_ID, TelephonyManager.UNKNOWN_CARRIER_ID); .putExtra(EXTRA_SUBSCRIPTION_INDEX, subId) .putExtra(EXTRA_SLOT_INDEX, phoneId)); } } private void sendSimCardStateChangedIntent(int phoneId, int simState) { private void sendSimCardStateChangedIntent(int phoneId, int simState) { Loading