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 e14bf04f8f95cf466bb51b9c4a1fea93a6af61fa..6a7970c73acac03feadd144e1799f1edf6a87786 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); |
} |
@@ -183,22 +177,21 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl, |
} |
}; |
- 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); |
+ mClient.onShowCustomView(this); |
+ setBackgroundColor(Color.BLACK); |
+ showContentVideoView(); |
+ setVisibility(View.VISIBLE); |
} |
- 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); |
@@ -218,11 +211,11 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl, |
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); |
@@ -375,10 +368,10 @@ 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)); |
+ setMediaController(new FullScreenMediaController(getContext(), this)); |
if (mNativeContentVideoView != 0) { |
nativeUpdateMediaMetadata(mNativeContentVideoView); |
} |
@@ -475,6 +468,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 +478,7 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl, |
} |
} |
+ @Override |
public void pause() { |
if (isInPlaybackState()) { |
if (isPlaying()) { |
@@ -496,6 +491,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 +508,7 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl, |
return mDuration; |
} |
+ @Override |
public int getCurrentPosition() { |
if (isInPlaybackState() && mNativeContentVideoView != 0) { |
return nativeGetCurrentPosition(mNativeContentVideoView); |
@@ -519,47 +516,44 @@ 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; |
} |
@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; |
- } |
- return null; |
+ private static ContentVideoView createContentVideoView(Context context, |
qinmin
2013/04/12 16:41:09
move context to the next line so all params stay i
michaelbai
2013/04/18 18:21:59
Done.
|
+ int nativeContentVideoView, ContentVideoViewClient client) { |
+ ThreadUtils.assertOnUiThread(); |
+ if (client == null) return null; |
joth
2013/04/12 17:56:24
can this reasonably happen? Seems like an error, a
joth
2013/04/13 01:18:35
hmm one option is to just require 'context instanc
michaelbai
2013/04/18 18:21:59
Actually, this couldn't happen, if the webview is
michaelbai
2013/04/18 18:21:59
Done.
michaelbai
2013/04/18 18:21:59
Removed the null check for client.
On 2013/04/12
|
+ return new ContentVideoView(context, nativeContentVideoView, client); |
} |
public void removeMediaController() { |
@@ -578,23 +572,15 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl, |
} |
@CalledByNative |
- public static void destroyContentVideoView() { |
- sDelegate.onDestroyContentVideoView(); |
- if (sContentVideoView != null) { |
- sContentVideoView.removeMediaController(); |
- sContentVideoView.removeSurfaceView(); |
- sContentVideoView.setVisibility(View.GONE); |
- } |
- sContentVideoView = null; |
+ public void destroyContentVideoView() { |
+ mClient.onDestroyContentVideoView(); |
+ removeMediaController(); |
+ removeSurfaceView(); |
+ setVisibility(View.GONE); |
} |
public static ContentVideoView getContentVideoView() { |
- return sContentVideoView; |
- } |
- |
- public static void registerContentVideoViewContextDelegate( |
- ContentVideoViewContextDelegate delegate) { |
- sDelegate = delegate; |
+ return nativeGetSingletonJavaContentVideoView(); |
} |
@Override |
@@ -611,6 +597,7 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl, |
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); |