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

Commit f5a840c4 authored by Will Leshner's avatar Will Leshner
Browse files

Add "Hub Mode" settings to mobile settings.

Bug: 389782624
Test: atest CommunalPreferenceControllerTest
WhenToDreamPreferenceControllerTest
Flag: com.android.settings.flags.enable_hub_mode_settings_on_mobile

Change-Id: Ic823b43e094722e467bcca5c16fc480af11e2d9e
parent 3dcc09cc
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
package: "com.android.settings.flags"
container: "system"

flag {
  name: "enable_hub_mode_settings_on_mobile"
  namespace: "systemui"
  description: "This flag controls whether hub mode settings should be enabled on mobile"
  bug: "389782624"
}
+3 −0
Original line number Diff line number Diff line
@@ -715,6 +715,9 @@
    <!-- Whether to show communal settings at the top level. -->
    <bool name="config_show_communal_settings">false</bool>

    <!-- Whether to show communal settings at the top level on mobile. -->
    <bool name="config_show_communal_settings_mobile">false</bool>

    <!-- The extra value for battery tip -->
    <integer name="config_battery_extra_tip_value">12</integer>

+10 −2
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.content.Context;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.flags.Flags;

/**
 * Controls the top-level Communal settings preference.
@@ -39,7 +40,14 @@ public class CommunalPreferenceController extends BasePreferenceController {
     * Returns whether communal preferences are available.
     */
    public static boolean isAvailable(Context context) {
        return context.getResources().getBoolean(R.bool.config_show_communal_settings)
                && Utils.canCurrentUserDream(context);
        if (context.getResources().getBoolean(R.bool.config_show_communal_settings)) {
            return Utils.canCurrentUserDream(context);
        }

        if (context.getResources().getBoolean(R.bool.config_show_communal_settings_mobile)) {
            return Flags.enableHubModeSettingsOnMobile() && Utils.canCurrentUserDream(context);
        }

        return false;
    }
}
+30 −19
Original line number Diff line number Diff line
@@ -16,37 +16,44 @@

package com.android.settings.dream;

import android.annotation.StringRes;
import android.content.Context;

import androidx.preference.Preference;

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

public class WhenToDreamPreferenceController extends AbstractPreferenceController implements
public class WhenToDreamPreferenceController extends BasePreferenceController implements
        PreferenceControllerMixin {

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

    WhenToDreamPreferenceController(Context context) {
        this(context, context.getResources().getBoolean(
    public WhenToDreamPreferenceController(Context context) {
        this(context, DEFAULT_PREF_KEY);
    }

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

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

        mBackend = DreamBackend.getInstance(context);
        mDreamsDisabledByAmbientModeSuppression = dreamsDisabledByAmbientModeSuppression;
@@ -57,23 +64,27 @@ public class WhenToDreamPreferenceController extends AbstractPreferenceControlle
    public void updateState(Preference preference) {
        super.updateState(preference);

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

    @Override
    public boolean isAvailable() {
        return true;
    public int getAvailabilityStatus() {
        return AVAILABLE;
    }

    @Override
    public String getPreferenceKey() {
        return WHEN_TO_START;
    public CharSequence getSummary() {
        return mContext.getString(getSummaryResId());
    }

    private @StringRes int getSummaryResId() {
        if (mDreamsDisabledByAmbientModeSuppression
                && AmbientDisplayAlwaysOnPreferenceController.isAodSuppressedByBedtime(mContext)) {
            return R.string.screensaver_settings_when_to_dream_bedtime;
        } else {
            final int resId = DreamSettings.getDreamSettingDescriptionResId(
                    mBackend.getWhenToDreamSetting(), mDreamsEnabledOnBattery);
            return resId;
        }
    }
}
+56 −3
Original line number Diff line number Diff line
@@ -16,6 +16,10 @@

package com.android.settings.communal;

import static com.android.settings.core.BasePreferenceController.AVAILABLE;

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

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
@@ -25,12 +29,17 @@ import static org.mockito.Mockito.spy;

import android.content.Context;
import android.os.UserHandle;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;

import com.android.settings.R;
import com.android.settings.flags.Flags;
import com.android.settings.testutils.shadow.SettingsShadowResources;
import com.android.settings.testutils.shadow.ShadowUserManager;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
@@ -40,6 +49,9 @@ import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {SettingsShadowResources.class, ShadowUserManager.class})
public class CommunalPreferenceControllerTest {
    @Rule
    public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();

    private ShadowUserManager mShadowUserManager;
    private CommunalPreferenceController mController;

@@ -54,22 +66,58 @@ public class CommunalPreferenceControllerTest {
    }

    @Test
    public void isAvailable_communalEnabled_shouldBeTrueForDockUser() {
    public void isAvailable_communalEnabled_shouldBeTrueForPrimaryUser() {
        setCommunalEnabled(true);
        mShadowUserManager.setUserForeground(true);
        assertTrue(mController.isAvailable());
    }

    @Test
    public void isAvailable_communalEnabled_shouldBeFalseForNonDockUser() {
    public void isAvailable_communalEnabled_shouldBeFalseForSecondaryUser() {
        setCommunalEnabled(true);
        mShadowUserManager.setUserForeground(false);
        assertFalse(mController.isAvailable());
    }

    @Test
    public void isAvailable_communalDisabled_shouldBeFalseForDockUser() {
    public void isAvailable_communalDisabled_shouldBeFalseForPrimaryUser() {
        setCommunalEnabled(false);
        mShadowUserManager.setUserForeground(true);
        assertFalse(mController.isAvailable());
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_HUB_MODE_SETTINGS_ON_MOBILE)
    public void isAvailable_communalOnMobileEnabled_shouldBeTrueForPrimaryUser() {
        setCommunalEnabled(false);
        setCommunalOnMobileEnabled(true);
        mShadowUserManager.setUserForeground(true);
        assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_HUB_MODE_SETTINGS_ON_MOBILE)
    public void isAvailable_communalOnMobileEnabled_shouldBeFalseForSecondaryUser() {
        setCommunalEnabled(false);
        setCommunalOnMobileEnabled(true);
        mShadowUserManager.setUserForeground(false);
        assertFalse(mController.isAvailable());
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_HUB_MODE_SETTINGS_ON_MOBILE)
    public void isAvailable_communalOnMobileDisabled_shouldBeFalseForPrimaryUser() {
        setCommunalEnabled(false);
        setCommunalOnMobileEnabled(false);
        mShadowUserManager.setUserForeground(true);
        assertFalse(mController.isAvailable());
    }

    @Test
    @DisableFlags(Flags.FLAG_ENABLE_HUB_MODE_SETTINGS_ON_MOBILE)
    public void isAvailable_hubModeSettingsOnMobileFlagDisabled_shouldBeFalseForPrimaryUser() {
        setCommunalEnabled(false);
        setCommunalOnMobileEnabled(true);
        mShadowUserManager.setUserForeground(true);
        assertFalse(mController.isAvailable());
    }
@@ -77,4 +125,9 @@ public class CommunalPreferenceControllerTest {
    private void setCommunalEnabled(boolean enabled) {
        SettingsShadowResources.overrideResource(R.bool.config_show_communal_settings, enabled);
    }

    private void setCommunalOnMobileEnabled(boolean enabled) {
        SettingsShadowResources.overrideResource(
                R.bool.config_show_communal_settings_mobile, enabled);
    }
}
Loading