Status Update
Comments
ja...@gmail.com <ja...@gmail.com> #2
Project: platform/frameworks/support
Branch: androidx-main
Author: Louis Pullen-Freilich <
Link:
Adds OverscrollEffect#withoutDrawing and OverscrollEffect#withoutEventHandling
Expand for full commit details
Adds OverscrollEffect#withoutDrawing and OverscrollEffect#withoutEventHandling
These APIs allow overscroll to have events dispatched to it by one component, and rendered in a separate component.
Fixes: b/266550551
Fixes: b/204650733
Fixes: b/255554340
Fixes: b/229537244
Test: OverscrollTest
Relnote: "Adds OverscrollEffect#withoutDrawing and OverscrollEffect#withoutEventHandling APIs - these APIs create a wrapped instance of the provided overscroll effect that doesn't draw / handle events respectively, which allows for rendering overscroll in a separate component from the component that is dispatching events. For example, disabling drawing the overscroll inside a lazy list, and then drawing the overscroll separately on top / elsewhere."
Change-Id: Idbb3d91546b49c1987a041f959bce4b2b09a9f61
Files:
- M
compose/foundation/foundation/api/current.txt
- M
compose/foundation/foundation/api/restricted_current.txt
- M
compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/OverscrollDemo.kt
- M
compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/OverscrollSample.kt
- M
compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/OverscrollTest.kt
- M
compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Overscroll.kt
Hash: f64e25b7a473c757d080521e7dd97b3f6670f60d
Date: Fri Nov 01 18:43:56 2024
ja...@gmail.com <ja...@gmail.com> #3
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.compose.foundation:foundation:1.8.0-alpha06
androidx.compose.foundation:foundation-android:1.8.0-alpha06
androidx.compose.foundation:foundation-jvmstubs:1.8.0-alpha06
androidx.compose.foundation:foundation-linuxx64stubs:1.8.0-alpha06
ju...@google.com <ju...@google.com> #4
Same exception in
ap...@google.com <ap...@google.com> #5
Branch: androidx-main
commit ad4923c22c0a95a5893ce7280a23e03a045a7f23
Author: Justin Ghan <justinghan@google.com>
Date: Fri Dec 08 16:16:59 2023
Prevent NPE in CursorAnchorInfoController
Bug: 307909663
Bug: 313010266
Test: TextInputServiceAndroidCursorAnchorInfoTest
Change-Id: I5030db814c4b696334b8813fa24e37b8ba148e32
M compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text/input/internal/CursorAnchorInfoController.android.kt
ju...@google.com <ju...@google.com>
ma...@marcardar.com <ma...@marcardar.com> #6
I'm seeing this in compose-bom=2024.02.00. Is that expected?
ju...@google.com <ju...@google.com> #7
The 2024.02.00 BOM contains the Compose 1.6.1 libraries which does not include the fix. The fix is in the 1.7 (currently in alpha).
ga...@gmail.com <ga...@gmail.com> #8
Are there any workarounds for this or known ways to repro it? This is one of our top crashes. It happens hundreds of times per day for us. The actual top crash in our app is the one fixed
To be frank, this has been a very frustrating experience for our team. BOM 2024.01.00 had major crashes in Row layouts which were fixed by 2024.02.00 but 2024.02.00 introduced multiple high volume crashes in text.
ma...@marcardar.com <ma...@marcardar.com> #9
More generally, are there any efforts to improve the developer experience regarding crashes like this? In the legacy View days, the stacktrace would typically lead you directly to which View was involved in the crash and often you could add a try-catch to mitigate the problem while waiting for a library update. Neither identification of the part of code, nor mitigation is possible (in general) in Compose. A user attempting to drag some highlighted text, for example, shouldn't crash the app.
lv...@hubspot.com <lv...@hubspot.com> #10
Are there any plans to fix that in the current stable versions as well?
ap...@google.com <ap...@google.com> #11
Branch: androidx-main
commit 22723ef36d208e2b3fb43e9fce82093cbfe5255a
Author: Justin Ghan <justinghan@google.com>
Date: Tue Apr 09 10:12:48 2024
Backport CursorAnchorInfoController fix to unused version
aosp/2865849 fixed a NPE in CursorAnchorInfoController in foundation.
This fix is backported to the old CursorAnchorInfoController in ui which
was used in 1.6.
Bug: 313010266
Test: TextInputServiceAndroidCursorAnchorInfoTest
Change-Id: Ia3326bf5a6a1860f983c155c9f1a68a3c2c9eb8e
M compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/text/input/CursorAnchorInfoController.android.kt
ju...@google.com <ju...@google.com> #12
The fix will be in the upcoming 1.6.6. Sorry the fix took a while to get to the stable release.
na...@google.com <na...@google.com> #13
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.compose.ui:ui:1.6.6
androidx.compose.ui:ui-android:1.6.6
androidx.compose.ui:ui-desktop:1.6.6
androidx.compose.ui:ui:1.7.0-alpha07
androidx.compose.ui:ui-android:1.7.0-alpha07
androidx.compose.ui:ui-desktop:1.7.0-alpha07
se...@branch.co <se...@branch.co> #14
It seems like the issue has not been completely fixed. We tried out BoM 2024.04.01, which contains ui 1.6.6, and unfortunately the crash persists and we had no alternative than to roll the BoM version back to 2023.10.01 once again. This is the new exception:
CursorAnchorInfoController:150 androidx.compose.ui.text.input.CursorAnchorInfoController.updateCursorAnchorInfo
CursorAnchorInfoController:119 androidx.compose.ui.text.input.CursorAnchorInfoController.updateTextLayoutResult
TextInputServiceAndroid:434 androidx.compose.ui.text.input.TextInputServiceAndroid.updateTextLayoutResult
TextInputSession:215 androidx.compose.ui.text.input.TextInputSession.updateTextLayoutResult
TextFieldDelegate:202 androidx.compose.foundation.text.TextFieldDelegate$Companion.updateTextLayoutResult$foundation_release
CoreTextFieldKt:438 androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$onPositionedModifier$1.invoke
CoreTextFieldKt:415 androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$onPositionedModifier$1.invoke
OnGloballyPositionedNode:78 androidx.compose.ui.layout.OnGloballyPositionedNode.onGloballyPositioned
LayoutNode:1100 androidx.compose.ui.node.LayoutNode.dispatchOnPositionedCallbacks$ui_release
OnPositionedDispatcher:72 androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy
OnPositionedDispatcher:76 androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy
OnPositionedDispatcher:76 androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy
OnPositionedDispatcher:76 androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy
OnPositionedDispatcher:63 androidx.compose.ui.node.OnPositionedDispatcher.dispatch
MeasureAndLayoutDelegate:653 androidx.compose.ui.node.MeasureAndLayoutDelegate.dispatchOnPositionedCallbacks
MeasureAndLayoutDelegate:649 androidx.compose.ui.node.MeasureAndLayoutDelegate.dispatchOnPositionedCallbacks$default
AndroidComposeView:975 androidx.compose.ui.platform.AndroidComposeView.measureAndLayout
Owner:228 androidx.compose.ui.node.Owner.measureAndLayout$default
AndroidComposeView:1224 androidx.compose.ui.platform.AndroidComposeView.dispatchDraw
View.java:24206 android.view.View.draw
View.java:23021 android.view.View.updateDisplayListIfDirty
ViewGroup.java:4628 android.view.ViewGroup.recreateChildDisplayList
ViewGroup.java:4601 android.view.ViewGroup.dispatchGetDisplayList
View.java:22972 android.view.View.updateDisplayListIfDirty
ViewGroup.java:4628 android.view.ViewGroup.recreateChildDisplayList
ViewGroup.java:4601 android.view.ViewGroup.dispatchGetDisplayList
View.java:22972 android.view.View.updateDisplayListIfDirty
ViewGroup.java:4628 android.view.ViewGroup.recreateChildDisplayList
ViewGroup.java:4601 android.view.ViewGroup.dispatchGetDisplayList
View.java:22972 android.view.View.updateDisplayListIfDirty
ViewGroup.java:4628 android.view.ViewGroup.recreateChildDisplayList
ViewGroup.java:4601 android.view.ViewGroup.dispatchGetDisplayList
View.java:22972 android.view.View.updateDisplayListIfDirty
ViewGroup.java:4628 android.view.ViewGroup.recreateChildDisplayList
ViewGroup.java:4601 android.view.ViewGroup.dispatchGetDisplayList
View.java:22972 android.view.View.updateDisplayListIfDirty
ViewGroup.java:4628 android.view.ViewGroup.recreateChildDisplayList
ViewGroup.java:4601 android.view.ViewGroup.dispatchGetDisplayList
View.java:22972 android.view.View.updateDisplayListIfDirty
ThreadedRenderer.java:713 android.view.ThreadedRenderer.updateViewTreeDisplayList
ThreadedRenderer.java:719 android.view.ThreadedRenderer.updateRootDisplayList
ThreadedRenderer.java:821 android.view.ThreadedRenderer.draw
ViewRootImpl.java:5409 android.view.ViewRootImpl.draw
ViewRootImpl.java:5097 android.view.ViewRootImpl.performDraw
ViewRootImpl.java:4203 android.view.ViewRootImpl.performTraversals
ViewRootImpl.java:2704 android.view.ViewRootImpl.doTraversal
ViewRootImpl.java:10039 android.view.ViewRootImpl$TraversalRunnable.run
Choreographer.java:1552 android.view.Choreographer$CallbackRecord.run
Choreographer.java:1561 android.view.Choreographer$CallbackRecord.run
Choreographer.java:1117 android.view.Choreographer.doCallbacks
Choreographer.java:1002 android.view.Choreographer.doFrame
Choreographer.java:1535 android.view.Choreographer$FrameDisplayEventReceiver.run
Handler.java:958 android.os.Handler.handleCallback
Handler.java:99 android.os.Handler.dispatchMessage
Looper.java:257 android.os.Looper.loopOnce
Looper.java:368 android.os.Looper.loop
ActivityThread.java:8821 android.app.ActivityThread.main
Method.java:-2 java.lang.reflect.Method.invoke
RuntimeInit.java:572 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run
ZygoteInit.java:1049 com.android.internal.os.ZygoteInit.main
ju...@google.com <ju...@google.com> #15
Thank for reporting.
se...@branch.co <se...@branch.co> #16
We do not know how to reproduce this issue, unfortunately. Which also seems the case of the original commenter. Also, the stacktrace does not really help because it does not mention anything about our code.
There is one interesting thing though, this is only happening on Android 14 but does not seem to be happening on Pixel devices. We have a considerable user base on Pixel devices running Android 14, but the crash reports do not mention any Pixel device. We have crashes for these manufacturers: Samsung, OPPO, OnePlus, Vivo, Xiaomi, and Realme. Hope that helps!
ja...@gmail.com <ja...@gmail.com> #17
We do not know how to reproduce this issue, unfortunately. Which also seems the case of the original commenter.
That's me, and yep: no reproduction path still. I'm in the process of releasing an update with Compose 2024.04.01 and will post an update on how the crashes develop.
There is one interesting thing though, this is only happening on Android 14 but does not seem to be happening on Pixel devices.
Also 100% Android 14 here, according to Crashlytics for the ~500 crashes every month for this issue. I do see Google in the list. Just at 2% of the crashes but it's there.
qu...@gmail.com <qu...@gmail.com> #18
lu...@gmail.com <lu...@gmail.com> #19
ju...@google.com <ju...@google.com> #20
We're still investigating this issue. If anyone has information on reproducing the crash, please share here.
ma...@gmail.com <ma...@gmail.com> #21
it...@gmail.com <it...@gmail.com> #22
Any updates? I am having the same crash with latest compose bom
jetpackComposeBom = "2024.05.00"
androidx.compose.ui.text.input.CursorAnchorInfoController.updateCursorAnchorInfo (CursorAnchorInfoController.android.kt:150)
androidx.compose.ui.text.input.CursorAnchorInfoController.updateTextLayoutResult (CursorAnchorInfoController.java:119)
androidx.compose.ui.text.input.TextInputServiceAndroid.updateTextLayoutResult (TextInputServiceAndroid.android.kt:434)
androidx.compose.ui.text.input.TextInputSession.updateTextLayoutResult (TextInputSession.java:215)
androidx.compose.foundation.text.TextFieldDelegate$Companion.updateTextLayoutResult$foundation_release (TextFieldDelegate.java:202)
androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$onPositionedModifier$1.invoke (CoreTextField.kt:438)
androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$onPositionedModifier$1.invoke (CoreTextField.kt:415)
androidx.compose.ui.layout.OnGloballyPositionedNode.onGloballyPositioned (OnGloballyPositionedModifier.kt:78)
androidx.compose.ui.node.LayoutNode.dispatchOnPositionedCallbacks$ui_release (LayoutNode.java:1100)
androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy (OnPositionedDispatcher.kt:72)
androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy (OnPositionedDispatcher.kt:76)
androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy (OnPositionedDispatcher.kt:76)
androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy (OnPositionedDispatcher.kt:76)
androidx.compose.ui.node.MeasureAndLayoutDelegate.<init> (MeasureAndLayoutDelegate.kt:63)
androidx.compose.ui.node.OnPositionedDispatcher.dispatch (OnPositionedDispatcher.java:63)
androidx.compose.ui.node.MeasureAndLayoutDelegate.dispatchOnPositionedCallbacks (MeasureAndLayoutDelegate.kt:653)
androidx.compose.ui.platform.AndroidComposeView.updatePositionCacheAndDispatch (AndroidComposeView.android.kt:1121)
androidx.compose.ui.platform.AndroidComposeView.onLayout (AndroidComposeView.android.kt:1095)
android.view.View.layout (View.java:25754)
android.view.ViewGroup.layout (ViewGroup.java:6831)
androidx.compose.ui.platform.AbstractComposeView.internalOnLayout$ui_release (ComposeView.android.kt:322)
androidx.compose.ui.platform.AbstractComposeView.onLayout (ComposeView.android.kt:313)
android.view.View.layout (View.java:25754)
android.view.ViewGroup.layout (ViewGroup.java:6831)
android.widget.FrameLayout.layoutChildren (FrameLayout.java:332)
android.widget.FrameLayout.onLayout (FrameLayout.java:270)
android.view.View.layout (View.java:25754)
android.view.ViewGroup.layout (ViewGroup.java:6831)
android.widget.LinearLayout.setChildFrame (LinearLayout.java:1891)
android.widget.LinearLayout.layoutVertical (LinearLayout.java:1729)
android.widget.LinearLayout.onLayout (LinearLayout.java:1638)
android.view.View.layout (View.java:25754)
android.view.ViewGroup.layout (ViewGroup.java:6831)
android.widget.FrameLayout.layoutChildren (FrameLayout.java:332)
android.widget.FrameLayout.onLayout (FrameLayout.java:270)
android.view.View.layout (View.java:25754)
android.view.ViewGroup.layout (ViewGroup.java:6831)
android.widget.LinearLayout.setChildFrame (LinearLayout.java:1891)
android.widget.LinearLayout.layoutVertical (LinearLayout.java:1729)
android.widget.LinearLayout.onLayout (LinearLayout.java:1638)
android.view.View.layout (View.java:25754)
android.view.ViewGroup.layout (ViewGroup.java:6831)
android.widget.FrameLayout.layoutChildren (FrameLayout.java:332)
android.widget.FrameLayout.onLayout (FrameLayout.java:270)
com.android.internal.policy.DecorView.onLayout (DecorView.java:1090)
android.view.View.layout (View.java:25754)
android.view.ViewGroup.layout (ViewGroup.java:6831)
android.view.ViewRootImpl.performLayout (ViewRootImpl.java:5236)
android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:4502)
android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:3275)
android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:11256)
android.view.Choreographer$CallbackRecord.run (Choreographer.java:1650)
android.view.Choreographer$CallbackRecord.run (Choreographer.java:1659)
android.view.Choreographer.doCallbacks (Choreographer.java:1129)
android.view.Choreographer.doFrame (Choreographer.java:1055)
android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:1622)
android.os.Handler.handleCallback (Handler.java:958)
android.os.Handler.dispatchMessage (Handler.java:99)
android.os.Looper.loopOnce (Looper.java:230)
android.os.Looper.loop (Looper.java:319)
android.app.ActivityThread.main (ActivityThread.java:8913)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:608)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1103)
it...@gmail.com <it...@gmail.com> #23
I found a workaround fix. For me the bug was happening in this order:
- Open a activity with Input Field, user would enter something
- Then user would click to select image from gallery and once new activity was started app crashed.
What helped me is calling focusManager.clearFocus()
before navigating to image cropper.
pe...@meta.com <pe...@meta.com> #24
lo...@gmail.com <lo...@gmail.com> #25
ja...@gmail.com <ja...@gmail.com> #26
This is my app's biggest crash nowadays. 181x over 64 users in the last week, currently on Compose 2024.06.00.
No reproduction path yet, but one thing I noticed is that it happens as follows:
- User is on screen A
- User navigates to screen B (started with
startActivityForResult()
) or C (started from anActivityResultLauncher
) - User returns to screen A: crash
A is a fully Compose activity. B in my case is my own LoginActivity
(with XML layout). In this case, this screen automatically launches immediately upon going back to the app's stack with screen A open. Depending on how quick autofocus happens, the user might have focus in a text field.
C is a third-party CropImageActivity
(from CanHub, also XML layout). In this case, the user will have been on this screen for some time already (with focus on text, as that's the only way to start the cropper screen). Interestingly enough,
I've seen it happen myself a few times, but I couldn't reproduce it or pinpoint a reason. Since it gets triggered from if (state.hasFocus)
.. seems like it's a timing issue between cursorAnchorInfoController.invalidate()
(from updateState()
) and CoreTextField
's onGloballyPositioned
modifier calling TextFieldDelegate.updateTextLayoutResult
.
se...@google.com <se...@google.com> #27
Thank you for the debugging info!
se...@google.com <se...@google.com> #28
Also if anyone else reading this has more debugging info they can share, we're really scratching our heads on this one and any insights would be greatly appreciated!
se...@branch.co <se...@branch.co> #29
We do have an image cropping functionality that could be involved in the crash. Unfortunately we are stuck at BoM 2023.10.01 as newer versions of the BoM just cause a lot of the mentioned crashes. Because of that, and our crash logs retention period, I cannot confirm confirm if the image cropping functionality is indeed involved in the crash or not.
al...@gmail.com <al...@gmail.com> #30
I could reproduce the issue too. First of all I wrote a simplest app
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MyApplicationTheme {
Surface(modifier = Modifier.fillMaxSize()) {
Greeting(
name = "Android",
modifier = Modifier
)
}
}
}
}
}
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
val text = remember { mutableStateOf("") }
Column(modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally) {
OutlinedTextField(value = text.value, onValueChange = { text.value = it })
Text(
text = "Hello $name!",
modifier = modifier
)
}
}
To reproduce the issue I do the following steps. I click on TextField, enter a couple of symbols and then I block the phone(with Power button) and unblock it again(with fingerprint). I repeat blocking and unblocking and earlier or later the NPE occurs. I tried to do that on two phones. Huawei P20 Pro and Xiaomi 13T Pro. The NPE occurs only on Xiaomi phone. On Huwei everything works well.
Maybe is there any workaround ?
se...@google.com <se...@google.com> #31
Thanks for the repro note!
ju...@google.com <ju...@google.com> #32
Alex, I have a few follow up questions about your reproduction steps.
- Could you let us know which keyboard and language you were using on the Xiaomi phone?
- Does the issue reproduce with a debug version of your test app (i.e. no
isMinifyEnabled
)? - The reproduction steps seem almost identical for this issue, and
. Is the only difference that the text field is non-empty to reproduce this stack trace, and empty to reproduce the stack trace inissue 343638941 ?issue 343638941
Thanks for your relp!
al...@gmail.com <al...@gmail.com> #33
I tested with debug build. isMinifyEnabled is false
I got the stack trace from this issue. Regardless of whether the text field is empty or non-empty
se...@branch.co <se...@branch.co> #34
Can someone confirm if this issue is still occurring in Compose BoM 2024.09.00+ (that provides Compose UI 1.7.0+)?
al...@airbnb.com <al...@airbnb.com> #35
With Compose UI 1.7.0 we're encountering this stack trace that was closed as a duplicate of this bug:
This is only happening on Android 14 devices.
java.lang.NullPointerException: Attempt to read from field 'float a3.d.ı' on a null object reference in method 'void y1.z.ı()'
at androidx.compose.foundation.text.input.internal.LegacyCursorAnchorInfoController.updateCursorAnchorInfo(LegacyCursorAnchorInfoController:141)
at androidx.compose.foundation.text.input.internal.LegacyCursorAnchorInfoController.updateTextLayoutResult(LegacyCursorAnchorInfoController:115)
at androidx.compose.foundation.text.input.internal.LegacyTextInputMethodRequest.updateTextLayoutResult(LegacyTextInputMethodRequest:403)
at androidx.compose.foundation.text.input.internal.AndroidLegacyPlatformTextInputServiceAdapter.updateTextLayoutResult(AndroidLegacyPlatformTextInputServiceAdapter:180)
at androidx.compose.ui.text.input.TextInputSession.updateTextLayoutResult(TextInputSession:224)
at androidx.compose.foundation.text.TextFieldDelegate$Companion.updateTextLayoutResult$foundation_release(TextFieldDelegate:252)
at androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$onPositionedModifier$1$1.invoke(CoreTextFieldKt:449)
at androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$onPositionedModifier$1$1.invoke(CoreTextFieldKt:426)
at androidx.compose.ui.layout.OnGloballyPositionedNode.onGloballyPositioned(OnGloballyPositionedNode:78)
at androidx.compose.ui.node.LayoutNode.dispatchOnPositionedCallbacks$ui_release(LayoutNode:1176)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher:76)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher:80)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher:80)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher:80)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher:80)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher:80)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher:80)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher:80)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher:80)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher:80)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher:80)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher:80)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher:80)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher:80)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher:80)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher:80)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher:80)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher:80)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher:80)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher:80)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatch(OnPositionedDispatcher:67)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.dispatchOnPositionedCallbacks(MeasureAndLayoutDelegate:715)
at androidx.compose.ui.platform.AndroidComposeView.updatePositionCacheAndDispatch(AndroidComposeView:1432)
at androidx.compose.ui.platform.AndroidComposeView.onLayout(AndroidComposeView:1406)
at android.view.View.layout(View.java:25310)
at android.view.ViewGroup.layout(ViewGroup.java:6515)
at androidx.compose.ui.platform.AbstractComposeView.internalOnLayout$ui_release(AbstractComposeView:329)
at androidx.compose.ui.platform.AbstractComposeView.internalOnLayout$ui_release(AbstractComposeView:27)
at androidx.compose.ui.platform.AbstractComposeView.onLayout(AbstractComposeView:320)
at android.view.View.layout(View.java:25310)
at android.view.ViewGroup.layout(ViewGroup.java:6515)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
at android.view.View.layout(View.java:25310)
at android.view.ViewGroup.layout(ViewGroup.java:6515)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1891)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1729)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1638)
at android.view.View.layout(View.java:25310)
at android.view.ViewGroup.layout(ViewGroup.java:6515)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
at com.android.internal.policy.DecorView.onLayout(DecorView.java:876)
at android.view.View.layout(View.java:25310)
at android.view.ViewGroup.layout(ViewGroup.java:6515)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:4867)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:4176)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2995)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:10331)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1594)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1603)
at android.view.Choreographer.doCallbacks(Choreographer.java:1125)
at android.view.Choreographer.doFrame(Choreographer.java:1030)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1567)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:224)
at android.os.Looper.loop(Looper.java:318)
at android.app.ActivityThread.main(ActivityThread.java:8763)
at java.lang.reflect.Method.invoke(Method.java:-2)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:561)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
ja...@gmail.com <ja...@gmail.com> #36
Can someone confirm if this issue is still occurring in Compose BoM 2024.09.00+ (that provides Compose UI 1.7.0+)?
Can confirm this issue still occurs on Compose BoM 2024.09.02 (with Compose Foundation 1.7.2).
java.lang.NullPointerException
at androidx.compose.foundation.text.input.internal.LegacyCursorAnchorInfoController.updateCursorAnchorInfo(LegacyCursorAnchorInfoController.android.kt:141)
at androidx.compose.foundation.text.input.internal.LegacyCursorAnchorInfoController.updateTextLayoutResult(LegacyCursorAnchorInfoController.android.kt:115)
at androidx.compose.foundation.text.input.internal.LegacyTextInputMethodRequest.updateTextLayoutResult(LegacyPlatformTextInputServiceAdapter.android.kt:403)
at androidx.compose.foundation.text.input.internal.AndroidLegacyPlatformTextInputServiceAdapter.updateTextLayoutResult(LegacyPlatformTextInputServiceAdapter.android.kt:180)
at androidx.compose.ui.text.input.TextInputSession.updateTextLayoutResult(TextInputService.kt:224)
at androidx.compose.foundation.text.TextFieldDelegate$Companion.updateTextLayoutResult$foundation_release(TextFieldDelegate.kt:252)
at androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$onPositionedModifier$1$1.invoke(CoreTextField.kt:449)
at androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$onPositionedModifier$1$1.invoke(CoreTextField.kt:426)
at androidx.compose.ui.layout.OnGloballyPositionedNode.onGloballyPositioned(OnGloballyPositionedModifier.kt:78)
at androidx.compose.ui.node.LayoutNode.dispatchOnPositionedCallbacks$ui_release(LayoutNode.kt:1177)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher.kt:76)
so...@google.com <so...@google.com> #37
Triage: Hey Justin, looks like you've got a response to your latest comment, could you have another look please? Is P1 is still a valid priority?
ap...@google.com <ap...@google.com> #38
Project: platform/frameworks/support
Branch: androidx-main
Author: Justin Ghan <
Link:
Prevent NPE in LegacyCursorAnchorInfoController
Expand for full commit details
Prevent NPE in LegacyCursorAnchorInfoController
I haven't been able to reproduce the NPE or figure out how it might
happen, but this change should prevent the NPE and the only impact would
be potential missed CursorAnchorInfo updates to the IME (instead of
crashing).
Bug: 313010266
Test: None
Change-Id: I475c69d27d3a15ba36c13b47695086a4ec5841f2
Files:
- M
compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text/input/internal/LegacyCursorAnchorInfoController.android.kt
Hash: 0ab8f699522c4f60b091b6416ffd28b51aba6aa9
Date: Mon Sep 30 17:11:13 2024
ro...@reddit.com <ro...@reddit.com> #39
ju...@google.com <ju...@google.com> #40
We were unable to reproduce the crash or figure out how it occurs, but we have implemented a preventative fix which will be in the upcoming 1.7.4 release.
na...@google.com <na...@google.com> #41
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.compose.foundation:foundation:1.7.4
androidx.compose.foundation:foundation-android:1.7.4
androidx.compose.foundation:foundation-jvmstubs:1.7.4
androidx.compose.foundation:foundation-linuxx64stubs:1.7.4
androidx.compose.foundation:foundation:1.8.0-alpha04
androidx.compose.foundation:foundation-android:1.8.0-alpha04
androidx.compose.foundation:foundation-jvmstubs:1.8.0-alpha04
ib...@gmail.com <ib...@gmail.com> #42
ju...@google.com <ju...@google.com> #43
Could you double check the compose version? The line numbers should have changed after the fix, so I wouldn't expect the NullPointerException to still occur on line 141 of LegacyCursorAnchorInfoController.android.kt.
ma...@gmail.com <ma...@gmail.com> #44
ma...@thebrowser.company <ma...@thebrowser.company> #45
The current trace now in 1.8.0-alpha02
:
Exception java.lang.NullPointerException:
at androidx.compose.foundation.text.input.internal.LegacyCursorAnchorInfoController.updateCursorAnchorInfo (LegacyCursorAnchorInfoController.android.kt:144)
at androidx.compose.foundation.text.input.internal.LegacyCursorAnchorInfoController.updateTextLayoutResult (LegacyCursorAnchorInfoController.java:117)
at androidx.compose.foundation.text.input.internal.LegacyTextInputMethodRequest.updateTextLayoutResult (LegacyTextInputMethodRequest.java:411)
at androidx.compose.foundation.text.input.internal.AndroidLegacyPlatformTextInputServiceAdapter.updateTextLayoutResult (LegacyPlatformTextInputServiceAdapter.android.kt:184)
ib...@gmail.com <ib...@gmail.com> #46
I've updated Compose to 1.8.0-alpha07
, and I can see a null return in the updateCursorAnchorInfo
. However, the crashes are still being reported.
Based on the events, I can tell this happens during a hot start about 98% of the time. The last recorded event is firebase_screen_class: AdActivity.
- Android 14 = 100%
- Samsung = 90-95%
Fatal Exception: java.lang.NullPointerException:
at androidx.compose.foundation.text.input.internal.LegacyCursorAnchorInfoController.updateCursorAnchorInfo(LegacyCursorAnchorInfoController.android.kt:141)
at androidx.compose.foundation.text.input.internal.LegacyCursorAnchorInfoController.updateTextLayoutResult(LegacyCursorAnchorInfoController.java:115)
at androidx.compose.foundation.text.input.internal.LegacyTextInputMethodRequest.updateTextLayoutResult(LegacyTextInputMethodRequest.java:403)
at androidx.compose.foundation.text.input.internal.AndroidLegacyPlatformTextInputServiceAdapter.updateTextLayoutResult(LegacyPlatformTextInputServiceAdapter.android.kt:180)
at androidx.compose.ui.text.input.TextInputSession.updateTextLayoutResult(TextInputSession.java:220)
at androidx.compose.foundation.text.TextFieldDelegate$Companion.updateTextLayoutResult$foundation_release(TextFieldDelegate.java:252)
at androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$onPositionedModifier$1$1.invoke(CoreTextField.kt:449)
at androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$onPositionedModifier$1$1.invoke(CoreTextField.kt:426)
at androidx.compose.ui.layout.OnGloballyPositionedNode.onGloballyPositioned(OnGloballyPositionedModifier.kt:75)
at androidx.compose.ui.node.LayoutNode.dispatchOnPositionedCallbacks$ui_release(LayoutNode.java:1102)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher.kt:76)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher.kt:79)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy(OnPositionedDispatcher.kt:79)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatch(OnPositionedDispatcher.kt:67)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.dispatchOnPositionedCallbacks(MeasureAndLayoutDelegate.kt:723)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.dispatchOnPositionedCallbacks$default(MeasureAndLayoutDelegate.kt:719)
at androidx.compose.ui.platform.AndroidComposeView.measureAndLayout(AndroidComposeView.android.kt:1352)
at androidx.compose.ui.node.Owner.measureAndLayout$default(Owner.java:236)
at androidx.compose.ui.platform.AndroidComposeView.dispatchDraw(AndroidComposeView.android.kt:1680)
at android.view.View.draw(View.java:25180)
...
ib...@gmail.com <ib...@gmail.com>
ju...@google.com <ju...@google.com> #47
The line numbers in the stack traces in 1.8.0-alpha04
or later.
Description
Reported in Crashlytics, 9 crashes from 8 users (install base 80k for this version). Only Android 14, so far, but I was not able to reproduce it.
Stack trace