mirror of
https://github.com/AntennaPod/AntennaPod.git
synced 2025-02-03 03:57:41 +01:00
Merge pull request #4592 from ByteHamster/audiofocus-reuse
Reuse audiofocus request object
This commit is contained in:
commit
aa3a350e38
@ -2,9 +2,7 @@ package de.danoeh.antennapod.core.service.playback;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.media.AudioAttributes;
|
import android.media.AudioAttributes;
|
||||||
import android.media.AudioFocusRequest;
|
|
||||||
import android.media.AudioManager;
|
import android.media.AudioManager;
|
||||||
import android.os.Build;
|
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
@ -12,11 +10,13 @@ import android.util.Log;
|
|||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
import android.view.SurfaceHolder;
|
import android.view.SurfaceHolder;
|
||||||
|
|
||||||
|
import androidx.media.AudioAttributesCompat;
|
||||||
|
import androidx.media.AudioFocusRequestCompat;
|
||||||
|
import androidx.media.AudioManagerCompat;
|
||||||
import org.antennapod.audio.MediaPlayer;
|
import org.antennapod.audio.MediaPlayer;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.EnumSet;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
@ -57,6 +57,7 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
|
|||||||
private final AtomicBoolean startWhenPrepared;
|
private final AtomicBoolean startWhenPrepared;
|
||||||
private volatile boolean pausedBecauseOfTransientAudiofocusLoss;
|
private volatile boolean pausedBecauseOfTransientAudiofocusLoss;
|
||||||
private volatile Pair<Integer, Integer> videoSize;
|
private volatile Pair<Integer, Integer> videoSize;
|
||||||
|
private final AudioFocusRequestCompat audioFocusRequest;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Some asynchronous calls might change the state of the MediaPlayer object. Therefore calls in other threads
|
* Some asynchronous calls might change the state of the MediaPlayer object. Therefore calls in other threads
|
||||||
@ -154,6 +155,16 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
|
|||||||
pausedBecauseOfTransientAudiofocusLoss = false;
|
pausedBecauseOfTransientAudiofocusLoss = false;
|
||||||
mediaType = MediaType.UNKNOWN;
|
mediaType = MediaType.UNKNOWN;
|
||||||
videoSize = null;
|
videoSize = null;
|
||||||
|
|
||||||
|
AudioAttributesCompat audioAttributes = new AudioAttributesCompat.Builder()
|
||||||
|
.setUsage(AudioAttributesCompat.USAGE_MEDIA)
|
||||||
|
.setContentType(AudioAttributesCompat.CONTENT_TYPE_SPEECH)
|
||||||
|
.build();
|
||||||
|
audioFocusRequest = new AudioFocusRequestCompat.Builder(AudioManagerCompat.AUDIOFOCUS_GAIN)
|
||||||
|
.setAudioAttributes(audioAttributes)
|
||||||
|
.setOnAudioFocusChangeListener(audioFocusChangeListener)
|
||||||
|
.setWillPauseWhenDucked(true)
|
||||||
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -287,25 +298,7 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
|
|||||||
|
|
||||||
private void resumeSync() {
|
private void resumeSync() {
|
||||||
if (playerStatus == PlayerStatus.PAUSED || playerStatus == PlayerStatus.PREPARED) {
|
if (playerStatus == PlayerStatus.PAUSED || playerStatus == PlayerStatus.PREPARED) {
|
||||||
int focusGained;
|
int focusGained = AudioManagerCompat.requestAudioFocus(audioManager, audioFocusRequest);
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
||||||
AudioAttributes audioAttributes = new AudioAttributes.Builder()
|
|
||||||
.setUsage(AudioAttributes.USAGE_MEDIA)
|
|
||||||
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
|
|
||||||
.build();
|
|
||||||
AudioFocusRequest audioFocusRequest = new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
|
|
||||||
.setAudioAttributes(audioAttributes)
|
|
||||||
.setOnAudioFocusChangeListener(audioFocusChangeListener)
|
|
||||||
.setAcceptsDelayedFocusGain(true)
|
|
||||||
.setWillPauseWhenDucked(true)
|
|
||||||
.build();
|
|
||||||
focusGained = audioManager.requestAudioFocus(audioFocusRequest);
|
|
||||||
} else {
|
|
||||||
focusGained = audioManager.requestAudioFocus(
|
|
||||||
audioFocusChangeListener, AudioManager.STREAM_MUSIC,
|
|
||||||
AudioManager.AUDIOFOCUS_GAIN);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (focusGained == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
|
if (focusGained == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
|
||||||
Log.d(TAG, "Audiofocus successfully requested");
|
Log.d(TAG, "Audiofocus successfully requested");
|
||||||
@ -373,13 +366,7 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void abandonAudioFocus() {
|
private void abandonAudioFocus() {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
AudioManagerCompat.abandonAudioFocusRequest(audioManager, audioFocusRequest);
|
||||||
AudioFocusRequest.Builder builder = new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
|
|
||||||
.setOnAudioFocusChangeListener(audioFocusChangeListener);
|
|
||||||
audioManager.abandonAudioFocusRequest(builder.build());
|
|
||||||
} else {
|
|
||||||
audioManager.abandonAudioFocus(audioFocusChangeListener);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user