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