Clean up CarUserManagerHelper methods only used in Settings [1]

Started cleaning up methods only used in the Settings app.
  - #isForegroundUserGuest
  - #hasUserRestriction
  - #canCurrentProcessAddUsers
  - #canCurrentProcessRemoveUsers
  - #scaleUserIcon
  - #setUserRestriction

Also added 2 tests to DevelopmentSettingsUtilTest around DISALLOW_DEBUGGING_FEATURES flag.

To update tests, I needed to introduce more usage of ShadowUserManager.
There's a bug with the implementation around UserRestrictions, so I had
to add a redirect method for setUserRestriction() to our subclass ShadowUserManager.

Bug: 137136907
Test: atest CarSettingsRoboTests
Test: atest CarUserManagerHelperTest
Change-Id: Ica186ce84d604db9ee20a0dd4ccc430e60d65e11
diff --git a/src/com/android/car/settings/development/DevelopmentSettingsUtil.java b/src/com/android/car/settings/development/DevelopmentSettingsUtil.java
index 63ded44..ce003e5 100644
--- a/src/com/android/car/settings/development/DevelopmentSettingsUtil.java
+++ b/src/com/android/car/settings/development/DevelopmentSettingsUtil.java
@@ -59,12 +59,12 @@
      * debugging is allowed for user, and the user is an admin or a demo user.
      */
     public static boolean isDevelopmentSettingsEnabled(Context context,
-            CarUserManagerHelper carUserManagerHelper) {
+            CarUserManagerHelper carUserManagerHelper, UserManager userManager) {
         boolean settingEnabled = Settings.Global.getInt(context.getContentResolver(),
                 Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, Build.IS_ENG ? 1 : 0) != 0;
-        boolean hasRestriction = carUserManagerHelper.hasUserRestriction(
+        boolean hasRestriction = userManager.hasUserRestriction(
                 UserManager.DISALLOW_DEBUGGING_FEATURES,
-                carUserManagerHelper.getCurrentProcessUserInfo());
+                carUserManagerHelper.getCurrentProcessUserInfo().getUserHandle());
         boolean isAdminOrDemo = carUserManagerHelper.isCurrentProcessAdminUser()
                 || carUserManagerHelper.isCurrentProcessDemoUser();
         return isAdminOrDemo && !hasRestriction && settingEnabled;
diff --git a/src/com/android/car/settings/system/BuildNumberPreferenceController.java b/src/com/android/car/settings/system/BuildNumberPreferenceController.java
index c2b7718..7e98d0a 100644
--- a/src/com/android/car/settings/system/BuildNumberPreferenceController.java
+++ b/src/com/android/car/settings/system/BuildNumberPreferenceController.java
@@ -20,6 +20,7 @@
 import android.car.userlib.CarUserManagerHelper;
 import android.content.Context;
 import android.os.Build;
+import android.os.UserManager;
 import android.widget.Toast;
 
 import androidx.preference.Preference;
@@ -33,6 +34,7 @@
 public class BuildNumberPreferenceController extends PreferenceController<Preference> {
 
     private final CarUserManagerHelper mCarUserManagerHelper;
+    private UserManager mUserManager;
     private Toast mDevHitToast;
     private int mDevHitCountdown;
 
@@ -40,6 +42,7 @@
             FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
         super(context, preferenceKey, fragmentController, uxRestrictions);
         mCarUserManagerHelper = new CarUserManagerHelper(context);
+        mUserManager = UserManager.get(context);
     }
 
     @Override
@@ -55,7 +58,7 @@
     protected void onResumeInternal() {
         mDevHitToast = null;
         mDevHitCountdown = DevelopmentSettingsUtil.isDevelopmentSettingsEnabled(getContext(),
-                mCarUserManagerHelper) ? -1 : getTapsToBecomeDeveloper();
+                mCarUserManagerHelper, mUserManager) ? -1 : getTapsToBecomeDeveloper();
     }
 
     @Override
diff --git a/src/com/android/car/settings/system/DeveloperOptionsEntryPreferenceController.java b/src/com/android/car/settings/system/DeveloperOptionsEntryPreferenceController.java
index 9b2b22b..cb1e497 100644
--- a/src/com/android/car/settings/system/DeveloperOptionsEntryPreferenceController.java
+++ b/src/com/android/car/settings/system/DeveloperOptionsEntryPreferenceController.java
@@ -19,6 +19,7 @@
 import android.car.drivingstate.CarUxRestrictions;
 import android.car.userlib.CarUserManagerHelper;
 import android.content.Context;
+import android.os.UserManager;
 
 import androidx.preference.Preference;
 
@@ -30,11 +31,13 @@
 public class DeveloperOptionsEntryPreferenceController extends PreferenceController<Preference> {
 
     private CarUserManagerHelper mCarUserManagerHelper;
+    private UserManager mUserManager;
 
     public DeveloperOptionsEntryPreferenceController(Context context, String preferenceKey,
             FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
         super(context, preferenceKey, fragmentController, uxRestrictions);
         mCarUserManagerHelper = new CarUserManagerHelper(context);
+        mUserManager = UserManager.get(context);
     }
 
     @Override
@@ -45,6 +48,6 @@
     @Override
     protected int getAvailabilityStatus() {
         return DevelopmentSettingsUtil.isDevelopmentSettingsEnabled(getContext(),
-                mCarUserManagerHelper) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+                mCarUserManagerHelper, mUserManager) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
     }
 }
