From 07f2e22d26bfde12eadcdd52ef579a74f65c335b Mon Sep 17 00:00:00 2001 From: DingFei Song Date: Fri, 11 Aug 2023 10:47:48 +0800 Subject: [PATCH] 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 --- .../settings/wifi/WifiConfigController2.java | 27 ++++++------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/src/com/android/settings/wifi/WifiConfigController2.java b/src/com/android/settings/wifi/WifiConfigController2.java index d2daa00f644..b8db351a54c 100644 --- a/src/com/android/settings/wifi/WifiConfigController2.java +++ b/src/com/android/settings/wifi/WifiConfigController2.java @@ -223,7 +223,7 @@ public class WifiConfigController2 implements TextWatcher, private final WifiManager mWifiManager; private boolean mIsTrustOnFirstUseSupported; - private final List mActiveSubscriptionInfos = new ArrayList<>(); + private final ArrayMap mActiveSubscriptionInfos = new ArrayMap<>(); public WifiConfigController2(WifiConfigUiBase2 parent, View view, WifiEntry wifiEntry, int mode) { @@ -703,7 +703,7 @@ public class WifiConfigController2 implements TextWatcher, 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 @@ public class WifiConfigController2 implements TextWatcher, } 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 @@ public class WifiConfigController2 implements TextWatcher, } 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 @@ public class WifiConfigController2 implements TextWatcher, // Shows display name of each active subscription. ArrayMap 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 @@ public class WifiConfigController2 implements TextWatcher, } displayNames.put(activeSubInfo.getCarrierId(), SubscriptionUtil.getUniqueSubscriptionDisplayName(activeSubInfo, mContext)); + mActiveSubscriptionInfos.put(activeSubInfo.getCarrierId(), activeSubInfo); } mEapSimSpinner.setAdapter( getSpinnerAdapter(displayNames.values().toArray(new String[displayNames.size()])));