2022-01-04 08:11:51 +00:00
|
|
|
package eu.faircode.email;
|
|
|
|
|
|
|
|
import android.content.Context;
|
|
|
|
import android.media.AudioAttributes;
|
|
|
|
import android.media.MediaPlayer;
|
|
|
|
import android.net.Uri;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.util.concurrent.Semaphore;
|
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
|
|
public class MediaPlayerHelper {
|
2022-01-04 18:40:27 +00:00
|
|
|
static final int DEFAULT_ALARM_DURATION = 30; // seconds
|
2022-01-04 08:11:51 +00:00
|
|
|
|
2022-01-04 18:40:27 +00:00
|
|
|
static void play(Context context, Uri uri, boolean alarm, int duration) throws IOException {
|
2022-01-04 08:11:51 +00:00
|
|
|
Semaphore sem = new Semaphore(0);
|
|
|
|
|
|
|
|
AudioAttributes attrs = new AudioAttributes.Builder()
|
|
|
|
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
|
|
|
|
.setUsage(alarm ? AudioAttributes.USAGE_ALARM : AudioAttributes.USAGE_NOTIFICATION)
|
|
|
|
.build();
|
|
|
|
|
|
|
|
MediaPlayer mediaPlayer = new MediaPlayer();
|
|
|
|
mediaPlayer.setAudioAttributes(attrs);
|
|
|
|
mediaPlayer.setDataSource(context.getApplicationContext(), uri);
|
|
|
|
mediaPlayer.setLooping(false);
|
|
|
|
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
|
|
|
|
@Override
|
|
|
|
public void onPrepared(MediaPlayer mp) {
|
|
|
|
mp.start();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
|
|
|
|
@Override
|
|
|
|
public void onCompletion(MediaPlayer mp) {
|
|
|
|
mp.stop();
|
|
|
|
mp.release();
|
|
|
|
sem.release();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
mediaPlayer.prepareAsync();
|
|
|
|
|
|
|
|
try {
|
2022-01-04 18:40:27 +00:00
|
|
|
if (!sem.tryAcquire(duration, TimeUnit.SECONDS)) {
|
2022-01-04 08:11:51 +00:00
|
|
|
mediaPlayer.stop();
|
|
|
|
mediaPlayer.release();
|
|
|
|
}
|
|
|
|
} catch (Throwable ex) {
|
|
|
|
Log.w(ex);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|