Test AVD drawing on a bitmap correctly as the end state.
The drawable has only 16ms duration.
Also make sure inflation is called once per drawable.
b/27343522
Change-Id: I97725fb18cd19767b910f9b193f37fa2d77aac97
diff --git a/tests/tests/graphics/res/drawable/avd_single_frame.xml b/tests/tests/graphics/res/drawable/avd_single_frame.xml
new file mode 100644
index 0000000..483a0f3
--- /dev/null
+++ b/tests/tests/graphics/res/drawable/avd_single_frame.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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.
+-->
+<animated-vector xmlns:aapt="http://schemas.android.com/aapt"
+ xmlns:android="http://schemas.android.com/apk/res/android">
+ <aapt:attr name="android:drawable">
+ <vector
+ android:width="32dp"
+ android:viewportWidth="32"
+ android:height="32dp"
+ android:viewportHeight="32">
+ <group
+ android:name="btn_radio_to_off_mtrl_0"
+ android:translateX="16"
+ android:translateY="16">
+ <group
+ android:name="ring_outer">
+ <path
+ android:name="ring_outer_path"
+ android:fillColor="#FF000000"
+ android:pathData="M 0.0,-9.0 c 4.9705627482,0.0 9.0,4.0294372518 9.0,9.0 c 0.0,4.9705627482 -4.0294372518,9.0 -9.0,9.0 c -4.9705627482,0.0 -9.0,-4.0294372518 -9.0,-9.0 c 0.0,-4.9705627482 4.0294372518,-9.0 9.0,-9.0 Z"/>
+ </group>
+ </group>
+ </vector>
+ </aapt:attr>
+ <target android:name="ring_outer_path">
+ <aapt:attr name="android:animation">
+ <set
+ xmlns:android="http://schemas.android.com/apk/res/android" >
+ <objectAnimator
+ android:duration="16"
+ android:propertyName="fillColor"
+ android:valueFrom="#f00"
+ android:valueTo="#0f0"
+ android:valueType="intType"
+ android:interpolator="@interpolator/avd_single_frame_interpolator" />
+
+ </set>
+ </aapt:attr>
+ </target>
+</animated-vector>
\ No newline at end of file
diff --git a/tests/tests/graphics/res/interpolator/avd_single_frame_interpolator.xml b/tests/tests/graphics/res/interpolator/avd_single_frame_interpolator.xml
new file mode 100644
index 0000000..d3728c4
--- /dev/null
+++ b/tests/tests/graphics/res/interpolator/avd_single_frame_interpolator.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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.
+-->
+
+<pathInterpolator
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:pathData="M 0.0,0.0 c 0.4,0.0 0.4,1.0 1.0,1.0" />
diff --git a/tests/tests/graphics/src/android/graphics/drawable/cts/AnimatedVectorDrawableTest.java b/tests/tests/graphics/src/android/graphics/drawable/cts/AnimatedVectorDrawableTest.java
index 92f3125..487eb3b 100644
--- a/tests/tests/graphics/src/android/graphics/drawable/cts/AnimatedVectorDrawableTest.java
+++ b/tests/tests/graphics/src/android/graphics/drawable/cts/AnimatedVectorDrawableTest.java
@@ -53,7 +53,6 @@
private DrawableStubActivity mActivity;
private Resources mResources;
- private AnimatedVectorDrawable mAnimatedVectorDrawable;
private Bitmap mBitmap;
private Canvas mCanvas;
private static final boolean DBG_DUMP_PNG = false;
@@ -72,7 +71,6 @@
mBitmap = Bitmap.createBitmap(IMAGE_WIDTH, IMAGE_HEIGHT, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
- mAnimatedVectorDrawable = new AnimatedVectorDrawable();
mActivity = getActivity();
mResources = mActivity.getResources();
@@ -125,11 +123,11 @@
if (type != XmlPullParser.START_TAG) {
throw new XmlPullParserException("No start tag found");
}
-
- mAnimatedVectorDrawable.inflate(mResources, parser, attrs);
- mAnimatedVectorDrawable.setBounds(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);
+ AnimatedVectorDrawable drawable = new AnimatedVectorDrawable();
+ drawable.inflate(mResources, parser, attrs);
+ drawable.setBounds(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);
mBitmap.eraseColor(0);
- mAnimatedVectorDrawable.draw(mCanvas);
+ drawable.draw(mCanvas);
int sunColor = mBitmap.getPixel(IMAGE_WIDTH / 2, IMAGE_HEIGHT / 2);
int earthColor = mBitmap.getPixel(IMAGE_WIDTH * 3 / 4 + 2, IMAGE_HEIGHT / 2);
assertTrue(sunColor == 0xFFFF8000);
@@ -140,6 +138,35 @@
}
}
+ @MediumTest
+ public void testSingleFrameAnimation() throws Exception {
+ int resId = R.drawable.avd_single_frame;
+ final AnimatedVectorDrawable d1 =
+ (AnimatedVectorDrawable) mResources.getDrawable(resId);
+ // The AVD has a duration as 16ms.
+ mActivity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ d1.start();
+ d1.stop();
+
+ }
+ });
+ getInstrumentation().waitForIdleSync();
+
+ d1.setBounds(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);
+ mBitmap.eraseColor(0);
+ d1.draw(mCanvas);
+
+ int endColor = mBitmap.getPixel(IMAGE_WIDTH / 2, IMAGE_HEIGHT / 2);
+
+ assertEquals("Center point's color must be green", 0xFF00FF00, endColor);
+
+ if (DBG_DUMP_PNG) {
+ saveVectorDrawableIntoPNG(mBitmap, resId);
+ }
+ }
+
@SmallTest
public void testGetChangingConfigurations() {
AnimatedVectorDrawable avd = new AnimatedVectorDrawable();