Set user icon to default when updating profile without photo

If the user photo was deleted in the Myself contact, the change
was not reflected neither in Settings/Users nor in expanded
status bar. This was because the ProfileUpdateReceiver did not
handle the case where the updated image was null (deleted).
Fixed by assigning default user icon in UserManager if no photo
found in the profile update.

AOSP change: https://android-review.googlesource.com/#/c/153137

Bug: 28031914
Change-Id: I2f452f78dcf777414f50b133b1a9cee334bbd9a8
This commit is contained in:
Sudheer Shanka
2016-04-14 16:50:14 -07:00
parent 6a41da8e9a
commit 71caf698b4
2 changed files with 18 additions and 21 deletions

View File

@@ -336,24 +336,31 @@ public final class Utils extends com.android.settingslib.Utils {
} }
/* Used by UserSettings as well. Call this on a non-ui thread. */ /* Used by UserSettings as well. Call this on a non-ui thread. */
public static boolean copyMeProfilePhoto(Context context, UserInfo user) { public static void copyMeProfilePhoto(Context context, UserInfo user) {
Uri contactUri = Profile.CONTENT_URI; Uri contactUri = Profile.CONTENT_URI;
int userId = user != null ? user.id : UserHandle.myUserId();
InputStream avatarDataStream = Contacts.openContactPhotoInputStream( InputStream avatarDataStream = Contacts.openContactPhotoInputStream(
context.getContentResolver(), context.getContentResolver(),
contactUri, true); contactUri, true);
// If there's no profile photo, assign a default avatar // If there's no profile photo, assign a default avatar
if (avatarDataStream == null) { if (avatarDataStream == null) {
return false; assignDefaultPhoto(context, userId);
} } else {
int userId = user != null ? user.id : UserHandle.myUserId();
UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE); UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
Bitmap icon = BitmapFactory.decodeStream(avatarDataStream); Bitmap icon = BitmapFactory.decodeStream(avatarDataStream);
um.setUserIcon(userId, icon); um.setUserIcon(userId, icon);
}
try { try {
avatarDataStream.close(); avatarDataStream.close();
} catch (IOException ioe) { } } catch (IOException ioe) { }
return true; }
public static void assignDefaultPhoto(Context context, int userId) {
UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
Bitmap bitmap = getDefaultUserIconAsBitmap(userId);
um.setUserIcon(userId, bitmap);
} }
public static String getMeProfileName(Context context, boolean full) { public static String getMeProfileName(Context context, boolean full) {

View File

@@ -331,7 +331,8 @@ public class UserSettings extends SettingsPreferenceFragment
protected String doInBackground(Void... values) { protected String doInBackground(Void... values) {
UserInfo user = mUserManager.getUserInfo(UserHandle.myUserId()); UserInfo user = mUserManager.getUserInfo(UserHandle.myUserId());
if (user.iconPath == null || user.iconPath.equals("")) { if (user.iconPath == null || user.iconPath.equals("")) {
assignProfilePhoto(user); // Assign profile photo.
Utils.copyMeProfilePhoto(getActivity(), user);
} }
return user.name; return user.name;
} }
@@ -404,14 +405,14 @@ public class UserSettings extends SettingsPreferenceFragment
private UserInfo createRestrictedProfile() { private UserInfo createRestrictedProfile() {
UserInfo newUserInfo = mUserManager.createRestrictedProfile(mAddingUserName); UserInfo newUserInfo = mUserManager.createRestrictedProfile(mAddingUserName);
assignDefaultPhoto(newUserInfo); Utils.assignDefaultPhoto(getActivity(), newUserInfo.id);
return newUserInfo; return newUserInfo;
} }
private UserInfo createTrustedUser() { private UserInfo createTrustedUser() {
UserInfo newUserInfo = mUserManager.createUser(mAddingUserName, 0); UserInfo newUserInfo = mUserManager.createUser(mAddingUserName, 0);
if (newUserInfo != null) { if (newUserInfo != null) {
assignDefaultPhoto(newUserInfo); Utils.assignDefaultPhoto(getActivity(), newUserInfo.id);
} }
return newUserInfo; return newUserInfo;
} }
@@ -898,17 +899,6 @@ public class UserSettings extends SettingsPreferenceFragment
}.execute(missingIcons); }.execute(missingIcons);
} }
private void assignProfilePhoto(final UserInfo user) {
if (!Utils.copyMeProfilePhoto(getActivity(), user)) {
assignDefaultPhoto(user);
}
}
private void assignDefaultPhoto(UserInfo user) {
Bitmap bitmap = Utils.getDefaultUserIconAsBitmap(user.id);
mUserManager.setUserIcon(user.id, bitmap);
}
private Drawable getEncircledDefaultIcon() { private Drawable getEncircledDefaultIcon() {
if (mDefaultIconDrawable == null) { if (mDefaultIconDrawable == null) {
mDefaultIconDrawable = encircle(Utils.getDefaultUserIconAsBitmap(UserHandle.USER_NULL)); mDefaultIconDrawable = encircle(Utils.getDefaultUserIconAsBitmap(UserHandle.USER_NULL));