Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 07f2e22d authored by DingFei Song's avatar DingFei Song
Browse files

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: default avatarDingFei Song <v-dingfeisong@xiaomi.corp-partner.google.com>
parent 137235a2
Loading
Loading
Loading
Loading
+8 −19
Original line number Diff line number Diff line
@@ -223,7 +223,7 @@ public class WifiConfigController2 implements TextWatcher,
    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 @@ 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<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 @@ 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()])));