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:
committed by
GitHub Enterprise
parent
9d59052d00
commit
4e84db2b5f
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
@@ -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
|
||||
)
|
||||
@@ -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 {
|
||||
|
||||
@@ -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),
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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 }
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user