From e5e232428dec8e5221c6ccf18dd338811a091a72 Mon Sep 17 00:00:00 2001 From: Adam Bookatz Date: Mon, 7 Nov 2022 10:51:01 -0800 Subject: [PATCH] Introduce concept of DockUser Dreams and docking often refers to "user zero" or "system user". But more generally, the special user for dreams or switching-to-on-docking need not be user 0, and in fact won't be in certain modes. So this needs updating. Test: the files mentioned in the topic Bug: 257333623 Change-Id: If068aa79a770bed4abf3f7ca1859a95cd1eb4ecd Merged-In: If068aa79a770bed4abf3f7ca1859a95cd1eb4ecd --- res/values/arrays.xml | 8 +++---- res/values/strings.xml | 5 ++-- res/xml/user_settings.xml | 8 +++---- ...=> user_timeout_to_dock_user_settings.xml} | 2 +- .../ScreenSaverPreferenceController.java | 7 +++--- ...imeoutToDockUserPreferenceController.java} | 19 ++++++++------- ...gs.java => TimeoutToDockUserSettings.java} | 16 ++++++------- .../android/settings/users/UserSettings.java | 14 +++++------ ...utToDockUserPreferenceControllerTest.java} | 24 +++++++++---------- ...ava => TimeoutToDockUserSettingsTest.java} | 10 ++++---- .../ScreenSaverPreferenceControllerTest.java | 10 ++++---- 11 files changed, 63 insertions(+), 60 deletions(-) rename res/xml/{user_timeout_to_user_zero_settings.xml => user_timeout_to_dock_user_settings.xml} (92%) rename src/com/android/settings/users/{TimeoutToUserZeroPreferenceController.java => TimeoutToDockUserPreferenceController.java} (79%) rename src/com/android/settings/users/{TimeoutToUserZeroSettings.java => TimeoutToDockUserSettings.java} (86%) rename tests/robotests/src/com/android/settings/users/{TimeoutToUserZeroPreferenceControllerTest.java => TimeoutToDockUserPreferenceControllerTest.java} (89%) rename tests/robotests/src/com/android/settings/users/{TimeoutToUserZeroSettingsTest.java => TimeoutToDockUserSettingsTest.java} (91%) diff --git a/res/values/arrays.xml b/res/values/arrays.xml index f8b7f008c60..73de1834283 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -1623,15 +1623,15 @@ 1 - - + + Never After 1 minute After 5 minutes - - + + 0 diff --git a/res/values/strings.xml b/res/values/strings.xml index 5fafdbf7869..1f7dd6e6a66 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -7890,9 +7890,10 @@ Lock screen settings Add users from lock screen - + - Switch to admin user when docked + Switch to admin user when docked Delete yourself? diff --git a/res/xml/user_settings.xml b/res/xml/user_settings.xml index 5cbfe4306eb..c14bfbd52ca 100644 --- a/res/xml/user_settings.xml +++ b/res/xml/user_settings.xml @@ -86,10 +86,10 @@ settings:allowDividerAbove="true"/> + android:fragment="com.android.settings.users.TimeoutToDockUserSettings" + settings:controller="com.android.settings.users.TimeoutToDockUserPreferenceController"/> diff --git a/res/xml/user_timeout_to_user_zero_settings.xml b/res/xml/user_timeout_to_dock_user_settings.xml similarity index 92% rename from res/xml/user_timeout_to_user_zero_settings.xml rename to res/xml/user_timeout_to_dock_user_settings.xml index 54121a3b2d9..42eae2675fd 100644 --- a/res/xml/user_timeout_to_user_zero_settings.xml +++ b/res/xml/user_timeout_to_dock_user_settings.xml @@ -17,4 +17,4 @@ + android:title="@string/switch_to_dock_user_when_docked"/> diff --git a/src/com/android/settings/display/ScreenSaverPreferenceController.java b/src/com/android/settings/display/ScreenSaverPreferenceController.java index de1aaea0bd8..d6fef11b220 100644 --- a/src/com/android/settings/display/ScreenSaverPreferenceController.java +++ b/src/com/android/settings/display/ScreenSaverPreferenceController.java @@ -39,9 +39,10 @@ public class ScreenSaverPreferenceController extends AbstractPreferenceControlle public boolean isAvailable() { final boolean dreamsSupported = mContext.getResources().getBoolean( com.android.internal.R.bool.config_dreamsSupported); - final boolean dreamsOnlyEnabledForSystemUser = mContext.getResources().getBoolean( - com.android.internal.R.bool.config_dreamsOnlyEnabledForSystemUser); - return dreamsSupported && (!dreamsOnlyEnabledForSystemUser || isSystemUser()); + final boolean dreamsOnlyEnabledForDockUser = mContext.getResources().getBoolean( + com.android.internal.R.bool.config_dreamsOnlyEnabledForDockUser); + // TODO(b/257333623): Allow the Dock User to be non-SystemUser user in HSUM. + return dreamsSupported && (!dreamsOnlyEnabledForDockUser || isSystemUser()); } @Override diff --git a/src/com/android/settings/users/TimeoutToUserZeroPreferenceController.java b/src/com/android/settings/users/TimeoutToDockUserPreferenceController.java similarity index 79% rename from src/com/android/settings/users/TimeoutToUserZeroPreferenceController.java rename to src/com/android/settings/users/TimeoutToDockUserPreferenceController.java index c332726f617..98dca2a9ade 100644 --- a/src/com/android/settings/users/TimeoutToUserZeroPreferenceController.java +++ b/src/com/android/settings/users/TimeoutToDockUserPreferenceController.java @@ -16,7 +16,7 @@ package com.android.settings.users; -import static android.provider.Settings.Secure.TIMEOUT_TO_USER_ZERO; +import static android.provider.Settings.Secure.TIMEOUT_TO_DOCK_USER; import android.content.Context; import android.os.UserHandle; @@ -30,20 +30,20 @@ import java.util.Arrays; /** * Controls the preference which launches a settings screen for user to configure whether to - * automatically switch to the admin user when the device is docked. + * automatically switch to the designated Dock User when the device is docked. */ -public class TimeoutToUserZeroPreferenceController extends BasePreferenceController { +public class TimeoutToDockUserPreferenceController extends BasePreferenceController { private final String[] mEntries; private final String[] mValues; - public TimeoutToUserZeroPreferenceController(Context context, + public TimeoutToDockUserPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); mEntries = mContext.getResources().getStringArray( - com.android.settings.R.array.switch_to_user_zero_when_docked_timeout_entries); + com.android.settings.R.array.switch_to_dock_user_when_docked_timeout_entries); mValues = mContext.getResources().getStringArray( - com.android.settings.R.array.switch_to_user_zero_when_docked_timeout_values); + com.android.settings.R.array.switch_to_dock_user_when_docked_timeout_values); } @Override @@ -57,7 +57,7 @@ public class TimeoutToUserZeroPreferenceController extends BasePreferenceControl public int getAvailabilityStatus() { // Feature not available on device. if (!mContext.getResources().getBoolean( - com.android.internal.R.bool.config_enableTimeoutToUserZeroWhenDocked)) { + com.android.internal.R.bool.config_enableTimeoutToDockUserWhenDocked)) { return UNSUPPORTED_ON_DEVICE; } @@ -68,6 +68,7 @@ public class TimeoutToUserZeroPreferenceController extends BasePreferenceControl } // Is currently user zero. Only non user zero can have this setting. + // TODO(b/257333623): Allow the Dock User to be non-SystemUser user in HSUM. if (UserHandle.myUserId() == UserHandle.USER_SYSTEM) { return DISABLED_FOR_USER; } @@ -78,9 +79,9 @@ public class TimeoutToUserZeroPreferenceController extends BasePreferenceControl @Override public CharSequence getSummary() { final String key = Settings.Secure.getStringForUser(mContext.getContentResolver(), - TIMEOUT_TO_USER_ZERO, UserHandle.myUserId()); + TIMEOUT_TO_DOCK_USER, UserHandle.myUserId()); final int index = Arrays.asList(mValues).indexOf(key != null ? key : - mValues[TimeoutToUserZeroSettings.DEFAULT_TIMEOUT_SETTING_VALUE_INDEX]); + mValues[TimeoutToDockUserSettings.DEFAULT_TIMEOUT_SETTING_VALUE_INDEX]); return mEntries[index]; } diff --git a/src/com/android/settings/users/TimeoutToUserZeroSettings.java b/src/com/android/settings/users/TimeoutToDockUserSettings.java similarity index 86% rename from src/com/android/settings/users/TimeoutToUserZeroSettings.java rename to src/com/android/settings/users/TimeoutToDockUserSettings.java index 7621ce54969..bb61b679d2e 100644 --- a/src/com/android/settings/users/TimeoutToUserZeroSettings.java +++ b/src/com/android/settings/users/TimeoutToDockUserSettings.java @@ -16,7 +16,7 @@ package com.android.settings.users; -import static android.provider.Settings.Secure.TIMEOUT_TO_USER_ZERO; +import static android.provider.Settings.Secure.TIMEOUT_TO_DOCK_USER; import android.app.settings.SettingsEnums; import android.content.Context; @@ -33,9 +33,9 @@ import java.util.List; /** * Setting screen that lists options for users to configure whether to automatically switch to the - * admin user when the device is docked, and if so duration of the timeout. + * Dock User when the device is docked, and if so duration of the timeout. */ -public class TimeoutToUserZeroSettings extends RadioButtonPickerFragment { +public class TimeoutToDockUserSettings extends RadioButtonPickerFragment { // Index of the default key of the timeout setting if it hasn't been changed by the user. public static final int DEFAULT_TIMEOUT_SETTING_VALUE_INDEX = 0; @@ -52,7 +52,7 @@ public class TimeoutToUserZeroSettings extends RadioButtonPickerFragment { @Override protected int getPreferenceScreenResId() { - return R.xml.user_timeout_to_user_zero_settings; + return R.xml.user_timeout_to_dock_user_settings; } @Override @@ -60,9 +60,9 @@ public class TimeoutToUserZeroSettings extends RadioButtonPickerFragment { super.onAttach(context); mEntries = getContext().getResources().getStringArray( - R.array.switch_to_user_zero_when_docked_timeout_entries); + R.array.switch_to_dock_user_when_docked_timeout_entries); mValues = getContext().getResources().getStringArray( - R.array.switch_to_user_zero_when_docked_timeout_values); + R.array.switch_to_dock_user_when_docked_timeout_values); } @Override @@ -83,13 +83,13 @@ public class TimeoutToUserZeroSettings extends RadioButtonPickerFragment { @Override protected String getDefaultKey() { final String defaultKey = Settings.Secure.getStringForUser( - getContext().getContentResolver(), TIMEOUT_TO_USER_ZERO, UserHandle.myUserId()); + getContext().getContentResolver(), TIMEOUT_TO_DOCK_USER, UserHandle.myUserId()); return defaultKey != null ? defaultKey : mValues[DEFAULT_TIMEOUT_SETTING_VALUE_INDEX]; } @Override protected boolean setDefaultKey(String key) { - Settings.Secure.putStringForUser(getContext().getContentResolver(), TIMEOUT_TO_USER_ZERO, + Settings.Secure.putStringForUser(getContext().getContentResolver(), TIMEOUT_TO_DOCK_USER, key, UserHandle.myUserId()); return true; } diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java index 4aa7f443229..0ae7fa10d8d 100644 --- a/src/com/android/settings/users/UserSettings.java +++ b/src/com/android/settings/users/UserSettings.java @@ -125,7 +125,7 @@ public class UserSettings extends SettingsPreferenceFragment private static final String KEY_ADD_SUPERVISED_USER = "supervised_user_add"; private static final String KEY_ADD_USER_WHEN_LOCKED = "user_settings_add_users_when_locked"; private static final String KEY_MULTIUSER_TOP_INTRO = "multiuser_top_intro"; - private static final String KEY_TIMEOUT_TO_USER_ZERO = "timeout_to_user_zero_preference"; + private static final String KEY_TIMEOUT_TO_DOCK_USER = "timeout_to_dock_user_preference"; private static final String KEY_GUEST_CATEGORY = "guest_category"; private static final String KEY_GUEST_RESET = "guest_reset"; private static final String KEY_GUEST_EXIT = "guest_exit"; @@ -213,7 +213,7 @@ public class UserSettings extends SettingsPreferenceFragment private AddUserWhenLockedPreferenceController mAddUserWhenLockedPreferenceController; private RemoveGuestOnExitPreferenceController mRemoveGuestOnExitPreferenceController; private MultiUserTopIntroPreferenceController mMultiUserTopIntroPreferenceController; - private TimeoutToUserZeroPreferenceController mTimeoutToUserZeroPreferenceController; + private TimeoutToDockUserPreferenceController mTimeoutToDockUserPreferenceController; private UserCreatingDialog mUserCreatingDialog; private final AtomicBoolean mGuestCreationScheduled = new AtomicBoolean(); private final ExecutorService mExecutor = Executors.newSingleThreadExecutor(); @@ -306,14 +306,14 @@ public class UserSettings extends SettingsPreferenceFragment mMultiUserTopIntroPreferenceController = new MultiUserTopIntroPreferenceController(activity, KEY_MULTIUSER_TOP_INTRO); - mTimeoutToUserZeroPreferenceController = new TimeoutToUserZeroPreferenceController(activity, - KEY_TIMEOUT_TO_USER_ZERO); + mTimeoutToDockUserPreferenceController = new TimeoutToDockUserPreferenceController( + activity, KEY_TIMEOUT_TO_DOCK_USER); final PreferenceScreen screen = getPreferenceScreen(); mAddUserWhenLockedPreferenceController.displayPreference(screen); mRemoveGuestOnExitPreferenceController.displayPreference(screen); mMultiUserTopIntroPreferenceController.displayPreference(screen); - mTimeoutToUserZeroPreferenceController.displayPreference(screen); + mTimeoutToDockUserPreferenceController.displayPreference(screen); screen.findPreference(mAddUserWhenLockedPreferenceController.getPreferenceKey()) .setOnPreferenceChangeListener(mAddUserWhenLockedPreferenceController); @@ -387,8 +387,8 @@ public class UserSettings extends SettingsPreferenceFragment mAddUserWhenLockedPreferenceController.updateState(screen.findPreference( mAddUserWhenLockedPreferenceController.getPreferenceKey())); - mTimeoutToUserZeroPreferenceController.updateState(screen.findPreference( - mTimeoutToUserZeroPreferenceController.getPreferenceKey())); + mTimeoutToDockUserPreferenceController.updateState(screen.findPreference( + mTimeoutToDockUserPreferenceController.getPreferenceKey())); mRemoveGuestOnExitPreferenceController.updateState(screen.findPreference( mRemoveGuestOnExitPreferenceController.getPreferenceKey())); if (mShouldUpdateUserList) { diff --git a/tests/robotests/src/com/android/settings/users/TimeoutToUserZeroPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/users/TimeoutToDockUserPreferenceControllerTest.java similarity index 89% rename from tests/robotests/src/com/android/settings/users/TimeoutToUserZeroPreferenceControllerTest.java rename to tests/robotests/src/com/android/settings/users/TimeoutToDockUserPreferenceControllerTest.java index e284d906847..2c93e94aecd 100644 --- a/tests/robotests/src/com/android/settings/users/TimeoutToUserZeroPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/users/TimeoutToDockUserPreferenceControllerTest.java @@ -16,7 +16,7 @@ package com.android.settings.users; -import static android.provider.Settings.Secure.TIMEOUT_TO_USER_ZERO; +import static android.provider.Settings.Secure.TIMEOUT_TO_DOCK_USER; import static com.google.common.truth.Truth.assertThat; @@ -45,12 +45,12 @@ import org.robolectric.annotation.Config; @RunWith(RobolectricTestRunner.class) @Config(shadows = {ShadowSecureSettings.class, ShadowUserHandle.class}) -public class TimeoutToUserZeroPreferenceControllerTest { +public class TimeoutToDockUserPreferenceControllerTest { private Context mContext; private Resources mResources; - private TimeoutToUserZeroPreferenceController mController; + private TimeoutToDockUserPreferenceController mController; - private static final String FAKE_PREFERENCE_KEY = "timeout_to_user_zero_preference"; + private static final String FAKE_PREFERENCE_KEY = "timeout_to_dock_user_preference"; private String[] mEntries; private String[] mValues; @@ -62,15 +62,15 @@ public class TimeoutToUserZeroPreferenceControllerTest { doReturn(mResources).when(mContext).getResources(); mEntries = mResources.getStringArray( - R.array.switch_to_user_zero_when_docked_timeout_entries); + R.array.switch_to_dock_user_when_docked_timeout_entries); mValues = mResources.getStringArray( - R.array.switch_to_user_zero_when_docked_timeout_values); + R.array.switch_to_dock_user_when_docked_timeout_values); - mController = new TimeoutToUserZeroPreferenceController(mContext, FAKE_PREFERENCE_KEY); + mController = new TimeoutToDockUserPreferenceController(mContext, FAKE_PREFERENCE_KEY); // Feature enabled. when(mResources.getBoolean( - com.android.internal.R.bool.config_enableTimeoutToUserZeroWhenDocked)).thenReturn( + com.android.internal.R.bool.config_enableTimeoutToDockUserWhenDocked)).thenReturn( true); // Multi-user feature enabled. @@ -89,7 +89,7 @@ public class TimeoutToUserZeroPreferenceControllerTest { @Test public void getAvailabilityStatus_featureFlagDisabled_returnUnsupportedOnDevice() { when(mResources.getBoolean( - com.android.internal.R.bool.config_enableTimeoutToUserZeroWhenDocked)).thenReturn( + com.android.internal.R.bool.config_enableTimeoutToDockUserWhenDocked)).thenReturn( false); assertThat(mController.getAvailabilityStatus()).isEqualTo( @@ -121,7 +121,7 @@ public class TimeoutToUserZeroPreferenceControllerTest { @Test public void getSummary_settingNotSet() { - Settings.Secure.putStringForUser(mContext.getContentResolver(), TIMEOUT_TO_USER_ZERO, + Settings.Secure.putStringForUser(mContext.getContentResolver(), TIMEOUT_TO_DOCK_USER, null, UserHandle.myUserId()); assertThat(mController.getSummary().toString()).isEqualTo(mEntries[0]); @@ -129,7 +129,7 @@ public class TimeoutToUserZeroPreferenceControllerTest { @Test public void getSummary_setToNever() { - Settings.Secure.putStringForUser(mContext.getContentResolver(), TIMEOUT_TO_USER_ZERO, + Settings.Secure.putStringForUser(mContext.getContentResolver(), TIMEOUT_TO_DOCK_USER, mValues[0], UserHandle.myUserId()); assertThat(mController.getSummary().toString()).isEqualTo(mEntries[0]); @@ -137,7 +137,7 @@ public class TimeoutToUserZeroPreferenceControllerTest { @Test public void getSummary_setToOneMinute() { - Settings.Secure.putStringForUser(mContext.getContentResolver(), TIMEOUT_TO_USER_ZERO, + Settings.Secure.putStringForUser(mContext.getContentResolver(), TIMEOUT_TO_DOCK_USER, mValues[1], UserHandle.myUserId()); assertThat(mController.getSummary().toString()).isEqualTo(mEntries[1]); diff --git a/tests/robotests/src/com/android/settings/users/TimeoutToUserZeroSettingsTest.java b/tests/robotests/src/com/android/settings/users/TimeoutToDockUserSettingsTest.java similarity index 91% rename from tests/robotests/src/com/android/settings/users/TimeoutToUserZeroSettingsTest.java rename to tests/robotests/src/com/android/settings/users/TimeoutToDockUserSettingsTest.java index 0bd5b601170..55b630d6b05 100644 --- a/tests/robotests/src/com/android/settings/users/TimeoutToUserZeroSettingsTest.java +++ b/tests/robotests/src/com/android/settings/users/TimeoutToDockUserSettingsTest.java @@ -42,11 +42,11 @@ import java.util.List; @RunWith(RobolectricTestRunner.class) @Config(shadows = {ShadowFragment.class}) -public class TimeoutToUserZeroSettingsTest { +public class TimeoutToDockUserSettingsTest { @Mock private FragmentActivity mActivity; - private TimeoutToUserZeroSettings mSettings; + private TimeoutToDockUserSettings mSettings; private String[] mEntries; private String[] mValues; @@ -57,10 +57,10 @@ public class TimeoutToUserZeroSettingsTest { final Context context = spy(ApplicationProvider.getApplicationContext()); mEntries = context.getResources().getStringArray( - R.array.switch_to_user_zero_when_docked_timeout_entries); + R.array.switch_to_dock_user_when_docked_timeout_entries); mValues = context.getResources().getStringArray( - R.array.switch_to_user_zero_when_docked_timeout_values); - mSettings = spy(new TimeoutToUserZeroSettings()); + R.array.switch_to_dock_user_when_docked_timeout_values); + mSettings = spy(new TimeoutToDockUserSettings()); doReturn(context).when(mSettings).getContext(); doReturn(mActivity).when(mSettings).getActivity(); diff --git a/tests/unit/src/com/android/settings/display/ScreenSaverPreferenceControllerTest.java b/tests/unit/src/com/android/settings/display/ScreenSaverPreferenceControllerTest.java index 3319e2a710d..484138e78bf 100644 --- a/tests/unit/src/com/android/settings/display/ScreenSaverPreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/display/ScreenSaverPreferenceControllerTest.java @@ -60,7 +60,7 @@ public class ScreenSaverPreferenceControllerTest { when(mResources.getBoolean( com.android.internal.R.bool.config_dreamsSupported)).thenReturn(true); when(mResources.getBoolean( - com.android.internal.R.bool.config_dreamsOnlyEnabledForSystemUser)) + com.android.internal.R.bool.config_dreamsOnlyEnabledForDockUser)) .thenReturn(false); when(mUserManager.isSystemUser()).thenReturn(true); assertTrue(mController.isAvailable()); @@ -71,7 +71,7 @@ public class ScreenSaverPreferenceControllerTest { when(mResources.getBoolean( com.android.internal.R.bool.config_dreamsSupported)).thenReturn(true); when(mResources.getBoolean( - com.android.internal.R.bool.config_dreamsOnlyEnabledForSystemUser)) + com.android.internal.R.bool.config_dreamsOnlyEnabledForDockUser)) .thenReturn(false); when(mUserManager.isSystemUser()).thenReturn(false); assertTrue(mController.isAvailable()); @@ -82,7 +82,7 @@ public class ScreenSaverPreferenceControllerTest { when(mResources.getBoolean( com.android.internal.R.bool.config_dreamsSupported)).thenReturn(false); when(mResources.getBoolean( - com.android.internal.R.bool.config_dreamsOnlyEnabledForSystemUser)) + com.android.internal.R.bool.config_dreamsOnlyEnabledForDockUser)) .thenReturn(false); when(mUserManager.isSystemUser()).thenReturn(true); assertFalse(mController.isAvailable()); @@ -93,7 +93,7 @@ public class ScreenSaverPreferenceControllerTest { when(mResources.getBoolean( com.android.internal.R.bool.config_dreamsSupported)).thenReturn(true); when(mResources.getBoolean( - com.android.internal.R.bool.config_dreamsOnlyEnabledForSystemUser)) + com.android.internal.R.bool.config_dreamsOnlyEnabledForDockUser)) .thenReturn(true); when(mUserManager.isSystemUser()).thenReturn(true); assertTrue(mController.isAvailable()); @@ -104,7 +104,7 @@ public class ScreenSaverPreferenceControllerTest { when(mResources.getBoolean( com.android.internal.R.bool.config_dreamsSupported)).thenReturn(true); when(mResources.getBoolean( - com.android.internal.R.bool.config_dreamsOnlyEnabledForSystemUser)) + com.android.internal.R.bool.config_dreamsOnlyEnabledForDockUser)) .thenReturn(true); when(mUserManager.isSystemUser()).thenReturn(false); assertFalse(mController.isAvailable());