Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 51f838ba authored by Lucas Silva's avatar Lucas Silva
Browse files

Update dream summary when dream suppressed by bedtime mode

Bug: 246472225
Test: enabled bedtime mode, verified settings summary updated
Test: make -j64 RunSettingsRoboTests ROBOTEST_FILTER="com.android.settings.dream.WhenToDreamPreferenceControllerTest"
Change-Id: I4de12f636975b1bdf36898f7a530fde2f55644d4
parent 2fa81e22
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -3359,6 +3359,8 @@
    <string name="screensaver_settings_title">Screen saver</string>
    <!-- List of synonyms used in the settings search bar to find the “Screen saver”. [CHAR LIMIT=NONE] -->
    <string name="keywords_screensaver">screensaver</string>
    <!-- Summary for screensaver unavailable when Bedtime mode is on [CHAR LIMIT=50] -->
    <string name="screensaver_settings_when_to_dream_bedtime">Unavailable because bedtime mode is on</string>
    <!-- The title for the toggle which disables/enables screen savers [CHAR_LIMIT=30] -->
    <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] -->
+10 −1
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ import android.os.UserManager;

import androidx.preference.Preference;

import com.android.settings.R;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.dream.DreamSettings;
import com.android.settingslib.core.AbstractPreferenceController;
@@ -26,9 +27,12 @@ public class ScreenSaverPreferenceController extends AbstractPreferenceControlle
        PreferenceControllerMixin {

    private static final String KEY_SCREEN_SAVER = "screensaver";
    private final boolean mDreamsDisabledByAmbientModeSuppression;

    public ScreenSaverPreferenceController(Context context) {
        super(context);
        mDreamsDisabledByAmbientModeSuppression = context.getResources().getBoolean(
                com.android.internal.R.bool.config_dreamsDisabledByAmbientModeSuppressionConfig);
    }

    @Override
@@ -47,8 +51,13 @@ public class ScreenSaverPreferenceController extends AbstractPreferenceControlle

    @Override
    public void updateState(Preference preference) {
        if (mDreamsDisabledByAmbientModeSuppression
                && AmbientDisplayAlwaysOnPreferenceController.isAodSuppressedByBedtime(mContext)) {
            preference.setSummary(R.string.screensaver_settings_when_to_dream_bedtime);
        } else {
            preference.setSummary(DreamSettings.getSummaryTextWithDreamName(mContext));
        }
    }

    private boolean isSystemUser() {
        final UserManager userManager = mContext.getSystemService(UserManager.class);
+20 −2
Original line number Diff line number Diff line
@@ -20,7 +20,10 @@ import android.content.Context;

import androidx.preference.Preference;

import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.display.AmbientDisplayAlwaysOnPreferenceController;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.dream.DreamBackend;

@@ -29,19 +32,34 @@ public class WhenToDreamPreferenceController extends AbstractPreferenceControlle

    private static final String WHEN_TO_START = "when_to_start";
    private final DreamBackend mBackend;
    private final boolean mDreamsDisabledByAmbientModeSuppression;

    WhenToDreamPreferenceController(Context context) {
        this(context, context.getResources().getBoolean(
                com.android.internal.R.bool.config_dreamsDisabledByAmbientModeSuppressionConfig));
    }

    @VisibleForTesting
    WhenToDreamPreferenceController(Context context,
            boolean dreamsDisabledByAmbientModeSuppression) {
        super(context);

        mBackend = DreamBackend.getInstance(context);
        mDreamsDisabledByAmbientModeSuppression = dreamsDisabledByAmbientModeSuppression;
    }

    @Override
    public void updateState(Preference preference) {
        super.updateState(preference);

        int resId = DreamSettings.getDreamSettingDescriptionResId(mBackend.getWhenToDreamSetting());
        preference.setSummary(preference.getContext().getString(resId));
        if (mDreamsDisabledByAmbientModeSuppression
                && AmbientDisplayAlwaysOnPreferenceController.isAodSuppressedByBedtime(mContext)) {
            preference.setSummary(R.string.screensaver_settings_when_to_dream_bedtime);
        } else {
            final int resId = DreamSettings.getDreamSettingDescriptionResId(
                    mBackend.getWhenToDreamSetting());
            preference.setSummary(resId);
        }
    }

    @Override
+48 −7
Original line number Diff line number Diff line
@@ -16,15 +16,24 @@

package com.android.settings.dream;

import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.PowerManager;

import androidx.preference.Preference;
import androidx.test.core.app.ApplicationProvider;

import com.android.settings.R;
import com.android.settings.display.AmbientDisplayAlwaysOnPreferenceController;
import com.android.settingslib.dream.DreamBackend;
import com.android.settingslib.dream.DreamBackend.WhenToDream;

@@ -38,32 +47,64 @@ import org.robolectric.util.ReflectionHelpers;

@RunWith(RobolectricTestRunner.class)
public class WhenToDreamPreferenceControllerTest {
    private static final String TEST_PACKAGE = "com.android.test";

    private WhenToDreamPreferenceController mController;
    private Context mContext;
    @Mock
    private DreamBackend mBackend;
    @Mock
    private PowerManager mPowerManager;
    @Mock
    private PackageManager mPackageManager;
    @Mock
    private ApplicationInfo mApplicationInfo;

    @Before
    public void setup() {
    public void setup() throws Exception {
        MockitoAnnotations.initMocks(this);
        mContext = ApplicationProvider.getApplicationContext();
        mController = new WhenToDreamPreferenceController(mContext);
        mContext = spy(ApplicationProvider.getApplicationContext());
        mController = new WhenToDreamPreferenceController(mContext, true);
        ReflectionHelpers.setField(mController, "mBackend", mBackend);
        when(mContext.getSystemService(PowerManager.class)).thenReturn(mPowerManager);
        when(mPowerManager.isAmbientDisplaySuppressedForTokenByApp(anyString(), anyInt()))
                .thenReturn(false);

        mApplicationInfo.uid = 1;
        when(mContext.getString(
                com.android.internal.R.string.config_defaultWellbeingPackage)).thenReturn(
                TEST_PACKAGE);

        when(mContext.getPackageManager()).thenReturn(mPackageManager);
        when(mPackageManager.getApplicationInfo(TEST_PACKAGE, /* flag= */ 0)).thenReturn(
                mApplicationInfo);
    }

    @Test
    public void updateSummary() {
    public void testUpdateSummary() {
        // Don't have to test the other settings because DreamSettings tests that all
        // @WhenToDream values map to the correct ResId
        final @WhenToDream int testSetting = DreamBackend.WHILE_CHARGING;
        final Preference mockPref = mock(Preference.class);
        when(mockPref.getContext()).thenReturn(mContext);
        when(mBackend.getWhenToDreamSetting()).thenReturn(testSetting);
        final String expectedString =
                mContext.getString(DreamSettings.getDreamSettingDescriptionResId(testSetting));
        final int expectedResId = DreamSettings.getDreamSettingDescriptionResId(testSetting);

        mController.updateState(mockPref);
        verify(mockPref).setSummary(expectedResId);
    }

    @Test
    public void testBedtimeModeSuppression() {
        final Preference mockPref = mock(Preference.class);
        when(mockPref.getContext()).thenReturn(mContext);
        when(mBackend.getWhenToDreamSetting()).thenReturn(DreamBackend.WHILE_CHARGING);
        when(mPowerManager.isAmbientDisplaySuppressedForTokenByApp(anyString(), anyInt()))
                .thenReturn(true);

        assertTrue(AmbientDisplayAlwaysOnPreferenceController.isAodSuppressedByBedtime(mContext));

        mController.updateState(mockPref);
        verify(mockPref).setSummary(expectedString);
        verify(mockPref).setSummary(R.string.screensaver_settings_when_to_dream_bedtime);
    }
}