Merge "[Settings] 1. Show default subId SIM page if get an intent with invalid subId 2. Fix the hotswap UI issue" into udc-dev am: 25b2c5a63c

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/21947524

Change-Id: I4dc8aa7aa34749795ee5341bbd92b2c8b50e4d23
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
TreeHugger Robot
2023-03-13 12:13:21 +00:00
committed by Automerger Merge Worker
5 changed files with 64 additions and 39 deletions

View File

@@ -179,7 +179,7 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
} }
private void addRegisterBySubId(int subId) { private void addRegisterBySubId(int subId) {
if (!mTelephonyCallbackMap.containsKey(subId)) { if (!mTelephonyCallbackMap.containsKey(subId) || !mTelephonyManagerMap.containsKey(subId)) {
PhoneCallStateTelephonyCallback PhoneCallStateTelephonyCallback
telephonyCallback = new PhoneCallStateTelephonyCallback(); telephonyCallback = new PhoneCallStateTelephonyCallback();
mTelephonyManager.registerTelephonyCallback(mContext.getMainExecutor(), mTelephonyManager.registerTelephonyCallback(mContext.getMainExecutor(),
@@ -435,8 +435,6 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
getUiccInfoBySubscriptionInfo(uiccSlotInfos, subInfo); getUiccInfoBySubscriptionInfo(uiccSlotInfos, subInfo);
SubscriptionInfo firstRemovableSubInfo = SubscriptionUtil.getFirstRemovableSubscription( SubscriptionInfo firstRemovableSubInfo = SubscriptionUtil.getFirstRemovableSubscription(
context); context);
SubscriptionInfo subscriptionOrDefault = SubscriptionUtil.getSubscriptionOrDefault(
context, mSubId);
if(DEBUG){ if(DEBUG){
Log.d(TAG, "convert subscriptionInfo to entity for subId = " + mSubId); Log.d(TAG, "convert subscriptionInfo to entity for subId = " + mSubId);
} }
@@ -455,8 +453,7 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
firstRemovableSubInfo == null ? false firstRemovableSubInfo == null ? false
: firstRemovableSubInfo.getSubscriptionId() == mSubId, : firstRemovableSubInfo.getSubscriptionId() == mSubId,
String.valueOf(SubscriptionUtil.getDefaultSimConfig(context, mSubId)), String.valueOf(SubscriptionUtil.getDefaultSimConfig(context, mSubId)),
subscriptionOrDefault == null ? false SubscriptionUtil.isDefaultSubscription(context, mSubId),
: subscriptionOrDefault.getSubscriptionId() == mSubId,
mSubscriptionManager.isValidSubscriptionId(mSubId), mSubscriptionManager.isValidSubscriptionId(mSubId),
mSubscriptionManager.isUsableSubscriptionId(mSubId), mSubscriptionManager.isUsableSubscriptionId(mSubId),
mSubscriptionManager.isActiveSubscriptionId(mSubId), mSubscriptionManager.isActiveSubscriptionId(mSubId),
@@ -540,11 +537,11 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
SubscriptionUtil.getSelectableSubscriptionInfoList(mContext)); SubscriptionUtil.getSelectableSubscriptionInfoList(mContext));
} }
private void insertAvailableSubInfoToEntity(List<SubscriptionInfo> availableInfoList) { private void insertAvailableSubInfoToEntity(List<SubscriptionInfo> inputAvailableInfoList) {
sExecutor.execute(() -> { sExecutor.execute(() -> {
SubscriptionInfoEntity[] availableInfoArray = mAvailableSubInfoEntityList.toArray( SubscriptionInfoEntity[] availableInfoArray = mAvailableSubInfoEntityList.toArray(
new SubscriptionInfoEntity[0]); new SubscriptionInfoEntity[0]);
if ((availableInfoList == null || availableInfoList.size() == 0) if ((inputAvailableInfoList == null || inputAvailableInfoList.size() == 0)
&& mAvailableSubInfoEntityList.size() != 0) { && mAvailableSubInfoEntityList.size() != 0) {
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "availableSudInfoList from framework is empty, remove all subs"); Log.d(TAG, "availableSudInfoList from framework is empty, remove all subs");
@@ -554,11 +551,12 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
deleteAllInfoBySubId(info.subId); deleteAllInfoBySubId(info.subId);
} }
} else if (availableInfoList != null) { } else if (inputAvailableInfoList != null) {
SubscriptionInfo[] infoArray = availableInfoList.toArray(new SubscriptionInfo[0]); SubscriptionInfo[] inputAvailableInfoArray = inputAvailableInfoList.toArray(
new SubscriptionInfo[0]);
// Remove the redundant subInfo // Remove the redundant subInfo
if (availableInfoList.size() <= mAvailableSubInfoEntityList.size()) { if (inputAvailableInfoList.size() <= mAvailableSubInfoEntityList.size()) {
for (SubscriptionInfo subInfo : infoArray) { for (SubscriptionInfo subInfo : inputAvailableInfoArray) {
int subId = subInfo.getSubscriptionId(); int subId = subInfo.getSubscriptionId();
if (mSubscriptionInfoMap.containsKey(subId)) { if (mSubscriptionInfoMap.containsKey(subId)) {
mSubscriptionInfoMap.remove(subId); mSubscriptionInfoMap.remove(subId);
@@ -571,11 +569,20 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
deleteAllInfoBySubId(String.valueOf(key)); 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. // Insert all new available subInfo to database.
for (SubscriptionInfo subInfo : infoArray) { for (SubscriptionInfo subInfo : inputAvailableInfoArray) {
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "insert subInfo to subInfoEntity, subInfo = " + subInfo); Log.d(TAG, "insert subInfo to subInfoEntity, subInfo = " + subInfo);
} }

View File

@@ -101,7 +101,9 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl
return setSummaryResId(R.string.calls_sms_no_sim); return setSummaryResId(R.string.calls_sms_no_sim);
} else { } else {
final StringBuilder summary = new StringBuilder(); 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 subsSize = list.size();
int subId = Integer.parseInt(subInfo.subId); int subId = Integer.parseInt(subInfo.subId);
final CharSequence displayName = subInfo.uniqueName; final CharSequence displayName = subInfo.uniqueName;
@@ -125,7 +127,7 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl
.append(")"); .append(")");
} }
// Do not add ", " for the last subscription. // 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(", "); summary.append(", ");
} }

View File

@@ -688,6 +688,12 @@ public class SubscriptionUtil {
.findFirst().orElse(null); .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) { public static SubscriptionInfo getSubscriptionOrDefault(Context context, int subscriptionId) {
return getSubscription(context, subscriptionId, return getSubscription(context, subscriptionId,
(subscriptionId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) ? null : ( (subscriptionId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) ? null : (

View File

@@ -114,15 +114,12 @@ public class ConvertToEsimPreferenceController extends TelephonyBasePreferenceCo
@Override @Override
public void onActiveSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) { public void onActiveSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) {
// TODO(b/262195754): Need the intent to enabled the feature. // TODO(b/262195754): Need the intent to enabled the feature.
// if (DataServiceUtils.shouldUpdateEntityList(mSubscriptionInfoEntityList, // mSubscriptionInfoEntityList = subInfoEntityList;
// subInfoEntityList)) { // mSubscriptionInfoEntityList.forEach(entity -> {
// mSubscriptionInfoEntityList = subInfoEntityList; // if (Integer.parseInt(entity.subId) == mSubId) {
// mSubscriptionInfoEntityList.forEach(entity -> { // mSubscriptionInfoEntity = entity;
// if (Integer.parseInt(entity.subId) == mSubId) { // update();
// mSubscriptionInfoEntity = entity; // }
// update(); // });
// }
// });
// }
} }
} }

View File

@@ -23,6 +23,7 @@ import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.os.UserManager; import android.os.UserManager;
import android.provider.Settings; import android.provider.Settings;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.text.TextUtils; import android.text.TextUtils;
@@ -150,7 +151,7 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme
MobileNetworkUtils.getSearchableSubscriptionId(context)); MobileNetworkUtils.getSearchableSubscriptionId(context));
Log.d(LOG_TAG, "display subId from intent: " + mSubId); Log.d(LOG_TAG, "display subId from intent: " + mSubId);
} else { } 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 { } else {
mSubId = getArguments().getInt(Settings.EXTRA_SUB_ID, mSubId = getArguments().getInt(Settings.EXTRA_SUB_ID,
@@ -165,9 +166,7 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme
mMobileNetworkRepository.queryMobileNetworkInfoBySubId( mMobileNetworkRepository.queryMobileNetworkInfoBySubId(
String.valueOf(mSubId)); String.valueOf(mSubId));
}); });
if (mSubId <= SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
return Arrays.asList();
}
return Arrays.asList( return Arrays.asList(
new DataUsageSummaryPreferenceController(getActivity(), getSettingsLifecycle(), new DataUsageSummaryPreferenceController(getActivity(), getSettingsLifecycle(),
this, mSubId), this, mSubId),
@@ -178,8 +177,6 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme
new SmsDefaultSubscriptionController(context, KEY_SMS_PREF, getSettingsLifecycle(), new SmsDefaultSubscriptionController(context, KEY_SMS_PREF, getSettingsLifecycle(),
this), this),
new MobileDataPreferenceController(context, KEY_MOBILE_DATA_PREF, new MobileDataPreferenceController(context, KEY_MOBILE_DATA_PREF,
getSettingsLifecycle(), this, mSubId),
new ConvertToEsimPreferenceController(context, KEY_CONVERT_TO_ESIM_PREF,
getSettingsLifecycle(), this, mSubId)); getSettingsLifecycle(), this, mSubId));
} }
@@ -188,8 +185,14 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme
super.onAttach(context); super.onAttach(context);
if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
Log.d(LOG_TAG, "Invalid subId request " + mSubId); Log.d(LOG_TAG, "Invalid subId, get the default subscription to show.");
return; 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(); Intent intent = getIntent();
@@ -291,7 +294,11 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme
use(ContactDiscoveryPreferenceController.class).init(getParentFragmentManager(), mSubId); use(ContactDiscoveryPreferenceController.class).init(getParentFragmentManager(), mSubId);
use(NrAdvancedCallingPreferenceController.class).init(mSubId); use(NrAdvancedCallingPreferenceController.class).init(mSubId);
use(TransferEsimPreferenceController.class).init(mSubId, mSubscriptionInfoEntity); 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 @Override
@@ -321,7 +328,6 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme
} }
private void onSubscriptionDetailChanged() { private void onSubscriptionDetailChanged() {
if (mSubscriptionInfoEntity != null) { if (mSubscriptionInfoEntity != null) {
/** /**
* Update the title when SIM stats got changed * Update the title when SIM stats got changed
@@ -451,7 +457,7 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme
ContactDiscoveryDialogFragment fragment = getContactDiscoveryFragment(mSubId); ContactDiscoveryDialogFragment fragment = getContactDiscoveryFragment(mSubId);
if (mSubscriptionInfoEntity == null) { if (mSubscriptionInfoEntity == null) {
Log.d(LOG_TAG, "Zoey, showContactDiscoveryDialog, Invalid subId request " + mSubId); Log.d(LOG_TAG, "showContactDiscoveryDialog, Invalid subId request " + mSubId);
onDestroy(); onDestroy();
return; return;
} }
@@ -488,13 +494,20 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme
} }
mSubInfoEntityList = subInfoEntityList; mSubInfoEntityList = subInfoEntityList;
mSubInfoEntityList.forEach(entity -> { SubscriptionInfoEntity[] entityArray = mSubInfoEntityList.toArray(
new SubscriptionInfoEntity[0]);
for (SubscriptionInfoEntity entity : entityArray) {
int subId = Integer.parseInt(entity.subId); int subId = Integer.parseInt(entity.subId);
mSubscriptionInfoMap.put(subId, entity); mSubscriptionInfoMap.put(subId, entity);
if (subId == mSubId) { if (mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID && subId == mSubId) {
mSubscriptionInfoEntity = entity; 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();
} }
} }