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..8a00f91e22d5e820682f83852111abfadfec9423 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.isKnowValue(action)) return; |
+ mMediaSessionActions.add(action); |
+ updateNotificationActions(); |
+ } |
+ |
+ @Override |
+ public void mediaSessionDisabledAction(int action) { |
+ if (!MediaSessionAction.isKnowValue(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); |