OLD | NEW |
(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 { |
| 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; |
| 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) { |
| 92 return (a == null) ? (b == null) : a.equals(b); |
| 93 } |
| 94 } |
OLD | NEW |