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()))