1 /*
2  * Copyright (C) 2013 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.example.android.mediarouter.player;
18 
19 import android.content.Context;
20 import android.support.v7.media.MediaControlIntent;
21 import android.support.v7.media.MediaRouter.RouteInfo;
22 
23 /**
24  * Abstraction of common playback operations of media items, such as play,
25  * seek, etc. Used by PlaybackManager as a backend to handle actual playback
26  * of media items.
27  */
28 public abstract class Player {
29     protected Callback mCallback;
30 
isRemotePlayback()31     public abstract boolean isRemotePlayback();
isQueuingSupported()32     public abstract boolean isQueuingSupported();
33 
connect(RouteInfo route)34     public abstract void connect(RouteInfo route);
release()35     public abstract void release();
36 
37     // basic operations that are always supported
play(final PlaylistItem item)38     public abstract void play(final PlaylistItem item);
seek(final PlaylistItem item)39     public abstract void seek(final PlaylistItem item);
getStatus(final PlaylistItem item, final boolean update)40     public abstract void getStatus(final PlaylistItem item, final boolean update);
pause()41     public abstract void pause();
resume()42     public abstract void resume();
stop()43     public abstract void stop();
44 
45     // advanced queuing (enqueue & remove) are only supported
46     // if isQueuingSupported() returns true
enqueue(final PlaylistItem item)47     public abstract void enqueue(final PlaylistItem item);
remove(String iid)48     public abstract PlaylistItem remove(String iid);
49 
50     // route statistics
updateStatistics()51     public void updateStatistics() {}
getStatistics()52     public String getStatistics() { return ""; }
53 
54     // presentation display
updatePresentation()55     public void updatePresentation() {}
56 
setCallback(Callback callback)57     public void setCallback(Callback callback) {
58         mCallback = callback;
59     }
60 
create(Context context, RouteInfo route)61     public static Player create(Context context, RouteInfo route) {
62         Player player;
63         if (route != null && route.supportsControlCategory(
64                 MediaControlIntent.CATEGORY_REMOTE_PLAYBACK)) {
65             player = new RemotePlayer(context);
66         } else if (route != null) {
67             player = new LocalPlayer.SurfaceViewPlayer(context);
68         } else {
69             player = new LocalPlayer.OverlayPlayer(context);
70         }
71         player.connect(route);
72         return player;
73     }
74 
75     public interface Callback {
onError()76         void onError();
onCompletion()77         void onCompletion();
onPlaylistChanged()78         void onPlaylistChanged();
onPlaylistReady()79         void onPlaylistReady();
80     }
81 }
82