package dk.dr.radio.afspilning.wrapper; import android.content.Context; import android.net.Uri; import android.os.PowerManager; import com.devbrackets.android.exomedia.EMAudioPlayer; import java.io.IOException; import dk.dr.radio.diverse.App; /** * @author Jacob Nordfalk 28-11-14. */ public class EmaPlayerWrapper extends EMAudioPlayer implements MediaPlayerWrapper { private PowerManager.WakeLock mWakeLock = null; public EmaPlayerWrapper() { super(App.instans); } @Override public void setDataSource(final String url) throws IOException { //App.kortToast("EmaPlayerWrapper setDataSource\n" + url); super.setDataSource(App.instans, Uri.parse(url)); } @Override public void setAudioStreamType(int streamMusic) { super.setAudioStreamType(streamMusic); } @Override public void prepare() throws IOException { super.prepareAsync(); } @Override public void seekTo(long offsetMs) { super.seekTo((int) offsetMs); } @Override public long getDuration() { return super.getDuration(); } @Override public long getCurrentPosition() { return super.getCurrentPosition(); } @Override public void start() { super.start(); stayAwake(true); } @Override public void stop() { super.stopPlayback(); stayAwake(false); } @Override public void release() { super.release(); stayAwake(false); } @Override public void reset() { super.reset(); stayAwake(false); } @Override public boolean isPlaying() { return super.isPlaying(); } @Override public void setVolume(float leftVolume, float rightVolume) { super.setVolume(leftVolume, rightVolume); } /** * Set the low-level power management behavior for this MediaPlayer. * * <p>This function has the MediaPlayer access the low-level power manager * service to control the device's power usage while playing is occurring. * The parameter is a combination of {@link android.os.PowerManager} wake flags. * Use of this method requires {@link android.Manifest.permission#WAKE_LOCK} * permission. * By default, no attempt is made to keep the device awake during playback. * * @param context the Context to use * @param mode the power/wake mode to set * @see android.os.PowerManager */ public void setWakeMode(Context context, int mode) { boolean washeld = false; if (mWakeLock != null) { if (mWakeLock.isHeld()) { washeld = true; mWakeLock.release(); } mWakeLock = null; } PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(mode|PowerManager.ON_AFTER_RELEASE, "EmaPlayer"); mWakeLock.setReferenceCounted(false); if (washeld) { mWakeLock.acquire(); } } private void stayAwake(boolean awake) { if (mWakeLock != null) { if (awake && !mWakeLock.isHeld()) { mWakeLock.acquire(); } else if (!awake && mWakeLock.isHeld()) { mWakeLock.release(); } } } @Override public void setMediaPlayerLytter(MediaPlayerLytter lytter) { setOnCompletionListener(lytter); setOnCompletionListener(lytter); setOnErrorListener(lytter); setOnPreparedListener(lytter); setOnBufferingUpdateListener(lytter); //setOnSeekCompleteListener(lytter); } @Override public String toString() { return "Ema Player"; } }