From 9313af68c210949b860ba5234e9da7104f0143c8 Mon Sep 17 00:00:00 2001 From: Bookatz Date: Tue, 4 Jun 2019 09:14:42 -0700 Subject: [PATCH] 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 --- core/java/android/app/ApplicationPackageManager.java | 11 +++++------ core/java/android/content/pm/PackageItemInfo.java | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index 685eedc31303d..769fd487c2a99 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -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) { diff --git a/core/java/android/content/pm/PackageItemInfo.java b/core/java/android/content/pm/PackageItemInfo.java index 081c5ad78762a..d0ab8f713de83 100644 --- a/core/java/android/content/pm/PackageItemInfo.java +++ b/core/java/android/content/pm/PackageItemInfo.java @@ -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;