Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 66d19b9f authored by Rambo Wang's avatar Rambo Wang Committed by Automerger Merge Worker
Browse files

Merge "Update TelephonySubscriptionTracker to use new CPCallback interface" am: f146ee5a

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2037586

Change-Id: I7150a2bf374e0e655c362cb63de0ad88d26ef939
parents d81fc9d3 f146ee5a
Loading
Loading
Loading
Loading
+20 −20
Original line number Diff line number Diff line
@@ -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;
@@ -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;

@@ -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.
@@ -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);
@@ -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();
    }

    /**
@@ -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();
@@ -296,7 +296,7 @@ public class TelephonySubscriptionTracker extends BroadcastReceiver {
            }
        }

        registerCarrierPrivilegesListeners();
        registerCarrierPrivilegesCallbacks();
        handleSubscriptionsChanged();
    }

+20 −20
Original line number Diff line number Diff line
@@ -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;

@@ -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();
    }
@@ -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
@@ -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));
        }
    }

@@ -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.
@@ -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)));
@@ -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)));