TP-53645 | Added lifecycle support in Renderer (#294)
This commit is contained in:
committed by
GitHub
parent
325384042a
commit
8774445d45
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user