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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/media/remote/RemoteMediaPlayerBridge.java

Issue 1403703005: Refactor Clank cast connect logic (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix trybot detected error. Created 5 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
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);
}

Powered by Google App Engine
This is Rietveld 408576698