1b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson/* 2b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * Copyright (C) 2011 The Android Open Source Project 3b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * 4b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * Licensed under the Apache License, Version 2.0 (the "License"); 5b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * you may not use this file except in compliance with the License. 6b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * You may obtain a copy of the License at 7b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * 8b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * http://www.apache.org/licenses/LICENSE-2.0 9b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * 10b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * Unless required by applicable law or agreed to in writing, software 11b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * distributed under the License is distributed on an "AS IS" BASIS, 12b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * See the License for the specific language governing permissions and 14b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * limitations under the License. 15b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson */ 16b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 17b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudsonpackage com.android.ex.variablespeed; 18b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 19b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudsonimport android.content.Context; 20b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudsonimport android.media.MediaPlayer; 21b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudsonimport android.net.Uri; 22b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 23b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudsonimport java.io.IOException; 24b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 25b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson/** 26b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * Simple wrapper around a {@link MediaPlayerProxy}, guaranteeing that every call made to the 27b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * MediaPlayerProxy is single-threaded. 28b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson */ 29b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudsonpublic class SingleThreadedMediaPlayerProxy implements MediaPlayerProxy { 30b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson private final MediaPlayerProxy mDelegate; 31b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 32b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public SingleThreadedMediaPlayerProxy(MediaPlayerProxy delegate) { 33b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mDelegate = delegate; 34b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 35b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 36b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson @Override 37b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public synchronized void setOnErrorListener(MediaPlayer.OnErrorListener listener) { 38b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mDelegate.setOnErrorListener(listener); 39b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 40b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 41b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson @Override 42b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public synchronized void setOnCompletionListener(MediaPlayer.OnCompletionListener listener) { 43b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mDelegate.setOnCompletionListener(listener); 44b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 45b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 46b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson @Override 47b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public synchronized void release() { 48b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mDelegate.release(); 49b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 50b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 51b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson @Override 52b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public synchronized void reset() { 53b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mDelegate.reset(); 54b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 55b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 56b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson @Override 57b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public synchronized void setDataSource(String path) throws IllegalStateException, IOException { 58b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mDelegate.setDataSource(path); 59b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 60b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 61b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson @Override 62b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public synchronized void setDataSource(Context context, Uri intentUri) 63b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson throws IllegalStateException, IOException { 64b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mDelegate.setDataSource(context, intentUri); 65b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 66b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 67b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson @Override 68b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public synchronized void prepare() throws IOException { 69b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mDelegate.prepare(); 70b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 71b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 72b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson @Override 73b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public synchronized int getDuration() { 74b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return mDelegate.getDuration(); 75b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 76b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 77b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson @Override 78b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public synchronized void seekTo(int startPosition) { 79b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mDelegate.seekTo(startPosition); 80b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 81b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 82b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson @Override 83b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public synchronized void start() { 84b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mDelegate.start(); 85b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 86b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 87b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson @Override 888502b724a9fdc104e7b4a3aba1641e101b4c7be9Jay Shrauner public synchronized boolean isReadyToPlay() { 898502b724a9fdc104e7b4a3aba1641e101b4c7be9Jay Shrauner return mDelegate.isReadyToPlay(); 908502b724a9fdc104e7b4a3aba1641e101b4c7be9Jay Shrauner } 918502b724a9fdc104e7b4a3aba1641e101b4c7be9Jay Shrauner 928502b724a9fdc104e7b4a3aba1641e101b4c7be9Jay Shrauner @Override 93b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public synchronized boolean isPlaying() { 94b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return mDelegate.isPlaying(); 95b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 96b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 97b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson @Override 98b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public synchronized int getCurrentPosition() { 99b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return mDelegate.getCurrentPosition(); 100b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 101b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 102b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public void setVariableSpeed(float rate) { 103b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson ((VariableSpeed) mDelegate).setVariableSpeed(rate); 104b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 105b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 106b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson @Override 107b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public synchronized void pause() { 108b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mDelegate.pause(); 109b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 110dc442b4d99512bf7c41ee5ceae6c93a3c3568b57Flavio Lerda 111dc442b4d99512bf7c41ee5ceae6c93a3c3568b57Flavio Lerda @Override 112dc442b4d99512bf7c41ee5ceae6c93a3c3568b57Flavio Lerda public void setAudioStreamType(int streamType) { 113dc442b4d99512bf7c41ee5ceae6c93a3c3568b57Flavio Lerda mDelegate.setAudioStreamType(streamType); 114dc442b4d99512bf7c41ee5ceae6c93a3c3568b57Flavio Lerda } 115b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson} 116