Merge "Handle CarrierConfig change when user state is unlock" into main
diff --git a/src/java/com/android/internal/telephony/CarrierKeyDownloadManager.java b/src/java/com/android/internal/telephony/CarrierKeyDownloadManager.java
index beb6b26..195ef16 100644
--- a/src/java/com/android/internal/telephony/CarrierKeyDownloadManager.java
+++ b/src/java/com/android/internal/telephony/CarrierKeyDownloadManager.java
@@ -30,6 +30,7 @@
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 @@
private boolean mAllowedOverMeteredNetwork = false;
private boolean mDeleteOldKeyAfterDownload = false;
private TelephonyManager mTelephonyManager;
+ private UserManager mUserManager;
@VisibleForTesting
public String mMccMncForDownload;
@@ -125,18 +127,35 @@
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) {
diff --git a/tests/telephonytests/src/com/android/internal/telephony/CarrierKeyDownloadMgrTest.java b/tests/telephonytests/src/com/android/internal/telephony/CarrierKeyDownloadMgrTest.java
index 40e1821..9fd89ff 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/CarrierKeyDownloadMgrTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/CarrierKeyDownloadMgrTest.java
@@ -94,7 +94,7 @@
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,7 @@
**/
@Test
@SmallTest
- public void testCarrierConfigChanged() {
+ public void testCarrierConfigChangedWithUserUnlocked() {
CarrierConfigManager carrierConfigManager = (CarrierConfigManager)
mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE);
int slotId = mPhone.getPhoneId();
@@ -360,6 +360,57 @@
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();
+ PersistableBundle bundle = carrierConfigManager.getConfigForSubId(slotId);
+ 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);
+ }
+
/**
* Tests notifying carrier config change from listener with an empty key.
* Verify that the carrier keys are removed if IMSI_KEY_DOWNLOAD_URL_STRING is null.