am 42b678b3: am fa173e0c: am d72901f0: Merge "Update drawable container constant state following clone" into lmp-mr1-dev

* commit '42b678b3d7c10d6986aea82ec72e1b36f243972a':
  Update drawable container constant state following clone
diff --git a/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java b/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java
index 5fc40f2..4af5946 100644
--- a/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java
+++ b/graphics/java/android/graphics/drawable/AnimatedStateListDrawable.java
@@ -651,6 +651,7 @@
         }
     }
 
+    @Override
     protected void setConstantState(@NonNull DrawableContainerState state) {
         super.setConstantState(state);
 
diff --git a/graphics/java/android/graphics/drawable/AnimationDrawable.java b/graphics/java/android/graphics/drawable/AnimationDrawable.java
index 28ada82..9eb0251 100644
--- a/graphics/java/android/graphics/drawable/AnimationDrawable.java
+++ b/graphics/java/android/graphics/drawable/AnimationDrawable.java
@@ -23,6 +23,7 @@
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
+import android.annotation.NonNull;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.content.res.Resources.Theme;
@@ -81,7 +82,7 @@
  * @attr ref android.R.styleable#AnimationDrawableItem_drawable
  */
 public class AnimationDrawable extends DrawableContainer implements Runnable, Animatable {
-    private final AnimationState mAnimationState;
+    private AnimationState mAnimationState;
 
     /** The current frame, may be -1 when not animating. */
     private int mCurFrame = -1;
@@ -408,9 +409,17 @@
         }
     }
 
+    @Override
+    protected void setConstantState(@NonNull DrawableContainerState state) {
+        super.setConstantState(state);
+
+        if (state instanceof AnimationState) {
+            mAnimationState = (AnimationState) state;
+        }
+    }
+
     private AnimationDrawable(AnimationState state, Resources res) {
-        AnimationState as = new AnimationState(state, this, res);
-        mAnimationState = as;
+        final AnimationState as = new AnimationState(state, this, res);
         setConstantState(as);
         if (state != null) {
             setFrame(0, true, false);
diff --git a/graphics/java/android/graphics/drawable/DrawableContainer.java b/graphics/java/android/graphics/drawable/DrawableContainer.java
index 6d43a0c..68fd296 100644
--- a/graphics/java/android/graphics/drawable/DrawableContainer.java
+++ b/graphics/java/android/graphics/drawable/DrawableContainer.java
@@ -567,8 +567,9 @@
     @Override
     public Drawable mutate() {
         if (!mMutated && super.mutate() == this) {
-            mDrawableContainerState = cloneConstantState();
-            mDrawableContainerState.mutate();
+            final DrawableContainerState clone = cloneConstantState();
+            clone.mutate();
+            setConstantState(clone);
             mMutated = true;
         }
         return this;
diff --git a/graphics/java/android/graphics/drawable/LevelListDrawable.java b/graphics/java/android/graphics/drawable/LevelListDrawable.java
index dc41216..b01c643 100644
--- a/graphics/java/android/graphics/drawable/LevelListDrawable.java
+++ b/graphics/java/android/graphics/drawable/LevelListDrawable.java
@@ -21,6 +21,7 @@
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
+import android.annotation.NonNull;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.content.res.Resources.Theme;
@@ -57,7 +58,7 @@
  * @attr ref android.R.styleable#LevelListDrawableItem_drawable
  */
 public class LevelListDrawable extends DrawableContainer {
-    private final LevelListState mLevelListState;
+    private LevelListState mLevelListState;
     private boolean mMutated;
 
     public LevelListDrawable() {
@@ -227,9 +228,17 @@
         }
     }
 
+    @Override
+    protected void setConstantState(@NonNull DrawableContainerState state) {
+        super.setConstantState(state);
+
+        if (state instanceof LevelListState) {
+            mLevelListState = (LevelListState) state;
+        }
+    }
+
     private LevelListDrawable(LevelListState state, Resources res) {
-        LevelListState as = new LevelListState(state, this, res);
-        mLevelListState = as;
+        final LevelListState as = new LevelListState(state, this, res);
         setConstantState(as);
         onLevelChange(getLevel());
     }