Clean up ShadowUserManager.

Remove usages of the custom shadow where they are no longer needed and
remove the mock instance pattern in favor of adding users via the
Robolectric ShadowUserManager's API.

Bug: 137316669

Test: RunCarSettingsRoboTests

Change-Id: I33c2e07002fa8b558751e2be6c17b5bb616e9f50
diff --git a/tests/robotests/src/com/android/car/settings/applications/ApplicationDetailsFragmentTest.java b/tests/robotests/src/com/android/car/settings/applications/ApplicationDetailsFragmentTest.java
index 8136b17..8c9ac2a 100644
--- a/tests/robotests/src/com/android/car/settings/applications/ApplicationDetailsFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/applications/ApplicationDetailsFragmentTest.java
@@ -18,7 +18,6 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import android.app.Activity;
@@ -34,7 +33,6 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.pm.Signature;
-import android.content.pm.UserInfo;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.UserHandle;
@@ -103,17 +101,15 @@
         MockitoAnnotations.initMocks(this);
         ShadowCarUserManagerHelper.setMockInstance(mCarUserManagerHelper);
         int userId = UserHandle.myUserId();
-        UserInfo userInfo = new UserInfo();
-        userInfo.id = userId;
-        when(mCarUserManagerHelper.getCurrentProcessUserId()).thenReturn(userId);
-        when(mCarUserManagerHelper.getAllUsers()).thenReturn(Collections.singletonList(userInfo));
-        UserManager mockUserManager = mock(UserManager.class);
-        when(mockUserManager.getUserInfo(userId)).thenReturn(userInfo);
-        ShadowUserManager.setInstance(mockUserManager);
 
         mContext = RuntimeEnvironment.application;
+        getShadowUserManager().addUser(userId, "userName", /* flags= */ 0);
         getShadowUserManager().addProfile(userId, userId, "profileName", /* profileFlags= */ 0);
 
+        when(mCarUserManagerHelper.getCurrentProcessUserId()).thenReturn(userId);
+        when(mCarUserManagerHelper.getAllUsers()).thenReturn(
+                Collections.singletonList(UserManager.get(mContext).getUserInfo(userId)));
+
         mActivity = new TestActivity();
         mController = ActivityController.of(mActivity);
         mController.create();
diff --git a/tests/robotests/src/com/android/car/settings/applications/managedomainurls/DomainAppPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/applications/managedomainurls/DomainAppPreferenceControllerTest.java
index 17423a8..14e85dc 100644
--- a/tests/robotests/src/com/android/car/settings/applications/managedomainurls/DomainAppPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/applications/managedomainurls/DomainAppPreferenceControllerTest.java
@@ -40,7 +40,6 @@
 import com.android.car.settings.testutils.ShadowApplicationsState;
 import com.android.car.settings.testutils.ShadowCarUserManagerHelper;
 import com.android.car.settings.testutils.ShadowIconDrawableFactory;
-import com.android.car.settings.testutils.ShadowUserManager;
 import com.android.settingslib.applications.ApplicationsState;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
@@ -53,14 +52,15 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.Shadows;
 import org.robolectric.annotation.Config;
-import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowUserManager;
 
 import java.util.ArrayList;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowUserManager.class, ShadowCarUserManagerHelper.class,
-        ShadowIconDrawableFactory.class, ShadowApplicationsState.class})
+@Config(shadows = {ShadowCarUserManagerHelper.class, ShadowIconDrawableFactory.class,
+        ShadowApplicationsState.class})
 public class DomainAppPreferenceControllerTest {
 
     private static final int USER_ID = 10;
@@ -109,7 +109,6 @@
     public void tearDown() {
         ShadowApplicationsState.reset();
         ShadowCarUserManagerHelper.reset();
-        ShadowUserManager.reset();
     }
 
     @Test
@@ -165,6 +164,6 @@
     }
 
     private ShadowUserManager getShadowUserManager() {
-        return Shadow.extract(UserManager.get(mContext));
+        return Shadows.shadowOf(UserManager.get(mContext));
     }
 }
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 d208f6d..3b486fb 100644
--- a/tests/robotests/src/com/android/car/settings/development/DevelopmentSettingsUtilTest.java
+++ b/tests/robotests/src/com/android/car/settings/development/DevelopmentSettingsUtilTest.java
@@ -18,8 +18,6 @@
 
 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;
