Index: content/public/android/java/src/org/chromium/content/browser/ContentVideoViewLegacy.java |
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentVideoViewLegacy.java b/content/public/android/java/src/org/chromium/content/browser/ContentVideoViewLegacy.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..54055adfa0b2dea8bd89de24046ecb736b4960db |
--- /dev/null |
+++ b/content/public/android/java/src/org/chromium/content/browser/ContentVideoViewLegacy.java |
@@ -0,0 +1,265 @@ |
+// Copyright 2012 The Chromium Authors. All rights reserved. |
Ted C
2013/12/26 23:06:15
2013
|
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.content.browser; |
+ |
+import android.content.Context; |
+import android.graphics.Color; |
+import android.view.KeyEvent; |
+import android.view.MotionEvent; |
+import android.view.SurfaceHolder; |
+import android.view.SurfaceView; |
+import android.view.View; |
+import android.widget.MediaController; |
+ |
+public class ContentVideoViewLegacy extends ContentVideoView { |
Ted C
2013/12/26 23:06:15
needs a class level description
|
+ private MediaController mMediaController; |
+ private boolean mCanPause; |
+ private boolean mCanSeekBackward; |
+ private boolean mCanSeekForward; |
+ private int mCurrentBufferPercentage; |
+ |
+ private static class FullScreenMediaController extends MediaController { |
+ |
+ View mVideoView; |
+ |
+ public FullScreenMediaController(Context context, View video) { |
+ super(context); |
+ mVideoView = video; |
+ } |
+ |
+ @Override |
+ public void show() { |
+ super.show(); |
+ if (mVideoView != null) { |
+ mVideoView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); |
+ } |
+ } |
+ |
+ @Override |
+ public void hide() { |
+ if (mVideoView != null) { |
+ mVideoView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE); |
+ } |
+ super.hide(); |
+ } |
+ } |
+ |
+ ContentVideoViewLegacy(Context context, long nativeContentVideoView, |
+ ContentVideoViewClient client) { |
+ super(context, nativeContentVideoView, client); |
+ setBackgroundColor(Color.BLACK); |
+ mCurrentBufferPercentage = 0; |
+ } |
+ |
+ @Override |
+ protected void showContentVideoView() { |
+ SurfaceView surfaceView = getSurfaceView(); |
+ surfaceView.setZOrderOnTop(true); |
+ surfaceView.setOnKeyListener(new OnKeyListener() { |
+ @Override |
+ public boolean onKey(View v, int keyCode, KeyEvent event) { |
+ boolean isKeyCodeSupported = keyCode != KeyEvent.KEYCODE_BACK && |
+ keyCode != KeyEvent.KEYCODE_VOLUME_UP && |
Ted C
2013/12/26 23:06:15
Although this is moved code, these lines should be
|
+ keyCode != KeyEvent.KEYCODE_VOLUME_DOWN && |
+ keyCode != KeyEvent.KEYCODE_VOLUME_MUTE && |
+ keyCode != KeyEvent.KEYCODE_CALL && |
+ keyCode != KeyEvent.KEYCODE_MENU && |
+ keyCode != KeyEvent.KEYCODE_SEARCH && |
+ keyCode != KeyEvent.KEYCODE_ENDCALL; |
+ if (isInPlaybackState() && isKeyCodeSupported && mMediaController != null) { |
+ if (keyCode == KeyEvent.KEYCODE_HEADSETHOOK || |
+ keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE) { |
+ if (isPlaying()) { |
+ pause(); |
+ mMediaController.show(); |
+ } else { |
+ start(); |
+ mMediaController.hide(); |
+ } |
+ return true; |
+ } else if (keyCode == KeyEvent.KEYCODE_MEDIA_PLAY) { |
+ if (!isPlaying()) { |
+ start(); |
+ mMediaController.hide(); |
+ } |
+ return true; |
+ } else if (keyCode == KeyEvent.KEYCODE_MEDIA_STOP |
+ || keyCode == KeyEvent.KEYCODE_MEDIA_PAUSE) { |
+ if (isPlaying()) { |
+ pause(); |
+ mMediaController.show(); |
+ } |
+ return true; |
+ } else { |
+ toggleMediaControlsVisiblity(); |
+ } |
+ } else if (keyCode == KeyEvent.KEYCODE_BACK && |
+ event.getAction() == KeyEvent.ACTION_UP) { |
+ exitFullscreen(false); |
+ return true; |
+ } else if (keyCode == KeyEvent.KEYCODE_MENU || keyCode == KeyEvent.KEYCODE_SEARCH) { |
+ return true; |
+ } |
+ return false; |
+ } |
+ }); |
+ surfaceView.setOnTouchListener(new OnTouchListener() { |
+ @Override |
+ public boolean onTouch(View v, MotionEvent event) { |
+ if (isInPlaybackState() && mMediaController != null && |
+ event.getAction() == MotionEvent.ACTION_DOWN) { |
+ toggleMediaControlsVisiblity(); |
+ } |
+ return true; |
+ } |
+ }); |
+ surfaceView.setFocusable(true); |
+ surfaceView.setFocusableInTouchMode(true); |
+ surfaceView.requestFocus(); |
+ super.showContentVideoView(); |
+ } |
+ |
+ @Override |
+ public void onMediaPlayerError(int errorType) { |
+ super.onMediaPlayerError(errorType); |
+ if (errorType == MEDIA_ERROR_INVALID_CODE) { |
+ return; |
Ted C
2013/12/26 23:06:15
this can probably all fit on a single line
|
+ } |
+ if (mMediaController != null) { |
Ted C
2013/12/26 23:06:15
same
|
+ mMediaController.hide(); |
+ } |
+ } |
+ |
+ @Override |
+ protected void onBufferingUpdate(int percent) { |
+ super.onBufferingUpdate(percent); |
+ mCurrentBufferPercentage = percent; |
+ } |
+ |
+ @Override |
+ protected void onUpdateMediaMetadata( |
+ int videoWidth, |
+ int videoHeight, |
+ int duration, |
+ boolean canPause, |
+ boolean canSeekBack, |
+ boolean canSeekForward) { |
+ super.onUpdateMediaMetadata(videoWidth, videoHeight, duration, |
+ canPause, canSeekBack, canSeekForward); |
+ mCanPause = canPause; |
+ mCanSeekBackward = canSeekBack; |
+ mCanSeekForward = canSeekForward; |
+ if (mMediaController != null) { |
Ted C
2013/12/26 23:06:15
personally, I prefer to exit early in this case an
|
+ mMediaController.setEnabled(true); |
+ // If paused , should show the controller forever. |
+ if (isPlaying()) |
Ted C
2013/12/26 23:06:15
braces required in java land
|
+ mMediaController.show(); |
+ else |
+ mMediaController.show(0); |
+ } |
+ } |
+ |
+ @Override |
+ public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { |
+ super.surfaceChanged(holder, format, width, height); |
+ SurfaceView surfaceView = getSurfaceView(); |
+ surfaceView.setFocusable(true); |
+ surfaceView.setFocusableInTouchMode(true); |
+ if (isInPlaybackState() && mMediaController != null) { |
+ mMediaController.show(); |
+ } |
+ } |
+ |
+ @Override |
+ protected void openVideo() { |
+ super.openVideo(); |
+ |
+ mCurrentBufferPercentage = 0; |
+ |
+ if (mMediaController != null) { |
Ted C
2013/12/26 23:06:15
make a one liner here too
|
+ return; |
+ } |
+ mMediaController = new FullScreenMediaController(getContext(), this); |
+ mMediaController.setMediaPlayer(new MediaController.MediaPlayerControl() { |
+ @Override public boolean canPause() { return mCanPause; } |
+ @Override public boolean canSeekBackward() { return mCanSeekBackward; } |
+ @Override public boolean canSeekForward() { return mCanSeekForward; } |
+ @Override public int getAudioSessionId() { return 0; } |
+ @Override public int getBufferPercentage() { return mCurrentBufferPercentage; } |
+ |
+ @Override |
+ public int getCurrentPosition() { |
+ return ContentVideoViewLegacy.this.getCurrentPosition(); |
+ } |
+ |
+ @Override |
+ public int getDuration() { |
+ return ContentVideoViewLegacy.this.getDuration(); |
+ } |
+ |
+ @Override |
+ public boolean isPlaying() { |
+ return ContentVideoViewLegacy.this.isPlaying(); |
+ } |
+ |
+ @Override |
+ public void pause() { |
+ ContentVideoViewLegacy.this.pause(); |
+ } |
+ |
+ @Override |
+ public void seekTo(int pos) { |
+ ContentVideoViewLegacy.this.seekTo(pos); |
+ } |
+ |
+ @Override |
+ public void start() { |
+ ContentVideoViewLegacy.this.start(); |
+ } |
+ }); |
+ mMediaController.setAnchorView(getSurfaceView()); |
+ mMediaController.setEnabled(false); |
+ } |
+ |
+ @Override |
+ protected void onCompletion() { |
+ super.onCompletion(); |
+ if (mMediaController != null) { |
+ mMediaController.hide(); |
+ } |
+ } |
+ |
+ @Override |
+ public boolean onTrackballEvent(MotionEvent ev) { |
+ if (isInPlaybackState() && mMediaController != null) { |
+ toggleMediaControlsVisiblity(); |
+ } |
+ return false; |
+ } |
+ |
+ private void toggleMediaControlsVisiblity() { |
+ if (mMediaController.isShowing()) { |
+ mMediaController.hide(); |
+ } else { |
+ mMediaController.show(); |
+ } |
+ } |
+ |
+ @Override |
+ protected void destroyContentVideoView(boolean nativeViewDestroyed) { |
+ if (mMediaController != null) { |
+ mMediaController.setEnabled(false); |
+ mMediaController.hide(); |
+ mMediaController = null; |
+ } |
+ super.destroyContentVideoView(nativeViewDestroyed); |
+ } |
+ |
+ @Override |
+ public boolean onTouchEvent(MotionEvent ev) { |
+ return true; |
+ } |
+ |
+} |