diff --git a/src/com/android/settings/network/MobileNetworkRepository.java b/src/com/android/settings/network/MobileNetworkRepository.java index e483a4dbd52..f07a3b73779 100644 --- a/src/com/android/settings/network/MobileNetworkRepository.java +++ b/src/com/android/settings/network/MobileNetworkRepository.java @@ -179,7 +179,7 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions } private void addRegisterBySubId(int subId) { - if (!mTelephonyCallbackMap.containsKey(subId)) { + if (!mTelephonyCallbackMap.containsKey(subId) || !mTelephonyManagerMap.containsKey(subId)) { PhoneCallStateTelephonyCallback telephonyCallback = new PhoneCallStateTelephonyCallback(); mTelephonyManager.registerTelephonyCallback(mContext.getMainExecutor(), @@ -435,8 +435,6 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions getUiccInfoBySubscriptionInfo(uiccSlotInfos, subInfo); SubscriptionInfo firstRemovableSubInfo = SubscriptionUtil.getFirstRemovableSubscription( context); - SubscriptionInfo subscriptionOrDefault = SubscriptionUtil.getSubscriptionOrDefault( - context, mSubId); if(DEBUG){ Log.d(TAG, "convert subscriptionInfo to entity for subId = " + mSubId); } @@ -455,8 +453,7 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions firstRemovableSubInfo == null ? false : firstRemovableSubInfo.getSubscriptionId() == mSubId, String.valueOf(SubscriptionUtil.getDefaultSimConfig(context, mSubId)), - subscriptionOrDefault == null ? false - : subscriptionOrDefault.getSubscriptionId() == mSubId, + SubscriptionUtil.isDefaultSubscription(context, mSubId), mSubscriptionManager.isValidSubscriptionId(mSubId), mSubscriptionManager.isUsableSubscriptionId(mSubId), mSubscriptionManager.isActiveSubscriptionId(mSubId), @@ -540,11 +537,11 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions SubscriptionUtil.getSelectableSubscriptionInfoList(mContext)); } - private void insertAvailableSubInfoToEntity(List availableInfoList) { + private void insertAvailableSubInfoToEntity(List inputAvailableInfoList) { sExecutor.execute(() -> { SubscriptionInfoEntity[] availableInfoArray = mAvailableSubInfoEntityList.toArray( new SubscriptionInfoEntity[0]); - if ((availableInfoList == null || availableInfoList.size() == 0) + if ((inputAvailableInfoList == null || inputAvailableInfoList.size() == 0) && mAvailableSubInfoEntityList.size() != 0) { if (DEBUG) { Log.d(TAG, "availableSudInfoList from framework is empty, remove all subs"); @@ -554,11 +551,12 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions deleteAllInfoBySubId(info.subId); } - } else if (availableInfoList != null) { - SubscriptionInfo[] infoArray = availableInfoList.toArray(new SubscriptionInfo[0]); + } else if (inputAvailableInfoList != null) { + SubscriptionInfo[] inputAvailableInfoArray = inputAvailableInfoList.toArray( + new SubscriptionInfo[0]); // Remove the redundant subInfo - if (availableInfoList.size() <= mAvailableSubInfoEntityList.size()) { - for (SubscriptionInfo subInfo : infoArray) { + if (inputAvailableInfoList.size() <= mAvailableSubInfoEntityList.size()) { + for (SubscriptionInfo subInfo : inputAvailableInfoArray) { int subId = subInfo.getSubscriptionId(); if (mSubscriptionInfoMap.containsKey(subId)) { mSubscriptionInfoMap.remove(subId); @@ -571,11 +569,20 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions deleteAllInfoBySubId(String.valueOf(key)); } } + } else if (inputAvailableInfoList.size() < mAvailableSubInfoEntityList.size()) { + // Check the subInfo between the new list from framework and old list in + // the database, if the subInfo is not existed in the new list, delete it + // from the database. + for (SubscriptionInfoEntity info : availableInfoArray) { + if (sCacheSubscriptionInfoEntityMap.containsKey(info.subId)) { + deleteAllInfoBySubId(info.subId); + } + } } } // Insert all new available subInfo to database. - for (SubscriptionInfo subInfo : infoArray) { + for (SubscriptionInfo subInfo : inputAvailableInfoArray) { if (DEBUG) { Log.d(TAG, "insert subInfo to subInfoEntity, subInfo = " + subInfo); } diff --git a/src/com/android/settings/network/NetworkProviderCallsSmsController.java b/src/com/android/settings/network/NetworkProviderCallsSmsController.java index 4ad04705cdb..ced2b8acfe5 100644 --- a/src/com/android/settings/network/NetworkProviderCallsSmsController.java +++ b/src/com/android/settings/network/NetworkProviderCallsSmsController.java @@ -101,7 +101,9 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl return setSummaryResId(R.string.calls_sms_no_sim); } else { final StringBuilder summary = new StringBuilder(); - for (SubscriptionInfoEntity subInfo : list) { + SubscriptionInfoEntity[] entityArray = list.toArray( + new SubscriptionInfoEntity[0]); + for (SubscriptionInfoEntity subInfo : entityArray) { int subsSize = list.size(); int subId = Integer.parseInt(subInfo.subId); final CharSequence displayName = subInfo.uniqueName; @@ -125,7 +127,7 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl .append(")"); } // Do not add ", " for the last subscription. - if (!subInfo.equals(list.get(list.size() - 1))) { + if (list.size() > 0 && !subInfo.equals(list.get(list.size() - 1))) { summary.append(", "); } diff --git a/src/com/android/settings/network/SubscriptionUtil.java b/src/com/android/settings/network/SubscriptionUtil.java index 13bb51928b6..9c4ac0307d6 100644 --- a/src/com/android/settings/network/SubscriptionUtil.java +++ b/src/com/android/settings/network/SubscriptionUtil.java @@ -688,6 +688,12 @@ public class SubscriptionUtil { .findFirst().orElse(null); } + public static boolean isDefaultSubscription(Context context, int subId) { + SubscriptionAnnotation subInfo = getDefaultSubscriptionSelection( + new SelectableSubscriptions(context, true).call()); + return subInfo != null && subInfo.getSubscriptionId() == subId; + } + public static SubscriptionInfo getSubscriptionOrDefault(Context context, int subscriptionId) { return getSubscription(context, subscriptionId, (subscriptionId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) ? null : ( diff --git a/src/com/android/settings/network/telephony/ConvertToEsimPreferenceController.java b/src/com/android/settings/network/telephony/ConvertToEsimPreferenceController.java index 4f9e138ffb1..46ec61d9f60 100644 --- a/src/com/android/settings/network/telephony/ConvertToEsimPreferenceController.java +++ b/src/com/android/settings/network/telephony/ConvertToEsimPreferenceController.java @@ -114,15 +114,12 @@ public class ConvertToEsimPreferenceController extends TelephonyBasePreferenceCo @Override public void onActiveSubInfoChanged(List subInfoEntityList) { // TODO(b/262195754): Need the intent to enabled the feature. -// if (DataServiceUtils.shouldUpdateEntityList(mSubscriptionInfoEntityList, -// subInfoEntityList)) { -// mSubscriptionInfoEntityList = subInfoEntityList; -// mSubscriptionInfoEntityList.forEach(entity -> { -// if (Integer.parseInt(entity.subId) == mSubId) { -// mSubscriptionInfoEntity = entity; -// update(); -// } -// }); -// } +// mSubscriptionInfoEntityList = subInfoEntityList; +// mSubscriptionInfoEntityList.forEach(entity -> { +// if (Integer.parseInt(entity.subId) == mSubId) { +// mSubscriptionInfoEntity = entity; +// update(); +// } +// }); } } diff --git a/src/com/android/settings/network/telephony/MobileNetworkSettings.java b/src/com/android/settings/network/telephony/MobileNetworkSettings.java index 1ff5e17d650..d5b2c2e39c4 100644 --- a/src/com/android/settings/network/telephony/MobileNetworkSettings.java +++ b/src/com/android/settings/network/telephony/MobileNetworkSettings.java @@ -23,6 +23,7 @@ import android.content.Intent; import android.os.Bundle; import android.os.UserManager; import android.provider.Settings; +import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.text.TextUtils; @@ -150,7 +151,7 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme MobileNetworkUtils.getSearchableSubscriptionId(context)); Log.d(LOG_TAG, "display subId from intent: " + mSubId); } else { - Log.d(LOG_TAG, "intent is null, can not get the subId from intent."); + Log.d(LOG_TAG, "intent is null, can not get subId " + mSubId + " from intent."); } } else { mSubId = getArguments().getInt(Settings.EXTRA_SUB_ID, @@ -165,9 +166,7 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme mMobileNetworkRepository.queryMobileNetworkInfoBySubId( String.valueOf(mSubId)); }); - if (mSubId <= SubscriptionManager.INVALID_SUBSCRIPTION_ID) { - return Arrays.asList(); - } + return Arrays.asList( new DataUsageSummaryPreferenceController(getActivity(), getSettingsLifecycle(), this, mSubId), @@ -178,8 +177,6 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme new SmsDefaultSubscriptionController(context, KEY_SMS_PREF, getSettingsLifecycle(), this), new MobileDataPreferenceController(context, KEY_MOBILE_DATA_PREF, - getSettingsLifecycle(), this, mSubId), - new ConvertToEsimPreferenceController(context, KEY_CONVERT_TO_ESIM_PREF, getSettingsLifecycle(), this, mSubId)); } @@ -188,8 +185,14 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme super.onAttach(context); if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { - Log.d(LOG_TAG, "Invalid subId request " + mSubId); - return; + Log.d(LOG_TAG, "Invalid subId, get the default subscription to show."); + SubscriptionInfo info = SubscriptionUtil.getSubscriptionOrDefault(context, mSubId); + if (info == null) { + Log.d(LOG_TAG, "Invalid subId request " + mSubId); + return; + } + mSubId = info.getSubscriptionId(); + Log.d(LOG_TAG, "Show NetworkSettings fragment for subId" + mSubId); } Intent intent = getIntent(); @@ -291,7 +294,11 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme use(ContactDiscoveryPreferenceController.class).init(getParentFragmentManager(), mSubId); use(NrAdvancedCallingPreferenceController.class).init(mSubId); use(TransferEsimPreferenceController.class).init(mSubId, mSubscriptionInfoEntity); - use(ConvertToEsimPreferenceController.class).init(mSubId, mSubscriptionInfoEntity); + final ConvertToEsimPreferenceController convertToEsimPreferenceController = + use(ConvertToEsimPreferenceController.class); + if (convertToEsimPreferenceController != null) { + convertToEsimPreferenceController.init(mSubId, mSubscriptionInfoEntity); + } } @Override @@ -321,7 +328,6 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme } private void onSubscriptionDetailChanged() { - if (mSubscriptionInfoEntity != null) { /** * Update the title when SIM stats got changed @@ -451,7 +457,7 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme ContactDiscoveryDialogFragment fragment = getContactDiscoveryFragment(mSubId); if (mSubscriptionInfoEntity == null) { - Log.d(LOG_TAG, "Zoey, showContactDiscoveryDialog, Invalid subId request " + mSubId); + Log.d(LOG_TAG, "showContactDiscoveryDialog, Invalid subId request " + mSubId); onDestroy(); return; } @@ -488,13 +494,20 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme } mSubInfoEntityList = subInfoEntityList; - mSubInfoEntityList.forEach(entity -> { + SubscriptionInfoEntity[] entityArray = mSubInfoEntityList.toArray( + new SubscriptionInfoEntity[0]); + for (SubscriptionInfoEntity entity : entityArray) { int subId = Integer.parseInt(entity.subId); mSubscriptionInfoMap.put(subId, entity); - if (subId == mSubId) { + if (mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID && subId == mSubId) { mSubscriptionInfoEntity = entity; - onSubscriptionDetailChanged(); + Log.d(LOG_TAG, "Set subInfo for subId " + mSubId); + break; + } else if (entity.isDefaultSubscriptionSelection) { + mSubscriptionInfoEntity = entity; + Log.d(LOG_TAG, "Set subInfo to the default subInfo."); } - }); + } + onSubscriptionDetailChanged(); } }