diff --git a/navi-uitron/src/main/java/com/navi/uitron/model/ui/ToastProperty.kt b/navi-uitron/src/main/java/com/navi/uitron/model/ui/ToastProperty.kt index d7a44da..15604f0 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/model/ui/ToastProperty.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/model/ui/ToastProperty.kt @@ -9,7 +9,10 @@ package com.navi.uitron.model.ui class ToastProperty( var message: String? = null, - var duration: String? = null + var duration: String? = null, + var gravity: String? = null, + var xOffset: Int? = null, + var yOffset: Int? = null ) : BaseProperty() { override fun copyNonNullFrom(property: BaseProperty?) { @@ -17,5 +20,8 @@ class ToastProperty( val toastProperty = property as? ToastProperty? toastProperty?.message?.let { message = it } toastProperty?.duration?.let { duration = it } + toastProperty?.gravity?.let { gravity = it } + toastProperty?.xOffset?.let { xOffset = it } + toastProperty?.yOffset?.let { yOffset = it } } } diff --git a/navi-uitron/src/main/java/com/navi/uitron/model/ui/UiTronView.kt b/navi-uitron/src/main/java/com/navi/uitron/model/ui/UiTronView.kt index 898c3f5..aa2fea0 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/model/ui/UiTronView.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/model/ui/UiTronView.kt @@ -256,3 +256,15 @@ enum class InputTransformationType { NUMBER_TO_WORDS, DOB_TO_READABLE_STRING } + +enum class GravityType { + BOTTOM, + CENTER, + CENTER_VERTICAL, + CENTER_HORIZONTAL, + TOP, + START, + END, + LEFT, + RIGHT +} 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 77cf005..ad4957e 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 @@ -12,11 +12,20 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState 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.compose.ui.unit.dp +import androidx.lifecycle.ViewTreeLifecycleOwner +import androidx.lifecycle.ViewTreeViewModelStoreOwner +import androidx.lifecycle.viewmodel.compose.LocalViewModelStoreOwner +import androidx.savedstate.setViewTreeSavedStateRegistryOwner import com.navi.uitron.model.data.ToastData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.ToastProperty import com.navi.uitron.model.ui.UiTronView import com.navi.uitron.viewmodel.UiTronViewModel +import dpToPx +import getGravity import isNotNullAndNotEmpty import orFalse @@ -59,13 +68,20 @@ class ToastRenderer( } else { Toast(LocalContext.current).apply { duration = getToastDuration(property.duration) - view = ComposeView(LocalContext.current).apply { + val views = ComposeView(LocalContext.current).apply { childrenComposeViews?.let { setContent { uiTronRenderer.Render(composeViews = childrenComposeViews) } } } + ViewTreeLifecycleOwner.set(views, LocalLifecycleOwner.current) + ViewTreeViewModelStoreOwner.set(views, LocalViewModelStoreOwner.current) + views.setViewTreeSavedStateRegistryOwner(LocalSavedStateRegistryOwner.current) + setGravity(getGravity(property.gravity), property.xOffset?.dp?.value?.toInt() ?: 0, + property.yOffset?.dp?.value?.toInt() ?: 0 + ) + view = views }.show() } diff --git a/navi-uitron/src/main/java/com/navi/uitron/utils/Ext.kt b/navi-uitron/src/main/java/com/navi/uitron/utils/Ext.kt index 57ce679..451914b 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/utils/Ext.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/utils/Ext.kt @@ -6,6 +6,7 @@ */ import android.content.res.Resources +import android.view.Gravity import androidx.compose.foundation.* import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.* @@ -549,6 +550,21 @@ fun getKeyboardOptions(keyboardOptions: OutlinedTextFieldKeyBoardOptions?): Keyb ) } +fun getGravity(gravity: String?): Int { + return when(gravity) { + GravityType.BOTTOM.name -> Gravity.BOTTOM + GravityType.CENTER.name -> Gravity.CENTER + GravityType.CENTER_VERTICAL.name -> Gravity.CENTER_VERTICAL + GravityType.CENTER_HORIZONTAL.name -> Gravity.CENTER_HORIZONTAL + GravityType.TOP.name -> Gravity.TOP + GravityType.START.name -> Gravity.START + GravityType.END.name -> Gravity.END + GravityType.LEFT.name -> Gravity.LEFT + GravityType.RIGHT.name -> Gravity.RIGHT + else -> Gravity.NO_GRAVITY + } +} + fun String?.getDataId() = this.orEmpty()+DATA_SUFFIX fun String?.getInputId() = this.orEmpty()+ INPUT_SUFFIX