From 7ba65c39aefd5e8924d00c3830c255666ac8681f Mon Sep 17 00:00:00 2001 From: Salvador Martinez Date: Tue, 17 Apr 2018 17:32:16 -0700 Subject: [PATCH] Make WifiTether listen to datasaver Wifi Tethering is already turned off when appropriate. However if you re-enable it you still can't toggle the tether switchbar. This CL makes it so that if you disable data saver the toggle becomes enabled again. Test: robotests Bug: 77860936 Change-Id: I03fa74c21674678a90cde7bd20fa68167f02ae3c --- .../tether/WifiTetherSwitchBarController.java | 23 +++++++++++++++++-- .../WifiTetherSwitchBarControllerTest.java | 16 +++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java b/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java index ab08fdb6299..bf203e61f05 100644 --- a/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java +++ b/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java @@ -36,15 +36,17 @@ import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; public class WifiTetherSwitchBarController implements SwitchWidgetController.OnSwitchChangeListener, - LifecycleObserver, OnStart, OnStop { + LifecycleObserver, OnStart, OnStop, DataSaverBackend.Listener { private static final IntentFilter WIFI_INTENT_FILTER; private final Context mContext; private final SwitchWidgetController mSwitchBar; private final ConnectivityManager mConnectivityManager; - private final DataSaverBackend mDataSaverBackend; private final WifiManager mWifiManager; + + @VisibleForTesting + final DataSaverBackend mDataSaverBackend; @VisibleForTesting final ConnectivityManager.OnStartTetheringCallback mOnStartTetheringCallback = new ConnectivityManager.OnStartTetheringCallback() { @@ -75,12 +77,14 @@ public class WifiTetherSwitchBarController implements SwitchWidgetController.OnS @Override public void onStart() { + mDataSaverBackend.addListener(this); mSwitchBar.startListening(); mContext.registerReceiver(mReceiver, WIFI_INTENT_FILTER); } @Override public void onStop() { + mDataSaverBackend.remListener(this); mSwitchBar.stopListening(); mContext.unregisterReceiver(mReceiver); } @@ -157,4 +161,19 @@ public class WifiTetherSwitchBarController implements SwitchWidgetController.OnS mSwitchBar.setEnabled(false); } } + + @Override + public void onDataSaverChanged(boolean isDataSaving) { + updateWifiSwitch(); + } + + @Override + public void onWhitelistStatusChanged(int uid, boolean isWhitelisted) { + // we don't care, since we just want to read the value + } + + @Override + public void onBlacklistStatusChanged(int uid, boolean isBlacklisted) { + // we don't care, since we just want to read the value + } } diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSwitchBarControllerTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSwitchBarControllerTest.java index db8baab6cb4..943a66521fc 100644 --- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSwitchBarControllerTest.java +++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSwitchBarControllerTest.java @@ -88,4 +88,20 @@ public class WifiTetherSwitchBarControllerTest { assertThat(mSwitchBar.isChecked()).isFalse(); assertThat(mSwitchBar.isEnabled()).isTrue(); } + + @Test + public void testOnDataSaverChanged_setsEnabledCorrectly() { + assertThat(mSwitchBar.isEnabled()).isTrue(); + + // try to turn data saver on + when(mNetworkPolicyManager.getRestrictBackground()).thenReturn(true); + mController.onDataSaverChanged(true); + assertThat(mSwitchBar.isEnabled()).isFalse(); + + // lets turn data saver off again + when(mNetworkPolicyManager.getRestrictBackground()).thenReturn(false); + mController.onDataSaverChanged(false); + assertThat(mSwitchBar.isEnabled()).isTrue(); + + } }