From dc25d25333d3fac96dccfb9bd31d2474d6bc2d78 Mon Sep 17 00:00:00 2001 From: Fabrice Di Meglio Date: Tue, 9 Apr 2013 18:04:29 -0700 Subject: [PATCH] More fix for bug #8159072 Spinner widget should be RTL'ized - fix DrawableContainerState.getChangingConfigurations() to take care about its children - make Resources.verifyPreloadConfig() return false when the changing configuration contains layout direction bits (this is when a Drawable is having different version for LTR and RTL layout directions) - use constant state instead of the resource type value for checking if we can preload the drawable - fix typo Change-Id: Idd64caf0fbe0f5cfd5ffe09343e84bafa9446ea5 --- .../java/android/content/pm/ActivityInfo.java | 2 +- core/java/android/content/res/Resources.java | 19 +++++++++++-------- .../graphics/drawable/DrawableContainer.java | 2 +- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java index 8f3b62d8f21cf..712a3a4b1b66e 100644 --- a/core/java/android/content/pm/ActivityInfo.java +++ b/core/java/android/content/pm/ActivityInfo.java @@ -398,7 +398,7 @@ public class ActivityInfo extends ComponentInfo * Bit in {@link #configChanges} that indicates that the activity * can itself handle changes to the font scaling factor. Set from the * {@link android.R.attr#configChanges} attribute. This is - * not a core resource configutation, but a higher-level value, so its + * not a core resource configuration, but a higher-level value, so its * constant starts at the high bits. */ public static final int CONFIG_FONT_SCALE = 0x40000000; diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java index 0152615904879..9338f3d8b0c96 100644 --- a/core/java/android/content/res/Resources.java +++ b/core/java/android/content/res/Resources.java @@ -1977,17 +1977,20 @@ public class Resources { } } - private boolean verifyPreloadConfig(TypedValue value, String name) { - if ((value.changingConfigurations&~(ActivityInfo.CONFIG_FONT_SCALE - | ActivityInfo.CONFIG_DENSITY)) != 0) { + static private final int VARYING_CONFIGS = ActivityInfo.activityInfoConfigToNative( + ActivityInfo.CONFIG_LAYOUT_DIRECTION); + + private boolean verifyPreloadConfig(int changingConfigurations, int resourceId, String name) { + if (((changingConfigurations&~(ActivityInfo.CONFIG_FONT_SCALE | + ActivityInfo.CONFIG_DENSITY)) & VARYING_CONFIGS) != 0) { String resName; try { - resName = getResourceName(value.resourceId); + resName = getResourceName(resourceId); } catch (NotFoundException e) { resName = "?"; } Log.w(TAG, "Preloaded " + name + " resource #0x" - + Integer.toHexString(value.resourceId) + + Integer.toHexString(resourceId) + " (" + resName + ") that varies with configuration!!"); return false; } @@ -2090,7 +2093,7 @@ public class Resources { cs = dr.getConstantState(); if (cs != null) { if (mPreloading) { - if (verifyPreloadConfig(value, "drawable")) { + if (verifyPreloadConfig(cs.getChangingConfigurations(), value.resourceId, "drawable")) { if (isColorDrawable) { sPreloadedColorDrawables.put(key, cs); } else { @@ -2160,7 +2163,7 @@ public class Resources { csl = ColorStateList.valueOf(value.data); if (mPreloading) { - if (verifyPreloadConfig(value, "color")) { + if (verifyPreloadConfig(value.changingConfigurations, value.resourceId, "color")) { sPreloadedColorStateLists.put(key, csl); } } @@ -2206,7 +2209,7 @@ public class Resources { if (csl != null) { if (mPreloading) { - if (verifyPreloadConfig(value, "color")) { + if (verifyPreloadConfig(value.changingConfigurations, value.resourceId, "color")) { sPreloadedColorStateLists.put(key, csl); } } else { diff --git a/graphics/java/android/graphics/drawable/DrawableContainer.java b/graphics/java/android/graphics/drawable/DrawableContainer.java index a0c97012e3978..8a4d598a533c6 100644 --- a/graphics/java/android/graphics/drawable/DrawableContainer.java +++ b/graphics/java/android/graphics/drawable/DrawableContainer.java @@ -512,7 +512,7 @@ public class DrawableContainer extends Drawable implements Drawable.Callback { @Override public int getChangingConfigurations() { - return mChangingConfigurations; + return mChangingConfigurations | mChildrenChangingConfigurations; } public final int addChild(Drawable dr) {