diff --git a/src/com/android/car/settings/users/PermissionsPreferenceController.java b/src/com/android/car/settings/users/PermissionsPreferenceController.java
index c918dbb..0bafc77 100644
--- a/src/com/android/car/settings/users/PermissionsPreferenceController.java
+++ b/src/com/android/car/settings/users/PermissionsPreferenceController.java
@@ -91,8 +91,10 @@
             preference.getExtras().putString(PERMISSION_TYPE_KEY, permission.getPermissionKey());
             preference.setOnPreferenceChangeListener((pref, newValue) -> {
                 boolean granted = (boolean) newValue;
-                getCarUserManagerHelper().setUserRestriction(getUserInfo(),
-                        pref.getExtras().getString(PERMISSION_TYPE_KEY), !granted);
+                UserManager.get(context).setUserRestriction(
+                        pref.getExtras().getString(PERMISSION_TYPE_KEY),
+                        !granted,
+                        getUserInfo().getUserHandle());
                 return true;
             });
             mPermissionPreferences.add(preference);
@@ -114,8 +116,11 @@
     @Override
     protected void updateState(PreferenceGroup preferenceGroup) {
         for (SwitchPreference switchPreference : mPermissionPreferences) {
-            switchPreference.setChecked(!getCarUserManagerHelper().hasUserRestriction(
-                    switchPreference.getExtras().getString(PERMISSION_TYPE_KEY), getUserInfo()));
+            UserManager userManager = UserManager.get(getContext());
+            switchPreference.setChecked(
+                    !userManager.hasUserRestriction(
+                            switchPreference.getExtras().getString(PERMISSION_TYPE_KEY),
+                            getUserInfo().getUserHandle()));
         }
     }
 }
diff --git a/src/com/android/car/settings/users/UserDetailsBaseFragment.java b/src/com/android/car/settings/users/UserDetailsBaseFragment.java
index 4be3d98..b576e68 100644
--- a/src/com/android/car/settings/users/UserDetailsBaseFragment.java
+++ b/src/com/android/car/settings/users/UserDetailsBaseFragment.java
@@ -22,6 +22,7 @@
 import android.content.pm.UserInfo;
 import android.os.Bundle;
 import android.os.UserHandle;
+import android.os.UserManager;
 import android.view.View;
 import android.widget.Button;
 import android.widget.TextView;
@@ -37,6 +38,7 @@
 public abstract class UserDetailsBaseFragment extends SettingsFragment {
 
     private CarUserManagerHelper mCarUserManagerHelper;
+    private UserManager mUserManager;
     private UserInfo mUserInfo;
 
     private final ConfirmationDialogFragment.ConfirmListener mConfirmListener = arguments -> {
@@ -74,6 +76,7 @@
         super.onAttach(context);
         int userId = getArguments().getInt(Intent.EXTRA_USER_ID);
         mCarUserManagerHelper = new CarUserManagerHelper(getContext());
+        mUserManager = UserManager.get(getContext());
         mUserInfo = UserUtils.getUserInfo(getContext(), userId);
     }
 
@@ -116,7 +119,7 @@
 
     private void showRemoveUserButton() {
         Button removeUserBtn = getActivity().findViewById(R.id.action_button1);
-        if (!mCarUserManagerHelper.canCurrentProcessRemoveUsers()
+        if (mUserManager.hasUserRestriction(UserManager.DISALLOW_REMOVE_USER)
                 || mUserInfo.id == UserHandle.USER_SYSTEM
                 || mCarUserManagerHelper.isCurrentProcessDemoUser()) {
             removeUserBtn.setVisibility(View.GONE);
diff --git a/src/com/android/car/settings/users/UserGridRecyclerView.java b/src/com/android/car/settings/users/UserGridRecyclerView.java
index 7e9fc85..92d2d7c 100644
--- a/src/com/android/car/settings/users/UserGridRecyclerView.java
+++ b/src/com/android/car/settings/users/UserGridRecyclerView.java
@@ -124,7 +124,7 @@
         }
 
         // Add start guest user record if the system is not logged in as guest already.
-        if (!mCarUserManagerHelper.isForegroundUserGuest()) {
+        if (!mCarUserManagerHelper.getCurrentForegroundUserInfo().isGuest()) {
             userRecords.add(createStartGuestUserRecord());
         }
 
diff --git a/src/com/android/car/settings/users/UserIconProvider.java b/src/com/android/car/settings/users/UserIconProvider.java
index f08ef66..513c1ea 100644
--- a/src/com/android/car/settings/users/UserIconProvider.java
+++ b/src/com/android/car/settings/users/UserIconProvider.java
@@ -53,8 +53,7 @@
             return context.getDrawable(R.drawable.ic_user);
         }
         Resources res = context.getResources();
-        BitmapDrawable scaledIcon = (BitmapDrawable) mCarUserManagerHelper.scaleUserIcon(icon, res
-                .getDimensionPixelSize(R.dimen.icon_size));
+        BitmapDrawable scaledIcon = (BitmapDrawable) UserUtils.scaleUserIcon(res, icon);
 
         // Enforce that the icon is circular
         RoundedBitmapDrawable circleIcon = RoundedBitmapDrawableFactory
@@ -69,19 +68,7 @@
      * @return Drawable representing the default guest icon.
      */
     public Drawable getDefaultGuestIcon(Context context) {
-        return UserIconProvider.scaleUserIcon(mCarUserManagerHelper.getGuestDefaultIcon(),
-                mCarUserManagerHelper, context);
-    }
-
-    /**
-     * Scales passed in bitmap to the appropriate user icon size.
-     *
-     * @param bitmap Bitmap to scale.
-     * @return Drawable scaled to the user icon size.
-     */
-    public static Drawable scaleUserIcon(Bitmap bitmap, CarUserManagerHelper userManagerHelper,
-            Context context) {
-        return userManagerHelper.scaleUserIcon(bitmap, context.getResources()
-                .getDimensionPixelSize(R.dimen.icon_size));
+        return UserUtils.scaleUserIcon(
+                context.getResources(), mCarUserManagerHelper.getGuestDefaultIcon());
     }
 }
diff --git a/src/com/android/car/settings/users/UserUtils.java b/src/com/android/car/settings/users/UserUtils.java
index 3d26939..2abff07 100644
--- a/src/com/android/car/settings/users/UserUtils.java
+++ b/src/com/android/car/settings/users/UserUtils.java
@@ -19,6 +19,10 @@
 import android.car.userlib.CarUserManagerHelper;
 import android.content.Context;
 import android.content.pm.UserInfo;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
 import android.os.UserManager;
 
 import com.android.car.settings.R;
@@ -60,4 +64,13 @@
         return carUserManagerHelper.isCurrentProcessAdminUser() && !userInfo.isAdmin();
     }
 
+    /**
+     * Returns a {@link Drawable} for the given {@code icon} scaled to the appropriate size.
+     */
+    public static Drawable scaleUserIcon(Resources res, Bitmap icon) {
+        int desiredSize = res.getDimensionPixelSize(R.dimen.icon_size);
+        Bitmap scaledIcon =
+                Bitmap.createScaledBitmap(icon, desiredSize, desiredSize, /*filter=*/true);
+        return new BitmapDrawable(res, scaledIcon);
+    }
 }
