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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouter.java

Issue 1301773002: [Presentation API, Android] Implement starting a presentation via CreateRoute() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@media-router-create
Patch Set: Created 5 years, 4 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/router/ChromeMediaRouter.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouter.java b/chrome/android/java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouter.java
index 5536fd8e7e83a9ffdaa94ea9dc88a5b9d15404d9..3d9a97a5f495bf9d3b6770c5c133ac5071327208 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouter.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouter.java
@@ -7,9 +7,12 @@ package org.chromium.chrome.browser.media.router;
import android.content.Context;
import android.support.v7.media.MediaRouter;
+import com.google.android.gms.cast.Cast;
+
import org.chromium.base.VisibleForTesting;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
+import org.chromium.chrome.browser.media.router.cast.CreateRouteRequest;
import org.chromium.chrome.browser.media.router.cast.DiscoveryCallback;
import org.chromium.chrome.browser.media.router.cast.MediaSink;
import org.chromium.chrome.browser.media.router.cast.MediaSource;
@@ -29,9 +32,12 @@ public class ChromeMediaRouter {
private final long mNativeMediaRouterAndroid;
private final MediaRouter mAndroidMediaRouter;
- private Map<String, List<MediaSink>> mSinks = new HashMap<String, List<MediaSink>>();
+ private final Context mApplicationContext;
+ private final Map<String, List<MediaSink>> mSinks = new HashMap<String, List<MediaSink>>();
private final Map<String, DiscoveryCallback> mDiscoveryCallbacks =
new HashMap<String, DiscoveryCallback>();
+ private final Map<String, String> mSessionIds =
+ new HashMap<String, String>();
/**
* Called when the sinks found by the media route provider for
@@ -45,6 +51,26 @@ public class ChromeMediaRouter {
}
/**
+ * Called when the route was created successfully.
+ * @param mediaRouteId the id of the created route.
+ * @param requestId the id of the route creation request.
+ */
+ public void onRouteCreated(
+ String mediaRouteId, int requestId, String sessionId, boolean wasLaunched) {
+ mSessionIds.put(mediaRouteId, sessionId);
+ nativeOnRouteCreated(mNativeMediaRouterAndroid, mediaRouteId, requestId, wasLaunched);
+ }
+
+ /**
+ * Called when the route was failed to create.
+ * @param errorText the error message to return to the page.
+ * @param requestId the id of the route creation request.
+ */
+ public void onRouteCreationError(String errorText, int requestId) {
+ nativeOnRouteCreationError(mNativeMediaRouterAndroid, errorText, requestId);
+ }
+
+ /**
* Initializes the media router and its providers.
* @param nativeMediaRouterAndroid the handler for the native counterpart of this instance
* @param applicationContext the application context to use to obtain system APIs
@@ -134,12 +160,34 @@ public class ChromeMediaRouter {
return getSink(sourceUrn, index).getName();
}
+ /**
+ * Initiates route creation with the given parameters. Notifies the native client of success
+ * and failure.
+ * @param sourceId the id of the {@link MediaSource} to route to the sink.
+ * @param sinkId the id of the {@link MediaSink} to route the source to.
+ * @param presentationId the id of the presentation to be used by the page.
+ * @param requestId the id of the route creation request tracked by the native side.
+ */
+ @CalledByNative
+ public void createRoute(String sourceId, String sinkId, String presentationId, int requestId) {
+ if (mAndroidMediaRouter == null) {
+ nativeOnRouteCreationError(mNativeMediaRouterAndroid, "Not supported", requestId);
mlamouri (slow - plz ping) 2015/08/18 16:04:54 return?
whywhat 2015/08/18 20:06:32 Done.
+ }
+
+ new CreateRouteRequest(sourceId, sinkId, presentationId, requestId, this).start(
+ mAndroidMediaRouter,
+ mApplicationContext,
+ // TODO(avayvod): handle application disconnect and report back to the native side.
mlamouri (slow - plz ping) 2015/08/18 16:04:54 nit: bug number
whywhat 2015/08/18 20:06:32 Done. This will be needed for the route monitoring
+ new Cast.Listener() {});
+ }
+
@VisibleForTesting
ChromeMediaRouter(long nativeMediaRouter, Context applicationContext) {
assert applicationContext != null;
mNativeMediaRouterAndroid = nativeMediaRouter;
mAndroidMediaRouter = getAndroidMediaRouter(applicationContext);
+ mApplicationContext = applicationContext;
}
@Nullable
@@ -160,4 +208,11 @@ public class ChromeMediaRouter {
native void nativeOnSinksReceived(
long nativeMediaRouterAndroid, String sourceUrn, int count);
+ native void nativeOnRouteCreated(
+ long nativeMediaRouterAndroid,
+ String mediaRouteId,
+ int createRouteRequestId,
+ boolean wasLaunched);
+ native void nativeOnRouteCreationError(
+ long nativeMediaRouterAndroid, String errorText, int createRouteRequestId);
}

Powered by Google App Engine
This is Rietveld 408576698