| Index: chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaSessionTabHelper.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaSessionTabHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaSessionTabHelper.java
|
| index 49c85e8606afd5a87f9fd88c3041baa63934f599..9a7ba3833f525af17c8765be2a34a662f8571126 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaSessionTabHelper.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaSessionTabHelper.java
|
| @@ -13,6 +13,7 @@ import android.text.TextUtils;
|
| import org.chromium.base.ContextUtils;
|
| import org.chromium.base.Log;
|
| import org.chromium.base.VisibleForTesting;
|
| +import org.chromium.blink.mojom.MediaSessionAction;
|
| import org.chromium.chrome.R;
|
| import org.chromium.chrome.browser.metrics.MediaNotificationUma;
|
| import org.chromium.chrome.browser.metrics.MediaSessionUMA;
|
| @@ -28,6 +29,8 @@ import org.chromium.ui.base.WindowAndroid;
|
|
|
| import java.net.URI;
|
| import java.net.URISyntaxException;
|
| +import java.util.HashSet;
|
| +import java.util.Set;
|
|
|
| import javax.annotation.Nullable;
|
|
|
| @@ -56,6 +59,7 @@ public class MediaSessionTabHelper implements MediaImageCallback {
|
| // The currently showing metadata.
|
| private MediaMetadata mCurrentMetadata = null;
|
| private MediaImageManager mMediaImageManager = null;
|
| + private Set<Integer> mMediaSessionActions = new HashSet<Integer>();
|
|
|
| @VisibleForTesting
|
| @Nullable
|
| @@ -93,6 +97,14 @@ public class MediaSessionTabHelper implements MediaImageCallback {
|
| mMediaSessionObserver.getMediaSession().stop();
|
| }
|
| }
|
| +
|
| + @Override
|
| + public void onMediaSessionAction(int action) {
|
| + if (!MediaSessionAction.isKnownValue(action)) return;
|
| + if (mMediaSessionObserver != null) {
|
| + mMediaSessionObserver.getMediaSession().didReceiveAction(action);
|
| + }
|
| + }
|
| };
|
|
|
| void hideNotification() {
|
| @@ -145,7 +157,8 @@ public class MediaSessionTabHelper implements MediaImageCallback {
|
| | MediaNotificationInfo.ACTION_SWIPEAWAY)
|
| .setContentIntent(contentIntent)
|
| .setId(R.id.media_playback_notification)
|
| - .setListener(mControlsListener);
|
| + .setListener(mControlsListener)
|
| + .setMediaSessionActions(mMediaSessionActions);
|
|
|
| MediaNotificationManager.show(ContextUtils.getApplicationContext(),
|
| mNotificationInfoBuilder.build());
|
| @@ -165,6 +178,20 @@ public class MediaSessionTabHelper implements MediaImageCallback {
|
| }
|
| updateNotificationMetadata();
|
| }
|
| +
|
| + @Override
|
| + public void mediaSessionEnabledAction(int action) {
|
| + if (!MediaSessionAction.isKnownValue(action)) return;
|
| + mMediaSessionActions.add(action);
|
| + updateNotificationActions();
|
| + }
|
| +
|
| + @Override
|
| + public void mediaSessionDisabledAction(int action) {
|
| + if (!MediaSessionAction.isKnownValue(action)) return;
|
| + mMediaSessionActions.remove(action);
|
| + updateNotificationActions();
|
| + }
|
| };
|
| }
|
|
|
| @@ -186,6 +213,7 @@ public class MediaSessionTabHelper implements MediaImageCallback {
|
| if (mMediaSessionObserver == null) return;
|
| mMediaSessionObserver.stopObserving();
|
| mMediaSessionObserver = null;
|
| + mMediaSessionActions.clear();
|
| }
|
|
|
| private final TabObserver mTabObserver = new EmptyTabObserver() {
|
| @@ -370,6 +398,14 @@ public class MediaSessionTabHelper implements MediaImageCallback {
|
| return new MediaMetadata(title, artist, album);
|
| }
|
|
|
| + private void updateNotificationActions() {
|
| + if (mNotificationInfoBuilder == null) return;
|
| +
|
| + mNotificationInfoBuilder.setMediaSessionActions(mMediaSessionActions);
|
| + MediaNotificationManager.show(
|
| + ContextUtils.getApplicationContext(), mNotificationInfoBuilder.build());
|
| + }
|
| +
|
| @Override
|
| public void onImageDownloaded(Bitmap image) {
|
| mPageMediaImage = MediaNotificationManager.scaleIconForDisplay(image);
|
|
|