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