@@ -30,7 +28,6 @@
 
 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;
@@ -40,12 +37,12 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.Shadows;
 import org.robolectric.annotation.Config;
-import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowUserManager;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowCarUserManagerHelper.class, ShadowLocalBroadcastManager.class,
-        ShadowUserManager.class})
+@Config(shadows = {ShadowCarUserManagerHelper.class, ShadowLocalBroadcastManager.class})
 public class DevelopmentSettingsUtilTest {
 
     private static final UserInfo USER_INFO = new UserInfo(0, null, 0);
@@ -65,17 +62,14 @@
         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);
+        mUserManager = UserManager.get(mContext);
+        getShadowUserManager().addUser(USER_INFO.id, USER_INFO.name, USER_INFO.flags);
     }
 
     @After
     public void tearDown() {
         ShadowCarUserManagerHelper.reset();
         ShadowLocalBroadcastManager.reset();
-        ShadowUserManager.reset();
     }
 
     @Test
@@ -194,6 +188,6 @@
     }
 
     private ShadowUserManager getShadowUserManager() {
-        return Shadow.extract(mContext.getSystemService(UserManager.class));
+        return Shadows.shadowOf(UserManager.get(mContext));
     }
 }
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 2bc6a2e..402246b 100644
--- a/tests/robotests/src/com/android/car/settings/system/BuildNumberPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/system/BuildNumberPreferenceControllerTest.java
@@ -18,9 +18,6 @@
 
 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;
@@ -37,7 +34,6 @@
 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;
@@ -47,11 +43,12 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.Shadows;
 import org.robolectric.annotation.Config;
 import org.robolectric.shadows.ShadowToast;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowCarUserManagerHelper.class, ShadowUserManager.class})
+@Config(shadows = {ShadowCarUserManagerHelper.class})
 public class BuildNumberPreferenceControllerTest {
 
     private Context mContext;
@@ -61,28 +58,28 @@
     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,
                 BuildNumberPreferenceController.class, mPreference);
         mController = mPreferenceControllerHelper.getController();
 
+        int userId = UserHandle.myUserId();
+        Shadows.shadowOf(UserManager.get(mContext)).addUser(userId, "User Name", /* flags= */ 0);
+
         // By default, user is an admin user.
         when(mCarUserManagerHelper.isCurrentProcessAdminUser()).thenReturn(true);
         when(mCarUserManagerHelper.isCurrentProcessDemoUser()).thenReturn(false);
 
         // By default, no restrictions on debugging features.
         when(mCarUserManagerHelper.getCurrentProcessUserInfo()).thenReturn(new UserInfo());
-        when(mUserManager.hasUserRestriction(eq(UserManager.DISALLOW_DEBUGGING_FEATURES),
-                any(UserHandle.class))).thenReturn(false);
+        Shadows.shadowOf(UserManager.get(mContext)).setUserRestriction(UserHandle.of(userId),
+                UserManager.DISALLOW_DEBUGGING_FEATURES, false);
 
         // By default device is provisioned.
         Settings.Global.putInt(mContext.getContentResolver(),
@@ -92,14 +89,11 @@
         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
@@ -163,7 +157,7 @@
             mPreference.performClick();
         }
         assertThat(DevelopmentSettingsUtil.isDevelopmentSettingsEnabled(mContext,
-                mCarUserManagerHelper, mUserManager)).isTrue();
+                mCarUserManagerHelper, UserManager.get(mContext))).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 b322443..0665908 100644
--- a/tests/robotests/src/com/android/car/settings/system/DeveloperOptionsEntryPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/system/DeveloperOptionsEntryPreferenceControllerTest.java
@@ -33,7 +33,6 @@
 
 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,11 +42,11 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.Shadows;
 import org.robolectric.annotation.Config;
