[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.settingslib.Utils;
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.SubscriptionInfoEntity;
import com.android.settingslib.mobile.dataservice.UiccInfoEntity;
@@ -238,11 +237,9 @@ public class InternetPreferenceController extends AbstractPreferenceController i
@Override
public void onAvailableSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) {
if (DataServiceUtils.shouldUpdateEntityList(mSubInfoEntityList, subInfoEntityList)) {
mSubInfoEntityList = subInfoEntityList;
updateState(mPreference);
}
}
@Override
public void onActiveSubInfoChanged(List<SubscriptionInfoEntity> activeSubInfoList) {

View File

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

View File

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

View File

@@ -37,7 +37,6 @@ import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.Utils;
import com.android.settingslib.core.AbstractPreferenceController;
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.SubscriptionInfoEntity;
import com.android.settingslib.mobile.dataservice.UiccInfoEntity;
@@ -224,11 +223,9 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl
@Override
public void onActiveSubInfoChanged(List<SubscriptionInfoEntity> activeSubInfoList) {
if (DataServiceUtils.shouldUpdateEntityList(mSubInfoEntityList, activeSubInfoList)) {
mSubInfoEntityList = activeSubInfoList;
update();
}
}
@Override
public void onAllUiccInfoChanged(List<UiccInfoEntity> uiccInfoEntityList) {

View File

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

View File

@@ -38,7 +38,6 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.network.MobileNetworkRepository;
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.SubscriptionInfoEntity;
import com.android.settingslib.mobile.dataservice.UiccInfoEntity;
@@ -308,12 +307,10 @@ public abstract class DefaultSubscriptionController extends TelephonyBasePrefere
@Override
public void onActiveSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) {
if (DataServiceUtils.shouldUpdateEntityList(mSubInfoEntityList, subInfoEntityList)) {
mSubInfoEntityList = subInfoEntityList;
updateEntries();
refreshSummary(mPreference);
}
}
@Override
public void onAllUiccInfoChanged(List<UiccInfoEntity> uiccInfoEntityList) {

View File

@@ -40,7 +40,6 @@ import com.android.settings.network.MobileDataContentObserver;
import com.android.settings.network.MobileNetworkRepository;
import com.android.settings.wifi.WifiPickerTrackerHelper;
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.SubscriptionInfoEntity;
import com.android.settingslib.mobile.dataservice.UiccInfoEntity;
@@ -243,8 +242,6 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon
@Override
public void onActiveSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) {
if (DataServiceUtils.shouldUpdateEntityList(mSubscriptionInfoEntityList,
subInfoEntityList)) {
mSubscriptionInfoEntityList = subInfoEntityList;
mSubscriptionInfoEntityList.forEach(entity -> {
if (Integer.parseInt(entity.subId) == mSubId) {
@@ -258,7 +255,6 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon
update();
refreshSummary(mPreference);
}
}
@Override
public void onAllUiccInfoChanged(List<UiccInfoEntity> uiccInfoEntityList) {
@@ -267,8 +263,6 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon
@Override
public void onAllMobileNetworkInfoChanged(
List<MobileNetworkInfoEntity> mobileNetworkInfoEntityList) {
if (DataServiceUtils.shouldUpdateEntityList(mMobileNetworkInfoEntityList,
mobileNetworkInfoEntityList)) {
mMobileNetworkInfoEntityList = mobileNetworkInfoEntityList;
mMobileNetworkInfoEntityList.forEach(entity -> {
if (Integer.parseInt(entity.subId) == mSubId) {
@@ -280,4 +274,3 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon
});
}
}
}

View File

@@ -49,7 +49,6 @@ import com.android.settings.network.telephony.gsm.OpenNetworkSelectPagePreferenc
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.wifi.WifiPickerTrackerHelper;
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.SubscriptionInfoEntity;
import com.android.settingslib.mobile.dataservice.UiccInfoEntity;
@@ -474,8 +473,6 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme
@Override
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()) {
@@ -503,7 +500,6 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme
}
});
}
}
@Override
public void onActiveSubInfoChanged(List<SubscriptionInfoEntity> subInfoEntityList) {

View File

@@ -40,7 +40,6 @@ import com.android.settings.network.GlobalSettingsChangeListener;
import com.android.settings.network.MobileNetworkRepository;
import com.android.settingslib.RestrictedSwitchPreference;
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.SubscriptionInfoEntity;
import com.android.settingslib.mobile.dataservice.UiccInfoEntity;
@@ -257,8 +256,6 @@ public class RoamingPreferenceController extends TelephonyTogglePreferenceContro
@Override
public void onAllMobileNetworkInfoChanged(
List<MobileNetworkInfoEntity> mobileNetworkInfoEntityList) {
if (DataServiceUtils.shouldUpdateEntityList(mMobileNetworkInfoEntityList,
mobileNetworkInfoEntityList)) {
mMobileNetworkInfoEntityList = mobileNetworkInfoEntityList;
mMobileNetworkInfoEntityList.forEach(entity -> {
if (Integer.parseInt(entity.subId) == mSubId) {
@@ -270,4 +267,3 @@ public class RoamingPreferenceController extends TelephonyTogglePreferenceContro
});
}
}
}