summaryrefslogtreecommitdiffstats
path: root/core/java/android/content
diff options
context:
space:
mode:
authorRicky Wai <rickywai@google.com>2015-05-12 09:35:59 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-05-12 09:36:02 +0000
commit227d42db5bd1bd16b6101f799052c10f4f493647 (patch)
treed0c336e8011cda387ffae4924bdc80bdc02fdaaf /core/java/android/content
parent9fc8bb63d8c15ecfcd3a72a685eaec6c8ec0aa6e (diff)
parent1281b1809f0c3d4e0dfe185f7974ac930e260311 (diff)
downloadframeworks_base-227d42db5bd1bd16b6101f799052c10f4f493647.zip
frameworks_base-227d42db5bd1bd16b6101f799052c10f4f493647.tar.gz
frameworks_base-227d42db5bd1bd16b6101f799052c10f4f493647.tar.bz2
Merge "Fix LauncherActivityInfo.getBadgedIcon() cannot get high density icon" into mnc-dev
Diffstat (limited to 'core/java/android/content')
-rw-r--r--core/java/android/content/pm/LauncherActivityInfo.java55
-rw-r--r--core/java/android/content/pm/ResolveInfo.java20
2 files changed, 59 insertions, 16 deletions
diff --git a/core/java/android/content/pm/LauncherActivityInfo.java b/core/java/android/content/pm/LauncherActivityInfo.java
index 87b97aa..6827d7a 100644
--- a/core/java/android/content/pm/LauncherActivityInfo.java
+++ b/core/java/android/content/pm/LauncherActivityInfo.java
@@ -103,20 +103,30 @@ public class LauncherActivityInfo {
* density DPI values from {@link DisplayMetrics}.
* @see #getBadgedIcon(int)
* @see DisplayMetrics
- * @return The drawable associated with the activity
+ * @return The drawable associated with the activity.
*/
public Drawable getIcon(int density) {
- int iconRes = mResolveInfo.getIconResource();
- Resources resources = null;
- Drawable icon = null;
- // Get the preferred density icon from the app's resources
- if (density != 0 && iconRes != 0) {
- try {
- resources = mPm.getResourcesForApplication(mActivityInfo.applicationInfo);
- icon = resources.getDrawableForDensity(iconRes, density);
- } catch (NameNotFoundException | Resources.NotFoundException exc) {
- }
+ final int iconRes = mResolveInfo.getIconResource();
+ Drawable icon = getDrawableForDensity(iconRes, density);
+ // Get the default density icon
+ if (icon == null) {
+ icon = mResolveInfo.loadIcon(mPm);
}
+ return icon;
+ }
+
+ /**
+ * Returns the icon for this activity, without any badging for the profile.
+ * This function can get the icon no matter the icon needs to be badged or not.
+ * @param density The preferred density of the icon, zero for default density. Use
+ * density DPI values from {@link DisplayMetrics}.
+ * @see #getBadgedIcon(int)
+ * @see DisplayMetrics
+ * @return The drawable associated with the activity.
+ */
+ private Drawable getOriginalIcon(int density) {
+ final int iconRes = mResolveInfo.getIconResourceInternal();
+ Drawable icon = getDrawableForDensity(iconRes, density);
// Get the default density icon
if (icon == null) {
icon = mResolveInfo.loadIcon(mPm);
@@ -125,6 +135,27 @@ public class LauncherActivityInfo {
}
/**
+ * Returns the drawable for this activity, without any badging for the profile.
+ * @param resource id of the drawable.
+ * @param density The preferred density of the icon, zero for default density. Use
+ * density DPI values from {@link DisplayMetrics}.
+ * @see DisplayMetrics
+ * @return The drawable associated with the resource id.
+ */
+ private Drawable getDrawableForDensity(int iconRes, int density) {
+ // Get the preferred density icon from the app's resources
+ if (density != 0 && iconRes != 0) {
+ try {
+ final Resources resources
+ = mPm.getResourcesForApplication(mActivityInfo.applicationInfo);
+ return resources.getDrawableForDensity(iconRes, density);
+ } catch (NameNotFoundException | Resources.NotFoundException exc) {
+ }
+ }
+ return null;
+ }
+
+ /**
* Returns the application flags from the ApplicationInfo of the activity.
*
* @return Application flags
@@ -167,7 +198,7 @@ public class LauncherActivityInfo {
* @return A badged icon for the activity.
*/
public Drawable getBadgedIcon(int density) {
- Drawable originalIcon = getIcon(density);
+ Drawable originalIcon = getOriginalIcon(density);
if (originalIcon instanceof BitmapDrawable) {
return mPm.getUserBadgedIcon(originalIcon, mUser);
diff --git a/core/java/android/content/pm/ResolveInfo.java b/core/java/android/content/pm/ResolveInfo.java
index 05f5e90..649fdb4 100644
--- a/core/java/android/content/pm/ResolveInfo.java
+++ b/core/java/android/content/pm/ResolveInfo.java
@@ -221,16 +221,16 @@ public class ResolveInfo implements Parcelable {
}
return ci.loadIcon(pm);
}
-
+
/**
* Return the icon resource identifier to use for this match. If the
* match defines an icon, that is used; else if the activity defines
* an icon, that is used; else, the application icon is used.
- *
+ * This function does not check noResourceId flag.
+ *
* @return The icon associated with this match.
*/
- public final int getIconResource() {
- if (noResourceId) return 0;
+ final int getIconResourceInternal() {
if (icon != 0) return icon;
final ComponentInfo ci = getComponentInfo();
if (ci != null) {
@@ -239,6 +239,18 @@ public class ResolveInfo implements Parcelable {
return 0;
}
+ /**
+ * Return the icon resource identifier to use for this match. If the
+ * match defines an icon, that is used; else if the activity defines
+ * an icon, that is used; else, the application icon is used.
+ *
+ * @return The icon associated with this match.
+ */
+ public final int getIconResource() {
+ if (noResourceId) return 0;
+ return getIconResourceInternal();
+ }
+
public void dump(Printer pw, String prefix) {
if (filter != null) {
pw.println(prefix + "Filter:");