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 a6cea86b0e9..a847571a83e 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -3371,6 +3371,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);