package io.jari.dumpert;
import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.view.KeyEvent;
import android.view.View;
import android.widget.MediaController;
import java.io.IOException;
/**
* JARI.IO
* Date: 26-12-14
* Time: 1:20
*
* AudioHandler creates a mediacontroller that controls a audio playback stream.
*/
public class AudioHandler implements MediaPlayer.OnBufferingUpdateListener, MediaPlayer.OnCompletionListener, MediaPlayer.OnPreparedListener, MediaController.MediaPlayerControl {
public MediaPlayer mediaPlayer;
public MediaController controller;
private View anchor;
private Activity context;
public void playAudio(String url, Activity context, View anchor) throws IOException {
this.anchor = anchor;
this.context = context;
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(url);
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setOnBufferingUpdateListener(this);
mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.prepare();
}
public void onPrepared(MediaPlayer mediaplayer) {
controller = new MediaController(context) {
@Override
public void show(int timeout) {
//we NEVER want to pass anything BUT 0, because controller always has to be visible.
//so ignore the passed argument, and pass 0
super.show(0);
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
//mediacontroller tries some funny stuff here, so use SUPER HACKY METHODS! yay!
if(event.getKeyCode() == KeyEvent.KEYCODE_BACK)
context.onBackPressed();
return false;
}
};
mediaplayer.start();
controller.setMediaPlayer(this);
controller.setAnchorView(anchor);
controller.setEnabled(true);
controller.show();
}
public void start() {
mediaPlayer.start();
}
public void pause() {
mediaPlayer.pause();
}
public int getDuration() {
return mediaPlayer.getDuration();
}
public int getCurrentPosition() {
return mediaPlayer.getCurrentPosition();
}
public void seekTo(int i) {
mediaPlayer.seekTo(i);
}
public boolean isPlaying() {
return mediaPlayer.isPlaying();
}
public int getBufferPercentage() {
return 0;
}
public boolean canPause() {
return true;
}
public boolean canSeekBackward() {
return true;
}
public boolean canSeekForward() {
return true;
}
@Override
public int getAudioSessionId() {
return 1;
}
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
}
@Override
public void onCompletion(MediaPlayer mp) {
}
}