1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.gallery3d.app;
18 
19 import android.content.Context;
20 import android.os.Handler;
21 import android.view.KeyEvent;
22 import android.view.MotionEvent;
23 import android.view.View;
24 import android.view.animation.Animation;
25 import android.view.animation.Animation.AnimationListener;
26 import android.view.animation.AnimationUtils;
27 import com.android.gallery3d.R;
28 
29 /**
30  * The playback controller for the Movie Player.
31  */
32 public class MovieControllerOverlay extends CommonControllerOverlay implements
33         AnimationListener {
34 
35     private boolean hidden;
36 
37     private final Handler handler;
38     private final Runnable startHidingRunnable;
39     private final Animation hideAnimation;
40 
MovieControllerOverlay(Context context)41     public MovieControllerOverlay(Context context) {
42         super(context);
43 
44         handler = new Handler();
45         startHidingRunnable = new Runnable() {
46                 @Override
47             public void run() {
48                 startHiding();
49             }
50         };
51 
52         hideAnimation = AnimationUtils.loadAnimation(context, R.anim.player_out);
53         hideAnimation.setAnimationListener(this);
54 
55         hide();
56     }
57 
58     @Override
createTimeBar(Context context)59     protected void createTimeBar(Context context) {
60         mTimeBar = new TimeBar(context, this);
61     }
62 
63     @Override
hide()64     public void hide() {
65         boolean wasHidden = hidden;
66         hidden = true;
67         super.hide();
68         if (mListener != null && wasHidden != hidden) {
69             mListener.onHidden();
70         }
71     }
72 
73 
74     @Override
show()75     public void show() {
76         boolean wasHidden = hidden;
77         hidden = false;
78         super.show();
79         if (mListener != null && wasHidden != hidden) {
80             mListener.onShown();
81         }
82         maybeStartHiding();
83     }
84 
maybeStartHiding()85     private void maybeStartHiding() {
86         cancelHiding();
87         if (mState == State.PLAYING) {
88             handler.postDelayed(startHidingRunnable, 2500);
89         }
90     }
91 
startHiding()92     private void startHiding() {
93         startHideAnimation(mBackground);
94         startHideAnimation(mTimeBar);
95         startHideAnimation(mPlayPauseReplayView);
96     }
97 
startHideAnimation(View view)98     private void startHideAnimation(View view) {
99         if (view.getVisibility() == View.VISIBLE) {
100             view.startAnimation(hideAnimation);
101         }
102     }
103 
cancelHiding()104     private void cancelHiding() {
105         handler.removeCallbacks(startHidingRunnable);
106         mBackground.setAnimation(null);
107         mTimeBar.setAnimation(null);
108         mPlayPauseReplayView.setAnimation(null);
109     }
110 
111     @Override
onAnimationStart(Animation animation)112     public void onAnimationStart(Animation animation) {
113         // Do nothing.
114     }
115 
116     @Override
onAnimationRepeat(Animation animation)117     public void onAnimationRepeat(Animation animation) {
118         // Do nothing.
119     }
120 
121     @Override
onAnimationEnd(Animation animation)122     public void onAnimationEnd(Animation animation) {
123         hide();
124     }
125 
126     @Override
onKeyDown(int keyCode, KeyEvent event)127     public boolean onKeyDown(int keyCode, KeyEvent event) {
128         if (hidden) {
129             show();
130         }
131         return super.onKeyDown(keyCode, event);
132     }
133 
134     @Override
onTouchEvent(MotionEvent event)135     public boolean onTouchEvent(MotionEvent event) {
136         if (super.onTouchEvent(event)) {
137             return true;
138         }
139 
140         if (hidden) {
141             show();
142             return true;
143         }
144         switch (event.getAction()) {
145             case MotionEvent.ACTION_DOWN:
146                 cancelHiding();
147                 if (mState == State.PLAYING || mState == State.PAUSED) {
148                     mListener.onPlayPause();
149                 }
150                 break;
151             case MotionEvent.ACTION_UP:
152                 maybeStartHiding();
153                 break;
154         }
155         return true;
156     }
157 
158     @Override
updateViews()159     protected void updateViews() {
160         if (hidden) {
161             return;
162         }
163         super.updateViews();
164     }
165 
166     // TimeBar listener
167 
168     @Override
onScrubbingStart()169     public void onScrubbingStart() {
170         cancelHiding();
171         super.onScrubbingStart();
172     }
173 
174     @Override
onScrubbingMove(int time)175     public void onScrubbingMove(int time) {
176         cancelHiding();
177         super.onScrubbingMove(time);
178     }
179 
180     @Override
onScrubbingEnd(int time, int trimStartTime, int trimEndTime)181     public void onScrubbingEnd(int time, int trimStartTime, int trimEndTime) {
182         maybeStartHiding();
183         super.onScrubbingEnd(time, trimStartTime, trimEndTime);
184     }
185 }
186