aboutsummaryrefslogtreecommitdiff
path: root/src/java/com/android/internal/telephony/uicc
diff options
context:
space:
mode:
authorrambowang <rambowang@google.com>2022-12-06 23:26:02 -0600
committerrambowang <rambowang@google.com>2023-01-26 19:40:36 -0600
commit66fa0a9ef12b061f3cce85d7c85db841ab420f16 (patch)
treeaf22347753132992eb364cff849de032c5c2aabc /src/java/com/android/internal/telephony/uicc
parent8e30609ade889777d6628ef7fcd5ef297db090ac (diff)
downloadtelephony-66fa0a9ef12b061f3cce85d7c85db841ab420f16.tar.gz
Update UiccProfile with new CarrierConfigManager APIs
- Replace carrier config change broadcast receiver with listener - Get subset of carrier config as needed to save memory Bug: 263267340 Test: atest UiccProfileTest Change-Id: I91f97dfb5363133d2928d1f6709bb8a754c4c733
Diffstat (limited to 'src/java/com/android/internal/telephony/uicc')
-rw-r--r--src/java/com/android/internal/telephony/uicc/UiccProfile.java66
1 files changed, 52 insertions, 14 deletions
diff --git a/src/java/com/android/internal/telephony/uicc/UiccProfile.java b/src/java/com/android/internal/telephony/uicc/UiccProfile.java
index 7dec239fc1..6d73e58098 100644
--- a/src/java/com/android/internal/telephony/uicc/UiccProfile.java
+++ b/src/java/com/android/internal/telephony/uicc/UiccProfile.java
@@ -20,6 +20,7 @@ import static com.android.internal.telephony.TelephonyStatsLog.PIN_STORAGE_EVENT
import static com.android.internal.telephony.TelephonyStatsLog.PIN_STORAGE_EVENT__EVENT__PIN_VERIFICATION_FAILURE;
import static com.android.internal.telephony.TelephonyStatsLog.PIN_STORAGE_EVENT__EVENT__PIN_VERIFICATION_SUCCESS;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.usage.UsageStatsManager;
@@ -125,6 +126,8 @@ public class UiccProfile extends IccCard {
private final int mPhoneId;
private final PinStorage mPinStorage;
+ private final CarrierConfigManager mCarrierConfigManager;
+
private static final int EVENT_RADIO_OFF_OR_UNAVAILABLE = 1;
private static final int EVENT_ICC_LOCKED = 2;
@VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
@@ -185,14 +188,19 @@ public class UiccProfile extends IccCard {
};
private boolean mUserUnlockReceiverRegistered;
- private final BroadcastReceiver mCarrierConfigChangedReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (intent.getAction().equals(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)) {
- mHandler.sendMessage(mHandler.obtainMessage(EVENT_CARRIER_CONFIG_CHANGED));
- }
- }
- };
+ private final CarrierConfigManager.CarrierConfigChangeListener mCarrierConfigChangeListener =
+ new CarrierConfigManager.CarrierConfigChangeListener() {
+ @Override
+ public void onCarrierConfigChanged(int logicalSlotIndex, int subscriptionId,
+ int carrierId, int specificCarrierId) {
+ if (logicalSlotIndex == mPhoneId) {
+ log("onCarrierConfigChanged: slotIndex=" + logicalSlotIndex
+ + ", subId=" + subscriptionId + ", carrierId=" + carrierId);
+ handleCarrierNameOverride();
+ handleSimCountryIsoOverride();
+ }
+ }
+ };
@VisibleForTesting
public final Handler mHandler = new Handler() {
@@ -341,9 +349,10 @@ public class UiccProfile extends IccCard {
ci.registerForOffOrNotAvailable(mHandler, EVENT_RADIO_OFF_OR_UNAVAILABLE, null);
resetProperties();
- IntentFilter intentfilter = new IntentFilter();
- intentfilter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
- c.registerReceiver(mCarrierConfigChangedReceiver, intentfilter);
+ mCarrierConfigManager = c.getSystemService(CarrierConfigManager.class);
+ // Listener callback directly handles config change and thus runs on handler thread
+ mCarrierConfigManager.registerCarrierConfigChangeListener(mHandler::post,
+ mCarrierConfigChangeListener);
}
/**
@@ -376,7 +385,11 @@ public class UiccProfile extends IccCard {
InstallCarrierAppUtils.unregisterPackageInstallReceiver(mContext);
mCi.unregisterForOffOrNotAvailable(mHandler);
- mContext.unregisterReceiver(mCarrierConfigChangedReceiver);
+
+ if (mCarrierConfigManager != null && mCarrierConfigChangeListener != null) {
+ mCarrierConfigManager.unregisterCarrierConfigChangeListener(
+ mCarrierConfigChangeListener);
+ }
if (mCatService != null) mCatService.dispose();
for (UiccCardApplication app : mUiccApplications) {
@@ -448,7 +461,15 @@ public class UiccProfile extends IccCard {
return;
}
- PersistableBundle config = configLoader.getConfigForSubId(subId);
+ PersistableBundle config =
+ getCarrierConfigSubset(
+ subId,
+ CarrierConfigManager.KEY_CARRIER_NAME_OVERRIDE_BOOL,
+ CarrierConfigManager.KEY_CARRIER_NAME_STRING);
+ if (config.isEmpty()) {
+ loge("handleCarrierNameOverride: fail to get carrier configs.");
+ return;
+ }
boolean preferCcName = config.getBoolean(
CarrierConfigManager.KEY_CARRIER_NAME_OVERRIDE_BOOL, false);
String ccName = config.getString(CarrierConfigManager.KEY_CARRIER_NAME_STRING);
@@ -512,7 +533,13 @@ public class UiccProfile extends IccCard {
return;
}
- PersistableBundle config = configLoader.getConfigForSubId(subId);
+ PersistableBundle config =
+ getCarrierConfigSubset(
+ subId, CarrierConfigManager.KEY_SIM_COUNTRY_ISO_OVERRIDE_STRING);
+ if (config.isEmpty()) {
+ loge("handleSimCountryIsoOverride: fail to get carrier configs.");
+ return;
+ }
String iso = config.getString(CarrierConfigManager.KEY_SIM_COUNTRY_ISO_OVERRIDE_STRING);
if (!TextUtils.isEmpty(iso)
&& !iso.equals(TelephonyManager.getSimCountryIsoForPhone(mPhoneId))) {
@@ -1790,6 +1817,17 @@ public class UiccProfile extends IccCard {
return null;
}
+ @NonNull
+ private PersistableBundle getCarrierConfigSubset(int subId, String... keys) {
+ PersistableBundle bundle = new PersistableBundle();
+ try {
+ bundle = mCarrierConfigManager.getConfigForSubId(subId, keys);
+ } catch (RuntimeException e) {
+ loge("CarrierConfigLoader is not available.");
+ }
+ return bundle;
+ }
+
private static String eventToString(int event) {
switch (event) {
case EVENT_RADIO_OFF_OR_UNAVAILABLE: return "RADIO_OFF_OR_UNAVAILABLE";