| 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 19252e1106b262e2fa3f854d5bc5f0e043cc2386..596ea8b5035092edd0357eac0b48d5bac7f49809 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
|
| @@ -27,6 +27,8 @@ import org.chromium.ui.base.WindowAndroid;
|
| import java.net.URI;
|
| import java.net.URISyntaxException;
|
|
|
| +import java.util.EnumSet;
|
| +
|
| /**
|
| * A tab helper responsible for enabling/disabling media controls and passing
|
| * media actions from the controls to the {@link org.chromium.content.browser.MediaSession}
|
| @@ -53,6 +55,8 @@ public class MediaSessionTabHelper implements MediaImageCallback {
|
| // The currently showing metadata.
|
| private MediaMetadata mCurrentMetadata = null;
|
| private MediaImageManager mMediaImageManager = null;
|
| + private EnumSet<MediaSessionAction> mMediaSessionActions =
|
| + EnumSet.noneOf(MediaSessionAction.class);
|
|
|
| private MediaNotificationListener mControlsListener = new MediaNotificationListener() {
|
| @Override
|
| @@ -78,6 +82,11 @@ public class MediaSessionTabHelper implements MediaImageCallback {
|
|
|
| mWebContents.stopMediaSession();
|
| }
|
| +
|
| + @Override
|
| + public void onMediaSessionAction(MediaSessionAction action) {
|
| + mWebContents.didReceiveMediaSessionAction(action.getValue());
|
| + }
|
| };
|
|
|
| void hideNotification() {
|
| @@ -129,7 +138,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());
|
| @@ -149,6 +159,18 @@ public class MediaSessionTabHelper implements MediaImageCallback {
|
| }
|
| updateNotificationMetadata();
|
| }
|
| +
|
| + @Override
|
| + public void mediaSessionEnabledAction(int action) {
|
| + mMediaSessionActions.add(MediaSessionAction.fromInt(action));
|
| + updateNotificationActions();
|
| + }
|
| +
|
| + @Override
|
| + public void mediaSessionDisabledAction(int action) {
|
| + mMediaSessionActions.remove(MediaSessionAction.fromInt(action));
|
| + updateNotificationActions();
|
| + }
|
| };
|
| }
|
|
|
| @@ -165,6 +187,7 @@ public class MediaSessionTabHelper implements MediaImageCallback {
|
| if (mWebContentsObserver != null) mWebContentsObserver.destroy();
|
| mWebContentsObserver = null;
|
| mWebContents = null;
|
| + mMediaSessionActions.clear();
|
| }
|
|
|
| private final TabObserver mTabObserver = new EmptyTabObserver() {
|
| @@ -349,6 +372,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 = image;
|
|
|