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
diff --git a/src/com/android/settings/users/TimeoutToDockUserPreferenceController.java b/src/com/android/settings/users/TimeoutToDockUserPreferenceController.java
index 57e8d40..322a4ab 100644
--- a/src/com/android/settings/users/TimeoutToDockUserPreferenceController.java
+++ b/src/com/android/settings/users/TimeoutToDockUserPreferenceController.java
@@ -20,6 +20,7 @@
import android.content.Context;
import android.os.UserHandle;
+import android.os.UserManager;
import android.provider.Settings;
import androidx.preference.PreferenceScreen;
@@ -34,6 +35,8 @@
* 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 @@
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 @@
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 2e7e2d7..3d8e893 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 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.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 @@
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 @@
@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 @@
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);
}
@@ -107,6 +119,14 @@
}
@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);