/*
* 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);
}
}