From d7a4d8a62cc8d8f899c0f98a72430c4daa452e47 Mon Sep 17 00:00:00 2001 From: Maila Rajanikanth Date: Mon, 3 Jul 2023 16:10:22 +0530 Subject: [PATCH] TP-32198 | column scope properties support (#103) --- app/src/main/res/raw/mock.json | 61 +++++++++++++++++++ .../navi/uitron/model/ui/ColumnProperty.kt | 15 +++++ .../com/navi/uitron/model/ui/RowProperty.kt | 3 +- .../com/navi/uitron/render/ColumnRenderer.kt | 25 +++++--- .../main/java/com/navi/uitron/utils/Ext.kt | 10 +++ 5 files changed, 105 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/raw/mock.json b/app/src/main/res/raw/mock.json index 24591cd..f267b28 100644 --- a/app/src/main/res/raw/mock.json +++ b/app/src/main/res/raw/mock.json @@ -8642,5 +8642,66 @@ ] } ] + }, + "columnConstraintsMock": { + "parentComposeView": [ + { + "property": { + "viewType": "Column", + "layoutId": "column", + "width": "200", + "height": "MATCH_PARENT", + "backgroundColor": "#639227", + "arrangementData": { + "arrangementType": "Top" + } + }, + "childrenViews": [ + { + "property": { + "viewType": "Text", + "layoutId": "text_1", + "width": "WRAP_CONTENT", + "height": "MATCH_PARENT", + "parentConstraints": { + "columnConstraints": { + "columnWeight": { + "weight": 4 + }, + "horizontalAlignment": "End" + } + }, + "backgroundColor": "#983643" + } + }, + { + "property": { + "viewType": "Text", + "layoutId": "text_2", + "width": "WRAP_CONTENT", + "height": "MATCH_PARENT", + "parentConstraints": { + "columnConstraints": { + "columnWeight": { + "weight": 2 + } + } + }, + "backgroundColor": "#123874" + } + } + ] + } + ], + "data": { + "text_1": { + "viewType": "Text", + "text": "Text 1" + }, + "text_2": { + "viewType": "Text", + "text": "Text 2" + } + } } } \ No newline at end of file diff --git a/navi-uitron/src/main/java/com/navi/uitron/model/ui/ColumnProperty.kt b/navi-uitron/src/main/java/com/navi/uitron/model/ui/ColumnProperty.kt index 6941164..39fc5b5 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/model/ui/ColumnProperty.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/model/ui/ColumnProperty.kt @@ -7,6 +7,9 @@ package com.navi.uitron.model.ui +import android.os.Parcelable +import kotlinx.parcelize.Parcelize + /** * Copyright © 2021 by Navi Technologies Private Limited * All rights reserved. Strictly confidential @@ -32,3 +35,15 @@ data class ColumnProperty( data class ScrollData( val enabled: Boolean? = null ) + +@Parcelize +data class ColumnConstraints( + val columnWeight: ColumnWeight? = null, + val horizontalAlignment: String? = null +): Parcelable + +@Parcelize +data class ColumnWeight( + var weight: Float? = null, + var fill: Boolean? = null +): Parcelable \ No newline at end of file diff --git a/navi-uitron/src/main/java/com/navi/uitron/model/ui/RowProperty.kt b/navi-uitron/src/main/java/com/navi/uitron/model/ui/RowProperty.kt index d1d5ee4..35d2abd 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/model/ui/RowProperty.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/model/ui/RowProperty.kt @@ -36,7 +36,8 @@ data class ArrangementData( @Parcelize data class ParentConstraints( - var rowConstraints: RowConstraints? = null + var rowConstraints: RowConstraints? = null, + var columnConstraints: ColumnConstraints? = null ): Parcelable @Parcelize 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 ba35f29..f358a0b 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 @@ -23,6 +23,7 @@ import com.navi.uitron.model.ui.ColumnProperty import com.navi.uitron.model.ui.UiTronView import com.navi.uitron.utils.ShapeUtil import com.navi.uitron.viewmodel.UiTronViewModel +import constraintsToModifier import customClickable import getBorderStrokeBrushData import getHorizontalAlignment @@ -102,14 +103,18 @@ class ColumnRenderer( .alpha(property.alpha ?: 1.0f) ) { if (property.repeat == null || (property.repeat ?: 0) <= 1) { - childrenComposeViews.forEach { - if (it.data.isNullOrEmpty()) { - uiTronRenderer.Render(composeViews = listOf(it)) + childrenComposeViews.forEach {childrenView -> + if (childrenView.data.isNullOrEmpty()) { + uiTronRenderer.Render( + composeViews = listOf(childrenView), + constraintsToModifier(childrenView.property?.parentConstraints?.columnConstraints) + ) } else { - UiTronRenderer(it.data, uiTronViewModel).Render( + UiTronRenderer(childrenView.data, uiTronViewModel).Render( composeViews = listOf( - it - ) + childrenView + ), + constraintsToModifier(childrenView.property?.parentConstraints?.columnConstraints) ) } } @@ -127,10 +132,14 @@ class ColumnRenderer( childrenComposeViews.getOrNull(0)?.childrenViews ) if (childComposeView.data.isNullOrEmpty()) { - uiTronRenderer.Render(listOf(childComposeView)) + uiTronRenderer.Render( + listOf(childComposeView), + constraintsToModifier(childComposeView.property?.parentConstraints?.columnConstraints) + ) } else { UiTronRenderer(childComposeView.data, uiTronViewModel).Render( - composeViews = listOf(childComposeView) + composeViews = listOf(childComposeView), + constraintsToModifier(childComposeView.property?.parentConstraints?.columnConstraints) ) } 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 54355e0..00799e3 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 @@ -598,6 +598,16 @@ fun RowScope.constraintsToModifier(rowConstraints: RowConstraints?): Modifier { } } +fun ColumnScope.constraintsToModifier(columnConstraints: ColumnConstraints?): Modifier { + return Modifier + .conditional(columnConstraints?.columnWeight != null) { + weight(columnConstraints?.columnWeight?.weight ?: 0f, columnConstraints?.columnWeight?.fill ?: true) + } + .conditional(columnConstraints?.horizontalAlignment != null) { + align(getHorizontalAlignment(columnConstraints?.horizontalAlignment)) + } +} + fun getBorderStrokeBrushData(borderStrokeData: BorderStrokeData?): Brush { return when { borderStrokeData?.color != null -> SolidColor(borderStrokeData.color.hexToComposeColor)