| Index: chrome/android/java/src/org/chromium/chrome/browser/media/remote/RemoteMediaPlayerBridge.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/remote/RemoteMediaPlayerBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/media/remote/RemoteMediaPlayerBridge.java
|
| index 7598ff71b7b3c2fbfdae59e0e031690c6ab85a04..0bf0d0bc33eba17feb91b1747eca12355803f634 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/media/remote/RemoteMediaPlayerBridge.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/media/remote/RemoteMediaPlayerBridge.java
|
| @@ -8,7 +8,6 @@ import android.annotation.SuppressLint;
|
| import android.content.Context;
|
| import android.graphics.Bitmap;
|
| import android.media.MediaPlayer;
|
| -import android.net.Uri;
|
| import android.os.Build;
|
| import android.util.Log;
|
|
|
| @@ -37,10 +36,15 @@ public class RemoteMediaPlayerBridge extends MediaPlayerBridge {
|
| private MediaPlayer.OnPreparedListener mOnPreparedListener;
|
|
|
| private final MediaRouteController mRouteController;
|
| - private final String mSourceUrl;
|
| private final String mFrameUrl;
|
| private final boolean mDebug;
|
| + private final String mSourceUrl;
|
| + private final String mUserAgent;
|
| private Bitmap mPosterBitmap;
|
| + private String mCookies;
|
| + private boolean mPauseRequested;
|
| + private boolean mSeekRequested;
|
| + private int mSeekLocation;
|
|
|
| // mActive is true when the Chrome is playing, or preparing to play, this player's video
|
| // remotely.
|
| @@ -48,7 +52,7 @@ public class RemoteMediaPlayerBridge extends MediaPlayerBridge {
|
|
|
| private static final String TAG = "RemoteMediaPlayerBridge";
|
|
|
| - private MediaRouteController.MediaStateListener mMediaStateListener =
|
| + private final MediaRouteController.MediaStateListener mMediaStateListener =
|
| new MediaRouteController.MediaStateListener() {
|
| @Override
|
| public void onRouteAvailabilityChanged(boolean available) {
|
| @@ -75,20 +79,6 @@ public class RemoteMediaPlayerBridge extends MediaPlayerBridge {
|
| }
|
|
|
| @Override
|
| - public void onPrepared() {
|
| - if (mActive && mOnPreparedListener != null) {
|
| - mOnPreparedListener.onPrepared(null);
|
| - }
|
| - }
|
| -
|
| - @Override
|
| - public void onRouteSelected(String name) {
|
| - if (mNativeRemoteMediaPlayerBridge == 0) return;
|
| - nativeOnRouteSelected(mNativeRemoteMediaPlayerBridge,
|
| - RemoteMediaPlayerController.instance().getCastingMessage(name));
|
| - }
|
| -
|
| - @Override
|
| public void onRouteUnselected() {
|
| if (mNativeRemoteMediaPlayerBridge == 0) return;
|
| nativeOnRouteUnselected(mNativeRemoteMediaPlayerBridge);
|
| @@ -117,10 +107,73 @@ public class RemoteMediaPlayerBridge extends MediaPlayerBridge {
|
| public Bitmap getPosterBitmap() {
|
| return mPosterBitmap;
|
| }
|
| +
|
| + @Override
|
| + public void pauseLocal() {
|
| + nativePauseLocal(mNativeRemoteMediaPlayerBridge);
|
| + }
|
| +
|
| + @Override
|
| + public int getLocalPosition() {
|
| + return nativeGetLocalPosition(mNativeRemoteMediaPlayerBridge);
|
| + }
|
| +
|
| + @Override
|
| + public void onCastStarting(String routeName) {
|
| + nativeOnCastStarting(mNativeRemoteMediaPlayerBridge,
|
| + RemoteMediaPlayerController.instance().getCastingMessage(routeName));
|
| + mActive = true;
|
| + }
|
| +
|
| + @Override
|
| + public void onCastStopping() {
|
| + nativeOnCastStopping(mNativeRemoteMediaPlayerBridge);
|
| + mActive = false;
|
| + }
|
| +
|
| + @Override
|
| + public String getSourceUrl() {
|
| + return mSourceUrl;
|
| + }
|
| +
|
| + @Override
|
| + public String getCookies() {
|
| + return mCookies;
|
| + }
|
| +
|
| + @Override
|
| + public String getUserAgent() {
|
| + return mUserAgent;
|
| + }
|
| +
|
| + @Override
|
| + public String getFrameUrl() {
|
| + return mFrameUrl;
|
| + }
|
| +
|
| + @Override
|
| + public long getStartPositionMillis() {
|
| + return mStartPositionMillis;
|
| + }
|
| +
|
| + @Override
|
| + public boolean isPauseRequested() {
|
| + return mPauseRequested;
|
| + }
|
| +
|
| + @Override
|
| + public boolean isSeekRequested() {
|
| + return mSeekRequested;
|
| + }
|
| +
|
| + @Override
|
| + public int getSeekLocation() {
|
| + return mSeekLocation;
|
| + }
|
| };
|
|
|
| private RemoteMediaPlayerBridge(long nativeRemoteMediaPlayerBridge, long startPositionMillis,
|
| - String sourceUrl, String frameUrl) {
|
| + String sourceUrl, String frameUrl, String userAgent) {
|
|
|
| mDebug = CommandLine.getInstance().hasSwitch(ChromeSwitches.ENABLE_CAST_DEBUG_LOGS);
|
|
|
| @@ -129,6 +182,7 @@ public class RemoteMediaPlayerBridge extends MediaPlayerBridge {
|
| mStartPositionMillis = startPositionMillis;
|
| mSourceUrl = sourceUrl;
|
| mFrameUrl = frameUrl;
|
| + mUserAgent = userAgent;
|
| // This will get null if there isn't a mediaRouteController that can play this media.
|
| mRouteController = RemoteMediaPlayerController.instance()
|
| .getMediaRouteController(sourceUrl, frameUrl);
|
| @@ -136,9 +190,9 @@ public class RemoteMediaPlayerBridge extends MediaPlayerBridge {
|
|
|
| @CalledByNative
|
| private static RemoteMediaPlayerBridge create(long nativeRemoteMediaPlayerBridge,
|
| - long startPositionMillis, String sourceUrl, String frameUrl) {
|
| + long startPositionMillis, String sourceUrl, String frameUrl, String userAgent) {
|
| return new RemoteMediaPlayerBridge(nativeRemoteMediaPlayerBridge, startPositionMillis,
|
| - sourceUrl, frameUrl);
|
| + sourceUrl, frameUrl, userAgent);
|
| }
|
|
|
| /**
|
| @@ -148,6 +202,9 @@ public class RemoteMediaPlayerBridge extends MediaPlayerBridge {
|
| @CalledByNative
|
| private void requestRemotePlayback() {
|
| if (mDebug) Log.i(TAG, "requestRemotePlayback");
|
| + // Clear out the state
|
| + mPauseRequested = false;
|
| + mSeekRequested = false;
|
| RemoteMediaPlayerController.instance().requestRemotePlayback(
|
| mMediaStateListener, mRouteController);
|
| }
|
| @@ -185,14 +242,6 @@ public class RemoteMediaPlayerBridge extends MediaPlayerBridge {
|
| }
|
|
|
| /**
|
| - * @return Whether there're remote playback devices available.
|
| - */
|
| - @CalledByNative
|
| - private boolean isRemotePlaybackAvailable() {
|
| - return mRouteController.isRemotePlaybackAvailable();
|
| - }
|
| -
|
| - /**
|
| * @param bitmap The bitmap of the poster for the video, null if no poster image exists.
|
| *
|
| * TODO(cimamoglu): Notify the clients (probably through MediaRouteController.Listener)
|
| @@ -204,27 +253,6 @@ public class RemoteMediaPlayerBridge extends MediaPlayerBridge {
|
| mPosterBitmap = bitmap;
|
| }
|
|
|
| - /**
|
| - * @return Whether the video should be played remotely if possible
|
| - */
|
| - @CalledByNative
|
| - private boolean isRemotePlaybackPreferredForFrame() {
|
| - return !mRouteController.routeIsDefaultRoute()
|
| - && mRouteController.currentRouteSupportsRemotePlayback();
|
| - }
|
| -
|
| - @CalledByNative
|
| - private boolean isMediaPlayableRemotely() {
|
| - return mRouteController != null;
|
| - }
|
| -
|
| - @Override
|
| - @CalledByNative
|
| - protected boolean prepareAsync() {
|
| - mRouteController.prepareAsync(mFrameUrl, mStartPositionMillis);
|
| - return true;
|
| - }
|
| -
|
| @Override
|
| @CalledByNative
|
| protected boolean isPlaying() {
|
| @@ -260,26 +288,28 @@ public class RemoteMediaPlayerBridge extends MediaPlayerBridge {
|
| @Override
|
| @CalledByNative
|
| protected void start() throws IllegalStateException {
|
| - mRouteController.resume();
|
| + mPauseRequested = false;
|
| + if (mRouteController.isBeingCast()) mRouteController.resume();
|
| }
|
|
|
| @Override
|
| @CalledByNative
|
| protected void pause() throws IllegalStateException {
|
| - mRouteController.pause();
|
| + mPauseRequested = true;
|
| + if (mRouteController.isBeingCast()) mRouteController.pause();
|
| }
|
|
|
| @Override
|
| @CalledByNative
|
| protected void seekTo(int msec) throws IllegalStateException {
|
| - mRouteController.seekTo(msec);
|
| + mSeekRequested = true;
|
| + mSeekLocation = msec;
|
| + if (mRouteController.isBeingCast()) mRouteController.seekTo(msec);
|
| }
|
|
|
| @Override
|
| - @CalledByNative
|
| protected boolean setDataSource(
|
| Context context, String url, String cookies, String userAgent, boolean hideUrlLog) {
|
| - mRouteController.setDataSource(Uri.parse(url), cookies, userAgent);
|
| return true;
|
| }
|
|
|
| @@ -304,7 +334,6 @@ public class RemoteMediaPlayerBridge extends MediaPlayerBridge {
|
|
|
| @Override
|
| protected void setOnPreparedListener(MediaPlayer.OnPreparedListener listener) {
|
| - mOnPreparedListener = listener;
|
| }
|
|
|
| @Override
|
| @@ -330,15 +359,28 @@ public class RemoteMediaPlayerBridge extends MediaPlayerBridge {
|
| mNativeRemoteMediaPlayerBridge = 0;
|
| }
|
|
|
| + @CalledByNative
|
| + private boolean takesOverCastDevice() {
|
| + if (mRouteController == null) return false;
|
| + return mRouteController.playerTakesOverCastDevice(mMediaStateListener);
|
| + }
|
| +
|
| + @CalledByNative
|
| + private void setCookies(String cookies) {
|
| + mCookies = cookies;
|
| + }
|
| +
|
| private native String nativeGetFrameUrl(long nativeRemoteMediaPlayerBridge);
|
| private native void nativeOnPlaying(long nativeRemoteMediaPlayerBridge);
|
| private native void nativeOnPaused(long nativeRemoteMediaPlayerBridge);
|
| - private native void nativeOnRouteSelected(long nativeRemoteMediaPlayerBridge,
|
| - String playerName);
|
| private native void nativeOnRouteUnselected(long nativeRemoteMediaPlayerBridge);
|
| private native void nativeOnPlaybackFinished(long nativeRemoteMediaPlayerBridge);
|
| private native void nativeOnRouteAvailabilityChanged(long nativeRemoteMediaPlayerBridge,
|
| boolean available);
|
| private native String nativeGetTitle(long nativeRemoteMediaPlayerBridge);
|
| -
|
| + private native void nativePauseLocal(long nativeRemoteMediaPlayerBridge);
|
| + private native int nativeGetLocalPosition(long nativeRemoteMediaPlayerBridge);
|
| + private native void nativeOnCastStarting(long nativeRemoteMediaPlayerBridge,
|
| + String castingMessage);
|
| + private native void nativeOnCastStopping(long nativeRemoteMediaPlayerBridge);
|
| }
|
|
|