Chromium Code Reviews| 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..fbb6e5ceeff6139fcabb7c676897563e89fbf514 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 String mSourceUrl; |
| private Bitmap mPosterBitmap; |
| + private String mCookies; |
|
whywhat
2015/10/14 13:28:50
where are these initialized? could most of them be
aberent
2015/10/15 10:31:38
Good catch; looks as if I have deleted the code th
|
| + private String mUserAgent; |
| + 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,6 +107,74 @@ 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 switchToRemotePlayer() { |
| + nativeSwitchToRemotePlayer(mNativeRemoteMediaPlayerBridge); |
| + mActive = true; |
| + } |
| + |
| + @Override |
| + public void switchToLocalPlayer() { |
| + nativeSwitchToLocalPlayer(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 void onPlayingRemotely(String routeName) { |
| + nativeOnPlayingRemotely(mNativeRemoteMediaPlayerBridge, |
| + RemoteMediaPlayerController.instance().getCastingMessage(routeName)); |
| + } |
| + |
| + @Override |
| + public boolean isPauseRequested() { |
| + return mPauseRequested; |
| + } |
| + |
| + @Override |
| + public boolean isSeekRequested() { |
| + return mSeekRequested; |
| + } |
| + |
| + @Override |
| + public int getSeekLocation() { |
| + return mSeekLocation; |
| + } |
| }; |
| private RemoteMediaPlayerBridge(long nativeRemoteMediaPlayerBridge, long startPositionMillis, |
| @@ -148,6 +206,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 +246,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,24 +257,8 @@ 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; |
| } |
| @@ -260,26 +297,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 +343,6 @@ public class RemoteMediaPlayerBridge extends MediaPlayerBridge { |
| @Override |
| protected void setOnPreparedListener(MediaPlayer.OnPreparedListener listener) { |
| - mOnPreparedListener = listener; |
| } |
| @Override |
| @@ -330,15 +368,23 @@ public class RemoteMediaPlayerBridge extends MediaPlayerBridge { |
| mNativeRemoteMediaPlayerBridge = 0; |
| } |
| + @CalledByNative |
| + private boolean takesOverCastDevice() { |
| + return mRouteController.videoTakesOverCastDevice(mMediaStateListener); |
| + } |
| + |
| 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 nativeSwitchToRemotePlayer(long nativeRemoteMediaPlayerBridge); |
| + private native void nativeSwitchToLocalPlayer(long nativeRemoteMediaPlayerBridge); |
| + private native void nativeOnPlayingRemotely( |
| + long nativeRemoteMediaPlayerBridge, String castingMessage); |
| } |