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

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

Merge "Improve CarrierPrivilegesTracker with new CarrierConfigManager APIs"...

Merge "Improve CarrierPrivilegesTracker with new CarrierConfigManager APIs" into main am: 7c0e97dd

Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/2478845



Change-Id: Ia340783d743413caa78a1fb7b730c73d9534cb81
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 9b6a1789 7c0e97dd
Loading
Loading
Loading
Loading
+19 −31
Original line number Diff line number Diff line
@@ -16,11 +16,8 @@

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.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_NO_ACCESS;
import static android.telephony.TelephonyManager.CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED;
@@ -130,6 +127,13 @@ public class CarrierPrivilegesTracker extends Handler {
                    | PackageManager.MATCH_DISABLED_UNTIL_USED_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.
     * obj: Registrant that will be notified of Carrier Privileged UID changes.
@@ -142,13 +146,6 @@ public class CarrierPrivilegesTracker extends Handler {
     */
    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.
     * arg1: slotId that this Action applies to
@@ -298,19 +295,6 @@ public class CarrierPrivilegesTracker extends Handler {
                    if (action == null) return;

                    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_APPLICATION_STATE_CHANGED: {
                            Bundle extras = intent.getExtras();
@@ -373,13 +357,16 @@ public class CarrierPrivilegesTracker extends Handler {
        mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
        mCarrierConfigManager =
                (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);
        mTelephonyRegistryManager =
                (TelephonyRegistryManager)
                        mContext.getSystemService(Context.TELEPHONY_REGISTRY_SERVICE);

        IntentFilter certFilter = new IntentFilter();
        certFilter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
        certFilter.addAction(TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED);
        certFilter.addAction(TelephonyManager.ACTION_SIM_APPLICATION_STATE_CHANGED);
        mContext.registerReceiver(mIntentReceiver, certFilter);
@@ -409,12 +396,6 @@ public class CarrierPrivilegesTracker extends Handler {
                handleUnregisterListener((Handler) msg.obj);
                break;
            }
            case ACTION_CARRIER_CONFIG_CERTS_UPDATED: {
                int subId = msg.arg1;
                int slotIndex = msg.arg2;
                handleCarrierConfigUpdated(subId, slotIndex);
                break;
            }
            case ACTION_SIM_STATE_UPDATED: {
                handleSimStateChanged(msg.arg1, msg.arg2);
                break;
@@ -491,7 +472,14 @@ public class CarrierPrivilegesTracker extends Handler {

    @NonNull
    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)) {
            return Collections.EMPTY_LIST;
        }
+22 −19
Original line number Diff line number Diff line
@@ -17,8 +17,6 @@
package com.android.internal.telephony;

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_CONFIG_APPLIED_BOOL;
import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
@@ -76,8 +74,8 @@ import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.InOrder;
import org.mockito.Mock;

import java.security.MessageDigest;
import java.util.ArrayList;
@@ -129,11 +127,10 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest {
                    | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
                    | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS;

    @Mock private Signature mSignature;

    private PersistableBundle mCarrierConfigs;
    private CarrierPrivilegesTrackerTestHandler mHandler;
    private CarrierPrivilegesTracker mCarrierPrivilegesTracker;
    private CarrierConfigManager.CarrierConfigChangeListener mCarrierConfigChangeListener;

    @Before
    public void setUp() throws Exception {
@@ -164,7 +161,8 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest {
    private void setupCarrierConfigRules(String... rules) {
        mCarrierConfigs.putStringArray(KEY_CARRIER_CERTIFICATE_STRING_ARRAY, rules);
        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) {
@@ -222,8 +220,14 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest {
     * #setupInstalledPackages}.
     */
    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 =
                new CarrierPrivilegesTracker(mTestableLooper.getLooper(), mPhone, mContext);
        verify(mCarrierConfigManager).registerCarrierConfigChangeListener(any(),
                listenerArgumentCaptor.capture());
        mCarrierConfigChangeListener = listenerArgumentCaptor.getAllValues().get(0);
        mTestableLooper.processAllMessages();

        cpt.registerCarrierPrivilegesListener(mHandler, REGISTRANT_WHAT, null);
@@ -371,7 +375,7 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest {
        verifyCarrierPrivilegesChangedUpdates(List.of());

        // Clear UIDs
        sendCarrierConfigChangedIntent(INVALID_SUBSCRIPTION_ID, PHONE_ID);
        sendCarrierConfigChanged(INVALID_SUBSCRIPTION_ID, PHONE_ID);
        mTestableLooper.processAllMessages();

        verifyCurrentState(Set.of(), new int[0]);
@@ -389,7 +393,7 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest {
        setupCarrierConfigRules(
                carrierConfigRuleString(getHash(CERT_1)), carrierConfigRuleString(getHash(CERT_2)));

        sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID);
        sendCarrierConfigChanged(SUB_ID, PHONE_ID);
        mTestableLooper.processAllMessages();

        verifyCurrentState(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS);
@@ -403,7 +407,7 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest {
        // Start with privileges. Incorrect phoneId shouldn't affect certs
        setupCarrierPrivilegesTrackerWithCarrierConfigUids();

        sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID_INCORRECT);
        sendCarrierConfigChanged(SUB_ID, PHONE_ID_INCORRECT);
        mTestableLooper.processAllMessages();

        verifyCurrentState(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS);
@@ -417,7 +421,7 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest {
        // Start with privileges, verify clearing certs clears UIDs
        setupCarrierPrivilegesTrackerWithCarrierConfigUids();

        sendCarrierConfigChangedIntent(INVALID_SUBSCRIPTION_ID, PHONE_ID);
        sendCarrierConfigChanged(INVALID_SUBSCRIPTION_ID, PHONE_ID);
        mTestableLooper.processAllMessages();

        verifyCurrentState(Set.of(), new int[0]);
@@ -434,9 +438,10 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest {
        setupCarrierPrivilegesTrackerWithCarrierConfigUids();

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

        verifyCurrentState(Set.of(), new int[0]);
@@ -456,7 +461,7 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest {
                carrierConfigRuleString(getHash(CERT_1), PACKAGE_1),
                carrierConfigRuleString(getHash(CERT_2), PACKAGE_1));

        sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID);
        sendCarrierConfigChanged(SUB_ID, PHONE_ID);
        mTestableLooper.processAllMessages();

        verifyCurrentState(Set.of(PACKAGE_1), new int[] {UID_1});
@@ -469,7 +474,7 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest {
                carrierConfigRuleString(getHash(CERT_1), PACKAGE_1),
                carrierConfigRuleString(getHash(CERT_2), PACKAGE_1, PACKAGE_2));

        sendCarrierConfigChangedIntent(SUB_ID, PHONE_ID);
        sendCarrierConfigChanged(SUB_ID, PHONE_ID);
        mTestableLooper.processAllMessages();

        verifyCurrentState(PRIVILEGED_PACKAGES, PRIVILEGED_UIDS);
@@ -1137,11 +1142,9 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest {
        verify(mPackageManager).queryIntentServices(any(), anyInt());
    }

    private void sendCarrierConfigChangedIntent(int subId, int phoneId) {
        mContext.sendBroadcast(
                new Intent(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)
                        .putExtra(EXTRA_SUBSCRIPTION_INDEX, subId)
                        .putExtra(EXTRA_SLOT_INDEX, phoneId));
    private void sendCarrierConfigChanged(int subId, int phoneId) {
        mCarrierConfigChangeListener.onCarrierConfigChanged(phoneId, subId,
                TelephonyManager.UNKNOWN_CARRIER_ID, TelephonyManager.UNKNOWN_CARRIER_ID);
    }

    private void sendSimCardStateChangedIntent(int phoneId, int simState) {