Use ArrayMap to cache active subscriptions
Because we use ArrayMap to deduplicate active subscriptions.
Caching also needs to use ArrayMap, otherwise it will cause
index inconsistency.
Bug: 295124402
Change-Id: I4fa0efd1d35855d0ea7723ad6134213ab384cd4d
Signed-off-by: DingFei Song <v-dingfeisong@xiaomi.corp-partner.google.com>
diff --git a/src/com/android/settings/wifi/WifiConfigController2.java b/src/com/android/settings/wifi/WifiConfigController2.java
index d2daa00..b8db351 100644
--- a/src/com/android/settings/wifi/WifiConfigController2.java
+++ b/src/com/android/settings/wifi/WifiConfigController2.java
@@ -223,7 +223,7 @@
private final WifiManager mWifiManager;
private boolean mIsTrustOnFirstUseSupported;
- private final List<SubscriptionInfo> mActiveSubscriptionInfos = new ArrayList<>();
+ private final ArrayMap<Integer, SubscriptionInfo> mActiveSubscriptionInfos = new ArrayMap<>();
public WifiConfigController2(WifiConfigUiBase2 parent, View view, WifiEntry wifiEntry,
int mode) {
@@ -703,7 +703,7 @@
if (config.enterpriseConfig.isAuthenticationSimBased()
&& mActiveSubscriptionInfos.size() > 0) {
config.carrierId = mActiveSubscriptionInfos
- .get(mEapSimSpinner.getSelectedItemPosition()).getCarrierId();
+ .valueAt(mEapSimSpinner.getSelectedItemPosition()).getCarrierId();
}
String caCert = (String) mEapCaCertSpinner.getSelectedItem();
@@ -1114,11 +1114,9 @@
}
if (enterpriseConfig.isAuthenticationSimBased()) {
- for (int i = 0; i < mActiveSubscriptionInfos.size(); i++) {
- if (wifiConfig.carrierId == mActiveSubscriptionInfos.get(i).getCarrierId()) {
- mEapSimSpinner.setSelection(i);
- break;
- }
+ int index = mActiveSubscriptionInfos.indexOfKey(wifiConfig.carrierId);
+ if (index > -1) {
+ mEapSimSpinner.setSelection(index);
}
}
@@ -1476,18 +1474,8 @@
}
mActiveSubscriptionInfos.clear();
- // De-duplicates active subscriptions and caches in mActiveSubscriptionInfos.
- for (SubscriptionInfo newInfo : activeSubscriptionInfos) {
- for (SubscriptionInfo cachedInfo : mActiveSubscriptionInfos) {
- if (newInfo.getCarrierId() == cachedInfo.getCarrierId()) {
- continue;
- }
- }
- mActiveSubscriptionInfos.add(newInfo);
- }
-
// Shows disabled 'No SIM' when there is no active subscription.
- if (mActiveSubscriptionInfos.size() == 0) {
+ if (activeSubscriptionInfos.isEmpty()) {
final String[] noSim = new String[]{mContext.getString(R.string.wifi_no_sim_card)};
mEapSimSpinner.setAdapter(getSpinnerAdapter(noSim));
mEapSimSpinner.setSelection(0 /* position */);
@@ -1498,7 +1486,7 @@
// Shows display name of each active subscription.
ArrayMap<Integer, CharSequence> displayNames = new ArrayMap<>();
int defaultDataSubscriptionId = SubscriptionManager.getDefaultDataSubscriptionId();
- for (SubscriptionInfo activeSubInfo : mActiveSubscriptionInfos) {
+ for (SubscriptionInfo activeSubInfo : activeSubscriptionInfos) {
// If multiple SIMs have the same carrier id, only the first or default data SIM is
// displayed.
if (displayNames.containsKey(activeSubInfo.getCarrierId())
@@ -1507,6 +1495,7 @@
}
displayNames.put(activeSubInfo.getCarrierId(),
SubscriptionUtil.getUniqueSubscriptionDisplayName(activeSubInfo, mContext));
+ mActiveSubscriptionInfos.put(activeSubInfo.getCarrierId(), activeSubInfo);
}
mEapSimSpinner.setAdapter(
getSpinnerAdapter(displayNames.values().toArray(new String[displayNames.size()])));