From 06f68ad603cf3d54785eefcf3cbf6529f09acb86 Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Mon, 2 Jun 2025 08:28:19 +0300 Subject: [PATCH] Stop call timer chronometer when call is closed --- .../kotlin/com/tutpro/baresip/MainScreen.kt | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainScreen.kt b/app/src/main/kotlin/com/tutpro/baresip/MainScreen.kt index 6767833c..8f184a05 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainScreen.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainScreen.kt @@ -1193,20 +1193,36 @@ private fun CallUriRow(ctx: Context, viewModel: ViewModel) { } if (showCallTimer.value) { val textColor = LocalCustomColors.current.itemText.toArgb() + var chronometerInstance: Chronometer? = null AndroidView( factory = { context -> - val chronometer = Chronometer(context).apply { + Chronometer(context).apply { textSize = 16F setTextColor(textColor) base = SystemClock.elapsedRealtime() - (callDuration * 1000L) - start() + chronometerInstance = this } - chronometer + }, + update = { chronometerView -> + val newBase = SystemClock.elapsedRealtime() - (callDuration * 1000L) + if (chronometerView.base != newBase) { + chronometerView.base = newBase + } + chronometerView.start() + Log.d(TAG, "Update: Chronometer started/updated") }, modifier = Modifier.padding(start = 6.dp, top = 4.dp, end = if (securityIcon.intValue != -1) 6.dp else 0.dp), ) + DisposableEffect(Unit) { + onDispose { + chronometerInstance?.let { + it.stop() + Log.d(TAG, "DisposableEffect: Chronometer stopped in onDispose") + } + } + } } if (securityIcon.intValue != -1) { Icon(