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

Commit 0afdf2eb 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 am: 3b055c3b am: bf0d5eed am: 16c0a6c9

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



Change-Id: I818fd4f37f66a3f5d42b04ca500abaa0b6986ca1
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 46bcd661 16c0a6c9
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);
    }