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