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 88b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public synchronized boolean isPlaying() { 89b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return mDelegate.isPlaying(); 90b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 91b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 92b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson @Override 93b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public synchronized int getCurrentPosition() { 94b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return mDelegate.getCurrentPosition(); 95b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 96b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 97b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public void setVariableSpeed(float rate) { 98b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson ((VariableSpeed) mDelegate).setVariableSpeed(rate); 99b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 100b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 101b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson @Override 102b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public synchronized void pause() { 103b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mDelegate.pause(); 104b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 105dc442b4d99512bf7c41ee5ceae6c93a3c3568b57Flavio Lerda 106dc442b4d99512bf7c41ee5ceae6c93a3c3568b57Flavio Lerda @Override 107dc442b4d99512bf7c41ee5ceae6c93a3c3568b57Flavio Lerda public void setAudioStreamType(int streamType) { 108dc442b4d99512bf7c41ee5ceae6c93a3c3568b57Flavio Lerda mDelegate.setAudioStreamType(streamType); 109dc442b4d99512bf7c41ee5ceae6c93a3c3568b57Flavio Lerda } 110b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson} 111