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

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

Merge "Update TelephonySubscriptionTracker to use new CPCallback interface"...

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

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

Change-Id: Idb45073582935b1c3b2e665b6f82c0ecd4f2037d
parents 8f04c7b7 66d19b9f
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)));