TP-53645 | Added lifecycle support in Renderer (#294)

This commit is contained in:
Soumya Ranjan Patra
2024-01-09 19:24:48 +05:30
committed by GitHub
parent 325384042a
commit 8774445d45
2 changed files with 69 additions and 1 deletions

View File

@@ -19,8 +19,19 @@ open class UiTronData : Parcelable {
val combinedClick: CombinedClick? = null
val onView: UiTronActionData? = null
val slideData: SlideData? = null
val lifecycleActionData : LifecycleActionData? = null
}
@Parcelize
data class LifecycleActionData(
val onCreate: UiTronActionData? = null,
val onStart: UiTronActionData? = null,
val onResume: UiTronActionData? = null,
val onPause: UiTronActionData? = null,
val onStop: UiTronActionData? = null,
val onDestroy: UiTronActionData? = null
) : Parcelable
@Parcelize
data class CombinedClick(
val onClick: UiTronActionData? = null,

View File

@@ -9,10 +9,15 @@ package com.navi.uitron.render
import androidx.annotation.CallSuper
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import com.navi.uitron.UiTronSdkManager
import com.navi.uitron.model.action.MvelAction
import com.navi.uitron.model.data.LifecycleActionData
import com.navi.uitron.model.data.UiTronAction
import com.navi.uitron.model.data.UiTronData
import com.navi.uitron.model.ui.BaseProperty
@@ -39,6 +44,10 @@ interface Renderer<T : BaseProperty> {
uiTronViewModel.handleActions(it)
}
})
uiTronData?.lifecycleActionData?.let {
HandleLifecycleActions(it, uiTronViewModel)
}
}
fun updateMvelValuesInActions(actions: List<UiTronAction?>?, map: Map<String, Any?>) {
@@ -51,7 +60,11 @@ interface Renderer<T : BaseProperty> {
}
}
fun handleMvelExtra(layoutId: String?, extrasState: Map<String, Any?>?, map: Map<String, Any?>) {
fun handleMvelExtra(
layoutId: String?,
extrasState: Map<String, Any?>?,
map: Map<String, Any?>
) {
extrasState?.get(MvelAction.KEY_MVEL)?.takeIf { it is MvelAction && layoutId != null }
?.let { mvelAction ->
mvelAction as MvelAction
@@ -70,4 +83,48 @@ interface Renderer<T : BaseProperty> {
}
}
@Composable
private fun HandleLifecycleActions(
lifecycleActionData: LifecycleActionData, viewModel: UiTronViewModel
) {
val lifecycleOwner = LocalLifecycleOwner.current
DisposableEffect(lifecycleOwner, lifecycleActionData) {
val lifecycle = lifecycleOwner.lifecycle
val observer = LifecycleEventObserver { _, event ->
when (event) {
Lifecycle.Event.ON_CREATE -> {
viewModel.handleActions(lifecycleActionData.onCreate)
}
Lifecycle.Event.ON_START -> {
viewModel.handleActions(lifecycleActionData.onStart)
}
Lifecycle.Event.ON_RESUME -> {
viewModel.handleActions(lifecycleActionData.onResume)
}
Lifecycle.Event.ON_PAUSE -> {
viewModel.handleActions(lifecycleActionData.onPause)
}
Lifecycle.Event.ON_STOP -> {
viewModel.handleActions(lifecycleActionData.onStop)
}
Lifecycle.Event.ON_DESTROY -> {
viewModel.handleActions(lifecycleActionData.onDestroy)
}
else -> {}
}
}
lifecycle.addObserver(observer)
onDispose {
lifecycle.removeObserver(observer)
}
}
}
}