diff --git a/app/src/main/java/com/futo/platformplayer/Settings.kt b/app/src/main/java/com/futo/platformplayer/Settings.kt
index 4201783a..c1e7b313 100644
--- a/app/src/main/java/com/futo/platformplayer/Settings.kt
+++ b/app/src/main/java/com/futo/platformplayer/Settings.kt
@@ -385,6 +385,10 @@ class Settings : FragmentedStorageFileJson() {
@FormField(R.string.background_switch_audio, FieldForm.TOGGLE, R.string.background_switch_audio_description, 10)
var backgroundSwitchToAudio: Boolean = true;
+
+ @FormField(R.string.restart_after_audio_focus_loss, FieldForm.DROPDOWN, R.string.restart_playback_when_gaining_audio_focus_after_a_loss, 11)
+ @DropdownFieldOptionsId(R.array.restart_playback_after_loss)
+ var restartPlaybackAfterLoss: Int = 1;
}
@FormField(R.string.comments, "group", R.string.comments_description, 6)
diff --git a/app/src/main/java/com/futo/platformplayer/services/MediaPlaybackService.kt b/app/src/main/java/com/futo/platformplayer/services/MediaPlaybackService.kt
index 7f076304..a5b08b81 100644
--- a/app/src/main/java/com/futo/platformplayer/services/MediaPlaybackService.kt
+++ b/app/src/main/java/com/futo/platformplayer/services/MediaPlaybackService.kt
@@ -23,6 +23,7 @@ import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition
import com.futo.platformplayer.logging.Logger
import com.futo.platformplayer.R
+import com.futo.platformplayer.Settings
import com.futo.platformplayer.states.StatePlatform
import com.futo.platformplayer.states.StatePlayer
import com.futo.platformplayer.activities.MainActivity
@@ -49,6 +50,7 @@ class MediaPlaybackService : Service() {
private var _mediaSession: MediaSessionCompat? = null;
private var _hasFocus: Boolean = false;
private var _focusRequest: AudioFocusRequest? = null;
+ private var _audioFocusLossTime_ms: Long? = null
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
Logger.v(TAG, "onStartCommand");
@@ -335,16 +337,32 @@ class MediaPlaybackService : Service() {
//Do not start playing on gaining audo focus
//MediaControlReceiver.onPlayReceived.emit();
_hasFocus = true;
- Log.i(TAG, "Audio focus gained");
+ Log.i(TAG, "Audio focus gained (restartPlaybackAfterLoss = ${Settings.instance.playback.restartPlaybackAfterLoss}, _audioFocusLossTime_ms = $_audioFocusLossTime_ms)");
+
+ if (Settings.instance.playback.restartPlaybackAfterLoss == 1) {
+ val lossTime_ms = _audioFocusLossTime_ms
+ if (lossTime_ms != null && System.currentTimeMillis() - lossTime_ms < 1000 * 30) {
+ MediaControlReceiver.onPlayReceived.emit()
+ }
+ } else if (Settings.instance.playback.restartPlaybackAfterLoss == 2) {
+ val lossTime_ms = _audioFocusLossTime_ms
+ if (lossTime_ms != null && System.currentTimeMillis() - lossTime_ms < 1000 * 10) {
+ MediaControlReceiver.onPlayReceived.emit()
+ }
+ } else if (Settings.instance.playback.restartPlaybackAfterLoss == 3) {
+ MediaControlReceiver.onPlayReceived.emit()
+ }
}
AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> {
MediaControlReceiver.onPauseReceived.emit();
+ _audioFocusLossTime_ms = System.currentTimeMillis()
Log.i(TAG, "Audio focus transient loss");
}
AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> {
Log.i(TAG, "Audio focus transient loss, can duck");
}
AudioManager.AUDIOFOCUS_LOSS -> {
+ _audioFocusLossTime_ms = System.currentTimeMillis()
_hasFocus = false;
MediaControlReceiver.onPauseReceived.emit();
Log.i(TAG, "Audio focus lost");
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5f09bf45..76b974c8 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -379,6 +379,8 @@
Restore a previous automatic backup
Resume After Preview
Review the current and past changelogs
+ Restart after audio focus loss
+ Restart playback when gaining audio focus after a loss
Chapter Update FPS
Change accuracy of chapter updating, higher might cost more performance
Set Automatic Backup
@@ -843,4 +845,10 @@
- Information
- Verbose
+
+ - Never
+ - Within 10 seconds of loss
+ - Within 30 seconds of loss
+ - Always
+
\ No newline at end of file