Auto commit Tue Mar 24 05:01:02 PM CDT 2026

This commit is contained in:
Tretzi
2026-03-24 17:01:02 -05:00
parent 1beb6ffa69
commit 2a548edc9a
4 changed files with 83 additions and 3 deletions

View File

@@ -11,6 +11,7 @@ import androidx.compose.foundation.background
import com.mindmachine.mvp.session.DurationSliderCard
import com.mindmachine.mvp.session.SetupTimelineEditor
import androidx.compose.foundation.clickable
import androidx.compose.foundation.gestures.detectTapGestures
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
@@ -59,6 +60,7 @@ import androidx.compose.runtime.withFrameNanos
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.semantics.contentDescription
@@ -405,6 +407,20 @@ fun ActiveSessionScreen(vm: MainViewModel, onFinish: () -> Unit, onBackToSetup:
LaunchedEffect(ui.runtimeState) {
showOverlay = shouldShowActiveControlsByDefault(ui.runtimeState)
}
var brightnessOverlayVisible by remember { mutableStateOf(false) }
var brightnessOverlayToken by remember { mutableIntStateOf(0) }
LaunchedEffect(brightnessOverlayToken) {
if (!brightnessOverlayVisible) return@LaunchedEffect
delay(2500)
brightnessOverlayVisible = false
}
ApplyScreenBrightnessOverride(
enabled = true,
brightnessPercent = ui.settings.immersiveBrightnessPercent,
)
val flashFrame by rememberSplitFlashFrame(
isRunning = ui.runtimeState == RuntimeState.RUNNING,
flashOnMs = ui.runtimeParams.flashOnMs,
@@ -420,9 +436,13 @@ fun ActiveSessionScreen(vm: MainViewModel, onFinish: () -> Unit, onBackToSetup:
modifier = Modifier
.fillMaxSize()
.background(Color.Black)
.clickable {
if (!immersiveFullscreen) {
showOverlay = !showOverlay
.pointerInput(immersiveFullscreen) {
detectTapGestures {
brightnessOverlayVisible = true
brightnessOverlayToken++
if (!immersiveFullscreen) {
showOverlay = !showOverlay
}
}
}
) {
@@ -464,6 +484,32 @@ fun ActiveSessionScreen(vm: MainViewModel, onFinish: () -> Unit, onBackToSetup:
)
}
if (brightnessOverlayVisible) {
Column(
Modifier
.align(Alignment.TopCenter)
.padding(top = 24.dp)
.fillMaxWidth(0.45f)
.background(Color.Black.copy(alpha = 0.72f))
.padding(horizontal = 12.dp, vertical = 10.dp)
) {
Text(
text = "Brightness ${ui.settings.immersiveBrightnessPercent}%",
color = Color.White,
style = MaterialTheme.typography.bodyMedium,
)
Slider(
value = ui.settings.immersiveBrightnessPercent.toFloat(),
onValueChange = {
vm.updateImmersiveBrightnessPercent(it.roundToInt())
brightnessOverlayVisible = true
brightnessOverlayToken++
},
valueRange = 5f..100f,
)
}
}
if (showOverlay) {
Column(
Modifier
@@ -492,6 +538,30 @@ fun ActiveSessionScreen(vm: MainViewModel, onFinish: () -> Unit, onBackToSetup:
}
}
@Composable
private fun ApplyScreenBrightnessOverride(enabled: Boolean, brightnessPercent: Int) {
val activity = LocalContext.current as? Activity ?: return
val window = activity.window
DisposableEffect(window) {
onDispose {
val reset = window.attributes
reset.screenBrightness = -1f
window.attributes = reset
}
}
LaunchedEffect(enabled, brightnessPercent) {
val params = window.attributes
params.screenBrightness = if (enabled) {
(brightnessPercent.coerceIn(5, 100) / 100f)
} else {
-1f
}
window.attributes = params
}
}
@Composable
private fun ApplyImmersiveMode(enabled: Boolean, revealSignal: Int) {
val context = LocalContext.current