Fixed
Status Update
Comments
iz...@google.com <iz...@google.com>
ap...@google.com <ap...@google.com> #2
foe example in the example provided in
var text by remember { mutableStateOf("Text") }
val handler = remember { Handler(Looper.getMainLooper()) }
OutlinedTextField(
value = text,
onValueChange = {
handler.removeCallbacksAndMessages(null)
handler.postDelayed({
text = it
}, 10)
},
label = { Text("Label") },
modifier = Modifier.fillMaxWidth()
)
When the above function is called, it is not impossible for CoreTextField to know about it. What happens is
- CoreTextField gets value text
- when user types onValueChange is fired
- (developer delays the new value for recompose)
- CoreTextField after onValueChange requests a recompose
- When recompose happens the changed data is passed to developer, and recompose happens with old data (therefore it is not possible to change the cursor location by user either, since it resets to initial value)
ap...@google.com <ap...@google.com> #3
While working on the new APi here are the things we want to update in the current API so that we can clear some of the bugs:
- Make TextFieldValue.composition readonly (aosp/1499610)
- I figured that when composition is "reset" to null (which should happen automatically when text has changed), we do not inform the IME about this fact. This requires us to reset the IME with the new information at hand.
- [Optional] provide mechanism to prevent users creating a new TextFieldValue in onValueChange forgetting to set selection, composition. One of the ideas here was to have TextRange.Unspecified that is the default value for selection and composition. This way we can understand the intention of the developer, if they wanted to reset those fields or if they did not change them. This is in order to prevent cases such as
b/171860947
ap...@google.com <ap...@google.com> #4
Nona's comment on naming of the clearComposition:
"commitComposition/cancelComposition" is better than "clearComposition" it is not clear.
I will change the TextFieldValue.clearComposition as TextFieldValue.commitComposition.
Nona also mentioned that cancelComposition would be the version where the composed text is removed and composition range is cleared (which is the naming in EditorBuffer
). I will add it when requested.
iz...@google.com <iz...@google.com> #5
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 5520c565b94ed4735ae3f6ed52961e60b8df79cc
Author: Siyamed Sinir <siyamed@google.com>
Date: Sun Nov 15 21:48:58 2020
Make TextFieldValue.composition readonly
- Maked TextFieldValue.composition readonly
- Removed the exception for invalid selection range, and instead
constrains this value. The exception thrown for invalid ranges
created issues for developers while creating a new copy of
TextFieldValue
- Made the three argument constructor internal so that composition
can be set by the original owner of the object, which is
EditProcessor.
- Changed the way that String overloads remembers the previous
selection/composition since now composition cannot be set by those.
- Removed `data class` from TextFieldValue in order to support above
use cases, adds auto generated equals/hashCode methods.
- Added TextFieldValue.commitComposition in order to clear the
composition range in TextFieldValue.
Test: ./gradlew compose:ui:ui-text:test
Test: ./gradlew compose:ui:ui-text:connectedAndroidTest
Test: ./gradlew compose:foundation:foundation:test
Test: ./gradlew compose:foundation:foundation:connectedAndroidTest
Test: ./gradlew compose:material:material:test
Test: ./gradlew compose:material:material:connectedAndroidTest
RelNote: "Updated TextFielValue API
- made TextFieldValue.composition readonly
- removed exception thrown for invalid selection range"
Bug: 172239032
Change-Id: I4a67592c05ab384ad5614cccf50ad6e79be52b55
M compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeVariousInputField.kt
M compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldOnValueChangeTextFieldValueTest.kt
M compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldTest.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/BasicTextField.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/TextFieldDelegate.kt
M compose/material/material/src/commonMain/kotlin/androidx/compose/material/OutlinedTextField.kt
M compose/material/material/src/commonMain/kotlin/androidx/compose/material/TextField.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/TextFieldValue.kt
M compose/ui/ui-text/src/test/java/androidx/compose/ui/text/input/TextFieldValueTest.kt
https://android-review.googlesource.com/1499610
Branch: androidx-master-dev
commit 5520c565b94ed4735ae3f6ed52961e60b8df79cc
Author: Siyamed Sinir <siyamed@google.com>
Date: Sun Nov 15 21:48:58 2020
Make TextFieldValue.composition readonly
- Maked TextFieldValue.composition readonly
- Removed the exception for invalid selection range, and instead
constrains this value. The exception thrown for invalid ranges
created issues for developers while creating a new copy of
TextFieldValue
- Made the three argument constructor internal so that composition
can be set by the original owner of the object, which is
EditProcessor.
- Changed the way that String overloads remembers the previous
selection/composition since now composition cannot be set by those.
- Removed `data class` from TextFieldValue in order to support above
use cases, adds auto generated equals/hashCode methods.
- Added TextFieldValue.commitComposition in order to clear the
composition range in TextFieldValue.
Test: ./gradlew compose:ui:ui-text:test
Test: ./gradlew compose:ui:ui-text:connectedAndroidTest
Test: ./gradlew compose:foundation:foundation:test
Test: ./gradlew compose:foundation:foundation:connectedAndroidTest
Test: ./gradlew compose:material:material:test
Test: ./gradlew compose:material:material:connectedAndroidTest
RelNote: "Updated TextFielValue API
- made TextFieldValue.composition readonly
- removed exception thrown for invalid selection range"
Bug: 172239032
Change-Id: I4a67592c05ab384ad5614cccf50ad6e79be52b55
M compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/ComposeVariousInputField.kt
M compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldOnValueChangeTextFieldValueTest.kt
M compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldTest.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/BasicTextField.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/TextFieldDelegate.kt
M compose/material/material/src/commonMain/kotlin/androidx/compose/material/OutlinedTextField.kt
M compose/material/material/src/commonMain/kotlin/androidx/compose/material/TextField.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/TextFieldValue.kt
M compose/ui/ui-text/src/test/java/androidx/compose/ui/text/input/TextFieldValueTest.kt
Description
Currently, we have
SemanticsNodeInteraction.performXyzInput {/* XyzInjectionScope functions */}
for touch, mouse, rotary scroll, and multi modal input types.This pattern should be extended to allow for keyboard input injection. Specifically, it should be able to inject the following types of keyboard event: