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

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

Issue 10979047: Upstream fullscreen video implementation for android (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merging latest changes Created 8 years, 2 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
« no previous file with comments | « content/content_common.gypi ('k') | content/renderer/media/webmediaplayer_proxy_impl_android.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 47a42a4a2dd534643f41a09328a021e11c9ad13d..67e8f0bf1b57f879a2255079ad3582c2fb35ccbc 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
@@ -88,7 +88,6 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
private boolean mCanPause;
private boolean mCanSeekBack;
private boolean mCanSeekForward;
- private boolean mHasMediaMetadata = false;
// Native pointer to C++ ContentVideoView object.
private int mNativeContentVideoView = 0;
@@ -103,14 +102,11 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
static String mErrorTitle;
// This view will contain the video.
- private static VideoSurfaceView sVideoSurfaceView;
+ private VideoSurfaceView mVideoSurfaceView;
private Surface mSurface = null;
private static Activity sChromeActivity;
- private static FrameLayout sRootLayout;
- private static ViewGroup sContentContainer;
- private static ViewGroup sControlContainer;
// There are can be at most 1 fullscreen video
// TODO(qinmin): will change this once we move the creation of this class
@@ -138,6 +134,13 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
}
}
+ private Runnable mExitFullscreenRunnable = new Runnable() {
+ @Override
+ public void run() {
+ destroyContentVideoView();
+ }
+ };
+
public ContentVideoView(Context context) {
this(context, 0);
}
@@ -150,7 +153,7 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
mNativeContentVideoView = nativeContentVideoView;
mCurrentBufferPercentage = 0;
- sVideoSurfaceView = new VideoSurfaceView(context);
+ mVideoSurfaceView = new VideoSurfaceView(context);
mCurrentState = isPlaying() ? STATE_PLAYING : STATE_PAUSED;
}
@@ -171,18 +174,19 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
}
void showContentVideoView() {
- this.addView(sVideoSurfaceView,
+ this.addView(mVideoSurfaceView,
new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
Gravity.CENTER));
- sVideoSurfaceView.setOnKeyListener(this);
- sVideoSurfaceView.setOnTouchListener(this);
- sVideoSurfaceView.getHolder().addCallback(this);
- sVideoSurfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
- sVideoSurfaceView.setFocusable(true);
- sVideoSurfaceView.setFocusableInTouchMode(true);
- sVideoSurfaceView.requestFocus();
+ mVideoSurfaceView.setZOrderMediaOverlay(true);
+ mVideoSurfaceView.setOnKeyListener(this);
+ mVideoSurfaceView.setOnTouchListener(this);
+ mVideoSurfaceView.getHolder().addCallback(this);
+ mVideoSurfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
+ mVideoSurfaceView.setFocusable(true);
+ mVideoSurfaceView.setFocusableInTouchMode(true);
+ mVideoSurfaceView.requestFocus();
}
@CalledByNative
@@ -235,7 +239,7 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
mVideoWidth = width;
mVideoHeight = height;
if (mVideoWidth != 0 && mVideoHeight != 0) {
- sVideoSurfaceView.getHolder().setFixedSize(mVideoWidth, mVideoHeight);
+ mVideoSurfaceView.getHolder().setFixedSize(mVideoWidth, mVideoHeight);
}
}
@@ -261,7 +265,6 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
mCanPause = canPause;
mCanSeekBack = canSeekBack;
mCanSeekForward = canSeekForward;
- mHasMediaMetadata = true;
if (mMediaController != null) {
mMediaController.setEnabled(true);
@@ -278,19 +281,19 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
public void destroyNativeView() {
if (mNativeContentVideoView != 0) {
mNativeContentVideoView = 0;
+ destroyContentVideoView();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
- sVideoSurfaceView.setFocusable(true);
- sVideoSurfaceView.setFocusableInTouchMode(true);
+ mVideoSurfaceView.setFocusable(true);
+ mVideoSurfaceView.setFocusableInTouchMode(true);
if (isInPlaybackState() && mMediaController != null) {
if (mMediaController.isShowing()) {
// ensure the controller will get repositioned later
mMediaController.hide();
}
- mMediaController.show();
}
}
@@ -304,13 +307,11 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
public void surfaceDestroyed(SurfaceHolder holder) {
mSurfaceHolder = null;
if (mNativeContentVideoView != 0) {
- nativeDestroyContentVideoView(mNativeContentVideoView, true);
- destroyNativeView();
- }
- if (mMediaController != null) {
- mMediaController.hide();
- mMediaController = null;
+ nativeExitFullscreen(mNativeContentVideoView, true);
+ mNativeContentVideoView = 0;
+ post(mExitFullscreenRunnable);
}
+ removeMediaController();
}
public void setMediaController(MediaController controller) {
@@ -324,8 +325,8 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
private void attachMediaController() {
if (mMediaController != null) {
mMediaController.setMediaPlayer(this);
- mMediaController.setAnchorView(sVideoSurfaceView);
- mMediaController.setEnabled(mHasMediaMetadata);
+ mMediaController.setAnchorView(mVideoSurfaceView);
+ mMediaController.setEnabled(true);
}
}
@@ -337,38 +338,12 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
}
mCurrentBufferPercentage = 0;
if (mNativeContentVideoView != 0) {
- int renderHandle = nativeGetRenderHandle(mNativeContentVideoView);
- if (renderHandle == 0) {
- nativeSetSurface(mNativeContentVideoView,
- mSurfaceHolder.getSurface(),
- nativeGetRouteId(mNativeContentVideoView),
- nativeGetPlayerId(mNativeContentVideoView));
- return;
- }
- ISandboxedProcessService service =
- SandboxedProcessLauncher.getSandboxedService(renderHandle);
- if (service == null) {
- Log.e(TAG, "Unable to get SandboxedProcessService from pid.");
- return;
- }
- try {
- service.setSurface(
- SET_VIDEO_SURFACE_TEXTURE,
- mSurfaceHolder.getSurface(),
- nativeGetRouteId(mNativeContentVideoView),
- nativeGetPlayerId(mNativeContentVideoView));
- } catch (RemoteException e) {
- Log.e(TAG, "Unable to call setSurfaceTexture: " + e);
- return;
- }
+ nativeSetSurface(mNativeContentVideoView,
+ mSurfaceHolder.getSurface());
}
requestLayout();
invalidate();
setMediaController(new MediaController(getChromeActivity()));
-
- if (mMediaController != null) {
- mMediaController.show();
- }
}
}
@@ -435,7 +410,7 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
}
} else if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
if (mNativeContentVideoView != 0) {
- nativeDestroyContentVideoView(mNativeContentVideoView, false);
+ nativeExitFullscreen(mNativeContentVideoView, false);
destroyNativeView();
}
return true;
@@ -530,32 +505,27 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
@CalledByNative
public static ContentVideoView createContentVideoView(int nativeContentVideoView) {
+ if (sContentVideoView != null)
+ return sContentVideoView;
+
if (getChromeActivity() != null) {
- ContentVideoView videoView = new ContentVideoView(getChromeActivity(),
+ sContentVideoView = new ContentVideoView(getChromeActivity(),
nativeContentVideoView);
- if (sContentVideoView != null) {
- return videoView;
- }
-
- sContentVideoView = videoView;
-
- sContentContainer.setVisibility(View.GONE);
- sControlContainer.setVisibility(View.GONE);
sChromeActivity.getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
- sChromeActivity.getWindow().addContentView(videoView,
+ sChromeActivity.getWindow().addContentView(sContentVideoView,
new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT,
Gravity.CENTER));
- videoView.setBackgroundColor(Color.BLACK);
+ sContentVideoView.setBackgroundColor(Color.BLACK);
sContentVideoView.showContentVideoView();
- videoView.setVisibility(View.VISIBLE);
- return videoView;
+ sContentVideoView.setVisibility(View.VISIBLE);
+ return sContentVideoView;
}
return null;
}
@@ -564,23 +534,27 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
return sChromeActivity;
}
- public static void showFullScreen(ContentVideoView fullscreenView) {
+ public void removeMediaController() {
+ if (mMediaController != null) {
+ mMediaController.setEnabled(false);
+ mMediaController.hide();
+ mMediaController = null;
+ }
+ }
+ public void removeSurfaceView() {
+ removeView(mVideoSurfaceView);
+ mVideoSurfaceView = null;
}
@CalledByNative
public static void destroyContentVideoView() {
sChromeActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
if (sContentVideoView != null) {
- sContentVideoView.removeView(sVideoSurfaceView);
- sVideoSurfaceView = null;
+ sContentVideoView.removeMediaController();
+ sContentVideoView.removeSurfaceView();
sContentVideoView.setVisibility(View.GONE);
- sRootLayout.removeView(sContentVideoView);
}
-
- sContentContainer.setVisibility(View.VISIBLE);
- sControlContainer.setVisibility(View.VISIBLE);
-
sContentVideoView = null;
}
@@ -588,17 +562,13 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
return sContentVideoView;
}
- public static void registerChromeActivity(Activity activity, FrameLayout rootLayout,
- ViewGroup controlContainer, ViewGroup contentContainer) {
+ public static void registerChromeActivity(Activity activity) {
sChromeActivity = activity;
- sRootLayout = rootLayout;
- sControlContainer = controlContainer;
- sContentContainer = contentContainer;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
- return false;
+ return true;
}
@Override
@@ -610,20 +580,15 @@ public class ContentVideoView extends FrameLayout implements MediaPlayerControl,
return super.onKeyDown(keyCode, event);
}
- private native void nativeDestroyContentVideoView(int nativeContentVideoView,
- boolean relaseMediaPlayer);
+ private native void nativeExitFullscreen(int nativeContentVideoView, boolean relaseMediaPlayer);
private native int nativeGetCurrentPosition(int nativeContentVideoView);
private native int nativeGetDurationInMilliSeconds(int nativeContentVideoView);
private native void nativeUpdateMediaMetadata(int nativeContentVideoView);
private native int nativeGetVideoWidth(int nativeContentVideoView);
private native int nativeGetVideoHeight(int nativeContentVideoView);
- private native int nativeGetPlayerId(int nativeContentVideoView);
- private native int nativeGetRouteId(int nativeContentVideoView);
- private native int nativeGetRenderHandle(int nativeContentVideoView);
private native boolean nativeIsPlaying(int nativeContentVideoView);
private native void nativePause(int nativeContentVideoView);
private native void nativePlay(int nativeContentVideoView);
private native void nativeSeekTo(int nativeContentVideoView, int msec);
- private native void nativeSetSurface(int nativeContentVideoView,
- Surface surface, int routeId, int playerId);
+ private native void nativeSetSurface(int nativeContentVideoView, Surface surface);
}
« no previous file with comments | « content/content_common.gypi ('k') | content/renderer/media/webmediaplayer_proxy_impl_android.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698