Returning badged icons for components of corporate apps.
So, corporate apps in disambiguation dialogs are badged.
And updating the way we show the icon of the personal space to this new design.
BUG: 14377051
Change-Id: Idc707773a64a8feb2d9d4df88c425d5100542636
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index cb48e58..e2f3c60 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -36,6 +36,7 @@
import android.content.pm.InstrumentationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageInstaller;
+import android.content.pm.PackageItemInfo;
import android.content.pm.PackageManager;
import android.content.pm.ParceledListSlice;
import android.content.pm.PermissionGroupInfo;
@@ -49,6 +50,7 @@
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Process;
@@ -69,6 +71,15 @@
private final static boolean DEBUG = false;
private final static boolean DEBUG_ICONS = false;
+ UserManager mUserManager;
+
+ UserManager getUserManager() {
+ if (mUserManager == null) {
+ mUserManager = UserManager.get(mContext);
+ }
+ return mUserManager;
+ }
+
@Override
public PackageInfo getPackageInfo(String packageName, int flags)
throws NameNotFoundException {
@@ -1500,10 +1511,16 @@
/**
* @hide
*/
- @Override
- public Bitmap getUserIcon(int userId) {
- UserManager um = UserManager.get(mContext);
- return um.getUserIcon(userId);
+ public Drawable loadItemIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo) {
+ if (itemInfo.showUserIcon != UserHandle.USER_NULL) {
+ return new BitmapDrawable(getUserManager().getUserIcon(itemInfo.showUserIcon));
+ }
+ Drawable dr = getDrawable(itemInfo.packageName, itemInfo.icon, appInfo);
+ if (dr != null) {
+ dr = getUserManager().getBadgedDrawableForUser(dr,
+ new UserHandle(mContext.getUserId()));
+ }
+ return dr;
}
private final ContextImpl mContext;
diff --git a/core/java/android/content/pm/PackageItemInfo.java b/core/java/android/content/pm/PackageItemInfo.java
index 58f1c84..9f79a89 100644
--- a/core/java/android/content/pm/PackageItemInfo.java
+++ b/core/java/android/content/pm/PackageItemInfo.java
@@ -21,6 +21,7 @@
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Parcel;
+import android.os.UserHandle;
import android.text.TextUtils;
import android.util.Printer;
@@ -86,8 +87,15 @@
* {@link PackageManager#GET_META_DATA} flag when requesting the info.
*/
public Bundle metaData;
-
+
+ /**
+ * If different of UserHandle.USER_NULL, The icon of this item will be the one of that user.
+ * @hide
+ */
+ public int showUserIcon;
+
public PackageItemInfo() {
+ showUserIcon = UserHandle.USER_NULL;
}
public PackageItemInfo(PackageItemInfo orig) {
@@ -101,6 +109,7 @@
banner = orig.banner;
logo = orig.logo;
metaData = orig.metaData;
+ showUserIcon = orig.showUserIcon;
}
/**
@@ -143,8 +152,8 @@
* such as the default activity icon.
*/
public Drawable loadIcon(PackageManager pm) {
- if (icon != 0) {
- Drawable dr = pm.getDrawable(packageName, icon, getApplicationInfo());
+ if (icon != 0 || showUserIcon != UserHandle.USER_NULL) {
+ Drawable dr = pm.loadItemIcon(this, getApplicationInfo());
if (dr != null) {
return dr;
}
@@ -288,6 +297,7 @@
dest.writeInt(logo);
dest.writeBundle(metaData);
dest.writeInt(banner);
+ dest.writeInt(showUserIcon);
}
protected PackageItemInfo(Parcel source) {
@@ -300,6 +310,7 @@
logo = source.readInt();
metaData = source.readBundle();
banner = source.readInt();
+ showUserIcon = source.readInt();
}
/**
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 9ac433f..d0b802c 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -3642,5 +3642,5 @@
/**
* @hide
*/
- public abstract Bitmap getUserIcon(int userId);
+ public abstract Drawable loadItemIcon(PackageItemInfo itemInfo, ApplicationInfo appInfo);
}
diff --git a/core/java/android/content/pm/ResolveInfo.java b/core/java/android/content/pm/ResolveInfo.java
index 1f9d60c..fe3aec9 100644
--- a/core/java/android/content/pm/ResolveInfo.java
+++ b/core/java/android/content/pm/ResolveInfo.java
@@ -19,8 +19,6 @@
import android.content.ComponentName;
import android.content.IntentFilter;
import android.graphics.drawable.Drawable;
-import android.graphics.Bitmap;
-import android.graphics.drawable.BitmapDrawable;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.UserHandle;
@@ -136,10 +134,9 @@
public int targetUserId;
/**
- * If true, then loadIcon will return the icon of the target user.
* @hide
*/
- public boolean showTargetUserIcon;
+ public boolean noResourceId;
/**
* @hide Target comes from system process?
@@ -217,10 +214,6 @@
return dr;
}
}
- if (showTargetUserIcon) {
- Bitmap bm = pm.getUserIcon(targetUserId);
- return new BitmapDrawable(bm);
- }
return ci.loadIcon(pm);
}
@@ -232,9 +225,10 @@
* @return The icon associated with this match.
*/
public final int getIconResource() {
+ if (noResourceId) return 0;
if (icon != 0) return icon;
final ComponentInfo ci = getComponentInfo();
- if (ci != null && !showTargetUserIcon) {
+ if (ci != null) {
return ci.getIconResource();
}
return 0;
@@ -312,9 +306,6 @@
sb.append(" targetUserId=");
sb.append(targetUserId);
}
- if (showTargetUserIcon) {
- sb.append(" [showTargetUserIcon]");
- }
sb.append('}');
return sb.toString();
}
@@ -351,8 +342,8 @@
dest.writeInt(icon);
dest.writeString(resolvePackageName);
dest.writeInt(targetUserId);
- dest.writeInt(showTargetUserIcon ? 1 : 0);
dest.writeInt(system ? 1 : 0);
+ dest.writeInt(noResourceId ? 1 : 0);
}
public static final Creator<ResolveInfo> CREATOR
@@ -396,8 +387,8 @@
icon = source.readInt();
resolvePackageName = source.readString();
targetUserId = source.readInt();
- showTargetUserIcon = source.readInt() != 0;
system = source.readInt() != 0;
+ noResourceId = source.readInt() != 0;
}
public static class DisplayNameComparator