Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5c09184e authored by Felipe Leme's avatar Felipe Leme
Browse files

Disable tethering when Data Saver mode is on.

BUG: 28313291
Change-Id: Idbedd440a1baa41f1407b32e86f5ae0080e60798
parent 3a3d110a
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -2812,6 +2812,8 @@
    <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]-->
    <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 -->
    <string name="usb_title">USB</string>
+7 −1
Original line number Diff line number Diff line
@@ -14,7 +14,8 @@
     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
        android:key="usb_tether_settings"
@@ -33,4 +34,9 @@
        android:key="enable_bluetooth_tethering"
        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>
+45 −6
Original line number Diff line number Diff line
@@ -39,7 +39,9 @@ import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
import android.util.Log;

import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.settings.datausage.DataSaverBackend;
import com.android.settings.wifi.WifiApDialog;
import com.android.settings.wifi.WifiApEnabler;
import com.android.settingslib.TetherUtil;
@@ -56,12 +58,14 @@ import static android.net.ConnectivityManager.TETHERING_WIFI;
 * Displays preferences for Tethering.
 */
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 ENABLE_WIFI_AP = "enable_wifi_ap";
    private static final String ENABLE_BLUETOOTH_TETHERING = "enable_bluetooth_tethering";
    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;

@@ -110,6 +114,10 @@ public class TetherSettings extends RestrictedSettingsFragment

    private boolean mUnavailable;

    private DataSaverBackend mDataSaverBackend;
    private boolean mDataSaverEnabled;
    private Preference mDataSaverFooter;

    @Override
    protected int getMetricsCategory() {
        return MetricsEvent.TETHER;
@@ -125,6 +133,10 @@ public class TetherSettings extends RestrictedSettingsFragment

        addPreferencesFromResource(R.xml.tether_prefs);

        mDataSaverBackend = new DataSaverBackend(getContext());
        mDataSaverEnabled = mDataSaverBackend.isDataSaverEnabled();
        mDataSaverFooter = findPreference(DATA_SAVER_FOOTER);

        setIfOnlyAvailableForAdmins(true);
        if (isUiRestricted()) {
            mUnavailable = true;
@@ -145,6 +157,8 @@ public class TetherSettings extends RestrictedSettingsFragment
        mUsbTether = (SwitchPreference) findPreference(USB_TETHER_SETTINGS);
        mBluetoothTether = (SwitchPreference) findPreference(ENABLE_BLUETOOTH_TETHERING);

        mDataSaverBackend.addListener(this);

        mCm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

@@ -161,7 +175,7 @@ public class TetherSettings extends RestrictedSettingsFragment
        }

        if (wifiAvailable && !Utils.isMonkeyRunning()) {
            mWifiApEnabler = new WifiApEnabler(activity, mEnableWifiAp);
            mWifiApEnabler = new WifiApEnabler(activity, mDataSaverBackend, mEnableWifiAp);
            initWifiTethering();
        } else {
            getPreferenceScreen().removePreference(mEnableWifiAp);
@@ -178,6 +192,31 @@ public class TetherSettings extends RestrictedSettingsFragment
                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() {
@@ -368,7 +407,7 @@ public class TetherSettings extends RestrictedSettingsFragment

        if (usbTethered) {
            mUsbTether.setSummary(R.string.usb_tethering_active_subtext);
            mUsbTether.setEnabled(true);
            mUsbTether.setEnabled(!mDataSaverEnabled);
            mUsbTether.setChecked(true);
        } else if (usbAvailable) {
            if (usbError == ConnectivityManager.TETHER_ERROR_NO_ERROR) {
@@ -376,7 +415,7 @@ public class TetherSettings extends RestrictedSettingsFragment
            } else {
                mUsbTether.setSummary(R.string.usb_tethering_errored_subtext);
            }
            mUsbTether.setEnabled(true);
            mUsbTether.setEnabled(!mDataSaverEnabled);
            mUsbTether.setChecked(false);
        } else if (usbErrored) {
            mUsbTether.setSummary(R.string.usb_tethering_errored_subtext);
@@ -418,7 +457,7 @@ public class TetherSettings extends RestrictedSettingsFragment
            if (btState == BluetoothAdapter.STATE_ON && bluetoothPan != null
                    && bluetoothPan.isTetheringOn()) {
                mBluetoothTether.setChecked(true);
                mBluetoothTether.setEnabled(true);
                mBluetoothTether.setEnabled(!mDataSaverEnabled);
                int bluetoothTethered = bluetoothPan.getConnectedDevices().size();
                if (bluetoothTethered > 1) {
                    String summary = getString(
@@ -434,7 +473,7 @@ public class TetherSettings extends RestrictedSettingsFragment
                    mBluetoothTether.setSummary(R.string.bluetooth_tethering_available_subtext);
                }
            } else {
                mBluetoothTether.setEnabled(true);
                mBluetoothTether.setEnabled(!mDataSaverEnabled);
                mBluetoothTether.setChecked(false);
                mBluetoothTether.setSummary(R.string.bluetooth_tethering_off_subtext);
            }
+8 −4
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.provider.Settings;
import android.support.v14.preference.SwitchPreference;

import com.android.settings.R;
import com.android.settings.datausage.DataSaverBackend;
import com.android.settingslib.TetherUtil;

import java.util.ArrayList;
@@ -35,6 +36,7 @@ public class WifiApEnabler {
    private final Context mContext;
    private final SwitchPreference mSwitch;
    private final CharSequence mOriginalSummary;
    private final DataSaverBackend mDataSaverBackend;

    private WifiManager mWifiManager;
    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;
        mDataSaverBackend = dataSaverBackend;
        mSwitch = switchPreference;
        mOriginalSummary = switchPreference.getSummary();
        switchPreference.setPersistent(false);
@@ -99,7 +103,7 @@ public class WifiApEnabler {
        boolean isAirplaneMode = Settings.Global.getInt(mContext.getContentResolver(),
                Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
        if(!isAirplaneMode) {
            mSwitch.setEnabled(true);
            mSwitch.setEnabled(!mDataSaverBackend.isDataSaverEnabled());
        } else {
            mSwitch.setSummary(mOriginalSummary);
            mSwitch.setEnabled(false);
@@ -162,7 +166,7 @@ public class WifiApEnabler {
                 */
                mSwitch.setChecked(true);
                /* Doesnt need the airplane check */
                mSwitch.setEnabled(true);
                mSwitch.setEnabled(!mDataSaverBackend.isDataSaverEnabled());
                break;
            case WifiManager.WIFI_AP_STATE_DISABLING:
                mSwitch.setSummary(R.string.wifi_tether_stopping);