From 6da0447068cf63f30f734237fd54b408260d2ff4 Mon Sep 17 00:00:00 2001 From: Yi Jiang Date: Thu, 16 May 2019 13:21:35 -0700 Subject: [PATCH] Fix unexpected grey-out in Screen attention Fix preference controller searchable issue. Bug: 132821023 Bug: 133255690 Test: atest AdaptiveSleepPreferenceControllerTest Change-Id: I686ed827fbe572c9d8bcde2d8a8e00f2dcb5a6a8 --- res/xml/adaptive_sleep_detail.xml | 2 +- ...aptiveSleepDetailPreferenceController.java | 47 ++++++++++++ .../AdaptiveSleepPreferenceController.java | 17 ++--- ...veSleepDetailPreferenceControllerTest.java | 75 +++++++++++++++++++ ...AdaptiveSleepPreferenceControllerTest.java | 4 +- 5 files changed, 130 insertions(+), 15 deletions(-) create mode 100644 src/com/android/settings/display/AdaptiveSleepDetailPreferenceController.java create mode 100644 tests/robotests/src/com/android/settings/display/AdaptiveSleepDetailPreferenceControllerTest.java diff --git a/res/xml/adaptive_sleep_detail.xml b/res/xml/adaptive_sleep_detail.xml index 2fa511bc247..606bb55d465 100644 --- a/res/xml/adaptive_sleep_detail.xml +++ b/res/xml/adaptive_sleep_detail.xml @@ -33,7 +33,7 @@ android:title="@string/adaptive_sleep_title" android:summary="@string/adaptive_sleep_description" settings:keywords="@string/keywords_display_adaptive_sleep" - settings:controller="com.android.settings.display.AdaptiveSleepPreferenceController" + settings:controller="com.android.settings.display.AdaptiveSleepDetailPreferenceController" settings:useAdminDisabledSummary="true" settings:allowDividerAbove="true" /> diff --git a/src/com/android/settings/display/AdaptiveSleepDetailPreferenceController.java b/src/com/android/settings/display/AdaptiveSleepDetailPreferenceController.java new file mode 100644 index 00000000000..5ce7be5b43e --- /dev/null +++ b/src/com/android/settings/display/AdaptiveSleepDetailPreferenceController.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.settings.display; + +import android.content.Context; + +import androidx.preference.Preference; + +public class AdaptiveSleepDetailPreferenceController extends AdaptiveSleepPreferenceController { + public AdaptiveSleepDetailPreferenceController(Context context, String key) { + super(context, key); + } + + @Override + @AvailabilityStatus + public int getAvailabilityStatus() { + return mContext.getResources().getBoolean( + com.android.internal.R.bool.config_adaptive_sleep_available) + ? AVAILABLE + : UNSUPPORTED_ON_DEVICE; + } + + @Override + public boolean isSliceable() { + return true; + } + + @Override + public void updateState(Preference preference) { + super.updateState(preference); + preference.setEnabled(super.hasSufficientPermissions); + } +} diff --git a/src/com/android/settings/display/AdaptiveSleepPreferenceController.java b/src/com/android/settings/display/AdaptiveSleepPreferenceController.java index fab3efad39e..6b91792800e 100644 --- a/src/com/android/settings/display/AdaptiveSleepPreferenceController.java +++ b/src/com/android/settings/display/AdaptiveSleepPreferenceController.java @@ -29,7 +29,7 @@ public class AdaptiveSleepPreferenceController extends TogglePreferenceControlle private final String SYSTEM_KEY = ADAPTIVE_SLEEP; private final int DEFAULT_VALUE = 0; - private final boolean hasSufficientPermissions; + final boolean hasSufficientPermissions; public AdaptiveSleepPreferenceController(Context context, String key) { super(context, key); @@ -57,17 +57,10 @@ public class AdaptiveSleepPreferenceController extends TogglePreferenceControlle @Override @AvailabilityStatus public int getAvailabilityStatus() { - final boolean supportedOnDevice = mContext.getResources().getBoolean( - com.android.internal.R.bool.config_adaptive_sleep_available); - if (!supportedOnDevice) { - return UNSUPPORTED_ON_DEVICE; - } - return hasSufficientPermissions ? AVAILABLE : DISABLED_DEPENDENT_SETTING; - } - - @Override - public boolean isSliceable() { - return true; + return mContext.getResources().getBoolean( + com.android.internal.R.bool.config_adaptive_sleep_available) + ? AVAILABLE_UNSEARCHABLE + : UNSUPPORTED_ON_DEVICE; } @Override diff --git a/tests/robotests/src/com/android/settings/display/AdaptiveSleepDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AdaptiveSleepDetailPreferenceControllerTest.java new file mode 100644 index 00000000000..91a4ed6379b --- /dev/null +++ b/tests/robotests/src/com/android/settings/display/AdaptiveSleepDetailPreferenceControllerTest.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.settings.display; + +import static com.android.settings.core.BasePreferenceController.AVAILABLE; +import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.doReturn; + +import android.content.Context; +import android.content.pm.PackageManager; + +import com.android.internal.R; +import com.android.settings.testutils.shadow.SettingsShadowResources; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +@RunWith(RobolectricTestRunner.class) +@Config(shadows = {SettingsShadowResources.class}) +public class AdaptiveSleepDetailPreferenceControllerTest { + + private AdaptiveSleepDetailPreferenceController mController; + @Mock + private PackageManager mPackageManager; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + Context context = Mockito.spy(RuntimeEnvironment.application); + doReturn(mPackageManager).when(context).getPackageManager(); + mController = new AdaptiveSleepDetailPreferenceController(context, "test_key"); + } + + @Test + public void isSliceable_returnTrue() { + mController.onPreferenceChange(null, true); + assertThat(mController.isSliceable()).isTrue(); + } + + @Test + public void getAvailabilityStatus_configTrueSet_shouldReturnAvailable() { + SettingsShadowResources.overrideResource(R.bool.config_adaptive_sleep_available, true); + assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE); + } + + @Test + public void getAvailabilityStatus_configFalseSet_shouldReturnUnsupportedOnDevice() { + SettingsShadowResources.overrideResource(R.bool.config_adaptive_sleep_available, false); + assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE); + } +} diff --git a/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java index 295eac5b71f..9928e6c30d8 100644 --- a/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java @@ -133,10 +133,10 @@ public class AdaptiveSleepPreferenceControllerTest { } @Test - public void isSliceable_returnsTrue() { + public void isSliceable_returnsFalse() { final AdaptiveSleepPreferenceController controller = new AdaptiveSleepPreferenceController(mContext, "any_key"); - assertThat(controller.isSliceable()).isTrue(); + assertThat(controller.isSliceable()).isFalse(); } @Test