Status Update
Comments
jo...@google.com <jo...@google.com>
co...@protonmail.com <co...@protonmail.com> #2
Branch: androidx-master-dev
commit c60f33e229e31ab328ef6b59dab63b264954831c
Author: Alexandre Elias <aelias@google.com>
Date: Fri Jul 10 16:23:09 2020
Semantics no-op cleanups
Partly in response to lmr's broad code review, I did a pass of
superficial API/implementation cleanup. The main changes are:
- I changed each Boolean SemanticsProperty where false is equivalent to
not being present to take "Unit" instead. This is conceptually
clearer: it avoids questions like "can I cancel out a semantics from a
merged child by setting it to false?" Because "property = Unit" looks
weird, I also changed the style of these to "property()".
- I moved the Semantics id generator closer to where it's used, in
SemanticsModifierCore. I made it internal and an AtomicInt.
(Note that integer ids are heavily used in the Android
AccessibilityNodeInfo APIs so I can't simply remove them entirely.)
- I deleted dead code. Some examples include SemanticsHintOverrides,
a public API not connected to anything, and SemanticsPropertyKey
merge() open method which is never called. (In both cases I have
a different plan in mind for accessibility.)
Fixes: 145951226
Fixes: 145955412
Test: existing tests
Relnote: "Single-value semantics properties now use a calling style.
For example, 'semantics { hidden = true }' is now written as:
'semantics { hidden() }'."
Change-Id: Ic1afd12ea22c926babc9662f1804d80b33aa0cfc
M ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/LayoutNodeModifierBenchmark.kt
M ui/ui-core/api/0.1.0-dev15.txt
M ui/ui-core/api/current.txt
M ui/ui-core/api/public_plus_experimental_0.1.0-dev15.txt
M ui/ui-core/api/public_plus_experimental_current.txt
M ui/ui-core/api/restricted_0.1.0-dev15.txt
M ui/ui-core/api/restricted_current.txt
M ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/graphics/vector/VectorTest.kt
M ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/semantics/SemanticsTests.kt
M ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidActuals.kt
M ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeView.kt
M ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeViewAccessibilityDelegateCompat.kt
M ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidPopup.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Expect.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsConfiguration.kt
D ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsHintOverrides.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsModifier.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsNode.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsOwner.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsWrapper.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/semantics/SemanticsProperties.kt
M ui/ui-foundation/api/0.1.0-dev15.txt
M ui/ui-foundation/api/current.txt
M ui/ui-foundation/api/public_plus_experimental_0.1.0-dev15.txt
M ui/ui-foundation/api/public_plus_experimental_current.txt
M ui/ui-foundation/api/restricted_0.1.0-dev15.txt
M ui/ui-foundation/api/restricted_current.txt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/Clickable.kt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/Dialog.kt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/Scroller.kt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/selection/Selectable.kt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/selection/Toggleable.kt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/semantics/FoundationSemanticsProperties.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/ButtonTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/CardTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/CheckboxScreenshotTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/RadioButtonScreenshotTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/ScaffoldTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/SnackbarTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/SurfaceTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/ripple/RippleIndicationTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/TextFieldScreenshotTest.kt
M ui/ui-material/src/main/java/androidx/ui/material/AppBar.kt
M ui/ui-material/src/main/java/androidx/ui/material/TextFieldImpl.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/AssertsTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/CallSemanticsActionTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/ErrorMessagesTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/FindersTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/PrintToStringTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/ScrollToTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/TextActionsTest.kt
M ui/ui-test/src/main/java/androidx/ui/test/Actions.kt
M ui/ui-test/src/main/java/androidx/ui/test/Filters.kt
M ui/ui-text/api/0.1.0-dev15.txt
M ui/ui-text/api/current.txt
M ui/ui-text/api/public_plus_experimental_0.1.0-dev15.txt
M ui/ui-text/api/public_plus_experimental_current.txt
M ui/ui-text/api/restricted_0.1.0-dev15.txt
M ui/ui-text/api/restricted_current.txt
M ui/ui-text/src/commonMain/kotlin/androidx/ui/text/CoreTextField.kt
M ui/ui-text/src/commonMain/kotlin/androidx/ui/text/TextSemanticsProperties.kt
to...@gmail.com <to...@gmail.com> #3
As you can see it's been a long time and they do not even answer.
The workaround that is still needed is simple. Since this is a relatively rare issue and not a single user ever contacted about that issue before or after the workaround I guess it's good enough for now.
@SuppressLint("RestrictedApi")
override fun dispatchKeyEvent(event: KeyEvent): Boolean {
return runCatching { super.dispatchKeyEvent(event) }.getOrDefault(false)
}
jo...@google.com <jo...@google.com> #4
We recently landed significant changes to the affected code paths. The changes have not been released yet. Can we ask you to either wait for the next alpha release or try one of the latest snapshots?
Thanks!
to...@gmail.com <to...@gmail.com> #5
I've lived 80% of the time on snapshot builds for that app due to all the reports and fixes leading to other reports so not a problem.
Can you point me to the corresponding CLs so I can look at them before removing the workaround for my next release?
jo...@google.com <jo...@google.com> #6
The changes I'm referring to were added in
to...@gmail.com <to...@gmail.com> #7
I'd love to have a repro too, it's easier, but as quite a few compose crashes, the stack traces does not give any clue about where in the app it can happen so without the users contacting me with a repro there's not much I can do.
That CL is quite a major change so effectively hard to know if it can fix this.
Let's trust it will.
I'll remove the workaround for next release and we'll see. It's rare enough to be allowed for a short period in prod.
jo...@google.com <jo...@google.com> #8
Thanks! Keep us posted.
to...@gmail.com <to...@gmail.com> #9
If I may just add a note it's been 6 month without any reaction before today :)
After many many reports, now for quite a few parts of Compose I know who to ping to get the issue moving and get necessary data to try to repro, pointers, ...
But it's still quite frustrating when I don't know who to ping, I know you receive tons of bad reports or incomplete like this one, but you can also easily check the number of reports from issue OP and priority and number of fixed to maybe help decide when engaging can help fixing things faster.
Anyway sorry just a small rant.
ro...@gmail.com <ro...@gmail.com> #10
Hey guys, I also found this bug today in my development process, and I can provide a 100% reproducible code:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
ComposetestTheme {
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
val textState = rememberTextFieldState("name")
MyListItem(
onClick = { /*TODO*/ },
enabled = false,
trailingContent = {
},
modifier = Modifier.padding(horizontal = 16.dp)
) {
BasicTextField(
state = textState,
decorator = {
it()
}
)
}
}
}
}
}
}
@Composable
fun MyListItem(
onClick: () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
shape: Shape = RoundedCornerShape(16.dp),
contentHorizontalAlignment: Alignment.Horizontal = Alignment.Start,
background: Color = Color.White,
description: @Composable (() -> Unit)? = null,
leadingContent: @Composable (() -> Unit)? = null,
trailingContent: @Composable (() -> Unit)? = null,
content: @Composable () -> Unit,
) = Box(
modifier = modifier
.clip(shape)
.background(background, shape)
.clickable(onClick = onClick, enabled = enabled)
) {
CenterRow(Modifier.padding(16.dp)) {
Box(
modifier = Modifier.weight(1f)
) {
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = contentHorizontalAlignment,
verticalArrangement = Arrangement.spacedBy(6.dp)
) {
CenterRow {
RenderIf(conditionContent = leadingContent) {
Spacer(Modifier.width(10.dp))
}
content()
}
description?.invoke()
}
}
trailingContent?.invoke()
}
}
/**
* A layout that renders condition content and content only when the condition content size is not empty.
*/
@Composable
fun RenderIf(
modifier: Modifier = Modifier,
conditionContent: @Composable (() -> Unit)? = null,
content: @Composable (() -> Unit)? = null
) {
var isEmptyContent by remember(conditionContent) { mutableStateOf(true) }
Layout(
modifier = modifier,
content = conditionContent ?: {},
) { measurable, constraints ->
val placeables = measurable.map { it.measure(constraints) }
val placeableMaxWidth = placeables.maxOfOrNull { it.width } ?: 0
val placeableMaxHeight = placeables.maxOfOrNull { it.height } ?: 0
layout(placeableMaxWidth, placeableMaxHeight) {
if (placeables.isNotEmpty()) {
placeables.forEach { it.place(0, 0) }
isEmptyContent = false
}
}
}
if (!isEmptyContent) content?.invoke()
}
@Composable
fun CenterRow(
modifier: Modifier = Modifier,
horizontalArrangement: Arrangement.Horizontal = Arrangement.Start,
content: @Composable RowScope.() -> Unit
) = Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = horizontalArrangement,
modifier = modifier
) {
content()
}
Run the program, click on the ListItem and it crashes
Compose version: 1.7.0-beta04
ro...@gmail.com <ro...@gmail.com> #11
I found smaller reproducible code.
Box(
modifier = Modifier.clickable(enabled = false, onClick = { })
) {
BasicTextField(
state = textState,
decorator = {
it()
}
)
}
kl...@google.com <kl...@google.com> #12
Neither of those snippets reproduce the bug for me on an API 33 emulator on tip-of-tree. What devices are you using?
co...@protonmail.com <co...@protonmail.com> #13
I'm getting a similar crash. I have a small app (5 users) and it's happening to 2 users. i cant repro. the app is pretty small since im in beta at the moment.
Fatal Exception: java.lang.IllegalStateException: Cannot obtain node coordinator. Is the Modifier.Node attached?
at androidx.compose.ui.internal.InlineClassHelperKt.throwIllegalStateExceptionForNullCheck(InlineClassHelper.kt:30)
at androidx.compose.ui.node.DelegatableNodeKt.requireLayoutNode(DelegatableNode.kt:1389)
at androidx.compose.ui.node.DelegatableNodeKt.requireOwner(DelegatableNode.kt)
at androidx.compose.ui.Modifier$Node.getCoroutineScope(Modifier.kt:207)
at androidx.compose.foundation.FocusableNode.onFocusEvent(Focusable.kt:221)
at androidx.compose.foundation.AbstractClickableNode.onFocusEvent(Clickable.kt:1102)
at androidx.compose.ui.focus.FocusEventModifierNodeKt.refreshFocusEventNodes(FocusEventModifierNode.kt:68)
at androidx.compose.ui.focus.FocusTransactionsKt.performRequestFocus(FocusTransactions.kt:82)
at androidx.compose.ui.focus.FocusTransactionsKt.requestFocus-Mxy_nc0(FocusTransactions.kt:50)
at androidx.compose.ui.platform.AndroidComposeView$keyInputModifier$1$focusWasMovedOrCancelled$1.invoke(AndroidComposeView.java:343)
at androidx.compose.ui.platform.AndroidComposeView$keyInputModifier$1$focusWasMovedOrCancelled$1.invoke(AndroidComposeView.java:342)
at androidx.compose.ui.focus.FocusOwnerImpl$focusSearch$1.invoke(FocusOwnerImpl.java:250)
at androidx.compose.ui.focus.FocusOwnerImpl$focusSearch$1.invoke(FocusOwnerImpl.java:246)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt.searchChildren-4C6V_qg(TwoDimensionalFocusSearch.kt:185)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt.generateAndSearchChildren-4C6V_qg(TwoDimensionalFocusSearch.kt)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt.twoDimensionalFocusSearch-sMXa3k8(TwoDimensionalFocusSearch.kt:88)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt.twoDimensionalFocusSearch-sMXa3k8(TwoDimensionalFocusSearch.kt:77)
at androidx.compose.ui.focus.FocusTraversalKt.focusSearch-0X8WOeE(FocusTraversal.kt:109)
at androidx.compose.ui.focus.FocusOwnerImpl.focusSearch-ULY8qGw(FocusOwnerImpl.kt:246)
at androidx.compose.ui.platform.AndroidComposeView$keyInputModifier$1.invoke-ZmokQxo(AndroidComposeView.java:342)
at androidx.compose.ui.platform.AndroidComposeView$keyInputModifier$1.invoke(AndroidComposeView.java:334)
at androidx.compose.ui.input.key.KeyInputNode.onKeyEvent-ZmokQxo(KeyInputModifier.kt:80)
at androidx.compose.ui.focus.FocusOwnerImpl.dispatchKeyEvent-YhN2O0w(FocusOwnerImpl.kt:273)
at androidx.compose.ui.focus.FocusOwner.dispatchKeyEvent-YhN2O0w$default(FocusOwner.java:142)
at androidx.compose.ui.platform.AndroidComposeView.dispatchKeyEvent(AndroidComposeView.android.kt:950)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
at com.android.internal.policy.DecorView.superDispatchKeyEvent(DecorView.java:486)
at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1880)
at android.app.Activity.dispatchKeyEvent(Activity.java:4159)
at androidx.core.app.ComponentActivity.superDispatchKeyEvent(ComponentActivity.kt:103)
at androidx.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:85)
at androidx.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.kt:117)
at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:400)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:6377)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6243)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5725)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5782)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5748)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5913)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5756)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5970)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5729)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5782)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5748)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5756)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5729)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5782)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5748)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5946)
at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:6104)
at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:3159)
at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2723)
at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2714)
at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:3136)
at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:154)
at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
at android.os.MessageQueue.next(MessageQueue.java:335)
at android.os.Looper.loopOnce(Looper.java:161)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7870)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1009)
What's most interesting is that i dont have any text input in my app. my app is essentially two buttons, and a lazylist.
co...@protonmail.com <co...@protonmail.com> #14
Not sure if it's actually helpful. but it seems to only happen on Pixel 6 Pro. but with only 5 users. that could be a red herring
br...@adesso-mobile.de <br...@adesso-mobile.de> #15
At least the disabled click listener in the parent an a custom TextFieldDecorator are present as well.
Device: Pixel 8, Android 14.
an...@sigma.software <an...@sigma.software> #16
Similar crash:
Fatal Exception: java.lang.IllegalStateException: Cannot read CompositionLocal because the Modifier node is not currently attached.
at androidx.compose.ui.node.CompositionLocalConsumerModifierNodeKt.currentValueOf(CompositionLocalConsumerModifierNode.kt:72)
at com.my.package.RequestAutofillOnFocusedNode.onFocusEvent(AutofillModifier.kt:171)
at androidx.compose.ui.focus.FocusInvalidationManager$invalidateNodes$1.invoke(FocusInvalidationManager.kt:79)
at androidx.compose.ui.focus.FocusInvalidationManager$invalidateNodes$1.invoke(FocusInvalidationManager.kt:57)
at androidx.compose.ui.platform.AndroidComposeView.onEndApplyChanges(AndroidComposeView.android.kt:742)
at androidx.compose.ui.node.UiApplier.onEndChanges(UiApplier.android.kt:48)
at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:978)
at androidx.compose.runtime.CompositionImpl.applyChanges(Composition.kt:1005)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:639)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:551)
at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:41)
at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.java:109)
at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.java:41)
at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:69)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1404)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1415)
at android.view.Choreographer.doCallbacks(Choreographer.java:1015)
at android.view.Choreographer.doFrame(Choreographer.java:941)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1389)
at android.os.Handler.handleCallback(Handler.java:959)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loopOnce(Looper.java:232)
at android.os.Looper.loop(Looper.java:317)
at android.app.ActivityThread.main(ActivityThread.java:8592)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:878)
lp...@google.com <lp...@google.com> #17
R.e AutofillModifier
- make sure to guard your composition local read with if (isAttached)
, since you are currently trying to query this when the node is unattached.
For the other issues in this bug, this is no longer an issue in 1.8, and we are looking at backporting a fix for this to 1.7
ap...@google.com <ap...@google.com> #18
Branch: androidx-main
commit b15d0eefd3ecc892ff01bfe532a41e9c421acf51
Author: Louis Pullen-Freilich <lpf@google.com>
Date: Wed Aug 14 17:11:58 2024
Adds regression test for a disabled clickable crashing on focus event
This was fixed as a side effect of refactoring clickable and focusable to directly delegate to a FocusTargetNode.
Bug:
Test: ClickableTest
Change-Id: I717676e75fe31807744834d0cfa1570cd2221ac7
M compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/ClickableTest.kt
na...@google.com <na...@google.com> #20
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.compose.foundation:foundation:1.7.0-rc01
androidx.compose.foundation:foundation-android:1.7.0-rc01
androidx.compose.foundation:foundation-desktop:1.7.0-rc01
sa...@gmail.com <sa...@gmail.com> #21
We are still seeing the crash in our app after updating to 1.7.2 (BOM 2024.09.02). Ours is a View interop case. (Two text fields and a Compose Button in XML layout). Clicking on IME done crashes the app with:
Fatal Exception: java.lang.IllegalStateException: focus search returned a view that wasn't able to take focus!
at android.widget.TextView.onKeyUp(TextView.java:10271)
at android.view.KeyEvent.dispatch(KeyEvent.java:3175)
at android.view.View.dispatchKeyEvent(View.java:15781)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1987)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1987)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1987)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1987)
at android.widget.ScrollView.dispatchKeyEvent(ScrollView.java:591)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1987)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1987)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1987)
at android.widget.ScrollView.dispatchKeyEvent(ScrollView.java:591)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1987)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1987)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1987)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1987)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1987)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1987)
at com.android.internal.policy.DecorView.superDispatchKeyEvent(DecorView.java:669)
at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:2010)
at android.app.Activity.dispatchKeyEvent(Activity.java:4595)
at androidx.core.app.ComponentActivity.superDispatchKeyEvent(ComponentActivity.kt:103)
at androidx.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:85)
at androidx.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.kt:117)
at androidx.appcompat.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:604)
at androidx.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59)
at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.java:3397)
at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:515)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:7822)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:7679)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7058)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:7125)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:7086)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:7259)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:7094)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:7316)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7062)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:7125)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:7086)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:7094)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7062)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:10383)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:10334)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:10295)
at android.view.ViewRootImpl$ViewRootHandler.handleMessageImpl(ViewRootImpl.java:6803)
at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:6667)
at android.os.Handler.dispatchMessage(Handler.java:108)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:328)
at android.app.ActivityThread.main(ActivityThread.java:9239)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:594)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
lp...@google.com <lp...@google.com> #22
This seems like a different issue, please file a new bug (with sample code if you have it)
Description
Jetpack Compose version: 1.7 snapshot 11251205
Jetpack Compose component(s) used: many
Android Studio Build:Android Studio Iguana | 2023.2.1 Canary 18
Kotlin version: 1.9.21
I do not have yet a repro and moving to holidays but reporting this new crash that I just get on Crashlytics.
The device was probably connected to AS via Running device so it's possible the keyevent was from keyboard on AS. I did not see the crash so no idea. If you need things to test I'll check when back from holidays.