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 143afe85344b5624e90d5dd046454ae70fb2b915..37e41741f0b4e74f67a4d1991b8703217f3a401a 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 |
@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.media.ui; |
import android.app.Activity; |
import android.content.Intent; |
import android.graphics.Bitmap; |
+import android.graphics.Rect; |
import android.media.AudioManager; |
import android.text.TextUtils; |
@@ -40,12 +41,14 @@ public class MediaSessionTabHelper { |
private Tab mTab; |
private Bitmap mFavicon = null; |
+ private Bitmap mMediaSessionArtwork = null; |
private String mOrigin = null; |
private WebContents mWebContents; |
private WebContentsObserver mWebContentsObserver; |
private int mPreviousVolumeControlStream = AudioManager.USE_DEFAULT_STREAM_TYPE; |
private MediaNotificationInfo.Builder mNotificationInfoBuilder = null; |
private MediaMetadata mFallbackMetadata; |
+ private MediaMetadata mMetadata; |
private MediaNotificationListener mControlsListener = new MediaNotificationListener() { |
@Override |
@@ -94,31 +97,54 @@ public class MediaSessionTabHelper { |
} |
@Override |
- public void mediaSessionStateChanged(boolean isControllable, boolean isPaused, |
- MediaMetadata metadata) { |
+ public void mediaMetadataChanged(MediaMetadata metadata) { |
+ if (!TextUtils.isEmpty(metadata.getTitle())) { |
+ mMetadata = new MediaMetadata( |
+ metadata.getTitle(), |
+ metadata.getArtist(), |
+ metadata.getAlbum()); |
+ } else { |
+ mMetadata = new MediaMetadata( |
+ sanitizeMediaTitle(mTab.getTitle()), |
+ metadata.getArtist(), |
+ metadata.getAlbum()); |
+ } |
+ Log.i(TAG, "# artworks=" + Integer.toString(metadata.getArtworks().size())); |
+ for (MediaMetadata.Artwork artwork : metadata.getArtworks()) { |
+ Log.i(TAG, "========================="); |
+ Log.i(TAG, "src=" + artwork.getSrc()); |
+ Log.i(TAG, "type=" + artwork.getType()); |
+ String sizes = "sizes="; |
+ for (Rect size : artwork.getSizes()) { |
+ sizes += Integer.toString(size.width()) + "x" |
+ + Integer.toString(size.height()) + " "; |
+ } |
+ Log.i(TAG, "sizes=" + sizes); |
+ } |
+ } |
+ |
+ @Override |
+ public void mediaSessionStateChanged(boolean isControllable, boolean isPaused) { |
if (!isControllable) { |
hideNotification(); |
return; |
} |
- mFallbackMetadata = null; |
- |
- // The page's title is used as a placeholder if no title is specified in the |
- // metadata. |
- if (TextUtils.isEmpty(metadata.getTitle())) { |
- mFallbackMetadata = new MediaMetadata( |
- sanitizeMediaTitle(mTab.getTitle()), |
- metadata.getArtist(), |
- metadata.getAlbum()); |
- metadata = mFallbackMetadata; |
- } |
- |
Intent contentIntent = Tab.createBringTabToFrontIntent(mTab.getId()); |
if (contentIntent != null) { |
contentIntent.putExtra(MediaNotificationUma.INTENT_EXTRA_NAME, |
MediaNotificationUma.SOURCE_MEDIA); |
} |
- |
+ MediaMetadata metadata = null; |
+ if (mMetadata != null) { |
+ metadata = mMetadata; |
+ } else { |
+ if (mFallbackMetadata == null) { |
+ mFallbackMetadata = new MediaMetadata( |
+ sanitizeMediaTitle(mTab.getTitle()), "", ""); |
+ } |
+ metadata = mFallbackMetadata; |
+ } |
mNotificationInfoBuilder = |
new MediaNotificationInfo.Builder() |
.setMetadata(metadata) |
@@ -127,7 +153,7 @@ public class MediaSessionTabHelper { |
.setTabId(mTab.getId()) |
.setPrivate(mTab.isIncognito()) |
.setIcon(R.drawable.audio_playing) |
- .setLargeIcon(mFavicon) |
+ .setLargeIcon(selectLargeIcon()) |
.setDefaultLargeIcon(R.drawable.audio_playing_square) |
.setActions(MediaNotificationInfo.ACTION_PLAY_PAUSE |
| MediaNotificationInfo.ACTION_SWIPEAWAY) |
@@ -177,8 +203,7 @@ public class MediaSessionTabHelper { |
if (!updateFavicon(icon)) return; |
if (mNotificationInfoBuilder == null) return; |
- |
- mNotificationInfoBuilder.setLargeIcon(mFavicon); |
+ mNotificationInfoBuilder.setLargeIcon(selectLargeIcon()); |
MediaNotificationManager.show( |
ContextUtils.getApplicationContext(), mNotificationInfoBuilder.build()); |
} |
@@ -198,11 +223,12 @@ public class MediaSessionTabHelper { |
if (mOrigin != null && mOrigin.equals(origin)) return; |
mOrigin = origin; |
mFavicon = null; |
+ mMediaSessionArtwork = null; |
if (mNotificationInfoBuilder == null) return; |
mNotificationInfoBuilder.setOrigin(mOrigin); |
- mNotificationInfoBuilder.setLargeIcon(mFavicon); |
+ mNotificationInfoBuilder.setLargeIcon(selectLargeIcon()); |
MediaNotificationManager.show( |
ContextUtils.getApplicationContext(), mNotificationInfoBuilder.build()); |
} |
@@ -307,4 +333,9 @@ public class MediaSessionTabHelper { |
mFavicon = icon; |
return true; |
} |
+ |
+ private Bitmap selectLargeIcon() { |
+ if (mMediaSessionArtwork != null) return mMediaSessionArtwork; |
+ return mFavicon; |
+ } |
} |