Commit 8f0eeca9 authored by Evan Stade's avatar Evan Stade Committed by Commit Bot

Clank: restore casting notification and volume controls.

MediaNotificationInfo.mediaSessionActions is changed such that it
remains null when the notification is not associated with a web
MediaSession (i.e. is for Presentation or media fling).

Bug: 1126708
Change-Id: I026ebc2fc41cd3497f79ecce9d463141c7a020c8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2515050Reviewed-by: default avatarBecca Hughes <beccahughes@chromium.org>
Reviewed-by: default avatarThomas Guilbert <tguilbert@chromium.org>
Reviewed-by: default avatarMounir Lamouri <mlamouri@chromium.org>
Commit-Queue: Evan Stade <estade@chromium.org>
Cr-Commit-Position: refs/heads/master@{#826488}
parent 008850e8
......@@ -461,8 +461,11 @@ public class MediaNotificationController {
private static boolean shouldIgnoreMediaNotificationInfo(
MediaNotificationInfo oldInfo, MediaNotificationInfo newInfo) {
// If we don't have actions then we shouldn't display the notification.
if (newInfo.mediaSessionActions.isEmpty()) return true;
// If this is a web MediaSession notification, but we haven't yet gotten actions, then we
// shouldn't display the notification.
if (newInfo.mediaSessionActions != null && newInfo.mediaSessionActions.isEmpty()) {
return true;
}
return newInfo.equals(oldInfo)
|| ((newInfo.isPaused && oldInfo != null
......@@ -657,21 +660,24 @@ public class MediaNotificationController {
assert mMediaNotificationInfo != null;
long actions = PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_PAUSE;
if (mMediaNotificationInfo.mediaSessionActions.contains(
MediaSessionAction.PREVIOUS_TRACK)) {
actions |= PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS;
}
if (mMediaNotificationInfo.mediaSessionActions.contains(MediaSessionAction.NEXT_TRACK)) {
actions |= PlaybackStateCompat.ACTION_SKIP_TO_NEXT;
}
if (mMediaNotificationInfo.mediaSessionActions.contains(MediaSessionAction.SEEK_FORWARD)) {
actions |= PlaybackStateCompat.ACTION_FAST_FORWARD;
}
if (mMediaNotificationInfo.mediaSessionActions.contains(MediaSessionAction.SEEK_BACKWARD)) {
actions |= PlaybackStateCompat.ACTION_REWIND;
}
if (mMediaNotificationInfo.mediaSessionActions.contains(MediaSessionAction.SEEK_TO)) {
actions |= PlaybackStateCompat.ACTION_SEEK_TO;
Set<Integer> availableActions = mMediaNotificationInfo.mediaSessionActions;
if (availableActions != null) {
if (availableActions.contains(MediaSessionAction.PREVIOUS_TRACK)) {
actions |= PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS;
}
if (availableActions.contains(MediaSessionAction.NEXT_TRACK)) {
actions |= PlaybackStateCompat.ACTION_SKIP_TO_NEXT;
}
if (availableActions.contains(MediaSessionAction.SEEK_FORWARD)) {
actions |= PlaybackStateCompat.ACTION_FAST_FORWARD;
}
if (availableActions.contains(MediaSessionAction.SEEK_BACKWARD)) {
actions |= PlaybackStateCompat.ACTION_REWIND;
}
if (availableActions.contains(MediaSessionAction.SEEK_TO)) {
actions |= PlaybackStateCompat.ACTION_SEEK_TO;
}
}
return actions;
}
......@@ -727,7 +733,9 @@ public class MediaNotificationController {
// TODO(zqzhang): handle other actions when play/pause is not supported? See
// https://crbug.com/667500
if (mMediaNotificationInfo.supportsPlayPause()) {
actions.addAll(mMediaNotificationInfo.mediaSessionActions);
if (mMediaNotificationInfo.mediaSessionActions != null) {
actions.addAll(mMediaNotificationInfo.mediaSessionActions);
}
if (mMediaNotificationInfo.isPaused) {
actions.remove(MediaSessionAction.PAUSE);
actions.add(MediaSessionAction.PLAY);
......
......@@ -13,7 +13,6 @@ import androidx.annotation.Nullable;
import org.chromium.services.media_session.MediaMetadata;
import org.chromium.services.media_session.MediaPosition;
import java.util.HashSet;
import java.util.Set;
/**
......@@ -225,9 +224,10 @@ public class MediaNotificationInfo {
public final MediaNotificationListener listener;
/**
* The actions enabled in MediaSession.
* The actions enabled in MediaSession. If null, the notification is not associated with a web
* Media Session.
*/
public final Set<Integer> mediaSessionActions;
public final @Nullable Set<Integer> mediaSessionActions;
/**
* The current position of the media session.
......@@ -296,9 +296,7 @@ public class MediaNotificationInfo {
this.id = id;
this.contentIntent = contentIntent;
this.listener = listener;
this.mediaSessionActions = (mediaSessionActions != null)
? new HashSet<Integer>(mediaSessionActions)
: new HashSet<Integer>();
this.mediaSessionActions = mediaSessionActions;
this.mediaPosition = mediaPosition;
}
......
......@@ -32,6 +32,7 @@ import org.chromium.services.media_session.MediaMetadata;
import org.chromium.services.media_session.MediaPosition;
import org.chromium.ui.base.WindowAndroid;
import java.util.Collections;
import java.util.List;
import java.util.Set;
......@@ -69,7 +70,7 @@ public class MediaSessionHelper implements MediaImageCallback {
private MediaMetadata mPageMetadata;
// The currently showing metadata.
private MediaMetadata mCurrentMetadata;
private Set<Integer> mMediaSessionActions;
private Set<Integer> mMediaSessionActions = Collections.emptySet();
private @Nullable MediaPosition mMediaPosition;
private Handler mHandler;
// The delayed task to hide notification. Hiding notification can be immediate or delayed.
......@@ -294,7 +295,7 @@ public class MediaSessionHelper implements MediaImageCallback {
// {@link #titleWasSet()}. The following assignment is to keep
// |mCurrentMetadata| up to date as |mPageMetadata| may have changed.
mCurrentMetadata = getMetadata();
mMediaSessionActions = null;
mMediaSessionActions = Collections.emptySet();
if (isNotificationHidingOrHidden()) return;
......@@ -338,7 +339,7 @@ public class MediaSessionHelper implements MediaImageCallback {
if (mMediaSessionObserver == null) return;
mMediaSessionObserver.stopObserving();
mMediaSessionObserver = null;
mMediaSessionActions = null;
mMediaSessionActions = Collections.emptySet();
}
/** An interface for dispatching embedder-specific behavior. */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment