13f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu/*
23f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu * Copyright (C) 2012 The Android Open Source Project
33f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu *
43f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu * Licensed under the Apache License, Version 2.0 (the "License");
53f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu * you may not use this file except in compliance with the License.
63f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu * You may obtain a copy of the License at
73f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu *
83f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu *      http://www.apache.org/licenses/LICENSE-2.0
93f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu *
103f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu * Unless required by applicable law or agreed to in writing, software
113f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu * distributed under the License is distributed on an "AS IS" BASIS,
123f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu * See the License for the specific language governing permissions and
143f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu * limitations under the License.
153f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu */
163f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu
173f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhupackage com.android.gallery3d.app;
183f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu
193f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhuimport android.animation.Animator;
203f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhuimport android.animation.Animator.AnimatorListener;
213f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhuimport android.animation.ObjectAnimator;
223f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhuimport android.content.Context;
233f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhuimport android.view.MotionEvent;
243f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhuimport android.view.View;
253f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu
26b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhuimport com.android.gallery3d.common.ApiHelper;
27b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu
283f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu/**
293f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu * The controller for the Trimming Video.
303f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu */
313f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhupublic class TrimControllerOverlay extends CommonControllerOverlay  {
323f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu
333f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu    public TrimControllerOverlay(Context context) {
343f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu        super(context);
353f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu    }
363f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu
373f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu    @Override
383f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu    protected void createTimeBar(Context context) {
393f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu        mTimeBar = new TrimTimeBar(context, this);
403f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu    }
413f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu
423f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu    private void hidePlayButtonIfPlaying() {
433f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu        if (mState == State.PLAYING) {
443f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu            mPlayPauseReplayView.setVisibility(View.INVISIBLE);
453f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu        }
46b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu        if (ApiHelper.HAS_OBJECT_ANIMATION) {
47b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu            mPlayPauseReplayView.setAlpha(1f);
48b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu        }
493f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu    }
503f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu
513f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu    @Override
523f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu    public void showPlaying() {
533f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu        super.showPlaying();
54b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu        if (ApiHelper.HAS_OBJECT_ANIMATION) {
55b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu            // Add animation to hide the play button while playing.
56b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu            ObjectAnimator anim = ObjectAnimator.ofFloat(mPlayPauseReplayView, "alpha", 1f, 0f);
57b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu            anim.setDuration(200);
58b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu            anim.start();
59b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu            anim.addListener(new AnimatorListener() {
60b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu                @Override
61b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu                public void onAnimationStart(Animator animation) {
62b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu                }
633f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu
64b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu                @Override
65b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu                public void onAnimationEnd(Animator animation) {
66b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu                    hidePlayButtonIfPlaying();
67b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu                }
683f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu
69b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu                @Override
70b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu                public void onAnimationCancel(Animator animation) {
71b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu                    hidePlayButtonIfPlaying();
72b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu                }
733f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu
74b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu                @Override
75b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu                public void onAnimationRepeat(Animator animation) {
76b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu                }
77b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu            });
78b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu        } else {
79b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu            hidePlayButtonIfPlaying();
80b5f374c30d06dc0409891f85a4bd5e1e3ddf8700Teng-Hui Zhu        }
813f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu    }
823f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu
833f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu    @Override
843f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu    public void setTimes(int currentTime, int totalTime, int trimStartTime, int trimEndTime) {
853f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu        mTimeBar.setTime(currentTime, totalTime, trimStartTime, trimEndTime);
863f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu    }
873f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu
883f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu    @Override
893f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu    public boolean onTouchEvent(MotionEvent event) {
903f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu        if (super.onTouchEvent(event)) {
913f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu            return true;
923f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu        }
933f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu
943f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu        // The special thing here is that the State.ENDED include both cases of
953f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu        // the video completed and current == trimEnd. Both request a replay.
963f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu        switch (event.getAction()) {
973f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu            case MotionEvent.ACTION_DOWN:
983f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu                if (mState == State.PLAYING || mState == State.PAUSED) {
993f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu                    mListener.onPlayPause();
1003f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu                } else if (mState == State.ENDED) {
1013f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu                    if (mCanReplay) {
1023f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu                        mListener.onReplay();
1033f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu                    }
1043f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu                }
1053f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu                break;
1063f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu            case MotionEvent.ACTION_UP:
1073f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu                break;
1083f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu        }
1093f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu        return true;
1103f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu    }
1113f1f1baf3a674927e25cd5cd885fb372796bd3a0Teng-Hui Zhu}
112