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
417dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase        super.setUp();
427dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase    }
437dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase
448b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    @Override
458b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    protected long getTimeout() {
468b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase        return (xAnim.getDuration() + yAnim.getDuration()) +
478b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase                (xAnim.getStartDelay() + yAnim.getStartDelay()) +
488b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase                ANIM_DELAY + FUTURE_RELEASE_DELAY;
498b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    }
508b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase
518b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    /**
528b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase     * Tests that an AnimatorSet can be correctly canceled during the delay of one of
538b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase     * its children
548b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase     */
558b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    @MediumTest
568b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    public void testPlayingCancelDuringChildDelay() throws Exception {
578b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase        yAnim.setStartDelay(500);
588b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase        final AnimatorSet animSet = new AnimatorSet();
598b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase        animSet.playSequentially(xAnim, yAnim);
608b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase        mFutureListener = new FutureReleaseListener(mFuture);
618b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase        getActivity().runOnUiThread(new Runnable() {
628b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase            @Override
638b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase            public void run() {
648b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase                try {
658b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase                    Handler handler = new Handler();
668b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase                    animSet.addListener(mFutureListener);
678b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase                    mRunning = true;
688b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase                    animSet.start();
698b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase                    handler.postDelayed(new Canceler(animSet, mFuture), ANIM_DURATION + 250);
708b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase                } catch (junit.framework.AssertionFailedError e) {
718b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase                    mFuture.setException(new RuntimeException(e));
728b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase                }
738b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase            }
748b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase        });
758b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase        mFuture.get(getTimeout(), TimeUnit.MILLISECONDS);
768b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    }
778b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase
788b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    public void setTranslationX(float value) {
798b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase        button.setTranslationX(value);
808b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    }
818b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase
828b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase
838b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    public void setTranslationY(float value) {
848b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase        button.setTranslationY(value);
858b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase    }
868b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase
878b699792b677bd4dd8442b32641ac09d48fdd79cChet Haase
887dfacdb1c820f955cb3cd6032ff5fbc2dd7d9df5Chet Haase}
89