TP-00000 | Fixed Input Keyboard Flickering Issue (#201)
This commit is contained in:
@@ -22,7 +22,9 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.ExperimentalComposeUiApi
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
|
||||
import androidx.compose.ui.platform.LocalView
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
@@ -44,7 +46,9 @@ import com.uitron.demo.theme.fontFamily
|
||||
fun Toolbar(viewModel: DazzleViewModel) {
|
||||
|
||||
val keyboardController = LocalSoftwareKeyboardController.current
|
||||
|
||||
val context = LocalContext.current
|
||||
val view = LocalView.current
|
||||
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = Modifier
|
||||
@@ -74,7 +78,11 @@ fun Toolbar(viewModel: DazzleViewModel) {
|
||||
),
|
||||
keyboardActions = KeyboardActions(onSearch = {
|
||||
viewModel.applySearchOrFilter()
|
||||
keyboardController?.hide()
|
||||
KeyboardUtil.hideKeyboard(
|
||||
context = context,
|
||||
view = view,
|
||||
keyBoardController = keyboardController
|
||||
)
|
||||
}),
|
||||
modifier = Modifier
|
||||
.height(48.dp)
|
||||
@@ -97,7 +105,11 @@ fun Toolbar(viewModel: DazzleViewModel) {
|
||||
})
|
||||
Button(
|
||||
onClick = {
|
||||
keyboardController?.hide()
|
||||
KeyboardUtil.hideKeyboard(
|
||||
context = context,
|
||||
view = view,
|
||||
keyBoardController = keyboardController
|
||||
)
|
||||
viewModel.showBottomSheet(BottomSheetType.FilterBottomSheet) },
|
||||
shape = RoundedCornerShape(4.dp),
|
||||
colors = ButtonDefaults.buttonColors(
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.uitron.demo.dazzledesignsystem.ui
|
||||
|
||||
import KeyboardUtil
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
@@ -18,7 +19,9 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.ExperimentalComposeUiApi
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
|
||||
import androidx.compose.ui.platform.LocalView
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -41,6 +44,8 @@ import com.uitron.demo.theme.fontFamily
|
||||
fun WidgetItemView(widgetTemplate: WidgetTemplate?, viewModel: DazzleViewModel) {
|
||||
|
||||
val keyboardController = LocalSoftwareKeyboardController.current
|
||||
val context = LocalContext.current
|
||||
val view = LocalView.current
|
||||
|
||||
val widgetData = widgetTemplate?.config?.widgetData?.let {
|
||||
try {
|
||||
@@ -79,7 +84,11 @@ fun WidgetItemView(widgetTemplate: WidgetTemplate?, viewModel: DazzleViewModel)
|
||||
modifier = Modifier
|
||||
.padding(top = 10.dp, end = 12.dp)
|
||||
.clickable {
|
||||
keyboardController?.hide()
|
||||
KeyboardUtil.hideKeyboard(
|
||||
context = context,
|
||||
view = view,
|
||||
keyBoardController = keyboardController
|
||||
)
|
||||
viewModel.showBottomSheet(
|
||||
BottomSheetType.ShareWidgetConfigBottomSheet, widgetTemplate
|
||||
)
|
||||
|
||||
@@ -16,6 +16,7 @@ import androidx.compose.ui.platform.ClipboardManager
|
||||
import androidx.compose.ui.platform.LocalClipboardManager
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
|
||||
import androidx.compose.ui.platform.LocalView
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.text.AnnotatedString
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
@@ -75,6 +76,8 @@ fun SearchField(
|
||||
modifier: Modifier, viewModel: DesignSystemVM
|
||||
) {
|
||||
val keyboardController = LocalSoftwareKeyboardController.current
|
||||
val context = LocalContext.current
|
||||
val view = LocalView.current
|
||||
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically, modifier = modifier
|
||||
@@ -108,7 +111,13 @@ fun SearchField(
|
||||
keyboardOptions = KeyboardOptions(
|
||||
autoCorrect = false, imeAction = ImeAction.Search
|
||||
),
|
||||
keyboardActions = KeyboardActions(onSearch = { keyboardController?.hide() }),
|
||||
keyboardActions = KeyboardActions(onSearch = {
|
||||
KeyboardUtil.hideKeyboard(
|
||||
context = context,
|
||||
view = view,
|
||||
keyBoardController = keyboardController
|
||||
)
|
||||
}),
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.background(color = Color.Transparent),
|
||||
|
||||
@@ -17,8 +17,10 @@ import androidx.compose.ui.focus.onFocusChanged
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.layout.layoutId
|
||||
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.text.*
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -70,6 +72,8 @@ class CustomTextFieldRenderer(
|
||||
) {
|
||||
super.Render(property, uiTronData, uiTronViewModel, modifier)
|
||||
var customTextFieldData = uiTronData as? CustomTextFieldData
|
||||
val context = LocalContext.current
|
||||
val view = LocalView.current
|
||||
if (property.isStateFul.orFalse()) {
|
||||
val state = uiTronViewModel.handle.getStateFlow<String?>(
|
||||
property.getPropertyId(),
|
||||
@@ -219,7 +223,13 @@ class CustomTextFieldRenderer(
|
||||
imeAction = KeyboardUtil.getImeAction(property.keyboardOptions?.imeAction)
|
||||
),
|
||||
keyboardActions = KeyboardActions(
|
||||
onDone = { keyboardController?.hide() }
|
||||
onDone = {
|
||||
KeyboardUtil.hideKeyboard(
|
||||
context = context,
|
||||
view = view,
|
||||
keyBoardController = keyboardController
|
||||
)
|
||||
}
|
||||
),
|
||||
value = inputValue,
|
||||
onValueChange = { input ->
|
||||
|
||||
@@ -16,7 +16,9 @@ import androidx.compose.ui.focus.focusRequester
|
||||
import androidx.compose.ui.focus.onFocusChanged
|
||||
import androidx.compose.ui.input.key.*
|
||||
import androidx.compose.ui.layout.layoutId
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
|
||||
import androidx.compose.ui.platform.LocalView
|
||||
import androidx.compose.ui.text.TextRange
|
||||
import androidx.compose.ui.text.input.TextFieldValue
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
@@ -62,6 +64,8 @@ class MultiSectionTextFieldRenderer() : Renderer<MultiSectionTextFieldProperty>
|
||||
) {
|
||||
super.Render(property, uiTronData, uiTronViewModel, modifier)
|
||||
var multiSectionTextFieldData = uiTronData as? MultiSectionTextFieldData
|
||||
val context = LocalContext.current
|
||||
val view = LocalView.current
|
||||
if (property.isStateFul.orFalse()) {
|
||||
val state = uiTronViewModel.handle.getStateFlow<String?>(
|
||||
property.getPropertyId(), null
|
||||
@@ -255,7 +259,13 @@ class MultiSectionTextFieldRenderer() : Renderer<MultiSectionTextFieldProperty>
|
||||
},
|
||||
keyboardOptions = getKeyboardOptions(property.textFieldPropertyList[index].keyboardOptions),
|
||||
keyboardActions = KeyboardActions(
|
||||
onDone = { keyboardController?.hide() }
|
||||
onDone = {
|
||||
KeyboardUtil.hideKeyboard(
|
||||
context = context,
|
||||
view = view,
|
||||
keyBoardController = keyboardController
|
||||
)
|
||||
}
|
||||
),
|
||||
decorationBox = { innerTextField ->
|
||||
RenderHint(
|
||||
|
||||
@@ -35,8 +35,10 @@ import androidx.compose.ui.graphics.Color.Companion.Transparent
|
||||
import androidx.compose.ui.graphics.SolidColor
|
||||
import androidx.compose.ui.layout.layoutId
|
||||
import androidx.compose.ui.platform.LocalConfiguration
|
||||
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.text.TextStyle
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
@@ -268,6 +270,8 @@ class OtpBoxRenderer : Renderer<OtpBoxProperty> {
|
||||
modifier: Modifier,
|
||||
onValueChange: (value: TextFieldValue) -> Unit
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
val view = LocalView.current
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.width(getItemWidth(property))
|
||||
@@ -317,7 +321,12 @@ class OtpBoxRenderer : Renderer<OtpBoxProperty> {
|
||||
imeAction = KeyboardUtil.getImeAction(property.keyboardOptions?.imeAction)
|
||||
),
|
||||
keyboardActions = KeyboardActions(
|
||||
onDone = { keyboardController?.hide() }
|
||||
onDone = {
|
||||
KeyboardUtil.hideKeyboard(
|
||||
context = context,
|
||||
view = view,
|
||||
keyBoardController = keyboardController
|
||||
) }
|
||||
),
|
||||
visualTransformation = property.visualTransformation?.getVisualTransformation()
|
||||
?: VisualTransformation.None,
|
||||
|
||||
@@ -20,7 +20,9 @@ import androidx.compose.ui.draw.alpha
|
||||
import androidx.compose.ui.focus.onFocusChanged
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.layout.layoutId
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
|
||||
import androidx.compose.ui.platform.LocalView
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -58,6 +60,8 @@ class OutlinedTextFieldRenderer(
|
||||
) {
|
||||
super.Render(property, uiTronData, uiTronViewModel, modifier)
|
||||
var outlinedTextFieldData = uiTronData as? OutlinedTextFieldData
|
||||
val context = LocalContext.current
|
||||
val view = LocalView.current
|
||||
if (property.isStateFul.orFalse()) {
|
||||
val state = uiTronViewModel.handle.getStateFlow<String?>(
|
||||
property.getPropertyId(),
|
||||
@@ -123,7 +127,13 @@ class OutlinedTextFieldRenderer(
|
||||
imeAction = KeyboardUtil.getImeAction(property.keyboardOptions?.imeAction)
|
||||
),
|
||||
keyboardActions = KeyboardActions(
|
||||
onDone = {keyboardController?.hide()}
|
||||
onDone = {
|
||||
KeyboardUtil.hideKeyboard(
|
||||
context = context,
|
||||
view = view,
|
||||
keyBoardController = keyboardController
|
||||
)
|
||||
}
|
||||
),
|
||||
value = inputValue,
|
||||
onValueChange = {
|
||||
|
||||
@@ -5,9 +5,14 @@
|
||||
*
|
||||
*/
|
||||
|
||||
import android.content.Context
|
||||
import android.view.inputmethod.InputMethodManager
|
||||
import androidx.compose.ui.ExperimentalComposeUiApi
|
||||
import androidx.compose.ui.platform.SoftwareKeyboardController
|
||||
import androidx.compose.ui.text.input.ImeAction
|
||||
import androidx.compose.ui.text.input.KeyboardCapitalization
|
||||
import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.core.content.getSystemService
|
||||
|
||||
/**
|
||||
* Copyright © 2021 by Navi Technologies Private Limited
|
||||
@@ -51,4 +56,14 @@ object KeyboardUtil {
|
||||
else -> ImeAction.None
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalComposeUiApi::class)
|
||||
fun hideKeyboard(
|
||||
context: Context,
|
||||
view: android.view.View,
|
||||
keyBoardController: SoftwareKeyboardController?,
|
||||
) {
|
||||
context.getSystemService<InputMethodManager>()?.hideSoftInputFromWindow(view.windowToken, 0)
|
||||
keyBoardController?.hide()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user