Fixed
Status Update
Comments
si...@google.com <si...@google.com>
si...@google.com <si...@google.com>
al...@gmail.com <al...@gmail.com> #2
I encountered a similar issue when attempting to implement a 'maxLength' support which truncates the input text to a certain maximum number of characters.
si...@google.com <si...@google.com> #3
we are working on providing an api that will not cause easy to fall in errors. meanwhile for this examples, you are not passing all of the information that was passed in during onValueChange
@Composable
fun TestView() {
val (login,setLogin) = remember { mutableStateOf(TextFieldValue("")) }
TextField(
login,
onValueChange = {
setLogin(it.copy(text=it.text.toLowerCase()))
}
)
}
the difference is at TextFieldValue(it.text.toLowerCase(), it.selection)
vs it.copy(text=it.text.toLowerCase())
dm...@gmail.com <dm...@gmail.com> #4
I've tried your code sample (with TextFieldValue copy with text mutation), but same problem occurs when any uppercased letter is entered.
For example: I'm typing abCd and input field shown as "abcabcd". Similar, when typing TEST(uppercased) value is shown as "ttesttest"
For example: I'm typing abCd and input field shown as "abcabcd". Similar, when typing TEST(uppercased) value is shown as "ttesttest"
ap...@google.com <ap...@google.com> #5
Project: platform/frameworks/support
Branch: androidx-master-dev
commit fe038a6d89484699e921a2a546e5d15e976fb9cf
Author: Siyamed Sinir <siyamed@google.com>
Date: Sun Nov 15 21:48:58 2020
Reset input when composition or text changes
When the text or composition changes by the application
IME needs to be informed about this fact. Otherwise
IME thinks that their data is correct and in synch. An easy
culprit for this issue is: if onValueChange always rejects the
given input, keyboard still shows/updates suggestions thinking
that the data that was previously sent is visible to user.
When the IME is not informed what is happening, also the duplicate
text issues occurs since IME still thinks that the composition
range is correct, and that is what the user sees.
This CL changes the EditProcessor behavior to compare the previously
suggested state to the new state it gets. If
- the text is different
- the composition is different
It resets the input.
Test: Added new tests
Test: ./gradlew compose:ui:ui-text:test
Test: ./gradlew compose:ui:ui-text:connectedAndroidTest
Test: ./gradlew compose:ui:ui:test
Test: ./gradlew compose:ui:ui:connectedAndroidTest
Test: ./gradlew compose:foundation:foundation:test
Test: ./gradlew compose:foundation:foundation:connectedAndroidTest
RelNote: Added resetInput parameter to TextInputService#onStateUpdated
Bug: 172239032
Bug: 171860947
Change-Id: I3e8f5404553921bd94ae424d2840ca5595b6f90b
M compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextDemos.kt
A compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextFieldValueDemo.kt
M compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldTest.kt
M compose/integration-tests/src/main/java/androidx/ui/integration/test/core/text/TextFieldToggleTextTestCase.kt
M compose/ui/ui-text/api/current.txt
M compose/ui/ui-text/api/public_plus_experimental_current.txt
M compose/ui/ui-text/api/restricted_current.txt
M compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/input/EditProcessor.kt
M compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/input/TextFieldValue.kt
M compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/input/TextInputService.kt
M compose/ui/ui-text/src/test/java/androidx/compose/ui/text/TextInputServiceTest.kt
M compose/ui/ui-text/src/test/java/androidx/compose/ui/text/input/EditProcessorTest.kt
M compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/text/input/RecordingInputConnection.kt
M compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/text/input/TextInputServiceAndroid.kt
M compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/platform/DesktopPlatformInput.kt
A compose/ui/ui/src/test/kotlin/androidx/compose/ui/input/TextInputServiceAndroidOnStateUpdateTest.kt
https://android-review.googlesource.com/1500556
Branch: androidx-master-dev
commit fe038a6d89484699e921a2a546e5d15e976fb9cf
Author: Siyamed Sinir <siyamed@google.com>
Date: Sun Nov 15 21:48:58 2020
Reset input when composition or text changes
When the text or composition changes by the application
IME needs to be informed about this fact. Otherwise
IME thinks that their data is correct and in synch. An easy
culprit for this issue is: if onValueChange always rejects the
given input, keyboard still shows/updates suggestions thinking
that the data that was previously sent is visible to user.
When the IME is not informed what is happening, also the duplicate
text issues occurs since IME still thinks that the composition
range is correct, and that is what the user sees.
This CL changes the EditProcessor behavior to compare the previously
suggested state to the new state it gets. If
- the text is different
- the composition is different
It resets the input.
Test: Added new tests
Test: ./gradlew compose:ui:ui-text:test
Test: ./gradlew compose:ui:ui-text:connectedAndroidTest
Test: ./gradlew compose:ui:ui:test
Test: ./gradlew compose:ui:ui:connectedAndroidTest
Test: ./gradlew compose:foundation:foundation:test
Test: ./gradlew compose:foundation:foundation:connectedAndroidTest
RelNote: Added resetInput parameter to TextInputService#onStateUpdated
Bug: 172239032
Bug: 171860947
Change-Id: I3e8f5404553921bd94ae424d2840ca5595b6f90b
M compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextDemos.kt
A compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextFieldValueDemo.kt
M compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldTest.kt
M compose/integration-tests/src/main/java/androidx/ui/integration/test/core/text/TextFieldToggleTextTestCase.kt
M compose/ui/ui-text/api/current.txt
M compose/ui/ui-text/api/public_plus_experimental_current.txt
M compose/ui/ui-text/api/restricted_current.txt
M compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/input/EditProcessor.kt
M compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/input/TextFieldValue.kt
M compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/input/TextInputService.kt
M compose/ui/ui-text/src/test/java/androidx/compose/ui/text/TextInputServiceTest.kt
M compose/ui/ui-text/src/test/java/androidx/compose/ui/text/input/EditProcessorTest.kt
M compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/text/input/RecordingInputConnection.kt
M compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/text/input/TextInputServiceAndroid.kt
M compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/platform/DesktopPlatformInput.kt
A compose/ui/ui/src/test/kotlin/androidx/compose/ui/input/TextInputServiceAndroidOnStateUpdateTest.kt
si...@google.com <si...@google.com> #6
will continue working on preventing TextFieldValue(it.text.toLowerCase(), it.selection)
to unintentionally canceling composition but this ticket is fixed.
ap...@google.com <ap...@google.com> #7
Project: platform/frameworks/support
Branch: androidx-master-dev
commit d320f0fc8de7e207c27bc475da32f252421fe526
Author: Siyamed Sinir <siyamed@google.com>
Date: Thu Nov 19 19:32:16 2020
Fix EditProcessor selection update
We passed selection.start and end, where as we should have
passed selection.min and max since Editing buffer expects
correct ordering.
Bug: 173728118
Bug: 172239032
Bug: 171860947
Test: ./gradlew compose:ui:ui-text:test
Change-Id: If1c04102da5da59cecd127f0d8759b46b153e086
M compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/input/EditProcessor.kt
M compose/ui/ui-text/src/test/java/androidx/compose/ui/text/input/EditProcessorTest.kt
https://android-review.googlesource.com/1506548
Branch: androidx-master-dev
commit d320f0fc8de7e207c27bc475da32f252421fe526
Author: Siyamed Sinir <siyamed@google.com>
Date: Thu Nov 19 19:32:16 2020
Fix EditProcessor selection update
We passed selection.start and end, where as we should have
passed selection.min and max since Editing buffer expects
correct ordering.
Bug: 173728118
Bug: 172239032
Bug: 171860947
Test: ./gradlew compose:ui:ui-text:test
Change-Id: If1c04102da5da59cecd127f0d8759b46b153e086
M compose/ui/ui-text/src/commonMain/kotlin/androidx/compose/ui/text/input/EditProcessor.kt
M compose/ui/ui-text/src/test/java/androidx/compose/ui/text/input/EditProcessorTest.kt
Description
- t
- tte
- ttettes
- ttettesttettest
Sample code to reproduce:
@Composable
fun TestView() {
val (login,setLogin) = remember { mutableStateOf(TextFieldValue("")) }
TextField(login, onValueChange = {
setLogin(TextFieldValue(it.text.toLowerCase(), it.selection))
})
}
I've tried also make the state with string value (remember { mutableStateOf("") }), but there was same behaviour.
Jetpack Compose v1.0.0-alpha-05