[Settings] Do not insert subInfo repeatedly

Bug: 264322977
Test: manual
Change-Id: If1e9144c9d682befe5bccd3fa506ad82e2807b09
This commit is contained in:
Zoey Chen
2023-01-16 09:54:21 +00:00
parent a09f21b156
commit 4fab96ffe5
9 changed files with 162 additions and 159 deletions

View File

@@ -45,7 +45,6 @@ import com.android.settings.widget.SummaryUpdater;
import com.android.settings.wifi.WifiSummaryUpdater; import com.android.settings.wifi.WifiSummaryUpdater;
import com.android.settingslib.Utils; import com.android.settingslib.Utils;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.mobile.dataservice.DataServiceUtils;
import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity; import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity;
import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity; import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity;
import com.android.settingslib.mobile.dataservice.UiccInfoEntity; import com.android.settingslib.mobile.dataservice.UiccInfoEntity;
@@ -238,10 +237,8 @@ public class InternetPreferenceController extends AbstractPreferenceController i
@Override @Override
public void onAvailableSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) { public void onAvailableSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) {
if (DataServiceUtils.shouldUpdateEntityList(mSubInfoEntityList, subInfoEntityList)) { mSubInfoEntityList = subInfoEntityList;
mSubInfoEntityList = subInfoEntityList; updateState(mPreference);
updateState(mPreference);
}
} }
@Override @Override

View File

