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

Commit ae727fbb authored by Peter Qiu's avatar Peter Qiu
Browse files

wifi: managed Passpoint configurations in "Saved Networks" page

Instead of going through WifiTracker to retrieve saved network
configurations (including both WiFi networks and Passpoint provider
configurations), use the WifiManager's APIs to retrieve the
configurations directly, to avoid any unnecessary complexities.

Also update to use the appropriate APIs for configuration removal
based on the configuration type.

Bug: 34207710
Test: manual test by removing a Passpoint configuration from
      "Saved Networks" page.

Change-Id: I549cc484d8825b6c38895428c1b7941390bb5f1f
parent 32924e2f
Loading
Loading
Loading
Loading
+49 −5
Original line number Diff line number Diff line
@@ -20,7 +20,9 @@ import android.app.Dialog;
import android.content.Context;
import android.content.res.Resources;
import android.icu.text.Collator;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.net.wifi.hotspot2.PasspointConfiguration;
import android.os.Bundle;
import android.provider.SearchIndexableResource;
import android.support.v7.preference.Preference;
@@ -110,8 +112,7 @@ public class SavedAccessPointsWifiSettings extends SettingsPreferenceFragment
        PreferenceScreen preferenceScreen = getPreferenceScreen();
        final Context context = getPrefContext();

        final List<AccessPoint> accessPoints = WifiTracker.getCurrentAccessPoints(context, true,
                false, true);
        final List<AccessPoint> accessPoints = getSavedConfigs(context, mWifiManager);
        Collections.sort(accessPoints, SAVED_NETWORK_COMPARATOR);
        preferenceScreen.removeAll();

@@ -129,6 +130,39 @@ public class SavedAccessPointsWifiSettings extends SettingsPreferenceFragment
        }
    }

    /**
     * Retrieved the list of saved network configurations from {@link WifiManager}.
     * Each configuration is represented by {@link AccessPoint}.
     *
     * @param context The application context
     * @param wifiManager An instance of {@link WifiManager}
     * @return List of {@link AccessPoint}
     */
    private static List<AccessPoint> getSavedConfigs(Context context, WifiManager wifiManager) {
        List<AccessPoint> savedConfigs = new ArrayList<>();
        List<WifiConfiguration> savedNetworks = wifiManager.getConfiguredNetworks();
        for (WifiConfiguration network : savedNetworks) {
            // Configuration for Passpoint network is configured temporary by WifiService for
            // connection attempt only.  The underlying configuration is saved as Passpoint
            // configuration, which will be retrieved with WifiManager#getPasspointConfiguration
            // call below.
            if (network.isPasspoint()) {
                continue;
            }
            savedConfigs.add(new AccessPoint(context, network));
        }
        try {
            List<PasspointConfiguration> savedPasspointConfigs =
                    wifiManager.getPasspointConfigurations();
            for (PasspointConfiguration config : savedPasspointConfigs) {
                savedConfigs.add(new AccessPoint(context, config));
            }
        } catch (UnsupportedOperationException e) {
            // Passpoint not supported.
        }
        return savedConfigs;
    }

    private void showDialog(LongPressAccessPointPreference accessPoint, boolean edit) {
        if (mDialog != null) {
            removeDialog(WifiSettings.WIFI_DIALOG_ID);
@@ -187,7 +221,17 @@ public class SavedAccessPointsWifiSettings extends SettingsPreferenceFragment
    @Override
    public void onForget(WifiDialog dialog) {
        if (mSelectedAccessPoint != null) {
            if (mSelectedAccessPoint.isPasspointConfig()) {
                try {
                    mWifiManager.removePasspointConfiguration(
                            mSelectedAccessPoint.getPasspointFqdn());
                } catch (RuntimeException e) {
                    Log.e(TAG, "Failed to remove Passpoint configuration for "
                            + mSelectedAccessPoint.getConfigName());
                }
            } else {
                mWifiManager.forget(mSelectedAccessPoint.getConfig().networkId, null);
            }
            mSelectedAccessPoint = null;
            initPreferences();
        }
@@ -235,8 +279,8 @@ public class SavedAccessPointsWifiSettings extends SettingsPreferenceFragment
                result.add(data);

                // Add available Wi-Fi access points
                final List<AccessPoint> accessPoints = WifiTracker.getCurrentAccessPoints(context,
                        true, false, true);
                final List<AccessPoint> accessPoints =
                        getSavedConfigs(context, context.getSystemService(WifiManager.class));

                final int accessPointsSize = accessPoints.size();
                for (int i = 0; i < accessPointsSize; ++i){
+9 −3
Original line number Diff line number Diff line
@@ -217,7 +217,11 @@ public class WifiConfigController implements TextWatcher,

            mConfigUi.setSubmitButton(res.getString(R.string.wifi_save));
        } else {
            if (!mAccessPoint.isPasspointConfig()) {
                mConfigUi.setTitle(mAccessPoint.getSsid());
            } else {
                mConfigUi.setTitle(mAccessPoint.getConfigName());
            }

            ViewGroup group = (ViewGroup) mView.findViewById(R.id.info);

@@ -258,7 +262,8 @@ public class WifiConfigController implements TextWatcher,
                }
            }

            if ((!mAccessPoint.isSaved() && !mAccessPoint.isActive())
            if ((!mAccessPoint.isSaved() && !mAccessPoint.isActive()
                    && !mAccessPoint.isPasspointConfig())
                    || mMode != WifiConfigUiBase.MODE_VIEW) {
                showSecurityFields();
                showIpConfigFields();
@@ -326,7 +331,8 @@ public class WifiConfigController implements TextWatcher,
                    addRow(group, R.string.wifi_security, mAccessPoint.getSecurityString(false));
                    mView.findViewById(R.id.ip_fields).setVisibility(View.GONE);
                }
                if (mAccessPoint.isSaved() || mAccessPoint.isActive()) {
                if (mAccessPoint.isSaved() || mAccessPoint.isActive()
                        || mAccessPoint.isPasspointConfig()) {
                    mConfigUi.setForgetButton(res.getString(R.string.wifi_forget));
                }
            }