summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndroid (Google) Code Review <android-gerrit@google.com>2009-06-26 19:22:38 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2009-06-26 19:22:38 -0700
commit05ebcb5172679a6c196cbf23d7174c04dd9f6ae0 (patch)
tree7abc8ba3a2d15836038efb2137dee21de1403244
parent2d9f31697fb5ece89c80cc66bdd3bd9caa9df9c3 (diff)
parentf4f7046183f0daedd17703fa16cf9026442bdaee (diff)
downloadframeworks_base-05ebcb5172679a6c196cbf23d7174c04dd9f6ae0.zip
frameworks_base-05ebcb5172679a6c196cbf23d7174c04dd9f6ae0.tar.gz
frameworks_base-05ebcb5172679a6c196cbf23d7174c04dd9f6ae0.tar.bz2
Merge change 5609 into donut
* changes: Update spinner's drawables. Clean up resources, pave the way for new animation.
-rw-r--r--core/java/android/app/SearchDialog.java11
-rw-r--r--core/res/res/drawable/progress.xml40
-rw-r--r--core/res/res/drawable/progress_circular_background.pngbin2044 -> 0 bytes
-rw-r--r--core/res/res/drawable/progress_circular_background_small.pngbin484 -> 0 bytes
-rw-r--r--core/res/res/drawable/progress_circular_indeterminate.pngbin2371 -> 0 bytes
-rw-r--r--core/res/res/drawable/progress_indeterminate.xml32
-rw-r--r--core/res/res/drawable/progress_particle.pngbin3058 -> 0 bytes
-rw-r--r--core/res/res/drawable/search_spinner.xml25
-rwxr-xr-xcore/res/res/drawable/search_spinner_anim10.pngbin529 -> 0 bytes
-rwxr-xr-xcore/res/res/drawable/search_spinner_anim11.pngbin525 -> 0 bytes
-rwxr-xr-xcore/res/res/drawable/search_spinner_anim12.pngbin527 -> 0 bytes
-rwxr-xr-xcore/res/res/drawable/search_spinner_anim2.pngbin525 -> 0 bytes
-rwxr-xr-xcore/res/res/drawable/search_spinner_anim3.pngbin522 -> 0 bytes
-rwxr-xr-xcore/res/res/drawable/search_spinner_anim4.pngbin519 -> 0 bytes
-rwxr-xr-xcore/res/res/drawable/search_spinner_anim5.pngbin521 -> 0 bytes
-rwxr-xr-xcore/res/res/drawable/search_spinner_anim6.pngbin509 -> 0 bytes
-rwxr-xr-xcore/res/res/drawable/search_spinner_anim7.pngbin517 -> 0 bytes
-rwxr-xr-xcore/res/res/drawable/search_spinner_anim8.pngbin533 -> 0 bytes
-rwxr-xr-xcore/res/res/drawable/search_spinner_anim9.pngbin534 -> 0 bytes
-rwxr-xr-xcore/res/res/drawable/spinner_black_20.png (renamed from core/res/res/drawable/search_spinner_anim1.png)bin523 -> 523 bytes
-rw-r--r--core/res/res/values/attrs.xml9
-rw-r--r--graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java315
-rw-r--r--graphics/java/android/graphics/drawable/Drawable.java2
23 files changed, 338 insertions, 96 deletions
diff --git a/core/java/android/app/SearchDialog.java b/core/java/android/app/SearchDialog.java
index 6ddf50f..6fe4896 100644
--- a/core/java/android/app/SearchDialog.java
+++ b/core/java/android/app/SearchDialog.java
@@ -33,7 +33,6 @@ import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.database.Cursor;
-import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
@@ -107,7 +106,7 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS
private Button mGoButton;
private ImageButton mVoiceButton;
private View mSearchPlate;
- private AnimationDrawable mWorkingSpinner;
+ private Drawable mWorkingSpinner;
// interaction with searchable application
private SearchableInfo mSearchable;
@@ -188,7 +187,7 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS
mGoButton = (Button) findViewById(com.android.internal.R.id.search_go_btn);
mVoiceButton = (ImageButton) findViewById(com.android.internal.R.id.search_voice_btn);
mSearchPlate = findViewById(com.android.internal.R.id.search_plate);
- mWorkingSpinner = (AnimationDrawable) getContext().getResources().
+ mWorkingSpinner = getContext().getResources().
getDrawable(com.android.internal.R.drawable.search_spinner);
// attach listeners
@@ -423,11 +422,11 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS
if (working) {
mSearchAutoComplete.setCompoundDrawablesWithIntrinsicBounds(
null, null, mWorkingSpinner, null);
- mWorkingSpinner.start();
+// mWorkingSpinner.start();
} else {
mSearchAutoComplete.setCompoundDrawablesWithIntrinsicBounds(
null, null, null, null);
- mWorkingSpinner.stop();
+// mWorkingSpinner.stop();
}
}
@@ -601,7 +600,7 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS
mSearchPlate.getPaddingBottom());
} else {
PackageManager pm = getContext().getPackageManager();
- Drawable icon = null;
+ Drawable icon;
try {
ActivityInfo info = pm.getActivityInfo(mLaunchComponent, 0);
icon = pm.getApplicationIcon(info.applicationInfo);
diff --git a/core/res/res/drawable/progress.xml b/core/res/res/drawable/progress.xml
deleted file mode 100644
index d270520..0000000
--- a/core/res/res/drawable/progress.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/* //device/apps/common/res/drawable/progress.xml
-**
-** Copyright 2007, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:drawable="@android:drawable/progress_circular_background" />
- <item>
- <shape android:shape="ring"
- android:innerRadiusRatio="3.4"
- android:thicknessRatio="6.0">
- <gradient
- android:useLevel="true"
- android:type="sweep"
- android:startColor="#ff000000"
- android:endColor="#ffffffff" />
- </shape>
- </item>
- <item>
- <rotate
- android:pivotX="50%" android:pivotY="50%"
- android:fromDegrees="0" android:toDegrees="360"
- android:drawable="@android:drawable/progress_particle" />
- </item>
-</layer-list>
diff --git a/core/res/res/drawable/progress_circular_background.png b/core/res/res/drawable/progress_circular_background.png
deleted file mode 100644
index 7c637fd..0000000
--- a/core/res/res/drawable/progress_circular_background.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/progress_circular_background_small.png b/core/res/res/drawable/progress_circular_background_small.png
deleted file mode 100644
index 6b8ba9b..0000000
--- a/core/res/res/drawable/progress_circular_background_small.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/progress_circular_indeterminate.png b/core/res/res/drawable/progress_circular_indeterminate.png
deleted file mode 100644
index 125a264..0000000
--- a/core/res/res/drawable/progress_circular_indeterminate.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/progress_indeterminate.xml b/core/res/res/drawable/progress_indeterminate.xml
deleted file mode 100644
index 1bf715e..0000000
--- a/core/res/res/drawable/progress_indeterminate.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/* //device/apps/common/res/drawable/progress.xml
-**
-** Copyright 2007, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:drawable="@android:drawable/progress_circular_background" />
-
- <item><rotate
- android:pivotX="50%"
- android:pivotY="50%"
- android:fromDegrees="0"
- android:toDegrees="360"
- android:drawable="@android:drawable/progress_circular_indeterminate" />
- </item>
-</layer-list>
diff --git a/core/res/res/drawable/progress_particle.png b/core/res/res/drawable/progress_particle.png
deleted file mode 100644
index 9160108..0000000
--- a/core/res/res/drawable/progress_particle.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/search_spinner.xml b/core/res/res/drawable/search_spinner.xml
index 34c163d..31a77c3 100644
--- a/core/res/res/drawable/search_spinner.xml
+++ b/core/res/res/drawable/search_spinner.xml
@@ -2,7 +2,7 @@
<!--
/*
**
-** Copyright 2008, The Android Open Source Project
+** Copyright 2009, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
@@ -17,20 +17,9 @@
** limitations under the License.
*/
-->
-<animation-list
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:oneshot="false">
- <item android:drawable="@drawable/search_spinner_anim1" android:duration="150" />
- <item android:drawable="@drawable/search_spinner_anim2" android:duration="150" />
- <item android:drawable="@drawable/search_spinner_anim3" android:duration="150" />
- <item android:drawable="@drawable/search_spinner_anim4" android:duration="150" />
- <item android:drawable="@drawable/search_spinner_anim5" android:duration="150" />
- <item android:drawable="@drawable/search_spinner_anim6" android:duration="150" />
- <item android:drawable="@drawable/search_spinner_anim7" android:duration="150" />
- <item android:drawable="@drawable/search_spinner_anim8" android:duration="150" />
- <item android:drawable="@drawable/search_spinner_anim9" android:duration="150" />
- <item android:drawable="@drawable/search_spinner_anim10" android:duration="150" />
- <item android:drawable="@drawable/search_spinner_anim11" android:duration="150" />
- <item android:drawable="@drawable/search_spinner_anim12" android:duration="150" />
-</animation-list>
-
+<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
+ android:drawable="@drawable/spinner_black_20"
+ android:pivotX="50%"
+ android:pivotY="50%"
+ android:framesCount="12"
+ android:frameDuration="100" />
diff --git a/core/res/res/drawable/search_spinner_anim10.png b/core/res/res/drawable/search_spinner_anim10.png
deleted file mode 100755
index 9611d97..0000000
--- a/core/res/res/drawable/search_spinner_anim10.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/search_spinner_anim11.png b/core/res/res/drawable/search_spinner_anim11.png
deleted file mode 100755
index 4261704..0000000
--- a/core/res/res/drawable/search_spinner_anim11.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/search_spinner_anim12.png b/core/res/res/drawable/search_spinner_anim12.png
deleted file mode 100755
index 0602314..0000000
--- a/core/res/res/drawable/search_spinner_anim12.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/search_spinner_anim2.png b/core/res/res/drawable/search_spinner_anim2.png
deleted file mode 100755
index 05d58e0..0000000
--- a/core/res/res/drawable/search_spinner_anim2.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/search_spinner_anim3.png b/core/res/res/drawable/search_spinner_anim3.png
deleted file mode 100755
index 69fa9c1..0000000
--- a/core/res/res/drawable/search_spinner_anim3.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/search_spinner_anim4.png b/core/res/res/drawable/search_spinner_anim4.png
deleted file mode 100755
index 9201bac..0000000
--- a/core/res/res/drawable/search_spinner_anim4.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/search_spinner_anim5.png b/core/res/res/drawable/search_spinner_anim5.png
deleted file mode 100755
index f0c7101..0000000
--- a/core/res/res/drawable/search_spinner_anim5.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/search_spinner_anim6.png b/core/res/res/drawable/search_spinner_anim6.png
deleted file mode 100755
index 99d1d4e..0000000
--- a/core/res/res/drawable/search_spinner_anim6.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/search_spinner_anim7.png b/core/res/res/drawable/search_spinner_anim7.png
deleted file mode 100755
index 8ca3358..0000000
--- a/core/res/res/drawable/search_spinner_anim7.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/search_spinner_anim8.png b/core/res/res/drawable/search_spinner_anim8.png
deleted file mode 100755
index 408d723..0000000
--- a/core/res/res/drawable/search_spinner_anim8.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/search_spinner_anim9.png b/core/res/res/drawable/search_spinner_anim9.png
deleted file mode 100755
index 42a2c65..0000000
--- a/core/res/res/drawable/search_spinner_anim9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable/search_spinner_anim1.png b/core/res/res/drawable/spinner_black_20.png
index e55b60d..e55b60d 100755
--- a/core/res/res/drawable/search_spinner_anim1.png
+++ b/core/res/res/drawable/spinner_black_20.png
Binary files differ
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index e978ef5..d070107 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -2327,6 +2327,15 @@
<attr name="drawable" />
</declare-styleable>
+ <declare-styleable name="AnimatedRotateDrawable">
+ <attr name="visible" />
+ <attr name="frameDuration" format="integer" />
+ <attr name="framesCount" format="integer" />
+ <attr name="pivotX" />
+ <attr name="pivotY" />
+ <attr name="drawable" />
+ </declare-styleable>
+
<declare-styleable name="InsetDrawable">
<attr name="visible" />
<attr name="drawable" />
diff --git a/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java b/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java
new file mode 100644
index 0000000..08d295d
--- /dev/null
+++ b/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java
@@ -0,0 +1,315 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.graphics.drawable;
+
+import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.graphics.ColorFilter;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.util.Log;
+import android.os.SystemClock;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+
+import com.android.internal.R;
+
+/**
+ * @hide
+ */
+public class AnimatedRotateDrawable extends Drawable implements Drawable.Callback, Runnable {
+ private AnimatedRotateState mState;
+ private boolean mMutated;
+ private float mCurrentDegrees;
+ private float mIncrement;
+
+ public AnimatedRotateDrawable() {
+ this(null);
+ }
+
+ private AnimatedRotateDrawable(AnimatedRotateState rotateState) {
+ mState = new AnimatedRotateState(rotateState, this);
+ init();
+ }
+
+ private void init() {
+ final AnimatedRotateState state = mState;
+ mIncrement = 360.0f / (float) state.mFramesCount;
+ final Drawable drawable = state.mDrawable;
+ if (drawable != null) {
+ drawable.setFilterBitmap(true);
+ if (drawable instanceof BitmapDrawable) {
+ ((BitmapDrawable) drawable).setAntiAlias(true);
+ }
+ }
+ }
+
+ public void draw(Canvas canvas) {
+ int saveCount = canvas.save();
+
+ final AnimatedRotateState st = mState;
+ final Drawable drawable = st.mDrawable;
+ final Rect bounds = drawable.getBounds();
+
+ int w = bounds.right - bounds.left;
+ int h = bounds.bottom - bounds.top;
+
+ float px = st.mPivotXRel ? (w * st.mPivotX) : st.mPivotX;
+ float py = st.mPivotYRel ? (h * st.mPivotY) : st.mPivotY;
+
+ canvas.rotate(mCurrentDegrees, px, py);
+
+ drawable.draw(canvas);
+
+ canvas.restoreToCount(saveCount);
+
+ nextFrame();
+ }
+
+ private void nextFrame() {
+ unscheduleSelf(this);
+ scheduleSelf(this, SystemClock.uptimeMillis() + mState.mFrameDuration);
+ }
+
+ public void run() {
+ // TODO: This should be computed in draw(Canvas), based on the amount
+ // of time since the last frame drawn
+ mCurrentDegrees += mIncrement;
+ if (mCurrentDegrees > (360.0f - mIncrement)) {
+ mCurrentDegrees = 0.0f;
+ }
+ nextFrame();
+ invalidateSelf();
+ }
+
+ @Override
+ public boolean setVisible(boolean visible, boolean restart) {
+ mState.mDrawable.setVisible(visible, restart);
+ boolean changed = super.setVisible(visible, restart);
+ if (visible) {
+ if (changed || restart) {
+ mCurrentDegrees = 0.0f;
+ nextFrame();
+ }
+ } else {
+ unscheduleSelf(this);
+ }
+ return changed;
+ }
+
+ /**
+ * Returns the drawable rotated by this RotateDrawable.
+ */
+ public Drawable getDrawable() {
+ return mState.mDrawable;
+ }
+
+ @Override
+ public int getChangingConfigurations() {
+ return super.getChangingConfigurations()
+ | mState.mChangingConfigurations
+ | mState.mDrawable.getChangingConfigurations();
+ }
+
+ public void setAlpha(int alpha) {
+ mState.mDrawable.setAlpha(alpha);
+ }
+
+ public void setColorFilter(ColorFilter cf) {
+ mState.mDrawable.setColorFilter(cf);
+ }
+
+ public int getOpacity() {
+ return mState.mDrawable.getOpacity();
+ }
+
+ public void invalidateDrawable(Drawable who) {
+ if (mCallback != null) {
+ mCallback.invalidateDrawable(this);
+ }
+ }
+
+ public void scheduleDrawable(Drawable who, Runnable what, long when) {
+ if (mCallback != null) {
+ mCallback.scheduleDrawable(this, what, when);
+ }
+ }
+
+ public void unscheduleDrawable(Drawable who, Runnable what) {
+ if (mCallback != null) {
+ mCallback.unscheduleDrawable(this, what);
+ }
+ }
+
+ @Override
+ public boolean getPadding(Rect padding) {
+ return mState.mDrawable.getPadding(padding);
+ }
+
+ @Override
+ public boolean isStateful() {
+ return mState.mDrawable.isStateful();
+ }
+
+ @Override
+ protected void onBoundsChange(Rect bounds) {
+ mState.mDrawable.setBounds(bounds.left, bounds.top, bounds.right, bounds.bottom);
+ }
+
+ @Override
+ public int getIntrinsicWidth() {
+ return mState.mDrawable.getIntrinsicWidth();
+ }
+
+ @Override
+ public int getIntrinsicHeight() {
+ return mState.mDrawable.getIntrinsicHeight();
+ }
+
+ @Override
+ public ConstantState getConstantState() {
+ if (mState.canConstantState()) {
+ mState.mChangingConfigurations = super.getChangingConfigurations();
+ return mState;
+ }
+ return null;
+ }
+
+ @Override
+ public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs)
+ throws XmlPullParserException, IOException {
+
+ final TypedArray a = r.obtainAttributes(attrs, R.styleable.AnimatedRotateDrawable);
+
+ super.inflateWithAttributes(r, parser, a, R.styleable.AnimatedRotateDrawable_visible);
+
+ TypedValue tv = a.peekValue(R.styleable.AnimatedRotateDrawable_pivotX);
+ final boolean pivotXRel = tv.type == TypedValue.TYPE_FRACTION;
+ final float pivotX = pivotXRel ? tv.getFraction(1.0f, 1.0f) : tv.getFloat();
+
+ tv = a.peekValue(R.styleable.AnimatedRotateDrawable_pivotY);
+ final boolean pivotYRel = tv.type == TypedValue.TYPE_FRACTION;
+ final float pivotY = pivotYRel ? tv.getFraction(1.0f, 1.0f) : tv.getFloat();
+
+ final int framesCount = a.getInt(R.styleable.AnimatedRotateDrawable_framesCount, 12);
+ final int frameDuration = a.getInt(R.styleable.AnimatedRotateDrawable_frameDuration, 150);
+
+ final int res = a.getResourceId(R.styleable.AnimatedRotateDrawable_drawable, 0);
+ Drawable drawable = null;
+ if (res > 0) {
+ drawable = r.getDrawable(res);
+ }
+
+ a.recycle();
+
+ int outerDepth = parser.getDepth();
+ int type;
+ while ((type = parser.next()) != XmlPullParser.END_DOCUMENT &&
+ (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+
+ if (type != XmlPullParser.START_TAG) {
+ continue;
+ }
+
+ if ((drawable = Drawable.createFromXmlInner(r, parser, attrs)) == null) {
+ Log.w("drawable", "Bad element under <animated-rotate>: "
+ + parser .getName());
+ }
+ }
+
+ if (drawable == null) {
+ Log.w("drawable", "No drawable specified for <animated-rotate>");
+ }
+
+ final AnimatedRotateState rotateState = mState;
+ rotateState.mDrawable = drawable;
+ rotateState.mPivotXRel = pivotXRel;
+ rotateState.mPivotX = pivotX;
+ rotateState.mPivotYRel = pivotYRel;
+ rotateState.mPivotY = pivotY;
+ rotateState.mFramesCount = framesCount;
+ rotateState.mFrameDuration = frameDuration;
+
+ init();
+
+ if (drawable != null) {
+ drawable.setCallback(this);
+ }
+ }
+
+ @Override
+ public Drawable mutate() {
+ if (!mMutated && super.mutate() == this) {
+ mState.mDrawable.mutate();
+ mMutated = true;
+ }
+ return this;
+ }
+
+ final static class AnimatedRotateState extends Drawable.ConstantState {
+ Drawable mDrawable;
+
+ int mChangingConfigurations;
+
+ boolean mPivotXRel;
+ float mPivotX;
+ boolean mPivotYRel;
+ float mPivotY;
+ int mFrameDuration;
+ int mFramesCount;
+
+ private boolean mCanConstantState;
+ private boolean mCheckedConstantState;
+
+ public AnimatedRotateState(AnimatedRotateState source, AnimatedRotateDrawable owner) {
+ if (source != null) {
+ mDrawable = source.mDrawable.getConstantState().newDrawable();
+ mDrawable.setCallback(owner);
+ mPivotXRel = source.mPivotXRel;
+ mPivotX = source.mPivotX;
+ mPivotYRel = source.mPivotYRel;
+ mPivotY = source.mPivotY;
+ mFramesCount = source.mFramesCount;
+ mFrameDuration = source.mFrameDuration;
+ mCanConstantState = mCheckedConstantState = true;
+ }
+ }
+
+ @Override
+ public Drawable newDrawable() {
+ return new AnimatedRotateDrawable(this);
+ }
+
+ @Override
+ public int getChangingConfigurations() {
+ return mChangingConfigurations;
+ }
+
+ public boolean canConstantState() {
+ if (!mCheckedConstantState) {
+ mCanConstantState = mDrawable.getConstantState() != null;
+ mCheckedConstantState = true;
+ }
+
+ return mCanConstantState;
+ }
+ }
+}
diff --git a/graphics/java/android/graphics/drawable/Drawable.java b/graphics/java/android/graphics/drawable/Drawable.java
index f0d49f5..910e111 100644
--- a/graphics/java/android/graphics/drawable/Drawable.java
+++ b/graphics/java/android/graphics/drawable/Drawable.java
@@ -745,6 +745,8 @@ public abstract class Drawable {
drawable = new ClipDrawable();
} else if (name.equals("rotate")) {
drawable = new RotateDrawable();
+ } else if (name.equals("animated-rotate")) {
+ drawable = new AnimatedRotateDrawable();
} else if (name.equals("animation-list")) {
drawable = new AnimationDrawable();
} else if (name.equals("inset")) {