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

This commit is contained in:
TreeHugger Robot
2019-05-01 15:48:41 +00:00
committed by Android (Google) Code Review
3 changed files with 81 additions and 12 deletions

View File

@@ -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));
}
}
}
} }

View File

@@ -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);
}
}
} }

View File

@@ -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,9 +95,13 @@ 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
mWifiManager.disconnect(); // 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)); 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));
}
}
}
} }