Commit 0475617f authored by Becca Hughes's avatar Becca Hughes Committed by Commit Bot

[Media Session] [2/4] Move Metadata to service

This CL moves any existing uses in Android of MediaMetadata
to the new version in the media_session service.

BUG=875004

Binary-Size: Adding duplicate classes that will be removed
in https://crrev.com/c/1241554

Change-Id: I8ed9afd45a37e515ae89d5d82a542a6f4c139136
Reviewed-on: https://chromium-review.googlesource.com/c/1241466
Commit-Queue: Becca Hughes <beccahughes@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Reviewed-by: default avatarMounir Lamouri <mlamouri@chromium.org>
Cr-Commit-Position: refs/heads/master@{#605498}
parent 44e0b0ba
......@@ -309,6 +309,7 @@ android_library("chrome_java") {
"//net/android:net_java",
"//printing:printing_java",
"//services/data_decoder/public/cpp/android:safe_json_java",
"//services/media_session/public/cpp/android:media_session_java",
"//services/network/public/mojom:mojom_java",
"//services/service_manager/public/java:service_manager_java",
"//services/service_manager/public/mojom:mojom_java",
......@@ -559,6 +560,7 @@ junit_binary("chrome_junit_tests") {
"//mojo/public/java:bindings_java",
"//mojo/public/java:system_java",
"//net/android:net_java",
"//services/media_session/public/cpp/android:media_session_java",
"//third_party/android_deps:android_arch_lifecycle_common_java",
"//third_party/android_deps:android_support_annotations_java",
"//third_party/android_deps:android_support_v7_appcompat_java",
......
......@@ -7,4 +7,5 @@ include_rules = [
"+components/spellcheck/browser",
"+jni",
"+media/base/android/java",
"+services/media_session/public",
]
......@@ -23,7 +23,7 @@ import org.chromium.chrome.browser.media.ui.MediaNotificationManager;
import org.chromium.chrome.browser.metrics.MediaNotificationUma;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.components.url_formatter.UrlFormatter;
import org.chromium.content_public.common.MediaMetadata;
import org.chromium.services.media_session.MediaMetadata;
import java.net.URI;
import java.net.URISyntaxException;
......
......@@ -8,7 +8,7 @@ import com.google.android.gms.cast.CastDevice;
import com.google.android.gms.cast.RemoteMediaPlayer;
import org.chromium.chrome.browser.media.ui.MediaNotificationInfo;
import org.chromium.content_public.common.MediaMetadata;
import org.chromium.services.media_session.MediaMetadata;
/**
* Helper class that implements functions useful to all CastSession types.
......
......@@ -16,7 +16,7 @@ import org.chromium.chrome.browser.media.ui.MediaNotificationListener;
import org.chromium.chrome.browser.media.ui.MediaNotificationManager;
import org.chromium.chrome.browser.metrics.MediaNotificationUma;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.content_public.common.MediaMetadata;
import org.chromium.services.media_session.MediaMetadata;
/** Controller for updating media notification for Casting and MediaFling. */
public class CafNotificationController implements MediaNotificationListener {
......
......@@ -4,7 +4,7 @@
package org.chromium.chrome.browser.media.ui;
import static org.chromium.content_public.common.MediaMetadata.MediaImage;
import static org.chromium.services.media_session.MediaMetadata.MediaImage;
import android.graphics.Bitmap;
import android.graphics.Rect;
......
......@@ -9,7 +9,7 @@ import android.graphics.Bitmap;
import android.text.TextUtils;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.content_public.common.MediaMetadata;
import org.chromium.services.media_session.MediaMetadata;
import java.util.HashSet;
import java.util.Set;
......
......@@ -48,7 +48,7 @@ import org.chromium.chrome.browser.notifications.NotificationBuilderFactory;
import org.chromium.chrome.browser.notifications.NotificationConstants;
import org.chromium.chrome.browser.notifications.NotificationUmaTracker;
import org.chromium.chrome.browser.notifications.channels.ChannelDefinitions;
import org.chromium.content_public.common.MediaMetadata;
import org.chromium.services.media_session.MediaMetadata;
import java.util.ArrayList;
import java.util.HashSet;
......
......@@ -28,7 +28,7 @@ import org.chromium.components.url_formatter.UrlFormatter;
import org.chromium.content_public.browser.MediaSession;
import org.chromium.content_public.browser.MediaSessionObserver;
import org.chromium.content_public.browser.WebContents;
import org.chromium.content_public.common.MediaMetadata;
import org.chromium.services.media_session.MediaMetadata;
import org.chromium.ui.base.WindowAndroid;
import java.net.URI;
......
......@@ -15,7 +15,7 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.chromium.content_public.common.MediaMetadata.MediaImage;
import static org.chromium.services.media_session.MediaMetadata.MediaImage;
import android.graphics.Bitmap;
import android.graphics.Rect;
......@@ -296,4 +296,4 @@ public class MediaImageManagerTest {
verify(mCallback).onImageDownloaded((Bitmap) isNull());
verify(mCallback, times(0)).onImageDownloaded((Bitmap) isNotNull());
}
}
\ No newline at end of file
}
......@@ -26,7 +26,7 @@ import org.robolectric.shadows.ShadowNotification;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.content_public.common.MediaMetadata;
import org.chromium.services.media_session.MediaMetadata;
/**
* JUnit tests for checking MediaNotificationManager presents correct notification to Android
......
......@@ -36,7 +36,7 @@ import org.robolectric.shadows.ShadowNotificationManager;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.chrome.browser.media.ui.MediaNotificationManager.ListenerService;
import org.chromium.chrome.browser.notifications.NotificationUmaTracker;
import org.chromium.content_public.common.MediaMetadata;
import org.chromium.services.media_session.MediaMetadata;
import java.util.concurrent.TimeoutException;
......
......@@ -38,7 +38,7 @@ import org.chromium.chrome.browser.AppHooksImpl;
import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.media.ui.MediaNotificationManager.ListenerService;
import org.chromium.chrome.browser.notifications.NotificationUmaTracker;
import org.chromium.content_public.common.MediaMetadata;
import org.chromium.services.media_session.MediaMetadata;
import java.util.HashMap;
import java.util.Map;
......
......@@ -17,7 +17,7 @@ import org.chromium.chrome.browser.favicon.LargeIconBridge;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.content_public.browser.MediaSession;
import org.chromium.content_public.browser.WebContents;
import org.chromium.content_public.common.MediaMetadata;
import org.chromium.services.media_session.MediaMetadata;
import java.util.Set;
......
......@@ -23,7 +23,7 @@ import org.robolectric.shadows.ShadowNotification;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.media.ui.MediaNotificationManager.ListenerService;
import org.chromium.content_public.common.MediaMetadata;
import org.chromium.services.media_session.MediaMetadata;
/**
* Test of media notifications to see whether the text updates when the tab title changes or the
......
......@@ -70,6 +70,7 @@ android_library("content_java") {
"//net/android:net_java",
"//services/device:java",
"//services/device/public/java:nfc_java",
"//services/media_session/public/cpp/android:media_session_java",
"//services/service_manager/public/java:service_manager_java",
"//services/service_manager/public/mojom:mojom_java",
"//services/shape_detection:shape_detection_java",
......@@ -275,7 +276,6 @@ android_library("content_java") {
"java/src/org/chromium/content_public/common/ContentProcessInfo.java",
"java/src/org/chromium/content_public/common/ContentSwitches.java",
"java/src/org/chromium/content_public/common/ContentUrlConstants.java",
"java/src/org/chromium/content_public/common/MediaMetadata.java",
"java/src/org/chromium/content_public/common/Referrer.java",
"java/src/org/chromium/content_public/common/ResourceRequestBody.java",
"java/src/org/chromium/content_public/common/ScreenOrientationConstants.java",
......@@ -399,7 +399,6 @@ generate_jni("content_jni_headers") {
"java/src/org/chromium/content/browser/webcontents/WebContentsObserverProxy.java",
"java/src/org/chromium/content/common/ServiceManagerConnectionImpl.java",
"java/src/org/chromium/content_public/browser/LoadUrlParams.java",
"java/src/org/chromium/content_public/common/MediaMetadata.java",
"java/src/org/chromium/content_public/common/ResourceRequestBody.java",
"java/src/org/chromium/content_public/common/UseZoomForDSFPolicy.java",
]
......
......@@ -9,4 +9,6 @@ include_rules = [
"+device",
# Needed for implementing Device Service public component in java.
"+services/device/public/java",
# Needed for implementing Media Session on Android.
"+services/media_session/public",
]
......@@ -10,7 +10,7 @@ import org.chromium.base.annotations.JNINamespace;
import org.chromium.content_public.browser.MediaSession;
import org.chromium.content_public.browser.MediaSessionObserver;
import org.chromium.content_public.browser.WebContents;
import org.chromium.content_public.common.MediaMetadata;
import org.chromium.services.media_session.MediaMetadata;
import java.util.HashSet;
......
......@@ -7,7 +7,7 @@ package org.chromium.content_public.browser;
import android.support.annotation.Nullable;
import org.chromium.content.browser.MediaSessionImpl;
import org.chromium.content_public.common.MediaMetadata;
import org.chromium.services.media_session.MediaMetadata;
import java.util.Set;
......
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.content_public.common;
import android.graphics.Rect;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import java.util.ArrayList;
import java.util.List;
/**
* The MediaMetadata class carries information related to a media session. It is
* the Java counterpart of content::MediaMetadata.
*/
@JNINamespace("content")
public final class MediaMetadata {
/**
* The MediaImage class carries the artwork information in MediaMetadata. It is the Java
* counterpart of content::MediaMetadata::MediaImage.
*/
public static final class MediaImage {
@NonNull
private String mSrc;
private String mType;
@NonNull
private List<Rect> mSizes = new ArrayList<Rect>();
/**
* Creates a new MediaImage.
*/
public MediaImage(@NonNull String src, @NonNull String type, @NonNull List<Rect> sizes) {
mSrc = src;
mType = type;
mSizes = sizes;
}
/**
* @return The URL of this MediaImage.
*/
@NonNull
public String getSrc() {
return mSrc;
}
/**
* @return The MIME type of this MediaImage.
*/
public String getType() {
return mType;
}
/**
* @return The hinted sizes of this MediaImage.
*/
public List<Rect> getSizes() {
return mSizes;
}
/**
* Sets the URL of this MediaImage.
*/
public void setSrc(@NonNull String src) {
mSrc = src;
}
/**
* Sets the MIME type of this MediaImage.
*/
public void setType(@NonNull String type) {
mType = type;
}
/**
* Sets the sizes of this MediaImage.
*/
public void setSizes(@NonNull List<Rect> sizes) {
mSizes = sizes;
}
@Override
public boolean equals(Object obj) {
if (obj == this) return true;
if (!(obj instanceof MediaImage)) return false;
MediaImage other = (MediaImage) obj;
return TextUtils.equals(mSrc, other.mSrc)
&& TextUtils.equals(mType, other.mType)
&& mSizes.equals(other.mSizes);
}
/**
* @return The hash code of this {@link MediaImage}. The method uses the same algorithm in
* {@link java.util.List} for combinine hash values.
*/
@Override
public int hashCode() {
int result = mSrc.hashCode();
result = 31 * result + mType.hashCode();
result = 31 * result + mSizes.hashCode();
return result;
}
}
@NonNull
private String mTitle;
@NonNull
private String mArtist;
@NonNull
private String mAlbum;
@NonNull
private List<MediaImage> mArtwork = new ArrayList<MediaImage>();
/**
* Returns the title associated with the media session.
*/
public String getTitle() {
return mTitle;
}
/**
* Returns the artist name associated with the media session.
*/
public String getArtist() {
return mArtist;
}
/**
* Returns the album name associated with the media session.
*/
public String getAlbum() {
return mAlbum;
}
public List<MediaImage> getArtwork() {
return mArtwork;
}
/**
* Sets the title associated with the media session.
* @param title The title to use for the media session.
*/
public void setTitle(@NonNull String title) {
mTitle = title;
}
/**
* Sets the arstist name associated with the media session.
* @param arstist The artist name to use for the media session.
*/
public void setArtist(@NonNull String artist) {
mArtist = artist;
}
/**
* Sets the album name associated with the media session.
* @param album The album name to use for the media session.
*/
public void setAlbum(@NonNull String album) {
mAlbum = album;
}
/**
* Create a new {@link MediaImage} from the C++ code, and add it to the Metadata.
* @param src The URL of the image.
* @param type The MIME type of the image.
* @param flattenedSizes The flattened array of image sizes. In native code, it is of type
* `std::vector<gfx::Size>` before flattening.
*/
@CalledByNative
private void createAndAddMediaImage(String src, String type, int[] flattenedSizes) {
assert (flattenedSizes.length % 2) == 0;
List<Rect> sizes = new ArrayList<Rect>();
for (int i = 0; (i + 1) < flattenedSizes.length; i += 2) {
sizes.add(new Rect(0, 0, flattenedSizes[i], flattenedSizes[i + 1]));
}
mArtwork.add(new MediaImage(src, type, sizes));
}
/**
* Creates a new MediaMetadata from the C++ code. This is exactly like the
* constructor below apart that it can be called by native code.
*/
@CalledByNative
private static MediaMetadata create(String title, String artist, String album) {
return new MediaMetadata(title == null ? "" : title, artist == null ? "" : artist,
album == null ? "" : album);
}
/**
* Creates a new MediaMetadata.
*/
public MediaMetadata(@NonNull String title, @NonNull String artist, @NonNull String album) {
mTitle = title;
mArtist = artist;
mAlbum = album;
}
/**
* Comparing MediaMetadata is expensive and should be used sparingly
*/
@Override
public boolean equals(Object obj) {
if (obj == this) return true;
if (!(obj instanceof MediaMetadata)) return false;
MediaMetadata other = (MediaMetadata) obj;
return TextUtils.equals(mTitle, other.mTitle)
&& TextUtils.equals(mArtist, other.mArtist)
&& TextUtils.equals(mAlbum, other.mAlbum)
&& mArtwork.equals(other.mArtwork);
}
/**
* @return The hash code of this {@link MediaMetadata}. The method uses the same algorithm in
* {@link java.util.List} for combinine hash values.
*/
@Override
public int hashCode() {
int result = mTitle.hashCode();
result = 31 * result + mArtist.hashCode();
result = 31 * result + mAlbum.hashCode();
result = 31 * result + mArtwork.hashCode();
return result;
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment