17dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase/*
27dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase* Copyright (C) 2011 The Android Open Source Project
37dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase*
47dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase* Licensed under the Apache License, Version 2.0 (the "License");
57dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase* you may not use this file except in compliance with the License.
67dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase* You may obtain a copy of the License at
77dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase*
87dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase*      http://www.apache.org/licenses/LICENSE-2.0
97dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase*
107dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase* Unless required by applicable law or agreed to in writing, software
117dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase* distributed under the License is distributed on an "AS IS" BASIS,
127dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase* See the License for the specific language governing permissions and
147dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase* limitations under the License.
157dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase*/
167dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haasepackage android.animation;
177dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase
188b699792b677bd4dd8442b32641ac09d48fdd79cChet Haaseimport android.os.Handler;
198b699792b677bd4dd8442b32641ac09d48fdd79cChet Haaseimport android.test.suitebuilder.annotation.MediumTest;
208b699792b677bd4dd8442b32641ac09d48fdd79cChet Haaseimport android.test.suitebuilder.annotation.SmallTest;
217dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haaseimport android.widget.Button;
227dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haaseimport com.android.frameworks.coretests.R;
237dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase
248b699792b677bd4dd8442b32641ac09d48fdd79cChet Haaseimport java.util.concurrent.TimeUnit;
258b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase
267dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase/**
277dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase * Listener tests for AnimatorSet.
287dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase */
297dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haasepublic class AnimatorSetEventsTest extends EventsTest {
307dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase
318b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    Button button;
328b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    ObjectAnimator xAnim = ObjectAnimator.ofFloat(this, "translationX", 0, 100);
338b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    ObjectAnimator yAnim = ObjectAnimator.ofFloat(this, "translationY", 0, 100);
348b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase
357dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase    @Override
367dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase    public void setUp() throws Exception {
378b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase        button = (Button) getActivity().findViewById(R.id.animatingButton);
387dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase        mAnimator = new AnimatorSet();
397dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase        ((AnimatorSet)mAnimator).playSequentially(xAnim, yAnim);
407dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase        super.setUp();
417dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase    }
427dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase
438b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    @Override
448b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    protected long getTimeout() {
458aa1ffb0ed292891030992c65df4e5dc8bd37524Chet Haase        return (2 * mAnimator.getDuration()) + (2 * mAnimator.getStartDelay()) +
468b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase                ANIM_DELAY + FUTURE_RELEASE_DELAY;
478b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    }
488b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase
498b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    /**
508b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase     * Tests that an AnimatorSet can be correctly canceled during the delay of one of
518b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase     * its children
528b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase     */
538b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    @MediumTest
548b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    public void testPlayingCancelDuringChildDelay() throws Exception {
558b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase        yAnim.setStartDelay(500);
568b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase        final AnimatorSet animSet = new AnimatorSet();
578b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase        animSet.playSequentially(xAnim, yAnim);
588b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase        mFutureListener = new FutureReleaseListener(mFuture);
598b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase        getActivity().runOnUiThread(new Runnable() {
608b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase            @Override
618b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase            public void run() {
628b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase                try {
638b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase                    Handler handler = new Handler();
648b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase                    animSet.addListener(mFutureListener);
658b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase                    mRunning = true;
668b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase                    animSet.start();
678b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase                    handler.postDelayed(new Canceler(animSet, mFuture), ANIM_DURATION + 250);
688b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase                } catch (junit.framework.AssertionFailedError e) {
698b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase                    mFuture.setException(new RuntimeException(e));
708b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase                }
718b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase            }
728b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase        });
738b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase        mFuture.get(getTimeout(), TimeUnit.MILLISECONDS);
748b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    }
758b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase
768b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    public void setTranslationX(float value) {
778b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase        button.setTranslationX(value);
788b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    }
798b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase
808b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase
818b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    public void setTranslationY(float value) {
828b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase        button.setTranslationY(value);
838b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    }
848b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase
858b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase
867dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase}
87