Loading res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -2831,6 +2831,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 & 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> Loading res/xml/tether_prefs.xml +7 −1 Original line number Diff line number Diff line Loading @@ -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" Loading @@ -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> src/com/android/settings/TetherSettings.java +45 −6 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading @@ -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; Loading @@ -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); Loading @@ -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); Loading @@ -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() { Loading Loading @@ -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) { Loading @@ -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); Loading Loading @@ -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( Loading @@ -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); } Loading src/com/android/settings/wifi/WifiApEnabler.java +8 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading
res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -2831,6 +2831,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 & 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> Loading
res/xml/tether_prefs.xml +7 −1 Original line number Diff line number Diff line Loading @@ -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" Loading @@ -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>
src/com/android/settings/TetherSettings.java +45 −6 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading @@ -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; Loading @@ -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); Loading @@ -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); Loading @@ -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() { Loading Loading @@ -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) { Loading @@ -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); Loading Loading @@ -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( Loading @@ -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); } Loading
src/com/android/settings/wifi/WifiApEnabler.java +8 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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); Loading