Update icons and text for guest user

Test: As Guest, open Settings > System > Multiple users
Test: As Owner, open Settings > System > Multiple users
Bug: 169783558
Change-Id: I42c0b46fd895267b7556f3f308957b6dd17d92c4
This commit is contained in:
Peter Kalauskas
2020-12-30 17:43:14 -08:00
parent b6a5141953
commit 0fa7edbb02
4 changed files with 38 additions and 8 deletions

View File

@@ -7111,13 +7111,15 @@
<!-- Title for Guest user [CHAR LIMIT=35] --> <!-- Title for Guest user [CHAR LIMIT=35] -->
<string name="user_guest">Guest</string> <string name="user_guest">Guest</string>
<!-- Label for item to exit guest mode [CHAR LIMIT=35] --> <!-- Label for item to exit guest mode [CHAR LIMIT=35] -->
<string name="user_exit_guest_title">Remove guest</string> <string name="user_clear_guest_menu">Clear guest data</string>
<!-- Label for item to exit guest mode [CHAR LIMIT=35] -->
<string name="user_exit_guest_menu">End guest session</string>
<!-- Title of dialog to user to confirm exiting guest. [CHAR LIMIT=50] --> <!-- Title of dialog to user to confirm exiting guest. [CHAR LIMIT=50] -->
<string name="user_exit_guest_confirm_title">Remove guest?</string> <string name="user_exit_guest_confirm_title">End guest session?</string>
<!-- Message to user to confirm exiting guest. [CHAR LIMIT=none] --> <!-- Message to user to confirm exiting guest. [CHAR LIMIT=none] -->
<string name="user_exit_guest_confirm_message">All apps and data in this session will be deleted.</string> <string name="user_exit_guest_confirm_message">All apps and data in this session will be deleted.</string>
<!-- Label for button in confirmation dialog when exiting guest session [CHAR LIMIT=35] --> <!-- Label for button in confirmation dialog when exiting guest session [CHAR LIMIT=35] -->
<string name="user_exit_guest_dialog_remove">Remove</string> <string name="user_exit_guest_dialog_remove">End session</string>
<!-- Title of preference to enable calling[CHAR LIMIT=40] --> <!-- Title of preference to enable calling[CHAR LIMIT=40] -->
<string name="user_enable_calling">Turn on phone calls</string> <string name="user_enable_calling">Turn on phone calls</string>

View File

