From b2e5e71840446b6f85607df7cf52572a2778367a Mon Sep 17 00:00:00 2001 From: Mike Digman Date: Fri, 19 Apr 2019 15:49:10 -0700 Subject: [PATCH] Sharesheet - make work profile badges render Iconloaderlib has launcher specific logic for pulling and rendering work profile badges. Alter to work properly with Sharesheet. Currently, work profile badges aren't shown on top of app targets. Fixes: 126568207 Test: manual, visual inspection Change-Id: If247d0077e8d1fd6256ff6aceb155e245a031001 --- .../com/android/internal/app/ChooserActivity.java | 3 ++- .../com/android/internal/app/ResolverActivity.java | 11 ++++++----- .../com/android/internal/app/SimpleIconFactory.java | 4 ++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java index be66de22cdcf3..e6cff8039909b 100644 --- a/core/java/com/android/internal/app/ChooserActivity.java +++ b/core/java/com/android/internal/app/ChooserActivity.java @@ -1802,7 +1802,8 @@ public class ChooserActivity extends ResolverActivity { if (info == null) return null; // Now fetch app icon and raster with no badging even in work profile - Bitmap appIcon = makePresentationGetter(info).getIconBitmap(); + Bitmap appIcon = makePresentationGetter(info).getIconBitmap( + UserHandle.getUserHandleForUid(UserHandle.myUserId())); // Raster target drawable with appIcon as a badge SimpleIconFactory sif = SimpleIconFactory.obtain(ChooserActivity.this); diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java index 2849f57d6fc56..5e4918d475b83 100644 --- a/core/java/com/android/internal/app/ResolverActivity.java +++ b/core/java/com/android/internal/app/ResolverActivity.java @@ -551,11 +551,11 @@ public class ResolverActivity extends Activity { mAi.packageName); } - public Drawable getIcon() { - return new BitmapDrawable(mCtx.getResources(), getIconBitmap()); + public Drawable getIcon(UserHandle userHandle) { + return new BitmapDrawable(mCtx.getResources(), getIconBitmap(userHandle)); } - public Bitmap getIconBitmap() { + public Bitmap getIconBitmap(UserHandle userHandle) { Drawable dr = null; if (mHasSubstitutePermission) { dr = getIconSubstituteInternal(); @@ -576,7 +576,7 @@ public class ResolverActivity extends Activity { } SimpleIconFactory sif = SimpleIconFactory.obtain(mCtx); - Bitmap icon = sif.createUserBadgedIconBitmap(dr, Process.myUserHandle()); + Bitmap icon = sif.createUserBadgedIconBitmap(dr, userHandle); sif.recycle(); return icon; @@ -699,7 +699,8 @@ public class ResolverActivity extends Activity { } Drawable loadIconForResolveInfo(ResolveInfo ri) { - return makePresentationGetter(ri).getIcon(); + // Load icons based on the current process. If in work profile icons should be badged. + return makePresentationGetter(ri).getIcon(Process.myUserHandle()); } @Override diff --git a/core/java/com/android/internal/app/SimpleIconFactory.java b/core/java/com/android/internal/app/SimpleIconFactory.java index 2484109f8520e..7a4e76fa8c173 100644 --- a/core/java/com/android/internal/app/SimpleIconFactory.java +++ b/core/java/com/android/internal/app/SimpleIconFactory.java @@ -43,7 +43,6 @@ import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.DrawableWrapper; -import android.os.Process; import android.os.UserHandle; import android.util.AttributeSet; import android.util.Pools.SynchronizedPool; @@ -161,6 +160,7 @@ public class SimpleIconFactory { /** * Creates bitmap using the source drawable and various parameters. * The bitmap is visually normalized with other icons and has enough spacing to add shadow. + * Note: this method has been modified from iconloaderlib to remove a profile diff check. * * @param icon source of the icon associated with a user that has no badge, * likely user 0 @@ -186,7 +186,7 @@ public class SimpleIconFactory { } final Bitmap result; - if (user != null && !Process.myUserHandle().equals(user)) { + if (user != null /* if modification from iconloaderlib */) { BitmapDrawable drawable = new FixedSizeBitmapDrawable(bitmap); Drawable badged = mPm.getUserBadgedIcon(drawable, user); if (badged instanceof BitmapDrawable) {