Merge "Add "Hub Mode" settings to mobile settings." into main
This commit is contained in:
committed by
Android (Google) Code Review
commit
5035bede60
9
aconfig/settings_communal_flag_declarations.aconfig
Normal file
9
aconfig/settings_communal_flag_declarations.aconfig
Normal file
@@ -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"
|
||||||
|
}
|
@@ -715,6 +715,9 @@
|
|||||||
<!-- Whether to show communal settings at the top level. -->
|
<!-- Whether to show communal settings at the top level. -->
|
||||||
<bool name="config_show_communal_settings">false</bool>
|
<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 -->
|
<!-- The extra value for battery tip -->
|
||||||
<integer name="config_battery_extra_tip_value">12</integer>
|
<integer name="config_battery_extra_tip_value">12</integer>
|
||||||
|
|
||||||
|
@@ -21,6 +21,7 @@ import android.content.Context;
|
|||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.Utils;
|
import com.android.settings.Utils;
|
||||||
import com.android.settings.core.BasePreferenceController;
|
import com.android.settings.core.BasePreferenceController;
|
||||||
|
import com.android.settings.flags.Flags;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Controls the top-level Communal settings preference.
|
* Controls the top-level Communal settings preference.
|
||||||
@@ -39,7 +40,14 @@ public class CommunalPreferenceController extends BasePreferenceController {
|
|||||||
* Returns whether communal preferences are available.
|
* Returns whether communal preferences are available.
|
||||||
*/
|
*/
|
||||||
public static boolean isAvailable(Context context) {
|
public static boolean isAvailable(Context context) {
|
||||||
return context.getResources().getBoolean(R.bool.config_show_communal_settings)
|
if (context.getResources().getBoolean(R.bool.config_show_communal_settings)) {
|
||||||
&& Utils.canCurrentUserDream(context);
|
return Utils.canCurrentUserDream(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (context.getResources().getBoolean(R.bool.config_show_communal_settings_mobile)) {
|
||||||
|
return Flags.enableHubModeSettingsOnMobile() && Utils.canCurrentUserDream(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,37 +16,44 @@
|
|||||||
|
|
||||||
package com.android.settings.dream;
|
package com.android.settings.dream;
|
||||||
|
|
||||||
|
import android.annotation.StringRes;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.core.BasePreferenceController;
|
||||||
import com.android.settings.core.PreferenceControllerMixin;
|
import com.android.settings.core.PreferenceControllerMixin;
|
||||||
import com.android.settings.display.AmbientDisplayAlwaysOnPreferenceController;
|
import com.android.settings.display.AmbientDisplayAlwaysOnPreferenceController;
|
||||||
import com.android.settingslib.core.AbstractPreferenceController;
|
|
||||||
import com.android.settingslib.dream.DreamBackend;
|
import com.android.settingslib.dream.DreamBackend;
|
||||||
|
|
||||||
public class WhenToDreamPreferenceController extends AbstractPreferenceController implements
|
public class WhenToDreamPreferenceController extends BasePreferenceController implements
|
||||||
PreferenceControllerMixin {
|
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 DreamBackend mBackend;
|
||||||
private final boolean mDreamsDisabledByAmbientModeSuppression;
|
private final boolean mDreamsDisabledByAmbientModeSuppression;
|
||||||
private final boolean mDreamsEnabledOnBattery;
|
private final boolean mDreamsEnabledOnBattery;
|
||||||
|
|
||||||
WhenToDreamPreferenceController(Context context) {
|
public WhenToDreamPreferenceController(Context context) {
|
||||||
this(context, context.getResources().getBoolean(
|
this(context, DEFAULT_PREF_KEY);
|
||||||
|
}
|
||||||
|
|
||||||
|
public WhenToDreamPreferenceController(Context context, String preferenceKey) {
|
||||||
|
this(context, preferenceKey, context.getResources().getBoolean(
|
||||||
com.android.internal.R.bool.config_dreamsDisabledByAmbientModeSuppressionConfig),
|
com.android.internal.R.bool.config_dreamsDisabledByAmbientModeSuppressionConfig),
|
||||||
context.getResources().getBoolean(
|
context.getResources().getBoolean(
|
||||||
com.android.internal.R.bool.config_dreamsEnabledOnBattery));
|
com.android.internal.R.bool.config_dreamsEnabledOnBattery));
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
WhenToDreamPreferenceController(Context context,
|
WhenToDreamPreferenceController(
|
||||||
|
Context context,
|
||||||
|
String preferenceKey,
|
||||||
boolean dreamsDisabledByAmbientModeSuppression,
|
boolean dreamsDisabledByAmbientModeSuppression,
|
||||||
boolean dreamsEnabledOnBattery) {
|
boolean dreamsEnabledOnBattery) {
|
||||||
super(context);
|
super(context, preferenceKey);
|
||||||
|
|
||||||
mBackend = DreamBackend.getInstance(context);
|
mBackend = DreamBackend.getInstance(context);
|
||||||
mDreamsDisabledByAmbientModeSuppression = dreamsDisabledByAmbientModeSuppression;
|
mDreamsDisabledByAmbientModeSuppression = dreamsDisabledByAmbientModeSuppression;
|
||||||
@@ -57,23 +64,27 @@ public class WhenToDreamPreferenceController extends AbstractPreferenceControlle
|
|||||||
public void updateState(Preference preference) {
|
public void updateState(Preference preference) {
|
||||||
super.updateState(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
|
if (mDreamsDisabledByAmbientModeSuppression
|
||||||
&& AmbientDisplayAlwaysOnPreferenceController.isAodSuppressedByBedtime(mContext)) {
|
&& AmbientDisplayAlwaysOnPreferenceController.isAodSuppressedByBedtime(mContext)) {
|
||||||
preference.setSummary(R.string.screensaver_settings_when_to_dream_bedtime);
|
return R.string.screensaver_settings_when_to_dream_bedtime;
|
||||||
} else {
|
} else {
|
||||||
final int resId = DreamSettings.getDreamSettingDescriptionResId(
|
final int resId = DreamSettings.getDreamSettingDescriptionResId(
|
||||||
mBackend.getWhenToDreamSetting(), mDreamsEnabledOnBattery);
|
mBackend.getWhenToDreamSetting(), mDreamsEnabledOnBattery);
|
||||||
preference.setSummary(resId);
|
return resId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isAvailable() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPreferenceKey() {
|
|
||||||
return WHEN_TO_START;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -16,6 +16,10 @@
|
|||||||
|
|
||||||
package com.android.settings.communal;
|
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.assertFalse;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
@@ -25,12 +29,17 @@ import static org.mockito.Mockito.spy;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.UserHandle;
|
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.R;
|
||||||
|
import com.android.settings.flags.Flags;
|
||||||
import com.android.settings.testutils.shadow.SettingsShadowResources;
|
import com.android.settings.testutils.shadow.SettingsShadowResources;
|
||||||
import com.android.settings.testutils.shadow.ShadowUserManager;
|
import com.android.settings.testutils.shadow.ShadowUserManager;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
@@ -40,6 +49,9 @@ import org.robolectric.annotation.Config;
|
|||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
@Config(shadows = {SettingsShadowResources.class, ShadowUserManager.class})
|
@Config(shadows = {SettingsShadowResources.class, ShadowUserManager.class})
|
||||||
public class CommunalPreferenceControllerTest {
|
public class CommunalPreferenceControllerTest {
|
||||||
|
@Rule
|
||||||
|
public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
|
||||||
|
|
||||||
private ShadowUserManager mShadowUserManager;
|
private ShadowUserManager mShadowUserManager;
|
||||||
private CommunalPreferenceController mController;
|
private CommunalPreferenceController mController;
|
||||||
|
|
||||||
@@ -54,27 +66,68 @@ public class CommunalPreferenceControllerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void isAvailable_communalEnabled_shouldBeTrueForDockUser() {
|
public void isAvailable_communalEnabled_shouldBeTrueForPrimaryUser() {
|
||||||
setCommunalEnabled(true);
|
setCommunalEnabled(true);
|
||||||
mShadowUserManager.setUserForeground(true);
|
mShadowUserManager.setUserForeground(true);
|
||||||
assertTrue(mController.isAvailable());
|
assertTrue(mController.isAvailable());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void isAvailable_communalEnabled_shouldBeFalseForNonDockUser() {
|
public void isAvailable_communalEnabled_shouldBeFalseForSecondaryUser() {
|
||||||
setCommunalEnabled(true);
|
setCommunalEnabled(true);
|
||||||
mShadowUserManager.setUserForeground(false);
|
mShadowUserManager.setUserForeground(false);
|
||||||
assertFalse(mController.isAvailable());
|
assertFalse(mController.isAvailable());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void isAvailable_communalDisabled_shouldBeFalseForDockUser() {
|
public void isAvailable_communalDisabled_shouldBeFalseForPrimaryUser() {
|
||||||
setCommunalEnabled(false);
|
setCommunalEnabled(false);
|
||||||
mShadowUserManager.setUserForeground(true);
|
mShadowUserManager.setUserForeground(true);
|
||||||
assertFalse(mController.isAvailable());
|
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) {
|
private void setCommunalEnabled(boolean enabled) {
|
||||||
SettingsShadowResources.overrideResource(R.bool.config_show_communal_settings, 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -48,6 +48,7 @@ import org.robolectric.util.ReflectionHelpers;
|
|||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class WhenToDreamPreferenceControllerTest {
|
public class WhenToDreamPreferenceControllerTest {
|
||||||
private static final String TEST_PACKAGE = "com.android.test";
|
private static final String TEST_PACKAGE = "com.android.test";
|
||||||
|
private static final String PREF_KEY = "when_to_start";
|
||||||
|
|
||||||
private WhenToDreamPreferenceController mController;
|
private WhenToDreamPreferenceController mController;
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
@@ -64,7 +65,7 @@ public class WhenToDreamPreferenceControllerTest {
|
|||||||
public void setup() throws Exception {
|
public void setup() throws Exception {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
mContext = spy(ApplicationProvider.getApplicationContext());
|
mContext = spy(ApplicationProvider.getApplicationContext());
|
||||||
mController = new WhenToDreamPreferenceController(mContext, true, true);
|
mController = new WhenToDreamPreferenceController(mContext, PREF_KEY, true, true);
|
||||||
ReflectionHelpers.setField(mController, "mBackend", mBackend);
|
ReflectionHelpers.setField(mController, "mBackend", mBackend);
|
||||||
when(mContext.getSystemService(PowerManager.class)).thenReturn(mPowerManager);
|
when(mContext.getSystemService(PowerManager.class)).thenReturn(mPowerManager);
|
||||||
when(mPowerManager.isAmbientDisplaySuppressedForTokenByApp(anyString(), anyInt()))
|
when(mPowerManager.isAmbientDisplaySuppressedForTokenByApp(anyString(), anyInt()))
|
||||||
|
Reference in New Issue
Block a user