diff options
author | Rambo Wang <rambowang@google.com> | 2023-10-13 18:56:00 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2023-10-13 18:56:00 +0000 |
commit | f236b7418f617b8eb930d975f4311a037f1514ee (patch) | |
tree | b95a192c52caea91f22b9f0f9ca680954af7c0aa | |
parent | 005529a3362740728c0b9da428bb1d88e691d9b6 (diff) | |
parent | 18764408864f2eb55e06585020bba9ee333bbbb2 (diff) | |
download | telephony-f236b7418f617b8eb930d975f4311a037f1514ee.tar.gz |
Merge "Handle CarrierConfig change when user state is unlock" into main
-rw-r--r-- | src/java/com/android/internal/telephony/CarrierKeyDownloadManager.java | 21 | ||||
-rw-r--r-- | tests/telephonytests/src/com/android/internal/telephony/CarrierKeyDownloadMgrTest.java | 55 |
2 files changed, 73 insertions, 3 deletions
diff --git a/src/java/com/android/internal/telephony/CarrierKeyDownloadManager.java b/src/java/com/android/internal/telephony/CarrierKeyDownloadManager.java index beb6b2653d..195ef16165 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.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) { diff --git a/tests/telephonytests/src/com/android/internal/telephony/CarrierKeyDownloadMgrTest.java b/tests/telephonytests/src/com/android/internal/telephony/CarrierKeyDownloadMgrTest.java index 40e1821dba..9fd89ffcb1 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 @@ 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); } |