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 31 public abstract boolean isRemotePlayback(); 32 public abstract boolean isQueuingSupported(); 33 34 public abstract void connect(RouteInfo route); 35 public abstract void release(); 36 37 // basic operations that are always supported 38 public abstract void play(final PlaylistItem item); 39 public abstract void seek(final PlaylistItem item); 40 public abstract void getStatus(final PlaylistItem item, final boolean update); 41 public abstract void pause(); 42 public abstract void resume(); 43 public abstract void stop(); 44 45 // advanced queuing (enqueue & remove) are only supported 46 // if isQueuingSupported() returns true 47 public abstract void enqueue(final PlaylistItem item); 48 public abstract PlaylistItem remove(String iid); 49 50 // route statistics 51 public void updateStatistics() {} 52 public String getStatistics() { return ""; } 53 54 // presentation display 55 public void updatePresentation() {} 56 57 public void setCallback(Callback callback) { 58 mCallback = callback; 59 } 60 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 { 76 void onError(); 77 void onCompletion(); 78 void onPlaylistChanged(); 79 void onPlaylistReady(); 80 } 81 }