Fix modification of WifiDialog doesn't take effect on details page
When clicking modify menu option in detiails page, modification on metered or privacy preferences in the WifiDialog does not effect back to details page but only changing internal data of WifiDialog. Adding callback to update those two preferences. Bug: 130775713 Test: make RunSettingsRoboTests -j32 ROBOTEST_FILTER=com.android.settings.wifi.details.WifiDetailPreferenceControllerTest Change-Id: I74bfa5a9581dfae73894c3e9f73d1069a36fd16b
This commit is contained in:
@@ -24,19 +24,22 @@ import android.net.wifi.WifiManager;
|
|||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.preference.DropDownPreference;
|
import androidx.preference.DropDownPreference;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
import com.android.settings.core.BasePreferenceController;
|
import com.android.settings.core.BasePreferenceController;
|
||||||
|
import com.android.settings.wifi.WifiDialog;
|
||||||
import com.android.settingslib.core.AbstractPreferenceController;
|
import com.android.settingslib.core.AbstractPreferenceController;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link AbstractPreferenceController} that controls whether the wifi network is metered or not
|
* {@link AbstractPreferenceController} that controls whether the wifi network is metered or not
|
||||||
*/
|
*/
|
||||||
public class WifiMeteredPreferenceController extends BasePreferenceController implements
|
public class WifiMeteredPreferenceController extends BasePreferenceController implements
|
||||||
Preference.OnPreferenceChangeListener {
|
Preference.OnPreferenceChangeListener, WifiDialog.WifiDialogListener {
|
||||||
|
|
||||||
private static final String KEY_WIFI_METERED = "metered";
|
private static final String KEY_WIFI_METERED = "metered";
|
||||||
private WifiConfiguration mWifiConfiguration;
|
private WifiConfiguration mWifiConfiguration;
|
||||||
private WifiManager mWifiManager;
|
private WifiManager mWifiManager;
|
||||||
|
private Preference mPreference;
|
||||||
|
|
||||||
public WifiMeteredPreferenceController(Context context, WifiConfiguration wifiConfiguration) {
|
public WifiMeteredPreferenceController(Context context, WifiConfiguration wifiConfiguration) {
|
||||||
super(context, KEY_WIFI_METERED);
|
super(context, KEY_WIFI_METERED);
|
||||||
@@ -81,4 +84,25 @@ public class WifiMeteredPreferenceController extends BasePreferenceController im
|
|||||||
private void updateSummary(DropDownPreference preference, int meteredOverride) {
|
private void updateSummary(DropDownPreference preference, int meteredOverride) {
|
||||||
preference.setSummary(preference.getEntries()[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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -47,12 +47,14 @@ import java.util.List;
|
|||||||
* <p>The AccessPoint should be saved to the intent Extras when launching this class via
|
* <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.
|
* {@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 static final String TAG = "WifiNetworkDetailsFrg";
|
||||||
|
|
||||||
private AccessPoint mAccessPoint;
|
private AccessPoint mAccessPoint;
|
||||||
private WifiDetailPreferenceController mWifiDetailPreferenceController;
|
private WifiDetailPreferenceController mWifiDetailPreferenceController;
|
||||||
|
private List<WifiDialog.WifiDialogListener> mWifiDialogListeners = new ArrayList<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAttach(Context context) {
|
public void onAttach(Context context) {
|
||||||
@@ -89,7 +91,7 @@ public class WifiNetworkDetailsFragment extends DashboardFragment {
|
|||||||
|| mAccessPoint == null) {
|
|| mAccessPoint == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return WifiDialog.createModal(getActivity(), mWifiDetailPreferenceController, mAccessPoint,
|
return WifiDialog.createModal(getActivity(), this, mAccessPoint,
|
||||||
WifiConfigUiBase.MODE_MODIFY);
|
WifiConfigUiBase.MODE_MODIFY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,15 +137,31 @@ public class WifiNetworkDetailsFragment extends DashboardFragment {
|
|||||||
|
|
||||||
controllers.add(mWifiDetailPreferenceController);
|
controllers.add(mWifiDetailPreferenceController);
|
||||||
controllers.add(new AddDevicePreferenceController(context).init(mAccessPoint));
|
controllers.add(new AddDevicePreferenceController(context).init(mAccessPoint));
|
||||||
controllers.add(new WifiMeteredPreferenceController(context, mAccessPoint.getConfig()));
|
|
||||||
WifiPrivacyPreferenceController privacyController = new WifiPrivacyPreferenceController(
|
final WifiMeteredPreferenceController meteredPreferenceController =
|
||||||
context);
|
new WifiMeteredPreferenceController(context, mAccessPoint.getConfig());
|
||||||
|
controllers.add(meteredPreferenceController);
|
||||||
|
|
||||||
|
final WifiPrivacyPreferenceController privacyController =
|
||||||
|
new WifiPrivacyPreferenceController(context);
|
||||||
privacyController.setWifiConfiguration(mAccessPoint.getConfig());
|
privacyController.setWifiConfiguration(mAccessPoint.getConfig());
|
||||||
privacyController.setIsEphemeral(mAccessPoint.isEphemeral());
|
privacyController.setIsEphemeral(mAccessPoint.isEphemeral());
|
||||||
privacyController.setIsPasspoint(
|
privacyController.setIsPasspoint(
|
||||||
mAccessPoint.isPasspoint() || mAccessPoint.isPasspointConfig());
|
mAccessPoint.isPasspoint() || mAccessPoint.isPasspointConfig());
|
||||||
controllers.add(privacyController);
|
controllers.add(privacyController);
|
||||||
|
|
||||||
|
// Sets callback listener for wifi dialog.
|
||||||
|
mWifiDialogListeners.add(mWifiDetailPreferenceController);
|
||||||
|
mWifiDialogListeners.add(privacyController);
|
||||||
|
mWifiDialogListeners.add(meteredPreferenceController);
|
||||||
|
|
||||||
return controllers;
|
return controllers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSubmit(WifiDialog dialog) {
|
||||||
|
for (WifiDialog.WifiDialogListener listener : mWifiDialogListeners) {
|
||||||
|
listener.onSubmit(dialog);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -18,16 +18,17 @@ package com.android.settings.wifi.details;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.net.wifi.WifiConfiguration;
|
import android.net.wifi.WifiConfiguration;
|
||||||
|
import android.net.wifi.WifiInfo;
|
||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.util.FeatureFlagUtils;
|
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.preference.DropDownPreference;
|
import androidx.preference.DropDownPreference;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.core.BasePreferenceController;
|
import com.android.settings.core.BasePreferenceController;
|
||||||
import com.android.settings.core.FeatureFlags;
|
import com.android.settings.wifi.WifiDialog;
|
||||||
import com.android.settingslib.core.AbstractPreferenceController;
|
import com.android.settingslib.core.AbstractPreferenceController;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -35,13 +36,14 @@ import com.android.settingslib.core.AbstractPreferenceController;
|
|||||||
* or not
|
* or not
|
||||||
*/
|
*/
|
||||||
public class WifiPrivacyPreferenceController extends BasePreferenceController implements
|
public class WifiPrivacyPreferenceController extends BasePreferenceController implements
|
||||||
Preference.OnPreferenceChangeListener {
|
Preference.OnPreferenceChangeListener, WifiDialog.WifiDialogListener {
|
||||||
|
|
||||||
private static final String KEY_WIFI_PRIVACY = "privacy";
|
private static final String KEY_WIFI_PRIVACY = "privacy";
|
||||||
private WifiConfiguration mWifiConfiguration;
|
private WifiConfiguration mWifiConfiguration;
|
||||||
private WifiManager mWifiManager;
|
private WifiManager mWifiManager;
|
||||||
private boolean mIsEphemeral = false;
|
private boolean mIsEphemeral = false;
|
||||||
private boolean mIsPasspoint = false;
|
private boolean mIsPasspoint = false;
|
||||||
|
private Preference mPreference;
|
||||||
|
|
||||||
public WifiPrivacyPreferenceController(Context context) {
|
public WifiPrivacyPreferenceController(Context context) {
|
||||||
super(context, KEY_WIFI_PRIVACY);
|
super(context, KEY_WIFI_PRIVACY);
|
||||||
@@ -68,6 +70,12 @@ public class WifiPrivacyPreferenceController extends BasePreferenceController im
|
|||||||
AVAILABLE : CONDITIONALLY_UNAVAILABLE;
|
AVAILABLE : CONDITIONALLY_UNAVAILABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void displayPreference(PreferenceScreen screen) {
|
||||||
|
super.displayPreference(screen);
|
||||||
|
mPreference = screen.findPreference(getPreferenceKey());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateState(Preference preference) {
|
public void updateState(Preference preference) {
|
||||||
final DropDownPreference dropDownPreference = (DropDownPreference) preference;
|
final DropDownPreference dropDownPreference = (DropDownPreference) preference;
|
||||||
@@ -87,10 +95,14 @@ public class WifiPrivacyPreferenceController extends BasePreferenceController im
|
|||||||
if (mWifiConfiguration != null) {
|
if (mWifiConfiguration != null) {
|
||||||
mWifiConfiguration.macRandomizationSetting = Integer.parseInt((String) newValue);
|
mWifiConfiguration.macRandomizationSetting = Integer.parseInt((String) newValue);
|
||||||
mWifiManager.updateNetwork(mWifiConfiguration);
|
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();
|
mWifiManager.disconnect();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
updateSummary((DropDownPreference) preference, Integer.parseInt((String) newValue));
|
updateSummary((DropDownPreference) preference, Integer.parseInt((String) newValue));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -133,4 +145,19 @@ public class WifiPrivacyPreferenceController extends BasePreferenceController im
|
|||||||
final int prefMacRandomized = translateMacRandomizedValueToPrefValue(macRandomized);
|
final int prefMacRandomized = translateMacRandomizedValueToPrefValue(macRandomized);
|
||||||
preference.setSummary(preference.getEntries()[prefMacRandomized]);
|
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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user