diff --git a/src/com/android/settings/wifi/WifiWakeupPreferenceController.java b/src/com/android/settings/wifi/WifiWakeupPreferenceController.java index 2cc7f8ef5d9..e2fb76834e3 100644 --- a/src/com/android/settings/wifi/WifiWakeupPreferenceController.java +++ b/src/com/android/settings/wifi/WifiWakeupPreferenceController.java @@ -89,6 +89,13 @@ public class WifiWakeupPreferenceController extends TogglePreferenceController i @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,17 +103,16 @@ public class WifiWakeupPreferenceController extends TogglePreferenceController i public boolean isChecked() { return getWifiWakeupEnabled() && getWifiScanningEnabled() - && mLocationManager.isLocationEnabled(); + && getLocationEnabled(); } @Override public boolean setChecked(boolean isChecked) { if (isChecked) { - if (mFragment == null) { - throw new IllegalStateException("No fragment to start activity"); - } - - if (!mLocationManager.isLocationEnabled()) { + if (!getLocationEnabled()) { + if (mFragment == null) { + throw new IllegalStateException("No fragment to start activity"); + } final Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); mFragment.startActivityForResult(intent, WIFI_WAKEUP_REQUEST_CODE); return false; @@ -128,7 +134,7 @@ public class WifiWakeupPreferenceController extends TogglePreferenceController i @Override public CharSequence getSummary() { - if (!mLocationManager.isLocationEnabled()) { + if (!getLocationEnabled()) { return getNoLocationSummary(); } else { return mContext.getText(R.string.wifi_wakeup_summary); @@ -151,12 +157,16 @@ public class WifiWakeupPreferenceController extends TogglePreferenceController i 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 8face4a757d..62d6fb8fd07 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; @@ -68,6 +71,41 @@ public class WifiWakeupPreferenceControllerTest { doReturn(true).when(mLocationManager).isLocationEnabled(); } + @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_mFragmentIsNullLocationEnable_wifiWakeupEnable() { + mController.setFragment(null); + when(mLocationManager.isLocationEnabled()).thenReturn(true); + when(mWifiManager.isScanAlwaysAvailable()).thenReturn(true); + when(mWifiManager.isAutoWakeupEnabled()).thenReturn(false); + + mController.setChecked(true); + + verify(mWifiManager).setAutoWakeupEnabled(true); + } + @Test public void setChecked_scanEnableLocationEnable_wifiWakeupEnable() { when(mWifiManager.isAutoWakeupEnabled()).thenReturn(false);