Loading src/java/com/android/internal/telephony/CarrierPrivilegesTracker.java +24 −4 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ import android.os.UserManager; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.TelephonyRegistryManager; import android.telephony.UiccAccessRule; import android.text.TextUtils; import android.util.ArrayMap; Loading Loading @@ -135,10 +136,11 @@ public class CarrierPrivilegesTracker extends Handler { private final Context mContext; private final Phone mPhone; private final CarrierConfigManager mCarrierConfigManager; private final PackageManager mPackageManager; private final UserManager mUserManager; private final CarrierConfigManager mCarrierConfigManager; private final TelephonyManager mTelephonyManager; private final TelephonyRegistryManager mTelephonyRegistryManager; private final LocalLog mLocalLog = new LocalLog(64); private final RegistrantList mRegistrantList = new RegistrantList(); Loading Loading @@ -262,12 +264,15 @@ public class CarrierPrivilegesTracker extends Handler { @NonNull Looper looper, @NonNull Phone phone, @NonNull Context context) { super(looper); mContext = context; mCarrierConfigManager = (CarrierConfigManager) mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE); mPhone = phone; mPackageManager = mContext.getPackageManager(); mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE); mCarrierConfigManager = (CarrierConfigManager) mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE); mTelephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); mPhone = phone; mTelephonyRegistryManager = (TelephonyRegistryManager) mContext.getSystemService(Context.TELEPHONY_REGISTRY_SERVICE); IntentFilter certFilter = new IntentFilter(); certFilter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED); Loading Loading @@ -546,6 +551,12 @@ public class CarrierPrivilegesTracker extends Handler { mRegistrantList.notifyResult( Arrays.copyOf( mPrivilegedPackageInfo.mUids, mPrivilegedPackageInfo.mUids.length)); mTelephonyRegistryManager.notifyCarrierPrivilegesChanged( mPhone.getPhoneId(), Collections.unmodifiableList( new ArrayList<>(mPrivilegedPackageInfo.mPackageNames)), Arrays.copyOf( mPrivilegedPackageInfo.mUids, mPrivilegedPackageInfo.mUids.length)); } finally { mPrivilegedPackageInfoLock.readLock().unlock(); } Loading Loading @@ -640,14 +651,23 @@ public class CarrierPrivilegesTracker extends Handler { * * <p>After being registered, the Registrant will be notified with the current Carrier * Privileged UIDs for this Phone. * * @deprecated Use {@link TelephonyManager#addCarrierPrivilegesListener} instead, which also * provides package names * <p>TODO(b/211658797) migrate callers, then delete all Registrant logic from CPT */ @Deprecated public void registerCarrierPrivilegesListener(Handler h, int what, Object obj) { sendMessage(obtainMessage(ACTION_REGISTER_LISTENER, new Registrant(h, what, obj))); } /** * Unregisters the given listener with this tracker. * * @deprecated Use {@link TelephonyManager#removeCarrierPrivilegesListener} instead * <p>TODO(b/211658797) migrate callers, then delete all Registrant logic from CPT */ @Deprecated public void unregisterCarrierPrivilegesListener(Handler handler) { sendMessage(obtainMessage(ACTION_UNREGISTER_LISTENER, handler)); } Loading tests/telephonytests/src/com/android/internal/telephony/CarrierPrivilegesTrackerTest.java +114 −34 Original line number Diff line number Diff line Loading @@ -30,7 +30,14 @@ import static android.telephony.TelephonyManager.SIM_STATE_NOT_READY; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.argThat; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.annotation.Nullable; Loading @@ -50,6 +57,7 @@ import android.telephony.UiccAccessRule; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.util.ArraySet; import android.util.Pair; import com.android.internal.telephony.uicc.IccUtils; Loading @@ -57,6 +65,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InOrder; import org.mockito.Mock; import java.security.MessageDigest; Loading @@ -81,6 +90,7 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { private static final String PACKAGE_1 = "android.test.package1"; private static final String PACKAGE_2 = "android.test.package2"; private static final Set<String> PRIVILEGED_PACKAGES = Set.of(PACKAGE_1, PACKAGE_2); private static final String CERT_1 = "11223344"; private static final String CERT_2 = "AABBCCDD"; Loading Loading @@ -238,13 +248,33 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { } } private void verifyPrivilegedUids(@Nullable int[] expectedUids, int expectedUidUpdates) { private void verifyRegistrantUpdates(@Nullable int[] expectedUids, int expectedUidUpdates) { assertArrayEquals(expectedUids, mHandler.privilegedUids); assertEquals(expectedUidUpdates, mHandler.numUidUpdates); } private void verifyRegisterListener(int[] expectedUids, int expectedUidUpdates) throws Exception { private void verifyCarrierPrivilegesChangedUpdates( List<Pair<Set<String>, int[]>> expectedUpdates) { if (expectedUpdates.isEmpty()) { verify(mTelephonyRegistryManager, never()) .notifyCarrierPrivilegesChanged(anyInt(), any(), any()); } else { InOrder inOrder = inOrder(mTelephonyRegistryManager); for (Pair<Set<String>, int[]> expectedUpdate : expectedUpdates) { // By looking at TelephonyRegistryManager, we can see the full flow as it evolves. inOrder.verify(mTelephonyRegistryManager) .notifyCarrierPrivilegesChanged( eq(PHONE_ID), // Callback gets a list, but we don't care about order so use Set argThat(list -> Set.copyOf(list).equals(expectedUpdate.first)), eq(expectedUpdate.second)); } } } @Test public void testRegisterListener() throws Exception { mCarrierPrivilegesTracker = createCarrierPrivilegesTracker(); // mHandler registered in createCarrierPrivilegesTracker(), so reset it mHandler = new CarrierPrivilegesTrackerTestHandler(); Loading @@ -252,34 +282,40 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { mHandler, REGISTRANT_WHAT, null); mTestableLooper.processAllMessages(); verifyPrivilegedUids(expectedUids, expectedUidUpdates); } @Test public void testRegisterListener() throws Exception { mCarrierPrivilegesTracker = createCarrierPrivilegesTracker(); verifyRegisterListener(new int[0] /* expectedUids */, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(new int[0] /* expectedUids */, 1 /* expectedUidUpdates */); // No updates triggered, so TelephonyRegistry doesn't get any updates. verifyCarrierPrivilegesChangedUpdates(List.of()); } @Test public void testUnregisterListener() throws Exception { // Start with privileges. Verify no updates received after clearing UIDs. setupCarrierPrivilegesTrackerWithCarrierConfigUids(); // mHandler registered in createCarrierPrivilegesTracker(), so reset it mHandler = new CarrierPrivilegesTrackerTestHandler(); mCarrierPrivilegesTracker.registerCarrierPrivilegesListener( mHandler, REGISTRANT_WHAT, null); mTestableLooper.processAllMessages(); verifyRegisterListener(PRIVILEGED_UIDS, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(PRIVILEGED_UIDS /* expectedUids */, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS))); mHandler.reset(); reset(mTelephonyRegistryManager); mCarrierPrivilegesTracker.unregisterCarrierPrivilegesListener(mHandler); mTestableLooper.processAllMessages(); verifyPrivilegedUids(null /* expectedUids */, 0 /* expectedUidUpdates */); verifyRegistrantUpdates(null /* expectedUids */, 0 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates(List.of()); // Clear UIDs sendCarrierConfigChangedIntent(INVALID_SUBSCRIPTION_ID, PHONE_ID); mTestableLooper.processAllMessages(); verifyPrivilegedUids(null /* expectedUids */, 0 /* expectedUidUpdates */); verifyRegistrantUpdates(null /* expectedUids */, 0 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates(List.of(new Pair<>(Set.of(), new int[0]))); } @Test Loading @@ -295,7 +331,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID); mTestableLooper.processAllMessages(); verifyPrivilegedUids(PRIVILEGED_UIDS, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(PRIVILEGED_UIDS, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS))); } @Test Loading @@ -306,7 +344,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID_INCORRECT); mTestableLooper.processAllMessages(); verifyPrivilegedUids(null /* expectedUids */, 0 /* expectedUidUpdates */); verifyRegistrantUpdates(null /* expectedUids */, 0 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS))); } @Test Loading @@ -317,7 +357,11 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendCarrierConfigChangedIntent(INVALID_SUBSCRIPTION_ID, PHONE_ID); mTestableLooper.processAllMessages(); verifyPrivilegedUids(new int[0] /* expectedUids */, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(new int[0] /* expectedUids */, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of( new Pair<>(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS), new Pair<>(Set.of(), new int[0]))); } @Test Loading @@ -331,7 +375,8 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID); mTestableLooper.processAllMessages(); verifyPrivilegedUids(new int[0] /* expectedUids */, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(new int[0] /* expectedUids */, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates(List.of(new Pair<>(Set.of(), new int[0]))); } @Test Loading @@ -349,7 +394,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID); mTestableLooper.processAllMessages(); verifyPrivilegedUids(new int[] {UID_1} /* expectedUids */, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(new int[] {UID_1}, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(Set.of(PACKAGE_1), new int[] {UID_1}))); // Give package 2 privileges again. setupCarrierConfigRules( Loading @@ -359,7 +406,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID); mTestableLooper.processAllMessages(); verifyPrivilegedUids(PRIVILEGED_UIDS /* expectedUids */, 2 /* expectedUidUpdates */); verifyRegistrantUpdates(PRIVILEGED_UIDS, 2 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS))); } @Test Loading @@ -375,7 +424,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendSimCardStateChangedIntent(PHONE_ID, SIM_STATE_LOADED); mTestableLooper.processAllMessages(); verifyPrivilegedUids(PRIVILEGED_UIDS, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(PRIVILEGED_UIDS, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS))); } @Test Loading @@ -391,7 +442,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendSimApplicationStateChangedIntent(PHONE_ID, SIM_STATE_LOADED); mTestableLooper.processAllMessages(); verifyPrivilegedUids(PRIVILEGED_UIDS, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(PRIVILEGED_UIDS, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS))); } @Test Loading @@ -404,7 +457,11 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendSimCardStateChangedIntent(PHONE_ID, SIM_STATE_LOADED); mTestableLooper.processAllMessages(); verifyPrivilegedUids(new int[0] /* expectedUids */, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(new int[0], 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of( new Pair<>(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS), new Pair<>(Set.of(), new int[0]))); } @Test Loading @@ -417,7 +474,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendSimCardStateChangedIntent(PHONE_ID_INCORRECT, SIM_STATE_LOADED); mTestableLooper.processAllMessages(); verifyPrivilegedUids(null /* expectedUids */, 0 /* expectedUidUpdates */); verifyRegistrantUpdates(null /* expectedUids */, 0 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS))); } @Test Loading @@ -428,7 +487,11 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendSimCardStateChangedIntent(PHONE_ID, SIM_STATE_NOT_READY); mTestableLooper.processAllMessages(); verifyPrivilegedUids(new int[0] /* expectedUids */, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(new int[0], 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of( new Pair<>(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS), new Pair<>(Set.of(), new int[0]))); } @Test Loading @@ -446,7 +509,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendSimCardStateChangedIntent(PHONE_ID, SIM_STATE_LOADED); mTestableLooper.processAllMessages(); verifyPrivilegedUids(new int[] {UID_1} /* expectedUids */, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(new int[] {UID_1}, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(Set.of(PACKAGE_1), new int[] {UID_1}))); // Give package 2 privileges again. setupSimLoadedRules( Loading @@ -457,7 +522,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendSimCardStateChangedIntent(PHONE_ID, SIM_STATE_LOADED); mTestableLooper.processAllMessages(); verifyPrivilegedUids(PRIVILEGED_UIDS /* expectedUids */, 2 /* expectedUidUpdates */); verifyRegistrantUpdates(PRIVILEGED_UIDS, 2 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS))); } @Test Loading @@ -471,7 +538,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendPackageChangedIntent(Intent.ACTION_PACKAGE_ADDED, PACKAGE_1); mTestableLooper.processAllMessages(); verifyPrivilegedUids(new int[] {UID_1}, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(new int[] {UID_1}, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(Set.of(PACKAGE_1), new int[] {UID_1}))); } @Test Loading @@ -488,7 +557,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendPackageChangedIntent(Intent.ACTION_PACKAGE_ADDED, PACKAGE_1); mTestableLooper.processAllMessages(); verifyPrivilegedUids(PRIVILEGED_UIDS, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(PRIVILEGED_UIDS, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(Set.of(PACKAGE_1), PRIVILEGED_UIDS))); } @Test Loading @@ -506,7 +577,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendPackageChangedIntent(Intent.ACTION_PACKAGE_REPLACED, PACKAGE_1); mTestableLooper.processAllMessages(); verifyPrivilegedUids(PRIVILEGED_UIDS, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(PRIVILEGED_UIDS, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(Set.of(PACKAGE_1), PRIVILEGED_UIDS))); } @Test Loading @@ -528,7 +601,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendPackageChangedIntent(Intent.ACTION_PACKAGE_ADDED, PACKAGE_1); mTestableLooper.processAllMessages(); verifyPrivilegedUids(new int[] {UID_2} /* expectedUids */, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(new int[] {UID_2}, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(Set.of(PACKAGE_2), new int[] {UID_2}))); } @Test Loading @@ -549,7 +624,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendPackageChangedIntent(Intent.ACTION_PACKAGE_ADDED, PACKAGE_1); mTestableLooper.processAllMessages(); verifyPrivilegedUids(new int[] {UID_2} /* expectedUids */, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(new int[] {UID_2}, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(Set.of(PACKAGE_2), new int[] {UID_2}))); } @Test Loading @@ -565,7 +642,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendPackageChangedIntent(Intent.ACTION_PACKAGE_REMOVED, PACKAGE_1); mTestableLooper.processAllMessages(); verifyPrivilegedUids(new int[] {UID_2} /* expectedUids */, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(new int[] {UID_2}, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(Set.of(PACKAGE_2), new int[] {UID_2}))); } @Test Loading @@ -577,7 +656,8 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendPackageChangedIntent(Intent.ACTION_PACKAGE_REMOVED, PACKAGE_1); mTestableLooper.processAllMessages(); verifyPrivilegedUids(null /* expectedUids */, 0 /* expectedUidUpdates */); verifyRegistrantUpdates(null /* expectedUidUpdates */, 0 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates(List.of()); } private void sendCarrierConfigChangedIntent(int subId, int phoneId) { Loading Loading
src/java/com/android/internal/telephony/CarrierPrivilegesTracker.java +24 −4 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ import android.os.UserManager; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.TelephonyRegistryManager; import android.telephony.UiccAccessRule; import android.text.TextUtils; import android.util.ArrayMap; Loading Loading @@ -135,10 +136,11 @@ public class CarrierPrivilegesTracker extends Handler { private final Context mContext; private final Phone mPhone; private final CarrierConfigManager mCarrierConfigManager; private final PackageManager mPackageManager; private final UserManager mUserManager; private final CarrierConfigManager mCarrierConfigManager; private final TelephonyManager mTelephonyManager; private final TelephonyRegistryManager mTelephonyRegistryManager; private final LocalLog mLocalLog = new LocalLog(64); private final RegistrantList mRegistrantList = new RegistrantList(); Loading Loading @@ -262,12 +264,15 @@ public class CarrierPrivilegesTracker extends Handler { @NonNull Looper looper, @NonNull Phone phone, @NonNull Context context) { super(looper); mContext = context; mCarrierConfigManager = (CarrierConfigManager) mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE); mPhone = phone; mPackageManager = mContext.getPackageManager(); mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE); mCarrierConfigManager = (CarrierConfigManager) mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE); mTelephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); mPhone = phone; mTelephonyRegistryManager = (TelephonyRegistryManager) mContext.getSystemService(Context.TELEPHONY_REGISTRY_SERVICE); IntentFilter certFilter = new IntentFilter(); certFilter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED); Loading Loading @@ -546,6 +551,12 @@ public class CarrierPrivilegesTracker extends Handler { mRegistrantList.notifyResult( Arrays.copyOf( mPrivilegedPackageInfo.mUids, mPrivilegedPackageInfo.mUids.length)); mTelephonyRegistryManager.notifyCarrierPrivilegesChanged( mPhone.getPhoneId(), Collections.unmodifiableList( new ArrayList<>(mPrivilegedPackageInfo.mPackageNames)), Arrays.copyOf( mPrivilegedPackageInfo.mUids, mPrivilegedPackageInfo.mUids.length)); } finally { mPrivilegedPackageInfoLock.readLock().unlock(); } Loading Loading @@ -640,14 +651,23 @@ public class CarrierPrivilegesTracker extends Handler { * * <p>After being registered, the Registrant will be notified with the current Carrier * Privileged UIDs for this Phone. * * @deprecated Use {@link TelephonyManager#addCarrierPrivilegesListener} instead, which also * provides package names * <p>TODO(b/211658797) migrate callers, then delete all Registrant logic from CPT */ @Deprecated public void registerCarrierPrivilegesListener(Handler h, int what, Object obj) { sendMessage(obtainMessage(ACTION_REGISTER_LISTENER, new Registrant(h, what, obj))); } /** * Unregisters the given listener with this tracker. * * @deprecated Use {@link TelephonyManager#removeCarrierPrivilegesListener} instead * <p>TODO(b/211658797) migrate callers, then delete all Registrant logic from CPT */ @Deprecated public void unregisterCarrierPrivilegesListener(Handler handler) { sendMessage(obtainMessage(ACTION_UNREGISTER_LISTENER, handler)); } Loading
tests/telephonytests/src/com/android/internal/telephony/CarrierPrivilegesTrackerTest.java +114 −34 Original line number Diff line number Diff line Loading @@ -30,7 +30,14 @@ import static android.telephony.TelephonyManager.SIM_STATE_NOT_READY; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.argThat; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.annotation.Nullable; Loading @@ -50,6 +57,7 @@ import android.telephony.UiccAccessRule; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.util.ArraySet; import android.util.Pair; import com.android.internal.telephony.uicc.IccUtils; Loading @@ -57,6 +65,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InOrder; import org.mockito.Mock; import java.security.MessageDigest; Loading @@ -81,6 +90,7 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { private static final String PACKAGE_1 = "android.test.package1"; private static final String PACKAGE_2 = "android.test.package2"; private static final Set<String> PRIVILEGED_PACKAGES = Set.of(PACKAGE_1, PACKAGE_2); private static final String CERT_1 = "11223344"; private static final String CERT_2 = "AABBCCDD"; Loading Loading @@ -238,13 +248,33 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { } } private void verifyPrivilegedUids(@Nullable int[] expectedUids, int expectedUidUpdates) { private void verifyRegistrantUpdates(@Nullable int[] expectedUids, int expectedUidUpdates) { assertArrayEquals(expectedUids, mHandler.privilegedUids); assertEquals(expectedUidUpdates, mHandler.numUidUpdates); } private void verifyRegisterListener(int[] expectedUids, int expectedUidUpdates) throws Exception { private void verifyCarrierPrivilegesChangedUpdates( List<Pair<Set<String>, int[]>> expectedUpdates) { if (expectedUpdates.isEmpty()) { verify(mTelephonyRegistryManager, never()) .notifyCarrierPrivilegesChanged(anyInt(), any(), any()); } else { InOrder inOrder = inOrder(mTelephonyRegistryManager); for (Pair<Set<String>, int[]> expectedUpdate : expectedUpdates) { // By looking at TelephonyRegistryManager, we can see the full flow as it evolves. inOrder.verify(mTelephonyRegistryManager) .notifyCarrierPrivilegesChanged( eq(PHONE_ID), // Callback gets a list, but we don't care about order so use Set argThat(list -> Set.copyOf(list).equals(expectedUpdate.first)), eq(expectedUpdate.second)); } } } @Test public void testRegisterListener() throws Exception { mCarrierPrivilegesTracker = createCarrierPrivilegesTracker(); // mHandler registered in createCarrierPrivilegesTracker(), so reset it mHandler = new CarrierPrivilegesTrackerTestHandler(); Loading @@ -252,34 +282,40 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { mHandler, REGISTRANT_WHAT, null); mTestableLooper.processAllMessages(); verifyPrivilegedUids(expectedUids, expectedUidUpdates); } @Test public void testRegisterListener() throws Exception { mCarrierPrivilegesTracker = createCarrierPrivilegesTracker(); verifyRegisterListener(new int[0] /* expectedUids */, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(new int[0] /* expectedUids */, 1 /* expectedUidUpdates */); // No updates triggered, so TelephonyRegistry doesn't get any updates. verifyCarrierPrivilegesChangedUpdates(List.of()); } @Test public void testUnregisterListener() throws Exception { // Start with privileges. Verify no updates received after clearing UIDs. setupCarrierPrivilegesTrackerWithCarrierConfigUids(); // mHandler registered in createCarrierPrivilegesTracker(), so reset it mHandler = new CarrierPrivilegesTrackerTestHandler(); mCarrierPrivilegesTracker.registerCarrierPrivilegesListener( mHandler, REGISTRANT_WHAT, null); mTestableLooper.processAllMessages(); verifyRegisterListener(PRIVILEGED_UIDS, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(PRIVILEGED_UIDS /* expectedUids */, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS))); mHandler.reset(); reset(mTelephonyRegistryManager); mCarrierPrivilegesTracker.unregisterCarrierPrivilegesListener(mHandler); mTestableLooper.processAllMessages(); verifyPrivilegedUids(null /* expectedUids */, 0 /* expectedUidUpdates */); verifyRegistrantUpdates(null /* expectedUids */, 0 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates(List.of()); // Clear UIDs sendCarrierConfigChangedIntent(INVALID_SUBSCRIPTION_ID, PHONE_ID); mTestableLooper.processAllMessages(); verifyPrivilegedUids(null /* expectedUids */, 0 /* expectedUidUpdates */); verifyRegistrantUpdates(null /* expectedUids */, 0 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates(List.of(new Pair<>(Set.of(), new int[0]))); } @Test Loading @@ -295,7 +331,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID); mTestableLooper.processAllMessages(); verifyPrivilegedUids(PRIVILEGED_UIDS, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(PRIVILEGED_UIDS, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS))); } @Test Loading @@ -306,7 +344,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID_INCORRECT); mTestableLooper.processAllMessages(); verifyPrivilegedUids(null /* expectedUids */, 0 /* expectedUidUpdates */); verifyRegistrantUpdates(null /* expectedUids */, 0 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS))); } @Test Loading @@ -317,7 +357,11 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendCarrierConfigChangedIntent(INVALID_SUBSCRIPTION_ID, PHONE_ID); mTestableLooper.processAllMessages(); verifyPrivilegedUids(new int[0] /* expectedUids */, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(new int[0] /* expectedUids */, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of( new Pair<>(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS), new Pair<>(Set.of(), new int[0]))); } @Test Loading @@ -331,7 +375,8 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID); mTestableLooper.processAllMessages(); verifyPrivilegedUids(new int[0] /* expectedUids */, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(new int[0] /* expectedUids */, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates(List.of(new Pair<>(Set.of(), new int[0]))); } @Test Loading @@ -349,7 +394,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID); mTestableLooper.processAllMessages(); verifyPrivilegedUids(new int[] {UID_1} /* expectedUids */, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(new int[] {UID_1}, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(Set.of(PACKAGE_1), new int[] {UID_1}))); // Give package 2 privileges again. setupCarrierConfigRules( Loading @@ -359,7 +406,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID); mTestableLooper.processAllMessages(); verifyPrivilegedUids(PRIVILEGED_UIDS /* expectedUids */, 2 /* expectedUidUpdates */); verifyRegistrantUpdates(PRIVILEGED_UIDS, 2 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS))); } @Test Loading @@ -375,7 +424,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendSimCardStateChangedIntent(PHONE_ID, SIM_STATE_LOADED); mTestableLooper.processAllMessages(); verifyPrivilegedUids(PRIVILEGED_UIDS, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(PRIVILEGED_UIDS, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS))); } @Test Loading @@ -391,7 +442,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendSimApplicationStateChangedIntent(PHONE_ID, SIM_STATE_LOADED); mTestableLooper.processAllMessages(); verifyPrivilegedUids(PRIVILEGED_UIDS, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(PRIVILEGED_UIDS, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS))); } @Test Loading @@ -404,7 +457,11 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendSimCardStateChangedIntent(PHONE_ID, SIM_STATE_LOADED); mTestableLooper.processAllMessages(); verifyPrivilegedUids(new int[0] /* expectedUids */, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(new int[0], 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of( new Pair<>(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS), new Pair<>(Set.of(), new int[0]))); } @Test Loading @@ -417,7 +474,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendSimCardStateChangedIntent(PHONE_ID_INCORRECT, SIM_STATE_LOADED); mTestableLooper.processAllMessages(); verifyPrivilegedUids(null /* expectedUids */, 0 /* expectedUidUpdates */); verifyRegistrantUpdates(null /* expectedUids */, 0 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS))); } @Test Loading @@ -428,7 +487,11 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendSimCardStateChangedIntent(PHONE_ID, SIM_STATE_NOT_READY); mTestableLooper.processAllMessages(); verifyPrivilegedUids(new int[0] /* expectedUids */, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(new int[0], 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of( new Pair<>(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS), new Pair<>(Set.of(), new int[0]))); } @Test Loading @@ -446,7 +509,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendSimCardStateChangedIntent(PHONE_ID, SIM_STATE_LOADED); mTestableLooper.processAllMessages(); verifyPrivilegedUids(new int[] {UID_1} /* expectedUids */, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(new int[] {UID_1}, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(Set.of(PACKAGE_1), new int[] {UID_1}))); // Give package 2 privileges again. setupSimLoadedRules( Loading @@ -457,7 +522,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendSimCardStateChangedIntent(PHONE_ID, SIM_STATE_LOADED); mTestableLooper.processAllMessages(); verifyPrivilegedUids(PRIVILEGED_UIDS /* expectedUids */, 2 /* expectedUidUpdates */); verifyRegistrantUpdates(PRIVILEGED_UIDS, 2 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS))); } @Test Loading @@ -471,7 +538,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendPackageChangedIntent(Intent.ACTION_PACKAGE_ADDED, PACKAGE_1); mTestableLooper.processAllMessages(); verifyPrivilegedUids(new int[] {UID_1}, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(new int[] {UID_1}, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(Set.of(PACKAGE_1), new int[] {UID_1}))); } @Test Loading @@ -488,7 +557,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendPackageChangedIntent(Intent.ACTION_PACKAGE_ADDED, PACKAGE_1); mTestableLooper.processAllMessages(); verifyPrivilegedUids(PRIVILEGED_UIDS, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(PRIVILEGED_UIDS, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(Set.of(PACKAGE_1), PRIVILEGED_UIDS))); } @Test Loading @@ -506,7 +577,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendPackageChangedIntent(Intent.ACTION_PACKAGE_REPLACED, PACKAGE_1); mTestableLooper.processAllMessages(); verifyPrivilegedUids(PRIVILEGED_UIDS, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(PRIVILEGED_UIDS, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(Set.of(PACKAGE_1), PRIVILEGED_UIDS))); } @Test Loading @@ -528,7 +601,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendPackageChangedIntent(Intent.ACTION_PACKAGE_ADDED, PACKAGE_1); mTestableLooper.processAllMessages(); verifyPrivilegedUids(new int[] {UID_2} /* expectedUids */, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(new int[] {UID_2}, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(Set.of(PACKAGE_2), new int[] {UID_2}))); } @Test Loading @@ -549,7 +624,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendPackageChangedIntent(Intent.ACTION_PACKAGE_ADDED, PACKAGE_1); mTestableLooper.processAllMessages(); verifyPrivilegedUids(new int[] {UID_2} /* expectedUids */, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(new int[] {UID_2}, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(Set.of(PACKAGE_2), new int[] {UID_2}))); } @Test Loading @@ -565,7 +642,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendPackageChangedIntent(Intent.ACTION_PACKAGE_REMOVED, PACKAGE_1); mTestableLooper.processAllMessages(); verifyPrivilegedUids(new int[] {UID_2} /* expectedUids */, 1 /* expectedUidUpdates */); verifyRegistrantUpdates(new int[] {UID_2}, 1 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates( List.of(new Pair<>(Set.of(PACKAGE_2), new int[] {UID_2}))); } @Test Loading @@ -577,7 +656,8 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest { sendPackageChangedIntent(Intent.ACTION_PACKAGE_REMOVED, PACKAGE_1); mTestableLooper.processAllMessages(); verifyPrivilegedUids(null /* expectedUids */, 0 /* expectedUidUpdates */); verifyRegistrantUpdates(null /* expectedUidUpdates */, 0 /* expectedUidUpdates */); verifyCarrierPrivilegesChangedUpdates(List.of()); } private void sendCarrierConfigChangedIntent(int subId, int phoneId) { Loading