diff options
author | Alan Viverette <alanv@google.com> | 2015-02-02 18:01:03 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-02-02 18:01:04 +0000 |
commit | e300553a01160c093c44c1f428117360714e513f (patch) | |
tree | f762d0d6b4e081e0cafb293d4525d424890ebd64 /graphics/java | |
parent | 07c40dbe9d9f5836add6c17690f286d9860bd581 (diff) | |
parent | bc43ac2094a833623e99c38cd3d0cedfef61260e (diff) | |
download | frameworks_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.java | 30 |
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); } } } |