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(); + + } }