-import org.robolectric.shadow.api.Shadow;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowCarUserManagerHelper.class, ShadowUserManager.class})
+@Config(shadows = {ShadowCarUserManagerHelper.class})
 public class DeveloperOptionsEntryPreferenceControllerTest {
 
     private Context mContext;
@@ -75,7 +74,6 @@
     @After
     public void tearDown() {
         ShadowCarUserManagerHelper.reset();
-        ShadowUserManager.reset();
     }
 
     @Test
@@ -96,12 +94,8 @@
     public void testGetAvailabilityStatus_devOptionsEnabled_hasUserRestriction_isUnavailable() {
         Settings.Global.putInt(mContext.getContentResolver(),
                 Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 1);
-        getShadowUserManager().setUserRestriction(
+        Shadows.shadowOf(UserManager.get(mContext)).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/system/MasterClearAccountsPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/system/MasterClearAccountsPreferenceControllerTest.java
index 79a55e9..5109350 100644
--- a/tests/robotests/src/com/android/car/settings/system/MasterClearAccountsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/system/MasterClearAccountsPreferenceControllerTest.java
@@ -35,7 +35,6 @@
 import com.android.car.settings.common.PreferenceControllerTestHelper;
 import com.android.car.settings.testutils.ShadowAccountManager;
 import com.android.car.settings.testutils.ShadowCarUserManagerHelper;
-import com.android.car.settings.testutils.ShadowUserManager;
 
 import org.junit.After;
 import org.junit.Before;
@@ -45,13 +44,14 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.Shadows;
 import org.robolectric.annotation.Config;
 import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowUserManager;
 
 /** Unit test for {@link MasterClearAccountsPreferenceController}. */
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowCarUserManagerHelper.class, ShadowUserManager.class,
-        ShadowAccountManager.class})
+@Config(shadows = {ShadowCarUserManagerHelper.class, ShadowAccountManager.class})
 public class MasterClearAccountsPreferenceControllerTest {
 
     private static final int USER_ID = 111;
@@ -70,8 +70,10 @@
         MockitoAnnotations.initMocks(this);
         ShadowCarUserManagerHelper.setMockInstance(mCarUserManagerHelper);
         when(mCarUserManagerHelper.getCurrentProcessUserId()).thenReturn(USER_ID);
-
         mContext = RuntimeEnvironment.application;
+        getShadowUserManager().addProfile(USER_ID, USER_ID,
+                String.valueOf(USER_ID), /* profileFlags= */ 0);
+
         mPreferenceGroup = new PreferenceCategory(mContext);
         mControllerHelper = new PreferenceControllerTestHelper<>(mContext,
                 MasterClearAccountsPreferenceController.class, mPreferenceGroup);
@@ -81,7 +83,6 @@
     @After
     public void tearDown() {
         ShadowCarUserManagerHelper.reset();
-        ShadowUserManager.reset();
     }
 
     @Test
@@ -96,8 +97,6 @@
     @Test
     public void refreshUi_accountsPresent_showsGroup() {
         mControllerHelper.markState(Lifecycle.State.STARTED);
-        getShadowUserManager().addProfile(USER_ID, USER_ID,
-                String.valueOf(USER_ID), /* profileFlags= */ 0);
         addAccountAndDescription(USER_ID, "accountName");
 
         mController.refreshUi();
@@ -108,8 +107,6 @@
     @Test
     public void refreshUi_noAccountsPresent_hidesGroup() {
         mControllerHelper.markState(Lifecycle.State.STARTED);
-        getShadowUserManager().addProfile(USER_ID, USER_ID,
-                String.valueOf(USER_ID), /* profileFlags= */ 0);
 
         mController.refreshUi();
 
@@ -143,8 +140,6 @@
     @Test
     public void refreshUi_missingAccountDescription_skipsAccount() {
         mControllerHelper.markState(Lifecycle.State.STARTED);
-        getShadowUserManager().addProfile(USER_ID, USER_ID,
-                String.valueOf(USER_ID), /* profileFlags= */ 0);
         addAccountAndDescription(USER_ID, "account name with desc");
         String accountNameNoDesc = "account name no desc";
         getShadowAccountManager().addAccountAsUser(USER_ID,
@@ -159,8 +154,6 @@
 
     @Test
     public void refreshUi_accountAdded_addsPreferenceToGroup() {
-        getShadowUserManager().addProfile(USER_ID, USER_ID,
-                String.valueOf(USER_ID), /* profileFlags= */ 0);
         addAccountAndDescription(USER_ID, "accountName");
         mControllerHelper.markState(Lifecycle.State.STARTED);
         assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(2);
@@ -176,8 +169,6 @@
 
     @Test
     public void refreshUi_accountRemoved_removesPreferenceFromGroup() {
-        getShadowUserManager().addProfile(USER_ID, USER_ID,
-                String.valueOf(USER_ID), /* profileFlags= */ 0);
         String accountNameToRemove = "account name to remove";
         addAccountAndDescription(USER_ID, accountNameToRemove);
         mControllerHelper.markState(Lifecycle.State.STARTED);
@@ -200,7 +191,7 @@
     }
 
     private ShadowUserManager getShadowUserManager() {
-        return Shadow.extract(UserManager.get(mContext));
+        return Shadows.shadowOf(UserManager.get(mContext));
     }
 
     private ShadowAccountManager getShadowAccountManager() {
diff --git a/tests/robotests/src/com/android/car/settings/system/MasterClearFragmentTest.java b/tests/robotests/src/com/android/car/settings/system/MasterClearFragmentTest.java
index fcc3949..eee1935 100644
--- a/tests/robotests/src/com/android/car/settings/system/MasterClearFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/system/MasterClearFragmentTest.java
@@ -30,6 +30,8 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
+import android.os.UserHandle;
+import android.os.UserManager;
 import android.widget.Button;
 
 import androidx.fragment.app.Fragment;
@@ -37,8 +39,8 @@
 import com.android.car.settings.R;
 import com.android.car.settings.security.CheckLockActivity;
 import com.android.car.settings.testutils.FragmentController;
+import com.android.car.settings.testutils.ShadowAccountManager;
 import com.android.car.settings.testutils.ShadowCarUserManagerHelper;
-import com.android.car.settings.testutils.ShadowUserManager;
 
 import org.junit.After;
 import org.junit.Before;
@@ -56,7 +58,7 @@
 
 /** Unit test for {@link MasterClearFragment}. */
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowCarUserManagerHelper.class, ShadowUserManager.class})
+@Config(shadows = {ShadowCarUserManagerHelper.class, ShadowAccountManager.class})
 public class MasterClearFragmentTest {
 
     @Mock
@@ -70,9 +72,14 @@
         MockitoAnnotations.initMocks(this);
         Context context = RuntimeEnvironment.application;
         ShadowCarUserManagerHelper.setMockInstance(mCarUserManagerHelper);
+        int userId = UserHandle.myUserId();
+        Shadows.shadowOf(UserManager.get(context)).addUser(userId, "User Name", /* flags= */ 0);
+        Shadows.shadowOf(UserManager.get(context)).addProfile(userId, userId,
+                "Profile Name", /* profileFlags= */ 0);
         Shadows.shadowOf(context.getPackageManager())
                 .setSystemFeature(PackageManager.FEATURE_AUTOMOTIVE, true);
         when(mCarUserManagerHelper.getAllSwitchableUsers()).thenReturn(Collections.emptyList());
+        when(mCarUserManagerHelper.getCurrentProcessUserId()).thenReturn(userId);
 
         mFragment = FragmentController.of(new MasterClearFragment()).setup();
     }
@@ -80,7 +87,6 @@
     @After
     public void tearDown() {
         ShadowCarUserManagerHelper.reset();
-        ShadowUserManager.reset();
     }
 
     @Test
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 b7c502d..ff314ec 100644
--- a/tests/robotests/src/com/android/car/settings/testutils/ShadowUserManager.java
+++ b/tests/robotests/src/com/android/car/settings/testutils/ShadowUserManager.java
@@ -16,7 +16,6 @@
 
 package com.android.car.settings.testutils;
 
-import android.annotation.UserIdInt;
 import android.content.pm.UserInfo;
 import android.os.UserHandle;
 import android.os.UserManager;
@@ -24,7 +23,6 @@
 
 import org.robolectric.annotation.Implementation;
 import org.robolectric.annotation.Implements;
-import org.robolectric.annotation.Resetter;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -33,19 +31,9 @@
 
 @Implements(UserManager.class)
 public class ShadowUserManager extends org.robolectric.shadows.ShadowUserManager {
-    private static UserManager sInstance;
 
     private Map<Integer, List<UserInfo>> mProfiles = new ArrayMap<>();
 
-    public static void setInstance(UserManager manager) {
-        sInstance = manager;
-    }
-
-    @Implementation
-    protected UserInfo getUserInfo(@UserIdInt int userHandle) {
-        return sInstance.getUserInfo(userHandle);
-    }
-
     @Implementation
     protected int[] getProfileIdsWithDisabled(int userId) {
         if (mProfiles.containsKey(userId)) {
@@ -73,9 +61,4 @@
     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/UserDetailsBaseFragmentTest.java b/tests/robotests/src/com/android/car/settings/users/UserDetailsBaseFragmentTest.java
index 2882745..73c1b4c 100644
--- a/tests/robotests/src/com/android/car/settings/users/UserDetailsBaseFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/users/UserDetailsBaseFragmentTest.java
@@ -21,6 +21,7 @@
 import static org.mockito.Mockito.when;
 
 import android.car.userlib.CarUserManagerHelper;
+import android.content.Context;
 import android.content.pm.UserInfo;
 import android.os.Process;
 import android.os.UserHandle;
@@ -33,7 +34,6 @@
 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;
@@ -44,14 +44,14 @@
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.Shadows;
 import org.robolectric.annotation.Config;
-import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowUserManager;
 
-import java.util.Arrays;
+import java.util.Collections;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowUserManager.class, ShadowCarUserManagerHelper.class,
-        ShadowUserIconProvider.class})
+@Config(shadows = {ShadowCarUserManagerHelper.class, ShadowUserIconProvider.class})
 public class UserDetailsBaseFragmentTest {
 
     /*
@@ -71,20 +71,19 @@
         }
     }
 
+    private Context mContext;
     private BaseTestActivity mTestActivity;
     private UserDetailsBaseFragment mUserDetailsBaseFragment;
     @Mock
     private CarUserManagerHelper mCarUserManagerHelper;
-    @Mock
-    private UserManager mUserManager;
 
     private Button mRemoveUserButton;
 
     @Before
     public void setUpTestActivity() {
+        mContext = RuntimeEnvironment.application;
         MockitoAnnotations.initMocks(this);
         ShadowCarUserManagerHelper.setMockInstance(mCarUserManagerHelper);
-        ShadowUserManager.setInstance(mUserManager);
 
         mTestActivity = Robolectric.setupActivity(BaseTestActivity.class);
     }
@@ -92,7 +91,6 @@
     @After
     public void tearDown() {
         ShadowCarUserManagerHelper.reset();
-        ShadowUserManager.reset();
     }
 
     @Test
@@ -141,7 +139,7 @@
                 Process.myUserHandle(), UserManager.DISALLOW_REMOVE_USER, false);
         when(mCarUserManagerHelper.isCurrentProcessDemoUser()).thenReturn(false);
         when(mCarUserManagerHelper.getAllPersistentUsers()).thenReturn(
-                Arrays.asList(new UserInfo()));
+                Collections.singletonList(new UserInfo()));
         createUserDetailsBaseFragment(/*userId=*/1);
         mRemoveUserButton.performClick();
 
@@ -155,12 +153,12 @@
         // Use UserDetailsFragment, since we cannot test an abstract class.
         mUserDetailsBaseFragment = UserDetailsBaseFragment.addUserIdToFragmentArguments(
                 new TestUserDetailsBaseFragment(), testUser.id);
-        when(mUserManager.getUserInfo(testUser.id)).thenReturn(testUser);
+        getShadowUserManager().addUser(testUser.id, "testUser", /* flags= */ 0);
         mTestActivity.launchFragment(mUserDetailsBaseFragment);
-        mRemoveUserButton = (Button) mTestActivity.findViewById(R.id.action_button1);
+        mRemoveUserButton = mTestActivity.findViewById(R.id.action_button1);
     }
 
     private ShadowUserManager getShadowUserManager() {
-        return Shadow.extract(RuntimeEnvironment.application.getSystemService(UserManager.class));
+        return Shadows.shadowOf(UserManager.get(mContext));
     }
 }
diff --git a/tests/robotests/src/com/android/car/settings/users/UserDetailsFragmentTest.java b/tests/robotests/src/com/android/car/settings/users/UserDetailsFragmentTest.java
index fa968be..3851d24 100644
--- a/tests/robotests/src/com/android/car/settings/users/UserDetailsFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/users/UserDetailsFragmentTest.java
@@ -18,11 +18,8 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-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.widget.TextView;
 
@@ -30,7 +27,6 @@
 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;
@@ -41,11 +37,11 @@
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.Shadows;
 import org.robolectric.annotation.Config;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowUserManager.class, ShadowCarUserManagerHelper.class,
-        ShadowUserIconProvider.class})
+@Config(shadows = {ShadowCarUserManagerHelper.class, ShadowUserIconProvider.class})
 public class UserDetailsFragmentTest {
 
     private static final String TEST_NAME = "test_name";
@@ -53,12 +49,11 @@
     private static final int TEST_USER_ID = 10;
 
     private Context mContext;
+    private UserManager mUserManager;
     private BaseTestActivity mTestActivity;
     private UserDetailsFragment mUserDetailsFragment;
     @Mock
     private CarUserManagerHelper mCarUserManagerHelper;
-    @Mock
-    private UserManager mUserManager;
 
     private TextView mTitle;
 
@@ -66,44 +61,42 @@
     public void setUpTestActivity() {
         MockitoAnnotations.initMocks(this);
         ShadowCarUserManagerHelper.setMockInstance(mCarUserManagerHelper);
-        ShadowUserManager.setInstance(mUserManager);
 
         mContext = RuntimeEnvironment.application;
+        mUserManager = UserManager.get(mContext);
+        Shadows.shadowOf(mUserManager).addUser(TEST_USER_ID, TEST_NAME, /* flags= */ 0);
         mTestActivity = Robolectric.setupActivity(BaseTestActivity.class);
     }
 
     @After
     public void tearDown() {
         ShadowCarUserManagerHelper.reset();
-        ShadowUserManager.reset();
     }
 
     @Test
     public void testCarUserManagerHelperUpdateListener_showsCorrectText() {
-        UserInfo testUser = new UserInfo(TEST_USER_ID, TEST_NAME, /* flags= */ 0);
-        when(mUserManager.getUserInfo(TEST_USER_ID)).thenReturn(testUser);
         createUserDetailsFragment();
         mUserDetailsFragment.mOnUsersUpdateListener.onUsersUpdate();
         assertThat(mTitle.getText()).isEqualTo(
-                UserUtils.getUserDisplayName(mContext, mCarUserManagerHelper, testUser));
+                UserUtils.getUserDisplayName(mContext, mCarUserManagerHelper,
+                        mUserManager.getUserInfo(TEST_USER_ID)));
     }
 
     @Test
     public void testCarUserManagerHelperUpdateListener_textChangesWithUserUpdate() {
-        UserInfo testUser = new UserInfo(TEST_USER_ID, TEST_NAME, /* flags= */ 0);
-        when(mUserManager.getUserInfo(TEST_USER_ID)).thenReturn(testUser);
-
         createUserDetailsFragment();
         mUserDetailsFragment.mOnUsersUpdateListener.onUsersUpdate();
         assertThat(mTitle.getText()).isEqualTo(
-                UserUtils.getUserDisplayName(mContext, mCarUserManagerHelper, testUser));
+                UserUtils.getUserDisplayName(mContext, mCarUserManagerHelper,
+                        mUserManager.getUserInfo(TEST_USER_ID)));
 
-        UserInfo testUserUpdated = new UserInfo(TEST_USER_ID, TEST_UPDATED_NAME, /* flags= */ 0);
-        when(mUserManager.getUserInfo(TEST_USER_ID)).thenReturn(testUserUpdated);
+        mUserManager.removeUser(TEST_USER_ID);
+        Shadows.shadowOf(mUserManager).addUser(TEST_USER_ID, TEST_UPDATED_NAME, /* flags= */ 0);
 
         mUserDetailsFragment.mOnUsersUpdateListener.onUsersUpdate();
         assertThat(mTitle.getText()).isEqualTo(
-                UserUtils.getUserDisplayName(mContext, mCarUserManagerHelper, testUserUpdated));
+                UserUtils.getUserDisplayName(mContext, mCarUserManagerHelper,
+                        mUserManager.getUserInfo(TEST_USER_ID)));
     }
 
     private void createUserDetailsFragment() {
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 12a5eba..48fe298 100644
--- a/tests/robotests/src/com/android/car/settings/users/UsersListFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/users/UsersListFragmentTest.java
@@ -19,14 +19,13 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.verify;
 
 import android.car.userlib.CarUserManagerHelper;
 import android.content.Context;
 import android.content.pm.UserInfo;
-import android.os.Process;
+import android.os.UserHandle;
 import android.os.UserManager;
 import android.widget.Button;
 
@@ -35,7 +34,6 @@
 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;
@@ -46,8 +44,8 @@
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.Shadows;
 import org.robolectric.annotation.Config;
-import org.robolectric.shadow.api.Shadow;
 
 import java.util.ArrayList;
 
@@ -55,8 +53,7 @@
  * Tests for UserDetailsFragment.
  */
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = {ShadowCarUserManagerHelper.class, ShadowUserManager.class,
-        ShadowUserIconProvider.class})
+@Config(shadows = {ShadowCarUserManagerHelper.class, ShadowUserIconProvider.class})
 public class UsersListFragmentTest {
 
     private Context mContext;
@@ -66,8 +63,6 @@
 
     @Mock
     private CarUserManagerHelper mCarUserManagerHelper;
-    @Mock
-    private UserManager mUserManager;
 
 
     @Before
@@ -81,7 +76,6 @@
     @After
     public void tearDown() {
         ShadowCarUserManagerHelper.reset();
-        ShadowUserManager.reset();
     }
 
     /* Test that onCreateNewUserConfirmed invokes a creation of a new non-admin. */
@@ -117,8 +111,6 @@
     /* Test that if user can add other users, click on the button creates a dialog to confirm. */
     @Test
     public void testCallOnClick_showAddUserDialog() {
-        getShadowUserManager().setUserRestriction(
-                Process.myUserHandle(), UserManager.DISALLOW_ADD_USER, false);
         createUsersListFragment();
 
         mActionButton.callOnClick();
@@ -126,10 +118,11 @@
     }
 
     private void createUsersListFragment() {
-        UserInfo testUser = new UserInfo();
+        Shadows.shadowOf(UserManager.get(mContext)).addUser(UserHandle.myUserId(),
+                "User Name", /* flags= */ 0);
+        UserInfo testUser = UserManager.get(mContext).getUserInfo(UserHandle.myUserId());
         mFragment = new UsersListFragment();
         doReturn(testUser).when(mCarUserManagerHelper).getCurrentProcessUserInfo();
-        doReturn(testUser).when(mUserManager).getUserInfo(anyInt());
         doReturn(new ArrayList<UserInfo>()).when(mCarUserManagerHelper).getAllSwitchableUsers();
         doReturn(null).when(mCarUserManagerHelper).createNewNonAdminUser(any());
         mTestActivity.launchFragment(mFragment);
@@ -137,14 +130,10 @@
     }
 
     private void refreshButtons() {
-        mActionButton = (Button) mTestActivity.findViewById(R.id.action_button1);
+        mActionButton = mTestActivity.findViewById(R.id.action_button1);
     }
 
     private boolean isDialogShown(String tag) {
         return mTestActivity.getSupportFragmentManager().findFragmentByTag(tag) != null;
     }
-
-    private ShadowUserManager getShadowUserManager() {
-        return Shadow.extract(mContext.getSystemService(UserManager.class));
-    }
 }