@@ -243,7 +243,7 @@ public class UserDetailsSettings extends SettingsPreferenceFragment
mDefaultGuestRestrictions = mUserManager.getDefaultGuestRestrictions(); mDefaultGuestRestrictions = mUserManager.getDefaultGuestRestrictions();
mPhonePref.setChecked( mPhonePref.setChecked(
!mDefaultGuestRestrictions.getBoolean(UserManager.DISALLOW_OUTGOING_CALLS)); !mDefaultGuestRestrictions.getBoolean(UserManager.DISALLOW_OUTGOING_CALLS));
mRemoveUserPref.setTitle(R.string.user_exit_guest_title); mRemoveUserPref.setTitle(R.string.user_exit_guest_menu);
} else { } else {
mPhonePref.setChecked(!mUserManager.hasUserRestriction( mPhonePref.setChecked(!mUserManager.hasUserRestriction(
UserManager.DISALLOW_OUTGOING_CALLS, new UserHandle(userId))); UserManager.DISALLOW_OUTGOING_CALLS, new UserHandle(userId)));

View File

@@ -31,6 +31,7 @@ import android.content.pm.UserInfo;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.net.Uri; import android.net.Uri;
import android.os.AsyncTask; import android.os.AsyncTask;
@@ -164,6 +165,7 @@ public class UserSettings extends SettingsPreferenceFragment
private final Object mUserLock = new Object(); private final Object mUserLock = new Object();
private UserManager mUserManager; private UserManager mUserManager;
private static SparseArray<Bitmap> sDarkDefaultUserBitmapCache = new SparseArray<>(); private static SparseArray<Bitmap> sDarkDefaultUserBitmapCache = new SparseArray<>();
private static Bitmap sRemoveGuestBitmap = null;
private MultiUserSwitchBarController mSwitchBarController; private MultiUserSwitchBarController mSwitchBarController;
private EditUserInfoController mEditUserInfoController = private EditUserInfoController mEditUserInfoController =
@@ -177,6 +179,7 @@ public class UserSettings extends SettingsPreferenceFragment
// A place to cache the generated default avatar // A place to cache the generated default avatar
private Drawable mDefaultIconDrawable; private Drawable mDefaultIconDrawable;
private Drawable mRemoveGuestIconDrawable;
// TODO: Replace current Handler solution to something that doesn't leak memory and works // TODO: Replace current Handler solution to something that doesn't leak memory and works
// TODO: during a configuration change // TODO: during a configuration change
@@ -383,8 +386,8 @@ public class UserSettings extends SettingsPreferenceFragment
private void loadProfile() { private void loadProfile() {
if (isCurrentUserGuest()) { if (isCurrentUserGuest()) {
// No need to load profile information // No need to load profile information
mMePreference.setIcon(getEncircledDefaultIcon()); mMePreference.setIcon(getEncircledRemoveGuestIcon());
mMePreference.setTitle(R.string.user_exit_guest_title); mMePreference.setTitle(R.string.user_clear_guest_menu);
mMePreference.setSelectable(true); mMePreference.setSelectable(true);
// removing a guest will result in switching back to the admin user // removing a guest will result in switching back to the admin user
mMePreference.setEnabled(canSwitchUserNow()); mMePreference.setEnabled(canSwitchUserNow());
@@ -899,7 +902,7 @@ public class UserSettings extends SettingsPreferenceFragment
} else { } else {
setPhotoId(pref, user); setPhotoId(pref, user);
} }
} else { } else if (!user.isGuest()) {
// Icon not available yet, print a placeholder // Icon not available yet, print a placeholder
pref.setIcon(getEncircledDefaultIcon()); pref.setIcon(getEncircledDefaultIcon());
} }
@@ -1044,6 +1047,14 @@ public class UserSettings extends SettingsPreferenceFragment
return mDefaultIconDrawable; return mDefaultIconDrawable;
} }
private Drawable getEncircledRemoveGuestIcon() {
if (mRemoveGuestIconDrawable == null) {
mRemoveGuestIconDrawable = encircle(
getRemoveGuestIconAsBitmap(getContext().getResources()));
}
return mRemoveGuestIconDrawable;
}
private void setPhotoId(Preference pref, UserInfo user) { private void setPhotoId(Preference pref, UserInfo user) {
Bitmap bitmap = mUserIcons.get(user.id); Bitmap bitmap = mUserIcons.get(user.id);
if (bitmap != null) { if (bitmap != null) {
@@ -1122,6 +1133,23 @@ public class UserSettings extends SettingsPreferenceFragment
return bitmap; return bitmap;
} }
/**
* Returns a remove guest icon (as a {@link Bitmap})
*
* @param resources resources object to fetch the remove guest icon.
*/
private static Bitmap getRemoveGuestIconAsBitmap(Resources resources) {
if (sRemoveGuestBitmap == null) {
Drawable icon = resources.getDrawable(R.drawable.ic_delete, null).mutate();
icon.setColorFilter(
resources.getColor(com.android.internal.R.color.user_icon_default_gray, null),
PorterDuff.Mode.SRC_IN);
icon.setBounds(0, 0, icon.getIntrinsicWidth(), icon.getIntrinsicHeight());
sRemoveGuestBitmap = UserIcons.convertToBitmap(icon);
}
return sRemoveGuestBitmap;
}
/** /**
* Assign the default photo to user with {@paramref userId} * Assign the default photo to user with {@paramref userId}
* *

View File

@@ -363,7 +363,7 @@ public class UserDetailsSettingsTest {
mFragment.initialize(mActivity, mArguments); mFragment.initialize(mActivity, mArguments);
verify(mRemoveUserPref).setOnPreferenceClickListener(mFragment); verify(mRemoveUserPref).setOnPreferenceClickListener(mFragment);
verify(mRemoveUserPref).setTitle(R.string.user_exit_guest_title); verify(mRemoveUserPref).setTitle(R.string.user_exit_guest_menu);
verify(mFragment, never()).removePreference(KEY_REMOVE_USER); verify(mFragment, never()).removePreference(KEY_REMOVE_USER);
} }