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

Commit 5035bede authored by William Leshner's avatar William Leshner Committed by Android (Google) Code Review
Browse files

Merge "Add "Hub Mode" settings to mobile settings." into main

parents 5267b2c3 f5a840c4
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