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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaPlaybackControls.java

Issue 1159113006: [Android] A prototype of the interactive media notification. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed a few missed nits Created 5 years, 6 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 2015 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.chrome.browser.media.ui;
6
7 import java.util.Set;
8 import java.util.concurrent.CopyOnWriteArraySet;
9
10 /**
11 * MediaPlaybackControls is an abstract base class for various UI views that are intended to control
12 * media playback. MediaPlaybackControls contains a number of setters that will update the
13 * MediaPlaybackControls's UI.
14 * Call {@code MediaPlaybackControls#addListener} with an implementation of
15 * {@code MediaPlaybackControls.Listener} to receive messages when the user inte racts with the
16 * controls.
17 */
18 public abstract class MediaPlaybackControls implements MediaPlaybackListener {
mlamouri (slow - plz ping) 2015/06/23 14:58:56 I think having that class here is great but are th
whywhat 2015/06/23 19:39:11 You're right.
19
20 /**
21 * Base interface for classes that need to listen to transport control event s.
22 */
23 public static interface Listener {
24 void onPlay();
25 void onPause();
26 }
27
28 // Initialized lazily to simplify testing. Should only ever be accessed thro ugh getListeners to
29 // ensure correct initialization.
30 private Set<Listener> mListeners;
31 protected MediaInfo mMediaInfo;
32
33 /**
34 * @return the media information previously assigned with
35 * {@link #setMediaInfo(MediaInfo)}, or {@code null} if the {@link MediaInfo }
36 * has not yet been assigned.
37 */
38 public final MediaInfo getMediaInfo() {
39 return mMediaInfo;
40 }
41
42 /**
43 * Sets the media information to display on the MediaPlaybackControls.
44 * @param mediaInfo the media information to use.
45 */
46 public final void setMediaInfo(MediaInfo mediaInfo) {
47 if (equal(mMediaInfo, mediaInfo)) return;
mlamouri (slow - plz ping) 2015/06/23 14:58:56 nit: mMediaInfo.equals(mediaInfo)
whywhat 2015/06/23 19:39:11 This would cause NPE if mMediaInfo is null.
48
49 mMediaInfo = mediaInfo;
50 onMediaInfoChanged();
51 }
52
53 /**
54 * Registers a {@link Listener} with the MediaPlaybackControls.
55 * @param listener the Listener to be registered.
56 */
57 public void addListener(Listener listener) {
58 getListeners().add(listener);
59 }
60
61 /**
62 * Unregisters a {@link Listener} previously registered with {@link #addList ener(Listener)}.
63 * @param listener the Listener to be removed.
64 */
65 public void removeListener(Listener listener) {
66 getListeners().remove(listener);
67 }
68
69 /**
70 * Displays the MediaPlaybackControls to the user.
71 * @param mediaInfo the information about the media.
72 */
73 public abstract void show(MediaInfo mediaInfo);
74
75 /**
76 * Hides the MediaPlaybackControls.
77 * @param tabId tab that requests to hide the controls
78 */
79 public abstract void hide(int tabId);
80
81 /**
82 * @return the current list of listeners.
83 */
84 protected final Set<Listener> getListeners() {
85 if (mListeners == null) mListeners = new CopyOnWriteArraySet<Listener>() ;
86 return mListeners;
87 }
88
89 protected void onMediaInfoChanged() {}
90
91 private static boolean equal(Object a, Object b) {
mlamouri (slow - plz ping) 2015/06/23 14:58:56 Why do you need that?
whywhat 2015/06/23 19:39:11 See above :) I think we need a more generic equal
92 return (a == null) ? (b == null) : a.equals(b);
93 }
94 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698