diff --git a/src/com/android/car/settings/users/UsersListFragment.java b/src/com/android/car/settings/users/UsersListFragment.java
index 8cebe45..d13f065 100644
--- a/src/com/android/car/settings/users/UsersListFragment.java
+++ b/src/com/android/car/settings/users/UsersListFragment.java
@@ -22,6 +22,7 @@
 import android.content.Intent;
 import android.os.AsyncTask;
 import android.os.Bundle;
+import android.os.UserManager;
 import android.view.View;
 import android.widget.Button;
 import android.widget.ProgressBar;
@@ -47,6 +48,7 @@
     private static final String FACTORY_RESET_REASON = "ExitRetailModeConfirmed";
 
     private CarUserManagerHelper mCarUserManagerHelper;
+    private UserManager mUserManager;
 
     private ProgressBar mProgressBar;
     private Button mAddUserButton;
@@ -84,6 +86,7 @@
         mOpacityDisabled = getContext().getResources().getFloat(R.dimen.opacity_disabled);
         mOpacityEnabled = getContext().getResources().getFloat(R.dimen.opacity_enabled);
         mCarUserManagerHelper = new CarUserManagerHelper(getContext());
+        mUserManager = UserManager.get(getContext());
     }
 
     @Override
@@ -102,7 +105,7 @@
         });
         if (mCarUserManagerHelper.isCurrentProcessDemoUser()) {
             mAddUserButton.setText(R.string.exit_retail_button_text);
-        } else if (mCarUserManagerHelper.canCurrentProcessAddUsers()) {
+        } else if (canCurrentProcessAddUsers()) {
             mAddUserButton.setText(R.string.user_add_user_menu);
         }
     }
@@ -188,7 +191,7 @@
         }
 
         // Only add the add user button if the current user is allowed to add a user.
