Disable tethering when Data Saver mode is on.
BUG: 28313291 Change-Id: Idbedd440a1baa41f1407b32e86f5ae0080e60798
This commit is contained in:
@@ -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 & portable hotspot</string>
|
<string name="tether_settings_title_all">Tethering & 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>
|
||||||
|
@@ -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>
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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,8 +72,10 @@ 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);
|
||||||
@@ -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);
|
||||||
|
Reference in New Issue
Block a user