From a86614db7494f5f2749fa1b4299afca6c4dafaac Mon Sep 17 00:00:00 2001 From: Darrell Shi Date: Thu, 30 Mar 2023 16:42:05 +0000 Subject: [PATCH] Hide timeout to user0 pref when switching blocked. Do not show the "timeout to admin user" settings preference when user switching is blocked on the current user, e.g. in demo mode. Test: atest SettingsRoboTests:TimeoutToDockUserPreferenceControllerTest Bug: 255277938 Change-Id: Ibd0944c69254000a453f477eb72a0ba5832e9793 --- ...TimeoutToDockUserPreferenceController.java | 10 ++++++++-- ...outToDockUserPreferenceControllerTest.java | 20 +++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/users/TimeoutToDockUserPreferenceController.java b/src/com/android/settings/users/TimeoutToDockUserPreferenceController.java index 57e8d402825..322a4abbeed 100644 --- a/src/com/android/settings/users/TimeoutToDockUserPreferenceController.java +++ b/src/com/android/settings/users/TimeoutToDockUserPreferenceController.java @@ -20,6 +20,7 @@ import static android.provider.Settings.Secure.TIMEOUT_TO_DOCK_USER; import android.content.Context; import android.os.UserHandle; +import android.os.UserManager; import android.provider.Settings; import androidx.preference.PreferenceScreen; @@ -34,6 +35,8 @@ import java.util.Arrays; * automatically switch to the designated Dock User when the device is docked. */ public class TimeoutToDockUserPreferenceController extends BasePreferenceController { + private final UserManager mUserManager; + private final String[] mEntries; private final String[] mValues; @@ -41,6 +44,8 @@ public class TimeoutToDockUserPreferenceController extends BasePreferenceControl String preferenceKey) { super(context, preferenceKey); + mUserManager = context.getSystemService(UserManager.class); + mEntries = mContext.getResources().getStringArray( com.android.settings.R.array.switch_to_dock_user_when_docked_timeout_entries); mValues = mContext.getResources().getStringArray( @@ -62,9 +67,10 @@ public class TimeoutToDockUserPreferenceController extends BasePreferenceControl return UNSUPPORTED_ON_DEVICE; } - // Multi-user feature disabled by user. + // Multi-user feature disabled by user, or user switching blocked on the user. if (Settings.Global.getInt(mContext.getContentResolver(), - Settings.Global.USER_SWITCHER_ENABLED, 0) != 1) { + Settings.Global.USER_SWITCHER_ENABLED, 0) != 1 + || mUserManager.hasUserRestriction(UserManager.DISALLOW_USER_SWITCH)) { return CONDITIONALLY_UNAVAILABLE; } diff --git a/tests/robotests/src/com/android/settings/users/TimeoutToDockUserPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/users/TimeoutToDockUserPreferenceControllerTest.java index 2e7e2d797be..3d8e8930775 100644 --- a/tests/robotests/src/com/android/settings/users/TimeoutToDockUserPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/users/TimeoutToDockUserPreferenceControllerTest.java @@ -27,6 +27,7 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.res.Resources; import android.os.UserHandle; +import android.os.UserManager; import android.provider.Settings; import androidx.test.core.app.ApplicationProvider; @@ -41,6 +42,8 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; @@ -51,6 +54,9 @@ public class TimeoutToDockUserPreferenceControllerTest { private Resources mResources; private TimeoutToDockUserPreferenceController mController; + @Mock + private UserManager mUserManager; + private static final String FAKE_PREFERENCE_KEY = "timeout_to_dock_user_preference"; private String[] mEntries; @@ -58,9 +64,12 @@ public class TimeoutToDockUserPreferenceControllerTest { @Before public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = spy(ApplicationProvider.getApplicationContext()); mResources = spy(mContext.getResources()); doReturn(mResources).when(mContext).getResources(); + when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager); mEntries = mResources.getStringArray( R.array.switch_to_dock_user_when_docked_timeout_entries); @@ -78,6 +87,9 @@ public class TimeoutToDockUserPreferenceControllerTest { Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.USER_SWITCHER_ENABLED, 1); + // User switching not blocked. + when(mUserManager.hasUserRestriction(UserManager.DISALLOW_USER_SWITCH)).thenReturn(false); + // Set to user 1; ShadowUserHandle.setUid(1); } @@ -106,6 +118,14 @@ public class TimeoutToDockUserPreferenceControllerTest { BasePreferenceController.CONDITIONALLY_UNAVAILABLE); } + @Test + public void getAvailabilityStatus_userSwitchingBlocked_returnConditionallyUnavailable() { + when(mUserManager.hasUserRestriction(UserManager.DISALLOW_USER_SWITCH)).thenReturn(true); + + assertThat(mController.getAvailabilityStatus()).isEqualTo( + BasePreferenceController.CONDITIONALLY_UNAVAILABLE); + } + @Test public void getAvailabilityStatus_isCurrentlyMainUser_returnDisabledForUser() { when(Utils.canCurrentUserDream(mContext)).thenReturn(true);