-        if (mCarUserManagerHelper.canCurrentProcessAddUsers()) {
+        if (canCurrentProcessAddUsers()) {
             ConfirmationDialogFragment dialogFragment =
                     UsersDialogProvider.getConfirmCreateNewUserDialogFragment(getContext(),
                             mConfirmListener, null);
@@ -200,4 +203,8 @@
     private void showBlockingMessage() {
         Toast.makeText(getContext(), R.string.restricted_while_driving, Toast.LENGTH_SHORT).show();
     }
+
+    private boolean canCurrentProcessAddUsers() {
+        return !mUserManager.hasUserRestriction(UserManager.DISALLOW_ADD_USER);
+    }
 }
diff --git a/tests/robotests/src/com/android/car/settings/development/DevelopmentSettingsUtilTest.java b/tests/robotests/src/com/android/car/settings/development/DevelopmentSettingsUtilTest.java
index e527c0c..d208f6d 100644
--- a/tests/robotests/src/com/android/car/settings/development/DevelopmentSettingsUtilTest.java
+++ b/tests/robotests/src/com/android/car/settings/development/DevelopmentSettingsUtilTest.java
@@ -18,14 +18,19 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import android.car.userlib.CarUserManagerHelper;
 import android.content.Context;
+import android.content.pm.UserInfo;
+import android.os.UserManager;
 import android.provider.Settings;
 
 import com.android.car.settings.testutils.ShadowCarUserManagerHelper;
 import com.android.car.settings.testutils.ShadowLocalBroadcastManager;
+import com.android.car.settings.testutils.ShadowUserManager;
 
 import org.junit.After;
 import org.junit.Before;
@@ -36,12 +41,18 @@
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
+import org.robolectric.shadow.api.Shadow;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowCarUserManagerHelper.class, ShadowLocalBroadcastManager.class})
+@Config(shadows = {ShadowCarUserManagerHelper.class, ShadowLocalBroadcastManager.class,
+        ShadowUserManager.class})
 public class DevelopmentSettingsUtilTest {
 
+    private static final UserInfo USER_INFO = new UserInfo(0, null, 0);
+
     private Context mContext;
+    private UserManager mUserManager;
+
     @Mock
     private CarUserManagerHelper mCarUserManagerHelper;
 
@@ -52,12 +63,19 @@
         mContext = RuntimeEnvironment.application;
         when(mCarUserManagerHelper.isCurrentProcessAdminUser()).thenReturn(true);
         when(mCarUserManagerHelper.isCurrentProcessDemoUser()).thenReturn(false);
+        when(mCarUserManagerHelper.getCurrentProcessUserInfo()).thenReturn(USER_INFO);
+
+        mUserManager = mContext.getSystemService(UserManager.class);
+        UserManager mockUserManager = mock(UserManager.class);
+        when(mockUserManager.getUserInfo(anyInt())).thenReturn(USER_INFO);
+        ShadowUserManager.setInstance(mockUserManager);
     }
 
     @After
     public void tearDown() {
         ShadowCarUserManagerHelper.reset();
         ShadowLocalBroadcastManager.reset();
+        ShadowUserManager.reset();
     }
 
     @Test
@@ -66,7 +84,7 @@
                 Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0);
 
         assertThat(DevelopmentSettingsUtil.isDevelopmentSettingsEnabled(mContext,
-                mCarUserManagerHelper)).isFalse();
+                mCarUserManagerHelper, mUserManager)).isFalse();
     }
 
     @Test
@@ -75,7 +93,7 @@
                 Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 1);
 
         assertThat(DevelopmentSettingsUtil.isDevelopmentSettingsEnabled(mContext,
-                mCarUserManagerHelper)).isTrue();
+                mCarUserManagerHelper, mUserManager)).isTrue();
     }
 
     @Test
@@ -86,7 +104,7 @@
         when(mCarUserManagerHelper.isCurrentProcessDemoUser()).thenReturn(false);
 
         assertThat(DevelopmentSettingsUtil.isDevelopmentSettingsEnabled(mContext,
-                mCarUserManagerHelper)).isFalse();
+                mCarUserManagerHelper, mUserManager)).isFalse();
     }
 
     @Test
@@ -97,7 +115,7 @@
         when(mCarUserManagerHelper.isCurrentProcessDemoUser()).thenReturn(true);
 
         assertThat(DevelopmentSettingsUtil.isDevelopmentSettingsEnabled(mContext,
-                mCarUserManagerHelper)).isTrue();
+                mCarUserManagerHelper, mUserManager)).isTrue();
     }
 
     @Test
@@ -108,7 +126,35 @@
         when(mCarUserManagerHelper.isCurrentProcessDemoUser()).thenReturn(true);
 
         assertThat(DevelopmentSettingsUtil.isDevelopmentSettingsEnabled(mContext,
-                mCarUserManagerHelper)).isFalse();
+                mCarUserManagerHelper, mUserManager)).isFalse();
+    }
+
+    @Test
+    public void isEnabled_hasDisallowDebuggingRestriction_shouldReturnFalse() {
+        Settings.Global.putInt(mContext.getContentResolver(),
+                Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 1);
+        when(mCarUserManagerHelper.isCurrentProcessAdminUser()).thenReturn(true);
+        when(mCarUserManagerHelper.isCurrentProcessDemoUser()).thenReturn(true);
+
+        getShadowUserManager().setUserRestriction(
+                USER_INFO.getUserHandle(), UserManager.DISALLOW_DEBUGGING_FEATURES, true);
+
+        assertThat(DevelopmentSettingsUtil.isDevelopmentSettingsEnabled(mContext,
+                mCarUserManagerHelper, mUserManager)).isFalse();
+    }
+
+    @Test
+    public void isEnabled_doesNotHaveDisallowDebuggingRestriction_shouldReturnTrue() {
+        Settings.Global.putInt(mContext.getContentResolver(),
+                Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 1);
+        when(mCarUserManagerHelper.isCurrentProcessAdminUser()).thenReturn(true);
+        when(mCarUserManagerHelper.isCurrentProcessDemoUser()).thenReturn(true);
+
+        getShadowUserManager().setUserRestriction(
+                USER_INFO.getUserHandle(), UserManager.DISALLOW_DEBUGGING_FEATURES, false);
+
+        assertThat(DevelopmentSettingsUtil.isDevelopmentSettingsEnabled(mContext,
+                mCarUserManagerHelper, mUserManager)).isTrue();
     }
 
     @Test
@@ -146,4 +192,8 @@
                 0);
         assertThat(DevelopmentSettingsUtil.isDeviceProvisioned(mContext)).isFalse();
     }
+
+    private ShadowUserManager getShadowUserManager() {
+        return Shadow.extract(mContext.getSystemService(UserManager.class));
+    }
 }
