From 713a5cdb5347afa6556385f81ba972e1773f8e8f Mon Sep 17 00:00:00 2001 From: Alan Viverette Date: Wed, 16 Dec 2015 15:46:32 -0500 Subject: [PATCH] Don't call public non-final getResources() from getAssets() Refactors to getResourcesInternal() and calls that from both methods. Adds documentation on Context.getResources() and getAssets() that the instances returned should be consistent with each other. Bug: 26228895 Change-Id: I41b09f1e9a3a0315bcdf1c08a7b431a9a697bb6f --- core/java/android/content/Context.java | 24 +++++++++++++++++-- core/java/android/content/ContextWrapper.java | 3 +-- .../android/view/ContextThemeWrapper.java | 7 ++++-- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index 38a4475064af6..67bdad576af3a 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -326,10 +326,30 @@ public abstract class Context { */ public static final int BIND_NOT_VISIBLE = 0x40000000; - /** Return an AssetManager instance for your application's package. */ + /** + * Returns an AssetManager instance for the application's package. + *

+ * Note: Implementations of this method should return + * an AssetManager instance that is consistent with the Resources instance + * returned by {@link #getResources()}. For example, they should share the + * same {@link Configuration} object. + * + * @return an AssetManager instance for the application's package + * @see #getResources() + */ public abstract AssetManager getAssets(); - /** Return a Resources instance for your application's package. */ + /** + * Returns a Resources instance for the application's package. + *

+ * Note: Implementations of this method should return + * a Resources instance that is consistent with the AssetManager instance + * returned by {@link #getAssets()}. For example, they should share the + * same {@link Configuration} object. + * + * @return a Resources instance for the application's package + * @see #getAssets() + */ public abstract Resources getResources(); /** Return PackageManager instance to find global package information. */ diff --git a/core/java/android/content/ContextWrapper.java b/core/java/android/content/ContextWrapper.java index 1a3d262f6b56c..c99ddc8fbe118 100644 --- a/core/java/android/content/ContextWrapper.java +++ b/core/java/android/content/ContextWrapper.java @@ -82,8 +82,7 @@ public class ContextWrapper extends Context { } @Override - public Resources getResources() - { + public Resources getResources() { return mBase.getResources(); } diff --git a/core/java/android/view/ContextThemeWrapper.java b/core/java/android/view/ContextThemeWrapper.java index ea0873d6fb1be..4888877cb28be 100644 --- a/core/java/android/view/ContextThemeWrapper.java +++ b/core/java/android/view/ContextThemeWrapper.java @@ -104,11 +104,15 @@ public class ContextThemeWrapper extends ContextWrapper { @Override public AssetManager getAssets() { // Ensure we're returning assets with the correct configuration. - return getResources().getAssets(); + return getResourcesInternal().getAssets(); } @Override public Resources getResources() { + return getResourcesInternal(); + } + + private Resources getResourcesInternal() { if (mResources == null) { if (mOverrideConfiguration == null) { mResources = super.getResources(); @@ -117,7 +121,6 @@ public class ContextThemeWrapper extends ContextWrapper { mResources = resContext.getResources(); } } - return mResources; }