diff --git a/res/values/strings.xml b/res/values/strings.xml index 36fba35d2ee..c41bb142056 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2688,6 +2688,15 @@ Display white balance + + Adaptive sleep + + On + + Off + + Your screen would not dim and go to sleep if the device detects your present attention. + Night Light @@ -6707,6 +6716,8 @@ + + @@ -7047,6 +7058,9 @@ dim screen, touchscreen, battery, smart brightness, dynamic brightness + + dim screen, sleep, battery, timeout, attention + rotate, flip, rotation, portrait, landscape, orientation, vertical, horizontal diff --git a/res/xml/adaptive_sleep_detail.xml b/res/xml/adaptive_sleep_detail.xml new file mode 100644 index 00000000000..b7dabbb1e45 --- /dev/null +++ b/res/xml/adaptive_sleep_detail.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml index 76b3d2eefba..b110b46ce26 100644 --- a/res/xml/display_settings.xml +++ b/res/xml/display_settings.xml @@ -66,6 +66,13 @@ android:entryValues="@array/screen_timeout_values" settings:keywords="@string/keywords_screen_timeout" /> + + getXmlResourcesToIndex( + Context context, boolean enabled) { + final SearchIndexableResource sir = new SearchIndexableResource(context); + sir.xmlResId = R.xml.adaptive_sleep_detail; + return Arrays.asList(sir); + } + }; +} diff --git a/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java new file mode 100644 index 00000000000..d426e7aa7ba --- /dev/null +++ b/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java @@ -0,0 +1,117 @@ +/* + * 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 android.provider.Settings.System.ADAPTIVE_SLEEP; + +import static com.google.common.truth.Truth.assertThat; + +import android.content.ContentResolver; +import android.content.Context; +import android.provider.Settings; + +import com.android.settings.R; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.MockitoAnnotations; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; + +@RunWith(RobolectricTestRunner.class) +public class AdaptiveSleepPreferenceControllerTest { + + private static final String PREFERENCE_KEY = "adaptive_sleep"; + + private Context mContext; + private AdaptiveSleepPreferenceController mController; + private ContentResolver mContentResolver; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + + mContext = RuntimeEnvironment.application; + mContentResolver = mContext.getContentResolver(); + mController = new AdaptiveSleepPreferenceController(mContext, PREFERENCE_KEY); + } + + @Test + public void onPreferenceChange_turnOn_returnOn() { + mController.onPreferenceChange(null, true); + + final int mode = Settings.System.getInt(mContentResolver, ADAPTIVE_SLEEP, 0); + assertThat(mode).isEqualTo(1); + } + + @Test + public void onPreferenceChange_turnOff_returnOff() { + mController.onPreferenceChange(null, false); + + final int mode = Settings.System.getInt(mContentResolver, ADAPTIVE_SLEEP, 1); + assertThat(mode).isEqualTo(0); + } + + @Test + public void setChecked_updatesCorrectly() { + mController.setChecked(true); + + assertThat(mController.isChecked()).isTrue(); + + mController.setChecked(false); + + assertThat(mController.isChecked()).isFalse(); + } + + @Test + public void isChecked_no() { + Settings.System.putInt(mContentResolver, ADAPTIVE_SLEEP, 0); + + assertThat(mController.isChecked()).isFalse(); + } + + @Test + public void isChecked_yes() { + Settings.System.putInt(mContentResolver, ADAPTIVE_SLEEP, 1); + + assertThat(mController.isChecked()).isTrue(); + } + + @Test + public void getSummary_settingOn_shouldReturnOnSummary() { + mController.setChecked(true); + + assertThat(mController.getSummary()) + .isEqualTo(mContext.getText(R.string.adaptive_sleep_summary_on)); + } + + @Test + public void getSummary_settingOff_shouldReturnOffSummary() { + mController.setChecked(false); + + assertThat(mController.getSummary()) + .isEqualTo(mContext.getText(R.string.adaptive_sleep_summary_off)); + } + + @Test + public void isSliceable_returnsTrue() { + final AdaptiveSleepPreferenceController controller = + new AdaptiveSleepPreferenceController(mContext, "any_key"); + assertThat(controller.isSliceable()).isTrue(); + } +}