diff --git a/tests/robotests/src/com/android/car/settings/system/BuildNumberPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/system/BuildNumberPreferenceControllerTest.java
index c2b365a..2bc6a2e 100644
--- a/tests/robotests/src/com/android/car/settings/system/BuildNumberPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/system/BuildNumberPreferenceControllerTest.java
@@ -19,12 +19,14 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.when;
 
 import android.car.userlib.CarUserManagerHelper;
 import android.content.Context;
 import android.content.pm.UserInfo;
+import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings;
 
@@ -35,6 +37,7 @@
 import com.android.car.settings.common.PreferenceControllerTestHelper;
 import com.android.car.settings.development.DevelopmentSettingsUtil;
 import com.android.car.settings.testutils.ShadowCarUserManagerHelper;
+import com.android.car.settings.testutils.ShadowUserManager;
 
 import org.junit.After;
 import org.junit.Before;
@@ -48,7 +51,7 @@
 import org.robolectric.shadows.ShadowToast;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowCarUserManagerHelper.class})
+@Config(shadows = {ShadowCarUserManagerHelper.class, ShadowUserManager.class})
 public class BuildNumberPreferenceControllerTest {
 
     private Context mContext;
@@ -58,11 +61,14 @@
     private Preference mPreference;
     @Mock
     private CarUserManagerHelper mCarUserManagerHelper;
+    @Mock
+    private UserManager mUserManager;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         ShadowCarUserManagerHelper.setMockInstance(mCarUserManagerHelper);
+        ShadowUserManager.setInstance(mUserManager);
         mContext = RuntimeEnvironment.application;
         mPreference = new Preference(mContext);
         mPreferenceControllerHelper = new PreferenceControllerTestHelper<>(mContext,
@@ -75,8 +81,8 @@
 
         // By default, no restrictions on debugging features.
         when(mCarUserManagerHelper.getCurrentProcessUserInfo()).thenReturn(new UserInfo());
-        when(mCarUserManagerHelper.hasUserRestriction(eq(UserManager.DISALLOW_DEBUGGING_FEATURES),
-                any(UserInfo.class))).thenReturn(false);
+        when(mUserManager.hasUserRestriction(eq(UserManager.DISALLOW_DEBUGGING_FEATURES),
+                any(UserHandle.class))).thenReturn(false);
 
         // By default device is provisioned.
         Settings.Global.putInt(mContext.getContentResolver(),
@@ -86,11 +92,14 @@
         Settings.Global.putInt(mContext.getContentResolver(),
                 Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0);
         mPreferenceControllerHelper.sendLifecycleEvent(Lifecycle.Event.ON_RESUME);
+
+        when(mUserManager.getUserInfo(anyInt())).thenReturn(new UserInfo(10, null, 0));
     }
 
     @After
     public void tearDown() {
         ShadowCarUserManagerHelper.reset();
+        ShadowUserManager.reset();
     }
 
     @Test
@@ -154,7 +163,7 @@
             mPreference.performClick();
         }
         assertThat(DevelopmentSettingsUtil.isDevelopmentSettingsEnabled(mContext,
-                mCarUserManagerHelper)).isTrue();
+                mCarUserManagerHelper, mUserManager)).isTrue();
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/car/settings/system/DeveloperOptionsEntryPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/system/DeveloperOptionsEntryPreferenceControllerTest.java
index a82c6af..b322443 100644
--- a/tests/robotests/src/com/android/car/settings/system/DeveloperOptionsEntryPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/system/DeveloperOptionsEntryPreferenceControllerTest.java
@@ -33,6 +33,7 @@
 
 import com.android.car.settings.common.PreferenceControllerTestHelper;
 import com.android.car.settings.testutils.ShadowCarUserManagerHelper;
+import com.android.car.settings.testutils.ShadowUserManager;
 
 import org.junit.After;
 import org.junit.Before;
@@ -43,9 +44,10 @@
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
+import org.robolectric.shadow.api.Shadow;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowCarUserManagerHelper.class})
+@Config(shadows = {ShadowCarUserManagerHelper.class, ShadowUserManager.class})
 public class DeveloperOptionsEntryPreferenceControllerTest {
 
     private Context mContext;
@@ -64,17 +66,16 @@
                 new Preference(mContext)).getController();
 
         // Setup admin user who is able to enable developer settings.
-        mUserInfo = new UserInfo();
+        mUserInfo = new UserInfo(10, null, 0);
         when(mShadowCarUserManagerHelper.isCurrentProcessAdminUser()).thenReturn(true);
         when(mShadowCarUserManagerHelper.isCurrentProcessDemoUser()).thenReturn(false);
         when(mShadowCarUserManagerHelper.getCurrentProcessUserInfo()).thenReturn(mUserInfo);
-        new CarUserManagerHelper(mContext).setUserRestriction(mUserInfo,
-                UserManager.DISALLOW_DEBUGGING_FEATURES, false);
     }
 
     @After
     public void tearDown() {
         ShadowCarUserManagerHelper.reset();
+        ShadowUserManager.reset();
     }
 
     @Test
@@ -95,8 +96,12 @@
     public void testGetAvailabilityStatus_devOptionsEnabled_hasUserRestriction_isUnavailable() {
         Settings.Global.putInt(mContext.getContentResolver(),
                 Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 1);
-        new CarUserManagerHelper(mContext).setUserRestriction(mUserInfo,
-                UserManager.DISALLOW_DEBUGGING_FEATURES, true);
+        getShadowUserManager().setUserRestriction(
+                mUserInfo.getUserHandle(), UserManager.DISALLOW_DEBUGGING_FEATURES, true);
         assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
     }