@@ -42,7 +42,6 @@ import android.util.Log;
import com.android.settings.network.telephony.MobileNetworkUtils; import com.android.settings.network.telephony.MobileNetworkUtils;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.mobile.dataservice.DataServiceUtils;
import com.android.settingslib.mobile.dataservice.MobileNetworkDatabase; import com.android.settingslib.mobile.dataservice.MobileNetworkDatabase;
import com.android.settingslib.mobile.dataservice.MobileNetworkInfoDao; import com.android.settingslib.mobile.dataservice.MobileNetworkInfoDao;
import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity; import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity;
@@ -53,7 +52,6 @@ import com.android.settingslib.mobile.dataservice.UiccInfoEntity;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
@@ -71,7 +69,12 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
private static final String TAG = "MobileNetworkRepository"; private static final String TAG = "MobileNetworkRepository";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
private final ExecutorService mExecutor = Executors.newSingleThreadExecutor(); private static ExecutorService sExecutor = Executors.newSingleThreadExecutor();
private static Map<String, SubscriptionInfoEntity> sCacheSubscriptionInfoEntityMap =
new ArrayMap<>();
private static Map<String, MobileNetworkInfoEntity> sCacheMobileNetworkInfoEntityMap =
new ArrayMap<>();
private static Map<String, UiccInfoEntity> sCacheUiccInfoEntityMap = new ArrayMap<>();
private SubscriptionManager mSubscriptionManager; private SubscriptionManager mSubscriptionManager;
private TelephonyManager mTelephonyManager; private TelephonyManager mTelephonyManager;
@@ -130,8 +133,8 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
mDataContentObserver = new MobileDataContentObserver( mDataContentObserver = new MobileDataContentObserver(
new Handler(Looper.getMainLooper())); new Handler(Looper.getMainLooper()));
mDataContentObserver.setOnMobileDataChangedListener(() -> { mDataContentObserver.setOnMobileDataChangedListener(() -> {
mExecutor.execute(() -> { sExecutor.execute(() -> {
insertMobileNetworkInfo(context); insertMobileNetworkInfo(context, String.valueOf(mSubId));
}); });
}); });
mFilter.addAction(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED); mFilter.addAction(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED);
@@ -192,19 +195,25 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
} }
private void observeAllSubInfo(LifecycleOwner lifecycleOwner) { private void observeAllSubInfo(LifecycleOwner lifecycleOwner) {
Log.d(TAG, "Observe subInfo."); if (DEBUG) {
Log.d(TAG, "Observe subInfo.");
}
mMobileNetworkDatabase.queryAvailableSubInfos().observe( mMobileNetworkDatabase.queryAvailableSubInfos().observe(
lifecycleOwner, this::onAvailableSubInfoChanged); lifecycleOwner, this::onAvailableSubInfoChanged);
} }
private void observeAllUiccInfo(LifecycleOwner lifecycleOwner) { private void observeAllUiccInfo(LifecycleOwner lifecycleOwner) {
Log.d(TAG, "Observe UICC info."); if (DEBUG) {
Log.d(TAG, "Observe UICC info.");
}
mMobileNetworkDatabase.queryAllUiccInfo().observe( mMobileNetworkDatabase.queryAllUiccInfo().observe(
lifecycleOwner, this::onAllUiccInfoChanged); lifecycleOwner, this::onAllUiccInfoChanged);
} }
private void observeAllMobileNetworkInfo(LifecycleOwner lifecycleOwner) { private void observeAllMobileNetworkInfo(LifecycleOwner lifecycleOwner) {
Log.d(TAG, "Observe mobile network info."); if (DEBUG) {
Log.d(TAG, "Observe mobile network info.");
}
mMobileNetworkDatabase.queryAllMobileNetworkInfo().observe( mMobileNetworkDatabase.queryAllMobileNetworkInfo().observe(
lifecycleOwner, this::onAllMobileNetworkInfoChanged); lifecycleOwner, this::onAllMobileNetworkInfoChanged);
} }
@@ -321,35 +330,44 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
} }
public void insertSubInfo(Context context, SubscriptionInfo info) { public void insertSubInfo(Context context, SubscriptionInfo info) {
mExecutor.execute(() -> { SubscriptionInfoEntity subInfoEntity =
SubscriptionInfoEntity subInfoEntity = convertToSubscriptionInfoEntity(context, info);
convertToSubscriptionInfoEntity(context, info); String subId = String.valueOf(mSubId);
if (subInfoEntity != null) { if (subInfoEntity != null) {
int subId = info.getSubscriptionId(); if (!sCacheSubscriptionInfoEntityMap.containsKey(subId)
mSubscriptionInfoMap.put(subId, info); || (sCacheSubscriptionInfoEntityMap.get(subId) != null
&& !sCacheSubscriptionInfoEntityMap.get(subId).equals(subInfoEntity))) {
sCacheSubscriptionInfoEntityMap.put(subId, subInfoEntity);
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "convert subId " + subId + "to SubscriptionInfoEntity: " Log.d(TAG, "convert subId " + subId + "to SubscriptionInfoEntity: "
+ subInfoEntity); + subInfoEntity);
} }
mMobileNetworkDatabase.insertSubsInfo(subInfoEntity); mMobileNetworkDatabase.insertSubsInfo(subInfoEntity);
insertUiccInfo(subId);
insertMobileNetworkInfo(context, subId);
mMetricsFeatureProvider.action(mContext, mMetricsFeatureProvider.action(mContext,
SettingsEnums.ACTION_MOBILE_NETWORK_DB_INSERT_SUB_INFO); SettingsEnums.ACTION_MOBILE_NETWORK_DB_INSERT_SUB_INFO);
} else if (DEBUG) { } else if (DEBUG) {
Log.d(TAG, "Can not insert subInfo, the entity is null"); Log.d(TAG, "Can not insert subInfo, the entity is null");
} }
}); }
} }
public void deleteAllInfoBySubId(String subId) { public void deleteAllInfoBySubId(String subId) {
mExecutor.execute(() -> { if (DEBUG) {
mMobileNetworkDatabase.deleteSubInfoBySubId(subId); Log.d(TAG, "deleteAllInfoBySubId, subId = " + subId);
mMobileNetworkDatabase.deleteUiccInfoBySubId(subId); }
mMobileNetworkDatabase.deleteMobileNetworkInfoBySubId(subId); mMobileNetworkDatabase.deleteSubInfoBySubId(subId);
}); mMobileNetworkDatabase.deleteUiccInfoBySubId(subId);
mMobileNetworkDatabase.deleteMobileNetworkInfoBySubId(subId);
mAvailableSubInfoEntityList.removeIf(info -> info.subId.equals(subId)); mAvailableSubInfoEntityList.removeIf(info -> info.subId.equals(subId));
mActiveSubInfoEntityList.removeIf(info -> info.subId.equals(subId)); mActiveSubInfoEntityList.removeIf(info -> info.subId.equals(subId));
mUiccInfoEntityList.removeIf(info -> info.subId.equals(subId)); mUiccInfoEntityList.removeIf(info -> info.subId.equals(subId));
mMobileNetworkInfoEntityList.removeIf(info -> info.subId.equals(subId)); mMobileNetworkInfoEntityList.removeIf(info -> info.subId.equals(subId));
mSubscriptionInfoMap.remove(Integer.parseInt(subId));
sCacheSubscriptionInfoEntityMap.remove(subId);
sCacheUiccInfoEntityMap.remove(subId);
sCacheMobileNetworkInfoEntityMap.remove(subId);
mMetricsFeatureProvider.action(mContext, mMetricsFeatureProvider.action(mContext,
SettingsEnums.ACTION_MOBILE_NETWORK_DB_DELETE_DATA); SettingsEnums.ACTION_MOBILE_NETWORK_DB_DELETE_DATA);
} }
@@ -368,8 +386,6 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
return null; return null;
} else { } else {
getUiccInfoBySubscriptionInfo(uiccSlotInfos, subInfo); getUiccInfoBySubscriptionInfo(uiccSlotInfos, subInfo);
insertUiccInfo();
insertMobileNetworkInfo(context);
SubscriptionInfo firstRemovableSubInfo = SubscriptionUtil.getFirstRemovableSubscription( SubscriptionInfo firstRemovableSubInfo = SubscriptionUtil.getFirstRemovableSubscription(
context); context);
SubscriptionInfo subscriptionOrDefault = SubscriptionUtil.getSubscriptionOrDefault( SubscriptionInfo subscriptionOrDefault = SubscriptionUtil.getSubscriptionOrDefault(
@@ -406,24 +422,32 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
} }
} }
public void insertUiccInfo() { public void insertUiccInfo(String subId) {
UiccInfoEntity uiccInfoEntity = convertToUiccInfoEntity(); UiccInfoEntity uiccInfoEntity = convertToUiccInfoEntity();
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "uiccInfoEntity = " + uiccInfoEntity); Log.d(TAG, "uiccInfoEntity = " + uiccInfoEntity);
} }
mMobileNetworkDatabase.insertUiccInfo(uiccInfoEntity); if (!sCacheUiccInfoEntityMap.containsKey(subId)
mMetricsFeatureProvider.action(mContext, || !sCacheUiccInfoEntityMap.get(subId).equals(uiccInfoEntity)) {
SettingsEnums.ACTION_MOBILE_NETWORK_DB_INSERT_UICC_INFO); sCacheUiccInfoEntityMap.put(subId, uiccInfoEntity);
mMobileNetworkDatabase.insertUiccInfo(uiccInfoEntity);
mMetricsFeatureProvider.action(mContext,
SettingsEnums.ACTION_MOBILE_NETWORK_DB_INSERT_UICC_INFO);
}
} }
public void insertMobileNetworkInfo(Context context) { public void insertMobileNetworkInfo(Context context, String subId) {
MobileNetworkInfoEntity mobileNetworkInfoEntity = convertToMobileNetworkInfoEntity(context); MobileNetworkInfoEntity mobileNetworkInfoEntity = convertToMobileNetworkInfoEntity(context);
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "mobileNetworkInfoEntity = " + mobileNetworkInfoEntity); Log.d(TAG, "mobileNetworkInfoEntity = " + mobileNetworkInfoEntity);
} }
mMobileNetworkDatabase.insertMobileNetworkInfo(mobileNetworkInfoEntity); if (!sCacheMobileNetworkInfoEntityMap.containsKey(subId)
mMetricsFeatureProvider.action(mContext, || !sCacheMobileNetworkInfoEntityMap.get(subId).equals(mobileNetworkInfoEntity)) {
SettingsEnums.ACTION_MOBILE_NETWORK_DB_INSERT_MOBILE_NETWORK_INFO); sCacheMobileNetworkInfoEntityMap.put(subId, mobileNetworkInfoEntity);
mMobileNetworkDatabase.insertMobileNetworkInfo(mobileNetworkInfoEntity);
mMetricsFeatureProvider.action(mContext,
SettingsEnums.ACTION_MOBILE_NETWORK_DB_INSERT_MOBILE_NETWORK_INFO);
}
} }
public MobileNetworkInfoEntity convertToMobileNetworkInfoEntity(Context context) { public MobileNetworkInfoEntity convertToMobileNetworkInfoEntity(Context context) {
@@ -468,42 +492,56 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
} }
private void insertAvailableSubInfoToEntity(List<SubscriptionInfo> availableInfoList) { private void insertAvailableSubInfoToEntity(List<SubscriptionInfo> availableInfoList) {
if ((availableInfoList == null || availableInfoList.size() == 0) sExecutor.execute(() -> {
&& mAvailableSubInfoEntityList.size() != 0) {
if (DEBUG) {
Log.d(TAG, "availableSudInfoList from framework is empty, remove all subs");
}
SubscriptionInfoEntity[] availableInfoArray = mAvailableSubInfoEntityList.toArray( SubscriptionInfoEntity[] availableInfoArray = mAvailableSubInfoEntityList.toArray(
new SubscriptionInfoEntity[0]); new SubscriptionInfoEntity[0]);
for (SubscriptionInfoEntity info : availableInfoArray) { if ((availableInfoList == null || availableInfoList.size() == 0)
deleteAllInfoBySubId(info.subId); && mAvailableSubInfoEntityList.size() != 0) {
}
} else if (availableInfoList != null) {
SubscriptionInfo[] infoArray = availableInfoList.toArray(new SubscriptionInfo[0]);
for (SubscriptionInfo subInfo : infoArray) {
mSubscriptionInfoMap.remove(subInfo.getSubscriptionId());
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "insert subInfo to subInfoEntity, subInfo = " + subInfo); Log.d(TAG, "availableSudInfoList from framework is empty, remove all subs");
} }
if (subInfo.isEmbedded()
&& subInfo.getProfileClass() == PROFILE_CLASS_PROVISIONING) {
if (DEBUG) {
Log.d(TAG, "Do not insert the provision eSIM");
}
continue;
}
insertSubInfo(mContext, subInfo);
}
if (!mSubscriptionInfoMap.isEmpty()) { for (SubscriptionInfoEntity info : availableInfoArray) {
Iterator<Integer> iterator = mSubscriptionInfoMap.keySet().iterator(); deleteAllInfoBySubId(info.subId);
while (iterator.hasNext()) { }
deleteAllInfoBySubId(String.valueOf(iterator.next()));
} else if (availableInfoList != null) {
SubscriptionInfo[] infoArray = availableInfoList.toArray(new SubscriptionInfo[0]);
// Remove the redundant subInfo
if (availableInfoList.size() <= mAvailableSubInfoEntityList.size()) {
for (SubscriptionInfo subInfo : infoArray) {
int subId = subInfo.getSubscriptionId();
if (mSubscriptionInfoMap.containsKey(subId)) {
mSubscriptionInfoMap.remove(subId);
}
}
if (!mSubscriptionInfoMap.isEmpty()) {
for (Integer key : mSubscriptionInfoMap.keySet()) {
if (key != null) {
deleteAllInfoBySubId(String.valueOf(key));
}
}
}
}
// Insert all new available subInfo to database.
for (SubscriptionInfo subInfo : infoArray) {
if (DEBUG) {
Log.d(TAG, "insert subInfo to subInfoEntity, subInfo = " + subInfo);
}
if (subInfo.isEmbedded()
&& subInfo.getProfileClass() == PROFILE_CLASS_PROVISIONING) {
if (DEBUG) {
Log.d(TAG, "Do not insert the provision eSIM");
}
continue;
}
mSubscriptionInfoMap.put(mSubId, subInfo);
insertSubInfo(mContext, subInfo);
} }
} }
} });
} }
public boolean isAirplaneModeOn() { public boolean isAirplaneModeOn() {

View File

@@ -41,7 +41,6 @@ import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.Utils; import com.android.settingslib.Utils;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.mobile.dataservice.DataServiceUtils;
import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity; import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity;
import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity; import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity;
import com.android.settingslib.mobile.dataservice.UiccInfoEntity; import com.android.settingslib.mobile.dataservice.UiccInfoEntity;
@@ -203,10 +202,8 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController
@Override @Override
public void onAvailableSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) { public void onAvailableSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) {
if (DataServiceUtils.shouldUpdateEntityList(mSubInfoEntityList, subInfoEntityList)) { mSubInfoEntityList = subInfoEntityList;
mSubInfoEntityList = subInfoEntityList; update();
update();
}
} }
@Override @Override
@@ -215,19 +212,14 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController
@Override @Override
public void onAllUiccInfoChanged(List<UiccInfoEntity> uiccInfoEntityList) { public void onAllUiccInfoChanged(List<UiccInfoEntity> uiccInfoEntityList) {
if (DataServiceUtils.shouldUpdateEntityList(mUiccInfoEntityList, uiccInfoEntityList)) { mUiccInfoEntityList = uiccInfoEntityList;
mUiccInfoEntityList = uiccInfoEntityList; update();
update();
}
} }
@Override @Override
public void onAllMobileNetworkInfoChanged( public void onAllMobileNetworkInfoChanged(
List<MobileNetworkInfoEntity> mobileNetworkInfoEntityList) { List<MobileNetworkInfoEntity> mobileNetworkInfoEntityList) {
if (DataServiceUtils.shouldUpdateEntityList(mMobileNetworkInfoEntityList, mMobileNetworkInfoEntityList = mobileNetworkInfoEntityList;
mobileNetworkInfoEntityList)) { update();
mMobileNetworkInfoEntityList = mobileNetworkInfoEntityList;
update();
}
} }
} }

