TP-19544 add switch renderer in uitron library (#5492)

* TP-19544 add switch renderer in uitron library

* TP-19544 update default values of switch colors
This commit is contained in:
Hitesh Kumar
2023-02-28 19:13:42 +05:30
committed by GitHub Enterprise
parent 9d59052d00
commit 4e84db2b5f
7 changed files with 154 additions and 1 deletions

View File

@@ -73,6 +73,9 @@ class ComposePropertyDeserializer : JsonDeserializer<ComposeViewProperty> {
ComposeViewType.RadioButton.name -> {
context?.deserialize(jsonObject, RadioButtonProperty::class.java)
}
ComposeViewType.Switch.name -> {
context?.deserialize(jsonObject, SwitchProperty::class.java)
}
else -> null
}
}

View File

@@ -94,6 +94,9 @@ class UiTronDataDeserializer : JsonDeserializer<UiTronData> {
ComposeViewType.RadioButton.name -> {
context?.deserialize(jsonObject, RadioButtonData::class.java)
}
ComposeViewType.Switch.name -> {
context?.deserialize(jsonObject, SwitchData::class.java)
}
else -> null
}
}

View File

@@ -0,0 +1,13 @@
/*
*
* * Copyright © 2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.uitron.model.data
data class SwitchData(
val checkedStateClickData: UiTronClickData? = null,
val unCheckedStateClickData: UiTronClickData? = null
) : UiTronData()

View File

@@ -0,0 +1,27 @@
/*
*
* * Copyright © 2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.uitron.model.ui
data class SwitchProperty(
val isChecked: Boolean? = null,
val enabled: Boolean? = null,
val switchColors: SwitchColors,
) : ComposeViewProperty()
data class SwitchColors(
val checkedThumbColor: String? = null,
val checkedTrackColor: String? = null,
val checkedTrackAlpha: Float? = null,
val uncheckedThumbColor: String? = null,
val uncheckedTrackColor: String? = null,
val uncheckedTrackAlpha: Float? = null,
val disabledCheckedThumbColor: String? = null,
val disabledCheckedTrackColor: String? = null,
val disabledUncheckedThumbColor: String? = null,
val disabledUncheckedTrackColor: String? = null
)

View File

@@ -29,6 +29,7 @@ open class ComposeViewProperty(
val isStateFul: Boolean? = false,
val interaction: UiTronInteraction? = null,
var backGroundBrushData: BrushData? = null,
var scaleData: ScaleData? = null,
var backgroundColor: String? = null,
var shape: UiTronShape? = null,
var statesMap: Map<String, ComposeViewProperty>? = null,
@@ -41,6 +42,7 @@ open class ComposeViewProperty(
if (property?.constraintLinks != null) constraintLinks = property.constraintLinks
if (property?.clipData != null) clipData = property.clipData
if (property?.backGroundBrushData != null) backGroundBrushData = property.backGroundBrushData
if (property?.scaleData != null) scaleData = property.scaleData
if (property?.backgroundColor != null) backgroundColor = property.backgroundColor
if (property?.shape != null) shape = property.shape
if (property?.statesMap != null) statesMap = property.statesMap
@@ -85,6 +87,12 @@ data class OffSetData(
val y: Float? = null,
) : Parcelable
@Parcelize
data class ScaleData(
val x: Float? = null,
val y: Float? = null,
) : Parcelable
enum class ComposeSize {
WRAP_CONTENT,
MATCH_PARENT,
@@ -108,7 +116,8 @@ enum class ComposeViewType {
Lottie,
Slider,
Checkbox,
RadioButton
RadioButton,
Switch
}
enum class HorizontalArrangementType {

View File

@@ -0,0 +1,89 @@
/*
*
* * Copyright © 2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.uitron.render
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.padding
import androidx.compose.material.ContentAlpha
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Switch
import androidx.compose.material.SwitchDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.scale
import androidx.compose.ui.graphics.compositeOver
import androidx.compose.ui.layout.layoutId
import androidx.compose.ui.unit.dp
import com.navi.base.utils.orTrue
import com.navi.uitron.model.data.SwitchData
import com.navi.uitron.model.data.UiTronData
import com.navi.uitron.model.ui.SwitchProperty
import com.navi.uitron.viewmodel.UiTronViewModel
import hexToComposeColor
class SwitchRenderer(private val uiTronViewModel: UiTronViewModel? = null) :
Renderer<SwitchProperty> {
@Composable
override fun Render(property: SwitchProperty, uiTronData: UiTronData?) {
val switchData = uiTronData as? SwitchData
val isChecked = remember {
mutableStateOf(property.isChecked ?: false)
}
if (property.visible.orTrue()) {
Switch(
checked = isChecked.value,
onCheckedChange = {
isChecked.value = isChecked.value.not()
if (isChecked.value) {
uiTronViewModel?.handleActions(switchData?.checkedStateClickData)
} else {
uiTronViewModel?.handleActions(switchData?.unCheckedStateClickData)
}
},
modifier = Modifier
.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
)
.scale(property.scaleData?.x ?: 1.0f, property.scaleData?.y ?: 1.0f)
.layoutId(property.layoutId.orEmpty()),
enabled = property.enabled ?: true,
interactionSource = remember { MutableInteractionSource() },
colors = SwitchDefaults.colors(
checkedThumbColor = property.switchColors.checkedThumbColor?.hexToComposeColor
?: MaterialTheme.colors.secondaryVariant,
checkedTrackColor = property.switchColors.checkedTrackColor?.hexToComposeColor
?: MaterialTheme.colors.secondaryVariant,
checkedTrackAlpha = property.switchColors.checkedTrackAlpha ?: 0.54f,
uncheckedThumbColor = property.switchColors.uncheckedThumbColor?.hexToComposeColor
?: MaterialTheme.colors.surface,
uncheckedTrackColor = property.switchColors.uncheckedTrackColor?.hexToComposeColor
?: MaterialTheme.colors.onSurface,
uncheckedTrackAlpha = property.switchColors.uncheckedTrackAlpha ?: 0.38f,
disabledCheckedThumbColor = property.switchColors.disabledCheckedThumbColor?.hexToComposeColor
?: MaterialTheme.colors.secondaryVariant.copy(alpha = ContentAlpha.disabled)
.compositeOver(MaterialTheme.colors.surface),
disabledCheckedTrackColor = property.switchColors.disabledCheckedTrackColor?.hexToComposeColor
?: MaterialTheme.colors.secondaryVariant.copy(alpha = ContentAlpha.disabled)
.compositeOver(MaterialTheme.colors.surface),
disabledUncheckedThumbColor = property.switchColors.disabledUncheckedThumbColor?.hexToComposeColor
?: MaterialTheme.colors.surface.copy(alpha = ContentAlpha.disabled)
.compositeOver(MaterialTheme.colors.surface),
disabledUncheckedTrackColor = property.switchColors.disabledUncheckedTrackColor?.hexToComposeColor
?: MaterialTheme.colors.onSurface.copy(alpha = ContentAlpha.disabled)
.compositeOver(MaterialTheme.colors.surface),
)
)
}
}
}

View File

@@ -192,6 +192,15 @@ class UiTronRenderer(
)
}
}
ComposeViewType.Switch.name -> {
(composeView.property as? SwitchProperty)?.let {
SwitchRenderer(uiTronViewModel = uiTronViewModel).Render(
property = it, uiTronData = dataMap?.getOrElse(
it.layoutId.orEmpty()
) { null }
)
}
}
}
}
}