package com.suno.android.common_ui.components.player import android.icu.text.DateFormat import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.sp import androidx.media3.common.Player import com.suno.android.common_ui.extensions.collectCurrentPositionAsState import com.suno.android.common_ui.extensions.collectDurationAsState import com.suno.android.common_ui.theme.ExtendedTheme import com.suno.android.common_ui.theme.InputSansFontFamily import kotlin.time.Duration @Composable fun PlaybackTimeText( player: Player, modifier: Modifier = Modifier, textAlign: TextAlign = TextAlign.Center, style: TextStyle = TextStyle( fontFamily = InputSansFontFamily, fontWeight = FontWeight.Medium, fontSize = 12.sp, lineHeight = 16.sp, letterSpacing = 0.5.sp, ), color: Color = ExtendedTheme.colors.textPrimary, ) { val playbackTime by player.collectCurrentPositionAsState() val duration by player.collectDurationAsState() PlaybackTimeText( playingTime = playbackTime, totalDuration = duration, modifier = modifier, textAlign = textAlign, style = style, color = color, ) } @Composable fun PlaybackTimeText( playingTime: Duration, totalDuration: Duration, modifier: Modifier = Modifier, textAlign: TextAlign = TextAlign.Center, style: TextStyle = TextStyle( fontFamily = InputSansFontFamily, fontWeight = FontWeight.Medium, fontSize = 12.sp, lineHeight = 16.sp, letterSpacing = 0.sp, ), color: Color = ExtendedTheme.colors.textPrimary, ) { val formatter = remember { DateFormat.getInstanceForSkeleton(DateFormat.MINUTE_SECOND) } val playingTimeFormatted = remember(playingTime / 1000) { formatter.format(playingTime.inWholeMilliseconds) } val totalDurationFormatted = remember(totalDuration / 1000) { formatter.format(totalDuration.inWholeMilliseconds) } Text( text = "$playingTimeFormatted / $totalDurationFormatted", textAlign = textAlign, style = style, color = color, maxLines = 1, modifier = modifier, ) }