+
+    private ShadowUserManager getShadowUserManager() {
+        return Shadow.extract(mContext.getSystemService(UserManager.class));
+    }
 }
diff --git a/tests/robotests/src/com/android/car/settings/testutils/ShadowCarUserManagerHelper.java b/tests/robotests/src/com/android/car/settings/testutils/ShadowCarUserManagerHelper.java
index 02fc562..2a81aed 100644
--- a/tests/robotests/src/com/android/car/settings/testutils/ShadowCarUserManagerHelper.java
+++ b/tests/robotests/src/com/android/car/settings/testutils/ShadowCarUserManagerHelper.java
@@ -109,21 +109,11 @@
     }
 
     @Implementation
-    protected boolean canCurrentProcessAddUsers() {
-        return sMockInstance.canCurrentProcessAddUsers();
-    }
-
-    @Implementation
     protected int getMaxSupportedRealUsers() {
         return sMockInstance.getMaxSupportedRealUsers();
     }
 
     @Implementation
-    protected boolean canCurrentProcessRemoveUsers() {
-        return sMockInstance.canCurrentProcessRemoveUsers();
-    }
-
-    @Implementation
     protected void grantAdminPermissions(UserInfo user) {
         sMockInstance.grantAdminPermissions(user);
     }
diff --git a/tests/robotests/src/com/android/car/settings/testutils/ShadowUserManager.java b/tests/robotests/src/com/android/car/settings/testutils/ShadowUserManager.java
index d08f2c9..b7c502d 100644
--- a/tests/robotests/src/com/android/car/settings/testutils/ShadowUserManager.java
+++ b/tests/robotests/src/com/android/car/settings/testutils/ShadowUserManager.java
@@ -18,6 +18,7 @@
 
 import android.annotation.UserIdInt;
 import android.content.pm.UserInfo;
+import android.os.UserHandle;
 import android.os.UserManager;
 import android.util.ArrayMap;
 
@@ -68,6 +69,11 @@
         mProfiles.get(userHandle).add(new UserInfo(profileUserHandle, profileName, profileFlags));
     }
 
+    @Implementation
+    protected void setUserRestriction(String key, boolean value, UserHandle userHandle) {
+        setUserRestriction(userHandle, key, value);
+    }
+
     @Resetter
     public static void reset() {
         sInstance = null;
diff --git a/tests/robotests/src/com/android/car/settings/users/PermissionsPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/users/PermissionsPreferenceControllerTest.java
index 12eccca..53c22b8 100644
--- a/tests/robotests/src/com/android/car/settings/users/PermissionsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/users/PermissionsPreferenceControllerTest.java
@@ -18,9 +18,6 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.Mockito.mock;
-
-import android.car.userlib.CarUserManagerHelper;
 import android.content.Context;
 import android.content.pm.UserInfo;
 import android.os.UserManager;
@@ -31,7 +28,7 @@
 
 import com.android.car.settings.common.LogicalPreferenceGroup;
 import com.android.car.settings.common.PreferenceControllerTestHelper;
-import com.android.car.settings.testutils.ShadowCarUserManagerHelper;
+import com.android.car.settings.testutils.ShadowUserManager;
 
 import org.junit.After;
 import org.junit.Before;
@@ -40,6 +37,7 @@
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
+import org.robolectric.shadow.api.Shadow;
 
 /**
  * Test for the preference controller which populates the various permissions preferences.
@@ -47,36 +45,34 @@
  * i.e. DISALLOW_ADD_USER may be the restriction, but the switch represents "create new users".
  */
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowCarUserManagerHelper.class})
+@Config(shadows = {ShadowUserManager.class})
 public class PermissionsPreferenceControllerTest {
 
     private static final String TEST_RESTRICTION = UserManager.DISALLOW_ADD_USER;
     private static final UserInfo TEST_USER = new UserInfo(/* id= */ 10,
             "TEST_USER_NAME", /* flags= */ 0);
 
+    private Context mContext;
     private PreferenceControllerTestHelper<PermissionsPreferenceController>
             mPreferenceControllerHelper;
     private PermissionsPreferenceController mController;
     private PreferenceGroup mPreferenceGroup;
-    private CarUserManagerHelper mCarUserManagerHelper;
 
     @Before
     public void setUp() {
-        Context context = RuntimeEnvironment.application;
-        ShadowCarUserManagerHelper.setMockInstance(mock(CarUserManagerHelper.class));
-        mPreferenceControllerHelper = new PreferenceControllerTestHelper<>(context,
+        mContext = RuntimeEnvironment.application;
+        mPreferenceControllerHelper = new PreferenceControllerTestHelper<>(mContext,
                 PermissionsPreferenceController.class);
         mController = mPreferenceControllerHelper.getController();
         mController.setUserInfo(TEST_USER);
-        mPreferenceGroup = new LogicalPreferenceGroup(context);
+        mPreferenceGroup = new LogicalPreferenceGroup(mContext);
         mPreferenceControllerHelper.setPreference(mPreferenceGroup);
-        mCarUserManagerHelper = new CarUserManagerHelper(context);
         mPreferenceControllerHelper.sendLifecycleEvent(Lifecycle.Event.ON_CREATE);
     }
 
     @After
     public void tearDown() {
-        ShadowCarUserManagerHelper.reset();
+        ShadowUserManager.reset();
     }
 
     @Test
@@ -97,7 +93,8 @@
         SwitchPreference preference = getPreferenceForRestriction(mPreferenceGroup,
                 TEST_RESTRICTION);
         preference.setChecked(true);
-        mCarUserManagerHelper.setUserRestriction(TEST_USER, TEST_RESTRICTION, true);
+        getShadowUserManager().setUserRestriction(
+                TEST_USER.getUserHandle(), TEST_RESTRICTION, true);
         mController.refreshUi();
         assertThat(preference.isChecked()).isFalse();
     }
@@ -107,7 +104,8 @@
         SwitchPreference preference = getPreferenceForRestriction(mPreferenceGroup,
                 TEST_RESTRICTION);
         preference.setChecked(false);
-        mCarUserManagerHelper.setUserRestriction(TEST_USER, TEST_RESTRICTION, false);
+        getShadowUserManager().setUserRestriction(
+                TEST_USER.getUserHandle(), TEST_RESTRICTION, false);
         mController.refreshUi();
         assertThat(preference.isChecked()).isTrue();
     }
