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

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

Merge "Handle CarrierConfig change when user state is unlock" into main am:...

Merge "Handle CarrierConfig change when user state is unlock" into main am: f236b741 am: 006e3bda

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



Change-Id: I14f228a4a862985f482e540304b79e3ea2fc6b93
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents d472ca5b 006e3bda
Loading
Loading
Loading
Loading
+20 −1
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.net.Uri;
import android.os.Handler;
import android.os.Message;
import android.os.PersistableBundle;
import android.os.UserManager;
import android.telephony.CarrierConfigManager;
import android.telephony.ImsiEncryptionInfo;
import android.telephony.SubscriptionManager;
@@ -108,6 +109,7 @@ public class CarrierKeyDownloadManager extends Handler {
    private boolean mAllowedOverMeteredNetwork = false;
    private boolean mDeleteOldKeyAfterDownload = false;
    private TelephonyManager mTelephonyManager;
    private UserManager mUserManager;

    @VisibleForTesting
    public String mMccMncForDownload;
@@ -125,18 +127,35 @@ public class CarrierKeyDownloadManager extends Handler {
        mDownloadManager = (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE);
        mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
                .createForSubscriptionId(mPhone.getSubId());
        mUserManager = mContext.getSystemService(UserManager.class);
        CarrierConfigManager carrierConfigManager = mContext.getSystemService(
                CarrierConfigManager.class);
        // Callback which directly handle config change should be executed on handler thread
        carrierConfigManager.registerCarrierConfigChangeListener(this::post,
                (slotIndex, subId, carrierId, specificCarrierId) -> {
                    if (slotIndex == mPhone.getPhoneId()) {
                    boolean isUserUnlocked = mUserManager.isUserUnlocked();

                    if (isUserUnlocked && slotIndex == mPhone.getPhoneId()) {
                        Log.d(LOG_TAG, "Carrier Config changed: slotIndex=" + slotIndex);
                        handleAlarmOrConfigChange();
                    } else {
                        Log.d(LOG_TAG, "User is locked");
                        mContext.registerReceiver(mUserUnlockedReceiver, new IntentFilter(
                                Intent.ACTION_USER_UNLOCKED));
                    }
                });
    }

    private final BroadcastReceiver mUserUnlockedReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (Intent.ACTION_USER_UNLOCKED.equals(intent.getAction())) {
                Log.d(LOG_TAG, "Received UserUnlockedReceiver");
                handleAlarmOrConfigChange();
            }
        }
    };

    private final BroadcastReceiver mDownloadReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
+53 −2
Original line number Diff line number Diff line
@@ -94,7 +94,7 @@ public class CarrierKeyDownloadMgrTest extends TelephonyTest {
        super.setUp(getClass().getSimpleName());
        mBundle = mContextFixture.getCarrierConfigBundle();
        when(mCarrierConfigManager.getConfigForSubId(anyInt(), any())).thenReturn(mBundle);

        when(mUserManager.isUserUnlocked()).thenReturn(true);
        // Capture listener to emulate the carrier config change notification used later
        ArgumentCaptor<CarrierConfigManager.CarrierConfigChangeListener> listenerArgumentCaptor =
                ArgumentCaptor.forClass(CarrierConfigManager.CarrierConfigChangeListener.class);
@@ -342,7 +342,50 @@ public class CarrierKeyDownloadMgrTest extends TelephonyTest {
     **/
    @Test
    @SmallTest
    public void testCarrierConfigChanged() {
    public void testCarrierConfigChangedWithUserUnlocked() {
        CarrierConfigManager carrierConfigManager = (CarrierConfigManager)
                mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE);
        int slotId = mPhone.getPhoneId();
        PersistableBundle bundle = carrierConfigManager.getConfigForSubId(slotId);
        bundle.putInt(CarrierConfigManager.IMSI_KEY_AVAILABILITY_INT, 3);
        bundle.putString(CarrierConfigManager.IMSI_KEY_DOWNLOAD_URL_STRING, mURL);

        when(mTelephonyManager.getSimOperator(anyInt())).thenReturn("310260");
        when(mTelephonyManager.getSimCarrierId()).thenReturn(1);
        mCarrierConfigChangeListener.onCarrierConfigChanged(0 /* slotIndex */,
                SubscriptionManager.INVALID_SUBSCRIPTION_ID,
                TelephonyManager.UNKNOWN_CARRIER_ID, TelephonyManager.UNKNOWN_CARRIER_ID);
        processAllMessages();
        assertEquals("310260", mCarrierKeyDM.mMccMncForDownload);
        assertEquals(1, mCarrierKeyDM.mCarrierId);
    }

    @Test
    @SmallTest
    public void testCarrierConfigChangedWithUserLocked() {
        when(mUserManager.isUserUnlocked()).thenReturn(false);
        CarrierConfigManager carrierConfigManager = (CarrierConfigManager)
                mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE);
        int slotId = mPhone.getPhoneId();
        PersistableBundle bundle = carrierConfigManager.getConfigForSubId(slotId);
        bundle.putInt(CarrierConfigManager.IMSI_KEY_AVAILABILITY_INT, 3);
        bundle.putString(CarrierConfigManager.IMSI_KEY_DOWNLOAD_URL_STRING, mURL);

        when(mTelephonyManager.getSimOperator(anyInt())).thenReturn("310260");
        when(mTelephonyManager.getSimCarrierId()).thenReturn(1);
        mCarrierConfigChangeListener.onCarrierConfigChanged(0 /* slotIndex */,
                SubscriptionManager.INVALID_SUBSCRIPTION_ID,
                TelephonyManager.UNKNOWN_CARRIER_ID, TelephonyManager.UNKNOWN_CARRIER_ID);
        processAllMessages();
        assertNull(mCarrierKeyDM.mMccMncForDownload);
        assertEquals(0, mCarrierKeyDM.mCarrierId);
    }

    @Test
    @SmallTest
    public void testUserLockedAfterCarrierConfigChanged() {
        // User is locked at beginning
        when(mUserManager.isUserUnlocked()).thenReturn(false);
        CarrierConfigManager carrierConfigManager = (CarrierConfigManager)
                mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE);
        int slotId = mPhone.getPhoneId();
@@ -350,12 +393,20 @@ public class CarrierKeyDownloadMgrTest extends TelephonyTest {
        bundle.putInt(CarrierConfigManager.IMSI_KEY_AVAILABILITY_INT, 3);
        bundle.putString(CarrierConfigManager.IMSI_KEY_DOWNLOAD_URL_STRING, mURL);

        // Carrier config change received
        when(mTelephonyManager.getSimOperator(anyInt())).thenReturn("310260");
        when(mTelephonyManager.getSimCarrierId()).thenReturn(1);
        mCarrierConfigChangeListener.onCarrierConfigChanged(0 /* slotIndex */,
                SubscriptionManager.INVALID_SUBSCRIPTION_ID,
                TelephonyManager.UNKNOWN_CARRIER_ID, TelephonyManager.UNKNOWN_CARRIER_ID);
        processAllMessages();

        // User unlocked event received
        Intent mIntent = new Intent(Intent.ACTION_USER_UNLOCKED);
        mContext.sendBroadcast(mIntent);
        when(mUserManager.isUserUnlocked()).thenReturn(true);
        processAllMessages();

        assertEquals("310260", mCarrierKeyDM.mMccMncForDownload);
        assertEquals(1, mCarrierKeyDM.mCarrierId);
    }