Merge "Make WifiTether listen to datasaver" into pi-dev
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java b/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java
index ab08fdb..bf203e6 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.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 @@
 
     @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 @@
             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 db8baab..943a665 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 @@
         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();
+
+    }
 }