Fixed
Status Update
Comments
je...@google.com <je...@google.com>
ha...@google.com <ha...@google.com>
[Deleted User] <[Deleted User]> #2
We see this crash (with a slightly different stack trace) as one of our most common ones as well within Google Play Console. It happens for different devices and for different Android versions. We use compose 1.1.0-rc03
.
I think the problem is that the AndroidClipboardManager.getText()
is not really thread safe and maybe the primary clip changed between hasPrimaryClip()
and clipboardManager.primaryClip!!.getItemAt(0).text.convertToAnnotatedString()
. Maybe simply using a let like clipboardManager.primaryClip?.let { getItemAt(0).text.convertToAnnotatedString() }
would fix the issue.
java.lang.NullPointerException:
at androidx.compose.ui.platform.AndroidClipboardManager.getText (AndroidClipboardManager.android.kt:65)
at androidx.compose.foundation.text.selection.TextFieldSelectionManager.showSelectionToolbar$foundation_release (TextFieldSelectionManager.kt:581)
at androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$onPositionedModifier$1.invoke (CoreTextField.kt:342)
at androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$onPositionedModifier$1.invoke (CoreTextField.kt:337)
at androidx.compose.ui.layout.OnGloballyPositionedModifierImpl.onGloballyPositioned (OnGloballyPositionedModifier.kt:58)
at androidx.compose.ui.node.LayoutNode.dispatchOnPositionedCallbacks$ui_release (LayoutNode.kt:1186)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy (OnPositionedDispatcher.kt:51)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy (OnPositionedDispatcher.kt:55)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy (OnPositionedDispatcher.kt:55)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy (OnPositionedDispatcher.kt:55)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy (OnPositionedDispatcher.kt:55)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy (OnPositionedDispatcher.kt:55)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy (OnPositionedDispatcher.kt:55)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy (OnPositionedDispatcher.kt:55)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy (OnPositionedDispatcher.kt:55)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy (OnPositionedDispatcher.kt:55)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy (OnPositionedDispatcher.kt:55)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatchHierarchy (OnPositionedDispatcher.kt:55)
at androidx.compose.ui.node.OnPositionedDispatcher.dispatch (OnPositionedDispatcher.kt:44)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.dispatchOnPositionedCallbacks (MeasureAndLayoutDelegate.kt:302)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.dispatchOnPositionedCallbacks$default (MeasureAndLayoutDelegate.kt:298)
at androidx.compose.ui.platform.AndroidComposeView.measureAndLayout (AndroidComposeView.android.kt:666)
at androidx.compose.ui.node.Owner$DefaultImpls.measureAndLayout$default (Owner.kt:182)
at androidx.compose.ui.platform.AndroidComposeView.dispatchDraw (AndroidComposeView.android.kt:846)
at android.view.View.draw (View.java:22654)
at android.view.View.updateDisplayListIfDirty (View.java:21475)
at android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4579)
at android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4552)
at android.view.View.updateDisplayListIfDirty (View.java:21425)
at android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4579)
at android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4552)
at android.view.View.updateDisplayListIfDirty (View.java:21425)
at android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4579)
at android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4552)
at android.view.View.updateDisplayListIfDirty (View.java:21425)
at android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4579)
at android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4552)
at android.view.View.updateDisplayListIfDirty (View.java:21425)
at android.view.ThreadedRenderer.updateViewTreeDisplayList (ThreadedRenderer.java:559)
at android.view.ThreadedRenderer.updateRootDisplayList (ThreadedRenderer.java:565)
at android.view.ThreadedRenderer.draw (ThreadedRenderer.java:642)
at android.view.ViewRootImpl.draw (ViewRootImpl.java:4344)
at android.view.ViewRootImpl.performDraw (ViewRootImpl.java:4054)
at android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:3312)
at android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:2114)
at android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:8581)
at android.view.Choreographer$CallbackRecord.run (Choreographer.java:975)
at android.view.Choreographer.doCallbacks (Choreographer.java:799)
at android.view.Choreographer.doFrame (Choreographer.java:734)
at android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:960)
at android.os.Handler.handleCallback (Handler.java:938)
at android.os.Handler.dispatchMessage (Handler.java:99)
at android.os.Looper.loop (Looper.java:236)
at android.app.ActivityThread.main (ActivityThread.java:7864)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:620)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1011)
si...@google.com <si...@google.com> #3
Thank you for the report. We will take a look at this as soon as possible.
se...@google.com <se...@google.com>
ap...@google.com <ap...@google.com> #4
Project: platform/frameworks/support
Branch: androidx-main
commit 7f6930f31af3bec42064a14d676339fcb011346b
Author: Sean McQuillan <seanmcq@google.com>
Date: Wed Feb 16 16:55:02 2022
Fix crash in AndroidClipboardManager
getText previously read primaryClip twice, which may become null between
calls for various reasons.
Relnote: "Fix crash caused by clipboard content while reading from
clipboard on Android."
Bug: b/197769306
Test: ./gradlew :compose:ui:ui:cAT
Change-Id: I0602066750e3fce55deceb709f8c04ee9a71dabf
M compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidClipboardManager.android.kt
M compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/AndroidClipboardManagerTest.kt
https://android-review.googlesource.com/1989811
Branch: androidx-main
commit 7f6930f31af3bec42064a14d676339fcb011346b
Author: Sean McQuillan <seanmcq@google.com>
Date: Wed Feb 16 16:55:02 2022
Fix crash in AndroidClipboardManager
getText previously read primaryClip twice, which may become null between
calls for various reasons.
Relnote: "Fix crash caused by clipboard content while reading from
clipboard on Android."
Bug:
Test: ./gradlew :compose:ui:ui:cAT
Change-Id: I0602066750e3fce55deceb709f8c04ee9a71dabf
M compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidClipboardManager.android.kt
M compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/AndroidClipboardManagerTest.kt
se...@google.com <se...@google.com>
na...@google.com <na...@google.com> #5
The following release(s) address this bug:
androidx.compose.ui:ui:1.3.0
Description
Jetpack Compose release version: 1.0.1
Android Studio Build: 2021.1.1 Canary 9
Kotlin version: 1.5.21
This is a crash report received from a OnePlus Nord device running Android 11 (build
AC2001_14_210704
).The action appears to be:
Stack trace: