From 02cd9f91a6bd6d06d6d1237f8b978a0ab0b8ea32 Mon Sep 17 00:00:00 2001 From: Dan Sandler Date: Thu, 14 May 2015 11:44:32 -0400 Subject: [PATCH] Use Context instead of Resources in Icon.createWithResource. This works around situations where corrupted packages cause Resources.getResourcePackageName to return something that does't actually work. Bug: 21144636 Change-Id: I271518599a8eb89d493f1ceda6cb2e47fb38a4ff --- api/current.txt | 2 +- api/system-current.txt | 2 +- graphics/java/android/graphics/drawable/Icon.java | 15 +++++++++++++-- .../src/android/graphics/drawable/IconTest.java | 5 ++--- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/api/current.txt b/api/current.txt index dcce5f43f1889..8833f859ca21d 100644 --- a/api/current.txt +++ b/api/current.txt @@ -12405,7 +12405,7 @@ package android.graphics.drawable { method public static android.graphics.drawable.Icon createWithContentUri(android.net.Uri); method public static android.graphics.drawable.Icon createWithData(byte[], int, int); method public static android.graphics.drawable.Icon createWithFilePath(java.lang.String); - method public static android.graphics.drawable.Icon createWithResource(android.content.res.Resources, int); + method public static android.graphics.drawable.Icon createWithResource(android.content.Context, int); method public static android.graphics.drawable.Icon createWithResource(java.lang.String, int); method public int describeContents(); method public android.graphics.drawable.Drawable loadDrawable(android.content.Context); diff --git a/api/system-current.txt b/api/system-current.txt index d0ce53a0b5c9c..88b3096b3c86e 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -12714,7 +12714,7 @@ package android.graphics.drawable { method public static android.graphics.drawable.Icon createWithContentUri(android.net.Uri); method public static android.graphics.drawable.Icon createWithData(byte[], int, int); method public static android.graphics.drawable.Icon createWithFilePath(java.lang.String); - method public static android.graphics.drawable.Icon createWithResource(android.content.res.Resources, int); + method public static android.graphics.drawable.Icon createWithResource(android.content.Context, int); method public static android.graphics.drawable.Icon createWithResource(java.lang.String, int); method public int describeContents(); method public android.graphics.drawable.Drawable loadDrawable(android.content.Context); diff --git a/graphics/java/android/graphics/drawable/Icon.java b/graphics/java/android/graphics/drawable/Icon.java index 668a14a41605c..140bbffaf3bc5 100644 --- a/graphics/java/android/graphics/drawable/Icon.java +++ b/graphics/java/android/graphics/drawable/Icon.java @@ -352,15 +352,26 @@ public final class Icon implements Parcelable { /** * Create an Icon pointing to a drawable resource. - * @param res Resources for a package containing the resource in question + * @param context The context for the application whose resources should be used to resolve the + * given resource ID. * @param resId ID of the drawable resource */ + public static Icon createWithResource(Context context, @DrawableRes int resId) { + final Icon rep = new Icon(TYPE_RESOURCE); + rep.mInt1 = resId; + rep.mString1 = context.getPackageName(); + return rep; + } + + /** + * Version of createWithResource that takes Resources. Do not use. + * @hide + */ public static Icon createWithResource(Resources res, @DrawableRes int resId) { if (res == null) { throw new IllegalArgumentException("Resource must not be null."); } final Icon rep = new Icon(TYPE_RESOURCE); - rep.mObj1 = res; rep.mInt1 = resId; rep.mString1 = res.getResourcePackageName(resId); return rep; diff --git a/graphics/tests/graphicstests/src/android/graphics/drawable/IconTest.java b/graphics/tests/graphicstests/src/android/graphics/drawable/IconTest.java index a7f8023f549b6..a214b9e4ecbef 100644 --- a/graphics/tests/graphicstests/src/android/graphics/drawable/IconTest.java +++ b/graphics/tests/graphicstests/src/android/graphics/drawable/IconTest.java @@ -112,8 +112,7 @@ public class IconTest extends AndroidTestCase { final Bitmap res1 = ((BitmapDrawable) getContext().getDrawable(R.drawable.landscape)) .getBitmap(); - final Icon im1 = Icon.createWithResource(getContext().getResources(), - R.drawable.landscape); + final Icon im1 = Icon.createWithResource(getContext(), R.drawable.landscape); final Drawable draw1 = im1.loadDrawable(mContext); final Bitmap test1 = Bitmap.createBitmap(draw1.getIntrinsicWidth(), draw1.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); @@ -223,7 +222,7 @@ public class IconTest extends AndroidTestCase { imgs.add(bit1); final Icon data1 = Icon.createWithData(pngdata, 0, pngdata.length); imgs.add(data1); - final Icon res1 = Icon.createWithResource(getContext().getResources(), R.drawable.landscape); + final Icon res1 = Icon.createWithResource(getContext(), R.drawable.landscape); imgs.add(res1); ArrayList test = new ArrayList<>();