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 feb704d17d5457251f6fbb8673c90261de2f7cbb..cb2f9c783824a39bd8150bfef8e0beb046923825 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 |
@@ -28,6 +28,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 +58,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 |
@@ -87,6 +90,13 @@ public class MediaSessionTabHelper implements MediaImageCallback { |
if (mMediaSessionObserver != null) mMediaSessionObserver.getMediaSession().stop(); |
} |
+ |
+ @Override |
+ public void onMediaSessionAction(int action) { |
+ if (mMediaSessionObserver != null) { |
whywhat
2016/10/28 16:38:02
can it be null?
Zhiqiang Zhang (Slow)
2016/11/01 14:55:25
Checking mMediaSessionObserver.getMediaSession() n
|
+ mMediaSessionObserver.getMediaSession().didReceiveAction(action); |
+ } |
+ } |
}; |
void hideNotification() { |
@@ -138,7 +148,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()); |
@@ -158,6 +169,18 @@ public class MediaSessionTabHelper implements MediaImageCallback { |
} |
updateNotificationMetadata(); |
} |
+ |
+ @Override |
+ public void mediaSessionEnabledAction(int action) { |
+ mMediaSessionActions.add(action); |
+ updateNotificationActions(); |
+ } |
+ |
+ @Override |
+ public void mediaSessionDisabledAction(int action) { |
+ mMediaSessionActions.remove(action); |
+ updateNotificationActions(); |
+ } |
}; |
} |
@@ -181,6 +204,7 @@ public class MediaSessionTabHelper implements MediaImageCallback { |
MediaSession mediaSession = mMediaSessionObserver.getMediaSession(); |
if (mediaSession != null) mediaSession.removeObserver(mMediaSessionObserver); |
mMediaSessionObserver = null; |
+ mMediaSessionActions.clear(); |
} |
private final TabObserver mTabObserver = new EmptyTabObserver() { |
@@ -365,6 +389,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; |