View File

@@ -37,7 +37,6 @@ import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.Utils; import com.android.settingslib.Utils;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.mobile.dataservice.DataServiceUtils;
import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity; import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity;
import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity; import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity;
import com.android.settingslib.mobile.dataservice.UiccInfoEntity; import com.android.settingslib.mobile.dataservice.UiccInfoEntity;
@@ -224,10 +223,8 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl
@Override @Override
public void onActiveSubInfoChanged(List<SubscriptionInfoEntity> activeSubInfoList) { public void onActiveSubInfoChanged(List<SubscriptionInfoEntity> activeSubInfoList) {
if (DataServiceUtils.shouldUpdateEntityList(mSubInfoEntityList, activeSubInfoList)) { mSubInfoEntityList = activeSubInfoList;
mSubInfoEntityList = activeSubInfoList; update();
update();
}
} }
@Override @Override

View File

@@ -38,7 +38,6 @@ import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.mobile.dataservice.DataServiceUtils;
import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity; import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity;
import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity; import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity;
import com.android.settingslib.mobile.dataservice.UiccInfoEntity; import com.android.settingslib.mobile.dataservice.UiccInfoEntity;
@@ -178,11 +177,9 @@ public class NetworkProviderSimListController extends AbstractPreferenceControll
@Override @Override
public void onAvailableSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) { public void onAvailableSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) {
if (DataServiceUtils.shouldUpdateEntityList(mSubInfoEntityList, subInfoEntityList)) { mSubInfoEntityList = subInfoEntityList;
mSubInfoEntityList = subInfoEntityList; mPreferenceCategory.setVisible(isAvailable());
mPreferenceCategory.setVisible(isAvailable()); update();
update();
}
} }
@Override @Override

