Loading aconfig/settings_communal_flag_declarations.aconfig 0 → 100644 +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" } res/values/config.xml +3 −0 Original line number Diff line number Diff line Loading @@ -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> Loading src/com/android/settings/communal/CommunalPreferenceController.java +10 −2 Original line number Diff line number Diff line Loading @@ -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. Loading @@ -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; } } src/com/android/settings/dream/WhenToDreamPreferenceController.java +30 −19 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; } } } tests/robotests/src/com/android/settings/communal/CommunalPreferenceControllerTest.java +56 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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()); } Loading @@ -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
aconfig/settings_communal_flag_declarations.aconfig 0 → 100644 +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" }
res/values/config.xml +3 −0 Original line number Diff line number Diff line Loading @@ -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> Loading
src/com/android/settings/communal/CommunalPreferenceController.java +10 −2 Original line number Diff line number Diff line Loading @@ -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. Loading @@ -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; } }
src/com/android/settings/dream/WhenToDreamPreferenceController.java +30 −19 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; } } }
tests/robotests/src/com/android/settings/communal/CommunalPreferenceControllerTest.java +56 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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()); } Loading @@ -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); } }