mirror of
https://github.com/gabehf/Fladder.git
synced 2026-03-07 13:38:13 -08:00
fix: Progress bar changing width when scrubbing
This commit is contained in:
parent
654be43d60
commit
4c530f1c36
4 changed files with 34 additions and 10 deletions
|
|
@ -52,7 +52,7 @@ fun VideoPlayerScreen(
|
|||
) {
|
||||
val leanBackEnabled = leanBackEnabled(LocalContext.current)
|
||||
ExoPlayer { player ->
|
||||
ScaledContent(if (leanBackEnabled) 0.75f else 1f) {
|
||||
ScaledContent(if (leanBackEnabled) 0.65f else 1f) {
|
||||
CustomVideoControls(player)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import androidx.compose.foundation.layout.height
|
|||
import androidx.compose.foundation.layout.heightIn
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.layout.widthIn
|
||||
import androidx.compose.foundation.layout.wrapContentSize
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
|
|
@ -62,6 +63,7 @@ import androidx.compose.ui.input.pointer.pointerInput
|
|||
import androidx.compose.ui.layout.onGloballyPositioned
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.util.fastCoerceIn
|
||||
import androidx.media3.exoplayer.ExoPlayer
|
||||
|
|
@ -71,6 +73,7 @@ import nl.jknaapen.fladder.objects.Translate
|
|||
import nl.jknaapen.fladder.objects.VideoPlayerObject
|
||||
import nl.jknaapen.fladder.utility.capitalize
|
||||
import nl.jknaapen.fladder.utility.formatTime
|
||||
import nl.jknaapen.fladder.utility.measureTextWidth
|
||||
import kotlin.math.max
|
||||
import kotlin.math.min
|
||||
import kotlin.time.Duration
|
||||
|
|
@ -135,7 +138,7 @@ internal fun ProgressBar(
|
|||
if (label.isNotBlank()) {
|
||||
Text(
|
||||
text = label,
|
||||
style = MaterialTheme.typography.bodyLarge.copy(
|
||||
style = MaterialTheme.typography.titleLarge.copy(
|
||||
color = Color.White,
|
||||
fontWeight = FontWeight.Bold
|
||||
),
|
||||
|
|
@ -156,12 +159,20 @@ internal fun ProgressBar(
|
|||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = modifier.fillMaxWidth()
|
||||
) {
|
||||
val timeTextStyle = MaterialTheme.typography.titleLarge.copy(
|
||||
fontWeight = FontWeight.Bold
|
||||
)
|
||||
|
||||
//Calculate min width to stop resizing of progressbar
|
||||
val textWidth = measureTextWidth("-" + formatTime(duration), timeTextStyle)
|
||||
|
||||
Text(
|
||||
formatTime(currentPosition),
|
||||
color = Color.White,
|
||||
style = MaterialTheme.typography.bodyLarge.copy(
|
||||
fontWeight = FontWeight.Bold
|
||||
)
|
||||
modifier = Modifier.widthIn(min = textWidth),
|
||||
textAlign = TextAlign.Start,
|
||||
maxLines = 1,
|
||||
style = timeTextStyle
|
||||
)
|
||||
SimpleProgressBar(
|
||||
player,
|
||||
|
|
@ -184,9 +195,10 @@ internal fun ProgressBar(
|
|||
)
|
||||
),
|
||||
color = Color.White,
|
||||
style = MaterialTheme.typography.bodyLarge.copy(
|
||||
fontWeight = FontWeight.Bold
|
||||
)
|
||||
textAlign = TextAlign.End,
|
||||
modifier = Modifier.widthIn(min = textWidth),
|
||||
maxLines = 1,
|
||||
style = timeTextStyle
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,11 +11,9 @@ fun ScaledContent(
|
|||
content: @Composable () -> Unit
|
||||
) {
|
||||
val density = LocalDensity.current
|
||||
val fontScale = 1f / scale
|
||||
CompositionLocalProvider(
|
||||
LocalDensity provides Density(
|
||||
density = density.density * scale,
|
||||
fontScale = fontScale
|
||||
)
|
||||
) {
|
||||
content()
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
package nl.jknaapen.fladder.utility
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import androidx.compose.ui.text.rememberTextMeasurer
|
||||
import androidx.compose.ui.unit.Dp
|
||||
|
||||
@Composable
|
||||
fun measureTextWidth(text: String, style: TextStyle): Dp {
|
||||
val textMeasurer = rememberTextMeasurer()
|
||||
val widthInPixels = textMeasurer.measure(text, style).size.width
|
||||
return with(LocalDensity.current) { widthInPixels.toDp() }
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue