diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/AudioReactor.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/AudioReactor.kt index 981ff54ba..dfc2ac6a1 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/system/AudioReactor.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/system/AudioReactor.kt @@ -37,7 +37,10 @@ import kotlin.math.pow * Manages the current volume and playback state across ReplayGain and AudioFocus events. * @author OxygenCobalt */ -class AudioReactor(context: Context) : AudioManager.OnAudioFocusChangeListener, SettingsManager.Callback { +class AudioReactor( + context: Context, + private val callback: (Float) -> Unit +) : AudioManager.OnAudioFocusChangeListener, SettingsManager.Callback { private data class Gain(val track: Float, val album: Float) private val playbackManager = PlaybackStateManager.maybeGetInstance() @@ -55,12 +58,19 @@ class AudioReactor(context: Context) : AudioManager.OnAudioFocusChangeListener, .setOnAudioFocusChangeListener(this) .build() - private var multiplier = 1f private var pauseWasTransient = false + private var multiplier = 1f + set(value) { + field = value + callback(volume) + } - var volume = 0f + private var volume = 0f get() = field * multiplier - private set + set(value) { + field = value + callback(volume) + } init { settingsManager.addCallback(this) diff --git a/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt b/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt index 3a18374a0..d3e7598f7 100644 --- a/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt +++ b/app/src/main/java/org/oxycblt/auxio/playback/system/PlaybackService.kt @@ -126,9 +126,13 @@ class PlaybackService : Service(), Player.Listener, PlaybackStateManager.Callbac false ) + audioReactor = AudioReactor(this) { volume -> + logD("Updating player volume to $volume") + player.volume = volume + } + // --- SYSTEM SETUP --- - audioReactor = AudioReactor(this) widgets = WidgetController(this) // Set up the media button callbacks @@ -402,19 +406,16 @@ class PlaybackService : Service(), Player.Listener, PlaybackStateManager.Callbac * Start polling the position on a coroutine. */ private fun startPolling() { - data class Poll(val pos: Long, val multiplier: Float) - val pollFlow = flow { while (true) { - emit(Poll(player.currentPosition, audioReactor.volume)) + emit(player.currentPosition) delay(POS_POLL_INTERVAL) } }.conflate() serviceScope.launch { - pollFlow.takeWhile { player.isPlaying }.collect { poll -> - playbackManager.setPosition(poll.pos) - player.volume = audioReactor.volume + pollFlow.takeWhile { player.isPlaying }.collect { pos -> + playbackManager.setPosition(pos) } } }