package dk.dr.radio.afspilning.wrapper;
import android.content.Context;
import android.media.MediaPlayer;
import android.net.Uri;
import java.io.FileInputStream;
import java.io.IOException;
/**
* Wrapper til MediaPlayer.
* Akamai kræver at MediaPlayer'en bliver 'wrappet' sådan at deres statistikmodul
* kommer ind imellem den og resten af programmet.
* Dette muliggør også fjernafspilning (a la AirPlay), da f.eks.
* ChromeCast-understøttelse kræver præcist den samme wrapping.
* Oprettet af Jacob Nordfalk 25-03-14.
*/
public class AndroidMediaPlayerWrapper implements MediaPlayerWrapper {
MediaPlayer mediaPlayer;
public AndroidMediaPlayerWrapper(boolean opretMediaPlayer) {
if (opretMediaPlayer) mediaPlayer = new MediaPlayer();
}
public AndroidMediaPlayerWrapper() {
this(true);
}
private static int tæller;
@Override
public void setDataSource(String lydUrl) throws IOException {
if (lydUrl.startsWith("file:")) {
/* FIX: Det ser ud til at nogle telefonmodellers MediaPlayer har problemer
med at åbne filer på SD-kortet hvis vi bare kalder setDataSource("file:///...
Det er bl.a. set på:
Telefonmodel: LT26i LT26i_1257-7813 - Android v4.1.2 (sdk: 16)
Derfor bruger vi for en FileDescriptor i dette tilfælde
*/
FileInputStream fis = new FileInputStream(Uri.parse(lydUrl).getPath());
mediaPlayer.setDataSource(fis.getFD());
fis.close();
return;
}
mediaPlayer.setDataSource(lydUrl);
}
@Override
public void setAudioStreamType(int streamMusic) {
mediaPlayer.setAudioStreamType(streamMusic);
}
@Override
public void prepare() throws IOException {
mediaPlayer.prepare();
}
@Override
public void stop() {
mediaPlayer.stop();
}
@Override
public void release() {
mediaPlayer.release();
}
@Override
public void seekTo(long offsetMs) {
mediaPlayer.seekTo((int) offsetMs);
}
@Override
public long getDuration() {
return mediaPlayer.getDuration();
}
@Override
public long getCurrentPosition() {
return mediaPlayer.getCurrentPosition();
}
@Override
public void start() {
mediaPlayer.start();
}
@Override
public void reset() {
mediaPlayer.reset();
}
@Override
public boolean isPlaying() {
return mediaPlayer.isPlaying();
}
@Override
public void setVolume(float leftVolume, float rightVolume) {
mediaPlayer.setVolume(leftVolume, rightVolume);
}
@Override
public void setWakeMode(Context ctx, int screenDimWakeLock) {
mediaPlayer.setWakeMode(ctx, screenDimWakeLock);
}
@Override
public void setMediaPlayerLytter(MediaPlayerLytter lytter) {
mediaPlayer.setOnCompletionListener(lytter);
mediaPlayer.setOnCompletionListener(lytter);
mediaPlayer.setOnErrorListener(lytter);
mediaPlayer.setOnPreparedListener(lytter);
mediaPlayer.setOnBufferingUpdateListener(lytter);
mediaPlayer.setOnSeekCompleteListener(lytter);
}
@Override
public String toString() {
return "Android MediaPlayer";
}
}