diff options
| author | 2016-03-10 10:30:08 -0500 | |
|---|---|---|
| committer | 2016-03-14 21:49:14 +0000 | |
| commit | 0b9295d06750dc6da032a2b2092e2c500c65393f (patch) | |
| tree | 1b023debcfcd48cf30a04bd5f6288075785cfbf7 | |
| parent | 513f77c8efe748c92354ff3f75fd4c19ec521cbc (diff) | |
Push flags from top-level TypedValue into ComplexColor changing configs
Previously a ComplexColor that was defined within varying configs would
not push the flags into its changing configs, so it wouldn't get reloaded.
This implementation follows the Drawable implementation, where the base
changing configs are stored in the superclass.
Bug: 27573177
Change-Id: I1da5ee6ab998d8296f8860c1a99d3e1399438543
| -rw-r--r-- | api/current.txt | 2 | ||||
| -rw-r--r-- | api/system-current.txt | 2 | ||||
| -rw-r--r-- | api/test-current.txt | 2 | ||||
| -rw-r--r-- | core/java/android/content/res/ColorStateList.java | 2 | ||||
| -rw-r--r-- | core/java/android/content/res/ComplexColor.java | 22 | ||||
| -rw-r--r-- | core/java/android/content/res/GradientColor.java | 13 | ||||
| -rw-r--r-- | core/java/android/content/res/ResourcesImpl.java | 6 |
7 files changed, 43 insertions, 6 deletions
diff --git a/api/current.txt b/api/current.txt index 9e0af763ef56..f5337725559d 100644 --- a/api/current.txt +++ b/api/current.txt @@ -10116,7 +10116,6 @@ package android.content.res { method public static deprecated android.content.res.ColorStateList createFromXml(android.content.res.Resources, org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; method public static android.content.res.ColorStateList createFromXml(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; method public int describeContents(); - method public int getChangingConfigurations(); method public int getColorForState(int[], int); method public int getDefaultColor(); method public boolean isOpaque(); @@ -10128,6 +10127,7 @@ package android.content.res { public abstract class ComplexColor { ctor public ComplexColor(); + method public int getChangingConfigurations(); method public abstract int getDefaultColor(); method public boolean isStateful(); } diff --git a/api/system-current.txt b/api/system-current.txt index 00cf3573c71e..5c8d6df81212 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -10511,7 +10511,6 @@ package android.content.res { method public static deprecated android.content.res.ColorStateList createFromXml(android.content.res.Resources, org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; method public static android.content.res.ColorStateList createFromXml(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; method public int describeContents(); - method public int getChangingConfigurations(); method public int getColorForState(int[], int); method public int getDefaultColor(); method public boolean isOpaque(); @@ -10523,6 +10522,7 @@ package android.content.res { public abstract class ComplexColor { ctor public ComplexColor(); + method public int getChangingConfigurations(); method public abstract int getDefaultColor(); method public boolean isStateful(); } diff --git a/api/test-current.txt b/api/test-current.txt index 9aed5e940d52..b71cf23d810d 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -10126,7 +10126,6 @@ package android.content.res { method public static deprecated android.content.res.ColorStateList createFromXml(android.content.res.Resources, org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; method public static android.content.res.ColorStateList createFromXml(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; method public int describeContents(); - method public int getChangingConfigurations(); method public int getColorForState(int[], int); method public int getDefaultColor(); method public boolean isOpaque(); @@ -10138,6 +10137,7 @@ package android.content.res { public abstract class ComplexColor { ctor public ComplexColor(); + method public int getChangingConfigurations(); method public abstract int getDefaultColor(); method public boolean isStateful(); } diff --git a/core/java/android/content/res/ColorStateList.java b/core/java/android/content/res/ColorStateList.java index 5bf2e3e5aa49..fb5bfd363ce2 100644 --- a/core/java/android/content/res/ColorStateList.java +++ b/core/java/android/content/res/ColorStateList.java @@ -442,7 +442,7 @@ public class ColorStateList extends ComplexColor implements Parcelable { * @see android.content.pm.ActivityInfo */ public @Config int getChangingConfigurations() { - return mChangingConfigurations; + return super.getChangingConfigurations() | mChangingConfigurations; } private int modulateColorAlpha(int baseColor, float alphaMod) { diff --git a/core/java/android/content/res/ComplexColor.java b/core/java/android/content/res/ComplexColor.java index d96ec62749f0..b297764629cf 100644 --- a/core/java/android/content/res/ComplexColor.java +++ b/core/java/android/content/res/ComplexColor.java @@ -25,6 +25,8 @@ import android.graphics.Color; * {@link android.content.res.ColorStateList} or {@link android.content.res.GradientColor} */ public abstract class ComplexColor { + private int mChangingConfigurations; + /** * @return {@code true} if this ComplexColor changes color based on state, {@code false} * otherwise. @@ -52,4 +54,24 @@ public abstract class ComplexColor { * @hide only for resource preloading */ public abstract ComplexColor obtainForTheme(Theme t); + + /** + * @hide only for resource preloading + */ + final void setBaseChangingConfigurations(int changingConfigurations) { + mChangingConfigurations = changingConfigurations; + } + + /** + * Returns a mask of the configuration parameters for which this color + * may change, requiring that it be re-created. + * + * @return a mask of the changing configuration parameters, as defined by + * {@link android.content.pm.ActivityInfo} + * + * @see android.content.pm.ActivityInfo + */ + public int getChangingConfigurations() { + return mChangingConfigurations; + } } diff --git a/core/java/android/content/res/GradientColor.java b/core/java/android/content/res/GradientColor.java index 329134094824..f29656abe6c3 100644 --- a/core/java/android/content/res/GradientColor.java +++ b/core/java/android/content/res/GradientColor.java @@ -542,6 +542,19 @@ public class GradientColor extends ComplexColor { return clone; } + /** + * Returns a mask of the configuration parameters for which this gradient + * may change, requiring that it be re-created. + * + * @return a mask of the changing configuration parameters, as defined by + * {@link android.content.pm.ActivityInfo} + * + * @see android.content.pm.ActivityInfo + */ + public int getChangingConfigurations() { + return super.getChangingConfigurations() | mChangingConfigurations; + } + private void applyTheme(Theme t) { if (mThemeAttrs != null) { applyRootAttrsTheme(t); diff --git a/core/java/android/content/res/ResourcesImpl.java b/core/java/android/content/res/ResourcesImpl.java index 90037f7b508c..a36401098e27 100644 --- a/core/java/android/content/res/ResourcesImpl.java +++ b/core/java/android/content/res/ResourcesImpl.java @@ -713,9 +713,11 @@ public class ResourcesImpl { } if (complexColor != null) { + complexColor.setBaseChangingConfigurations(value.changingConfigurations); + if (mPreloading) { - if (verifyPreloadConfig(value.changingConfigurations, 0, value.resourceId, - "color")) { + if (verifyPreloadConfig(complexColor.getChangingConfigurations(), + 0, value.resourceId, "color")) { sPreloadedComplexColors.put(key, complexColor.getConstantState()); } } else { |