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:
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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(", ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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 : (
|
||||||
|
@@ -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();
|
// });
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user