From 47d84b41ac8fe8751cf893f3ac43e7d055593491 Mon Sep 17 00:00:00 2001 From: Lucas Silva Date: Thu, 27 Oct 2022 13:44:14 -0400 Subject: [PATCH] Update the "When to dream" settings For devices which don't support dreaming on battery, we can offer simpler options since the device must always be charging for screensavers to appear. Therefore there are only two options: 1. While charging 2. While docked and charging Test: flashed and verified on device Test: make -j64 RunSettingsRoboTests Fixes: 226187572 Change-Id: I6ed24cda8874f2fb941f6cfded9ed97ed78a3cb6 --- res/values/arrays.xml | 14 ++++++ res/values/strings.xml | 2 + .../android/settings/dream/DreamSettings.java | 6 ++- .../settings/dream/WhenToDreamPicker.java | 13 +++++- .../WhenToDreamPreferenceController.java | 11 +++-- .../settings/dream/DreamSettingsTest.java | 43 ++++++++++++------- .../settings/dream/WhenToDreamPickerTest.java | 10 ++++- .../WhenToDreamPreferenceControllerTest.java | 4 +- 8 files changed, 78 insertions(+), 25 deletions(-) diff --git a/res/values/arrays.xml b/res/values/arrays.xml index a8bd35cd793..f8b7f008c60 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -1216,6 +1216,20 @@ 90 + + + @string/screensaver_settings_summary_sleep + @string/screensaver_settings_summary_dock_and_charging + + + + + while_charging_only + while_docked_only + + @string/screensaver_settings_summary_sleep @string/screensaver_settings_summary_dock diff --git a/res/values/strings.xml b/res/values/strings.xml index dfb99647f81..03a103e8125 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -3365,6 +3365,8 @@ Use screen saver While charging or docked + + While docked and charging While charging diff --git a/src/com/android/settings/dream/DreamSettings.java b/src/com/android/settings/dream/DreamSettings.java index 1d12c1aecd5..580211a7d5b 100644 --- a/src/com/android/settings/dream/DreamSettings.java +++ b/src/com/android/settings/dream/DreamSettings.java @@ -90,12 +90,14 @@ public class DreamSettings extends DashboardFragment implements OnMainSwitchChan } } - static int getDreamSettingDescriptionResId(@WhenToDream int dreamSetting) { + static int getDreamSettingDescriptionResId(@WhenToDream int dreamSetting, + boolean enabledOnBattery) { switch (dreamSetting) { case WHILE_CHARGING: return R.string.screensaver_settings_summary_sleep; case WHILE_DOCKED: - return R.string.screensaver_settings_summary_dock; + return enabledOnBattery ? R.string.screensaver_settings_summary_dock + : R.string.screensaver_settings_summary_dock_and_charging; case EITHER: return R.string.screensaver_settings_summary_either_long; case NEVER: diff --git a/src/com/android/settings/dream/WhenToDreamPicker.java b/src/com/android/settings/dream/WhenToDreamPicker.java index 1c5e25ebac2..13cdadf1981 100644 --- a/src/com/android/settings/dream/WhenToDreamPicker.java +++ b/src/com/android/settings/dream/WhenToDreamPicker.java @@ -32,12 +32,15 @@ public class WhenToDreamPicker extends RadioButtonPickerFragment { private static final String TAG = "WhenToDreamPicker"; private DreamBackend mBackend; + private boolean mDreamsSupportedOnBattery; @Override public void onAttach(Context context) { super.onAttach(context); mBackend = DreamBackend.getInstance(context); + mDreamsSupportedOnBattery = getResources().getBoolean( + com.android.internal.R.bool.config_dreamsEnabledOnBattery); } @Override @@ -69,11 +72,17 @@ public class WhenToDreamPicker extends RadioButtonPickerFragment { } private String[] entries() { - return getResources().getStringArray(R.array.when_to_start_screensaver_entries); + if (mDreamsSupportedOnBattery) { + return getResources().getStringArray(R.array.when_to_start_screensaver_entries); + } + return getResources().getStringArray(R.array.when_to_start_screensaver_entries_no_battery); } private String[] keys() { - return getResources().getStringArray(R.array.when_to_start_screensaver_values); + if (mDreamsSupportedOnBattery) { + return getResources().getStringArray(R.array.when_to_start_screensaver_values); + } + return getResources().getStringArray(R.array.when_to_start_screensaver_values_no_battery); } @Override diff --git a/src/com/android/settings/dream/WhenToDreamPreferenceController.java b/src/com/android/settings/dream/WhenToDreamPreferenceController.java index 02ae6a75f39..c3bae0064c9 100644 --- a/src/com/android/settings/dream/WhenToDreamPreferenceController.java +++ b/src/com/android/settings/dream/WhenToDreamPreferenceController.java @@ -33,19 +33,24 @@ public class WhenToDreamPreferenceController extends AbstractPreferenceControlle private static final String WHEN_TO_START = "when_to_start"; private final DreamBackend mBackend; private final boolean mDreamsDisabledByAmbientModeSuppression; + private final boolean mDreamsEnabledOnBattery; WhenToDreamPreferenceController(Context context) { this(context, context.getResources().getBoolean( - com.android.internal.R.bool.config_dreamsDisabledByAmbientModeSuppressionConfig)); + com.android.internal.R.bool.config_dreamsDisabledByAmbientModeSuppressionConfig), + context.getResources().getBoolean( + com.android.internal.R.bool.config_dreamsEnabledOnBattery)); } @VisibleForTesting WhenToDreamPreferenceController(Context context, - boolean dreamsDisabledByAmbientModeSuppression) { + boolean dreamsDisabledByAmbientModeSuppression, + boolean dreamsEnabledOnBattery) { super(context); mBackend = DreamBackend.getInstance(context); mDreamsDisabledByAmbientModeSuppression = dreamsDisabledByAmbientModeSuppression; + mDreamsEnabledOnBattery = dreamsEnabledOnBattery; } @Override @@ -57,7 +62,7 @@ public class WhenToDreamPreferenceController extends AbstractPreferenceControlle preference.setSummary(R.string.screensaver_settings_when_to_dream_bedtime); } else { final int resId = DreamSettings.getDreamSettingDescriptionResId( - mBackend.getWhenToDreamSetting()); + mBackend.getWhenToDreamSetting(), mDreamsEnabledOnBattery); preference.setSummary(resId); } } diff --git a/tests/robotests/src/com/android/settings/dream/DreamSettingsTest.java b/tests/robotests/src/com/android/settings/dream/DreamSettingsTest.java index a5545645e9b..c1cc6ae043f 100644 --- a/tests/robotests/src/com/android/settings/dream/DreamSettingsTest.java +++ b/tests/robotests/src/com/android/settings/dream/DreamSettingsTest.java @@ -29,33 +29,40 @@ import com.android.settingslib.dream.DreamBackend.WhenToDream; import org.junit.Test; import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; import java.util.Arrays; import java.util.List; -import org.robolectric.RobolectricTestRunner; @RunWith(RobolectricTestRunner.class) public class DreamSettingsTest { private static final List KEYS = Arrays.asList( - DreamSettings.WHILE_CHARGING_ONLY, - DreamSettings.WHILE_DOCKED_ONLY, - DreamSettings.EITHER_CHARGING_OR_DOCKED, - DreamSettings.NEVER_DREAM + DreamSettings.WHILE_CHARGING_ONLY, + DreamSettings.WHILE_DOCKED_ONLY, + DreamSettings.EITHER_CHARGING_OR_DOCKED, + DreamSettings.NEVER_DREAM ); private static final @WhenToDream int[] SETTINGS = { - DreamBackend.WHILE_CHARGING, - DreamBackend.WHILE_DOCKED, - DreamBackend.EITHER, - DreamBackend.NEVER, + DreamBackend.WHILE_CHARGING, + DreamBackend.WHILE_DOCKED, + DreamBackend.EITHER, + DreamBackend.NEVER, }; private static final int[] RES_IDS = { - R.string.screensaver_settings_summary_sleep, - R.string.screensaver_settings_summary_dock, - R.string.screensaver_settings_summary_either_long, - R.string.screensaver_settings_summary_never + R.string.screensaver_settings_summary_sleep, + R.string.screensaver_settings_summary_dock, + R.string.screensaver_settings_summary_either_long, + R.string.screensaver_settings_summary_never + }; + + private static final int[] RES_IDS_NO_BATTERY = { + R.string.screensaver_settings_summary_sleep, + R.string.screensaver_settings_summary_dock_and_charging, + R.string.screensaver_settings_summary_either_long, + R.string.screensaver_settings_summary_never }; @Test @@ -81,11 +88,17 @@ public class DreamSettingsTest { @Test public void getDreamSettingDescriptionResId() { for (int i = 0; i < SETTINGS.length; i++) { - assertThat(DreamSettings.getDreamSettingDescriptionResId(SETTINGS[i])) + assertThat(DreamSettings.getDreamSettingDescriptionResId( + SETTINGS[i], /* enabledOnBattery= */ false)) + .isEqualTo(RES_IDS_NO_BATTERY[i]); + assertThat(DreamSettings.getDreamSettingDescriptionResId( + SETTINGS[i], /* enabledOnBattery= */ true)) .isEqualTo(RES_IDS[i]); } // Default - assertThat(DreamSettings.getDreamSettingDescriptionResId(-1)) + assertThat(DreamSettings.getDreamSettingDescriptionResId(-1, /* enabledOnBattery= */ false)) + .isEqualTo(R.string.screensaver_settings_summary_never); + assertThat(DreamSettings.getDreamSettingDescriptionResId(-1, /* enabledOnBattery= */ true)) .isEqualTo(R.string.screensaver_settings_summary_never); } diff --git a/tests/robotests/src/com/android/settings/dream/WhenToDreamPickerTest.java b/tests/robotests/src/com/android/settings/dream/WhenToDreamPickerTest.java index 16f8599f2f1..91ec2993893 100644 --- a/tests/robotests/src/com/android/settings/dream/WhenToDreamPickerTest.java +++ b/tests/robotests/src/com/android/settings/dream/WhenToDreamPickerTest.java @@ -28,6 +28,7 @@ import android.os.UserManager; import androidx.test.core.app.ApplicationProvider; import com.android.settings.testutils.FakeFeatureFactory; +import com.android.settings.testutils.shadow.SettingsShadowResources; import com.android.settingslib.dream.DreamBackend; import org.junit.Before; @@ -37,9 +38,11 @@ import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; @RunWith(RobolectricTestRunner.class) +@Config(shadows = SettingsShadowResources.class) public class WhenToDreamPickerTest { private WhenToDreamPicker mPicker; @@ -53,10 +56,15 @@ public class WhenToDreamPickerTest { MockitoAnnotations.initMocks(this); final Context context = spy(ApplicationProvider.getApplicationContext()); + SettingsShadowResources.overrideResource( + com.android.internal.R.bool.config_dreamsEnabledOnBattery, + true); + when(context.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); FakeFeatureFactory.setupForTest(); - mPicker = new WhenToDreamPicker(); + mPicker = spy(new WhenToDreamPicker()); + when(mPicker.getContext()).thenReturn(context); mPicker.onAttach(context); ReflectionHelpers.setField(mPicker, "mBackend", mBackend); diff --git a/tests/robotests/src/com/android/settings/dream/WhenToDreamPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/dream/WhenToDreamPreferenceControllerTest.java index 458c5c6ceee..6e687bba7d9 100644 --- a/tests/robotests/src/com/android/settings/dream/WhenToDreamPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/dream/WhenToDreamPreferenceControllerTest.java @@ -64,7 +64,7 @@ public class WhenToDreamPreferenceControllerTest { public void setup() throws Exception { MockitoAnnotations.initMocks(this); mContext = spy(ApplicationProvider.getApplicationContext()); - mController = new WhenToDreamPreferenceController(mContext, true); + mController = new WhenToDreamPreferenceController(mContext, true, true); ReflectionHelpers.setField(mController, "mBackend", mBackend); when(mContext.getSystemService(PowerManager.class)).thenReturn(mPowerManager); when(mPowerManager.isAmbientDisplaySuppressedForTokenByApp(anyString(), anyInt())) @@ -88,7 +88,7 @@ public class WhenToDreamPreferenceControllerTest { final Preference mockPref = mock(Preference.class); when(mockPref.getContext()).thenReturn(mContext); when(mBackend.getWhenToDreamSetting()).thenReturn(testSetting); - final int expectedResId = DreamSettings.getDreamSettingDescriptionResId(testSetting); + final int expectedResId = DreamSettings.getDreamSettingDescriptionResId(testSetting, true); mController.updateState(mockPref); verify(mockPref).setSummary(expectedResId);