fix: Properly localized dates in native player

This commit is contained in:
PartyDonut 2025-10-18 21:15:35 +02:00
parent 829bc3e34c
commit d2b8a855f3
7 changed files with 90 additions and 15 deletions

View file

@ -194,6 +194,26 @@ class TranslationsPigeon(private val binaryMessenger: BinaryMessenger, private v
}
}
}
fun hoursAndMinutes(timeArg: String, callback: (Result<String>) -> Unit)
{
val separatedMessageChannelSuffix = if (messageChannelSuffix.isNotEmpty()) ".$messageChannelSuffix" else ""
val channelName = "dev.flutter.pigeon.nl_jknaapen_fladder.settings.TranslationsPigeon.hoursAndMinutes$separatedMessageChannelSuffix"
val channel = BasicMessageChannel<Any?>(binaryMessenger, channelName, codec)
channel.send(listOf(timeArg)) {
if (it is List<*>) {
if (it.size > 1) {
callback(Result.failure(FlutterError(it[0] as String, it[1] as String, it[2] as String?)))
} else if (it[0] == null) {
callback(Result.failure(FlutterError("null-error", "Flutter api returned null value for non-null return value.", "")))
} else {
val output = it[0] as String
callback(Result.success(output))
}
} else {
callback(Result.failure(TranslationsPigeonPigeonUtils.createConnectionError(channelName)))
}
}
}
fun endsAt(timeArg: String, callback: (Result<String>) -> Unit)
{
val separatedMessageChannelSuffix = if (messageChannelSuffix.isNotEmpty()) ".$messageChannelSuffix" else ""

View file

@ -74,14 +74,15 @@ import kotlinx.coroutines.delay
import nl.jknaapen.fladder.composables.dialogs.AudioPicker
import nl.jknaapen.fladder.composables.dialogs.ChapterSelectionSheet
import nl.jknaapen.fladder.composables.dialogs.SubtitlePicker
import nl.jknaapen.fladder.objects.Localized
import nl.jknaapen.fladder.objects.PlayerSettingsObject
import nl.jknaapen.fladder.objects.Translate
import nl.jknaapen.fladder.objects.VideoPlayerObject
import nl.jknaapen.fladder.utility.ImmersiveSystemBars
import nl.jknaapen.fladder.utility.defaultSelected
import nl.jknaapen.fladder.utility.leanBackEnabled
import nl.jknaapen.fladder.utility.visible
import java.time.ZoneId
import java.time.format.DateTimeFormatter
import kotlin.time.Clock
import kotlin.time.Duration.Companion.seconds
import kotlin.time.ExperimentalTime
@ -522,21 +523,34 @@ internal fun RowScope.RightButtons(
}
}
@RequiresApi(Build.VERSION_CODES.O)
@kotlin.OptIn(ExperimentalTime::class)
@Composable
private fun CurrentTime() {
val startInstant = Clock.System.now()
val zone = ZoneId.systemDefault()
val endInstant = startInstant.toJavaInstant()
val endZoned = endInstant.atZone(zone)
val formatter = DateTimeFormatter.ofPattern("hh:mm a")
var currentTime by remember { mutableStateOf(Clock.System.now()) }
Text(
endZoned.format(formatter),
style = MaterialTheme.typography.titleMedium,
color = Color.White
)
LaunchedEffect(Unit) {
while (true) {
currentTime = Clock.System.now()
val delayMs = 60_000L - (currentTime.toEpochMilliseconds() % 60_000L)
delay(delayMs)
}
}
val endZoned = currentTime.toJavaInstant().atZone(zone)
Translate(
{
Localized.hoursAndMinutes(endZoned.toOffsetDateTime().toString(), it)
},
key = currentTime,
) { time ->
Text(
text = time,
style = MaterialTheme.typography.titleMedium,
color = Color.White
)
}
}

View file

@ -36,11 +36,11 @@ object VideoPlayerObject {
@RequiresApi(Build.VERSION_CODES.O)
@OptIn(ExperimentalTime::class)
val endTime = combine(position, duration) { pos, dur ->
val startInstant = Clock.System.now()
val now = Clock.System.now().toJavaInstant()
val zone = ZoneId.systemDefault()
val remainingMs = (dur - pos).coerceAtLeast(0L)
val endInstant = startInstant.toJavaInstant().plusMillis(remainingMs)
val endInstant = now.plusMillis(remainingMs)
val endZoned = endInstant.atZone(zone)
endZoned.toOffsetDateTime().toString()