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