diff --git a/app/src/main/res/raw/mock.json b/app/src/main/res/raw/mock.json index ea49632..877f79e 100644 --- a/app/src/main/res/raw/mock.json +++ b/app/src/main/res/raw/mock.json @@ -11230,7 +11230,45 @@ "inactiveTickColor": "#EBEBEB" }, "viewType": "SliderV2", - "layoutId": "loanAmountSlider" + "layoutId": "loanAmountSlider", + "thumbView": { + "property": { + "viewType": "Box", + "height": "WRAP_CONTENT", + "width": "WRAP_CONTENT", + "shape": { + "shapeType": "RoundedCornerShape", + "size": "12" + } + + }, + "childrenViews": [ + { + "property": { + "viewType" : "Card", + "height": "24", + "width": "24", + "backgroundColor" : "#FFFFFF", + "shape": { + "shapeType": "RoundedCornerShape", + "size": "12" + } + } + }, + { + "property": { + "viewType" : "Card", + "height": "20", + "width": "20", + "backgroundColor" : "#1F002A", + "shape": { + "shapeType": "RoundedCornerShape", + "size": "10" + } + } + } + ] + } } }, { diff --git a/navi-uitron/build.gradle b/navi-uitron/build.gradle index 2399ae9..96658b0 100644 --- a/navi-uitron/build.gradle +++ b/navi-uitron/build.gradle @@ -101,4 +101,5 @@ dependencies { api "io.coil-kt:coil-compose:2.4.0" testImplementation "junit:junit:4.13.2" androidTestImplementation "androidx.test.ext:junit:1.1.5" + implementation 'androidx.compose.material3:material3:1.1.2' } diff --git a/navi-uitron/src/main/java/com/navi/uitron/model/ui/BoxProperty.kt b/navi-uitron/src/main/java/com/navi/uitron/model/ui/BoxProperty.kt index 72bac2b..ae2398a 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/model/ui/BoxProperty.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/model/ui/BoxProperty.kt @@ -12,8 +12,9 @@ data class BoxProperty( var propagateMinConstraints: Boolean? = null, var verticalScroll: ScrollData? = null, var horizontalScroll: ScrollData? = null, - var isShimmerEnabled: Boolean? = null -) : BaseProperty() { + var isShimmerEnabled: Boolean? = null, + var elevation: String? = null, + ) : BaseProperty() { override fun copyNonNullFrom(property: BaseProperty?) { super.copyNonNullFrom(property) val boxProperty = property as? BoxProperty? @@ -22,5 +23,6 @@ data class BoxProperty( boxProperty?.verticalScroll?.let { verticalScroll = it } boxProperty?.horizontalScroll?.let { horizontalScroll = it } boxProperty?.isShimmerEnabled?.let { isShimmerEnabled = it } + boxProperty?.elevation?.let { elevation = it } } } diff --git a/navi-uitron/src/main/java/com/navi/uitron/model/ui/CardProperty.kt b/navi-uitron/src/main/java/com/navi/uitron/model/ui/CardProperty.kt index 332e586..e2d4e06 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/model/ui/CardProperty.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/model/ui/CardProperty.kt @@ -8,15 +8,11 @@ package com.navi.uitron.model.ui data class CardProperty( - var elevation: Int? = null, - var ambientColor: String? = null, - var spotColor: String? = null + var elevation: Int? = null ) : BaseProperty() { override fun copyNonNullFrom(property: BaseProperty?) { super.copyNonNullFrom(property) val cardProperty = property as? CardProperty? cardProperty?.elevation?.let { elevation = it } - cardProperty?.ambientColor?.let { ambientColor = it } - cardProperty?.spotColor?.let { spotColor = it } } } diff --git a/navi-uitron/src/main/java/com/navi/uitron/model/ui/SliderProperty.kt b/navi-uitron/src/main/java/com/navi/uitron/model/ui/SliderProperty.kt index b014353..c8fa910 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/model/ui/SliderProperty.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/model/ui/SliderProperty.kt @@ -25,7 +25,9 @@ data class SliderProperty( @SerializedName("steps") var steps: Int? = null, @SerializedName("tooltip") - var tooltip: UiTronView? = null + var tooltip: UiTronView? = null, + @SerializedName("thumbView") + var thumbView : UiTronView? = null ) : BaseProperty() { override fun copyNonNullFrom(property: BaseProperty?) { super.copyNonNullFrom(property) @@ -36,6 +38,8 @@ data class SliderProperty( sliderProperty?.uiTronIds?.let { uiTronIds = it } sliderProperty?.sliderValueRange?.let { sliderValueRange = it } sliderProperty?.steps?.let { steps = it } + sliderProperty?.tooltip?.let { tooltip = it } + sliderProperty?.thumbView?.let { thumbView = it } } } diff --git a/navi-uitron/src/main/java/com/navi/uitron/model/ui/UiTronView.kt b/navi-uitron/src/main/java/com/navi/uitron/model/ui/UiTronView.kt index 4a98645..4f4d0aa 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/model/ui/UiTronView.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/model/ui/UiTronView.kt @@ -45,7 +45,9 @@ open class BaseProperty( @SerializedName("borderStrokeData", alternate = ["borderStroke"]) var borderStrokeData: BorderStrokeData? = null, var debounceTime: Long? = -1, - var blurData: BlurData? = null + var blurData: BlurData? = null, + var spotColor: String? = null, + var ambientColor: String? = null ) : Parcelable { open fun copyNonNullFrom(property: BaseProperty?) { property?.width?.let { width = it } @@ -65,6 +67,8 @@ open class BaseProperty( property?.borderStrokeData?.let { borderStrokeData = it } property?.debounceTime?.let { debounceTime = it } property?.blurData?.let { blurData = it } + property?.ambientColor?.let { ambientColor = it } + property?.spotColor?.let { spotColor = it } } fun getPropertyId() = layoutId + PROPERTY_SUFFIX 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 6e836e9..8bc0fbf 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 @@ -12,7 +12,10 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha +import androidx.compose.ui.draw.shadow +import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.layoutId +import androidx.compose.ui.unit.dp import com.navi.uitron.model.action.MvelAction import com.navi.uitron.model.data.EmptyData import com.navi.uitron.model.data.UiTronData @@ -21,9 +24,11 @@ import com.navi.uitron.model.ui.UiTronView 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.utils.ShapeUtil import com.navi.uitron.viewmodel.UiTronViewModel import customClickable import getContentAlignment +import hexToComposeColor import orFalse import orTrue import setBackground @@ -101,6 +106,12 @@ class BoxRenderer( property = property ) .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/SliderRendererV2.kt b/navi-uitron/src/main/java/com/navi/uitron/render/SliderRendererV2.kt index 706ab9f..326a501 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 @@ -6,8 +6,9 @@ import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.material.ContentAlpha import androidx.compose.material.MaterialTheme -import androidx.compose.material.Slider -import androidx.compose.material.SliderDefaults +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Slider +import androidx.compose.material3.SliderDefaults import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState @@ -67,6 +68,7 @@ class SliderRendererV2( dpToPx(10) } + @OptIn(ExperimentalMaterial3Api::class) @Composable override fun Render( property: SliderProperty, @@ -213,26 +215,30 @@ class SliderRendererV2( ?: MaterialTheme.colors.primary, disabledActiveTickColor = property.sliderColors.disabledActiveTickColor?.hexToComposeColor ?: ((property.sliderColors.activeTrackColor?.hexToComposeColor - ?: MaterialTheme.colors.primary).copy(alpha = SliderDefaults.TickAlpha)), + ?: MaterialTheme.colors.primary).copy(alpha = 1f)), inactiveTrackColor = property.sliderColors.inactiveTrackColor?.hexToComposeColor ?: (property.sliderColors.activeTrackColor?.hexToComposeColor - ?: MaterialTheme.colors.primary).copy(alpha = SliderDefaults.InactiveTrackAlpha), + ?: MaterialTheme.colors.primary).copy(alpha = 1f), disabledActiveTrackColor = property.sliderColors.disabledActiveTrackColor?.hexToComposeColor - ?: MaterialTheme.colors.onSurface.copy(alpha = SliderDefaults.DisabledActiveTrackAlpha), + ?: MaterialTheme.colors.onSurface.copy(alpha = 1f), disabledInactiveTickColor = property.sliderColors.disabledInactiveTickColor?.hexToComposeColor ?: ((property.sliderColors.disabledActiveTrackColor?.hexToComposeColor - ?: MaterialTheme.colors.onSurface.copy(alpha = SliderDefaults.DisabledActiveTrackAlpha)).copy( - alpha = SliderDefaults.DisabledInactiveTrackAlpha - )).copy(alpha = SliderDefaults.DisabledTickAlpha), + ?: MaterialTheme.colors.onSurface.copy(alpha = 1f)).copy( + alpha = 1f + )).copy(alpha = 1f), disabledInactiveTrackColor = property.sliderColors.disabledInactiveTrackColor?.hexToComposeColor ?: (property.sliderColors.disabledActiveTrackColor?.hexToComposeColor - ?: MaterialTheme.colors.onSurface.copy(alpha = SliderDefaults.DisabledActiveTrackAlpha)).copy( - alpha = SliderDefaults.DisabledInactiveTrackAlpha + ?: MaterialTheme.colors.onSurface.copy(alpha = 1f)).copy( + alpha = 1f ), disabledThumbColor = property.sliderColors.disabledThumbColor?.hexToComposeColor ?: MaterialTheme.colors.onSurface.copy(alpha = ContentAlpha.disabled) .compositeOver(MaterialTheme.colors.surface) - ) + ), + thumb = { + property.thumbView?.let{ listOf(it) } + ?.let { it1 -> uiTronRenderer.Render(composeViews = it1) } + } ) } }