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

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

Issue 2453623003: Decouple MediaSession messages from WebContents (full patch) (Closed)
Patch Set: Created 4 years, 1 month 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.
Zhiqiang Zhang (Slow) 2016/10/26 12:50:37 This is a hybrid of "WebContentsImpl & WebContents
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.browser;
6
7 import org.chromium.base.ObserverList;
8 import org.chromium.base.annotations.CalledByNative;
9 import org.chromium.base.annotations.JNINamespace;
10 import org.chromium.content_public.browser.MediaSession;
11 import org.chromium.content_public.browser.MediaSessionObserver;
12 import org.chromium.content_public.common.MediaMetadata;
13
14 /**
15 * The MediaSessionImpl Java wrapper to allow communicating with the native
16 * MediaSessionImpl object.
17 */
18 @JNINamespace("content")
19 public class MediaSessionImpl extends MediaSession {
20 private long mNativeMediaSessionAndroid;
21
22 private ObserverList<MediaSessionObserver> mObservers;
23 private ObserverList.RewindableIterator<MediaSessionObserver> mObserversIter ator;
24
25 @Override
26 public void addObserver(MediaSessionObserver observer) {
27 mObservers.addObserver(observer);
28 }
29
30 @Override
31 public void removeObserver(MediaSessionObserver observer) {
32 mObservers.removeObserver(observer);
33 }
34
35 @Override
36 public ObserverList.RewindableIterator<MediaSessionObserver> getObserversFor Testing() {
37 return mObservers.rewindableIterator();
38 }
39
40 @Override
41 public void resume() {
42 nativeResume(mNativeMediaSessionAndroid);
43 }
44
45 @Override
46 public void suspend() {
47 nativeSuspend(mNativeMediaSessionAndroid);
48 }
49
50 @Override
51 public void stop() {
52 nativeStop(mNativeMediaSessionAndroid);
53 }
54
55 @CalledByNative
56 private boolean hasObservers() {
57 return !mObservers.isEmpty();
58 }
59
60 @CalledByNative
61 private void mediaSessionDestroyed() {
62 for (mObserversIterator.rewind(); mObserversIterator.hasNext();) {
63 mObserversIterator.next().mediaSessionDestroyed();
64 }
65 }
66
67 @CalledByNative
68 private void mediaSessionStateChanged(boolean isControllable, boolean isSusp ended) {
69 for (mObserversIterator.rewind(); mObserversIterator.hasNext();) {
70 mObserversIterator.next().mediaSessionStateChanged(isControllable, i sSuspended);
71 }
72 }
73
74 @CalledByNative
75 private void mediaSessionMetadataChanged(MediaMetadata metadata) {
76 for (mObserversIterator.rewind(); mObserversIterator.hasNext();) {
77 mObserversIterator.next().mediaSessionMetadataChanged(metadata);
78 }
79 }
80
81 @CalledByNative
82 private static MediaSessionImpl create(long nativeMediaSession) {
83 return new MediaSessionImpl(nativeMediaSession);
84 }
85
86 @CalledByNative
87 private void tearDown() {
88 mNativeMediaSessionAndroid = 0;
89 for (mObserversIterator.rewind(); mObserversIterator.hasNext();) {
90 mObserversIterator.next().stopObserving();
91 }
92 mObservers.clear();
93 }
94
95 private MediaSessionImpl(long nativeMediaSession) {
96 mNativeMediaSessionAndroid = nativeMediaSession;
97 mObservers = new ObserverList<MediaSessionObserver>();
98 mObserversIterator = mObservers.rewindableIterator();
99 }
100
101 private native void nativeResume(long nativeMediaSessionAndroid);
102 private native void nativeSuspend(long nativeMediaSessionAndroid);
103 private native void nativeStop(long nativeMediaSessionAndroid);
104 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698