Disable tethering when Data Saver mode is on.

BUG: 28313291
Change-Id: Idbedd440a1baa41f1407b32e86f5ae0080e60798
This commit is contained in:
Felipe Leme
2016-04-21 17:17:28 -07:00
parent 3a3d110a50
commit 5c09184e00
4 changed files with 62 additions and 11 deletions

View File

@@ -2812,6 +2812,8 @@
<string name="tether_settings_title_usb_bluetooth">Tethering</string> <string name="tether_settings_title_usb_bluetooth">Tethering</string>
<!-- Tethering controls, item title to go into the tethering settings when USB, Bluetooth and Wifi tethering are available [CHAR LIMIT=25]--> <!-- Tethering controls, item title to go into the tethering settings when USB, Bluetooth and Wifi tethering are available [CHAR LIMIT=25]-->
<string name="tether_settings_title_all">Tethering &amp; portable hotspot</string> <string name="tether_settings_title_all">Tethering &amp; portable hotspot</string>
<!-- Tethering controls, footer note displayed when tethering is disabled because Data Saver mode is on [CHAR LIMIT=none]-->
<string name="tether_settings_disabled_on_data_saver">"Can\u2019t tether or use portable hotspots while Data Saver is on"</string>
<!-- USB Tethering options --> <!-- USB Tethering options -->
<string name="usb_title">USB</string> <string name="usb_title">USB</string>

View File

@@ -14,7 +14,8 @@
limitations under the License. limitations under the License.
--> -->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto">
<SwitchPreference <SwitchPreference
android:key="usb_tether_settings" android:key="usb_tether_settings"
@@ -33,4 +34,9 @@
android:key="enable_bluetooth_tethering" android:key="enable_bluetooth_tethering"
android:title="@string/bluetooth_tether_checkbox_text" /> android:title="@string/bluetooth_tether_checkbox_text" />
<com.android.settings.DividerPreference
android:key="disabled_on_data_saver"
android:summary="@string/tether_settings_disabled_on_data_saver"
android:selectable="false"
settings:allowDividerAbove="true" />
</PreferenceScreen> </PreferenceScreen>

View File

