From 4424fbd36e8e227474479c4db78acc38798517a4 Mon Sep 17 00:00:00 2001 From: "altynbek.nurtaza" <altynbek.nurtaza@nu.edu.kz> Date: Tue, 15 Mar 2022 21:35:23 +0600 Subject: [PATCH] Disable copying text from OutlinedPasswordTextField --- .../compose/material/OutlinedTextFieldExt.kt | 90 +++++++++++-------- 1 file changed, 51 insertions(+), 39 deletions(-) diff --git a/briar-desktop/src/main/kotlin/androidx/compose/material/OutlinedTextFieldExt.kt b/briar-desktop/src/main/kotlin/androidx/compose/material/OutlinedTextFieldExt.kt index bdcf409825..663c02737f 100644 --- a/briar-desktop/src/main/kotlin/androidx/compose/material/OutlinedTextFieldExt.kt +++ b/briar-desktop/src/main/kotlin/androidx/compose/material/OutlinedTextFieldExt.kt @@ -31,6 +31,7 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Visibility import androidx.compose.material.icons.filled.VisibilityOff import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -45,6 +46,9 @@ import androidx.compose.ui.input.key.KeyEventType import androidx.compose.ui.input.key.key import androidx.compose.ui.input.key.onPreviewKeyEvent import androidx.compose.ui.input.key.type +import androidx.compose.ui.platform.ClipboardManager +import androidx.compose.ui.platform.LocalClipboardManager +import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.text.input.VisualTransformation @@ -183,45 +187,53 @@ fun OutlinedPasswordTextField( ) { var isPasswordVisible by remember { mutableStateOf(false) } - OutlinedTextField( - value = value, - onValueChange = onValueChange, - modifier = modifier, - onEnter = onEnter, - enabled = enabled, - readOnly = readOnly, - textStyle = textStyle, - label = label, - placeholder = placeholder, - leadingIcon = leadingIcon, - trailingIcon = { - ShowHidePasswordIcon( - isVisible = isPasswordVisible, - toggleIsVisible = { - isPasswordVisible = !isPasswordVisible - }, - ) - }, - errorIcon = { - ShowHidePasswordIcon( - isVisible = isPasswordVisible, - toggleIsVisible = { - isPasswordVisible = !isPasswordVisible - }, - ) - }, - helperMessage = helperMessage, - errorMessage = errorMessage, - isError = isError, - showErrorWhen = showErrorWhen, - visualTransformation = if (!isPasswordVisible) visualTransformation else VisualTransformation.None, - keyboardOptions = keyboardOptions, - singleLine = singleLine, - maxLines = maxLines, - interactionSource = interactionSource, - shape = shape, - colors = colors, - ) + val clipboardManager: ClipboardManager = LocalClipboardManager.current + CompositionLocalProvider( + LocalClipboardManager provides object : ClipboardManager { + override fun getText() = clipboardManager.getText() // allow copying text from clipboard + override fun setText(annotatedString: AnnotatedString) = Unit // don't allow copying text into clipboard + } + ) { + OutlinedTextField( + value = value, + onValueChange = onValueChange, + modifier = modifier, + onEnter = onEnter, + enabled = enabled, + readOnly = readOnly, + textStyle = textStyle, + label = label, + placeholder = placeholder, + leadingIcon = leadingIcon, + trailingIcon = { + ShowHidePasswordIcon( + isVisible = isPasswordVisible, + toggleIsVisible = { + isPasswordVisible = !isPasswordVisible + }, + ) + }, + errorIcon = { + ShowHidePasswordIcon( + isVisible = isPasswordVisible, + toggleIsVisible = { + isPasswordVisible = !isPasswordVisible + }, + ) + }, + helperMessage = helperMessage, + errorMessage = errorMessage, + isError = isError, + showErrorWhen = showErrorWhen, + visualTransformation = if (!isPasswordVisible) visualTransformation else VisualTransformation.None, + keyboardOptions = keyboardOptions, + singleLine = singleLine, + maxLines = maxLines, + interactionSource = interactionSource, + shape = shape, + colors = colors, + ) + } } @Composable -- GitLab