Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(316)

Unified Diff: content/public/android/java/src/org/chromium/content/browser/ContentVideoView.java

Issue 13669003: Refactoring ContentVideoViewContextDelegate.java (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix tests Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/public/android/java/src/org/chromium/content/browser/ContentVideoView.java
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentVideoView.java b/content/public/android/java/src/org/chromium/content/browser/ContentVideoView.java
index b09a22c561c86cf004de9b91c69c84ce37d507e5..a3e1121be4895f1e3b06888b76ab0485b50df864 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ContentVideoView.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ContentVideoView.java
@@ -32,6 +32,7 @@ import java.lang.ref.WeakReference;
import org.chromium.base.CalledByNative;
import org.chromium.base.JNINamespace;
+import org.chromium.base.ThreadUtils;
import org.chromium.content.common.IChildProcessService;
import org.chromium.content.R;
@@ -66,28 +67,28 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
private static final int STATE_PAUSED = 2;
private static final int STATE_PLAYBACK_COMPLETED = 3;
- private SurfaceHolder mSurfaceHolder = null;
- private int mVideoWidth = 0;
- private int mVideoHeight = 0;
+ private SurfaceHolder mSurfaceHolder;
+ private int mVideoWidth;
+ private int mVideoHeight;
private int mCurrentBufferPercentage;
private int mDuration;
- private MediaController mMediaController = null;
+ private MediaController mMediaController;
private boolean mCanPause;
private boolean mCanSeekBack;
private boolean mCanSeekForward;
// Native pointer to C++ ContentVideoView object.
- private int mNativeContentVideoView = 0;
+ private int mNativeContentVideoView;
// webkit should have prepared the media
private int mCurrentState = STATE_IDLE;
// Strings for displaying media player errors
- static String mPlaybackErrorText;
- static String mUnknownErrorText;
- static String mErrorButton;
- static String mErrorTitle;
- static String mVideoLoadingText;
+ private String mPlaybackErrorText;
+ private String mUnknownErrorText;
+ private String mErrorButton;
+ private String mErrorTitle;
+ private String mVideoLoadingText;
// This view will contain the video.
private VideoSurfaceView mVideoSurfaceView;
@@ -95,16 +96,9 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
// Progress view when the video is loading.
private View mProgressView;
- private Surface mSurface = null;
+ private Surface mSurface;
- // There are can be at most 1 fullscreen video
- // TODO(qinmin): will change this once we move the creation of this class
- // to the host application
- private static ContentVideoView sContentVideoView = null;
-
- // The delegate will follow sContentVideoView. We would need to
- // move this to an instance variable if we allow multiple ContentVideoViews.
- private static ContentVideoViewContextDelegate sDelegate = null;
+ private ContentVideoViewClient mClient;
private class VideoSurfaceView extends SurfaceView {
@@ -136,7 +130,7 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
private ProgressBar mProgressBar;
private TextView mTextView;
- public ProgressView(Context context) {
+ public ProgressView(Context context, String videoLoadingText) {
super(context);
setOrientation(LinearLayout.VERTICAL);
setLayoutParams(new LinearLayout.LayoutParams(
@@ -144,7 +138,7 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
LinearLayout.LayoutParams.WRAP_CONTENT));
mProgressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleLarge);
mTextView = new TextView(context);
- mTextView.setText(mVideoLoadingText);
+ mTextView.setText(videoLoadingText);
addView(mProgressBar);
addView(mTextView);
}
@@ -179,26 +173,25 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
private Runnable mExitFullscreenRunnable = new Runnable() {
@Override
public void run() {
- destroyContentVideoView();
+ exitFullscreen(true);
}
};
- public ContentVideoView(Context context) {
- this(context, 0);
- }
-
- private ContentVideoView(Context context, int nativeContentVideoView) {
+ private ContentVideoView(Context context, int nativeContentVideoView,
+ ContentVideoViewClient client) {
super(context);
- initResources(context);
-
- if (nativeContentVideoView == 0) return;
mNativeContentVideoView = nativeContentVideoView;
-
+ mClient = client;
+ initResources(context);
mCurrentBufferPercentage = 0;
mVideoSurfaceView = new VideoSurfaceView(context);
+ setBackgroundColor(Color.BLACK);
+ showContentVideoView();
+ setVisibility(View.VISIBLE);
+ mClient.onShowCustomView(this);
}
- private static void initResources(Context context) {
+ private void initResources(Context context) {
if (mPlaybackErrorText != null) return;
mPlaybackErrorText = context.getString(
org.chromium.content.R.string.media_player_error_text_invalid_progressive_playback);
@@ -212,17 +205,17 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
org.chromium.content.R.string.media_player_loading_video);
}
- void showContentVideoView() {
+ private void showContentVideoView() {
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
Gravity.CENTER);
this.addView(mVideoSurfaceView, layoutParams);
- View progressView = sDelegate.getVideoLoadingProgressView();
+ View progressView = mClient.getVideoLoadingProgressView();
if (progressView != null) {
mProgressView = progressView;
} else {
- mProgressView = new ProgressView(getContext());
+ mProgressView = new ProgressView(getContext(), mVideoLoadingText);
}
this.addView(mProgressView, layoutParams);
mVideoSurfaceView.setZOrderOnTop(true);
@@ -281,7 +274,7 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
}
@CalledByNative
- public void onVideoSizeChanged(int width, int height) {
+ private void onVideoSizeChanged(int width, int height) {
mVideoWidth = width;
mVideoHeight = height;
if (mVideoWidth != 0 && mVideoHeight != 0) {
@@ -290,17 +283,17 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
}
@CalledByNative
- public void onBufferingUpdate(int percent) {
+ private void onBufferingUpdate(int percent) {
mCurrentBufferPercentage = percent;
}
@CalledByNative
- public void onPlaybackComplete() {
+ private void onPlaybackComplete() {
onCompletion();
}
@CalledByNative
- public void updateMediaMetadata(
+ private void onUpdateMediaMetadata(
int videoWidth,
int videoHeight,
int duration,
@@ -325,13 +318,6 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
onVideoSizeChanged(videoWidth, videoHeight);
}
- public void destroyNativeView() {
- if (mNativeContentVideoView != 0) {
- mNativeContentVideoView = 0;
- destroyContentVideoView();
- }
- }
-
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
mVideoSurfaceView.setFocusable(true);
@@ -349,16 +335,14 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
- mSurfaceHolder = null;
if (mNativeContentVideoView != 0) {
- nativeExitFullscreen(mNativeContentVideoView, true);
- mNativeContentVideoView = 0;
- post(mExitFullscreenRunnable);
+ nativeSetSurface(mNativeContentVideoView, null);
}
- removeMediaController();
+ mSurfaceHolder = null;
+ post(mExitFullscreenRunnable);
}
- public void setMediaController(MediaController controller) {
+ private void setMediaController(MediaController controller) {
if (mMediaController != null) {
mMediaController.hide();
}
@@ -375,17 +359,15 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
}
@CalledByNative
- public void openVideo() {
+ private void openVideo() {
if (mSurfaceHolder != null) {
mCurrentState = STATE_IDLE;
- setMediaController(new FullScreenMediaController(sDelegate.getContext(), this));
- if (mNativeContentVideoView != 0) {
- nativeUpdateMediaMetadata(mNativeContentVideoView);
- }
mCurrentBufferPercentage = 0;
+ setMediaController(new FullScreenMediaController(getContext(), this));
if (mNativeContentVideoView != 0) {
+ nativeUpdateMediaMetadata(mNativeContentVideoView);
nativeSetSurface(mNativeContentVideoView,
- mSurfaceHolder.getSurface());
+ mSurfaceHolder.getSurface());
}
}
}
@@ -452,10 +434,7 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
toggleMediaControlsVisiblity();
}
} else if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
- if (mNativeContentVideoView != 0) {
- nativeExitFullscreen(mNativeContentVideoView, false);
- destroyNativeView();
- }
+ exitFullscreen(false);
return true;
} else if (keyCode == KeyEvent.KEYCODE_MENU || keyCode == KeyEvent.KEYCODE_SEARCH) {
return true;
@@ -475,6 +454,7 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
return (mCurrentState != STATE_ERROR && mCurrentState != STATE_IDLE);
}
+ @Override
public void start() {
if (isInPlaybackState()) {
if (mNativeContentVideoView != 0) {
@@ -484,6 +464,7 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
}
}
+ @Override
public void pause() {
if (isInPlaybackState()) {
if (isPlaying()) {
@@ -496,6 +477,7 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
}
// cache duration as mDuration for faster access
+ @Override
public int getDuration() {
if (isInPlaybackState()) {
if (mDuration > 0) {
@@ -512,6 +494,7 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
return mDuration;
}
+ @Override
public int getCurrentPosition() {
if (isInPlaybackState() && mNativeContentVideoView != 0) {
return nativeGetCurrentPosition(mNativeContentVideoView);
@@ -519,27 +502,34 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
return 0;
}
+ @Override
public void seekTo(int msec) {
if (mNativeContentVideoView != 0) {
nativeSeekTo(mNativeContentVideoView, msec);
}
}
+ @Override
public boolean isPlaying() {
return mNativeContentVideoView != 0 && nativeIsPlaying(mNativeContentVideoView);
}
+ @Override
public int getBufferPercentage() {
return mCurrentBufferPercentage;
}
+
+ @Override
public boolean canPause() {
return mCanPause;
}
+ @Override
public boolean canSeekBackward() {
return mCanSeekBack;
}
+ @Override
public boolean canSeekForward() {
return mCanSeekForward;
}
@@ -549,24 +539,18 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
}
@CalledByNative
- public static ContentVideoView createContentVideoView(int nativeContentVideoView) {
- if (sContentVideoView != null)
- return sContentVideoView;
-
- if (sDelegate != null && sDelegate.getContext() != null) {
- sContentVideoView = new ContentVideoView(sDelegate.getContext(),
- nativeContentVideoView);
-
- sDelegate.onShowCustomView(sContentVideoView);
- sContentVideoView.setBackgroundColor(Color.BLACK);
- sContentVideoView.showContentVideoView();
- sContentVideoView.setVisibility(View.VISIBLE);
- return sContentVideoView;
+ private static ContentVideoView createContentVideoView(
+ Context context, int nativeContentVideoView, ContentVideoViewClient client) {
+ ThreadUtils.assertOnUiThread();
+ // The context needs be Activity to create the ContentVideoView correctly.
+ if (!(context instanceof Activity)) {
+ Log.w(TAG, "Wrong type of context, can't create fullscreen video");
+ return null;
}
- return null;
+ return new ContentVideoView(context, nativeContentVideoView, client);
}
- public void removeMediaController() {
+ private void removeMediaController() {
if (mMediaController != null) {
mMediaController.setEnabled(false);
mMediaController.hide();
@@ -581,31 +565,36 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
mProgressView = null;
}
- @CalledByNative
- public static void destroyContentVideoView() {
- sDelegate.onDestroyContentVideoView();
- if (sContentVideoView != null) {
- sContentVideoView.removeMediaController();
- sContentVideoView.removeSurfaceView();
- sContentVideoView.setVisibility(View.GONE);
+ public void exitFullscreen(boolean relaseMediaPlayer) {
+ destroyContentVideoView();
+ if (mNativeContentVideoView != 0) {
+ nativeExitFullscreen(mNativeContentVideoView, relaseMediaPlayer);
+ mNativeContentVideoView = 0;
}
- sContentVideoView = null;
}
@CalledByNative
public static void keepScreenOnContentVideoView(boolean screenOn) {
- if (sDelegate != null) {
- sDelegate.keepScreenOn(screenOn);
+ ContentVideoView content_video_view = getContentVideoView();
+ if ( content_video_view != null) {
+ content_video_view.mClient.keepScreenOn(screenOn);
}
}
- public static ContentVideoView getContentVideoView() {
- return sContentVideoView;
+ /**
+ * This method shall only be called by native and exitFullscreen,
+ * To exit fullscreen, use exitFullscreen in Java.
+ */
+ @CalledByNative
+ private void destroyContentVideoView() {
+ mClient.onDestroyContentVideoView();
+ removeMediaController();
+ removeSurfaceView();
+ setVisibility(View.GONE);
}
- public static void registerContentVideoViewContextDelegate(
- ContentVideoViewContextDelegate delegate) {
- sDelegate = delegate;
+ public static ContentVideoView getContentVideoView() {
+ return nativeGetSingletonJavaContentVideoView();
}
@Override
@@ -616,12 +605,13 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
- destroyContentVideoView();
+ exitFullscreen(false);
return true;
}
return super.onKeyDown(keyCode, event);
}
+ private static native ContentVideoView nativeGetSingletonJavaContentVideoView();
private native void nativeExitFullscreen(int nativeContentVideoView, boolean relaseMediaPlayer);
private native int nativeGetCurrentPosition(int nativeContentVideoView);
private native int nativeGetDurationInMilliSeconds(int nativeContentVideoView);

Powered by Google App Engine
This is Rietveld 408576698