@@ -116,18 +114,22 @@
     public void testOnPreferenceChange_changeToFalse() {
         SwitchPreference preference = getPreferenceForRestriction(mPreferenceGroup,
                 TEST_RESTRICTION);
-        mCarUserManagerHelper.setUserRestriction(TEST_USER, TEST_RESTRICTION, true);
+        getShadowUserManager().setUserRestriction(
+                TEST_USER.getUserHandle(), TEST_RESTRICTION, true);
         preference.callChangeListener(true);
-        assertThat(mCarUserManagerHelper.hasUserRestriction(TEST_RESTRICTION, TEST_USER)).isFalse();
+        assertThat(UserManager.get(mContext)
+                .hasUserRestriction(TEST_RESTRICTION, TEST_USER.getUserHandle())).isFalse();
     }
 
     @Test
     public void testOnPreferenceChange_changeToTrue() {
         SwitchPreference preference = getPreferenceForRestriction(mPreferenceGroup,
                 TEST_RESTRICTION);
-        mCarUserManagerHelper.setUserRestriction(TEST_USER, TEST_RESTRICTION, false);
+        getShadowUserManager().setUserRestriction(
+                TEST_USER.getUserHandle(), TEST_RESTRICTION, false);
         preference.callChangeListener(false);
-        assertThat(mCarUserManagerHelper.hasUserRestriction(TEST_RESTRICTION, TEST_USER)).isTrue();
+        assertThat(UserManager.get(mContext)
+                .hasUserRestriction(TEST_RESTRICTION, TEST_USER.getUserHandle())).isTrue();
     }
 
     private SwitchPreference getPreferenceForRestriction(
@@ -141,4 +143,8 @@
         }
         return null;
     }
+
+    private ShadowUserManager getShadowUserManager() {
+        return Shadow.extract(mContext.getSystemService(UserManager.class));
+    }
 }
diff --git a/tests/robotests/src/com/android/car/settings/users/UserDetailsBaseFragmentTest.java b/tests/robotests/src/com/android/car/settings/users/UserDetailsBaseFragmentTest.java
index a084de9..2882745 100644
--- a/tests/robotests/src/com/android/car/settings/users/UserDetailsBaseFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/users/UserDetailsBaseFragmentTest.java
@@ -22,6 +22,7 @@
 
 import android.car.userlib.CarUserManagerHelper;
 import android.content.pm.UserInfo;
+import android.os.Process;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.view.View;
@@ -42,7 +43,9 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
+import org.robolectric.shadow.api.Shadow;
 
 import java.util.Arrays;
 
