From d14eec2346ba994d119ec5d83713866d12be5cc5 Mon Sep 17 00:00:00 2001 From: Purefin Dev Date: Fri, 22 May 2026 16:41:58 +0000 Subject: [PATCH] feat(player): add adaptive brightness mode support Extend the brightness slider to allow values below 0% which triggers adaptive/auto brightness mode (screenBrightness = -1.0f). The brightness indicator shows 'Auto' with an empty bar when in adaptive mode. - Widen gesture range from [0,1] to [-0.1,1] so a small flick below 0 enters auto mode - readCurrentBrightness returns -0.1f instead of 0.5f when system auto is active - applyBrightness writes -1f to LayoutParams when value < 0 - PlayerAdjustmentIndicator displays 'Auto' in tertiary color for negative values --- .../hu/bbara/purefin/ui/screen/player/PlayerScreen.kt | 8 +++++--- .../screen/player/components/PlayerAdjustmentIndicator.kt | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/hu/bbara/purefin/ui/screen/player/PlayerScreen.kt b/app/src/main/java/hu/bbara/purefin/ui/screen/player/PlayerScreen.kt index a33c0889..dc0aa188 100644 --- a/app/src/main/java/hu/bbara/purefin/ui/screen/player/PlayerScreen.kt +++ b/app/src/main/java/hu/bbara/purefin/ui/screen/player/PlayerScreen.kt @@ -64,6 +64,8 @@ import kotlin.math.roundToInt private const val CONTROLS_VISIBLE_SUBTITLE_BOTTOM_PADDING_FRACTION = 0.32f private const val WIDE_VIDEO_ASPECT_RATIO = 16f / 9f +/** Small negative band below zero that represents adaptive/auto brightness mode. */ +private const val AUTO_BRIGHTNESS_SENTINEL = -0.1f @OptIn(UnstableApi::class) @Composable @@ -148,7 +150,7 @@ fun PlayerScreen( onDoubleTapCenter = { viewModel.togglePlayPause() }, onVerticalDragLeft = { delta -> val diff = (-delta / 800f) - brightness = (brightness + diff).coerceIn(0f, 1f) + brightness = (brightness + diff).coerceIn(AUTO_BRIGHTNESS_SENTINEL, 1f) applyBrightness(activity, brightness) }, onVerticalDragRight = { delta -> @@ -400,12 +402,12 @@ private fun formatSeekDelta(deltaMs: Long): String { private fun readCurrentBrightness(activity: Activity?): Float { val current = activity?.window?.attributes?.screenBrightness - return if (current != null && current >= 0) current else 0.5f + return if (current != null && current >= 0) current else AUTO_BRIGHTNESS_SENTINEL } private fun applyBrightness(activity: Activity?, value: Float) { activity ?: return val params = activity.window.attributes - params.screenBrightness = value + params.screenBrightness = if (value < 0f) -1f else value activity.window.attributes = params } diff --git a/app/src/main/java/hu/bbara/purefin/ui/screen/player/components/PlayerAdjustmentIndicator.kt b/app/src/main/java/hu/bbara/purefin/ui/screen/player/components/PlayerAdjustmentIndicator.kt index f6dd4930..b54ea1e8 100644 --- a/app/src/main/java/hu/bbara/purefin/ui/screen/player/components/PlayerAdjustmentIndicator.kt +++ b/app/src/main/java/hu/bbara/purefin/ui/screen/player/components/PlayerAdjustmentIndicator.kt @@ -31,7 +31,8 @@ fun PlayerAdjustmentIndicator( sliderHeight: Dp = 140.dp, ) { val scheme = MaterialTheme.colorScheme - val percent = (value.coerceIn(0f, 1f) * 100).roundToInt() + val isAuto = value < 0f + val percent = if (isAuto) 0 else (value * 100).roundToInt() val clamped = value.coerceIn(0f, 1f) Box( @@ -68,9 +69,10 @@ fun PlayerAdjustmentIndicator( ) } Spacer(modifier = Modifier.height(16.dp)) + val label = if (isAuto) "Auto" else "$percent%" Text( - text = "$percent%", - color = scheme.onSurface, + text = label, + color = if (isAuto) scheme.tertiary else scheme.onSurface, style = MaterialTheme.typography.titleMedium ) }