design(text field) : allow setting validity (instead of just isError bool)

This commit is contained in:
ganfra 2025-02-20 21:49:50 +01:00
parent f1c5fa53e8
commit f6b4ee945b
6 changed files with 59 additions and 31 deletions

View file

@ -29,6 +29,7 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.components.Button
import io.element.android.libraries.designsystem.theme.components.ModalBottomSheet
import io.element.android.libraries.designsystem.theme.components.TextField
import io.element.android.libraries.designsystem.theme.components.TextFieldValidity
import io.element.android.libraries.ui.strings.CommonStrings
@OptIn(ExperimentalMaterial3Api::class)
@ -98,7 +99,11 @@ private fun RoomAddressField(
"e.g. #room-name:matrix.org"
}
},
isError = addressState is RoomAddressState.Invalid,
validity = when (addressState) {
RoomAddressState.Unknown -> null
RoomAddressState.Invalid -> TextFieldValidity.Invalid
is RoomAddressState.Valid -> if (addressState.matchingRoomFound) TextFieldValidity.Valid else null
},
onValueChange = onAddressChange,
singleLine = true,
)

View file

@ -45,6 +45,7 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.preview.debugPlaceholderBackground
import io.element.android.libraries.designsystem.theme.components.Button
import io.element.android.libraries.designsystem.theme.components.TextField
import io.element.android.libraries.designsystem.theme.components.TextFieldValidity
import io.element.android.libraries.ui.strings.CommonStrings
@Composable
@ -90,7 +91,7 @@ fun BugReportView(
keyboardController?.hide()
}),
minLines = 3,
isError = state.isDescriptionInError,
validity = if(state.isDescriptionInError) TextFieldValidity.Invalid else null,
)
}
Spacer(modifier = Modifier.height(16.dp))

View file

@ -33,6 +33,7 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.components.Button
import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.TextField
import io.element.android.libraries.designsystem.theme.components.TextFieldValidity
import io.element.android.libraries.ui.strings.CommonStrings
@Composable
@ -82,8 +83,8 @@ private fun Content(text: String, onTextChange: (String) -> Unit, hasError: Bool
var showPassword by remember { mutableStateOf(false) }
TextField(
modifier = Modifier
.fillMaxWidth()
.onTabOrEnterKeyFocusNext(LocalFocusManager.current),
.fillMaxWidth()
.onTabOrEnterKeyFocusNext(LocalFocusManager.current),
value = text,
onValueChange = onTextChange,
placeholder = stringResource(CommonStrings.common_password),
@ -99,7 +100,7 @@ private fun Content(text: String, onTextChange: (String) -> Unit, hasError: Bool
Icon(imageVector = image, description)
}
},
isError = hasError,
validity = if (hasError) TextFieldValidity.Invalid else null,
supportingText = if (hasError) {
stringResource(R.string.screen_reset_encryption_password_error)
} else {