From 69f2d2ed7c3722d9edb7169f149eece2fca99867 Mon Sep 17 00:00:00 2001 From: Maila Rajanikanth Date: Tue, 16 Jan 2024 15:56:57 +0530 Subject: [PATCH] TP-52584 | Refactored modifiers (#292) --- .../uitron/demo/UiTronDependencyProvider.kt | 4 + .../navi/uitron/IUiTronDependencyProvider.kt | 6 +- .../java/com/navi/uitron/UiTronSdkManager.kt | 4 + .../com/navi/uitron/model/UiTronConfig.kt | 5 + .../navi/uitron/modifer/BoxModifierBuilder.kt | 41 +++++ .../uitron/modifer/ButtonModifierBuilder.kt | 26 +++ .../uitron/modifer/CardModifierBuilder.kt | 42 +++++ .../uitron/modifer/ColumnModifierBuilder.kt | 31 ++++ .../modifer/ConstraintModifierBuilder.kt | 31 ++++ .../navi/uitron/modifer/ModifierBuilder.kt | 174 ++++++++++++++++++ .../navi/uitron/modifer/RowModifierBuilder.kt | 31 ++++ .../uitron/modifer/SliderModifierBuilder.kt | 27 +++ .../uitron/render/AutoScrollViewRenderer.kt | 60 +++--- .../com/navi/uitron/render/BoxRenderer.kt | 83 +++++---- .../com/navi/uitron/render/ButtonRenderer.kt | 30 +-- .../com/navi/uitron/render/CardRenderer.kt | 63 ++++--- .../navi/uitron/render/CheckBoxRenderer.kt | 59 +++--- .../com/navi/uitron/render/ColumnRenderer.kt | 91 ++++----- .../uitron/render/ConstraintLayoutRenderer.kt | 89 +++++---- .../uitron/render/CustomTextFieldRenderer.kt | 41 +++-- .../com/navi/uitron/render/DividerRenderer.kt | 35 ++-- .../navi/uitron/render/DropdownRenderer.kt | 51 +++-- .../com/navi/uitron/render/GridRenderer.kt | 55 +++--- .../com/navi/uitron/render/ImageRenderer.kt | 64 ++++--- .../navi/uitron/render/LazyColumnRenderer.kt | 63 ++++--- .../navi/uitron/render/LazyGridRenderer.kt | 55 +++--- .../com/navi/uitron/render/LazyRowRenderer.kt | 63 ++++--- .../render/LinearProgressIndicatorRenderer.kt | 46 +++-- .../com/navi/uitron/render/LottieRenderer.kt | 61 +++--- .../render/MultiSectionTextFieldRenderer.kt | 29 ++- .../com/navi/uitron/render/OtpBoxRenderer.kt | 45 +++-- .../render/OutlinedTextFieldRenderer.kt | 61 +++--- .../uitron/render/PagerIndicatorRenderer.kt | 144 +++++++++------ .../com/navi/uitron/render/PagerRenderer.kt | 128 ++++++++----- .../navi/uitron/render/RadioButtonRenderer.kt | 59 +++--- .../com/navi/uitron/render/RowRenderer.kt | 88 +++++---- .../uitron/render/SlideToActButtonRenderer.kt | 4 +- .../com/navi/uitron/render/SliderRenderer.kt | 31 ++-- .../navi/uitron/render/SliderRendererV2.kt | 29 ++- .../com/navi/uitron/render/SpacerRenderer.kt | 63 ++++--- .../uitron/render/SpannableTextRenderer.kt | 58 ++++-- .../com/navi/uitron/render/TextRenderer.kt | 64 ++++--- .../main/java/com/navi/uitron/utils/Ext.kt | 9 - 43 files changed, 1492 insertions(+), 751 deletions(-) create mode 100644 navi-uitron/src/main/java/com/navi/uitron/model/UiTronConfig.kt create mode 100644 navi-uitron/src/main/java/com/navi/uitron/modifer/BoxModifierBuilder.kt create mode 100644 navi-uitron/src/main/java/com/navi/uitron/modifer/ButtonModifierBuilder.kt create mode 100644 navi-uitron/src/main/java/com/navi/uitron/modifer/CardModifierBuilder.kt create mode 100644 navi-uitron/src/main/java/com/navi/uitron/modifer/ColumnModifierBuilder.kt create mode 100644 navi-uitron/src/main/java/com/navi/uitron/modifer/ConstraintModifierBuilder.kt create mode 100644 navi-uitron/src/main/java/com/navi/uitron/modifer/ModifierBuilder.kt create mode 100644 navi-uitron/src/main/java/com/navi/uitron/modifer/RowModifierBuilder.kt create mode 100644 navi-uitron/src/main/java/com/navi/uitron/modifer/SliderModifierBuilder.kt diff --git a/app/src/main/java/com/uitron/demo/UiTronDependencyProvider.kt b/app/src/main/java/com/uitron/demo/UiTronDependencyProvider.kt index 91fd3c8..bd09119 100644 --- a/app/src/main/java/com/uitron/demo/UiTronDependencyProvider.kt +++ b/app/src/main/java/com/uitron/demo/UiTronDependencyProvider.kt @@ -5,6 +5,7 @@ import androidx.compose.ui.text.font.Font import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight import com.navi.uitron.IUiTronDependencyProvider +import com.navi.uitron.model.UiTronConfig import com.navi.uitron.utils.EMPTY import com.navi.uitron.utils.SPACE @@ -184,6 +185,9 @@ class UiTronDependencyProvider : IUiTronDependencyProvider { } override fun logException(e: Exception) {} + override fun getUiTronConfig(): UiTronConfig { + return UiTronConfig(enableBuildModifier = true) + } companion object{ private const val TT_FONT_FAMILY = "ttComposeFontFamily" diff --git a/navi-uitron/src/main/java/com/navi/uitron/IUiTronDependencyProvider.kt b/navi-uitron/src/main/java/com/navi/uitron/IUiTronDependencyProvider.kt index 75bd9ab..80f5bc0 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/IUiTronDependencyProvider.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/IUiTronDependencyProvider.kt @@ -1,14 +1,16 @@ package com.navi.uitron import android.content.Context -import androidx.annotation.DrawableRes import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight +import com.navi.uitron.model.UiTronConfig interface IUiTronDependencyProvider { fun getFontFamily(fontFamily: String?): FontFamily + fun getFontWeight(fontWeight: String?): FontWeight + enum class FontWeightEnum { TT_MEDIUM, TT_BOLD, @@ -24,4 +26,6 @@ interface IUiTronDependencyProvider { fun logException(e : Exception) + fun getUiTronConfig(): UiTronConfig + } \ No newline at end of file diff --git a/navi-uitron/src/main/java/com/navi/uitron/UiTronSdkManager.kt b/navi-uitron/src/main/java/com/navi/uitron/UiTronSdkManager.kt index c11e323..37f6029 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/UiTronSdkManager.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/UiTronSdkManager.kt @@ -12,4 +12,8 @@ object UiTronSdkManager { return uiTronDependencyProvider } + fun isModifierBuilderEnabled(): Boolean { + return uiTronDependencyProvider.getUiTronConfig().enableBuildModifier ?: false + } + } \ No newline at end of file diff --git a/navi-uitron/src/main/java/com/navi/uitron/model/UiTronConfig.kt b/navi-uitron/src/main/java/com/navi/uitron/model/UiTronConfig.kt new file mode 100644 index 0000000..4faac9a --- /dev/null +++ b/navi-uitron/src/main/java/com/navi/uitron/model/UiTronConfig.kt @@ -0,0 +1,5 @@ +package com.navi.uitron.model + +data class UiTronConfig( + val enableBuildModifier: Boolean? = null +) diff --git a/navi-uitron/src/main/java/com/navi/uitron/modifer/BoxModifierBuilder.kt b/navi-uitron/src/main/java/com/navi/uitron/modifer/BoxModifierBuilder.kt new file mode 100644 index 0000000..f242467 --- /dev/null +++ b/navi-uitron/src/main/java/com/navi/uitron/modifer/BoxModifierBuilder.kt @@ -0,0 +1,41 @@ +package com.navi.uitron.modifer + +import android.annotation.SuppressLint +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.shadow +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import com.navi.uitron.model.data.UiTronData +import com.navi.uitron.model.ui.BoxProperty +import com.navi.uitron.viewmodel.UiTronViewModel +import hexToComposeColor +import setHorizontalScroll +import setShimmerEffect +import setVerticalScroll + +@SuppressLint("ModifierFactoryExtensionFunction") +class BoxModifierBuilder( + private var modifier: Modifier, + private val property: BoxProperty, + uiTronData: UiTronData?, + uiTronViewModel: UiTronViewModel +) : ModifierBuilder(modifier, property, uiTronData, uiTronViewModel) { + + override fun build(): Modifier { + setIdModifiers() + setSizeModifiers() + modifier = modifier + .setVerticalScroll(property.verticalScroll) + .setHorizontalScroll(property.horizontalScroll) + setBorderModifiers() + modifier = modifier.setShimmerEffect(property.isShimmerEnabled) + setClickableModifiers() + modifier = modifier.shadow( + elevation = property.elevation?.toInt()?.dp ?: 0.dp, + spotColor = property.spotColor?.hexToComposeColor ?: Color.Transparent, + ambientColor = property.ambientColor?.hexToComposeColor ?: Color.Transparent + ) + return modifier + } + +} \ No newline at end of file diff --git a/navi-uitron/src/main/java/com/navi/uitron/modifer/ButtonModifierBuilder.kt b/navi-uitron/src/main/java/com/navi/uitron/modifer/ButtonModifierBuilder.kt new file mode 100644 index 0000000..5c77946 --- /dev/null +++ b/navi-uitron/src/main/java/com/navi/uitron/modifer/ButtonModifierBuilder.kt @@ -0,0 +1,26 @@ +package com.navi.uitron.modifer + +import android.annotation.SuppressLint +import androidx.compose.ui.Modifier +import com.navi.uitron.model.data.UiTronData +import com.navi.uitron.model.ui.ButtonProperty +import com.navi.uitron.viewmodel.UiTronViewModel + +@SuppressLint("ModifierFactoryExtensionFunction") +class ButtonModifierBuilder( + private var modifier: Modifier, + property: ButtonProperty, + uiTronData: UiTronData?, + uiTronViewModel: UiTronViewModel +) : ModifierBuilder(modifier, property, uiTronData, uiTronViewModel) { + + override fun build(): Modifier { + setIdModifiers() + setSizeModifiers() + setMargin() + setPadding() + setEffectModifiers() + return modifier + } + +} \ No newline at end of file diff --git a/navi-uitron/src/main/java/com/navi/uitron/modifer/CardModifierBuilder.kt b/navi-uitron/src/main/java/com/navi/uitron/modifer/CardModifierBuilder.kt new file mode 100644 index 0000000..2662c96 --- /dev/null +++ b/navi-uitron/src/main/java/com/navi/uitron/modifer/CardModifierBuilder.kt @@ -0,0 +1,42 @@ +package com.navi.uitron.modifer + +import android.annotation.SuppressLint +import androidx.compose.ui.Modifier +import androidx.compose.ui.composed +import androidx.compose.ui.draw.shadow +import androidx.compose.ui.graphics.DefaultShadowColor +import androidx.compose.ui.unit.dp +import com.navi.uitron.model.data.UiTronData +import com.navi.uitron.model.ui.CardProperty +import com.navi.uitron.utils.ShapeUtil +import com.navi.uitron.viewmodel.UiTronViewModel +import hexToComposeColor + +@SuppressLint("ModifierFactoryExtensionFunction") +class CardModifierBuilder( + private var modifier: Modifier, + private val property: CardProperty, + uiTronData: UiTronData?, + uiTronViewModel: UiTronViewModel +) : ModifierBuilder(modifier, property, uiTronData, uiTronViewModel) { + + override fun build(): Modifier { + setIdModifiers() + setSizeModifiers() + setPadding() + setClipShape() + modifier = modifier.composed { + shadow( + elevation = property.elevation?.dp ?: 0.dp, + ambientColor = property.ambientColor?.hexToComposeColor + ?: DefaultShadowColor, + spotColor = property.spotColor?.hexToComposeColor ?: DefaultShadowColor, + shape = ShapeUtil.getShape(shape = property.shape) + ) + } + setClickableModifiers() + setEffectModifiers() + return modifier + } + +} \ No newline at end of file diff --git a/navi-uitron/src/main/java/com/navi/uitron/modifer/ColumnModifierBuilder.kt b/navi-uitron/src/main/java/com/navi/uitron/modifer/ColumnModifierBuilder.kt new file mode 100644 index 0000000..bc066ca --- /dev/null +++ b/navi-uitron/src/main/java/com/navi/uitron/modifer/ColumnModifierBuilder.kt @@ -0,0 +1,31 @@ +package com.navi.uitron.modifer + +import android.annotation.SuppressLint +import androidx.compose.ui.Modifier +import com.navi.uitron.model.data.UiTronData +import com.navi.uitron.model.ui.ColumnProperty +import com.navi.uitron.viewmodel.UiTronViewModel +import setHorizontalScroll +import setVerticalScroll + +@SuppressLint("ModifierFactoryExtensionFunction") +class ColumnModifierBuilder( + private var modifier: Modifier, + private val property: ColumnProperty, + uiTronData: UiTronData?, + uiTronViewModel: UiTronViewModel +) : ModifierBuilder(modifier, property, uiTronData, uiTronViewModel) { + + override fun build(): Modifier { + setIdModifiers() + modifier = modifier + .setVerticalScroll(property.verticalScroll) + .setHorizontalScroll(property.horizontalScroll) + setSizeModifiers() + setBorderModifiers() + setClickableModifiers() + setEffectModifiers() + return modifier + } + +} \ No newline at end of file diff --git a/navi-uitron/src/main/java/com/navi/uitron/modifer/ConstraintModifierBuilder.kt b/navi-uitron/src/main/java/com/navi/uitron/modifer/ConstraintModifierBuilder.kt new file mode 100644 index 0000000..9fd2e07 --- /dev/null +++ b/navi-uitron/src/main/java/com/navi/uitron/modifer/ConstraintModifierBuilder.kt @@ -0,0 +1,31 @@ +package com.navi.uitron.modifer + +import android.annotation.SuppressLint +import androidx.compose.ui.Modifier +import com.navi.uitron.model.data.UiTronData +import com.navi.uitron.model.ui.ConstraintProperty +import com.navi.uitron.viewmodel.UiTronViewModel +import setHorizontalScroll +import setVerticalScroll + +@SuppressLint("ModifierFactoryExtensionFunction") +class ConstraintModifierBuilder( + private var modifier: Modifier, + private val property: ConstraintProperty, + uiTronData: UiTronData?, + uiTronViewModel: UiTronViewModel +) : ModifierBuilder(modifier, property, uiTronData, uiTronViewModel) { + + override fun build(): Modifier { + setIdModifiers() + setSizeModifiers() + modifier = modifier + .setVerticalScroll(property.verticalScroll) + .setHorizontalScroll(property.horizontalScroll) + setBorderModifiers() + setClickableModifiers() + setEffectModifiers() + return modifier + } + +} \ No newline at end of file diff --git a/navi-uitron/src/main/java/com/navi/uitron/modifer/ModifierBuilder.kt b/navi-uitron/src/main/java/com/navi/uitron/modifer/ModifierBuilder.kt new file mode 100644 index 0000000..9b459b0 --- /dev/null +++ b/navi-uitron/src/main/java/com/navi/uitron/modifer/ModifierBuilder.kt @@ -0,0 +1,174 @@ +package com.navi.uitron.modifer + +import android.annotation.SuppressLint +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.layout.layoutId +import clip +import com.navi.uitron.model.data.UiTronData +import com.navi.uitron.model.ui.BaseProperty +import com.navi.uitron.viewmodel.UiTronViewModel +import customClickable +import customCombinedClick +import customOffset +import setBackground +import setBlur +import setBorderStroke +import setHeight +import setHeightRange +import setPadding +import setTag +import setWidth +import setWidthRange + +@Suppress("UNCHECKED_CAST", "MemberVisibilityCanBePrivate") +open class ModifierBuilder>( + private var modifier: Modifier, + private val property: BaseProperty, + private val uiTronData: UiTronData?, + private val uiTronViewModel: UiTronViewModel +) { + + fun setCustomOffset(): T { + modifier = modifier.customOffset(property.offset) + return this as T + } + + fun setWidth(): T { + modifier = modifier.setWidth(property.width) + return this as T + } + + fun setHeight(): T { + modifier = modifier.setHeight(property.height) + return this as T + } + + fun setWidthRange(): T { + modifier = modifier.setWidthRange(property.widthRange) + return this as T + } + + fun setHeightRange(): T { + modifier = modifier.setHeightRange(property.heightRange) + return this as T + } + + fun setMargin(): T { + modifier = modifier.setPadding(property.margin) + return this as T + } + + fun setBackground(): T { + modifier = modifier.setBackground( + property.backgroundColor, + property.shape, + property.backGroundBrushData + ) + return this as T + } + + fun setPadding(): T { + modifier = modifier.setPadding(property.padding) + return this as T + } + + fun setBorderStroke(): T { + modifier = modifier.setBorderStroke(property.borderStrokeData) + return this as T + } + + fun setClipShape(): T { + modifier = modifier.clip(property.clipShape) + return this as T + } + + fun setTag(): T { + modifier = modifier.setTag(property) + return this as T + } + + fun setLayoutId(): T { + modifier = modifier.layoutId(property.layoutId.orEmpty()) + return this as T + } + + fun setCustomClickable(): T { + modifier = modifier.customClickable( + { + uiTronViewModel.handleActions(uiTronData?.onClick) + }, + actions = uiTronData?.onClick?.actions, + property = property + ) + return this as T + } + + fun setCustomCombinedClick(): T { + modifier = modifier.customCombinedClick(property, uiTronData) { + uiTronViewModel.handleActions(it) + } + return this as T + } + + fun setAlpha(): T { + modifier = modifier.alpha(property.alpha ?: 1.0f) + return this as T + } + + fun setBlur(): T { + modifier = modifier.setBlur(property.blurData) + return this as T + } + + fun setIdModifiers(): T { + setTag() + setLayoutId() + return this as T + } + + fun setSizeModifiers(): T { + setCustomOffset() + setWidth() + setHeight() + setWidthRange() + setHeightRange() + return this as T + } + + fun setBorderModifiers(): T { + setMargin() + setBackground() + setClipShape() + setPadding() + setBorderStroke() + return this as T + } + + fun setClickableModifiers(): T { + setCustomClickable() + setCustomCombinedClick() + return this as T + } + + fun setEffectModifiers(): T { + setAlpha() + setBlur() + return this as T + } + + fun setDefaultModifiers(): T { + setIdModifiers() + setSizeModifiers() + setBorderModifiers() + setClickableModifiers() + setEffectModifiers() + return this as T + } + + @SuppressLint("ModifierFactoryExtensionFunction") + open fun build(): Modifier { + return modifier + } + +} \ No newline at end of file diff --git a/navi-uitron/src/main/java/com/navi/uitron/modifer/RowModifierBuilder.kt b/navi-uitron/src/main/java/com/navi/uitron/modifer/RowModifierBuilder.kt new file mode 100644 index 0000000..ff3b48f --- /dev/null +++ b/navi-uitron/src/main/java/com/navi/uitron/modifer/RowModifierBuilder.kt @@ -0,0 +1,31 @@ +package com.navi.uitron.modifer + +import android.annotation.SuppressLint +import androidx.compose.ui.Modifier +import com.navi.uitron.model.data.UiTronData +import com.navi.uitron.model.ui.RowProperty +import com.navi.uitron.viewmodel.UiTronViewModel +import setHorizontalScroll +import setVerticalScroll + +@SuppressLint("ModifierFactoryExtensionFunction") +class RowModifierBuilder( + private var modifier: Modifier, + private val property: RowProperty, + uiTronData: UiTronData?, + uiTronViewModel: UiTronViewModel +) : ModifierBuilder(modifier, property, uiTronData, uiTronViewModel) { + + override fun build(): Modifier { + setIdModifiers() + modifier = modifier + .setVerticalScroll(property.verticalScroll) + .setHorizontalScroll(property.horizontalScroll) + setSizeModifiers() + setBorderModifiers() + setClickableModifiers() + setEffectModifiers() + return modifier + } + +} \ No newline at end of file diff --git a/navi-uitron/src/main/java/com/navi/uitron/modifer/SliderModifierBuilder.kt b/navi-uitron/src/main/java/com/navi/uitron/modifer/SliderModifierBuilder.kt new file mode 100644 index 0000000..fb6c45d --- /dev/null +++ b/navi-uitron/src/main/java/com/navi/uitron/modifer/SliderModifierBuilder.kt @@ -0,0 +1,27 @@ +package com.navi.uitron.modifer + +import android.annotation.SuppressLint +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.rotate +import com.navi.uitron.model.data.UiTronData +import com.navi.uitron.model.ui.SliderProperty +import com.navi.uitron.viewmodel.UiTronViewModel + +@SuppressLint("ModifierFactoryExtensionFunction") +class SliderModifierBuilder( + private var modifier: Modifier, + private val property: SliderProperty, + uiTronData: UiTronData?, + uiTronViewModel: UiTronViewModel +) : ModifierBuilder(modifier, property, uiTronData, uiTronViewModel) { + + override fun build(): Modifier { + setIdModifiers() + setSizeModifiers() + setPadding() + setEffectModifiers() + modifier = modifier.rotate(property.rotation ?: 0f) + return modifier + } + +} \ No newline at end of file diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/AutoScrollViewRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/AutoScrollViewRenderer.kt index b03c945..c831ad3 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/AutoScrollViewRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/AutoScrollViewRenderer.kt @@ -20,10 +20,12 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.layout.layoutId import clip +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.data.EmptyData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.AutoScrollViewProperty import com.navi.uitron.model.ui.UiTronView +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.viewmodel.UiTronViewModel import customClickable import customCombinedClick @@ -86,32 +88,38 @@ class AutoScrollViewRenderer( } } if (property.visible.orTrue()) { - val animatedContentModifier = (modifier ?: Modifier) - .setTag(property) - .layoutId(property.layoutId.orEmpty()) - .customOffset(property.offset) - .setHeight(property.height) - .setWidth(property.width) - .setWidthRange(property.widthRange) - .setHeightRange(property.heightRange) - .setPadding(property.margin) - .setBackground( - property.backgroundColor, - property.shape, - property.backGroundBrushData - ) - .clip(property.clipShape) - .setPadding(property.padding) - .customClickable( - { - uiTronViewModel.handleActions(updatedData?.onClick) - }, - actions = updatedData?.onClick?.actions, - property = property - ) - .customCombinedClick(property, uiTronData) { - uiTronViewModel.handleActions(it) - } + val animatedContentModifier = if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .setDefaultModifiers() + .build() + } else { + (modifier ?: Modifier) + .setTag(property) + .layoutId(property.layoutId.orEmpty()) + .customOffset(property.offset) + .setHeight(property.height) + .setWidth(property.width) + .setWidthRange(property.widthRange) + .setHeightRange(property.heightRange) + .setPadding(property.margin) + .setBackground( + property.backgroundColor, + property.shape, + property.backGroundBrushData + ) + .clip(property.clipShape) + .setPadding(property.padding) + .customClickable( + { + uiTronViewModel.handleActions(updatedData?.onClick) + }, + actions = updatedData?.onClick?.actions, + property = property + ) + .customCombinedClick(property, uiTronData) { + uiTronViewModel.handleActions(it) + } + } if (childrenComposeViews.size > 1) { diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/BoxRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/BoxRenderer.kt index fce1b5c..ae15692 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/BoxRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/BoxRenderer.kt @@ -7,6 +7,7 @@ package com.navi.uitron.render +import androidx.compose.foundation.border import androidx.compose.foundation.layout.Box import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState @@ -17,14 +18,17 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.layoutId import androidx.compose.ui.unit.dp import clip +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.action.MvelAction import com.navi.uitron.model.data.EmptyData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.BoxProperty import com.navi.uitron.model.ui.UiTronView +import com.navi.uitron.modifer.BoxModifierBuilder import com.navi.uitron.utils.KEY_MVEL_ACTION import com.navi.uitron.utils.KEY_PROPERTY import com.navi.uitron.utils.KEY_UI_TRON_DATA +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.utils.ShapeUtil import com.navi.uitron.viewmodel.UiTronViewModel import customClickable @@ -89,43 +93,48 @@ class BoxRenderer( Box( contentAlignment = getContentAlignment(contentAlignment = property.contentAlignment), propagateMinConstraints = property.propagateMinConstraints.orFalse(), - modifier = (modifier ?: Modifier) - .setTag(property) - .layoutId(property.layoutId.orEmpty()) - .customOffset(property.offset) - .setVerticalScroll(property.verticalScroll) - .setHorizontalScroll(property.horizontalScroll) - .setHeight(property.height) - .setWidth(property.width) - .setWidthRange(property.widthRange) - .setHeightRange(property.heightRange) - .setPadding(property.margin) - .setBackground( - property.backgroundColor, - property.shape, - property.backGroundBrushData - ) - .clip(property.clipShape) - .setPadding(property.padding) - .setBorderStroke(property.borderStrokeData) - .setShimmerEffect(property.isShimmerEnabled) - .customClickable( - { - uiTronViewModel.handleActions(updatedData?.onClick) - }, - actions = updatedData?.onClick?.actions, - property = property - ) - .customCombinedClick(property, uiTronData) { - uiTronViewModel.handleActions(it) - } - .alpha(property.alpha ?: 1.0f) - .shadow( - elevation = property.elevation?.toInt()?.dp ?: 0.dp, - shape = ShapeUtil.getShape(shape = property.shape), - spotColor = property.spotColor?.hexToComposeColor ?: Color.Transparent, - ambientColor = property.ambientColor?.hexToComposeColor ?: Color.Transparent - ) + modifier = if (UiTronSdkManager.isModifierBuilderEnabled()) { + BoxModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .build() + } else { + (modifier ?: Modifier) + .setTag(property) + .layoutId(property.layoutId.orEmpty()) + .customOffset(property.offset) + .setVerticalScroll(property.verticalScroll) + .setHorizontalScroll(property.horizontalScroll) + .setHeight(property.height) + .setWidth(property.width) + .setWidthRange(property.widthRange) + .setHeightRange(property.heightRange) + .setPadding(property.margin) + .setBackground( + property.backgroundColor, + property.shape, + property.backGroundBrushData + ) + .clip(property.clipShape) + .setPadding(property.padding) + .setBorderStroke(property.borderStrokeData) + .setShimmerEffect(property.isShimmerEnabled) + .customClickable( + { + uiTronViewModel.handleActions(updatedData?.onClick) + }, + actions = updatedData?.onClick?.actions, + property = property + ) + .customCombinedClick(property, uiTronData) { + uiTronViewModel.handleActions(it) + } + .alpha(property.alpha ?: 1.0f) + .shadow( + elevation = property.elevation?.toInt()?.dp ?: 0.dp, + shape = ShapeUtil.getShape(shape = property.shape), + spotColor = property.spotColor?.hexToComposeColor ?: Color.Transparent, + ambientColor = property.ambientColor?.hexToComposeColor ?: Color.Transparent + ) + } ) { childrenComposeViews.forEach { if (it.data.isNullOrEmpty()) { diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/ButtonRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/ButtonRenderer.kt index 95abc11..3ad5ac2 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/ButtonRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/ButtonRenderer.kt @@ -20,10 +20,13 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.compositeOver import androidx.compose.ui.layout.layoutId import androidx.compose.ui.unit.dp +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.data.EmptyData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.ButtonProperty import com.navi.uitron.model.ui.UiTronView +import com.navi.uitron.modifer.BoxModifierBuilder +import com.navi.uitron.modifer.ButtonModifierBuilder import com.navi.uitron.utils.ShapeUtil import com.navi.uitron.viewmodel.UiTronViewModel import customOffset @@ -90,17 +93,22 @@ class ButtonRenderer( brush = getBorderStrokeBrushData(property.borderStrokeData) ), elevation = setButtonElevation(property), - modifier = (modifier ?: Modifier) - .setTag(property) - .customOffset(property.offset) - .setHeight(property.height) - .setWidth(property.width) - .setWidthRange(property.widthRange) - .setHeightRange(property.heightRange) - .setPadding(property.margin) - .setPadding(property.padding) - .layoutId(property.layoutId.orEmpty()) - .alpha(property.alpha ?: 1.0f), + modifier = if (UiTronSdkManager.isModifierBuilderEnabled()) { + ButtonModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .build() + } else { + (modifier ?: Modifier) + .setTag(property) + .customOffset(property.offset) + .setHeight(property.height) + .setWidth(property.width) + .setWidthRange(property.widthRange) + .setHeightRange(property.heightRange) + .setPadding(property.margin) + .setPadding(property.padding) + .layoutId(property.layoutId.orEmpty()) + .alpha(property.alpha ?: 1.0f) + }, onClick = { if (property.debounceTime != null && property.debounceTime.orZero() > 0) { val now = System.currentTimeMillis() diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/CardRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/CardRenderer.kt index 44808d7..64cd6a1 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/CardRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/CardRenderer.kt @@ -19,11 +19,14 @@ import androidx.compose.ui.graphics.DefaultShadowColor import androidx.compose.ui.layout.layoutId import androidx.compose.ui.unit.dp import clip +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.action.MvelAction import com.navi.uitron.model.data.EmptyData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.CardProperty import com.navi.uitron.model.ui.UiTronView +import com.navi.uitron.modifer.ButtonModifierBuilder +import com.navi.uitron.modifer.CardModifierBuilder import com.navi.uitron.utils.KEY_MVEL_ACTION import com.navi.uitron.utils.KEY_PROPERTY import com.navi.uitron.utils.KEY_UI_TRON_DATA @@ -84,33 +87,39 @@ class CardRenderer( } if (property.visible.orTrue()) { Card( - modifier = (modifier ?: Modifier) - .setTag(property) - .layoutId(property.layoutId.orEmpty()) - .customOffset(property.offset) - .setWidth(property.width) - .setHeight(property.height) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .setPadding(property.padding).clip(property.clipShape) - .shadow( - elevation = property.elevation?.dp ?: 0.dp, - ambientColor = property.ambientColor?.hexToComposeColor - ?: DefaultShadowColor, - spotColor = property.spotColor?.hexToComposeColor ?: DefaultShadowColor, - shape = ShapeUtil.getShape(shape = property.shape), - ) - .customClickable( - { - uiTronViewModel.handleActions(updatedData?.onClick) - }, - actions = updatedData?.onClick?.actions, - property = property - ) - .customCombinedClick(property, uiTronData) { - uiTronViewModel.handleActions(it) - } - .alpha(property.alpha ?: 1.0f), + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + CardModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .build() + } else { + (modifier ?: Modifier) + .setTag(property) + .layoutId(property.layoutId.orEmpty()) + .customOffset(property.offset) + .setWidth(property.width) + .setHeight(property.height) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .setPadding(property.padding).clip(property.clipShape) + .shadow( + elevation = property.elevation?.dp ?: 0.dp, + ambientColor = property.ambientColor?.hexToComposeColor + ?: DefaultShadowColor, + spotColor = property.spotColor?.hexToComposeColor ?: DefaultShadowColor, + shape = ShapeUtil.getShape(shape = property.shape), + ) + .customClickable( + { + uiTronViewModel.handleActions(updatedData?.onClick) + }, + actions = updatedData?.onClick?.actions, + property = property + ) + .customCombinedClick(property, uiTronData) { + uiTronViewModel.handleActions(it) + } + .alpha(property.alpha ?: 1.0f) + }, shape = ShapeUtil.getShape(shape = property.shape), elevation = 0.dp, backgroundColor = property.backgroundColor?.hexToComposeColor ?: Color.White, diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/CheckBoxRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/CheckBoxRenderer.kt index 06b52bf..5312666 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/CheckBoxRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/CheckBoxRenderer.kt @@ -19,9 +19,11 @@ import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.layoutId import clip +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.data.CheckBoxData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.CheckBoxProperty +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.viewmodel.UiTronViewModel import customClickable import customCombinedClick @@ -91,31 +93,38 @@ class CheckBoxRenderer : property.uncheckedColor?.hexToComposeColor ?: Color.Black, property.checkmarkColor?.hexToComposeColor ?: Color.Black ), - modifier = (modifier ?: Modifier) - .setTag(property) - .customOffset(property.offset) - .setPadding(property.margin) - .setBackground( - property.backgroundColor, property.shape, property.backGroundBrushData - ) - .clip(property.clipShape) - .setPadding(property.padding) - .setWidth(property.width) - .setHeight(property.height) - .setWidthRange(property.widthRange) - .setHeightRange(property.heightRange) - .layoutId(property.layoutId.orEmpty()) - .customClickable( - { - uiTronViewModel.handleActions(updatedData?.onClick) - }, - actions = updatedData?.onClick?.actions, - property = property - ) - .customCombinedClick(property, uiTronData) { - uiTronViewModel.handleActions(it) - } - .alpha(property.alpha ?: 1.0f) + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .setDefaultModifiers() + .build() + } else { + (modifier ?: Modifier) + .setTag(property) + .customOffset(property.offset) + .setPadding(property.margin) + .setBackground( + property.backgroundColor, property.shape, property.backGroundBrushData + ) + .clip(property.clipShape) + .setPadding(property.padding) + .setWidth(property.width) + .setHeight(property.height) + .setWidthRange(property.widthRange) + .setHeightRange(property.heightRange) + .layoutId(property.layoutId.orEmpty()) + .customClickable( + { + uiTronViewModel.handleActions(updatedData?.onClick) + }, + actions = updatedData?.onClick?.actions, + property = property + ) + .customCombinedClick(property, uiTronData) { + uiTronViewModel.handleActions(it) + } + .alpha(property.alpha ?: 1.0f) + } ) } } diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/ColumnRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/ColumnRenderer.kt index a202c73..f9db6eb 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/ColumnRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/ColumnRenderer.kt @@ -17,11 +17,14 @@ import androidx.compose.ui.draw.alpha import androidx.compose.ui.layout.layoutId import androidx.compose.ui.unit.dp import clip +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.action.MvelAction import com.navi.uitron.model.data.ColumnData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.ColumnProperty import com.navi.uitron.model.ui.UiTronView +import com.navi.uitron.modifer.ColumnModifierBuilder +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.utils.KEY_MVEL_ACTION import com.navi.uitron.utils.KEY_PROPERTY import com.navi.uitron.utils.KEY_UI_TRON_DATA @@ -89,47 +92,53 @@ class ColumnRenderer( Column( verticalArrangement = Arrangement.setVerticalArrangement(arrangementData = property.arrangementData), horizontalAlignment = getHorizontalAlignment(horizontalAlignment = property.horizontalAlignment), - modifier = (modifier ?: Modifier) - .setTag(property) - .layoutId(property.layoutId.orEmpty()) - .customOffset(property.offset) - .setVerticalScroll(property.verticalScroll) - .setHorizontalScroll(property.horizontalScroll) - .setHeight(property.height) - .setWidth(property.width) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .padding( - start = property.margin?.start?.dp ?: 0.dp, - end = property.margin?.end?.dp ?: 0.dp, - top = property.margin?.top?.dp ?: 0.dp, - bottom = property.margin?.bottom?.dp ?: 0.dp - ) - .setBackground( - property.backgroundColor, - property.shape, - property.backGroundBrushData - ) - .clip(property.clipShape) - .padding( - start = property.padding?.start?.dp ?: 0.dp, - end = property.padding?.end?.dp ?: 0.dp, - top = property.padding?.top?.dp ?: 0.dp, - bottom = property.padding?.bottom?.dp ?: 0.dp - ) - .setBorderStroke(property.borderStrokeData) - .customClickable( - { - uiTronViewModel.handleActions(uiTronData?.onClick) - }, - actions = uiTronData?.onClick?.actions, - property = property - ) - .customCombinedClick(property, uiTronData) { - uiTronViewModel.handleActions(it) - } - .alpha(property.alpha ?: 1.0f) - .setBlur(property.blurData) + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ColumnModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .build() + } else { + (modifier ?: Modifier) + .setTag(property) + .layoutId(property.layoutId.orEmpty()) + .customOffset(property.offset) + .setVerticalScroll(property.verticalScroll) + .setHorizontalScroll(property.horizontalScroll) + .setHeight(property.height) + .setWidth(property.width) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .padding( + start = property.margin?.start?.dp ?: 0.dp, + end = property.margin?.end?.dp ?: 0.dp, + top = property.margin?.top?.dp ?: 0.dp, + bottom = property.margin?.bottom?.dp ?: 0.dp + ) + .setBackground( + property.backgroundColor, + property.shape, + property.backGroundBrushData + ) + .clip(property.clipShape) + .padding( + start = property.padding?.start?.dp ?: 0.dp, + end = property.padding?.end?.dp ?: 0.dp, + top = property.padding?.top?.dp ?: 0.dp, + bottom = property.padding?.bottom?.dp ?: 0.dp + ) + .setBorderStroke(property.borderStrokeData) + .customClickable( + { + uiTronViewModel.handleActions(uiTronData?.onClick) + }, + actions = uiTronData?.onClick?.actions, + property = property + ) + .customCombinedClick(property, uiTronData) { + uiTronViewModel.handleActions(it) + } + .alpha(property.alpha ?: 1.0f) + .setBlur(property.blurData) + } ) { if (property.repeat == null || (property.repeat ?: 0) <= 1) { childrenComposeViews.forEach {childrenView -> diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/ConstraintLayoutRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/ConstraintLayoutRenderer.kt index 1907dae..2dbaba4 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/ConstraintLayoutRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/ConstraintLayoutRenderer.kt @@ -17,11 +17,14 @@ import androidx.compose.ui.unit.dp import androidx.constraintlayout.compose.ConstraintLayout import androidx.constraintlayout.compose.layoutId import clip +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.action.MvelAction import com.navi.uitron.model.data.EmptyData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.ConstraintProperty import com.navi.uitron.model.ui.UiTronView +import com.navi.uitron.modifer.ColumnModifierBuilder +import com.navi.uitron.modifer.ConstraintModifierBuilder import com.navi.uitron.utils.KEY_MVEL_ACTION import com.navi.uitron.utils.KEY_PROPERTY import com.navi.uitron.utils.KEY_UI_TRON_DATA @@ -84,46 +87,52 @@ class ConstraintLayoutRenderer( if (property.visible.orTrue()) { ConstraintLayout( constraintSet = RenderUtility.decoupledConstraints(childrenViews), - modifier = (modifier ?: Modifier) - .setTag(property) - .layoutId(property.layoutId.orEmpty()) - .customOffset(property.offset) - .setHeight(property.height) - .setWidth(property.width) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .setVerticalScroll(property.verticalScroll) - .setHorizontalScroll(property.horizontalScroll) - .padding( - start = property.margin?.start?.dp ?: 0.dp, - end = property.margin?.end?.dp ?: 0.dp, - top = property.margin?.top?.dp ?: 0.dp, - bottom = property.margin?.bottom?.dp ?: 0.dp - ) - .setBackground( - property.backgroundColor, - property.shape, - property.backGroundBrushData - ) - .clip(property.clipShape) - .padding( - top = property.padding?.top?.dp ?: 0.dp, - bottom = property.padding?.bottom?.dp ?: 0.dp, - start = property.padding?.start?.dp ?: 0.dp, - end = property.padding?.end?.dp ?: 0.dp - ) - .customClickable( - { - uiTronViewModel.handleActions(updatedData?.onClick) - }, - actions = updatedData?.onClick?.actions, - property = property - ) - .customCombinedClick(property, uiTronData) { - uiTronViewModel.handleActions(it) - } - .setBorderStroke(property.borderStrokeData) - .alpha(property.alpha ?: 1.0f) + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ConstraintModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .build() + } else { + (modifier ?: Modifier) + .setTag(property) + .layoutId(property.layoutId.orEmpty()) + .customOffset(property.offset) + .setHeight(property.height) + .setWidth(property.width) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .setVerticalScroll(property.verticalScroll) + .setHorizontalScroll(property.horizontalScroll) + .padding( + start = property.margin?.start?.dp ?: 0.dp, + end = property.margin?.end?.dp ?: 0.dp, + top = property.margin?.top?.dp ?: 0.dp, + bottom = property.margin?.bottom?.dp ?: 0.dp + ) + .setBackground( + property.backgroundColor, + property.shape, + property.backGroundBrushData + ) + .clip(property.clipShape) + .padding( + top = property.padding?.top?.dp ?: 0.dp, + bottom = property.padding?.bottom?.dp ?: 0.dp, + start = property.padding?.start?.dp ?: 0.dp, + end = property.padding?.end?.dp ?: 0.dp + ) + .customClickable( + { + uiTronViewModel.handleActions(updatedData?.onClick) + }, + actions = updatedData?.onClick?.actions, + property = property + ) + .customCombinedClick(property, uiTronData) { + uiTronViewModel.handleActions(it) + } + .setBorderStroke(property.borderStrokeData) + .alpha(property.alpha ?: 1.0f) + } ) { uiTronRenderer.Render(childrenViews) } diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/CustomTextFieldRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/CustomTextFieldRenderer.kt index 667ba1f..bf03f32 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/CustomTextFieldRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/CustomTextFieldRenderer.kt @@ -37,6 +37,8 @@ import com.navi.uitron.model.data.CustomTextFieldData import com.navi.uitron.model.data.TextData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.* +import com.navi.uitron.modifer.ConstraintModifierBuilder +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.utils.CUSTOM_TEXT_FIELD_DATA import com.navi.uitron.utils.CUSTOM_TEXT_FIELD_PROPERTY import com.navi.uitron.utils.HIDE @@ -144,21 +146,30 @@ class CustomTextFieldRenderer( if (property.visible.orTrue()) { Column( - modifier = Modifier - .layoutId(property.layoutId.orEmpty()) - .setWidth(property.width) - .setHeight(property.height) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .customOffset(property.offset) - .setPadding(property.padding) - .setBackground( - property.backgroundColor, - property.shape, - property.backGroundBrushData - ) - .clip(property.clipShape) - .alpha(property.alpha ?: 1.0f), + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(Modifier, property, uiTronData, uiTronViewModel) + .setLayoutId() + .setSizeModifiers() + .setBorderModifiers() + .setEffectModifiers() + .build() + } else { + Modifier + .layoutId(property.layoutId.orEmpty()) + .setWidth(property.width) + .setHeight(property.height) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .customOffset(property.offset) + .setPadding(property.padding) + .setBackground( + property.backgroundColor, + property.shape, + property.backGroundBrushData + ) + .clip(property.clipShape) + .alpha(property.alpha ?: 1.0f) }, verticalArrangement = Arrangement.setVerticalArrangement( property.arrangementData ?: ArrangementData( arrangementType = VerticalArrangementType.SpacedBy.name, diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/DividerRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/DividerRenderer.kt index 0c5a396..0bff448 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/DividerRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/DividerRenderer.kt @@ -19,8 +19,10 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.PathEffect import androidx.compose.ui.layout.layoutId import androidx.compose.ui.unit.dp +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.DividerProperty +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.viewmodel.UiTronViewModel import customOffset import hexToComposeColor @@ -52,17 +54,28 @@ class DividerRenderer : Renderer { if (property.visible.orTrue()) { if (property.separation == null || property.separation == 0) { Divider( - modifier = (modifier ?: Modifier) - .customOffset(property.offset) - .setHeight(property.height) - .setWidth(property.width) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .layoutId(property.layoutId.orEmpty()) - .setTag(property) - .setPadding(property.margin) - .setPadding(property.padding) - .alpha(property.alpha ?: 1.0f), + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .setIdModifiers() + .setSizeModifiers() + .setMargin() + .setPadding() + .setEffectModifiers() + .build() + } else { + (modifier ?: Modifier) + .customOffset(property.offset) + .setHeight(property.height) + .setWidth(property.width) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .layoutId(property.layoutId.orEmpty()) + .setTag(property) + .setPadding(property.margin) + .setPadding(property.padding) + .alpha(property.alpha ?: 1.0f) + }, color = property.color?.hexToComposeColor ?: Color.Black, thickness = property.thickness?.dp ?: 1.dp ) diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/DropdownRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/DropdownRenderer.kt index bcfc190..d7fa327 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/DropdownRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/DropdownRenderer.kt @@ -23,9 +23,11 @@ import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp import androidx.compose.ui.window.PopupProperties import clip +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.DropdownProperty import com.navi.uitron.model.ui.UiTronView +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.viewmodel.UiTronViewModel import customOffset import orFalse @@ -68,25 +70,36 @@ class DropdownRenderer( ) { DropdownMenu( expanded = isExpanded.value, - modifier = Modifier - .setTag(property) - .layoutId(property.layoutId.orEmpty()) - .customOffset(property.offset) - .setWidth(property.width) - .setHeight(property.height) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .padding( - start = property.padding?.start?.dp ?: 0.dp, - end = property.padding?.end?.dp ?: 0.dp, - top = property.padding?.top?.dp ?: 0.dp, - bottom = property.padding?.bottom?.dp ?: 0.dp - ) - .setBackground( - property.backgroundColor, property.shape, property.backGroundBrushData - ) - .clip(property.clipShape) - .alpha(property.alpha ?: 1.0f), + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(Modifier, property, uiTronData, uiTronViewModel) + .setIdModifiers() + .setSizeModifiers() + .setPadding() + .setBackground() + .setClipShape() + .setEffectModifiers() + .build() + } else { + Modifier + .setTag(property) + .layoutId(property.layoutId.orEmpty()) + .customOffset(property.offset) + .setWidth(property.width) + .setHeight(property.height) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .padding( + start = property.padding?.start?.dp ?: 0.dp, + end = property.padding?.end?.dp ?: 0.dp, + top = property.padding?.top?.dp ?: 0.dp, + bottom = property.padding?.bottom?.dp ?: 0.dp + ) + .setBackground( + property.backgroundColor, property.shape, property.backGroundBrushData + ) + .clip(property.clipShape) + .alpha(property.alpha ?: 1.0f) }, onDismissRequest = { isExpanded.value = false }, diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/GridRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/GridRenderer.kt index 1119b04..fab8ae7 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/GridRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/GridRenderer.kt @@ -12,10 +12,12 @@ import androidx.compose.ui.draw.alpha import androidx.compose.ui.unit.dp import androidx.constraintlayout.compose.layoutId import clip +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.data.EmptyData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.GridProperty import com.navi.uitron.model.ui.UiTronView +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.viewmodel.UiTronViewModel import customClickable import customCombinedClick @@ -59,30 +61,37 @@ class GridRenderer( updatedData = updatedDataState.value ?: updatedData } if (property.visible.orTrue()) { - val columnModifier = (modifier ?: Modifier) - .setTag(property) - .layoutId(property.layoutId.orEmpty()) - .customOffset(property.offset) - .setHeight(property.height) - .setWidth(property.width) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .setPadding(property.margin) - .setBackground( - property.backgroundColor, property.shape, property.backGroundBrushData - ) - .clip(property.clipShape) - .setPadding(property.padding) - .customClickable( - { - uiTronViewModel.handleActions(updatedData?.onClick) - }, actions = updatedData?.onClick?.actions, - property = property - ) - .customCombinedClick(property, uiTronData) { - uiTronViewModel.handleActions(it) + val columnModifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .setDefaultModifiers() + .build() + } else { + (modifier ?: Modifier) + .setTag(property) + .layoutId(property.layoutId.orEmpty()) + .customOffset(property.offset) + .setHeight(property.height) + .setWidth(property.width) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .setPadding(property.margin) + .setBackground( + property.backgroundColor, property.shape, property.backGroundBrushData + ) + .clip(property.clipShape) + .setPadding(property.padding) + .customClickable( + { + uiTronViewModel.handleActions(updatedData?.onClick) + }, actions = updatedData?.onClick?.actions, + property = property + ) + .customCombinedClick(property, uiTronData) { + uiTronViewModel.handleActions(it) + } + .alpha(property.alpha ?: 1.0f) } - .alpha(property.alpha ?: 1.0f) Column(modifier = columnModifier) { val itemCount = childrenComposeViews.size diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/ImageRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/ImageRenderer.kt index c7fa3ab..55dc505 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/ImageRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/ImageRenderer.kt @@ -24,6 +24,7 @@ import com.navi.uitron.model.action.MvelAction import com.navi.uitron.model.data.ImageData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.ImageProperty +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.utils.KEY_MVEL_ACTION import com.navi.uitron.utils.KEY_PROPERTY import com.navi.uitron.utils.KEY_UI_TRON_DATA @@ -86,34 +87,41 @@ class ImageRenderer : Renderer { painter = painterResource(id = iconCode), contentDescription = uiTronImageData?.contentDescription, contentScale = getContentScale(contentScale = property.contentScale), - modifier = (modifier ?: Modifier) - .setTag(property) - .customOffset(property.offset) - .setWidth(property.width) - .setHeight(property.height) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .layoutId(property.layoutId.orEmpty()) - .setPadding(property.margin) - .setBackground( - property.backgroundColor, - property.shape, - property.backGroundBrushData - ) - .clip(property.clipShape) - .setPadding(property.padding) - .customClickable( - { - uiTronViewModel.handleActions(uiTronData?.onClick) - }, - actions = uiTronData?.onClick?.actions, - property = property - ) - .customCombinedClick(property, uiTronData) { - uiTronViewModel.handleActions(it) - } - .alpha(property.alpha ?: 1.0f) - .setBlur(property.blurData) + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .setDefaultModifiers() + .build() + } else { + (modifier ?: Modifier) + .setTag(property) + .customOffset(property.offset) + .setWidth(property.width) + .setHeight(property.height) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .layoutId(property.layoutId.orEmpty()) + .setPadding(property.margin) + .setBackground( + property.backgroundColor, + property.shape, + property.backGroundBrushData + ) + .clip(property.clipShape) + .setPadding(property.padding) + .customClickable( + { + uiTronViewModel.handleActions(uiTronData?.onClick) + }, + actions = uiTronData?.onClick?.actions, + property = property + ) + .customCombinedClick(property, uiTronData) { + uiTronViewModel.handleActions(it) + } + .alpha(property.alpha ?: 1.0f) + .setBlur(property.blurData) + } ) } ?: kotlin.run { val placeHolderIcon = UiTronSdkManager.getDependencyProvider() diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/LazyColumnRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/LazyColumnRenderer.kt index c605369..e8778de 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/LazyColumnRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/LazyColumnRenderer.kt @@ -17,11 +17,13 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.layout.layoutId import clip +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.helpers.ScrollEventHandler import com.navi.uitron.model.data.LazyColumnData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.LazyColumnProperty import com.navi.uitron.model.ui.UiTronView +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.viewmodel.UiTronViewModel import customClickable import customCombinedClick @@ -75,33 +77,40 @@ class LazyColumnRenderer( state = lazyListState, verticalArrangement = Arrangement.setVerticalArrangement(arrangementData = property.arrangementData), horizontalAlignment = getHorizontalAlignment(horizontalAlignment = property.horizontalAlignment), - modifier = (modifier ?: Modifier) - .setTag(property) - .layoutId(property.layoutId.orEmpty()) - .customOffset(property.offset) - .setHeight(property.height) - .setWidth(property.width) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .setPadding(property.margin) - .setBackground( - property.backgroundColor, - property.shape, - property.backGroundBrushData - ) - .clip(property.clipShape) - .setPadding(property.padding) - .customClickable( - { - uiTronViewModel.handleActions(uiTronData?.onClick) - }, - actions = uiTronData?.onClick?.actions, - property = property - ) - .customCombinedClick(property, uiTronData) { - uiTronViewModel.handleActions(it) - } - .alpha(property.alpha ?: 1.0f), + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .setDefaultModifiers() + .build() + } else { + (modifier ?: Modifier) + .setTag(property) + .layoutId(property.layoutId.orEmpty()) + .customOffset(property.offset) + .setHeight(property.height) + .setWidth(property.width) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .setPadding(property.margin) + .setBackground( + property.backgroundColor, + property.shape, + property.backGroundBrushData + ) + .clip(property.clipShape) + .setPadding(property.padding) + .customClickable( + { + uiTronViewModel.handleActions(uiTronData?.onClick) + }, + actions = uiTronData?.onClick?.actions, + property = property + ) + .customCombinedClick(property, uiTronData) { + uiTronViewModel.handleActions(it) + } + .alpha(property.alpha ?: 1.0f) + }, ) { items(childrenComposeViews) { childrenView -> if (childrenView.data.isNullOrEmpty()) { diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/LazyGridRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/LazyGridRenderer.kt index ce83f8e..33b2377 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/LazyGridRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/LazyGridRenderer.kt @@ -14,10 +14,12 @@ import androidx.compose.ui.draw.alpha import androidx.compose.ui.unit.dp import androidx.constraintlayout.compose.layoutId import clip +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.data.LazyGridData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.LazyGridProperty import com.navi.uitron.model.ui.UiTronView +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.viewmodel.UiTronViewModel import customClickable import customCombinedClick @@ -66,30 +68,37 @@ class LazyGridRenderer( } val gridState = uiTronViewModel.stateHolder.getOrUpdateGridState(key = property.gridStateKey) if (property.visible.orTrue()) { - val modifier = (modifier ?: Modifier) - .setTag(property) - .layoutId(property.layoutId.orEmpty()) - .customOffset(property.offset) - .setHeight(property.height) - .setWidth(property.width) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .setPadding(property.margin) - .setBackground( - property.backgroundColor, property.shape, property.backGroundBrushData - ) - .clip(property.clipShape) - .setPadding(property.padding) - .customClickable( - { - uiTronViewModel.handleActions(uiTronData?.onClick) - }, actions = uiTronData?.onClick?.actions, - property = property - ) - .customCombinedClick(property, uiTronData) { - uiTronViewModel.handleActions(it) + val modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .setDefaultModifiers() + .build() + } else { + (modifier ?: Modifier) + .setTag(property) + .layoutId(property.layoutId.orEmpty()) + .customOffset(property.offset) + .setHeight(property.height) + .setWidth(property.width) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .setPadding(property.margin) + .setBackground( + property.backgroundColor, property.shape, property.backGroundBrushData + ) + .clip(property.clipShape) + .setPadding(property.padding) + .customClickable( + { + uiTronViewModel.handleActions(uiTronData?.onClick) + }, actions = uiTronData?.onClick?.actions, + property = property + ) + .customCombinedClick(property, uiTronData) { + uiTronViewModel.handleActions(it) + } + .alpha(property.alpha ?: 1.0f) } - .alpha(property.alpha ?: 1.0f) if (property.orientation == LazyGridProperty.ORIENTATION_HORIZONTAL) { LazyHorizontalGrid( modifier = modifier, diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/LazyRowRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/LazyRowRenderer.kt index 7776f6b..4191c36 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/LazyRowRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/LazyRowRenderer.kt @@ -17,11 +17,13 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.layout.layoutId import clip +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.helpers.ScrollEventHandler import com.navi.uitron.model.data.LazyRowData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.LazyRowProperty import com.navi.uitron.model.ui.UiTronView +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.viewmodel.UiTronViewModel import customClickable import customCombinedClick @@ -78,33 +80,40 @@ class LazyRowRenderer( horizontalArrangement = Arrangement.setHorizontalArrangement(arrangementData = property.arrangementData), verticalAlignment = getVerticalAlignment(verticalAlignment = property.verticalAlignment), contentPadding = getContentPaddingValues(property.contentPadding), - modifier = (modifier ?: Modifier) - .setTag(property) - .layoutId(property.layoutId.orEmpty()) - .customOffset(property.offset) - .setHeight(property.height) - .setWidth(property.width) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .setPadding(property.margin) - .setBackground( - property.backgroundColor, - property.shape, - property.backGroundBrushData - ) - .clip(property.clipShape) - .setPadding(property.padding) - .customClickable( - { - uiTronViewModel.handleActions(uiTronData?.onClick) - }, - actions = uiTronData?.onClick?.actions, - property = property - ) - .customCombinedClick(property, uiTronData) { - uiTronViewModel.handleActions(it) - } - .alpha(property.alpha ?: 1.0f) + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .setDefaultModifiers() + .build() + } else { + (modifier ?: Modifier) + .setTag(property) + .layoutId(property.layoutId.orEmpty()) + .customOffset(property.offset) + .setHeight(property.height) + .setWidth(property.width) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .setPadding(property.margin) + .setBackground( + property.backgroundColor, + property.shape, + property.backGroundBrushData + ) + .clip(property.clipShape) + .setPadding(property.padding) + .customClickable( + { + uiTronViewModel.handleActions(uiTronData?.onClick) + }, + actions = uiTronData?.onClick?.actions, + property = property + ) + .customCombinedClick(property, uiTronData) { + uiTronViewModel.handleActions(it) + } + .alpha(property.alpha ?: 1.0f) + } ) { items(childrenComposeViews) { childrenView -> if (childrenView.data.isNullOrEmpty()) { diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/LinearProgressIndicatorRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/LinearProgressIndicatorRenderer.kt index b55dcff..753ed35 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/LinearProgressIndicatorRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/LinearProgressIndicatorRenderer.kt @@ -16,10 +16,12 @@ import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.layoutId import androidx.compose.ui.unit.dp -import clipContent +import clip +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.data.LinearProgressIndicatorData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.LinearProgressIndicatorProperty +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.viewmodel.UiTronViewModel import customOffset import hexToComposeColor @@ -59,22 +61,32 @@ class LinearProgressIndicatorRenderer : if (property.visible.orTrue()) { LinearProgressIndicator( progress = linearProgressIndicatorData?.progress ?: 0f, - modifier = (modifier ?: Modifier) - .setTag(property) - .customOffset(property.offset) - .setWidth(property.width) - .setHeight(property.height) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .clipContent(property.clipData) - .layoutId(property.layoutId.orEmpty()) - .padding( - start = property.padding?.start?.dp ?: 0.dp, - end = property.padding?.end?.dp ?: 0.dp, - top = property.padding?.top?.dp ?: 0.dp, - bottom = property.padding?.bottom?.dp ?: 0.dp - ) - .alpha(property.alpha ?: 1.0f), + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .setIdModifiers() + .setSizeModifiers() + .setClipShape() + .setPadding() + .setEffectModifiers() + .build() + } else { + (modifier ?: Modifier) + .setTag(property) + .customOffset(property.offset) + .setWidth(property.width) + .setHeight(property.height) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .clip(property.clipData) + .layoutId(property.layoutId.orEmpty()) + .padding( + start = property.padding?.start?.dp ?: 0.dp, + end = property.padding?.end?.dp ?: 0.dp, + top = property.padding?.top?.dp ?: 0.dp, + bottom = property.padding?.bottom?.dp ?: 0.dp + ) + .alpha(property.alpha ?: 1.0f) }, color = property.color?.hexToComposeColor ?: Color.Green, backgroundColor = property.backgroundColor?.hexToComposeColor ?: Color.White ) diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/LottieRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/LottieRenderer.kt index 3eb7dde..1f6377b 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/LottieRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/LottieRenderer.kt @@ -21,10 +21,12 @@ import com.airbnb.lottie.compose.LottieAnimation import com.airbnb.lottie.compose.LottieCompositionSpec import com.airbnb.lottie.compose.animateLottieCompositionAsState import com.airbnb.lottie.compose.rememberLottieComposition +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.action.MvelAction import com.navi.uitron.model.data.LottieData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.LottieProperty +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.utils.KEY_MVEL_ACTION import com.navi.uitron.utils.KEY_PROPERTY import com.navi.uitron.utils.KEY_UI_TRON_DATA @@ -86,31 +88,42 @@ class LottieRenderer : Renderer { ObserveProgress(composition, uiTronLottieData, uiTronViewModel) } if (property.visible.orTrue()) { - val modifier = (modifier ?: Modifier) - .setTag(property) - .customOffset(property.offset) - .setWidth(property.width) - .setHeight(property.height) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .layoutId(property.layoutId.orEmpty()) - .padding( - start = property.padding?.start?.dp ?: 0.dp, - end = property.padding?.end?.dp ?: 0.dp, - top = property.padding?.top?.dp ?: 0.dp, - bottom = property.padding?.bottom?.dp ?: 0.dp - ) - .customClickable( - { - uiTronViewModel.handleActions(uiTronData?.onClick) - }, - actions = uiTronData?.onClick?.actions, - property = property - ) - .customCombinedClick(property, uiTronData) { - uiTronViewModel.handleActions(it) + val modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .setIdModifiers() + .setSizeModifiers() + .setPadding() + .setClickableModifiers() + .setEffectModifiers() + .build() + } else { + (modifier ?: Modifier) + .setTag(property) + .customOffset(property.offset) + .setWidth(property.width) + .setHeight(property.height) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .layoutId(property.layoutId.orEmpty()) + .padding( + start = property.padding?.start?.dp ?: 0.dp, + end = property.padding?.end?.dp ?: 0.dp, + top = property.padding?.top?.dp ?: 0.dp, + bottom = property.padding?.bottom?.dp ?: 0.dp + ) + .customClickable( + { + uiTronViewModel.handleActions(uiTronData?.onClick) + }, + actions = uiTronData?.onClick?.actions, + property = property + ) + .customCombinedClick(property, uiTronData) { + uiTronViewModel.handleActions(it) + } + .alpha(property.alpha ?: 1.0f) } - .alpha(property.alpha ?: 1.0f) uiTronLottieData?.progress?.let { LottieAnimation( composition = composition, 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 33dfda8..40b4ce7 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 @@ -25,8 +25,10 @@ import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.unit.dp import androidx.core.text.isDigitsOnly +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.data.* import com.navi.uitron.model.ui.MultiSectionTextFieldProperty +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.utils.REMOVE_FOCUS_STATE import com.navi.uitron.utils.ShapeUtil import com.navi.uitron.viewmodel.UiTronViewModel @@ -133,15 +135,24 @@ class MultiSectionTextFieldRenderer() : Renderer if (property.visible.orTrue()) { Column( - modifier = (modifier ?: Modifier) - .setTag(property) - .layoutId(property.layoutId.orEmpty()) - .customOffset(property.offset) - .setWidth(property.width) - .setHeight(property.height) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .setPadding(property.padding), + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .setIdModifiers() + .setSizeModifiers() + .setPadding() + .build() + } else { + (modifier ?: Modifier) + .setTag(property) + .layoutId(property.layoutId.orEmpty()) + .customOffset(property.offset) + .setWidth(property.width) + .setHeight(property.height) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .setPadding(property.padding) + }, verticalArrangement = Arrangement.spacedBy(8.dp) ) { Row( diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/OtpBoxRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/OtpBoxRenderer.kt index ada2bd1..3bdb335 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/OtpBoxRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/OtpBoxRenderer.kt @@ -50,6 +50,7 @@ import com.navi.uitron.model.data.OtpBoxData import com.navi.uitron.model.data.TextData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.* +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.utils.EMPTY import com.navi.uitron.utils.ShapeUtil import com.navi.uitron.viewmodel.UiTronViewModel @@ -104,22 +105,34 @@ class OtpBoxRenderer : Renderer { } if (property.visible.orTrue()) { Column( - modifier = Modifier - .setTag(property) - .layoutId(property.layoutId.orEmpty()) - .customOffset(property.offset) - .setWidth(property.width) - .setHeight(property.height) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .setPadding(property.padding) - .setBackground( - property.backgroundColor, - property.shape, - property.backGroundBrushData - ) - .clip(property.clipShape) - .alpha(property.alpha ?: 1.0f), + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(Modifier, property, uiTronData, uiTronViewModel) + .setIdModifiers() + .setSizeModifiers() + .setPadding() + .setBackground() + .setClipShape() + .setEffectModifiers() + .build() + } else { + Modifier + .setTag(property) + .layoutId(property.layoutId.orEmpty()) + .customOffset(property.offset) + .setWidth(property.width) + .setHeight(property.height) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .setPadding(property.padding) + .setBackground( + property.backgroundColor, + property.shape, + property.backGroundBrushData + ) + .clip(property.clipShape) + .alpha(property.alpha ?: 1.0f) + }, verticalArrangement = Arrangement.setVerticalArrangement(property.containerProperty?.arrangementData), horizontalAlignment = getHorizontalAlignment(horizontalAlignment = property.containerProperty?.horizontalAlignment), ) { diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/OutlinedTextFieldRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/OutlinedTextFieldRenderer.kt index 3348ba2..d67a11f 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/OutlinedTextFieldRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/OutlinedTextFieldRenderer.kt @@ -32,6 +32,7 @@ import com.navi.uitron.model.data.OutlinedTextFieldData import com.navi.uitron.model.data.TextData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.OutlinedTextFieldProperty +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.utils.ShapeUtil import com.navi.uitron.viewmodel.UiTronViewModel import customClickable @@ -90,31 +91,41 @@ class OutlinedTextFieldRenderer( val keyboardController = LocalSoftwareKeyboardController.current if (property.visible.orTrue()) { Column( - modifier = (modifier ?: Modifier) - .setTag(property) - .layoutId(property.layoutId.orEmpty()) - .customOffset(property.offset) - .setWidth(property.width) - .setHeight(property.height) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .padding( - top = property.padding?.top?.dp ?: 0.dp, - bottom = property.padding?.bottom?.dp ?: 0.dp, - start = property.padding?.start?.dp ?: 0.dp, - end = property.padding?.end?.dp ?: 0.dp - ) - .customClickable( - { - uiTronViewModel.handleActions(uiTronData?.onClick) - }, - actions = uiTronData?.onClick?.actions, - property = property - ) - .customCombinedClick(property, uiTronData) { - uiTronViewModel.handleActions(it) - } - .alpha(property.alpha ?: 1.0f), + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .setIdModifiers() + .setSizeModifiers() + .setPadding() + .setClickableModifiers() + .setEffectModifiers() + .build() + } else { + (modifier ?: Modifier) + .setTag(property) + .layoutId(property.layoutId.orEmpty()) + .customOffset(property.offset) + .setWidth(property.width) + .setHeight(property.height) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .padding( + top = property.padding?.top?.dp ?: 0.dp, + bottom = property.padding?.bottom?.dp ?: 0.dp, + start = property.padding?.start?.dp ?: 0.dp, + end = property.padding?.end?.dp ?: 0.dp + ) + .customClickable( + { + uiTronViewModel.handleActions(uiTronData?.onClick) + }, + actions = uiTronData?.onClick?.actions, + property = property + ) + .customCombinedClick(property, uiTronData) { + uiTronViewModel.handleActions(it) + } + .alpha(property.alpha ?: 1.0f) }, verticalArrangement = Arrangement.spacedBy(8.dp) ) { OutlinedTextField( diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/PagerIndicatorRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/PagerIndicatorRenderer.kt index f9c88f0..1625806 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/PagerIndicatorRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/PagerIndicatorRenderer.kt @@ -23,10 +23,12 @@ import com.google.accompanist.pager.ExperimentalPagerApi import com.google.accompanist.pager.HorizontalPagerIndicator import com.google.accompanist.pager.VerticalPagerIndicator import com.google.accompanist.pager.rememberPagerState +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.data.EmptyData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.PagerIndicatorProperty import com.navi.uitron.model.ui.UiTronShape +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.utils.ShapeType import com.navi.uitron.utils.ShapeUtil import com.navi.uitron.viewmodel.UiTronViewModel @@ -77,38 +79,50 @@ class PagerIndicatorRenderer : Renderer { if (property.orientation == PagerIndicatorProperty.ORIENTATION_VERTICAL) { VerticalPagerIndicator( pagerState = pagerState ?: rememberPagerState(), - modifier = (modifier ?: Modifier) - .setTag(property) - .layoutId(property.layoutId.orEmpty()) - .customOffset(property.offset) - .setHeight(property.height) - .setWidth(property.width) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .alpha(property.alpha ?: 1.0f) - .setBackground( - property.backgroundColor, - property.shape, - property.backGroundBrushData - ) - .clip(property.clipShape) - .padding( - start = property.padding?.start?.dp ?: 0.dp, - end = property.padding?.end?.dp ?: 0.dp, - top = property.padding?.top?.dp ?: 0.dp, - bottom = property.padding?.bottom?.dp ?: 0.dp - ) - .customClickable( - { - uiTronViewModel.handleActions(updatedData?.onClick) - }, - actions = updatedData?.onClick?.actions, - property = property - ) - .customCombinedClick(property, uiTronData) { - uiTronViewModel.handleActions(it) - } - , + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .setIdModifiers() + .setSizeModifiers() + .setBackground() + .setClipShape() + .setPadding() + .setClickableModifiers() + .setEffectModifiers() + .build() + } else { + (modifier ?: Modifier) + .setTag(property) + .layoutId(property.layoutId.orEmpty()) + .customOffset(property.offset) + .setHeight(property.height) + .setWidth(property.width) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .alpha(property.alpha ?: 1.0f) + .setBackground( + property.backgroundColor, + property.shape, + property.backGroundBrushData + ) + .clip(property.clipShape) + .padding( + start = property.padding?.start?.dp ?: 0.dp, + end = property.padding?.end?.dp ?: 0.dp, + top = property.padding?.top?.dp ?: 0.dp, + bottom = property.padding?.bottom?.dp ?: 0.dp + ) + .customClickable( + { + uiTronViewModel.handleActions(updatedData?.onClick) + }, + actions = updatedData?.onClick?.actions, + property = property + ) + .customCombinedClick(property, uiTronData) { + uiTronViewModel.handleActions(it) + } + }, activeColor = property.activeColor?.hexToComposeColor ?: LocalContentColor.current.copy(alpha = LocalContentAlpha.current), inactiveColor = property.inactiveColor?.hexToComposeColor ?: (property.activeColor?.hexToComposeColor @@ -121,33 +135,45 @@ class PagerIndicatorRenderer : Renderer { } else { HorizontalPagerIndicator( pagerState = pagerState ?: rememberPagerState(), - modifier = (modifier ?: Modifier) - .layoutId(property.layoutId.orEmpty()) - .customOffset(property.offset) - .setHeight(property.height) - .setWidth(property.width) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .alpha(property.alpha ?: 1.0f) - .setPadding(property.margin) - .setBackground( - property.backgroundColor, - property.shape, - property.backGroundBrushData - ) - .clip(property.clipShape) - .setPadding(property.padding) - .customClickable( - { - uiTronViewModel.handleActions(updatedData?.onClick) - }, - actions = updatedData?.onClick?.actions, - property = property - ) - .customCombinedClick(property, uiTronData) { - uiTronViewModel.handleActions(it) - } - , + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .setIdModifiers() + .setSizeModifiers() + .setBackground() + .setClipShape() + .setPadding() + .setClickableModifiers() + .setEffectModifiers() + .build() + } else { + (modifier ?: Modifier) + .layoutId(property.layoutId.orEmpty()) + .customOffset(property.offset) + .setHeight(property.height) + .setWidth(property.width) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .alpha(property.alpha ?: 1.0f) + .setPadding(property.margin) + .setBackground( + property.backgroundColor, + property.shape, + property.backGroundBrushData + ) + .clip(property.clipShape) + .setPadding(property.padding) + .customClickable( + { + uiTronViewModel.handleActions(updatedData?.onClick) + }, + actions = updatedData?.onClick?.actions, + property = property + ) + .customCombinedClick(property, uiTronData) { + uiTronViewModel.handleActions(it) + } + }, activeColor = property.activeColor?.hexToComposeColor ?: LocalContentColor.current.copy(alpha = LocalContentAlpha.current), inactiveColor = property.inactiveColor?.hexToComposeColor ?: (property.activeColor?.hexToComposeColor diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/PagerRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/PagerRenderer.kt index 8adf6ee..23ef4c2 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/PagerRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/PagerRenderer.kt @@ -26,11 +26,13 @@ import com.google.accompanist.pager.PagerDefaults import com.google.accompanist.pager.PagerState import com.google.accompanist.pager.VerticalPager import com.google.accompanist.pager.rememberPagerState +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.data.PagerData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.ComposePadding import com.navi.uitron.model.ui.PagerProperty import com.navi.uitron.model.ui.UiTronView +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.utils.CLEAR_SCROLL_PAGER_STATE import com.navi.uitron.viewmodel.UiTronViewModel import customClickable @@ -94,32 +96,45 @@ class PagerRenderer( if (property.orientation == PagerProperty.ORIENTATION_VERTICAL) { VerticalPager( count = childrenComposeViews.size, - modifier = (modifier ?: Modifier) - .setTag(property) - .layoutId(property.layoutId.orEmpty()) - .customOffset(property.offset) - .setHeight(property.height) - .setWidth(property.width) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .setBackground( - property.backgroundColor, - property.shape, - property.backGroundBrushData - ) - .clip(property.clipShape) - .setPadding(property.padding) - .customClickable( - { - uiTronViewModel.handleActions(uiTronData?.onClick) - }, - actions = uiTronData?.onClick?.actions, - property = property - ) - .customCombinedClick(property, uiTronData) { - uiTronViewModel.handleActions(it) - } - .alpha(property.alpha ?: 1.0f), + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .setIdModifiers() + .setSizeModifiers() + .setBackground() + .setClipShape() + .setPadding() + .setClickableModifiers() + .setEffectModifiers() + .build() + } else { + (modifier ?: Modifier) + .setTag(property) + .layoutId(property.layoutId.orEmpty()) + .customOffset(property.offset) + .setHeight(property.height) + .setWidth(property.width) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .setBackground( + property.backgroundColor, + property.shape, + property.backGroundBrushData + ) + .clip(property.clipShape) + .setPadding(property.padding) + .customClickable( + { + uiTronViewModel.handleActions(uiTronData?.onClick) + }, + actions = uiTronData?.onClick?.actions, + property = property + ) + .customCombinedClick(property, uiTronData) { + uiTronViewModel.handleActions(it) + } + .alpha(property.alpha ?: 1.0f) + }, state = pagerState, reverseLayout = property.reverseLayout.orFalse(), itemSpacing = (property.itemSpacing ?: 0).dp, @@ -149,30 +164,43 @@ class PagerRenderer( } else { HorizontalPager( count = childrenComposeViews.size, - modifier = (modifier ?: Modifier) - .layoutId(property.layoutId.orEmpty()) - .customOffset(property.offset) - .setHeight(property.height) - .setWidth(property.width) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .setBackground( - property.backgroundColor, - property.shape, - property.backGroundBrushData - ) - .setPadding(property.padding) - .customClickable( - { - uiTronViewModel.handleActions(uiTronData?.onClick) - }, - actions = uiTronData?.onClick?.actions, - property = property - ) - .customCombinedClick(property, uiTronData) { - uiTronViewModel.handleActions(it) - } - .alpha(property.alpha ?: 1.0f), + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .setIdModifiers() + .setSizeModifiers() + .setBackground() + .setClipShape() + .setPadding() + .setClickableModifiers() + .setEffectModifiers() + .build() + } else { + (modifier ?: Modifier) + .layoutId(property.layoutId.orEmpty()) + .customOffset(property.offset) + .setHeight(property.height) + .setWidth(property.width) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .setBackground( + property.backgroundColor, + property.shape, + property.backGroundBrushData + ) + .setPadding(property.padding) + .customClickable( + { + uiTronViewModel.handleActions(uiTronData?.onClick) + }, + actions = uiTronData?.onClick?.actions, + property = property + ) + .customCombinedClick(property, uiTronData) { + uiTronViewModel.handleActions(it) + } + .alpha(property.alpha ?: 1.0f) + }, state = pagerState, reverseLayout = property.reverseLayout.orFalse(), itemSpacing = (property.itemSpacing ?: 0).dp, diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/RadioButtonRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/RadioButtonRenderer.kt index 6971944..877837b 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/RadioButtonRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/RadioButtonRenderer.kt @@ -16,9 +16,11 @@ import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.layoutId import clip +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.data.EmptyData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.RadioButtonProperty +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.viewmodel.UiTronViewModel import customClickable import customCombinedClick @@ -68,31 +70,38 @@ class RadioButtonRenderer : property.selectedColor?.hexToComposeColor ?: Color.Black, property.unselectedColor?.hexToComposeColor ?: Color.Black ), - modifier = (modifier ?: Modifier) - .customOffset(property.offset) - .setWidth(property.width) - .setHeight(property.height) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .setPadding(property.margin) - .setBackground( - property.backgroundColor, property.shape, property.backGroundBrushData - ) - .clip(property.clipShape) - .setPadding(property.padding) - .setTag(property) - .layoutId(property.layoutId.orEmpty()) - .customClickable( - { - uiTronViewModel.handleActions(updatedData?.onClick) - }, - actions = updatedData?.onClick?.actions, - property = property - ) - .customCombinedClick(property, uiTronData) { - uiTronViewModel.handleActions(it) - } - .alpha(property.alpha ?: 1.0f), + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .setDefaultModifiers() + .build() + } else { + (modifier ?: Modifier) + .customOffset(property.offset) + .setWidth(property.width) + .setHeight(property.height) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .setPadding(property.margin) + .setBackground( + property.backgroundColor, property.shape, property.backGroundBrushData + ) + .clip(property.clipShape) + .setPadding(property.padding) + .setTag(property) + .layoutId(property.layoutId.orEmpty()) + .customClickable( + { + uiTronViewModel.handleActions(updatedData?.onClick) + }, + actions = updatedData?.onClick?.actions, + property = property + ) + .customCombinedClick(property, uiTronData) { + uiTronViewModel.handleActions(it) + } + .alpha(property.alpha ?: 1.0f) + }, onClick = null ) } diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/RowRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/RowRenderer.kt index fe80167..9763653 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/RowRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/RowRenderer.kt @@ -17,11 +17,14 @@ import androidx.compose.ui.draw.alpha import androidx.compose.ui.layout.layoutId import androidx.compose.ui.unit.dp import clip +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.action.MvelAction import com.navi.uitron.model.data.RowData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.RowProperty import com.navi.uitron.model.ui.UiTronView +import com.navi.uitron.modifer.ModifierBuilder +import com.navi.uitron.modifer.RowModifierBuilder import com.navi.uitron.utils.KEY_MVEL_ACTION import com.navi.uitron.utils.KEY_PROPERTY import com.navi.uitron.utils.KEY_UI_TRON_DATA @@ -85,46 +88,51 @@ class RowRenderer( Row( horizontalArrangement = Arrangement.setHorizontalArrangement(arrangementData = property.arrangementData), verticalAlignment = getVerticalAlignment(verticalAlignment = property.verticalAlignment), - modifier = (modifier ?: Modifier) - .setTag(property) - .layoutId(property.layoutId.orEmpty()) - .customOffset(property.offset) - .setVerticalScroll(property.verticalScroll) - .setHorizontalScroll(property.horizontalScroll) - .setHeight(property.height) - .setWidth(property.width) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .padding( - start = property.margin?.start?.dp ?: 0.dp, - end = property.margin?.end?.dp ?: 0.dp, - top = property.margin?.top?.dp ?: 0.dp, - bottom = property.margin?.bottom?.dp ?: 0.dp - ) - .clip(property.clipShape) - .setBackground( - property.backgroundColor, - property.shape, - property.backGroundBrushData - ) - .padding( - start = property.padding?.start?.dp ?: 0.dp, - end = property.padding?.end?.dp ?: 0.dp, - top = property.padding?.top?.dp ?: 0.dp, - bottom = property.padding?.bottom?.dp ?: 0.dp - ) - .alpha(property.alpha ?: 1.0f) - .setBorderStroke(property.borderStrokeData) - .customClickable( - onClick = { - uiTronViewModel.handleActions(rowData?.onClick) - }, - actions = rowData?.onClick?.actions, - property = property - ) - .customCombinedClick(property, uiTronData) { - uiTronViewModel.handleActions(it) - } + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + RowModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .build() + } else { + (modifier ?: Modifier) + .setTag(property) + .layoutId(property.layoutId.orEmpty()) + .customOffset(property.offset) + .setVerticalScroll(property.verticalScroll) + .setHorizontalScroll(property.horizontalScroll) + .setHeight(property.height) + .setWidth(property.width) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .padding( + start = property.margin?.start?.dp ?: 0.dp, + end = property.margin?.end?.dp ?: 0.dp, + top = property.margin?.top?.dp ?: 0.dp, + bottom = property.margin?.bottom?.dp ?: 0.dp + ) + .clip(property.clipShape) + .setBackground( + property.backgroundColor, + property.shape, + property.backGroundBrushData + ) + .padding( + start = property.padding?.start?.dp ?: 0.dp, + end = property.padding?.end?.dp ?: 0.dp, + top = property.padding?.top?.dp ?: 0.dp, + bottom = property.padding?.bottom?.dp ?: 0.dp + ) + .alpha(property.alpha ?: 1.0f) + .setBorderStroke(property.borderStrokeData) + .customClickable( + onClick = { + uiTronViewModel.handleActions(rowData?.onClick) + }, + actions = rowData?.onClick?.actions, + property = property + ) + .customCombinedClick(property, uiTronData) { + uiTronViewModel.handleActions(it) + } } ) { if (property.repeat == null || (property.repeat ?: 0) <= 1) { childrenComposeViews.forEach { childrenView -> diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/SlideToActButtonRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/SlideToActButtonRenderer.kt index f0dd8ed..4847faf 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/SlideToActButtonRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/SlideToActButtonRenderer.kt @@ -51,7 +51,7 @@ import androidx.compose.ui.unit.IntSize import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.zIndex -import clipContent +import clip import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.action.MvelAction import com.navi.uitron.model.data.SlideToActButtonData @@ -141,7 +141,7 @@ class SlideToActButtonRenderer( .fillMaxWidth() .setHeight(property.height) .setPadding(property.margin) - .clipContent(property.clipData) + .clip(property.clipData) , onSwipe = { uiTronViewModel.handleActions(uiTronSlideToActButtonData?.onSlideComplete) diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/SliderRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/SliderRenderer.kt index 2abd173..c531b1c 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/SliderRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/SliderRenderer.kt @@ -17,12 +17,16 @@ import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.rotate import androidx.compose.ui.graphics.compositeOver import androidx.compose.ui.layout.layoutId +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.action.MvelAction import com.navi.uitron.model.data.SliderDependentValue import com.navi.uitron.model.data.StepValue import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.data.UiTronSliderData import com.navi.uitron.model.ui.SliderProperty +import com.navi.uitron.modifer.ModifierBuilder +import com.navi.uitron.modifer.RowModifierBuilder +import com.navi.uitron.modifer.SliderModifierBuilder import com.navi.uitron.utils.* import com.navi.uitron.viewmodel.UiTronViewModel import customOffset @@ -210,17 +214,22 @@ class SliderRenderer : ?: 1f), steps = if (property.steps?.dec().orZero() < 0) 0 else property.steps?.dec() .orZero(), - modifier = (modifier ?: Modifier) - .setTag(property) - .customOffset(property.offset) - .setWidth(property.width) - .setHeight(property.height) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .layoutId(property.layoutId.orEmpty()) - .setPadding(property.padding) - .rotate(property.rotation ?: 0f) - .alpha(property.alpha ?: 1.0f), + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + SliderModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .build() + } else { + (modifier ?: Modifier) + .setTag(property) + .customOffset(property.offset) + .setWidth(property.width) + .setHeight(property.height) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .layoutId(property.layoutId.orEmpty()) + .setPadding(property.padding) + .rotate(property.rotation ?: 0f) + .alpha(property.alpha ?: 1.0f) }, colors = SliderDefaults.colors( thumbColor = property.sliderColors.thumbColor?.hexToComposeColor ?: MaterialTheme.colors.primary, diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/SliderRendererV2.kt b/navi-uitron/src/main/java/com/navi/uitron/render/SliderRendererV2.kt index 57917ee..86d03ee 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/SliderRendererV2.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/SliderRendererV2.kt @@ -30,11 +30,13 @@ import androidx.compose.ui.layout.positionInParent import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp import androidx.compose.ui.zIndex +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.action.MvelAction import com.navi.uitron.model.data.SliderDataV2 import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.SliderProperty import com.navi.uitron.model.ui.UiTronView +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.utils.KEY_MVEL_ACTION import com.navi.uitron.utils.KEY_PROPERTY import com.navi.uitron.utils.KEY_UI_TRON_DATA @@ -163,15 +165,24 @@ class SliderRendererV2( if (property.visible.orTrue()) { Column( - modifier = (modifier ?: Modifier) - .customOffset(property.offset) - .setWidth(property.width) - .setHeight(property.height) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .setTag(property) - .layoutId(property.layoutId.orEmpty()) - .setPadding(property.padding) + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .setIdModifiers() + .setSizeModifiers() + .setPadding() + .build() + } else { + (modifier ?: Modifier) + .customOffset(property.offset) + .setWidth(property.width) + .setHeight(property.height) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .setTag(property) + .layoutId(property.layoutId.orEmpty()) + .setPadding(property.padding) + } ) { Tooltip( thumbX = thumbX, diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/SpacerRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/SpacerRenderer.kt index 60b446e..934180b 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/SpacerRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/SpacerRenderer.kt @@ -14,9 +14,11 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.layout.layoutId import clip +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.data.EmptyData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.SpacerProperty +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.viewmodel.UiTronViewModel import customClickable import customCombinedClick @@ -57,33 +59,40 @@ class SpacerRenderer : Renderer { } if (property.visible.orTrue()) { Spacer( - modifier = (modifier ?: Modifier) - .customOffset(property.offset) - .setHeight(property.height) - .setWidth(property.width) - .setHeightRange(property.heightRange) - .setWidthRange(property.widthRange) - .customClickable( - { - uiTronViewModel.handleActions(updatedData?.onClick) - }, - actions = updatedData?.onClick?.actions, - property = property - ) - .customCombinedClick(property, uiTronData) { - uiTronViewModel.handleActions(it) - } - .clip(property.clipShape) - .alpha(property.alpha ?: 1.0f) - .setPadding(property.margin) - .setBackground( - property.backgroundColor, - property.shape, - property.backGroundBrushData - ) - .setPadding(property.padding) - .setTag(property) - .layoutId(property.layoutId.orEmpty()) + modifier = if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .setDefaultModifiers() + .build() + } else { + (modifier ?: Modifier) + .customOffset(property.offset) + .setHeight(property.height) + .setWidth(property.width) + .setHeightRange(property.heightRange) + .setWidthRange(property.widthRange) + .customClickable( + { + uiTronViewModel.handleActions(updatedData?.onClick) + }, + actions = updatedData?.onClick?.actions, + property = property + ) + .customCombinedClick(property, uiTronData) { + uiTronViewModel.handleActions(it) + } + .clip(property.clipShape) + .alpha(property.alpha ?: 1.0f) + .setPadding(property.margin) + .setBackground( + property.backgroundColor, + property.shape, + property.backGroundBrushData + ) + .setPadding(property.padding) + .setTag(property) + .layoutId(property.layoutId.orEmpty()) + + } ) } } diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/SpannableTextRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/SpannableTextRenderer.kt index e65830c..5b3da0a 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/SpannableTextRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/SpannableTextRenderer.kt @@ -18,6 +18,7 @@ import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.data.SpannableTextData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.SpannableProperty +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.utils.EMPTY import com.navi.uitron.viewmodel.UiTronViewModel import getText @@ -143,31 +144,50 @@ class SpannableTextRenderer : Renderer { spannableData?.textMap?.let { BasicText( text = annotatedString, - modifier = (modifier ?: Modifier) - .setTag(property) - .layoutId(property.layoutId.orEmpty()) - .setPadding(property.margin) - .setBackground( - property.backgroundColor, property.shape, property.backGroundBrushData - ) - .clip(property.clipShape) - .setPadding(property.padding) - .alpha(property.alpha ?: 1.0f), + modifier = if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .setIdModifiers() + .setBorderModifiers() + .setEffectModifiers() + .build() + } else { + (modifier ?: Modifier) + .setTag(property) + .layoutId(property.layoutId.orEmpty()) + .setPadding(property.margin) + .setBackground( + property.backgroundColor, + property.shape, + property.backGroundBrushData + ) + .clip(property.clipShape) + .setPadding(property.padding) + .alpha(property.alpha ?: 1.0f) }, style = TextStyle( textAlign = getTextAlignment(property.textAlign) ) ) } ?: run { ClickableText(text = annotatedString, - modifier = (modifier ?: Modifier) - .layoutId(property.layoutId.orEmpty()) - .setPadding(property.margin) - .setBackground( - property.backgroundColor, property.shape, property.backGroundBrushData - ) - .clip(property.clipShape) - .setPadding(property.padding) - .alpha(property.alpha ?: 1.0f), + modifier = if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .setIdModifiers() + .setBorderModifiers() + .setEffectModifiers() + .build() + } else { + (modifier ?: Modifier) + .layoutId(property.layoutId.orEmpty()) + .setPadding(property.margin) + .setBackground( + property.backgroundColor, + property.shape, + property.backGroundBrushData + ) + .clip(property.clipShape) + .setPadding(property.padding) + .alpha(property.alpha ?: 1.0f) + }, style = TextStyle( textAlign = getTextAlignment(property.textAlign) ), diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/TextRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/TextRenderer.kt index 08a4f60..d13e442 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/TextRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/TextRenderer.kt @@ -27,6 +27,7 @@ import com.navi.uitron.model.action.MvelAction import com.navi.uitron.model.data.TextData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.TextProperty +import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.utils.KEY_MVEL_ACTION import com.navi.uitron.utils.KEY_PROPERTY import com.navi.uitron.utils.KEY_UI_TRON_DATA @@ -121,34 +122,41 @@ class TextRenderer : Renderer { blurRadius = dpToPx(property.textShadow?.blurRadius.orZero()) ) ), - modifier = (modifier ?: Modifier) - .customOffset(property.offset) - .setWidth(property.width) - .setHeight(property.height) - .setWidthRange(property.widthRange) - .setHeightRange(property.heightRange) - .setPadding(property.margin) - .setBackground( - property.backgroundColor, - property.shape, - property.backGroundBrushData - ) - .clip(property.clipShape) - .setPadding(property.padding) - .setTag(property) - .layoutId(property.layoutId.orEmpty()) - .customClickable( - { - uiTronViewModel.handleActions(uiTronData?.onClick) - }, - actions = uiTronData?.onClick?.actions, - property = property - ) - .customCombinedClick(property, uiTronData) { - uiTronViewModel.handleActions(it) - } - .alpha(property.alpha ?: 1.0f) - .setBlur(property.blurData) + modifier = + if (UiTronSdkManager.isModifierBuilderEnabled()) { + ModifierBuilder(modifier ?: Modifier, property, uiTronData, uiTronViewModel) + .setDefaultModifiers() + .build() + } else { + (modifier ?: Modifier) + .customOffset(property.offset) + .setWidth(property.width) + .setHeight(property.height) + .setWidthRange(property.widthRange) + .setHeightRange(property.heightRange) + .setPadding(property.margin) + .setBackground( + property.backgroundColor, + property.shape, + property.backGroundBrushData + ) + .clip(property.clipShape) + .setPadding(property.padding) + .setTag(property) + .layoutId(property.layoutId.orEmpty()) + .customClickable( + { + uiTronViewModel.handleActions(uiTronData?.onClick) + }, + actions = uiTronData?.onClick?.actions, + property = property + ) + .customCombinedClick(property, uiTronData) { + uiTronViewModel.handleActions(it) + } + .alpha(property.alpha ?: 1.0f) + .setBlur(property.blurData) + } ) } } 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 1d5bed2..e533042 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 @@ -106,15 +106,6 @@ fun Modifier.setWidth(width: String?): Modifier = this.then( } ) -fun Modifier.clipContent(contentClipData: UiTronShape?): Modifier = this.then( - when (contentClipData?.shapeType) { - ShapeType.RoundedCornerShape.name -> { - clip(RoundedCornerShape(contentClipData.size?.dp ?: 0.dp)) - } - else -> this - } -) - fun Modifier.setVerticalScroll(scrollData: ScrollData?): Modifier = composed { if (scrollData?.enabled == true) { this.then(