Auto commit Tue Mar 24 05:01:02 PM CDT 2026
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user