Add wifi metered controls in wifi settings.
1. Add it in wifi detail page 2. Add it in wifi dialog 2. Remove it in "Mobile network" page Bug: 68030417 Test: RunSettingsRoboTests Change-Id: I2e001c55f3c6c75a660e429732dfbece97b0ca9e
This commit is contained in:
@@ -146,11 +146,11 @@ public class WifiConfigController implements TextWatcher,
|
||||
private TextView mDns2View;
|
||||
|
||||
private Spinner mProxySettingsSpinner;
|
||||
private Spinner mMeteredSettingsSpinner;
|
||||
private TextView mProxyHostView;
|
||||
private TextView mProxyPortView;
|
||||
private TextView mProxyExclusionListView;
|
||||
private TextView mProxyPacView;
|
||||
|
||||
private CheckBox mSharedCheckBox;
|
||||
|
||||
private IpAssignment mIpAssignment = IpAssignment.UNASSIGNED;
|
||||
@@ -208,6 +208,7 @@ public class WifiConfigController implements TextWatcher,
|
||||
mProxySettingsSpinner = (Spinner) mView.findViewById(R.id.proxy_settings);
|
||||
mProxySettingsSpinner.setOnItemSelectedListener(this);
|
||||
mSharedCheckBox = (CheckBox) mView.findViewById(R.id.shared);
|
||||
mMeteredSettingsSpinner = mView.findViewById(R.id.metered_settings);
|
||||
|
||||
if (mAccessPoint == null) { // new network
|
||||
mConfigUi.setTitle(R.string.wifi_add_network);
|
||||
@@ -237,6 +238,7 @@ public class WifiConfigController implements TextWatcher,
|
||||
boolean showAdvancedFields = false;
|
||||
if (mAccessPoint.isSaved()) {
|
||||
WifiConfiguration config = mAccessPoint.getConfig();
|
||||
mMeteredSettingsSpinner.setSelection(config.meteredOverride);
|
||||
if (config.getIpAssignment() == IpAssignment.STATIC) {
|
||||
mIpSettingsSpinner.setSelection(STATIC_IP);
|
||||
showAdvancedFields = true;
|
||||
@@ -671,6 +673,9 @@ public class WifiConfigController implements TextWatcher,
|
||||
config.setIpConfiguration(
|
||||
new IpConfiguration(mIpAssignment, mProxySettings,
|
||||
mStaticIpConfiguration, mHttpProxy));
|
||||
if (mMeteredSettingsSpinner != null) {
|
||||
config.meteredOverride = mMeteredSettingsSpinner.getSelectedItemPosition();
|
||||
}
|
||||
|
||||
return config;
|
||||
}
|
||||
|
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
* Copyright (C) 2018 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.settings.wifi.details;
|
||||
|
||||
import android.app.backup.BackupManager;
|
||||
import android.content.Context;
|
||||
import android.net.wifi.WifiConfiguration;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.provider.Settings;
|
||||
import android.support.annotation.VisibleForTesting;
|
||||
import android.support.v14.preference.SwitchPreference;
|
||||
import android.support.v7.preference.DropDownPreference;
|
||||
import android.support.v7.preference.Preference;
|
||||
import android.support.v7.preference.PreferenceScreen;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
import com.android.settings.core.PreferenceControllerMixin;
|
||||
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 {
|
||||
|
||||
private static final String KEY_WIFI_METERED = "metered";
|
||||
private WifiConfiguration mWifiConfiguration;
|
||||
private WifiManager mWifiManager;
|
||||
|
||||
public WifiMeteredPreferenceController(Context context, WifiConfiguration wifiConfiguration) {
|
||||
super(context, KEY_WIFI_METERED);
|
||||
mWifiConfiguration = wifiConfiguration;
|
||||
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
final DropDownPreference dropDownPreference = (DropDownPreference) preference;
|
||||
final int meteredOverride = getMeteredOverride();
|
||||
dropDownPreference.setValue(Integer.toString(meteredOverride));
|
||||
updateSummary(dropDownPreference, meteredOverride);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAvailabilityStatus() {
|
||||
return AVAILABLE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
mWifiConfiguration.meteredOverride = Integer.parseInt((String) newValue);
|
||||
mWifiManager.updateNetwork(mWifiConfiguration);
|
||||
// Stage the backup of the SettingsProvider package which backs this up
|
||||
BackupManager.dataChanged("com.android.providers.settings");
|
||||
updateSummary((DropDownPreference) preference, getMeteredOverride());
|
||||
return true;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
int getMeteredOverride() {
|
||||
// Wrap the meteredOverride since robolectric cannot recognize it
|
||||
return mWifiConfiguration.meteredOverride;
|
||||
}
|
||||
|
||||
private void updateSummary(DropDownPreference preference, int meteredOverride) {
|
||||
preference.setSummary(preference.getEntries()[meteredOverride]);
|
||||
}
|
||||
}
|
@@ -20,10 +20,13 @@ import static com.android.settings.wifi.WifiSettings.WIFI_DIALOG_ID;
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.NetworkPolicyManager;
|
||||
import android.net.wifi.WifiConfiguration;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.support.v7.preference.DropDownPreference;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
@@ -122,6 +125,7 @@ public class WifiNetworkDetailsFragment extends DashboardFragment {
|
||||
|
||||
@Override
|
||||
protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
|
||||
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
||||
ConnectivityManager cm = context.getSystemService(ConnectivityManager.class);
|
||||
mWifiDetailPreferenceController = WifiDetailPreferenceController.newInstance(
|
||||
mAccessPoint,
|
||||
@@ -133,6 +137,9 @@ public class WifiNetworkDetailsFragment extends DashboardFragment {
|
||||
context.getSystemService(WifiManager.class),
|
||||
mMetricsFeatureProvider);
|
||||
|
||||
return new ArrayList<>(Collections.singletonList(mWifiDetailPreferenceController));
|
||||
controllers.add(mWifiDetailPreferenceController);
|
||||
controllers.add(new WifiMeteredPreferenceController(context, mAccessPoint.getConfig()));
|
||||
|
||||
return controllers;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user