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

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

Issue 141533006: [Android] Move the java content/ package to content_public/ to start the split. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Small fixes and findbugs line update Created 6 years, 11 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
deleted file mode 100644
index a1c2f1492ec1b3c39295bfac80f6b53c224d5767..0000000000000000000000000000000000000000
--- a/content/public/android/java/src/org/chromium/content/browser/ContentVideoView.java
+++ /dev/null
@@ -1,440 +0,0 @@
-// Copyright 2012 The Chromium Authors. All rights reserved.
-// 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.app.Activity;
-import android.app.AlertDialog;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.util.Log;
-import android.view.Gravity;
-import android.view.KeyEvent;
-import android.view.Surface;
-import android.view.SurfaceHolder;
-import android.view.SurfaceView;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
-import android.widget.LinearLayout;
-import android.widget.ProgressBar;
-import android.widget.TextView;
-
-import org.chromium.base.CalledByNative;
-import org.chromium.base.JNINamespace;
-import org.chromium.base.ThreadUtils;
-
-/**
- * This class implements accelerated fullscreen video playback using surface view.
- */
-@JNINamespace("content")
-public class ContentVideoView extends FrameLayout implements SurfaceHolder.Callback {
-
- private static final String TAG = "ContentVideoView";
-
- /* Do not change these values without updating their counterparts
- * in include/media/mediaplayer.h!
- */
- private static final int MEDIA_NOP = 0; // interface test message
- private static final int MEDIA_PREPARED = 1;
- private static final int MEDIA_PLAYBACK_COMPLETE = 2;
- private static final int MEDIA_BUFFERING_UPDATE = 3;
- private static final int MEDIA_SEEK_COMPLETE = 4;
- private static final int MEDIA_SET_VIDEO_SIZE = 5;
- private static final int MEDIA_ERROR = 100;
- private static final int MEDIA_INFO = 200;
-
- /**
- * Keep these error codes in sync with the code we defined in
- * MediaPlayerListener.java.
- */
- public static final int MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 2;
- public static final int MEDIA_ERROR_INVALID_CODE = 3;
-
- // all possible internal states
- private static final int STATE_ERROR = -1;
- private static final int STATE_IDLE = 0;
- private static final int STATE_PLAYING = 1;
- private static final int STATE_PAUSED = 2;
- private static final int STATE_PLAYBACK_COMPLETED = 3;
-
- private SurfaceHolder mSurfaceHolder;
- private int mVideoWidth;
- private int mVideoHeight;
- private int mDuration;
-
- // Native pointer to C++ ContentVideoView object.
- private long mNativeContentVideoView;
-
- // webkit should have prepared the media
- private int mCurrentState = STATE_IDLE;
-
- // Strings for displaying media player errors
- private String mPlaybackErrorText;
- private String mUnknownErrorText;
- private String mErrorButton;
- private String mErrorTitle;
- private String mVideoLoadingText;
-
- // This view will contain the video.
- private VideoSurfaceView mVideoSurfaceView;
-
- // Progress view when the video is loading.
- private View mProgressView;
-
- private final ContentVideoViewClient mClient;
-
- private class VideoSurfaceView extends SurfaceView {
-
- public VideoSurfaceView(Context context) {
- super(context);
- }
-
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- int width = getDefaultSize(mVideoWidth, widthMeasureSpec);
- int height = getDefaultSize(mVideoHeight, heightMeasureSpec);
- if (mVideoWidth > 0 && mVideoHeight > 0) {
- if (mVideoWidth * height > width * mVideoHeight) {
- height = width * mVideoHeight / mVideoWidth;
- } else if (mVideoWidth * height < width * mVideoHeight) {
- width = height * mVideoWidth / mVideoHeight;
- }
- }
- setMeasuredDimension(width, height);
- }
- }
-
- private static class ProgressView extends LinearLayout {
-
- private final ProgressBar mProgressBar;
- private final TextView mTextView;
-
- public ProgressView(Context context, String videoLoadingText) {
- super(context);
- setOrientation(LinearLayout.VERTICAL);
- setLayoutParams(new LinearLayout.LayoutParams(
- LinearLayout.LayoutParams.WRAP_CONTENT,
- LinearLayout.LayoutParams.WRAP_CONTENT));
- mProgressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleLarge);
- mTextView = new TextView(context);
- mTextView.setText(videoLoadingText);
- addView(mProgressBar);
- addView(mTextView);
- }
- }
-
- private final Runnable mExitFullscreenRunnable = new Runnable() {
- @Override
- public void run() {
- exitFullscreen(true);
- }
- };
-
- protected ContentVideoView(Context context, long nativeContentVideoView,
- ContentVideoViewClient client) {
- super(context);
- mNativeContentVideoView = nativeContentVideoView;
- mClient = client;
- initResources(context);
- mVideoSurfaceView = new VideoSurfaceView(context);
- showContentVideoView();
- setVisibility(View.VISIBLE);
- mClient.onShowCustomView(this);
- }
-
- private void initResources(Context context) {
- if (mPlaybackErrorText != null) return;
- mPlaybackErrorText = context.getString(
- org.chromium.content.R.string.media_player_error_text_invalid_progressive_playback);
- mUnknownErrorText = context.getString(
- org.chromium.content.R.string.media_player_error_text_unknown);
- mErrorButton = context.getString(
- org.chromium.content.R.string.media_player_error_button);
- mErrorTitle = context.getString(
- org.chromium.content.R.string.media_player_error_title);
- mVideoLoadingText = context.getString(
- org.chromium.content.R.string.media_player_loading_video);
- }
-
- protected void showContentVideoView() {
- mVideoSurfaceView.getHolder().addCallback(this);
- this.addView(mVideoSurfaceView, new FrameLayout.LayoutParams(
- ViewGroup.LayoutParams.MATCH_PARENT,
- ViewGroup.LayoutParams.MATCH_PARENT,
- Gravity.CENTER));
-
- mProgressView = mClient.getVideoLoadingProgressView();
- if (mProgressView == null) {
- mProgressView = new ProgressView(getContext(), mVideoLoadingText);
- }
- this.addView(mProgressView, new FrameLayout.LayoutParams(
- ViewGroup.LayoutParams.WRAP_CONTENT,
- ViewGroup.LayoutParams.WRAP_CONTENT,
- Gravity.CENTER));
- }
-
- protected SurfaceView getSurfaceView() {
- return mVideoSurfaceView;
- }
-
- @CalledByNative
- public void onMediaPlayerError(int errorType) {
- Log.d(TAG, "OnMediaPlayerError: " + errorType);
- if (mCurrentState == STATE_ERROR || mCurrentState == STATE_PLAYBACK_COMPLETED) {
- return;
- }
-
- // Ignore some invalid error codes.
- if (errorType == MEDIA_ERROR_INVALID_CODE) {
- return;
- }
-
- mCurrentState = STATE_ERROR;
-
- /* Pop up an error dialog so the user knows that
- * something bad has happened. Only try and pop up the dialog
- * if we're attached to a window. When we're going away and no
- * longer have a window, don't bother showing the user an error.
- *
- * TODO(qinmin): We need to review whether this Dialog is OK with
- * the rest of the browser UI elements.
- */
- if (getWindowToken() != null) {
- String message;
-
- if (errorType == MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK) {
- message = mPlaybackErrorText;
- } else {
- message = mUnknownErrorText;
- }
-
- try {
- new AlertDialog.Builder(getContext())
- .setTitle(mErrorTitle)
- .setMessage(message)
- .setPositiveButton(mErrorButton,
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int whichButton) {
- /* Inform that the video is over.
- */
- onCompletion();
- }
- })
- .setCancelable(false)
- .show();
- } catch (RuntimeException e) {
- Log.e(TAG, "Cannot show the alert dialog, error message: " + message, e);
- }
- }
- }
-
- @CalledByNative
- private void onVideoSizeChanged(int width, int height) {
- mVideoWidth = width;
- mVideoHeight = height;
- // This will trigger the SurfaceView.onMeasure() call.
- mVideoSurfaceView.getHolder().setFixedSize(mVideoWidth, mVideoHeight);
- }
-
- @CalledByNative
- protected void onBufferingUpdate(int percent) {
- }
-
- @CalledByNative
- private void onPlaybackComplete() {
- onCompletion();
- }
-
- @CalledByNative
- protected void onUpdateMediaMetadata(
- int videoWidth,
- int videoHeight,
- int duration,
- boolean canPause,
- boolean canSeekBack,
- boolean canSeekForward) {
- mDuration = duration;
- mProgressView.setVisibility(View.GONE);
- mCurrentState = isPlaying() ? STATE_PLAYING : STATE_PAUSED;
- onVideoSizeChanged(videoWidth, videoHeight);
- }
-
- @Override
- public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
- }
-
- @Override
- public void surfaceCreated(SurfaceHolder holder) {
- mSurfaceHolder = holder;
- openVideo();
- }
-
- @Override
- public void surfaceDestroyed(SurfaceHolder holder) {
- if (mNativeContentVideoView != 0) {
- nativeSetSurface(mNativeContentVideoView, null);
- }
- mSurfaceHolder = null;
- post(mExitFullscreenRunnable);
- }
-
- @CalledByNative
- protected void openVideo() {
- if (mSurfaceHolder != null) {
- mCurrentState = STATE_IDLE;
- if (mNativeContentVideoView != 0) {
- nativeRequestMediaMetadata(mNativeContentVideoView);
- nativeSetSurface(mNativeContentVideoView,
- mSurfaceHolder.getSurface());
- }
- }
- }
-
- protected void onCompletion() {
- mCurrentState = STATE_PLAYBACK_COMPLETED;
- }
-
-
- protected boolean isInPlaybackState() {
- return (mCurrentState != STATE_ERROR && mCurrentState != STATE_IDLE);
- }
-
- protected void start() {
- if (isInPlaybackState()) {
- if (mNativeContentVideoView != 0) {
- nativePlay(mNativeContentVideoView);
- }
- mCurrentState = STATE_PLAYING;
- }
- }
-
- protected void pause() {
- if (isInPlaybackState()) {
- if (isPlaying()) {
- if (mNativeContentVideoView != 0) {
- nativePause(mNativeContentVideoView);
- }
- mCurrentState = STATE_PAUSED;
- }
- }
- }
-
- // cache duration as mDuration for faster access
- protected int getDuration() {
- if (isInPlaybackState()) {
- if (mDuration > 0) {
- return mDuration;
- }
- if (mNativeContentVideoView != 0) {
- mDuration = nativeGetDurationInMilliSeconds(mNativeContentVideoView);
- } else {
- mDuration = 0;
- }
- return mDuration;
- }
- mDuration = -1;
- return mDuration;
- }
-
- protected int getCurrentPosition() {
- if (isInPlaybackState() && mNativeContentVideoView != 0) {
- return nativeGetCurrentPosition(mNativeContentVideoView);
- }
- return 0;
- }
-
- protected void seekTo(int msec) {
- if (mNativeContentVideoView != 0) {
- nativeSeekTo(mNativeContentVideoView, msec);
- }
- }
-
- protected boolean isPlaying() {
- return mNativeContentVideoView != 0 && nativeIsPlaying(mNativeContentVideoView);
- }
-
- @CalledByNative
- private static ContentVideoView createContentVideoView(
- Context context, long nativeContentVideoView, ContentVideoViewClient client,
- boolean legacy) {
- 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;
- }
- if (legacy) {
- return new ContentVideoViewLegacy(context, nativeContentVideoView, client);
- } else {
- return new ContentVideoView(context, nativeContentVideoView, client);
- }
- }
-
- public void removeSurfaceView() {
- removeView(mVideoSurfaceView);
- removeView(mProgressView);
- mVideoSurfaceView = null;
- mProgressView = null;
- }
-
- public void exitFullscreen(boolean relaseMediaPlayer) {
- destroyContentVideoView(false);
- if (mNativeContentVideoView != 0) {
- nativeExitFullscreen(mNativeContentVideoView, relaseMediaPlayer);
- mNativeContentVideoView = 0;
- }
- }
-
- @CalledByNative
- private void onExitFullscreen() {
- exitFullscreen(false);
- }
-
- /**
- * This method shall only be called by native and exitFullscreen,
- * To exit fullscreen, use exitFullscreen in Java.
- */
- @CalledByNative
- protected void destroyContentVideoView(boolean nativeViewDestroyed) {
- if (mVideoSurfaceView != null) {
- removeSurfaceView();
- setVisibility(View.GONE);
-
- // To prevent re-entrance, call this after removeSurfaceView.
- mClient.onDestroyContentVideoView();
- }
- if (nativeViewDestroyed) {
- mNativeContentVideoView = 0;
- }
- }
-
- public static ContentVideoView getContentVideoView() {
- return nativeGetSingletonJavaContentVideoView();
- }
-
- @Override
- public boolean onKeyUp(int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- exitFullscreen(false);
- return true;
- }
- return super.onKeyUp(keyCode, event);
- }
-
- private static native ContentVideoView nativeGetSingletonJavaContentVideoView();
- private native void nativeExitFullscreen(long nativeContentVideoView,
- boolean relaseMediaPlayer);
- private native int nativeGetCurrentPosition(long nativeContentVideoView);
- private native int nativeGetDurationInMilliSeconds(long nativeContentVideoView);
- private native void nativeRequestMediaMetadata(long nativeContentVideoView);
- private native int nativeGetVideoWidth(long nativeContentVideoView);
- private native int nativeGetVideoHeight(long nativeContentVideoView);
- private native boolean nativeIsPlaying(long nativeContentVideoView);
- private native void nativePause(long nativeContentVideoView);
- private native void nativePlay(long nativeContentVideoView);
- private native void nativeSeekTo(long nativeContentVideoView, int msec);
- private native void nativeSetSurface(long nativeContentVideoView, Surface surface);
-}

Powered by Google App Engine
This is Rietveld 408576698