@@ -94,7 +97,8 @@
 
     @Test
     public void testRemoveUserButtonVisible_whenAllowedToRemoveUsers() {
-        when(mCarUserManagerHelper.canCurrentProcessRemoveUsers()).thenReturn(true);
+        getShadowUserManager().setUserRestriction(
+                Process.myUserHandle(), UserManager.DISALLOW_REMOVE_USER, false);
         when(mCarUserManagerHelper.isCurrentProcessDemoUser()).thenReturn(false);
         createUserDetailsBaseFragment(/*userId=*/1);
 
@@ -103,7 +107,8 @@
 
     @Test
     public void testRemoveUserButtonHidden_whenNotAllowedToRemoveUsers() {
-        when(mCarUserManagerHelper.canCurrentProcessRemoveUsers()).thenReturn(false);
+        getShadowUserManager().setUserRestriction(
+                Process.myUserHandle(), UserManager.DISALLOW_REMOVE_USER, true);
         when(mCarUserManagerHelper.isCurrentProcessDemoUser()).thenReturn(false);
         createUserDetailsBaseFragment(/*userId=*/1);
 
@@ -112,7 +117,8 @@
 
     @Test
     public void testRemoveUserButtonHidden_whenUserIsSystemUser() {
-        when(mCarUserManagerHelper.canCurrentProcessRemoveUsers()).thenReturn(true);
+        getShadowUserManager().setUserRestriction(
+                Process.myUserHandle(), UserManager.DISALLOW_REMOVE_USER, false);
         when(mCarUserManagerHelper.isCurrentProcessDemoUser()).thenReturn(false);
         createUserDetailsBaseFragment(UserHandle.USER_SYSTEM);
 
@@ -121,7 +127,8 @@
 
     @Test
     public void testRemoveUserButtonHidden_demoUser() {
-        when(mCarUserManagerHelper.canCurrentProcessRemoveUsers()).thenReturn(true);
+        getShadowUserManager().setUserRestriction(
+                Process.myUserHandle(), UserManager.DISALLOW_REMOVE_USER, false);
         when(mCarUserManagerHelper.isCurrentProcessDemoUser()).thenReturn(true);
         createUserDetailsBaseFragment(/*userId=*/1);
 
@@ -130,7 +137,8 @@
 
     @Test
     public void testRemoveUserButtonClick_createsRemovalDialog() {
-        when(mCarUserManagerHelper.canCurrentProcessRemoveUsers()).thenReturn(true);
+        getShadowUserManager().setUserRestriction(
+                Process.myUserHandle(), UserManager.DISALLOW_REMOVE_USER, false);
         when(mCarUserManagerHelper.isCurrentProcessDemoUser()).thenReturn(false);
         when(mCarUserManagerHelper.getAllPersistentUsers()).thenReturn(
                 Arrays.asList(new UserInfo()));
@@ -151,4 +159,8 @@
         mTestActivity.launchFragment(mUserDetailsBaseFragment);
         mRemoveUserButton = (Button) mTestActivity.findViewById(R.id.action_button1);
     }
+
+    private ShadowUserManager getShadowUserManager() {
+        return Shadow.extract(RuntimeEnvironment.application.getSystemService(UserManager.class));
+    }
 }
diff --git a/tests/robotests/src/com/android/car/settings/users/UsersListFragmentTest.java b/tests/robotests/src/com/android/car/settings/users/UsersListFragmentTest.java
index 6d03d8a..12a5eba 100644
--- a/tests/robotests/src/com/android/car/settings/users/UsersListFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/users/UsersListFragmentTest.java
@@ -26,6 +26,7 @@
 import android.car.userlib.CarUserManagerHelper;
 import android.content.Context;
 import android.content.pm.UserInfo;
+import android.os.Process;
 import android.os.UserManager;
 import android.widget.Button;
 
@@ -34,6 +35,7 @@
 import com.android.car.settings.testutils.BaseTestActivity;
 import com.android.car.settings.testutils.ShadowCarUserManagerHelper;
 import com.android.car.settings.testutils.ShadowUserIconProvider;
+import com.android.car.settings.testutils.ShadowUserManager;
 
 import org.junit.After;
 import org.junit.Before;
@@ -45,6 +47,7 @@
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
+import org.robolectric.shadow.api.Shadow;
 
 import java.util.ArrayList;
 
@@ -52,14 +55,14 @@
  * Tests for UserDetailsFragment.
  */
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowCarUserManagerHelper.class, ShadowUserIconProvider.class})
+@Config(shadows = {ShadowCarUserManagerHelper.class, ShadowUserManager.class,
+        ShadowUserIconProvider.class})
 public class UsersListFragmentTest {
 
     private Context mContext;
     private BaseTestActivity mTestActivity;
     private UsersListFragment mFragment;
     private Button mActionButton;
-    private ConfirmationDialogFragment mDialog;
 
     @Mock
     private CarUserManagerHelper mCarUserManagerHelper;
@@ -78,6 +81,7 @@
     @After
     public void tearDown() {
         ShadowCarUserManagerHelper.reset();
+        ShadowUserManager.reset();
     }
 
     /* Test that onCreateNewUserConfirmed invokes a creation of a new non-admin. */
@@ -113,7 +117,8 @@
     /* Test that if user can add other users, click on the button creates a dialog to confirm. */
     @Test
     public void testCallOnClick_showAddUserDialog() {
-        doReturn(true).when(mCarUserManagerHelper).canCurrentProcessAddUsers();
+        getShadowUserManager().setUserRestriction(
+                Process.myUserHandle(), UserManager.DISALLOW_ADD_USER, false);
         createUsersListFragment();
 
         mActionButton.callOnClick();
@@ -138,4 +143,8 @@
     private boolean isDialogShown(String tag) {
         return mTestActivity.getSupportFragmentManager().findFragmentByTag(tag) != null;
     }
+
+    private ShadowUserManager getShadowUserManager() {
+        return Shadow.extract(mContext.getSystemService(UserManager.class));
+    }
 }
diff --git a/tests/robotests/src/com/android/car/settings/users/UsersPreferenceProviderTest.java b/tests/robotests/src/com/android/car/settings/users/UsersPreferenceProviderTest.java
index 69f2252..6986c51 100644
--- a/tests/robotests/src/com/android/car/settings/users/UsersPreferenceProviderTest.java
+++ b/tests/robotests/src/com/android/car/settings/users/UsersPreferenceProviderTest.java
@@ -30,6 +30,7 @@
 import androidx.preference.Preference;
 
 import com.android.car.settings.R;
+import com.android.car.settings.testutils.ShadowUserIconProvider;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -38,11 +39,13 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
 
 import java.util.Arrays;
 import java.util.List;
 
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowUserIconProvider.class})
 public class UsersPreferenceProviderTest {
 
     private static final String TEST_CURRENT_USER_NAME = "Current User";