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

Commit 4653879a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix modification of WifiDialog doesn't take effect on details page" into qt-dev

parents 30d0e6c7 636ad9d9
Loading
Loading
Loading
Loading
+25 −1
Original line number Diff line number Diff line
@@ -24,19 +24,22 @@ import android.net.wifi.WifiManager;
import androidx.annotation.VisibleForTesting;
import androidx.preference.DropDownPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;

import com.android.settings.core.BasePreferenceController;
import com.android.settings.wifi.WifiDialog;
import com.android.settingslib.core.AbstractPreferenceController;

/**
 * {@link AbstractPreferenceController} that controls whether the wifi network is metered or not
 */
public class WifiMeteredPreferenceController extends BasePreferenceController implements
        Preference.OnPreferenceChangeListener {
        Preference.OnPreferenceChangeListener, WifiDialog.WifiDialogListener {

    private static final String KEY_WIFI_METERED = "metered";
    private WifiConfiguration mWifiConfiguration;
    private WifiManager mWifiManager;
    private Preference mPreference;

    public WifiMeteredPreferenceController(Context context, WifiConfiguration wifiConfiguration) {
        super(context, KEY_WIFI_METERED);
@@ -81,4 +84,25 @@ public class WifiMeteredPreferenceController extends BasePreferenceController im
    private void updateSummary(DropDownPreference preference, int meteredOverride) {
        preference.setSummary(preference.getEntries()[meteredOverride]);
    }

    @Override
    public void displayPreference(PreferenceScreen screen) {
        super.displayPreference(screen);
        mPreference = screen.findPreference(getPreferenceKey());
    }

    @Override
    public void onSubmit(WifiDialog dialog) {
        if (dialog.getController() != null) {
            final WifiConfiguration newConfig = dialog.getController().getConfig();
            if (newConfig == null || mWifiConfiguration == null) {
                return;
            }

            if (newConfig.meteredOverride != mWifiConfiguration.meteredOverride) {
                mWifiConfiguration = newConfig;
                onPreferenceChange(mPreference, String.valueOf(newConfig.meteredOverride));
            }
        }
    }
}
+23 −5
Original line number Diff line number Diff line
@@ -47,12 +47,14 @@ import java.util.List;
 * <p>The AccessPoint should be saved to the intent Extras when launching this class via
 * {@link AccessPoint#saveWifiState(Bundle)} in order to properly render this page.
 */
public class WifiNetworkDetailsFragment extends DashboardFragment {
public class WifiNetworkDetailsFragment extends DashboardFragment implements
        WifiDialog.WifiDialogListener {

    private static final String TAG = "WifiNetworkDetailsFrg";

    private AccessPoint mAccessPoint;
    private WifiDetailPreferenceController mWifiDetailPreferenceController;
    private List<WifiDialog.WifiDialogListener> mWifiDialogListeners = new ArrayList<>();

    @Override
    public void onAttach(Context context) {
@@ -89,7 +91,7 @@ public class WifiNetworkDetailsFragment extends DashboardFragment {
                || mAccessPoint == null) {
            return null;
        }
        return WifiDialog.createModal(getActivity(), mWifiDetailPreferenceController, mAccessPoint,
        return WifiDialog.createModal(getActivity(), this, mAccessPoint,
                WifiConfigUiBase.MODE_MODIFY);
    }

@@ -135,15 +137,31 @@ public class WifiNetworkDetailsFragment extends DashboardFragment {

        controllers.add(mWifiDetailPreferenceController);
        controllers.add(new AddDevicePreferenceController(context).init(mAccessPoint));
        controllers.add(new WifiMeteredPreferenceController(context, mAccessPoint.getConfig()));
        WifiPrivacyPreferenceController privacyController = new WifiPrivacyPreferenceController(
                context);

        final WifiMeteredPreferenceController meteredPreferenceController =
                new WifiMeteredPreferenceController(context, mAccessPoint.getConfig());
        controllers.add(meteredPreferenceController);

        final WifiPrivacyPreferenceController privacyController =
                new WifiPrivacyPreferenceController(context);
        privacyController.setWifiConfiguration(mAccessPoint.getConfig());
        privacyController.setIsEphemeral(mAccessPoint.isEphemeral());
        privacyController.setIsPasspoint(
                mAccessPoint.isPasspoint() || mAccessPoint.isPasspointConfig());
        controllers.add(privacyController);

        // Sets callback listener for wifi dialog.
        mWifiDialogListeners.add(mWifiDetailPreferenceController);
        mWifiDialogListeners.add(privacyController);
        mWifiDialogListeners.add(meteredPreferenceController);

        return controllers;
    }

    @Override
    public void onSubmit(WifiDialog dialog) {
        for (WifiDialog.WifiDialogListener listener : mWifiDialogListeners) {
            listener.onSubmit(dialog);
        }
    }
}
+33 −6
Original line number Diff line number Diff line
@@ -18,16 +18,17 @@ package com.android.settings.wifi.details;

import android.content.Context;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.util.FeatureFlagUtils;

import androidx.annotation.VisibleForTesting;
import androidx.preference.DropDownPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;

import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.FeatureFlags;
import com.android.settings.wifi.WifiDialog;
import com.android.settingslib.core.AbstractPreferenceController;

/**
@@ -35,13 +36,14 @@ import com.android.settingslib.core.AbstractPreferenceController;
 * or not
 */
public class WifiPrivacyPreferenceController extends BasePreferenceController implements
        Preference.OnPreferenceChangeListener {
        Preference.OnPreferenceChangeListener, WifiDialog.WifiDialogListener {

    private static final String KEY_WIFI_PRIVACY = "privacy";
    private WifiConfiguration mWifiConfiguration;
    private WifiManager mWifiManager;
    private boolean mIsEphemeral = false;
    private boolean mIsPasspoint = false;
    private Preference mPreference;

    public WifiPrivacyPreferenceController(Context context) {
        super(context, KEY_WIFI_PRIVACY);
@@ -68,6 +70,12 @@ public class WifiPrivacyPreferenceController extends BasePreferenceController im
                AVAILABLE : CONDITIONALLY_UNAVAILABLE;
    }

    @Override
    public void displayPreference(PreferenceScreen screen) {
        super.displayPreference(screen);
        mPreference = screen.findPreference(getPreferenceKey());
    }

    @Override
    public void updateState(Preference preference) {
        final DropDownPreference dropDownPreference = (DropDownPreference) preference;
@@ -87,10 +95,14 @@ public class WifiPrivacyPreferenceController extends BasePreferenceController im
        if (mWifiConfiguration != null) {
            mWifiConfiguration.macRandomizationSetting = Integer.parseInt((String) newValue);
            mWifiManager.updateNetwork(mWifiConfiguration);
            // To activate changing, we need reconnect network. WiFi will auto connect to current
            // network after disconnect().

            // To activate changing, we need to reconnect network. WiFi will auto connect to
            // current network after disconnect(). Only needed when this is connected network.
            final WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
            if (wifiInfo != null && wifiInfo.getNetworkId() == mWifiConfiguration.networkId) {
                mWifiManager.disconnect();
            }
        }
        updateSummary((DropDownPreference) preference, Integer.parseInt((String) newValue));
        return true;
    }
@@ -133,4 +145,19 @@ public class WifiPrivacyPreferenceController extends BasePreferenceController im
        final int prefMacRandomized = translateMacRandomizedValueToPrefValue(macRandomized);
        preference.setSummary(preference.getEntries()[prefMacRandomized]);
    }

    @Override
    public void onSubmit(WifiDialog dialog) {
        if (dialog.getController() != null) {
            final WifiConfiguration newConfig = dialog.getController().getConfig();
            if (newConfig == null || mWifiConfiguration == null) {
                return;
            }

            if (newConfig.macRandomizationSetting != mWifiConfiguration.macRandomizationSetting) {
                mWifiConfiguration = newConfig;
                onPreferenceChange(mPreference, String.valueOf(newConfig.macRandomizationSetting));
            }
        }
    }
}