@@ -4,22 +4,24 @@ import androidx.compose.foundation.layout.*
44import androidx.compose.foundation.text.KeyboardActions
55import androidx.compose.foundation.text.KeyboardOptions
66import androidx.compose.material.*
7+ import androidx.compose.material.icons.Icons
8+ import androidx.compose.material.icons.filled.Warning
79import androidx.compose.runtime.*
810import androidx.compose.ui.Alignment
9- import androidx.compose.ui.ExperimentalComposeUiApi
1011import androidx.compose.ui.Modifier
1112import androidx.compose.ui.graphics.Color
1213import androidx.compose.ui.graphics.Shape
13- import androidx.compose.ui.platform.LocalSoftwareKeyboardController
14+ import androidx.compose.ui.platform.LocalTextInputService
1415import androidx.compose.ui.res.stringResource
16+ import androidx.compose.ui.text.font.FontWeight
1517import androidx.compose.ui.text.input.KeyboardType
1618import androidx.compose.ui.text.input.TextFieldValue
1719import androidx.compose.ui.unit.dp
20+ import com.togitech.ccp.R
1821import com.togitech.ccp.data.CountryData
1922import com.togitech.ccp.data.utils.getNumberHint
2023import com.togitech.ccp.transformation.PhoneNumberTransformation
2124
22- @OptIn(ExperimentalComposeUiApi ::class )
2325@Composable
2426fun TogiCountryCodePicker (
2527 text : String ,
@@ -38,65 +40,81 @@ fun TogiCountryCodePicker(
3840 cursorColorSearch : Color = MaterialTheme .colors.primary,
3941 dialogAppBarColor : Color = MaterialTheme .colors.primary,
4042 dialogAppBarTextColor : Color = Color .White ,
41-
42- rowPadding : Modifier = modifier.padding(start = 12.dp, end = 16.dp, top = 12.dp, bottom = 12 .dp)
43+ error : Boolean ,
44+ rowPadding : Modifier = modifier.padding(start = 12.dp, end = 16.dp, top = 12.dp,bottom = 16 .dp)
4345) {
4446 var textFieldValueState by remember { mutableStateOf(TextFieldValue (text = text)) }
4547 val textFieldValue = textFieldValueState.copy(text = text)
46- val keyboardController = LocalSoftwareKeyboardController .current
48+ val keyboardController = LocalTextInputService .current
4749 Surface (
4850 shape = shape,
4951 color = color
5052 ) {
51- Row (
52- rowPadding,
53- verticalAlignment = Alignment .CenterVertically ,
54- horizontalArrangement = Arrangement .Center
55- )
56- {
57- OutlinedTextField (
58- modifier = modifier
59- .fillMaxWidth(),
53+ Column (
54+ modifier = rowPadding
55+ ) {
56+ Row (
57+ verticalAlignment = Alignment .CenterVertically ,
58+ horizontalArrangement = Arrangement .Center
59+ )
60+ {
61+ OutlinedTextField (
62+ modifier = modifier
63+ .fillMaxWidth(),
6064
61- value = textFieldValue,
62- colors = TextFieldDefaults .outlinedTextFieldColors(
63- focusedBorderColor = focusedBorderColor,
64- unfocusedBorderColor = unfocusedBorderColor,
65- cursorColor = cursorColor
66- ),
67- onValueChange = {
68- textFieldValueState = it
69- if (text != it.text) {
70- onValueChange(it.text)
71- }
72- },
73- singleLine = true ,
74- visualTransformation = PhoneNumberTransformation (defaultCountry.countryCode.uppercase()),
75- placeholder = { Text (text = stringResource(id = getNumberHint(defaultCountry.countryCode))) },
76- keyboardOptions = KeyboardOptions .Default .copy(
77- keyboardType = KeyboardType .NumberPassword ,
78- autoCorrect = true ,
79- ),
80- keyboardActions = KeyboardActions (onDone = { keyboardController?.hide() }),
81- leadingIcon = {
82- Row {
83- Column {
84- val dialog = TogiCodePicker ()
85- dialog.TogiCodeDialog (
86- pickedCountry = pickedCountry,
87- defaultSelectedCountry = defaultCountry,
88- dialogAppBarColor = dialogAppBarColor,
89- showCountryCode = showCountryCode,
90- focusedBorderColorSearch = focusedBorderColorSearch,
91- unfocusedBorderColorSearch = unfocusedBorderColorSearch,
92- cursorColorSearch = cursorColorSearch,
93- dialogAppBarTextColor = dialogAppBarTextColor
94- )
65+ value = textFieldValue,
66+ colors = TextFieldDefaults .outlinedTextFieldColors(
67+ focusedBorderColor = if (! error) Color .Red else focusedBorderColor,
68+ unfocusedBorderColor = if (! error) Color .Red else unfocusedBorderColor,
69+ cursorColor = cursorColor
70+ ),
71+ onValueChange = {
72+ textFieldValueState = it
73+ if (text != it.text) {
74+ onValueChange(it.text)
9575 }
76+ },
77+ singleLine = true ,
78+ visualTransformation = PhoneNumberTransformation (defaultCountry.countryCode.uppercase()),
79+ placeholder = { Text (text = stringResource(id = getNumberHint(defaultCountry.countryCode))) },
80+ keyboardOptions = KeyboardOptions .Default .copy(
81+ keyboardType = KeyboardType .NumberPassword ,
82+ autoCorrect = true ,
83+ ),
84+ keyboardActions = KeyboardActions (onDone = { keyboardController?.hideSoftwareKeyboard() }),
85+ leadingIcon = {
86+ Row {
87+ Column {
88+ val dialog = TogiCodePicker ()
89+ dialog.TogiCodeDialog (
90+ pickedCountry = pickedCountry,
91+ defaultSelectedCountry = defaultCountry,
92+ dialogAppBarColor = dialogAppBarColor,
93+ showCountryCode = showCountryCode,
94+ focusedBorderColorSearch = focusedBorderColorSearch,
95+ unfocusedBorderColorSearch = unfocusedBorderColorSearch,
96+ cursorColorSearch = cursorColorSearch,
97+ dialogAppBarTextColor = dialogAppBarTextColor
98+ )
99+ }
96100
101+ }
102+ },
103+ trailingIcon = {
104+ if (! error)
105+ Icon (
106+ imageVector = Icons .Filled .Warning , contentDescription = " Error" ,
107+ tint = MaterialTheme .colors.error
108+ )
97109 }
98- }
99- )
110+ )
111+ }
112+ if (! error)
113+ Text (text = stringResource(id = R .string.invalid_number),
114+ color = MaterialTheme .colors.error,
115+ style = MaterialTheme .typography.caption,
116+ fontWeight = FontWeight .Bold ,
117+ modifier = Modifier .padding(top = 0.8 .dp))
100118 }
101119
102120 }
0 commit comments