/**
*
*/
package org.odk.collect.android.views;
import org.javarosa.core.reference.InvalidReferenceException;
import org.javarosa.core.reference.ReferenceManager;
import com.radicaldynamic.groupinform.R;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.Toast;
import java.io.File;
import java.io.IOException;
/**
* @author ctsims
* @author carlhartung
*/
public class AudioButton extends ImageButton implements OnClickListener {
private final static String t = "AudioButton";
private String URI;
private MediaPlayer player;
public AudioButton(Context context, String URI) {
super(context);
this.setOnClickListener(this);
this.URI = URI;
Bitmap b =
BitmapFactory.decodeResource(context.getResources(),
android.R.drawable.ic_lock_silent_mode_off);
this.setImageBitmap(b);
player = null;
}
@Override
public void onClick(View v) {
if (URI == null) {
// No audio file specified
Log.e(t, "No audio file was specified");
Toast.makeText(getContext(), getContext().getString(R.string.audio_file_error),
Toast.LENGTH_LONG).show();
return;
}
String audioFilename = "";
try {
audioFilename = ReferenceManager._().DeriveReference(URI).getLocalURI();
} catch (InvalidReferenceException e) {
Log.e(t, "Invalid reference exception");
e.printStackTrace();
}
File audioFile = new File(audioFilename);
if (!audioFile.exists()) {
// We should have an audio clip, but the file doesn't exist.
String errorMsg = getContext().getString(R.string.file_missing, audioFile);
Log.e(t, errorMsg);
Toast.makeText(getContext(), errorMsg, Toast.LENGTH_LONG).show();
return;
}
// In case we're currently playing sounds.
stopPlaying();
player = new MediaPlayer();
try {
player.setDataSource(audioFilename);
player.prepare();
player.start();
player.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
mediaPlayer.release();
}
});
} catch (IOException e) {
String errorMsg = getContext().getString(R.string.audio_file_invalid);
Log.e(t, errorMsg);
Toast.makeText(getContext(), errorMsg, Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
public void stopPlaying() {
if (player != null) {
player.release();
}
}
}