summaryrefslogtreecommitdiffstats
path: root/graphics/java
diff options
context:
space:
mode:
authorAlan Viverette <alanv@google.com>2015-02-02 18:01:03 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-02-02 18:01:04 +0000
commite300553a01160c093c44c1f428117360714e513f (patch)
treef762d0d6b4e081e0cafb293d4525d424890ebd64 /graphics/java
parent07c40dbe9d9f5836add6c17690f286d9860bd581 (diff)
parentbc43ac2094a833623e99c38cd3d0cedfef61260e (diff)
downloadframeworks_base-e300553a01160c093c44c1f428117360714e513f.zip
frameworks_base-e300553a01160c093c44c1f428117360714e513f.tar.gz
frameworks_base-e300553a01160c093c44c1f428117360714e513f.tar.bz2
Merge "Ensure InsetDrawable propagates state and callback on set drawable"
Diffstat (limited to 'graphics/java')
-rw-r--r--graphics/java/android/graphics/drawable/InsetDrawable.java30
1 files changed, 24 insertions, 6 deletions
diff --git a/graphics/java/android/graphics/drawable/InsetDrawable.java b/graphics/java/android/graphics/drawable/InsetDrawable.java
index 532ee5d..50a6df4 100644
--- a/graphics/java/android/graphics/drawable/InsetDrawable.java
+++ b/graphics/java/android/graphics/drawable/InsetDrawable.java
@@ -119,6 +119,23 @@ public class InsetDrawable extends Drawable implements Drawable.Callback {
a.recycle();
}
+ private void setDrawable(Drawable dr) {
+ if (mDrawable != null) {
+ mDrawable.setCallback(null);
+ }
+
+ mDrawable = dr;
+
+ if (dr != null) {
+ dr.setCallback(this);
+ dr.setVisible(isVisible(), true);
+ dr.setState(getState());
+ dr.setLevel(getLevel());
+ dr.setBounds(getBounds());
+ dr.setLayoutDirection(getLayoutDirection());
+ }
+ }
+
private void inflateChildElements(Resources r, XmlPullParser parser, AttributeSet attrs,
Theme theme) throws XmlPullParserException, IOException {
// Load inner XML elements.
@@ -133,9 +150,10 @@ public class InsetDrawable extends Drawable implements Drawable.Callback {
}
final Drawable dr = Drawable.createFromXmlInner(r, parser, attrs, theme);
- mState.mDrawableState = dr.getConstantState();
- mDrawable = dr;
- dr.setCallback(this);
+ if (dr != null) {
+ mState.mDrawableState = dr.getConstantState();
+ setDrawable(dr);
+ }
}
}
@@ -166,8 +184,7 @@ public class InsetDrawable extends Drawable implements Drawable.Callback {
final Drawable dr = a.getDrawable(attr);
if (dr != null) {
mState.mDrawableState = dr.getConstantState();
- mDrawable = dr;
- dr.setCallback(this);
+ setDrawable(dr);
}
break;
case R.styleable.InsetDrawable_inset:
@@ -510,7 +527,8 @@ public class InsetDrawable extends Drawable implements Drawable.Callback {
*/
private void updateLocalState(Resources res) {
if (mState.mDrawableState != null) {
- mDrawable = mState.mDrawableState.newDrawable(res);
+ final Drawable dr = mState.mDrawableState.newDrawable(res);
+ setDrawable(dr);
}
}
}