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. -->
|
||||
<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>
|
||||
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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()))
|
||||
|
Reference in New Issue
Block a user