From c76438cae8c929f7315169ba32d4be4c1901f0e1 Mon Sep 17 00:00:00 2001 From: Maila Rajanikanth Date: Thu, 10 Aug 2023 13:34:10 +0530 Subject: [PATCH] TP-0000 | Release 1.0.14 -> Master (#150) --- navi-uitron/build.gradle | 2 +- .../render/MultiSectionTextFieldRenderer.kt | 6 +++ .../com/navi/uitron/render/ToastRenderer.kt | 42 ++++++++++++++++--- 3 files changed, 43 insertions(+), 7 deletions(-) diff --git a/navi-uitron/build.gradle b/navi-uitron/build.gradle index 2a9b19c..af8e1f4 100644 --- a/navi-uitron/build.gradle +++ b/navi-uitron/build.gradle @@ -5,7 +5,7 @@ plugins { id 'maven-publish' } -def VERSION_NAME = "1.0.12_hotfix_2" +def VERSION_NAME = "1.0.14" android { namespace 'com.navi.uitron' diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/MultiSectionTextFieldRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/MultiSectionTextFieldRenderer.kt index c1a5a42..761b277 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/MultiSectionTextFieldRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/MultiSectionTextFieldRenderer.kt @@ -236,6 +236,12 @@ class MultiSectionTextFieldRenderer() : Renderer ), selection = TextRange(maxCharList[index]) ) + } else { + inputValues[index].value = + inputValues[index].value.copy( + text = inputValues[index].value.text, + selection = TextRange(maxCharList[index]) + ) } } }, diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/ToastRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/ToastRenderer.kt index 4d09b94..674d4cd 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/ToastRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/ToastRenderer.kt @@ -9,12 +9,15 @@ package com.navi.uitron.render import android.widget.Toast import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.collectAsState import androidx.compose.ui.Modifier import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.compose.ui.platform.LocalSavedStateRegistryOwner +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.setViewTreeLifecycleOwner import androidx.lifecycle.setViewTreeViewModelStoreOwner import androidx.lifecycle.viewmodel.compose.LocalViewModelStoreOwner @@ -34,6 +37,9 @@ class ToastRenderer( private val childrenComposeViews: List?, private val uiTronRenderer: UiTronRenderer ) : Renderer { + + var toast: Toast? = null + @Composable override fun Render( property: ToastProperty, @@ -43,6 +49,7 @@ class ToastRenderer( ) { super.Render(property, uiTronData, uiTronViewModel, modifier) var toastData = uiTronData as? ToastData + val lifecycleOwner = LocalLifecycleOwner.current if (property.isStateFul.orFalse()) { uiTronViewModel.addKeyToSavedStateHandle(property.layoutId.orEmpty()) @@ -62,13 +69,14 @@ class ToastRenderer( if (property.visible.orFalse()) { if (property.message.isNotNullAndNotEmpty()) { - Toast.makeText( + toast = Toast.makeText( LocalContext.current, property.message, getToastDuration(property.duration) - ).show() + ) + toast?.show() } else { - Toast(LocalContext.current).apply { + toast = Toast(LocalContext.current).apply { duration = getToastDuration(property.duration) val views = ComposeView(LocalContext.current).apply { childrenComposeViews?.let { @@ -77,17 +85,39 @@ class ToastRenderer( } } } - views.setViewTreeLifecycleOwner(LocalLifecycleOwner.current) + views.setViewTreeLifecycleOwner(lifecycleOwner) views.setViewTreeViewModelStoreOwner(LocalViewModelStoreOwner.current) views.setViewTreeSavedStateRegistryOwner(LocalSavedStateRegistryOwner.current) - setGravity(getGravity(property.gravity), dpToPx(property.xOffset.orZero()).toInt(), + setGravity( + getGravity(property.gravity), dpToPx(property.xOffset.orZero()).toInt(), dpToPx(property.yOffset.orZero()).toInt() ) view = views - }.show() + } + toast?.show() } uiTronViewModel.handleActions(toastData?.onDismiss) } + + DisposableEffect(lifecycleOwner) { + var observer: LifecycleEventObserver? = null + observer = LifecycleEventObserver { _, event -> + when (event) { + Lifecycle.Event.ON_STOP -> { + toast?.cancel() + toast = null + observer?.let { + lifecycleOwner.lifecycle.removeObserver(it) + } + } + + else -> {} + } + } + lifecycleOwner.lifecycle.addObserver(observer) + + onDispose {} + } } }