diff options
Diffstat (limited to 'src/com/android/gallery3d/app/MovieControllerOverlay.java')
-rw-r--r-- | src/com/android/gallery3d/app/MovieControllerOverlay.java | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/src/com/android/gallery3d/app/MovieControllerOverlay.java b/src/com/android/gallery3d/app/MovieControllerOverlay.java new file mode 100644 index 000000000..f01e619c6 --- /dev/null +++ b/src/com/android/gallery3d/app/MovieControllerOverlay.java @@ -0,0 +1,185 @@ +/* + * Copyright (C) 2011 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 com.android.gallery3d.app; + +import android.content.Context; +import android.os.Handler; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.view.View; +import android.view.animation.Animation; +import android.view.animation.Animation.AnimationListener; +import android.view.animation.AnimationUtils; +import com.android.gallery3d.R; + +/** + * The playback controller for the Movie Player. + */ +public class MovieControllerOverlay extends CommonControllerOverlay implements + AnimationListener { + + private boolean hidden; + + private final Handler handler; + private final Runnable startHidingRunnable; + private final Animation hideAnimation; + + public MovieControllerOverlay(Context context) { + super(context); + + handler = new Handler(); + startHidingRunnable = new Runnable() { + @Override + public void run() { + startHiding(); + } + }; + + hideAnimation = AnimationUtils.loadAnimation(context, R.anim.player_out); + hideAnimation.setAnimationListener(this); + + hide(); + } + + @Override + protected void createTimeBar(Context context) { + mTimeBar = new TimeBar(context, this); + } + + @Override + public void hide() { + boolean wasHidden = hidden; + hidden = true; + super.hide(); + if (mListener != null && wasHidden != hidden) { + mListener.onHidden(); + } + } + + + @Override + public void show() { + boolean wasHidden = hidden; + hidden = false; + super.show(); + if (mListener != null && wasHidden != hidden) { + mListener.onShown(); + } + maybeStartHiding(); + } + + private void maybeStartHiding() { + cancelHiding(); + if (mState == State.PLAYING) { + handler.postDelayed(startHidingRunnable, 2500); + } + } + + private void startHiding() { + startHideAnimation(mBackground); + startHideAnimation(mTimeBar); + startHideAnimation(mPlayPauseReplayView); + } + + private void startHideAnimation(View view) { + if (view.getVisibility() == View.VISIBLE) { + view.startAnimation(hideAnimation); + } + } + + private void cancelHiding() { + handler.removeCallbacks(startHidingRunnable); + mBackground.setAnimation(null); + mTimeBar.setAnimation(null); + mPlayPauseReplayView.setAnimation(null); + } + + @Override + public void onAnimationStart(Animation animation) { + // Do nothing. + } + + @Override + public void onAnimationRepeat(Animation animation) { + // Do nothing. + } + + @Override + public void onAnimationEnd(Animation animation) { + hide(); + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (hidden) { + show(); + } + return super.onKeyDown(keyCode, event); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + if (super.onTouchEvent(event)) { + return true; + } + + if (hidden) { + show(); + return true; + } + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + cancelHiding(); + if (mState == State.PLAYING || mState == State.PAUSED) { + mListener.onPlayPause(); + } + break; + case MotionEvent.ACTION_UP: + maybeStartHiding(); + break; + } + return true; + } + + @Override + protected void updateViews() { + if (hidden) { + return; + } + super.updateViews(); + } + + // TimeBar listener + + @Override + public void onScrubbingStart() { + cancelHiding(); + super.onScrubbingStart(); + } + + @Override + public void onScrubbingMove(int time) { + cancelHiding(); + super.onScrubbingMove(time); + } + + @Override + public void onScrubbingEnd(int time, int trimStartTime, int trimEndTime) { + maybeStartHiding(); + super.onScrubbingEnd(time, trimStartTime, trimEndTime); + } +} |