secant-android-wallet/ui-design-lib/src/main/java/co/electriccoin/zcash/ui/design/component/Checkbox.kt

78 lines
2.4 KiB
Kotlin

package co.electriccoin.zcash.ui.design.component
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.ClickableText
import androidx.compose.material3.Checkbox
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.tooling.preview.Preview
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
@Preview
@Composable
private fun ComposablePreview() {
val checkBoxState = remember { mutableStateOf(false) }
ZcashTheme(forceDarkMode = false) {
CheckBox(
onCheckedChange = { checkBoxState.value = it },
text = "test",
checked = checkBoxState.value,
checkBoxTestTag = null
)
}
}
@Composable
fun CheckBox(
onCheckedChange: (Boolean) -> Unit,
text: String,
modifier: Modifier = Modifier,
checked: Boolean = false,
checkBoxTestTag: String? = null
) {
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = modifier
) {
val checkBoxModifier =
Modifier
.padding(
top = ZcashTheme.dimens.spacingTiny,
bottom = ZcashTheme.dimens.spacingTiny,
end = ZcashTheme.dimens.spacingTiny
)
.then(
if (checkBoxTestTag != null) {
Modifier.testTag(checkBoxTestTag)
} else {
Modifier
}
)
val (checkedState, setCheckedState) = rememberSaveable { mutableStateOf(checked) }
Checkbox(
checked = checkedState,
onCheckedChange = {
setCheckedState(it)
onCheckedChange(it)
},
enabled = true,
modifier = checkBoxModifier
)
ClickableText(
onClick = {
setCheckedState(!checkedState)
onCheckedChange(!checkedState)
},
text = AnnotatedString(text),
style = ZcashTheme.extendedTypography.checkboxText
)
}
}