Merge "Hide toggle to Turn on Wi-Fi automatically preference in Search settings"
diff --git a/src/com/android/settings/wifi/WifiWakeupPreferenceController.java b/src/com/android/settings/wifi/WifiWakeupPreferenceController.java
index 2cc7f8e..066242c 100644
--- a/src/com/android/settings/wifi/WifiWakeupPreferenceController.java
+++ b/src/com/android/settings/wifi/WifiWakeupPreferenceController.java
@@ -89,6 +89,13 @@
 
     @Override
     public int getAvailabilityStatus() {
+        // Since mFragment is set only when entering Network preferences settings. So when
+        // mFragment == null, we can assume that the object is created by Search settings.
+        // When Search settings is called, if the dependent condition is not enabled, then
+        // return DISABLED_DEPENDENT_SETTING to hide the toggle.
+        if (mFragment == null && (!getLocationEnabled() || !getWifiScanningEnabled())) {
+            return DISABLED_DEPENDENT_SETTING;
+        }
         return AVAILABLE;
     }
 
@@ -96,7 +103,7 @@
     public boolean isChecked() {
         return getWifiWakeupEnabled()
                 && getWifiScanningEnabled()
-                && mLocationManager.isLocationEnabled();
+                && getLocationEnabled();
     }
 
     @Override
@@ -106,7 +113,7 @@
                 throw new IllegalStateException("No fragment to start activity");
             }
 
-            if (!mLocationManager.isLocationEnabled()) {
+            if (!getLocationEnabled()) {
                 final Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                 mFragment.startActivityForResult(intent, WIFI_WAKEUP_REQUEST_CODE);
                 return false;
@@ -128,7 +135,7 @@
 
     @Override
     public CharSequence getSummary() {
-        if (!mLocationManager.isLocationEnabled()) {
+        if (!getLocationEnabled()) {
             return getNoLocationSummary();
         } else {
             return mContext.getText(R.string.wifi_wakeup_summary);
@@ -151,12 +158,16 @@
         if (requestCode != WIFI_WAKEUP_REQUEST_CODE) {
             return;
         }
-        if (mLocationManager.isLocationEnabled() && getWifiScanningEnabled()) {
+        if (getLocationEnabled() && getWifiScanningEnabled()) {
             setWifiWakeupEnabled(true);
             updateState(mPreference);
         }
     }
 
+    private boolean getLocationEnabled() {
+        return mLocationManager.isLocationEnabled();
+    }
+
     private boolean getWifiScanningEnabled() {
         return mWifiManager.isScanAlwaysAvailable();
     }
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiWakeupPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/WifiWakeupPreferenceControllerTest.java
index 8face4a..ce4bfed 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiWakeupPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiWakeupPreferenceControllerTest.java
@@ -16,6 +16,9 @@
 
 package com.android.settings.wifi;
 
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+import static com.android.settings.core.BasePreferenceController.DISABLED_DEPENDENT_SETTING;
+
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.Mockito.doReturn;
@@ -69,6 +72,29 @@
     }
 
     @Test
+    public void getAvailabilityStatus_fragmentIsNotNull_returnAvailable() {
+        mController.setFragment(mFragment);
+
+        assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+    }
+
+    @Test
+    public void getAvailabilityStatus_fragmentIsNullAndLocationDisabled_returnDisabled() {
+        mController.setFragment(null);
+        when(mLocationManager.isLocationEnabled()).thenReturn(false);
+
+        assertThat(mController.getAvailabilityStatus()).isEqualTo(DISABLED_DEPENDENT_SETTING);
+    }
+
+    @Test
+    public void getAvailabilityStatus_fragmentIsNullAndWifiScanDisabled_returnDisabled() {
+        mController.setFragment(null);
+        when(mWifiManager.isScanAlwaysAvailable()).thenReturn(false);
+
+        assertThat(mController.getAvailabilityStatus()).isEqualTo(DISABLED_DEPENDENT_SETTING);
+    }
+
+    @Test
     public void setChecked_scanEnableLocationEnable_wifiWakeupEnable() {
         when(mWifiManager.isAutoWakeupEnabled()).thenReturn(false);
         when(mWifiManager.isScanAlwaysAvailable()).thenReturn(true);