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