From 9bffb2f738bfcbdeec9b4e8e10ffc9957a8474a4 Mon Sep 17 00:00:00 2001 From: Sohan Reddy Atukula Date: Tue, 23 Apr 2024 15:29:42 +0530 Subject: [PATCH] TP-58679 | Sohan Reddy | Custom renderer Implementation (#410) Co-authored-by: Kishan Kumar --- .../uitron/demo/UiTronDependencyProvider.kt | 8 +++++++ .../navi/uitron/IUiTronDependencyProvider.kt | 6 ++++++ .../ComposePropertyDeserializer.kt | 2 +- .../model/ui/OutlinedTextFieldProperty.kt | 5 ++++- .../com/navi/uitron/model/ui/TextProperty.kt | 3 ++- .../render/AnimatedVisibilityRenderer.kt | 6 +++++- .../com/navi/uitron/render/BoxRenderer.kt | 6 +++++- .../com/navi/uitron/render/CardRenderer.kt | 8 ++++++- .../com/navi/uitron/render/ColumnRenderer.kt | 12 +++++++++-- .../uitron/render/CustomTextFieldRenderer.kt | 12 +++++++++-- .../com/navi/uitron/render/DialogRenderer.kt | 7 ++++++- .../navi/uitron/render/DropdownRenderer.kt | 6 +++++- .../com/navi/uitron/render/GridRenderer.kt | 6 +++++- .../navi/uitron/render/LazyColumnRenderer.kt | 6 +++++- .../navi/uitron/render/LazyGridRenderer.kt | 7 ++++++- .../com/navi/uitron/render/LazyRowRenderer.kt | 6 +++++- .../render/OutlinedTextFieldRenderer.kt | 12 +++++++++-- .../com/navi/uitron/render/PagerRenderer.kt | 12 +++++++++-- .../com/navi/uitron/render/RowRenderer.kt | 12 +++++++++-- .../navi/uitron/render/ScratchCardRenderer.kt | 6 +++++- .../com/navi/uitron/render/UiTronRenderer.kt | 21 ++++++++++++++++++- .../serializer/ComposePropertySerializer.kt | 2 +- .../main/java/com/navi/uitron/utils/Ext.kt | 5 ++++- 23 files changed, 150 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/com/uitron/demo/UiTronDependencyProvider.kt b/app/src/main/java/com/uitron/demo/UiTronDependencyProvider.kt index e9a2acc..6de5fee 100644 --- a/app/src/main/java/com/uitron/demo/UiTronDependencyProvider.kt +++ b/app/src/main/java/com/uitron/demo/UiTronDependencyProvider.kt @@ -15,6 +15,7 @@ import androidx.compose.ui.text.font.FontWeight import com.navi.alfred.AlfredManager import com.navi.uitron.IUiTronDependencyProvider import com.navi.uitron.model.UiTronConfig +import com.navi.uitron.model.ui.OutlinedTextFieldValueTransformation import com.navi.uitron.utils.EMPTY import com.navi.uitron.utils.SPACE @@ -64,6 +65,13 @@ class UiTronDependencyProvider : IUiTronDependencyProvider { } } + override fun getTransformedText( + value: String?, + data: OutlinedTextFieldValueTransformation? + ): String { + return value.orEmpty() + } + override fun numberToWords(amount: String): String { try { val number = amount.toDouble().toInt().toString() 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 8f0bdae..8bf9540 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/IUiTronDependencyProvider.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/IUiTronDependencyProvider.kt @@ -12,6 +12,7 @@ import android.view.View import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight import com.navi.uitron.model.UiTronConfig +import com.navi.uitron.model.ui.OutlinedTextFieldValueTransformation interface IUiTronDependencyProvider { @@ -19,6 +20,11 @@ interface IUiTronDependencyProvider { fun getFontWeight(fontWeight: String?): FontWeight + fun getTransformedText( + value: String? = null, + data: OutlinedTextFieldValueTransformation? = null, + ): String + enum class FontWeightEnum { TT_MEDIUM, TT_BOLD, diff --git a/navi-uitron/src/main/java/com/navi/uitron/deserializer/ComposePropertyDeserializer.kt b/navi-uitron/src/main/java/com/navi/uitron/deserializer/ComposePropertyDeserializer.kt index a408304..deb3095 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/deserializer/ComposePropertyDeserializer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/deserializer/ComposePropertyDeserializer.kt @@ -16,7 +16,7 @@ import java.lang.reflect.Type /** * Copyright © 2022 by Navi Technologies Private Limited All rights reserved. Strictly confidential */ -class ComposePropertyDeserializer : JsonDeserializer { +open class ComposePropertyDeserializer : JsonDeserializer { override fun deserialize( json: JsonElement?, typeOfT: Type?, diff --git a/navi-uitron/src/main/java/com/navi/uitron/model/ui/OutlinedTextFieldProperty.kt b/navi-uitron/src/main/java/com/navi/uitron/model/ui/OutlinedTextFieldProperty.kt index aba1bfc..a6ad361 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/model/ui/OutlinedTextFieldProperty.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/model/ui/OutlinedTextFieldProperty.kt @@ -81,7 +81,10 @@ data class OutlinedTextFieldValueTransformation( val currentDateFormat: String? = null, val targetDateFormat: String? = null, val prefixText: String? = null, - val suffixText: String? = null + val suffixText: String? = null, + val maxDisplayLength: Int? = null, + val decimalPlaces: Int? = null, + val useVerboseFormat: Boolean? = null ) data class TextFieldIconData(val leadingIcon: UiTronView, val trailingIcon: UiTronView) diff --git a/navi-uitron/src/main/java/com/navi/uitron/model/ui/TextProperty.kt b/navi-uitron/src/main/java/com/navi/uitron/model/ui/TextProperty.kt index a488732..76b87dd 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/model/ui/TextProperty.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/model/ui/TextProperty.kt @@ -12,7 +12,7 @@ package com.navi.uitron.model.ui * precision * @param letterSpacing in sp */ -data class TextProperty( +open class TextProperty( var fontFamily: String? = null, var fontWeight: String? = null, var fontSize: Int? = null, @@ -47,6 +47,7 @@ data class TextProperty( textProperty?.maxLines?.let { maxLines = it } textProperty?.textBrushData?.let { textBrushData = it } textProperty?.valueTransformation?.let { valueTransformation = it } + textProperty?.textShadow?.let { textShadow = it } textProperty?.includeFontPadding?.let { includeFontPadding = it } } diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/AnimatedVisibilityRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/AnimatedVisibilityRenderer.kt index 93edb56..a728c3f 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/AnimatedVisibilityRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/AnimatedVisibilityRenderer.kt @@ -131,7 +131,11 @@ class AnimatedVisibilityRenderer( if (childrenView.data.isNullOrEmpty()) { uiTronRenderer.Render(composeViews = listOf(childrenView)) } else { - UiTronRenderer(childrenView.data, uiTronViewModel) + UiTronRenderer( + childrenView.data, + uiTronViewModel, + uiTronRenderer.customUiTronRenderer + ) .Render(composeViews = listOf(childrenView)) } } 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 0fe43b8..edbf3eb 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 @@ -177,7 +177,11 @@ class BoxRenderer( ) ) } else { - UiTronRenderer(childrenView.data, uiTronViewModel) + UiTronRenderer( + childrenView.data, + uiTronViewModel, + uiTronRenderer.customUiTronRenderer + ) .Render( composeViews = listOf(childrenView), boxConstraintsToModifier( 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 346c0d8..2a32611 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 @@ -167,7 +167,13 @@ class CardRenderer( ) { childrenComposeViews.forEach { if (it.data.isNullOrEmpty()) uiTronRenderer.Render(composeViews = listOf(it)) - else UiTronRenderer(it.data, uiTronViewModel).Render(composeViews = listOf(it)) + else + UiTronRenderer( + it.data, + uiTronViewModel, + uiTronRenderer.customUiTronRenderer + ) + .Render(composeViews = listOf(it)) } } } 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 e84810a..c2701b9 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 @@ -178,7 +178,11 @@ class ColumnRenderer( ) ) } else { - UiTronRenderer(childrenView.data, uiTronViewModel) + UiTronRenderer( + childrenView.data, + uiTronViewModel, + uiTronRenderer.customUiTronRenderer + ) .Render( composeViews = listOf(childrenView), constraintsToModifier( @@ -206,7 +210,11 @@ class ColumnRenderer( ) ) } else { - UiTronRenderer(childComposeView.data, uiTronViewModel) + UiTronRenderer( + childComposeView.data, + uiTronViewModel, + uiTronRenderer.customUiTronRenderer + ) .Render( composeViews = listOf(childComposeView), constraintsToModifier( 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 c12c239..928916f 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 @@ -396,7 +396,11 @@ class CustomTextFieldRenderer(private val uiTronRenderer: UiTronRenderer) : ) { borderColor = property.colors?.errorBorderColor property.errorView?.let { - UiTronRenderer(it.data, uiTronViewModel) + UiTronRenderer( + it.data, + uiTronViewModel, + uiTronRenderer.customUiTronRenderer + ) .Render(composeViews = it.parentComposeView.orEmpty()) } uiTronViewModel.handle[property.errorMessageLayoutId.getDataId()] = @@ -411,7 +415,11 @@ class CustomTextFieldRenderer(private val uiTronRenderer: UiTronRenderer) : getTransformedText(property.successTextTransformation, inputValue) if (successText.isNotNullAndNotEmpty()) { property.successView?.let { - UiTronRenderer(it.data, uiTronViewModel) + UiTronRenderer( + it.data, + uiTronViewModel, + uiTronRenderer.customUiTronRenderer + ) .Render(composeViews = it.parentComposeView.orEmpty()) } uiTronViewModel.handle[property.successMessageLayoutId.getDataId()] = diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/DialogRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/DialogRenderer.kt index ec31967..0ba93af 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/DialogRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/DialogRenderer.kt @@ -66,7 +66,12 @@ class DialogRenderer( if (it.data.isNullOrEmpty()) { uiTronRenderer.Render(composeViews = listOf(it)) } else { - UiTronRenderer(it.data, uiTronViewModel).Render(composeViews = listOf(it)) + UiTronRenderer( + it.data, + uiTronViewModel, + uiTronRenderer.customUiTronRenderer + ) + .Render(composeViews = listOf(it)) } } } 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 a7a02f0..f74f41b 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 @@ -127,7 +127,11 @@ class DropdownRenderer( if (it.data.isNullOrEmpty()) { uiTronRenderer.Render(composeViews = listOf(it)) } else { - UiTronRenderer(it.data, uiTronViewModel) + UiTronRenderer( + it.data, + uiTronViewModel, + uiTronRenderer.customUiTronRenderer + ) .Render(composeViews = listOf(it)) } } 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 ca44784..748bc99 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 @@ -144,7 +144,11 @@ class GridRenderer( if (childrenView.data.isNullOrEmpty()) { uiTronRenderer.Render(listOf(childrenView)) } else { - UiTronRenderer(childrenView.data, uiTronViewModel) + UiTronRenderer( + childrenView.data, + uiTronViewModel, + uiTronRenderer.customUiTronRenderer + ) .Render(listOf(childrenView)) } } 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 c373cc5..e1ef93b 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 @@ -143,7 +143,11 @@ class LazyColumnRenderer( if (childrenView.data.isNullOrEmpty()) { uiTronRenderer.Render(listOf(childrenView)) } else { - UiTronRenderer(childrenView.data, uiTronViewModel) + UiTronRenderer( + childrenView.data, + uiTronViewModel, + uiTronRenderer.customUiTronRenderer + ) .Render(listOf(childrenView)) } } 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 a0829be..7721d86 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 @@ -199,7 +199,12 @@ class LazyGridRenderer( if (childrenView.data.isNullOrEmpty()) { uiTronRenderer.Render(listOf(childrenView)) } else { - UiTronRenderer(childrenView.data, uiTronViewModel).Render(listOf(childrenView)) + UiTronRenderer( + childrenView.data, + uiTronViewModel, + uiTronRenderer.customUiTronRenderer + ) + .Render(listOf(childrenView)) } } } 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 61ea8c3..7252c3b 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 @@ -147,7 +147,11 @@ class LazyRowRenderer( if (childrenView.data.isNullOrEmpty()) { uiTronRenderer.Render(listOf(childrenView)) } else { - UiTronRenderer(childrenView.data, uiTronViewModel) + UiTronRenderer( + childrenView.data, + uiTronViewModel, + uiTronRenderer.customUiTronRenderer + ) .Render(listOf(childrenView)) } } 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 38dc138..8f2084a 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 @@ -275,7 +275,11 @@ class OutlinedTextFieldRenderer( outlinedTextFieldData.errorMessage.isNullOrBlank().not() ) { property.errorView?.let { - UiTronRenderer(it.data, uiTronViewModel) + UiTronRenderer( + it.data, + uiTronViewModel, + uiTronRenderer.customUiTronRenderer + ) .Render(composeViews = it.parentComposeView.orEmpty()) } uiTronViewModel.handle[property.errorMessageLayoutId.getDataId()] = @@ -285,7 +289,11 @@ class OutlinedTextFieldRenderer( getTransformedText(property.successTextTransformation, inputValue) if (successText.isNotNullAndNotEmpty()) { property.successView?.let { - UiTronRenderer(it.data, uiTronViewModel) + UiTronRenderer( + it.data, + uiTronViewModel, + uiTronRenderer.customUiTronRenderer + ) .Render(composeViews = it.parentComposeView.orEmpty()) } uiTronViewModel.handle[property.successMessageLayoutId.getDataId()] = 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 d788c06..476d542 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 @@ -169,7 +169,11 @@ class PagerRenderer( if (childrenView.data.isNullOrEmpty()) { uiTronRenderer.Render(listOf(childrenView)) } else { - UiTronRenderer(childrenView.data, uiTronViewModel) + UiTronRenderer( + childrenView.data, + uiTronViewModel, + uiTronRenderer.customUiTronRenderer + ) .Render(listOf(childrenView)) } } @@ -242,7 +246,11 @@ class PagerRenderer( if (childrenView.data.isNullOrEmpty()) { uiTronRenderer.Render(listOf(childrenView)) } else { - UiTronRenderer(childrenView.data, uiTronViewModel) + UiTronRenderer( + childrenView.data, + uiTronViewModel, + uiTronRenderer.customUiTronRenderer + ) .Render(listOf(childrenView)) } } 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 64e24b4..bee4407 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 @@ -178,7 +178,11 @@ class RowRenderer( ) ) } else { - UiTronRenderer(childrenView.data, uiTronViewModel) + UiTronRenderer( + childrenView.data, + uiTronViewModel, + uiTronRenderer.customUiTronRenderer + ) .Render( listOf(childrenView), constraintsToModifier( @@ -205,7 +209,11 @@ class RowRenderer( ) ) } else { - UiTronRenderer(childrenView.data, uiTronViewModel) + UiTronRenderer( + childrenView.data, + uiTronViewModel, + uiTronRenderer.customUiTronRenderer + ) .Render( listOf(childrenView), constraintsToModifier( diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/ScratchCardRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/ScratchCardRenderer.kt index eaa4ea0..d1fefe8 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/ScratchCardRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/ScratchCardRenderer.kt @@ -177,7 +177,11 @@ class ScratchCardRenderer( if (it.data.isNullOrEmpty()) { uiTronRenderer.Render(composeViews = listOf(it)) } else { - UiTronRenderer(it.data, uiTronViewModel) + UiTronRenderer( + it.data, + uiTronViewModel, + uiTronRenderer.customUiTronRenderer + ) .Render(composeViews = listOf(it)) } } diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/UiTronRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/UiTronRenderer.kt index 5b07330..4da68e3 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/UiTronRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/UiTronRenderer.kt @@ -19,7 +19,8 @@ import com.navi.uitron.viewmodel.UiTronViewModel class UiTronRenderer( private val dataMap: MutableMap?, - private val uiTronViewModel: UiTronViewModel + private val uiTronViewModel: UiTronViewModel, + val customUiTronRenderer: CustomUiTronRenderer? = null ) { private val uiTronRenderingFactory by lazy { @@ -44,6 +45,24 @@ class UiTronRenderer( uiTronRenderer = this ) ) + ?: run { + customUiTronRenderer?.Render( + composeView = composeView, + modifier = modifier ?: Modifier, + dataMap = dataMap, + uiTronViewModel = uiTronViewModel + ) + } } } } + +interface CustomUiTronRenderer { + @Composable + fun Render( + composeView: UiTronView, + modifier: Modifier, + dataMap: Map?, + uiTronViewModel: UiTronViewModel + ) +} diff --git a/navi-uitron/src/main/java/com/navi/uitron/serializer/ComposePropertySerializer.kt b/navi-uitron/src/main/java/com/navi/uitron/serializer/ComposePropertySerializer.kt index 020c36f..1e6d23b 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/serializer/ComposePropertySerializer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/serializer/ComposePropertySerializer.kt @@ -13,7 +13,7 @@ import com.google.gson.JsonSerializer import com.navi.uitron.model.ui.* import java.lang.reflect.Type -class ComposePropertySerializer : JsonSerializer { +open class ComposePropertySerializer : JsonSerializer { override fun serialize( src: BaseProperty?, typeOfSrc: Type?, 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 e1e0d55..43cac85 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 @@ -419,7 +419,10 @@ fun getTransformedText( } .toString() } - else -> null + else -> { + UiTronSdkManager.getDependencyProvider() + .getTransformedText(value = inputText, data = valueTransformation) + } } } ?: return null }