| /* |
| * Copyright (C) 2013 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.example.android.supportv7.media; |
| |
| import android.net.Uri; |
| import android.content.Context; |
| import android.graphics.Bitmap; |
| import android.support.v7.media.MediaControlIntent; |
| import android.support.v7.media.MediaRouter.RouteInfo; |
| |
| /** |
| * Abstraction of common playback operations of media items, such as play, |
| * seek, etc. Used by PlaybackManager as a backend to handle actual playback |
| * of media items. |
| */ |
| public abstract class Player { |
| protected Callback mCallback; |
| |
| public abstract boolean isRemotePlayback(); |
| public abstract boolean isQueuingSupported(); |
| |
| public abstract void connect(RouteInfo route); |
| public abstract void release(); |
| |
| // basic operations that are always supported |
| public abstract void play(final PlaylistItem item); |
| public abstract void seek(final PlaylistItem item); |
| public abstract void getStatus(final PlaylistItem item, final boolean update); |
| public abstract void pause(); |
| public abstract void resume(); |
| public abstract void stop(); |
| |
| // advanced queuing (enqueue & remove) are only supported |
| // if isQueuingSupported() returns true |
| public abstract void enqueue(final PlaylistItem item); |
| public abstract PlaylistItem remove(String iid); |
| |
| // track info for current media item |
| public void updateTrackInfo() {} |
| public String getDescription() { return ""; } |
| public Bitmap getSnapshot() { return null; } |
| |
| // presentation display |
| public void updatePresentation() {} |
| |
| public void setCallback(Callback callback) { |
| mCallback = callback; |
| } |
| |
| public static Player create(Context context, RouteInfo route) { |
| Player player; |
| if (route != null && route.supportsControlCategory( |
| MediaControlIntent.CATEGORY_REMOTE_PLAYBACK)) { |
| player = new RemotePlayer(context); |
| } else if (route != null) { |
| player = new LocalPlayer.SurfaceViewPlayer(context); |
| } else { |
| player = new LocalPlayer.OverlayPlayer(context); |
| } |
| player.connect(route); |
| return player; |
| } |
| |
| public interface Callback { |
| void onError(); |
| void onCompletion(); |
| void onPlaylistChanged(); |
| void onPlaylistReady(); |
| } |
| } |