Fixed
Status Update
Comments
sa...@gmail.com <sa...@gmail.com> #2
Found a very ugly workaround. This is obviously not a proper solution and I don't feel comfortable using RestrictedApi
.
@OptIn(InternalComposeUiApi::class)
@SuppressLint("RestrictedApi")
@Composable
fun TextFieldWithoutKeyboard() {
CompositionLocalProvider(
LocalPlatformTextInputMethodOverride provides EmptyPlatformTextInputSessionHandler(),
) {
BasicTextField2(
...
)
}
}
@SuppressLint("RestrictedApi")
@OptIn(InternalComposeUiApi::class)
internal class EmptyPlatformTextInputSessionHandler: PlatformTextInputSessionHandler {
override suspend fun textInputSession(
session: suspend PlatformTextInputSessionScope.() -> Nothing
): Nothing {
coroutineScope {
while (true) delay(5000)
}
}
}
le...@google.com <le...@google.com>
kl...@google.com <kl...@google.com> #3
I'm curious why you're using a text field if you don't need keyboard input. Why not just use a regular text composable with SelectionContainer
?
sa...@gmail.com <sa...@gmail.com> #4
I need cursor functionality. Also with text fields I get support for hardware/physical keyboards (for accessibility)
kl...@google.com <kl...@google.com> #5
It sounds like all you really need is a way to disable the IME, so maybe a parameter to the text field would work? E.g.
BasicTextField(…, enableSoftKeyboard = false)
sa...@gmail.com <sa...@gmail.com> #6
Yes, this would be great.
kl...@google.com <kl...@google.com> #7
ha...@google.com <ha...@google.com>
kl...@google.com <kl...@google.com> #8
ap...@google.com <ap...@google.com> #9
Project: platform/frameworks/support
Branch: androidx-main
commit 5ef99a1da4efd83f38bf1538cd5fa2c5809d7869
Author: Zach Klippenstein <klippenstein@google.com>
Date: Thu Feb 15 18:58:10 2024
Introduce PlatformTextInput interceptor composable function.
Design doc: go/pti-interceptor
Keeps the old test-only code around but deprecates it.
Fixes: b/322680547
Fixes: b/325141632
Test: InterceptPlatformTextInputTest
Relnote: "Introduced `InterceptPlatformTextInput`
for helping write low-level IME-related tests and other
low-level IME use cases. `PlatformTextInputTestOverride` has been
deprecated."
Change-Id: I862ed2e997d6a98e33a25da2ff536a2779ae173d
M compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/input/InputMethodInterceptor.kt
M compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/input/TextFieldFocusTest.kt
M compose/material/material/src/androidInstrumentedTest/kotlin/androidx/compose/material/textfield/OutlinedTextFieldTest.kt
M compose/material/material/src/androidInstrumentedTest/kotlin/androidx/compose/material/textfield/TextFieldTest.kt
M compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/OutlinedTextFieldTest.kt
M compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TextFieldTest.kt
M compose/ui/ui-test/api/current.txt
M compose/ui/ui-test/api/restricted_current.txt
M compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/PlatformTextInputMethodOverride.kt
M compose/ui/ui/api/current.txt
M compose/ui/ui/api/restricted_current.txt
M compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/PlatformTextInputModifierNodeSample.kt
A compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/text/input/InterceptPlatformTextInputTest.kt
M compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/text/input/PlatformTextInputMethodTestOverrideTest.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/Owner.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/platform/PlatformTextInputModifierNode.kt
https://android-review.googlesource.com/2978991
Branch: androidx-main
commit 5ef99a1da4efd83f38bf1538cd5fa2c5809d7869
Author: Zach Klippenstein <klippenstein@google.com>
Date: Thu Feb 15 18:58:10 2024
Introduce PlatformTextInput interceptor composable function.
Design doc: go/pti-interceptor
Keeps the old test-only code around but deprecates it.
Fixes:
Fixes:
Test: InterceptPlatformTextInputTest
Relnote: "Introduced `InterceptPlatformTextInput`
for helping write low-level IME-related tests and other
low-level IME use cases. `PlatformTextInputTestOverride` has been
deprecated."
Change-Id: I862ed2e997d6a98e33a25da2ff536a2779ae173d
M compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/input/InputMethodInterceptor.kt
M compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/input/TextFieldFocusTest.kt
M compose/material/material/src/androidInstrumentedTest/kotlin/androidx/compose/material/textfield/OutlinedTextFieldTest.kt
M compose/material/material/src/androidInstrumentedTest/kotlin/androidx/compose/material/textfield/TextFieldTest.kt
M compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/OutlinedTextFieldTest.kt
M compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TextFieldTest.kt
M compose/ui/ui-test/api/current.txt
M compose/ui/ui-test/api/restricted_current.txt
M compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/PlatformTextInputMethodOverride.kt
M compose/ui/ui/api/current.txt
M compose/ui/ui/api/restricted_current.txt
M compose/ui/ui/samples/src/main/java/androidx/compose/ui/samples/PlatformTextInputModifierNodeSample.kt
A compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/text/input/InterceptPlatformTextInputTest.kt
M compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/text/input/PlatformTextInputMethodTestOverrideTest.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/Owner.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/platform/PlatformTextInputModifierNode.kt
pr...@google.com <pr...@google.com> #10
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.compose.foundation:foundation:1.7.0-alpha05
androidx.compose.foundation:foundation-android:1.7.0-alpha05
androidx.compose.foundation:foundation-desktop:1.7.0-alpha05
androidx.compose.material:material:1.7.0-alpha05
androidx.compose.material:material-android:1.7.0-alpha05
androidx.compose.material:material-desktop:1.7.0-alpha05
androidx.compose.material3:material3:1.3.0-alpha03
androidx.compose.material3:material3-android:1.3.0-alpha03
androidx.compose.material3:material3-desktop:1.3.0-alpha03
androidx.compose.ui:ui:1.7.0-alpha05
androidx.compose.ui:ui-android:1.7.0-alpha05
androidx.compose.ui:ui-desktop:1.7.0-alpha05
androidx.compose.ui:ui-test:1.7.0-alpha05
androidx.compose.ui:ui-test-android:1.7.0-alpha05
androidx.compose.ui:ui-test-desktop:1.7.0-alpha05
k....@rebuy.com <k....@rebuy.com> #11
To anybody wondering how this could be achieved I found the correct usage on StackOverflow:
var inputConnection by remember { mutableStateOf<InputConnection?>(null) }
InterceptPlatformTextInput(
interceptor = { request, nextHandler ->
// if you want to disable the keyboard
inputConnection = request.createInputConnection(EditorInfo())
awaitCancellation()
// if you want to keep the keyboard
nextHandler.startInputMethod { outAttributes ->
request.createInputConnection(outAttributes)
.also { inputConnection = it }
}
},
content = {
TextField(...)
},
)
Button(
onClick = { inputConnection?.commitText("hello", 5) },
content = { Text("test") },
)
Description
Jetpack Compose version: 1.7.0-alpha01
Jetpack Compose component(s) used: foundation.text2
Android Studio Build: Android Studio Hedgehog | 2023.1.1 Patch 2 Build #AI-231.9392.1.2311.11330709, built on January 19, 2024
Kotlin version: 1.9.22
Steps to Reproduce or Code Sample to Reproduce:
I develop a calculator and don't use system keyboard. Before 1.7.0 and BasicTextField2 I could disable system keyboard with this approach. (see below)
But in 1.7.0 and BasicTextField2 this doesn't work as
LocalTextInputService
is now deprecated and not used in BasicTextField2. What migration steps are required to achieve same result in 1.7.0?