diff --git a/aconfig/settings_communal_flag_declarations.aconfig b/aconfig/settings_communal_flag_declarations.aconfig new file mode 100644 index 00000000000..3d3a80522ea --- /dev/null +++ b/aconfig/settings_communal_flag_declarations.aconfig @@ -0,0 +1,9 @@ +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" +} diff --git a/res/values/config.xml b/res/values/config.xml index 95f8eba8f84..c9cc4556861 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -715,6 +715,9 @@ false + + false + 12 diff --git a/src/com/android/settings/communal/CommunalPreferenceController.java b/src/com/android/settings/communal/CommunalPreferenceController.java index 706e39237f4..f93746833ff 100644 --- a/src/com/android/settings/communal/CommunalPreferenceController.java +++ b/src/com/android/settings/communal/CommunalPreferenceController.java @@ -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; } } diff --git a/src/com/android/settings/dream/WhenToDreamPreferenceController.java b/src/com/android/settings/dream/WhenToDreamPreferenceController.java index c3bae0064c9..b8b873f81c6 100644 --- a/src/com/android/settings/dream/WhenToDreamPreferenceController.java +++ b/src/com/android/settings/dream/WhenToDreamPreferenceController.java @@ -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); + preference.setSummary(getSummaryResId()); + } + + @Override + public int getAvailabilityStatus() { + return AVAILABLE; + } + + @Override + public CharSequence getSummary() { + return mContext.getString(getSummaryResId()); + } + + private @StringRes int getSummaryResId() { if (mDreamsDisabledByAmbientModeSuppression && AmbientDisplayAlwaysOnPreferenceController.isAodSuppressedByBedtime(mContext)) { - preference.setSummary(R.string.screensaver_settings_when_to_dream_bedtime); + return R.string.screensaver_settings_when_to_dream_bedtime; } else { final int resId = DreamSettings.getDreamSettingDescriptionResId( mBackend.getWhenToDreamSetting(), mDreamsEnabledOnBattery); - preference.setSummary(resId); + return resId; } } - - @Override - public boolean isAvailable() { - return true; - } - - @Override - public String getPreferenceKey() { - return WHEN_TO_START; - } } diff --git a/tests/robotests/src/com/android/settings/communal/CommunalPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/communal/CommunalPreferenceControllerTest.java index 2114123e62f..b88b1aa661b 100644 --- a/tests/robotests/src/com/android/settings/communal/CommunalPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/communal/CommunalPreferenceControllerTest.java @@ -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,27 +66,68 @@ 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()); + } + 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); + } } diff --git a/tests/robotests/src/com/android/settings/dream/WhenToDreamPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/dream/WhenToDreamPreferenceControllerTest.java index e173add0724..7d9fd052720 100644 --- a/tests/robotests/src/com/android/settings/dream/WhenToDreamPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/dream/WhenToDreamPreferenceControllerTest.java @@ -48,6 +48,7 @@ import org.robolectric.util.ReflectionHelpers; @RunWith(RobolectricTestRunner.class) public class WhenToDreamPreferenceControllerTest { private static final String TEST_PACKAGE = "com.android.test"; + private static final String PREF_KEY = "when_to_start"; private WhenToDreamPreferenceController mController; private Context mContext; @@ -64,7 +65,7 @@ public class WhenToDreamPreferenceControllerTest { public void setup() throws Exception { MockitoAnnotations.initMocks(this); mContext = spy(ApplicationProvider.getApplicationContext()); - mController = new WhenToDreamPreferenceController(mContext, true, true); + mController = new WhenToDreamPreferenceController(mContext, PREF_KEY, true, true); ReflectionHelpers.setField(mController, "mBackend", mBackend); when(mContext.getSystemService(PowerManager.class)).thenReturn(mPowerManager); when(mPowerManager.isAmbientDisplaySuppressedForTokenByApp(anyString(), anyInt()))