From 8a35cd0e82e277b887d24e2d0fbb1322ba1f0d56 Mon Sep 17 00:00:00 2001 From: Koen Date: Mon, 27 Nov 2023 17:08:40 +0100 Subject: [PATCH] Added settings to allow different behavior when audio focus is regained within 10 seconds. --- .../java/com/futo/platformplayer/Settings.kt | 4 ++++ .../services/MediaPlaybackService.kt | 20 ++++++++++++++++++- app/src/main/res/values/strings.xml | 8 ++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) 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