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

Side by Side Diff: content/public/android/java/src/org/chromium/content_public/browser/MediaSessionDelegate.java

Issue 2439483003: Link MediaSessionTabHelper with native MediaSession [CL is going to be split] (Closed)
Patch Set: addressed nits 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.content_public.browser;
6
7 import org.chromium.base.annotations.CalledByNative;
8 import org.chromium.base.annotations.JNINamespace;
9 import org.chromium.content_public.common.MediaMetadata;
10
11 /**
12 * The class for listening to native {@link MediaSession} and operating on it. I t is the Java
13 * counterpart of {@link MediaSessionDelegateAndroid}. The Java object and its l inked native object
14 * must notify each other when anyone of them is destroyed. Clients of this clas s should create a
15 * {@link MediaSessionDelegate} object and explicitly call
16 * {@link WebContents#addMediaSessionDelegate} with the object as an argument. C lients of this class
17 * should also call {@link MediaSessionDelegate#disconnectMediaSession} when der eferencing the
18 * object.
19 */
20 @JNINamespace("content")
21 public class MediaSessionDelegate {
whywhat 2016/10/20 22:56:53 Do you expect other derived classes from this one?
Zhiqiang Zhang (Slow) 2016/10/21 13:43:53 I prefer not to merge it, since the subclass in MS
22 // The native MediaSessionDelegateAndroid object
23 private long mNativeMediaSessionDelegateAndroid;
24
25 /**
26 * Disconnects this delegate from the associated MediaSession. Clients of th is class must call
27 * this method when dereferencing this object. The clean up is done in
28 * {@link MediaSessionDelegate#mediaSessionDisconnected}.
29 */
30 public final void disconnectMediaSession() {
31 if (hasNativeMediaSession()) {
32 nativeDisconnectMediaSession(mNativeMediaSessionDelegateAndroid);
33 }
34 }
35
36 /**
37 * Called when this {@link MediaSessionDelegate} has been disconnected from a native
38 * {@link MediaSession}.
39 */
40 public void mediaSessionDisconnected() {}
41
42 /**
43 * Called when the native {@link MediaSession} state has changed.
44 * @param isControllable Whether the native {@link MediaSession} is controll able.
45 * @param isSuspended Whether the native {@link MediaSession} is suspended.
46 */
47 @CalledByNative
48 public void mediaSessionStateChanged(boolean isControllable, boolean isSuspe nded) {}
49
50 /**
51 * Called when the native {@link MediaSession} has changed metadata.
52 * @param metadata The new metadata of the native {@link MediaSession}. "nul l" is for unsetting
53 * metadata.
54 */
55 @CalledByNative
56 public void mediaSessionMetadataChanged(MediaMetadata metadata) {}
57
58 /**
59 * Resume the native {@link MediaSession}.
60 */
61 public void resumeMediaSession() {
62 if (hasNativeMediaSession()) nativeResumeMediaSession(mNativeMediaSessio nDelegateAndroid);
whywhat 2016/10/20 22:56:53 I think if you set mMediaSessionDelegate to null i
Zhiqiang Zhang (Slow) 2016/10/21 13:43:53 Yes. Just in case the client still somehow calls t
whywhat 2016/10/21 15:51:36 How? If you set the only reference to it to null,
63 }
64
65 /**
66 * Suspend the native {@link MediaSession}.
67 */
68 public void suspendMediaSession() {
69 if (hasNativeMediaSession()) nativeSuspendMediaSession(mNativeMediaSessi onDelegateAndroid);
70 }
71
72 /**
73 * Stop the native {@link MediaSession}.
74 */
75 public void stopMediaSession() {
76 if (hasNativeMediaSession()) nativeStopMediaSession(mNativeMediaSessionD elegateAndroid);
77 }
78
79 @CalledByNative
80 private final void mediaSessionConnected(long nativeMediaSessionDelegateAndr oid) {
81 mNativeMediaSessionDelegateAndroid = nativeMediaSessionDelegateAndroid;
82 }
83
84 @CalledByNative
85 private void mediaSessionDisconnectedWrapper() {
whywhat 2016/10/20 22:56:53 why wrapper? Perhaps you could've: @CalledByNati
Zhiqiang Zhang (Slow) 2016/10/21 13:43:53 Yes, sorry I'm bad at names. Using "on-" now. Howe
whywhat 2016/10/21 15:51:36 Does it matter that MediaSession is still alive if
86 mNativeMediaSessionDelegateAndroid = 0;
87 mediaSessionDisconnected();
88 }
89
90 /**
91 * @return Whether this {@link MediaSessionDelegate} object is connected to a native
92 * MediaSession.
93 */
94 private boolean hasNativeMediaSession() {
95 return mNativeMediaSessionDelegateAndroid != 0;
96 }
97
98 private native void nativeResumeMediaSession(long nativeMediaSessionDelegate Android);
99 private native void nativeSuspendMediaSession(long nativeMediaSessionDelegat eAndroid);
100 private native void nativeStopMediaSession(long nativeMediaSessionDelegateAn droid);
101 private native void nativeDisconnectMediaSession(long nativeMediaSessionDele gateAndroid);
102 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698