loadUnbadgedItemIcon doesn't crash from getUserIcon

AppicationPackageManager.loadUnbadgedItemIcon would call
UserManager.getUserIcon if the icon was supposed to represent
switching to another the parent user (from a work profile).
However, that call requires extra permissions which may not be
available, which would cause a crash. The work profile doesn't
generally have permission to see the parent's icon, so rather
than showing the actual icon, a generic user icon is shown instead.

Bug: 134177607
Test: Manual confirmation: create a work profile and try to share a
picture (from Photos) to the personal profile.

Change-Id: Id79ca50b8e0a26593addbacf1a0ea709a2bc4da2
This commit is contained in:
Bookatz
2019-06-04 09:14:42 -07:00
committed by Adam Bookatz
parent 2aa255a746
commit 9313af68c2
2 changed files with 6 additions and 7 deletions

View File

@@ -2754,12 +2754,11 @@ public class ApplicationPackageManager extends PackageManager {
public Drawable loadUnbadgedItemIcon(@NonNull PackageItemInfo itemInfo,
@Nullable ApplicationInfo appInfo) {
if (itemInfo.showUserIcon != UserHandle.USER_NULL) {
Bitmap bitmap = getUserManager().getUserIcon(itemInfo.showUserIcon);
if (bitmap == null) {
return UserIcons.getDefaultUserIcon(
mContext.getResources(), itemInfo.showUserIcon, /* light= */ false);
}
return new BitmapDrawable(bitmap);
// Indicates itemInfo is for a different user (e.g. a profile's parent), so use a
// generic user icon (users generally lack permission to view each other's actual icons)
int targetUserId = itemInfo.showUserIcon;
return UserIcons.getDefaultUserIcon(
mContext.getResources(), targetUserId, /* light= */ false);
}
Drawable dr = null;
if (itemInfo.packageName != null) {

View File

@@ -159,7 +159,7 @@ public class PackageItemInfo {
public Bundle metaData;
/**
* If different of UserHandle.USER_NULL, The icon of this item will be the one of that user.
* If different of UserHandle.USER_NULL, The icon of this item will represent that user.
* @hide
*/
public int showUserIcon;