diff --git a/res/values/strings.xml b/res/values/strings.xml index 50f9424567e..d341c8ba8ce 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -7111,13 +7111,15 @@ Guest - Remove guest + Clear guest data + + End guest session - Remove guest? + End guest session? All apps and data in this session will be deleted. - Remove + End session Turn on phone calls diff --git a/src/com/android/settings/users/UserDetailsSettings.java b/src/com/android/settings/users/UserDetailsSettings.java index 53d984974bf..5005399c7c8 100644 --- a/src/com/android/settings/users/UserDetailsSettings.java +++ b/src/com/android/settings/users/UserDetailsSettings.java @@ -243,7 +243,7 @@ public class UserDetailsSettings extends SettingsPreferenceFragment mDefaultGuestRestrictions = mUserManager.getDefaultGuestRestrictions(); mPhonePref.setChecked( !mDefaultGuestRestrictions.getBoolean(UserManager.DISALLOW_OUTGOING_CALLS)); - mRemoveUserPref.setTitle(R.string.user_exit_guest_title); + mRemoveUserPref.setTitle(R.string.user_exit_guest_menu); } else { mPhonePref.setChecked(!mUserManager.hasUserRestriction( UserManager.DISALLOW_OUTGOING_CALLS, new UserHandle(userId))); diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java index 63ccb6b87ae..8ba54324144 100644 --- a/src/com/android/settings/users/UserSettings.java +++ b/src/com/android/settings/users/UserSettings.java @@ -31,6 +31,7 @@ import android.content.pm.UserInfo; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.AsyncTask; @@ -164,6 +165,7 @@ public class UserSettings extends SettingsPreferenceFragment private final Object mUserLock = new Object(); private UserManager mUserManager; private static SparseArray sDarkDefaultUserBitmapCache = new SparseArray<>(); + private static Bitmap sRemoveGuestBitmap = null; private MultiUserSwitchBarController mSwitchBarController; private EditUserInfoController mEditUserInfoController = @@ -177,6 +179,7 @@ public class UserSettings extends SettingsPreferenceFragment // A place to cache the generated default avatar private Drawable mDefaultIconDrawable; + private Drawable mRemoveGuestIconDrawable; // TODO: Replace current Handler solution to something that doesn't leak memory and works // TODO: during a configuration change @@ -383,8 +386,8 @@ public class UserSettings extends SettingsPreferenceFragment private void loadProfile() { if (isCurrentUserGuest()) { // No need to load profile information - mMePreference.setIcon(getEncircledDefaultIcon()); - mMePreference.setTitle(R.string.user_exit_guest_title); + mMePreference.setIcon(getEncircledRemoveGuestIcon()); + mMePreference.setTitle(R.string.user_clear_guest_menu); mMePreference.setSelectable(true); // removing a guest will result in switching back to the admin user mMePreference.setEnabled(canSwitchUserNow()); @@ -899,7 +902,7 @@ public class UserSettings extends SettingsPreferenceFragment } else { setPhotoId(pref, user); } - } else { + } else if (!user.isGuest()) { // Icon not available yet, print a placeholder pref.setIcon(getEncircledDefaultIcon()); } @@ -1044,6 +1047,14 @@ public class UserSettings extends SettingsPreferenceFragment return mDefaultIconDrawable; } + private Drawable getEncircledRemoveGuestIcon() { + if (mRemoveGuestIconDrawable == null) { + mRemoveGuestIconDrawable = encircle( + getRemoveGuestIconAsBitmap(getContext().getResources())); + } + return mRemoveGuestIconDrawable; + } + private void setPhotoId(Preference pref, UserInfo user) { Bitmap bitmap = mUserIcons.get(user.id); if (bitmap != null) { @@ -1122,6 +1133,23 @@ public class UserSettings extends SettingsPreferenceFragment 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} * diff --git a/tests/robotests/src/com/android/settings/users/UserDetailsSettingsTest.java b/tests/robotests/src/com/android/settings/users/UserDetailsSettingsTest.java index 90c917242e3..50ddd2a6f12 100644 --- a/tests/robotests/src/com/android/settings/users/UserDetailsSettingsTest.java +++ b/tests/robotests/src/com/android/settings/users/UserDetailsSettingsTest.java @@ -363,7 +363,7 @@ public class UserDetailsSettingsTest { mFragment.initialize(mActivity, mArguments); 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); }