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

Commit 69f68f1b authored by Bryce Lee's avatar Bryce Lee Committed by Android (Google) Code Review
Browse files

Merge "Resolve missing whenToDreamSettings." into main

parents 32b9d893 9257174a
Loading
Loading
Loading
Loading
+60 −5
Original line number Diff line number Diff line
@@ -340,16 +340,50 @@ public class DreamBackend {

    @WhenToDream
    public int getWhenToDreamSetting() {
        return isActivatedOnDock() && isActivatedOnSleep() ? WHILE_CHARGING_OR_DOCKED
                : isActivatedOnSleep() ? WHILE_CHARGING
                        : isActivatedOnDock() ? WHILE_DOCKED
                                : isActivatedOnPostured() ? WHILE_POSTURED
        return getWhenToDreamSetting(false);
    }

    /**
     * Returns the default when to dream setting.
     */
    @WhenToDream
    public int getDefaultWhenToDreamSetting() {
        return getWhenToDreamSetting(true);
    }

    /**
     * Retrieves when to dream setting.
     * @param defaultOnly Retrieve default value only.
     */
    @WhenToDream
    @VisibleForTesting
    private int getWhenToDreamSetting(boolean defaultOnly) {
        final boolean isActivatedOnDock = defaultOnly ? mDreamsActivatedOnDockByDefault
                : isActivatedOnDock();
        final boolean isActivatedOnSleep = defaultOnly ? mDreamsActivatedOnSleepByDefault
                : isActivatedOnSleep();
        final boolean isActivatedOnPostured = defaultOnly ? mDreamsActivatedOnPosturedByDefault
                : isActivatedOnPostured();

        return isActivatedOnDock && isActivatedOnSleep ? WHILE_CHARGING_OR_DOCKED
                : isActivatedOnSleep ? WHILE_CHARGING
                        : isActivatedOnDock ? WHILE_DOCKED
                                : isActivatedOnPostured ? WHILE_POSTURED
                                        : NEVER;
    }

    public void setWhenToDream(@WhenToDream int whenToDream) {
        setEnabled(whenToDream != NEVER);

        updateWhenToDream(whenToDream);

        logDreamSettingChangeToStatsd(DS_TYPE_WHEN_TO_DREAM);
    }

    /**
     * Allows when to dream to be toggled without changing the enabled status or logging.
     */
    private void updateWhenToDream(@WhenToDream int whenToDream) {
        switch (whenToDream) {
            case WHILE_CHARGING:
                setActivatedOnDock(false);
@@ -379,8 +413,29 @@ public class DreamBackend {
            default:
                break;
        }
    }

        logDreamSettingChangeToStatsd(DS_TYPE_WHEN_TO_DREAM);
    /**
     * Updates set whenToDream setting to be within the given option set.
     * @param availableOptions the available whenToDream settings options
     */
    public void resolveMissingWhenToDream(int[] availableOptions) {
        final int current = getWhenToDreamSetting();

        // If selected option is available, exit early.
        if (Arrays.stream(availableOptions).anyMatch(option ->option == current)) {
            return;
        }

        // Turn off dreams
        setEnabled(false);

        final int defaultOption = getDefaultWhenToDreamSetting();

        // set to default value if available.
        if (Arrays.stream(availableOptions).anyMatch(option ->option == defaultOption)) {
            updateWhenToDream(defaultOption);
        }
    }

    /** Gets all complications which have been enabled by the user. */
+33 −0
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@ import static android.service.dreams.Flags.FLAG_ALLOW_DREAM_WHEN_POSTURED;
import static com.android.settingslib.dream.DreamBackend.COMPLICATION_TYPE_DATE;
import static com.android.settingslib.dream.DreamBackend.COMPLICATION_TYPE_HOME_CONTROLS;
import static com.android.settingslib.dream.DreamBackend.COMPLICATION_TYPE_TIME;
import static com.android.settingslib.dream.DreamBackend.WHILE_CHARGING;
import static com.android.settingslib.dream.DreamBackend.WHILE_CHARGING_OR_DOCKED;

import static com.google.common.truth.Truth.assertThat;

@@ -81,6 +83,13 @@ public final class DreamBackendTest {
        when(res.getStringArray(
                com.android.internal.R.array.config_loggable_dream_prefixes)).thenReturn(
                new String[]{});
        when(res.getBoolean(com.android.internal.R.bool.config_dreamsActivatedOnSleepByDefault
                )).thenReturn(true);
        when(res.getBoolean(com.android.internal.R.bool.config_dreamsActivatedOnDockByDefault
                )).thenReturn(false);
        when(res.getBoolean(com.android.internal.R.bool.config_dreamsActivatedOnPosturedByDefault
                )).thenReturn(false);

        mBackend = new DreamBackend(mContext);
    }

@@ -115,6 +124,25 @@ public final class DreamBackendTest {
        assertThat(mBackend.getComplicationsEnabled()).isFalse();
    }

    @Test
    public void testResolveMissingWhenToStartOption() {
        mBackend.setWhenToDream(WHILE_CHARGING_OR_DOCKED);
        mBackend.setEnabled(true);
        assertThat(mBackend.getDefaultWhenToDreamSetting()).isEqualTo(WHILE_CHARGING);
        mBackend.resolveMissingWhenToDream(new int[]{WHILE_CHARGING});
        assertThat(mBackend.getWhenToDreamSetting()).isEqualTo(WHILE_CHARGING);
        assertThat(mBackend.isEnabled()).isFalse();
    }

    @Test
    public void testResolveMissingWhenToStartOptionWhenCompliant() {
        mBackend.setWhenToDream(WHILE_CHARGING_OR_DOCKED);
        mBackend.setEnabled(true);
        mBackend.resolveMissingWhenToDream(new int[]{WHILE_CHARGING, WHILE_CHARGING_OR_DOCKED});
        assertThat(mBackend.getWhenToDreamSetting()).isEqualTo(WHILE_CHARGING_OR_DOCKED);
        assertThat(mBackend.isEnabled()).isTrue();
    }

    @Test
    public void testHomeControlsDisabled_ComplicationsEnabled() {
        setControlsEnabledOnLockscreen(true);
@@ -218,6 +246,11 @@ public final class DreamBackendTest {
                Settings.Secure.SCREENSAVER_ACTIVATE_ON_POSTURED,
                1
        );
        Settings.Secure.putInt(
                mContext.getContentResolver(),
                Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP,
                0
        );
        Settings.Secure.putInt(
                mContext.getContentResolver(),
                Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK,