Chromium Code Reviews| Index: content/public/android/java/src/org/chromium/content_public/browser/MediaSessionDelegate.java |
| diff --git a/content/public/android/java/src/org/chromium/content_public/browser/MediaSessionDelegate.java b/content/public/android/java/src/org/chromium/content_public/browser/MediaSessionDelegate.java |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..705575a3b9e826177c1ee0bd0576baf8b7aee3b2 |
| --- /dev/null |
| +++ b/content/public/android/java/src/org/chromium/content_public/browser/MediaSessionDelegate.java |
| @@ -0,0 +1,102 @@ |
| +// 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.browser; |
| + |
| +import org.chromium.base.annotations.CalledByNative; |
| +import org.chromium.base.annotations.JNINamespace; |
| +import org.chromium.content_public.common.MediaMetadata; |
| + |
| +/** |
| + * The class for listening to native {@link MediaSession} and operating on it. It is the Java |
| + * counterpart of {@link MediaSessionDelegateAndroid}. The Java object and its linked native object |
| + * must notify each other when anyone of them is destroyed. Clients of this class should create a |
| + * {@link MediaSessionDelegate} object and explicitly call |
| + * {@link WebContents#addMediaSessionDelegate} with the object as an argument. Clients of this class |
| + * should also call {@link MediaSessionDelegate#disconnectMediaSession} when dereferencing the |
| + * object. |
| + */ |
| +@JNINamespace("content") |
| +public class MediaSessionDelegate { |
| + // The native MediaSessionDelegateAndroid object |
| + private long mNativeMediaSessionDelegateAndroid; |
| + |
| + /** |
| + * Disconnects this delegate from the associated MediaSession. Clients of this class must call |
| + * this method when dereferencing this object. The clean up is done in |
| + * {@link MediaSessionDelegate#mediaSessionDisconnected}. |
| + */ |
| + public final void disconnectMediaSession() { |
| + if (hasNativeMediaSession()) { |
| + nativeDisconnectMediaSession(mNativeMediaSessionDelegateAndroid); |
| + } |
| + } |
| + |
| + /** |
| + * Called when this {@link MediaSessionDelegate} has been disconnected from a native |
| + * {@link MediaSession}. |
| + */ |
| + public void mediaSessionDisconnected() {} |
| + |
| + /** |
| + * Called when the native {@link MediaSession} state has changed. |
| + * @param isControllable Whether the native {@link MediaSession} is controllable. |
| + * @param isSuspended Whether the native {@link MediaSession} is suspended. |
| + */ |
| + @CalledByNative |
| + public void mediaSessionStateChanged(boolean isControllable, boolean isSuspended) {} |
| + |
| + /** |
| + * Called when the native {@link MediaSession} has changed metadata. |
| + * @param metadata The new metadata of the native {@link MediaSession}. "null" is for unsetting |
| + * metadata. |
| + */ |
| + @CalledByNative |
| + public void mediaSessionMetadataChanged(MediaMetadata metadata) {} |
| + |
| + /** |
| + * Resume the native {@link MediaSession}. |
| + */ |
| + public final void resumeMediaSession() { |
| + if (hasNativeMediaSession()) nativeResumeMediaSession(mNativeMediaSessionDelegateAndroid); |
| + } |
| + |
| + /** |
| + * Suspend the native {@link MediaSession}. |
| + */ |
| + public final void suspendMediaSession() { |
| + if (hasNativeMediaSession()) nativeSuspendMediaSession(mNativeMediaSessionDelegateAndroid); |
| + } |
| + |
| + /** |
| + * Stop the native {@link MediaSession}. |
| + */ |
| + public final void stopMediaSession() { |
| + if (hasNativeMediaSession()) nativeStopMediaSession(mNativeMediaSessionDelegateAndroid); |
| + } |
| + |
| + @CalledByNative |
| + private final void onMediaSessionConnected(long nativeMediaSessionDelegateAndroid) { |
| + mNativeMediaSessionDelegateAndroid = nativeMediaSessionDelegateAndroid; |
| + } |
| + |
| + @CalledByNative |
| + private final void onMediaSessionDisconnected() { |
| + mNativeMediaSessionDelegateAndroid = 0; |
| + mediaSessionDisconnected(); |
| + } |
| + |
| + /** |
| + * @return Whether this {@link MediaSessionDelegate} object is connected to a native |
| + * MediaSession. |
| + */ |
| + private final boolean hasNativeMediaSession() { |
| + return mNativeMediaSessionDelegateAndroid != 0; |
|
whywhat
2016/10/21 18:28:15
Why do you think any methods of this class can be
|
| + } |
| + |
| + private native void nativeResumeMediaSession(long nativeMediaSessionDelegateAndroid); |
| + private native void nativeSuspendMediaSession(long nativeMediaSessionDelegateAndroid); |
| + private native void nativeStopMediaSession(long nativeMediaSessionDelegateAndroid); |
| + private native void nativeDisconnectMediaSession(long nativeMediaSessionDelegateAndroid); |
| +} |