View File

@@ -38,7 +38,6 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.network.MobileNetworkRepository; import com.android.settings.network.MobileNetworkRepository;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.mobile.dataservice.DataServiceUtils;
import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity; import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity;
import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity; import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity;
import com.android.settingslib.mobile.dataservice.UiccInfoEntity; import com.android.settingslib.mobile.dataservice.UiccInfoEntity;
@@ -308,11 +307,9 @@ public abstract class DefaultSubscriptionController extends TelephonyBasePrefere
@Override @Override
public void onActiveSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) { public void onActiveSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) {
if (DataServiceUtils.shouldUpdateEntityList(mSubInfoEntityList, subInfoEntityList)) { mSubInfoEntityList = subInfoEntityList;
mSubInfoEntityList = subInfoEntityList; updateEntries();
updateEntries(); refreshSummary(mPreference);
refreshSummary(mPreference);
}
} }
@Override @Override

View File

@@ -40,7 +40,6 @@ import com.android.settings.network.MobileDataContentObserver;
import com.android.settings.network.MobileNetworkRepository; import com.android.settings.network.MobileNetworkRepository;
import com.android.settings.wifi.WifiPickerTrackerHelper; import com.android.settings.wifi.WifiPickerTrackerHelper;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.mobile.dataservice.DataServiceUtils;
import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity; import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity;
import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity; import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity;
import com.android.settingslib.mobile.dataservice.UiccInfoEntity; import com.android.settingslib.mobile.dataservice.UiccInfoEntity;
@@ -243,21 +242,18 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon
@Override @Override
public void onActiveSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) { public void onActiveSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) {
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) {
mSubscriptionInfoEntity = entity;
}
});
if (mSubscriptionInfoEntity != null
&& mSubscriptionInfoEntity.isDefaultDataSubscription) {
mDefaultSubId = Integer.parseInt(mSubscriptionInfoEntity.subId);
} }
update(); });
refreshSummary(mPreference); if (mSubscriptionInfoEntity != null
&& mSubscriptionInfoEntity.isDefaultDataSubscription) {
mDefaultSubId = Integer.parseInt(mSubscriptionInfoEntity.subId);
} }
update();
refreshSummary(mPreference);
} }
@Override @Override
@@ -267,17 +263,14 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon
@Override @Override
public void onAllMobileNetworkInfoChanged( public void onAllMobileNetworkInfoChanged(
List<MobileNetworkInfoEntity> mobileNetworkInfoEntityList) { List<MobileNetworkInfoEntity> mobileNetworkInfoEntityList) {
if (DataServiceUtils.shouldUpdateEntityList(mMobileNetworkInfoEntityList, mMobileNetworkInfoEntityList = mobileNetworkInfoEntityList;
mobileNetworkInfoEntityList)) { mMobileNetworkInfoEntityList.forEach(entity -> {
mMobileNetworkInfoEntityList = mobileNetworkInfoEntityList; if (Integer.parseInt(entity.subId) == mSubId) {
mMobileNetworkInfoEntityList.forEach(entity -> { mMobileNetworkInfoEntity = entity;
if (Integer.parseInt(entity.subId) == mSubId) { update();
mMobileNetworkInfoEntity = entity; refreshSummary(mPreference);
update(); return;
refreshSummary(mPreference); }
return; });
}
});
}
} }
} }

View File

@@ -49,7 +49,6 @@ import com.android.settings.network.telephony.gsm.OpenNetworkSelectPagePreferenc
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.wifi.WifiPickerTrackerHelper; import com.android.settings.wifi.WifiPickerTrackerHelper;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.mobile.dataservice.DataServiceUtils;
import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity; import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity;
import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity; import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity;
import com.android.settingslib.mobile.dataservice.UiccInfoEntity; import com.android.settingslib.mobile.dataservice.UiccInfoEntity;
@@ -474,35 +473,32 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme
@Override @Override
public void onAvailableSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) { public void onAvailableSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) {
if (DataServiceUtils.shouldUpdateEntityList(mSubInfoEntityList, subInfoEntityList)) { // Check the current subId is existed or not, if so, finish it.
if (!mSubscriptionInfoMap.isEmpty()) {
// Check the current subId is existed or not, if so, finish it. // Check each subInfo and remove it in the map based on the new list.
if (!mSubscriptionInfoMap.isEmpty()) { for (SubscriptionInfoEntity entity : subInfoEntityList) {
mSubscriptionInfoMap.remove(Integer.parseInt(entity.subId));
// Check each subInfo and remove it in the map based on the new list.
for (SubscriptionInfoEntity entity : subInfoEntityList) {
mSubscriptionInfoMap.remove(Integer.parseInt(entity.subId));
}
Iterator<Integer> iterator = mSubscriptionInfoMap.keySet().iterator();
while (iterator.hasNext()) {
if (iterator.next() == mSubId) {
finishFragment();
return;
}
}
} }
mSubInfoEntityList = subInfoEntityList; Iterator<Integer> iterator = mSubscriptionInfoMap.keySet().iterator();
mSubInfoEntityList.forEach(entity -> { while (iterator.hasNext()) {
int subId = Integer.parseInt(entity.subId); if (iterator.next() == mSubId) {
mSubscriptionInfoMap.put(subId, entity); finishFragment();
if (subId == mSubId) { return;
mSubscriptionInfoEntity = entity;
onSubscriptionDetailChanged();
} }
}); }
} }
mSubInfoEntityList = subInfoEntityList;
mSubInfoEntityList.forEach(entity -> {
int subId = Integer.parseInt(entity.subId);
mSubscriptionInfoMap.put(subId, entity);
if (subId == mSubId) {
mSubscriptionInfoEntity = entity;
onSubscriptionDetailChanged();
}
});
} }
@Override @Override

