Skip to content

Commit

Permalink
Update the "When to dream" settings
Browse files Browse the repository at this point in the history
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
  • Loading branch information
lusilva committed Oct 28, 2022
1 parent 18dd9b2 commit 47d84b4
Show file tree
Hide file tree
Showing 8 changed files with 78 additions and 25 deletions.
14 changes: 14 additions & 0 deletions res/values/arrays.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1216,6 +1216,20 @@
<item>90</item>
</string-array>

<!-- Options for screensaver "When to start" for devices that do not support screensavers
while on battery -->
<string-array name="when_to_start_screensaver_entries_no_battery" translatable="false">
<item>@string/screensaver_settings_summary_sleep</item>
<item>@string/screensaver_settings_summary_dock_and_charging</item>
</string-array>

<!-- Values for screensaver "When to start" for devices that do not support screensavers
while on battery -->
<string-array name="when_to_start_screensaver_values_no_battery" translatable="false">
<item>while_charging_only</item>
<item>while_docked_only</item>
</string-array>

<string-array name="when_to_start_screensaver_entries" translatable="false">
<item>@string/screensaver_settings_summary_sleep</item>
<item>@string/screensaver_settings_summary_dock</item>
Expand Down
2 changes: 2 additions & 0 deletions res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3365,6 +3365,8 @@
<string name="screensaver_settings_toggle_title">Use screen saver</string>
<!-- Display settings screen, summary fragment for screen saver options, activated when docked or asleep and charging [CHAR LIMIT=35] -->
<string name="screensaver_settings_summary_either_long">While charging or docked</string>
<!-- Display settings screen, summary fragment for screen saver options, actived while docked and charging [CHAR LIMIT=35] -->
<string name="screensaver_settings_summary_dock_and_charging">While docked and charging</string>
<!-- Display settings screen, summary fragment for screen saver options, activated when asleep and charging [CHAR LIMIT=35] -->
<string name="screensaver_settings_summary_sleep">While charging</string>
<!-- Display settings screen, summary fragment for screen saver options, activated when docked [CHAR LIMIT=35] -->
Expand Down
6 changes: 4 additions & 2 deletions src/com/android/settings/dream/DreamSettings.java
Original file line number Diff line number Diff line change
Expand Up @@ -90,12 +90,14 @@ static String getKeyFromSetting(@WhenToDream int dreamSetting) {
}
}

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:
Expand Down
13 changes: 11 additions & 2 deletions src/com/android/settings/dream/WhenToDreamPicker.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -69,11 +72,17 @@ protected List<? extends CandidateInfo> getCandidates() {
}

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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -57,7 +62,7 @@ public void updateState(Preference preference) {
preference.setSummary(R.string.screensaver_settings_when_to_dream_bedtime);
} else {
final int resId = DreamSettings.getDreamSettingDescriptionResId(
mBackend.getWhenToDreamSetting());
mBackend.getWhenToDreamSetting(), mDreamsEnabledOnBattery);
preference.setSummary(resId);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,33 +29,40 @@

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<String> 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
Expand All @@ -81,11 +88,17 @@ public void getKeyFromSetting() {
@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);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
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;
Expand All @@ -37,9 +38,11 @@
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;
Expand All @@ -53,10 +56,15 @@ public void setup() {
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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()))
Expand All @@ -88,7 +88,7 @@ public void testUpdateSummary() {
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);
Expand Down

0 comments on commit 47d84b4

Please sign in to comment.