@@ -39,7 +39,9 @@ import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen; import android.support.v7.preference.PreferenceScreen;
import android.util.Log; import android.util.Log;
import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.settings.datausage.DataSaverBackend;
import com.android.settings.wifi.WifiApDialog; import com.android.settings.wifi.WifiApDialog;
import com.android.settings.wifi.WifiApEnabler; import com.android.settings.wifi.WifiApEnabler;
import com.android.settingslib.TetherUtil; import com.android.settingslib.TetherUtil;
@@ -56,12 +58,14 @@ import static android.net.ConnectivityManager.TETHERING_WIFI;
* Displays preferences for Tethering. * Displays preferences for Tethering.
*/ */
public class TetherSettings extends RestrictedSettingsFragment public class TetherSettings extends RestrictedSettingsFragment
implements DialogInterface.OnClickListener, Preference.OnPreferenceChangeListener { implements DialogInterface.OnClickListener, Preference.OnPreferenceChangeListener,
DataSaverBackend.Listener {
private static final String USB_TETHER_SETTINGS = "usb_tether_settings"; private static final String USB_TETHER_SETTINGS = "usb_tether_settings";
private static final String ENABLE_WIFI_AP = "enable_wifi_ap"; private static final String ENABLE_WIFI_AP = "enable_wifi_ap";
private static final String ENABLE_BLUETOOTH_TETHERING = "enable_bluetooth_tethering"; private static final String ENABLE_BLUETOOTH_TETHERING = "enable_bluetooth_tethering";
private static final String TETHER_CHOICE = "TETHER_TYPE"; private static final String TETHER_CHOICE = "TETHER_TYPE";
private static final String DATA_SAVER_FOOTER = "disabled_on_data_saver";
private static final int DIALOG_AP_SETTINGS = 1; private static final int DIALOG_AP_SETTINGS = 1;
@@ -110,6 +114,10 @@ public class TetherSettings extends RestrictedSettingsFragment
private boolean mUnavailable; private boolean mUnavailable;
private DataSaverBackend mDataSaverBackend;
private boolean mDataSaverEnabled;
private Preference mDataSaverFooter;
@Override @Override
protected int getMetricsCategory() { protected int getMetricsCategory() {
return MetricsEvent.TETHER; return MetricsEvent.TETHER;
@@ -125,6 +133,10 @@ public class TetherSettings extends RestrictedSettingsFragment
addPreferencesFromResource(R.xml.tether_prefs); addPreferencesFromResource(R.xml.tether_prefs);
mDataSaverBackend = new DataSaverBackend(getContext());
mDataSaverEnabled = mDataSaverBackend.isDataSaverEnabled();
mDataSaverFooter = findPreference(DATA_SAVER_FOOTER);
setIfOnlyAvailableForAdmins(true); setIfOnlyAvailableForAdmins(true);
if (isUiRestricted()) { if (isUiRestricted()) {
mUnavailable = true; mUnavailable = true;
@@ -145,6 +157,8 @@ public class TetherSettings extends RestrictedSettingsFragment
mUsbTether = (SwitchPreference) findPreference(USB_TETHER_SETTINGS); mUsbTether = (SwitchPreference) findPreference(USB_TETHER_SETTINGS);
mBluetoothTether = (SwitchPreference) findPreference(ENABLE_BLUETOOTH_TETHERING); mBluetoothTether = (SwitchPreference) findPreference(ENABLE_BLUETOOTH_TETHERING);
mDataSaverBackend.addListener(this);
mCm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); mCm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
@@ -161,7 +175,7 @@ public class TetherSettings extends RestrictedSettingsFragment
} }
if (wifiAvailable && !Utils.isMonkeyRunning()) { if (wifiAvailable && !Utils.isMonkeyRunning()) {
mWifiApEnabler = new WifiApEnabler(activity, mEnableWifiAp); mWifiApEnabler = new WifiApEnabler(activity, mDataSaverBackend, mEnableWifiAp);
initWifiTethering(); initWifiTethering();
} else { } else {
getPreferenceScreen().removePreference(mEnableWifiAp); getPreferenceScreen().removePreference(mEnableWifiAp);
@@ -178,6 +192,31 @@ public class TetherSettings extends RestrictedSettingsFragment
mBluetoothTether.setChecked(false); mBluetoothTether.setChecked(false);
} }
} }
// Set initial state based on Data Saver mode.
onDataSaverChanged(mDataSaverBackend.isDataSaverEnabled());
}
@Override
public void onDestroy() {
mDataSaverBackend.remListener(this);
super.onDestroy();
}
@Override
public void onDataSaverChanged(boolean isDataSaving) {
mDataSaverEnabled = isDataSaving;
mEnableWifiAp.setEnabled(!mDataSaverEnabled);
mUsbTether.setEnabled(!mDataSaverEnabled);
mBluetoothTether.setEnabled(!mDataSaverEnabled);
mDataSaverFooter.setVisible(mDataSaverEnabled);
}
@Override
public void onWhitelistStatusChanged(int uid, boolean isWhitelisted) {
}
@Override
public void onBlacklistStatusChanged(int uid, boolean isBlacklisted) {
} }
private void initWifiTethering() { private void initWifiTethering() {
@@ -368,7 +407,7 @@ public class TetherSettings extends RestrictedSettingsFragment
if (usbTethered) { if (usbTethered) {
mUsbTether.setSummary(R.string.usb_tethering_active_subtext); mUsbTether.setSummary(R.string.usb_tethering_active_subtext);
mUsbTether.setEnabled(true); mUsbTether.setEnabled(!mDataSaverEnabled);
mUsbTether.setChecked(true); mUsbTether.setChecked(true);
} else if (usbAvailable) { } else if (usbAvailable) {
if (usbError == ConnectivityManager.TETHER_ERROR_NO_ERROR) { if (usbError == ConnectivityManager.TETHER_ERROR_NO_ERROR) {
@@ -376,7 +415,7 @@ public class TetherSettings extends RestrictedSettingsFragment
} else { } else {
mUsbTether.setSummary(R.string.usb_tethering_errored_subtext); mUsbTether.setSummary(R.string.usb_tethering_errored_subtext);
} }
mUsbTether.setEnabled(true); mUsbTether.setEnabled(!mDataSaverEnabled);
mUsbTether.setChecked(false); mUsbTether.setChecked(false);
} else if (usbErrored) { } else if (usbErrored) {
mUsbTether.setSummary(R.string.usb_tethering_errored_subtext); mUsbTether.setSummary(R.string.usb_tethering_errored_subtext);
@@ -418,7 +457,7 @@ public class TetherSettings extends RestrictedSettingsFragment
if (btState == BluetoothAdapter.STATE_ON && bluetoothPan != null if (btState == BluetoothAdapter.STATE_ON && bluetoothPan != null
&& bluetoothPan.isTetheringOn()) { && bluetoothPan.isTetheringOn()) {
mBluetoothTether.setChecked(true); mBluetoothTether.setChecked(true);
mBluetoothTether.setEnabled(true); mBluetoothTether.setEnabled(!mDataSaverEnabled);
int bluetoothTethered = bluetoothPan.getConnectedDevices().size(); int bluetoothTethered = bluetoothPan.getConnectedDevices().size();
if (bluetoothTethered > 1) { if (bluetoothTethered > 1) {
String summary = getString( String summary = getString(
@@ -434,7 +473,7 @@ public class TetherSettings extends RestrictedSettingsFragment
mBluetoothTether.setSummary(R.string.bluetooth_tethering_available_subtext); mBluetoothTether.setSummary(R.string.bluetooth_tethering_available_subtext);
} }
} else { } else {
mBluetoothTether.setEnabled(true); mBluetoothTether.setEnabled(!mDataSaverEnabled);
mBluetoothTether.setChecked(false); mBluetoothTether.setChecked(false);
mBluetoothTether.setSummary(R.string.bluetooth_tethering_off_subtext); mBluetoothTether.setSummary(R.string.bluetooth_tethering_off_subtext);
} }

View File

@@ -27,6 +27,7 @@ import android.provider.Settings;
import android.support.v14.preference.SwitchPreference; import android.support.v14.preference.SwitchPreference;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.datausage.DataSaverBackend;
import com.android.settingslib.TetherUtil; import com.android.settingslib.TetherUtil;
import java.util.ArrayList; import java.util.ArrayList;
@@ -35,6 +36,7 @@ public class WifiApEnabler {
private final Context mContext; private final Context mContext;
private final SwitchPreference mSwitch; private final SwitchPreference mSwitch;
private final CharSequence mOriginalSummary; private final CharSequence mOriginalSummary;
private final DataSaverBackend mDataSaverBackend;
private WifiManager mWifiManager; private WifiManager mWifiManager;
private final IntentFilter mIntentFilter; private final IntentFilter mIntentFilter;
@@ -70,14 +72,16 @@ public class WifiApEnabler {
} }
}; };
public WifiApEnabler(Context context, SwitchPreference switchPreference) { public WifiApEnabler(Context context, DataSaverBackend dataSaverBackend,
SwitchPreference switchPreference) {
mContext = context; mContext = context;
mDataSaverBackend = dataSaverBackend;
mSwitch = switchPreference; mSwitch = switchPreference;
mOriginalSummary = switchPreference.getSummary(); mOriginalSummary = switchPreference.getSummary();
switchPreference.setPersistent(false); switchPreference.setPersistent(false);
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
mCm = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE); mCm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
mWifiRegexs = mCm.getTetherableWifiRegexs(); mWifiRegexs = mCm.getTetherableWifiRegexs();
@@ -99,7 +103,7 @@ public class WifiApEnabler {
boolean isAirplaneMode = Settings.Global.getInt(mContext.getContentResolver(), boolean isAirplaneMode = Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.AIRPLANE_MODE_ON, 0) != 0; Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
if(!isAirplaneMode) { if(!isAirplaneMode) {
mSwitch.setEnabled(true); mSwitch.setEnabled(!mDataSaverBackend.isDataSaverEnabled());
} else { } else {
mSwitch.setSummary(mOriginalSummary); mSwitch.setSummary(mOriginalSummary);
mSwitch.setEnabled(false); mSwitch.setEnabled(false);
@@ -162,7 +166,7 @@ public class WifiApEnabler {
*/ */
mSwitch.setChecked(true); mSwitch.setChecked(true);
/* Doesnt need the airplane check */ /* Doesnt need the airplane check */
mSwitch.setEnabled(true); mSwitch.setEnabled(!mDataSaverBackend.isDataSaverEnabled());
break; break;
case WifiManager.WIFI_AP_STATE_DISABLING: case WifiManager.WIFI_AP_STATE_DISABLING:
mSwitch.setSummary(R.string.wifi_tether_stopping); mSwitch.setSummary(R.string.wifi_tether_stopping);