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

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

Issue 1412293004: [Cast, Android, PresentationAPI] Show play/pause button when the presentation supports media comman… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@fix-actions-change
Patch Set: Remove "Casting to" from the notification title. 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CastRouteController.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CastRouteController.java b/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CastRouteController.java
index b783d25e7db416dff5e2d0b011600c827065239d..b5b6357698691774f864a873431a32ec2047cb00 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CastRouteController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CastRouteController.java
@@ -9,6 +9,8 @@ import android.content.Context;
import com.google.android.gms.cast.ApplicationMetadata;
import com.google.android.gms.cast.Cast;
import com.google.android.gms.cast.CastDevice;
+import com.google.android.gms.cast.MediaStatus;
+import com.google.android.gms.cast.RemoteMediaPlayer;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Status;
@@ -82,7 +84,7 @@ public class CastRouteController implements RouteController, MediaNotificationLi
@Override
public void onMessageReceived(CastDevice castDevice, String namespace, String message) {
if (MEDIA_NAMESPACE.equals(namespace) || RECEIVER_NAMESPACE.equals(namespace)) {
- mSession.onMessage("v2_message", message);
+ mSession.onMessage("v2_message", message, namespace);
} else {
mSession.onAppMessage(namespace, message);
}
@@ -132,6 +134,7 @@ public class CastRouteController implements RouteController, MediaNotificationLi
private boolean mStoppingApplication;
private boolean mDetached;
private MediaNotificationInfo.Builder mNotificationBuilder;
+ private RemoteMediaPlayer mMediaPlayer;
/**
* Initializes a new {@link CastRouteController} instance.
@@ -169,10 +172,34 @@ public class CastRouteController implements RouteController, MediaNotificationLi
addNamespace(RECEIVER_NAMESPACE);
addNamespace(MEDIA_NAMESPACE);
- Context context = ApplicationStatus.getApplicationContext();
+ final Context context = ApplicationStatus.getApplicationContext();
+
+ if (mNamespaces.contains(MEDIA_NAMESPACE)) {
+ mMediaPlayer = new RemoteMediaPlayer();
+ mMediaPlayer.setOnStatusUpdatedListener(
+ new RemoteMediaPlayer.OnStatusUpdatedListener() {
+ @Override
+ public void onStatusUpdated() {
+ MediaStatus mediaStatus = mMediaPlayer.getMediaStatus();
+ if (mediaStatus == null) return;
+
+ int playerState = mediaStatus.getPlayerState();
+ if (playerState == MediaStatus.PLAYER_STATE_PAUSED
+ || playerState == MediaStatus.PLAYER_STATE_PLAYING) {
+ mNotificationBuilder.setPaused(
+ playerState != MediaStatus.PLAYER_STATE_PLAYING);
+ mNotificationBuilder.setActions(MediaNotificationInfo.ACTION_STOP
+ | MediaNotificationInfo.ACTION_PLAY_PAUSE);
+ } else {
+ mNotificationBuilder.setActions(MediaNotificationInfo.ACTION_STOP);
+ }
+ MediaNotificationManager.show(context, mNotificationBuilder);
+ }
+ });
+ }
+
mNotificationBuilder = new MediaNotificationInfo.Builder()
- .setTitle(context.getString(
- R.string.cast_casting_video, mCastDevice.getFriendlyName()))
+ .setTitle(mCastDevice.getFriendlyName())
.setPaused(false)
.setOrigin(origin)
.setTabId(tabId)
@@ -223,7 +250,7 @@ public class CastRouteController implements RouteController, MediaNotificationLi
.setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(Status status) {
- onMessage("remove_session", mSessionId);
+ onMessage("remove_session", mSessionId, null);
// TODO(avayvod): handle a failure to stop the application.
// https://crbug.com/535577
@@ -301,10 +328,16 @@ public class CastRouteController implements RouteController, MediaNotificationLi
@Override
public void onPlay(int actionSource) {
+ if (mMediaPlayer == null || isApiClientInvalid()) return;
+
+ mMediaPlayer.play(mApiClient);
}
@Override
public void onPause(int actionSource) {
+ if (mMediaPlayer == null || isApiClientInvalid()) return;
+
+ mMediaPlayer.pause(mApiClient);
}
@Override
@@ -317,8 +350,13 @@ public class CastRouteController implements RouteController, MediaNotificationLi
* Sends the internal Cast message to the Cast clients on the page via the media router.
* @param type The type of the message (e.g. "new_session" or "v2_message")
* @param message The message itself (encoded JSON).
+ * @param namespace The namespace for the message.
*/
- public void onMessage(String type, String message) {
+ public void onMessage(String type, String message, String namespace) {
+ if (MEDIA_NAMESPACE.equals(namespace) && mMediaPlayer != null) {
+ mMediaPlayer.onMessageReceived(mCastDevice, namespace, message);
+ }
+
for (String client : mClients) {
mRouteDelegate.onMessage(mMediaRouteId,
buildInternalMessage(type, message, client, mSequenceNumber));
@@ -337,7 +375,7 @@ public class CastRouteController implements RouteController, MediaNotificationLi
jsonMessage.put("sessionId", mSessionId);
jsonMessage.put("namespaceName", namespace);
jsonMessage.put("message", message);
- onMessage("app_message", jsonMessage.toString());
+ onMessage("app_message", jsonMessage.toString(), null);
} catch (JSONException e) {
Log.d(TAG, "Failed to create the message wrapper", e);
}
@@ -407,6 +445,7 @@ public class CastRouteController implements RouteController, MediaNotificationLi
mRouteDelegate.onMessage(mMediaRouteId,
buildInternalMessage("new_session", buildSessionMessage(), clientId, -1));
+
return true;
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698