Loading src/java/com/android/internal/telephony/CarrierKeyDownloadManager.java +20 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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) { Loading tests/telephonytests/src/com/android/internal/telephony/CarrierKeyDownloadMgrTest.java +53 −2 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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(); Loading @@ -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); } Loading Loading
src/java/com/android/internal/telephony/CarrierKeyDownloadManager.java +20 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -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) { Loading
tests/telephonytests/src/com/android/internal/telephony/CarrierKeyDownloadMgrTest.java +53 −2 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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(); Loading @@ -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); } Loading