View File

@@ -40,7 +40,6 @@ import com.android.settings.network.GlobalSettingsChangeListener;
import com.android.settings.network.MobileNetworkRepository; import com.android.settings.network.MobileNetworkRepository;
import com.android.settingslib.RestrictedSwitchPreference; import com.android.settingslib.RestrictedSwitchPreference;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.mobile.dataservice.DataServiceUtils;
import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity; import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity;
import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity; import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity;
import com.android.settingslib.mobile.dataservice.UiccInfoEntity; import com.android.settingslib.mobile.dataservice.UiccInfoEntity;
@@ -257,17 +256,14 @@ public class RoamingPreferenceController extends TelephonyTogglePreferenceContro
@Override @Override
public void onAllMobileNetworkInfoChanged( public void onAllMobileNetworkInfoChanged(
List<MobileNetworkInfoEntity> mobileNetworkInfoEntityList) { List<MobileNetworkInfoEntity> mobileNetworkInfoEntityList) {
if (DataServiceUtils.shouldUpdateEntityList(mMobileNetworkInfoEntityList, mMobileNetworkInfoEntityList = mobileNetworkInfoEntityList;
mobileNetworkInfoEntityList)) { mMobileNetworkInfoEntityList.forEach(entity -> {
mMobileNetworkInfoEntityList = mobileNetworkInfoEntityList; if (Integer.parseInt(entity.subId) == mSubId) {
mMobileNetworkInfoEntityList.forEach(entity -> { mMobileNetworkInfoEntity = entity;
if (Integer.parseInt(entity.subId) == mSubId) { update();
mMobileNetworkInfoEntity = entity; refreshSummary(mSwitchPreference);
update(); return;
refreshSummary(mSwitchPreference); }
return; });
}
});
}
} }
} }