Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1267)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaSessionTabHelper.java

Issue 2411723002: Split MediaSessionStateChanged() and MediaSessionMetadataChanged() (Closed)
Patch Set: rebased Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/android/javatests/src/org/chromium/chrome/browser/media/ui/NotificationTitleUpdatedTest.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 20ce6a63be38808a95497d1e0dcb4cce9fc1c5b5..9bac13619b5311ba6c8b3f06f81760a200fa38a9 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
@@ -44,7 +44,12 @@ public class MediaSessionTabHelper {
private WebContentsObserver mWebContentsObserver;
private int mPreviousVolumeControlStream = AudioManager.USE_DEFAULT_STREAM_TYPE;
private MediaNotificationInfo.Builder mNotificationInfoBuilder = null;
- private MediaMetadata mFallbackMetadata;
+ // The fallback title if |mPageMetadata| is null or its title is empty.
+ private String mFallbackTitle = null;
+ // The metadata set by the page.
+ private MediaMetadata mPageMetadata = null;
+ // The currently showing metadata.
+ private MediaMetadata mCurrentMetadata = null;
private MediaNotificationListener mControlsListener = new MediaNotificationListener() {
@Override
@@ -93,34 +98,22 @@ public class MediaSessionTabHelper {
}
@Override
- public void mediaSessionStateChanged(boolean isControllable, boolean isPaused,
- MediaMetadata metadata) {
+ 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 (metadata == null || TextUtils.isEmpty(metadata.getTitle())) {
- mFallbackMetadata = new MediaMetadata(
- sanitizeMediaTitle(mTab.getTitle()),
- metadata == null ? "" : metadata.getArtist(),
- metadata == null ? "" : metadata.getAlbum());
- metadata = mFallbackMetadata;
- }
-
Intent contentIntent = Tab.createBringTabToFrontIntent(mTab.getId());
if (contentIntent != null) {
contentIntent.putExtra(MediaNotificationUma.INTENT_EXTRA_NAME,
MediaNotificationUma.SOURCE_MEDIA);
}
+ mCurrentMetadata = getMetadata();
mNotificationInfoBuilder =
new MediaNotificationInfo.Builder()
- .setMetadata(metadata)
+ .setMetadata(mCurrentMetadata)
.setPaused(isPaused)
.setOrigin(mOrigin)
.setTabId(mTab.getId())
@@ -142,6 +135,12 @@ public class MediaSessionTabHelper {
activity.setVolumeControlStream(AudioManager.STREAM_MUSIC);
}
}
+
+ @Override
+ public void mediaSessionMetadataChanged(MediaMetadata metadata) {
+ mPageMetadata = metadata;
+ updateNotificationMetadata();
+ }
};
}
@@ -206,14 +205,11 @@ public class MediaSessionTabHelper {
@Override
public void onTitleUpdated(Tab tab) {
assert tab == mTab;
- if (mNotificationInfoBuilder == null || mFallbackMetadata == null) return;
-
- mFallbackMetadata = new MediaMetadata(mFallbackMetadata);
- mFallbackMetadata.setTitle(sanitizeMediaTitle(mTab.getTitle()));
- mNotificationInfoBuilder.setMetadata(mFallbackMetadata);
-
- MediaNotificationManager.show(ContextUtils.getApplicationContext(),
- mNotificationInfoBuilder.build());
+ String newFallbackTitle = sanitizeMediaTitle(tab.getTitle());
+ if (!TextUtils.equals(mFallbackTitle, newFallbackTitle)) {
+ mFallbackTitle = newFallbackTitle;
+ updateNotificationMetadata();
+ }
}
@Override
@@ -303,4 +299,45 @@ public class MediaSessionTabHelper {
mFavicon = MediaNotificationManager.scaleIconForDisplay(icon);
return true;
}
+
+ /**
+ * Updates the metadata in media notification. This method should be called whenever
+ * |mPageMetadata| or |mFallbackTitle| is changed.
+ */
+ private void updateNotificationMetadata() {
+ if (mNotificationInfoBuilder == null) return;
+
+ MediaMetadata newMetadata = getMetadata();
+ if (mCurrentMetadata.equals(newMetadata)) return;
+
+ mCurrentMetadata = newMetadata;
+ mNotificationInfoBuilder.setMetadata(mCurrentMetadata);
+ MediaNotificationManager.show(
+ ContextUtils.getApplicationContext(), mNotificationInfoBuilder.build());
+ }
+
+ /**
+ * @return The up-to-date MediaSession metadata. Returns the cached object like |mPageMetadata|
+ * or |mCurrentMetadata| if it reflects the current state. Otherwise will return a new
+ * {@link MediaMetadata} object.
+ */
+ private MediaMetadata getMetadata() {
+ String title = mFallbackTitle;
+ String artist = "";
+ String album = "";
+ if (mPageMetadata != null) {
+ if (!TextUtils.isEmpty(mPageMetadata.getTitle())) return mPageMetadata;
+
+ artist = mPageMetadata.getArtist();
+ album = mPageMetadata.getAlbum();
+ }
+
+ if (mCurrentMetadata != null && TextUtils.equals(title, mCurrentMetadata.getTitle())
+ && TextUtils.equals(artist, mCurrentMetadata.getArtist())
+ && TextUtils.equals(album, mCurrentMetadata.getAlbum())) {
+ return mCurrentMetadata;
+ }
+
+ return new MediaMetadata(title, artist, album);
+ }
}
« no previous file with comments | « no previous file | chrome/android/javatests/src/org/chromium/chrome/browser/media/ui/NotificationTitleUpdatedTest.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698