Add AmbientPlayerListener

This commit is contained in:
Damontecres 2025-10-07 01:36:48 -04:00
parent e412c3da48
commit 993798d14b
No known key found for this signature in database
3 changed files with 52 additions and 0 deletions

View file

@ -1,8 +1,11 @@
package com.github.damontecres.dolphin.ui package com.github.damontecres.dolphin.ui
import android.app.Activity
import android.content.Context import android.content.Context
import android.content.ContextWrapper
import android.media.AudioManager import android.media.AudioManager
import android.view.KeyEvent import android.view.KeyEvent
import android.view.WindowManager
import androidx.compose.foundation.MarqueeAnimationMode import androidx.compose.foundation.MarqueeAnimationMode
import androidx.compose.foundation.basicMarquee import androidx.compose.foundation.basicMarquee
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
@ -229,3 +232,24 @@ fun Arrangement.spacedByWithFooter(space: Dp) =
} }
} }
} }
fun Context.findActivity(): Activity? {
if (this is Activity) {
return this
}
var context = this
while (context is ContextWrapper) {
if (context is Activity) return context
context = context.baseContext
}
return null
}
fun Activity.keepScreenOn(keep: Boolean) {
Timber.v("Keep screen on: $keep")
if (keep) {
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
} else {
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
}
}

View file

@ -0,0 +1,27 @@
package com.github.damontecres.dolphin.ui.playback
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.ui.platform.LocalContext
import androidx.media3.common.Player
import androidx.media3.common.Player.Listener
import com.github.damontecres.dolphin.ui.findActivity
import com.github.damontecres.dolphin.ui.keepScreenOn
@Composable
fun AmbientPlayerListener(player: Player) {
val context = LocalContext.current
DisposableEffect(player) {
val listener =
object : Listener {
override fun onIsPlayingChanged(isPlaying: Boolean) {
context.findActivity()?.keepScreenOn(isPlaying)
}
}
player.addListener(listener)
onDispose {
player.removeListener(listener)
context.findActivity()?.keepScreenOn(false)
}
}
}

View file

@ -118,6 +118,7 @@ fun PlaybackContent(
DisposableEffect(Unit) { DisposableEffect(Unit) {
onDispose { player.removeListener(cueListener) } onDispose { player.removeListener(cueListener) }
} }
AmbientPlayerListener(player)
if (stream == null) { if (stream == null) {
// TODO loading // TODO loading