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