Loading services/core/java/com/android/server/vcn/TelephonySubscriptionTracker.java +20 −20 Original line number Diff line number Diff line Loading @@ -39,7 +39,7 @@ import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener; import android.telephony.TelephonyCallback; import android.telephony.TelephonyManager; import android.telephony.TelephonyManager.CarrierPrivilegesListener; import android.telephony.TelephonyManager.CarrierPrivilegesCallback; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Slog; Loading Loading @@ -98,8 +98,7 @@ public class TelephonySubscriptionTracker extends BroadcastReceiver { @NonNull private final OnSubscriptionsChangedListener mSubscriptionChangedListener; @NonNull private final List<CarrierPrivilegesListener> mCarrierPrivilegesChangedListeners = new ArrayList<>(); private final List<CarrierPrivilegesCallback> mCarrierPrivilegesCallbacks = new ArrayList<>(); @NonNull private TelephonySubscriptionSnapshot mCurrentSnapshot; Loading Loading @@ -151,20 +150,21 @@ public class TelephonySubscriptionTracker extends BroadcastReceiver { executor, mSubscriptionChangedListener); mTelephonyManager.registerTelephonyCallback(executor, mActiveDataSubIdListener); registerCarrierPrivilegesListeners(); registerCarrierPrivilegesCallbacks(); } private void registerCarrierPrivilegesListeners() { // TODO(b/221306368): Refactor with the new onCarrierServiceChange in the new CPCallback private void registerCarrierPrivilegesCallbacks() { final HandlerExecutor executor = new HandlerExecutor(mHandler); final int modemCount = mTelephonyManager.getActiveModemCount(); try { for (int i = 0; i < modemCount; i++) { CarrierPrivilegesListener carrierPrivilegesListener = new CarrierPrivilegesListener() { CarrierPrivilegesCallback carrierPrivilegesCallback = new CarrierPrivilegesCallback() { @Override public void onCarrierPrivilegesChanged( @NonNull List<String> privilegedPackageNames, @NonNull int[] privilegedUids) { @NonNull Set<String> privilegedPackageNames, @NonNull Set<Integer> privilegedUids) { // Re-trigger the synchronous check (which is also very cheap due // to caching in CarrierPrivilegesTracker). This allows consistency // with the onSubscriptionsChangedListener and broadcasts. Loading @@ -172,9 +172,9 @@ public class TelephonySubscriptionTracker extends BroadcastReceiver { } }; mTelephonyManager.addCarrierPrivilegesListener( i, executor, carrierPrivilegesListener); mCarrierPrivilegesChangedListeners.add(carrierPrivilegesListener); mTelephonyManager.registerCarrierPrivilegesCallback( i, executor, carrierPrivilegesCallback); mCarrierPrivilegesCallbacks.add(carrierPrivilegesCallback); } } catch (IllegalArgumentException e) { Slog.wtf(TAG, "Encounted exception registering carrier privileges listeners", e); Loading @@ -191,15 +191,15 @@ public class TelephonySubscriptionTracker extends BroadcastReceiver { mSubscriptionManager.removeOnSubscriptionsChangedListener(mSubscriptionChangedListener); mTelephonyManager.unregisterTelephonyCallback(mActiveDataSubIdListener); unregisterCarrierPrivilegesListeners(); unregisterCarrierPrivilegesCallbacks(); } private void unregisterCarrierPrivilegesListeners() { for (CarrierPrivilegesListener carrierPrivilegesListener : mCarrierPrivilegesChangedListeners) { mTelephonyManager.removeCarrierPrivilegesListener(carrierPrivilegesListener); private void unregisterCarrierPrivilegesCallbacks() { for (CarrierPrivilegesCallback carrierPrivilegesCallback : mCarrierPrivilegesCallbacks) { mTelephonyManager.unregisterCarrierPrivilegesCallback(carrierPrivilegesCallback); } mCarrierPrivilegesChangedListeners.clear(); mCarrierPrivilegesCallbacks.clear(); } /** Loading Loading @@ -283,7 +283,7 @@ public class TelephonySubscriptionTracker extends BroadcastReceiver { } private void handleActionMultiSimConfigChanged(Context context, Intent intent) { unregisterCarrierPrivilegesListeners(); unregisterCarrierPrivilegesCallbacks(); // Clear invalid slotIds from the mReadySubIdsBySlotId map. final int modemCount = mTelephonyManager.getActiveModemCount(); Loading @@ -296,7 +296,7 @@ public class TelephonySubscriptionTracker extends BroadcastReceiver { } } registerCarrierPrivilegesListeners(); registerCarrierPrivilegesCallbacks(); handleSubscriptionsChanged(); } Loading tests/vcn/java/com/android/server/vcn/TelephonySubscriptionTrackerTest.java +20 −20 Original line number Diff line number Diff line Loading @@ -60,7 +60,7 @@ import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener; import android.telephony.TelephonyCallback; import android.telephony.TelephonyManager; import android.telephony.TelephonyManager.CarrierPrivilegesListener; import android.telephony.TelephonyManager.CarrierPrivilegesCallback; import android.util.ArrayMap; import android.util.ArraySet; Loading Loading @@ -187,11 +187,11 @@ public class TelephonySubscriptionTrackerTest { return captor.getValue(); } private List<CarrierPrivilegesListener> getCarrierPrivilegesListeners() { final ArgumentCaptor<CarrierPrivilegesListener> captor = ArgumentCaptor.forClass(CarrierPrivilegesListener.class); private List<CarrierPrivilegesCallback> getCarrierPrivilegesCallbacks() { final ArgumentCaptor<CarrierPrivilegesCallback> captor = ArgumentCaptor.forClass(CarrierPrivilegesCallback.class); verify(mTelephonyManager, atLeastOnce()) .addCarrierPrivilegesListener(anyInt(), any(), captor.capture()); .registerCarrierPrivilegesCallback(anyInt(), any(), captor.capture()); return captor.getAllValues(); } Loading Loading @@ -270,12 +270,12 @@ public class TelephonySubscriptionTrackerTest { assertNotNull(getOnSubscriptionsChangedListener()); verify(mTelephonyManager, times(2)) .addCarrierPrivilegesListener(anyInt(), any(HandlerExecutor.class), any()); .registerCarrierPrivilegesCallback(anyInt(), any(HandlerExecutor.class), any()); verify(mTelephonyManager) .addCarrierPrivilegesListener(eq(0), any(HandlerExecutor.class), any()); .registerCarrierPrivilegesCallback(eq(0), any(HandlerExecutor.class), any()); verify(mTelephonyManager) .addCarrierPrivilegesListener(eq(1), any(HandlerExecutor.class), any()); assertEquals(2, getCarrierPrivilegesListeners().size()); .registerCarrierPrivilegesCallback(eq(1), any(HandlerExecutor.class), any()); assertEquals(2, getCarrierPrivilegesCallbacks().size()); } @Test Loading @@ -287,10 +287,10 @@ public class TelephonySubscriptionTrackerTest { final OnSubscriptionsChangedListener listener = getOnSubscriptionsChangedListener(); verify(mSubscriptionManager).removeOnSubscriptionsChangedListener(eq(listener)); for (CarrierPrivilegesListener carrierPrivilegesListener : getCarrierPrivilegesListeners()) { for (CarrierPrivilegesCallback carrierPrivilegesCallback : getCarrierPrivilegesCallbacks()) { verify(mTelephonyManager) .removeCarrierPrivilegesListener(eq(carrierPrivilegesListener)); .unregisterCarrierPrivilegesCallback(eq(carrierPrivilegesCallback)); } } Loading @@ -303,15 +303,15 @@ public class TelephonySubscriptionTrackerTest { mTelephonySubscriptionTracker.setReadySubIdsBySlotId(readySubIdsBySlotId); doReturn(1).when(mTelephonyManager).getActiveModemCount(); List<CarrierPrivilegesListener> carrierPrivilegesListeners = getCarrierPrivilegesListeners(); List<CarrierPrivilegesCallback> carrierPrivilegesCallbacks = getCarrierPrivilegesCallbacks(); mTelephonySubscriptionTracker.onReceive(mContext, buildTestMultiSimConfigBroadcastIntent()); mTestLooper.dispatchAll(); for (CarrierPrivilegesListener carrierPrivilegesListener : carrierPrivilegesListeners) { for (CarrierPrivilegesCallback carrierPrivilegesCallback : carrierPrivilegesCallbacks) { verify(mTelephonyManager) .removeCarrierPrivilegesListener(eq(carrierPrivilegesListener)); .unregisterCarrierPrivilegesCallback(eq(carrierPrivilegesCallback)); } // Expect cache cleared for inactive slots. Loading @@ -323,9 +323,9 @@ public class TelephonySubscriptionTrackerTest { // Expect a new CarrierPrivilegesListener to have been registered for slot 0, and none other // (2 previously registered during startup, for slots 0 & 1) verify(mTelephonyManager, times(3)) .addCarrierPrivilegesListener(anyInt(), any(HandlerExecutor.class), any()); .registerCarrierPrivilegesCallback(anyInt(), any(HandlerExecutor.class), any()); verify(mTelephonyManager, times(2)) .addCarrierPrivilegesListener(eq(0), any(HandlerExecutor.class), any()); .registerCarrierPrivilegesCallback(eq(0), any(HandlerExecutor.class), any()); // Verify that this triggers a re-evaluation verify(mCallback).onNewSnapshot(eq(buildExpectedSnapshot(TEST_PRIVILEGED_PACKAGES))); Loading Loading @@ -391,8 +391,8 @@ public class TelephonySubscriptionTrackerTest { public void testOnCarrierPrivilegesChanged() throws Exception { setupReadySubIds(); final CarrierPrivilegesListener listener = getCarrierPrivilegesListeners().get(0); listener.onCarrierPrivilegesChanged(Collections.emptyList(), new int[] {}); final CarrierPrivilegesCallback callback = getCarrierPrivilegesCallbacks().get(0); callback.onCarrierPrivilegesChanged(Collections.emptySet(), Collections.emptySet()); mTestLooper.dispatchAll(); verify(mCallback).onNewSnapshot(eq(buildExpectedSnapshot(TEST_PRIVILEGED_PACKAGES))); Loading Loading
services/core/java/com/android/server/vcn/TelephonySubscriptionTracker.java +20 −20 Original line number Diff line number Diff line Loading @@ -39,7 +39,7 @@ import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener; import android.telephony.TelephonyCallback; import android.telephony.TelephonyManager; import android.telephony.TelephonyManager.CarrierPrivilegesListener; import android.telephony.TelephonyManager.CarrierPrivilegesCallback; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Slog; Loading Loading @@ -98,8 +98,7 @@ public class TelephonySubscriptionTracker extends BroadcastReceiver { @NonNull private final OnSubscriptionsChangedListener mSubscriptionChangedListener; @NonNull private final List<CarrierPrivilegesListener> mCarrierPrivilegesChangedListeners = new ArrayList<>(); private final List<CarrierPrivilegesCallback> mCarrierPrivilegesCallbacks = new ArrayList<>(); @NonNull private TelephonySubscriptionSnapshot mCurrentSnapshot; Loading Loading @@ -151,20 +150,21 @@ public class TelephonySubscriptionTracker extends BroadcastReceiver { executor, mSubscriptionChangedListener); mTelephonyManager.registerTelephonyCallback(executor, mActiveDataSubIdListener); registerCarrierPrivilegesListeners(); registerCarrierPrivilegesCallbacks(); } private void registerCarrierPrivilegesListeners() { // TODO(b/221306368): Refactor with the new onCarrierServiceChange in the new CPCallback private void registerCarrierPrivilegesCallbacks() { final HandlerExecutor executor = new HandlerExecutor(mHandler); final int modemCount = mTelephonyManager.getActiveModemCount(); try { for (int i = 0; i < modemCount; i++) { CarrierPrivilegesListener carrierPrivilegesListener = new CarrierPrivilegesListener() { CarrierPrivilegesCallback carrierPrivilegesCallback = new CarrierPrivilegesCallback() { @Override public void onCarrierPrivilegesChanged( @NonNull List<String> privilegedPackageNames, @NonNull int[] privilegedUids) { @NonNull Set<String> privilegedPackageNames, @NonNull Set<Integer> privilegedUids) { // Re-trigger the synchronous check (which is also very cheap due // to caching in CarrierPrivilegesTracker). This allows consistency // with the onSubscriptionsChangedListener and broadcasts. Loading @@ -172,9 +172,9 @@ public class TelephonySubscriptionTracker extends BroadcastReceiver { } }; mTelephonyManager.addCarrierPrivilegesListener( i, executor, carrierPrivilegesListener); mCarrierPrivilegesChangedListeners.add(carrierPrivilegesListener); mTelephonyManager.registerCarrierPrivilegesCallback( i, executor, carrierPrivilegesCallback); mCarrierPrivilegesCallbacks.add(carrierPrivilegesCallback); } } catch (IllegalArgumentException e) { Slog.wtf(TAG, "Encounted exception registering carrier privileges listeners", e); Loading @@ -191,15 +191,15 @@ public class TelephonySubscriptionTracker extends BroadcastReceiver { mSubscriptionManager.removeOnSubscriptionsChangedListener(mSubscriptionChangedListener); mTelephonyManager.unregisterTelephonyCallback(mActiveDataSubIdListener); unregisterCarrierPrivilegesListeners(); unregisterCarrierPrivilegesCallbacks(); } private void unregisterCarrierPrivilegesListeners() { for (CarrierPrivilegesListener carrierPrivilegesListener : mCarrierPrivilegesChangedListeners) { mTelephonyManager.removeCarrierPrivilegesListener(carrierPrivilegesListener); private void unregisterCarrierPrivilegesCallbacks() { for (CarrierPrivilegesCallback carrierPrivilegesCallback : mCarrierPrivilegesCallbacks) { mTelephonyManager.unregisterCarrierPrivilegesCallback(carrierPrivilegesCallback); } mCarrierPrivilegesChangedListeners.clear(); mCarrierPrivilegesCallbacks.clear(); } /** Loading Loading @@ -283,7 +283,7 @@ public class TelephonySubscriptionTracker extends BroadcastReceiver { } private void handleActionMultiSimConfigChanged(Context context, Intent intent) { unregisterCarrierPrivilegesListeners(); unregisterCarrierPrivilegesCallbacks(); // Clear invalid slotIds from the mReadySubIdsBySlotId map. final int modemCount = mTelephonyManager.getActiveModemCount(); Loading @@ -296,7 +296,7 @@ public class TelephonySubscriptionTracker extends BroadcastReceiver { } } registerCarrierPrivilegesListeners(); registerCarrierPrivilegesCallbacks(); handleSubscriptionsChanged(); } Loading
tests/vcn/java/com/android/server/vcn/TelephonySubscriptionTrackerTest.java +20 −20 Original line number Diff line number Diff line Loading @@ -60,7 +60,7 @@ import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener; import android.telephony.TelephonyCallback; import android.telephony.TelephonyManager; import android.telephony.TelephonyManager.CarrierPrivilegesListener; import android.telephony.TelephonyManager.CarrierPrivilegesCallback; import android.util.ArrayMap; import android.util.ArraySet; Loading Loading @@ -187,11 +187,11 @@ public class TelephonySubscriptionTrackerTest { return captor.getValue(); } private List<CarrierPrivilegesListener> getCarrierPrivilegesListeners() { final ArgumentCaptor<CarrierPrivilegesListener> captor = ArgumentCaptor.forClass(CarrierPrivilegesListener.class); private List<CarrierPrivilegesCallback> getCarrierPrivilegesCallbacks() { final ArgumentCaptor<CarrierPrivilegesCallback> captor = ArgumentCaptor.forClass(CarrierPrivilegesCallback.class); verify(mTelephonyManager, atLeastOnce()) .addCarrierPrivilegesListener(anyInt(), any(), captor.capture()); .registerCarrierPrivilegesCallback(anyInt(), any(), captor.capture()); return captor.getAllValues(); } Loading Loading @@ -270,12 +270,12 @@ public class TelephonySubscriptionTrackerTest { assertNotNull(getOnSubscriptionsChangedListener()); verify(mTelephonyManager, times(2)) .addCarrierPrivilegesListener(anyInt(), any(HandlerExecutor.class), any()); .registerCarrierPrivilegesCallback(anyInt(), any(HandlerExecutor.class), any()); verify(mTelephonyManager) .addCarrierPrivilegesListener(eq(0), any(HandlerExecutor.class), any()); .registerCarrierPrivilegesCallback(eq(0), any(HandlerExecutor.class), any()); verify(mTelephonyManager) .addCarrierPrivilegesListener(eq(1), any(HandlerExecutor.class), any()); assertEquals(2, getCarrierPrivilegesListeners().size()); .registerCarrierPrivilegesCallback(eq(1), any(HandlerExecutor.class), any()); assertEquals(2, getCarrierPrivilegesCallbacks().size()); } @Test Loading @@ -287,10 +287,10 @@ public class TelephonySubscriptionTrackerTest { final OnSubscriptionsChangedListener listener = getOnSubscriptionsChangedListener(); verify(mSubscriptionManager).removeOnSubscriptionsChangedListener(eq(listener)); for (CarrierPrivilegesListener carrierPrivilegesListener : getCarrierPrivilegesListeners()) { for (CarrierPrivilegesCallback carrierPrivilegesCallback : getCarrierPrivilegesCallbacks()) { verify(mTelephonyManager) .removeCarrierPrivilegesListener(eq(carrierPrivilegesListener)); .unregisterCarrierPrivilegesCallback(eq(carrierPrivilegesCallback)); } } Loading @@ -303,15 +303,15 @@ public class TelephonySubscriptionTrackerTest { mTelephonySubscriptionTracker.setReadySubIdsBySlotId(readySubIdsBySlotId); doReturn(1).when(mTelephonyManager).getActiveModemCount(); List<CarrierPrivilegesListener> carrierPrivilegesListeners = getCarrierPrivilegesListeners(); List<CarrierPrivilegesCallback> carrierPrivilegesCallbacks = getCarrierPrivilegesCallbacks(); mTelephonySubscriptionTracker.onReceive(mContext, buildTestMultiSimConfigBroadcastIntent()); mTestLooper.dispatchAll(); for (CarrierPrivilegesListener carrierPrivilegesListener : carrierPrivilegesListeners) { for (CarrierPrivilegesCallback carrierPrivilegesCallback : carrierPrivilegesCallbacks) { verify(mTelephonyManager) .removeCarrierPrivilegesListener(eq(carrierPrivilegesListener)); .unregisterCarrierPrivilegesCallback(eq(carrierPrivilegesCallback)); } // Expect cache cleared for inactive slots. Loading @@ -323,9 +323,9 @@ public class TelephonySubscriptionTrackerTest { // Expect a new CarrierPrivilegesListener to have been registered for slot 0, and none other // (2 previously registered during startup, for slots 0 & 1) verify(mTelephonyManager, times(3)) .addCarrierPrivilegesListener(anyInt(), any(HandlerExecutor.class), any()); .registerCarrierPrivilegesCallback(anyInt(), any(HandlerExecutor.class), any()); verify(mTelephonyManager, times(2)) .addCarrierPrivilegesListener(eq(0), any(HandlerExecutor.class), any()); .registerCarrierPrivilegesCallback(eq(0), any(HandlerExecutor.class), any()); // Verify that this triggers a re-evaluation verify(mCallback).onNewSnapshot(eq(buildExpectedSnapshot(TEST_PRIVILEGED_PACKAGES))); Loading Loading @@ -391,8 +391,8 @@ public class TelephonySubscriptionTrackerTest { public void testOnCarrierPrivilegesChanged() throws Exception { setupReadySubIds(); final CarrierPrivilegesListener listener = getCarrierPrivilegesListeners().get(0); listener.onCarrierPrivilegesChanged(Collections.emptyList(), new int[] {}); final CarrierPrivilegesCallback callback = getCarrierPrivilegesCallbacks().get(0); callback.onCarrierPrivilegesChanged(Collections.emptySet(), Collections.emptySet()); mTestLooper.dispatchAll(); verify(mCallback).onNewSnapshot(eq(buildExpectedSnapshot(TEST_PRIVILEGED_PACKAGES))); Loading