summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/app/MovieControllerOverlay.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/gallery3d/app/MovieControllerOverlay.java')
-rw-r--r--src/com/android/gallery3d/app/MovieControllerOverlay.java185
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);
+ }
+}