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; |