TP-43672 | Added support for request focus on render in place of show… (#200)
This commit is contained in:
committed by
GitHub
parent
f8a5665ffa
commit
5cf3bcbfff
@@ -24,9 +24,10 @@ data class CustomTextFieldProperty(
|
||||
var colors: OutlinedTextFieldColors? = null,
|
||||
var arrangementData: ArrangementData? = null,
|
||||
var invalidCharRegex: String? = null,
|
||||
var showKeyboardOnRender : Boolean? = null,
|
||||
var requestFocusOnRender : Boolean? = null,
|
||||
var cursorHandleColor: String? = null,
|
||||
var cursorBackgroundColor: String? = null
|
||||
var cursorBackgroundColor: String? = null,
|
||||
var textToolBarStatus: String? = null
|
||||
) : BaseProperty() {
|
||||
|
||||
override fun copyNonNullFrom(property: BaseProperty?) {
|
||||
@@ -51,9 +52,10 @@ data class CustomTextFieldProperty(
|
||||
customTextFieldProperty?.colors?.let { colors = it }
|
||||
customTextFieldProperty?.arrangementData?.let { arrangementData = it }
|
||||
customTextFieldProperty?.invalidCharRegex?.let { invalidCharRegex = it }
|
||||
customTextFieldProperty?.showKeyboardOnRender?.let { showKeyboardOnRender = it }
|
||||
customTextFieldProperty?.requestFocusOnRender?.let { requestFocusOnRender = it }
|
||||
customTextFieldProperty?.cursorHandleColor?.let { cursorHandleColor = it }
|
||||
customTextFieldProperty?.cursorBackgroundColor?.let { cursorBackgroundColor = it }
|
||||
customTextFieldProperty?.textToolBarStatus?.let { textToolBarStatus = it }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,10 @@ import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.ExperimentalComposeUiApi
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.alpha
|
||||
import androidx.compose.ui.focus.FocusRequester
|
||||
import androidx.compose.ui.focus.focusRequester
|
||||
import androidx.compose.ui.focus.onFocusChanged
|
||||
import androidx.compose.ui.geometry.Rect
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.layout.layoutId
|
||||
@@ -21,6 +24,9 @@ import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalFocusManager
|
||||
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
|
||||
import androidx.compose.ui.platform.LocalView
|
||||
import androidx.compose.ui.platform.LocalTextToolbar
|
||||
import androidx.compose.ui.platform.TextToolbar
|
||||
import androidx.compose.ui.platform.TextToolbarStatus
|
||||
import androidx.compose.ui.text.*
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -32,7 +38,8 @@ import com.navi.uitron.model.data.UiTronData
|
||||
import com.navi.uitron.model.ui.*
|
||||
import com.navi.uitron.utils.CUSTOM_TEXT_FIELD_DATA
|
||||
import com.navi.uitron.utils.CUSTOM_TEXT_FIELD_PROPERTY
|
||||
import com.navi.uitron.utils.EMPTY
|
||||
import com.navi.uitron.utils.HIDE
|
||||
import com.navi.uitron.utils.REMOVE_FOCUS
|
||||
import com.navi.uitron.utils.ShapeUtil
|
||||
import com.navi.uitron.utils.UI_TRON_VM
|
||||
import com.navi.uitron.viewmodel.UiTronViewModel
|
||||
@@ -113,13 +120,21 @@ class CustomTextFieldRenderer(
|
||||
mutableStateOf(property.colors?.unfocusedBorderColor)
|
||||
}
|
||||
val keyboardController = LocalSoftwareKeyboardController.current
|
||||
val focusRequester = remember {
|
||||
FocusRequester()
|
||||
}
|
||||
|
||||
val customTextSelectionColors by remember(property?.cursorBackgroundColor,property?.cursorHandleColor) {
|
||||
val customTextSelectionColors by remember(
|
||||
property.cursorBackgroundColor,
|
||||
property.cursorHandleColor
|
||||
) {
|
||||
mutableStateOf(
|
||||
getCustomTextSelectionColor(property)
|
||||
)
|
||||
}
|
||||
|
||||
val localTextToolBar = LocalTextToolbar.current
|
||||
|
||||
if (property.visible.orTrue()) {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
@@ -180,7 +195,11 @@ class CustomTextFieldRenderer(
|
||||
.layoutId(property.layoutId.orEmpty())
|
||||
) {
|
||||
CompositionLocalProvider(
|
||||
LocalTextSelectionColors provides customTextSelectionColors
|
||||
LocalTextSelectionColors provides customTextSelectionColors,
|
||||
LocalTextToolbar provides getTextToolbar(
|
||||
property.textToolBarStatus,
|
||||
localTextToolBar
|
||||
)
|
||||
) {
|
||||
BasicTextField(
|
||||
modifier = Modifier
|
||||
@@ -206,7 +225,8 @@ class CustomTextFieldRenderer(
|
||||
?: ContentAlignmentType.CenterStart.name
|
||||
)
|
||||
)
|
||||
.fillMaxWidth(),
|
||||
.fillMaxWidth()
|
||||
.focusRequester(focusRequester = focusRequester),
|
||||
textStyle = TextStyle(
|
||||
fontSize = property.inputTextProperty?.textStyle?.fontSize?.sp
|
||||
?: 14.sp,
|
||||
@@ -302,9 +322,11 @@ class CustomTextFieldRenderer(
|
||||
}
|
||||
}
|
||||
}
|
||||
LaunchedEffect(key1 = Unit) {
|
||||
if (property.showKeyboardOnRender.orFalse()) {
|
||||
keyboardController?.show()
|
||||
LaunchedEffect(property.requestFocusOnRender) {
|
||||
if (property.requestFocusOnRender.orFalse()) {
|
||||
focusRequester.requestFocus()
|
||||
property.requestFocusOnRender = false
|
||||
uiTronViewModel.handle[property.getPropertyId()] = REMOVE_FOCUS
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -387,14 +409,35 @@ class CustomTextFieldRenderer(
|
||||
property.cursorHandleColor?.hexToComposeColor ?: colorPurple.hexToComposeColor
|
||||
|
||||
val cursorBackgroundColor = property.cursorBackgroundColor?.hexToComposeColor
|
||||
?: (
|
||||
property.cursorHandleColor?.hexToComposeColor?.copy(alpha = alpha)
|
||||
?: colorPurple.hexToComposeColor.copy(alpha = alpha)
|
||||
)
|
||||
?: (property.cursorHandleColor?.hexToComposeColor?.copy(alpha = alpha)
|
||||
?: colorPurple.hexToComposeColor.copy(alpha = alpha))
|
||||
|
||||
return TextSelectionColors(
|
||||
handleColor = cursorHandleColor,
|
||||
backgroundColor = cursorBackgroundColor
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getTextToolbar(
|
||||
textToolbarStatus: String?,
|
||||
localTextToolbar: TextToolbar
|
||||
): TextToolbar {
|
||||
if (textToolbarStatus.orEmpty() == HIDE) {
|
||||
return EmptyTextToolbar
|
||||
}
|
||||
return localTextToolbar
|
||||
}
|
||||
}
|
||||
|
||||
object EmptyTextToolbar : TextToolbar {
|
||||
override val status: TextToolbarStatus = TextToolbarStatus.Hidden
|
||||
override fun hide() {}
|
||||
override fun showMenu(
|
||||
rect: Rect,
|
||||
onCopyRequested: (() -> Unit)?,
|
||||
onPasteRequested: (() -> Unit)?,
|
||||
onCutRequested: (() -> Unit)?,
|
||||
onSelectAllRequested: (() -> Unit)?,
|
||||
) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ const val DEFAULT_FORMAT_PATTERN = "ddMMyyyy"
|
||||
const val PACKAGE_COLON = "package:"
|
||||
const val STOP = "stop"
|
||||
const val DISABLE_RESTART_TIMER = "disableRestartTimer"
|
||||
const val REMOVE_FOCUS = "removeFocus"
|
||||
|
||||
const val KEY_MVEL_ACTION = "mvelAction"
|
||||
const val KEY_UI_TRON_DATA = "uiTronData"
|
||||
@@ -21,4 +22,5 @@ const val UUID_CONSTANT = "UUID"
|
||||
const val RESULT = "result"
|
||||
const val CUSTOM_TEXT_FIELD_DATA ="customTextFieldData"
|
||||
const val CUSTOM_TEXT_FIELD_PROPERTY ="customTextFieldProperty"
|
||||
const val UI_TRON_VM ="uiTronVM"
|
||||
const val UI_TRON_VM ="uiTronVM"
|
||||
const val HIDE = "HIDE"
|
||||
Reference in New Issue
Block a user