Status Update
Comments
ma...@google.com <ma...@google.com> #2
Seems somewhat related to the accessibility requiring some sizes from the Layout node, over to Alex to triage properly.
In the meantime, ivanmitsura, could you provide a reproduction sample? Thanks would help us make it more actionable. Thanks
iv...@gmail.com <iv...@gmail.com> #3
so...@google.com <so...@google.com> #4
To assignee:
The code path starts from root and goes down the tree to children. By the time some child is checked, its ancestor (which was attached at the time the child was found) is already detached, causing this crash. Though I'm not sure how or why it happens.
To reporter:
I have a Samsung galaxy s6 devices, and I tested our demo app. But I didn't observe a crash.
Unfortunately, it's hard to do anything about this issue without a repro. If you happen to narrow down your code to repro sample, please add it here.
co...@appvestor.com <co...@appvestor.com> #5
Could not reproduce it though.
Fatal Exception: java.lang.RuntimeException: Unable to destroy activity {u.x.i/m.b.v.n}: java.lang.IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4605)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4623)
at android.app.ActivityThread.-wrap5(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1757)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Caused by java.lang.IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true
at androidx.compose.ui.node.LayoutNodeWrapper.getParentLayoutCoordinates(LayoutNodeWrapper.java:23)
at androidx.compose.ui.layout.LayoutCoordinatesKt.findRoot(LayoutCoordinatesKt.java:5)
at androidx.compose.ui.layout.LayoutCoordinatesKt.boundsInRoot(LayoutCoordinatesKt.java:5)
at androidx.compose.ui.semantics.SemanticsWrapper.touchBoundsInRoot(SemanticsWrapper.java:19)
at androidx.compose.ui.semantics.SemanticsNode.getTouchBoundsInRoot(SemanticsNode.java:4)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat_androidKt.java:33)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat_androidKt.java:115)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap(AndroidComposeViewAccessibilityDelegateCompat_androidKt.java:41)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.getCurrentSemanticsNodes(AndroidComposeViewAccessibilityDelegateCompat.java:10)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.createNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.java:9)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.access$createNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.java)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider.createAccessibilityNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.java:2)
at android.view.View.createAccessibilityNodeInfoInternal(View.java:7927)
at android.view.View$AccessibilityDelegate.createAccessibilityNodeInfo(View.java:27518)
at android.view.View.createAccessibilityNodeInfo(View.java:7913)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:146)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:119)
at android.view.View.onInitializeAccessibilityEventInternal(View.java:7867)
at android.view.View$AccessibilityDelegate.onInitializeAccessibilityEvent(View.java:27401)
at androidx.core.view.AccessibilityDelegateCompat.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:2)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:2)
at android.view.View.onInitializeAccessibilityEvent(View.java:7853)
at android.view.View.sendAccessibilityEventUncheckedInternal(View.java:7717)
at android.view.View$AccessibilityDelegate.sendAccessibilityEventUnchecked(View.java:27340)
at androidx.core.view.AccessibilityDelegateCompat.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:2)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:2)
at android.view.View.sendAccessibilityEventUnchecked(View.java:7700)
at android.view.ViewRootImpl$SendWindowContentChangedAccessibilityEvent.run(ViewRootImpl.java:9443)
at android.view.ViewRootImpl$SendWindowContentChangedAccessibilityEvent.runOrPost(ViewRootImpl.java:9469)
at android.view.ViewRootImpl.postSendWindowContentChangedCallback(ViewRootImpl.java:8395)
at android.view.ViewRootImpl.notifySubtreeAccessibilityStateChanged(ViewRootImpl.java:8570)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3776)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3776)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3776)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3776)
at android.view.View.notifySubtreeAccessibilityStateChangedIfNeeded(View.java:11910)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChangedIfNeeded(ViewGroup.java:3800)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChangedIfNeeded(ViewGroup.java:3796)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5456)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5403)
at android.view.ViewGroup.removeView(ViewGroup.java:5334)
at androidx.compose.ui.platform.AndroidComposeView.removeAndroidView(AndroidComposeView.java:9)
at androidx.compose.ui.viewinterop.AndroidViewHolder$layoutNode$1$4.invoke(AndroidViewHolder.java:19)
at androidx.compose.ui.viewinterop.AndroidViewHolder$layoutNode$1$4.invoke(AndroidViewHolder.java:2)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.java:56)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.java:122)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.java:122)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.java:122)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.java:122)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.java:122)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.java:122)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.java:122)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.java:122)
at androidx.compose.ui.node.LayoutNode.removeAll$ui_release(LayoutNode.java:32)
at androidx.compose.ui.node.UiApplier.onClear(UiApplier.java:6)
at androidx.compose.runtime.AbstractApplier.clear(AbstractApplier.java:10)
at androidx.compose.runtime.CompositionImpl.dispose(CompositionImpl.java:66)
at androidx.compose.ui.platform.WrappedComposition.dispose(WrappedComposition.java:29)
at androidx.compose.ui.platform.WrappedComposition.onStateChanged(WrappedComposition.java:14)
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:14)
at androidx.lifecycle.LifecycleRegistry.backwardPass(LifecycleRegistry.java:71)
at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:41)
at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:19)
at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:9)
at androidx.lifecycle.ReportFragment.dispatch(ReportFragment.java:30)
at androidx.lifecycle.ReportFragment.dispatch(ReportFragment.java:10)
at androidx.lifecycle.ReportFragment.onDestroy(ReportFragment.java:5)
at android.app.Fragment.performDestroy(Fragment.java:2870)
at android.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1424)
at android.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1549)
at android.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1611)
at android.app.FragmentManagerImpl.dispatchMoveToState(FragmentManagerImpl.java:3045)
at android.app.FragmentManagerImpl.dispatchDestroy(FragmentManagerImpl.java:3025)
at android.app.FragmentController.dispatchDestroy(FragmentController.java:245)
at android.app.Activity.performDestroy(Activity.java:7478)
at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1255)
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4592)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4623)
at android.app.ActivityThread.-wrap5(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1757)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
iv...@gmail.com <iv...@gmail.com> #6
Caused by java.lang.IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true
at androidx.compose.ui.node.LayoutNodeWrapper.getParentLayoutCoordinates(LayoutNodeWrapper.kt:168)
at androidx.compose.ui.layout.LayoutCoordinatesKt.findRoot(LayoutCoordinates.kt:158)
at androidx.compose.ui.semantics.SemanticsWrapper.touchBoundsInRoot(SemanticsWrapper.kt:88)
at androidx.compose.ui.semantics.SemanticsNode.getTouchBoundsInRoot(SemanticsNode.kt:93)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2518)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2533)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2559)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.getCurrentSemanticsNodes(AndroidComposeViewAccessibilityDelegateCompat.android.kt:228)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.createNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:337)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.access$sendScrollEventIfNeeded(AndroidComposeViewAccessibilityDelegateCompat.android.kt:113)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider.createAccessibilityNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2391)
at android.view.View.createAccessibilityNodeInfoInternal(View.java:7340)
at android.view.View$AccessibilityDelegate.createAccessibilityNodeInfo(View.java:26518)
at android.view.View.createAccessibilityNodeInfo(View.java:7326)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:146)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:119)
at android.view.View.onInitializeAccessibilityEventInternal(View.java:7280)
at android.view.View$AccessibilityDelegate.onInitializeAccessibilityEvent(View.java:26401)
at androidx.core.view.AccessibilityDelegateCompat.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:257)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:76)
at android.view.View.onInitializeAccessibilityEvent(View.java:7266)
at android.view.View.sendAccessibilityEventUncheckedInternal(View.java:7130)
at android.view.View$AccessibilityDelegate.sendAccessibilityEventUnchecked(View.java:26340)
at androidx.core.view.AccessibilityDelegateCompat.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:196)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:113)
at android.view.View.sendAccessibilityEventUnchecked(View.java:7113)
at android.view.ViewRootImpl$SendWindowContentChangedAccessibilityEvent.run(ViewRootImpl.java:9003)
at android.view.ViewRootImpl$SendWindowContentChangedAccessibilityEvent.runOrPost(ViewRootImpl.java:9029)
at android.view.ViewRootImpl.postSendWindowContentChangedCallback(ViewRootImpl.java:8071)
at android.view.ViewRootImpl.notifySubtreeAccessibilityStateChanged(ViewRootImpl.java:8246)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3736)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3736)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3736)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3736)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3736)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3736)
at android.view.View.notifySubtreeAccessibilityStateChangedIfNeeded(View.java:11270)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChangedIfNeeded(ViewGroup.java:3760)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChangedIfNeeded(ViewGroup.java:3756)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5459)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5400)
at android.view.ViewGroup.removeView(ViewGroup.java:5331)
at androidx.compose.ui.platform.AndroidComposeView.removeAndroidView(AndroidComposeView.android.kt:618)
at androidx.compose.ui.viewinterop.AndroidViewHolder$layoutNode$1$4.invoke(AndroidViewHolder.android.kt:276)
at androidx.compose.ui.viewinterop.AndroidViewHolder$layoutNode$1$4.invoke(AndroidViewHolder.android.kt:275)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:363)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:374)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:374)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:374)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:374)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:374)
at androidx.compose.ui.node.LayoutNode.removeAll$ui_release(LayoutNode.kt:269)
at androidx.compose.ui.node.UiApplier.onClear(UiApplier.android.kt:44)
at androidx.compose.runtime.AbstractApplier.clear(Applier.kt:210)
at androidx.compose.runtime.CompositionImpl.dispose(Composition.kt:495)
at androidx.compose.ui.platform.WrappedComposition.dispose(Wrapper.android.kt:171)
at androidx.compose.ui.platform.WrappedComposition.onStateChanged(Wrapper.android.kt:179)
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:354)
at androidx.lifecycle.LifecycleRegistry.backwardPass(LifecycleRegistry.java:284)
at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:302)
at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:148)
at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:134)
at androidx.lifecycle.ReportFragment.dispatch(ReportFragment.java:68)
at androidx.lifecycle.ReportFragment.dispatch(ReportFragment.java:144)
at androidx.lifecycle.ReportFragment.onDestroy(ReportFragment.java:134)
at android.app.Fragment.performDestroy(Fragment.java:2870)
at android.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1424)
at android.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1549)
at android.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1612)
at android.app.FragmentManagerImpl.dispatchMoveToState(FragmentManagerImpl.java:3053)
at android.app.FragmentManagerImpl.dispatchDestroy(FragmentManagerImpl.java:3033)
at android.app.FragmentController.dispatchDestroy(FragmentController.java:244)
at android.app.Activity.performDestroy(Activity.java:7257)
at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1249)
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4570)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4601)
at android.app.ActivityThread.-wrap5(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1676)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:231)
at android.app.ActivityThread.main(ActivityThread.java:6749)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Also have
Fatal Exception: java.lang.IllegalStateException: Compose Runtime internal error. Unexpected or incorrect use of the Compose internal runtime API (Start/end imbalance). Please report to Google or use
at androidx.compose.runtime.ComposerKt.composeRuntimeError(Composer.kt:3466)
at androidx.compose.runtime.ComposerImpl.finalizeCompose(Composer.kt:3550)
at androidx.compose.runtime.ComposerImpl.endRoot(Composer.kt:1237)
at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:2588)
at androidx.compose.runtime.ComposerImpl.composeContent$runtime_release(Composer.kt:2522)
at androidx.compose.runtime.CompositionImpl.composeContent(Composition.kt:478)
at androidx.compose.runtime.Recomposer.composeInitial$runtime_release(Recomposer.kt:748)
at androidx.compose.runtime.ComposerImpl$CompositionContextImpl.composeInitial$runtime_release(Composer.kt:2987)
at androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:431)
at androidx.compose.ui.layout.SubcomposeLayoutState.subcomposeInto(SubcomposeLayout.kt:269)
at androidx.compose.ui.layout.SubcomposeLayoutState.access$subcomposeInto(SubcomposeLayout.kt:154)
at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2.invoke(SubcomposeLayout.kt:244)
at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2.invoke(SubcomposeLayout.kt:241)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.withNoObservations(SnapshotStateObserver.kt:142)
at androidx.compose.ui.node.OwnerSnapshotObserver.withNoSnapshotReadObservation$ui_release(OwnerSnapshotObserver.kt:55)
at androidx.compose.ui.node.LayoutNode.withNoSnapshotReadObservation$ui_release(LayoutNode.kt:1175)
at androidx.compose.ui.layout.SubcomposeLayoutState.subcompose(SubcomposeLayout.kt:241)
at androidx.compose.ui.layout.SubcomposeLayoutState.subcompose(SubcomposeLayout.kt:235)
at androidx.compose.ui.layout.SubcomposeLayoutState.subcompose$ui_release(SubcomposeLayout.kt:224)
at androidx.compose.ui.layout.SubcomposeLayoutState$Scope.subcompose(SubcomposeLayout.kt:490)
at androidx.compose.foundation.lazy.layout.LazyLayoutPlaceablesProvider.getAndMeasure-0kLqBqw(LazyMeasurePolicy.kt:58)
at androidx.compose.foundation.lazy.list.LazyMeasuredItemProvider.getAndMeasure-oA9-DU0(LazyMeasuredItemProvider.kt:45)
at androidx.compose.foundation.lazy.list.LazyListMeasureKt.measureLazyList-wroFCeY(LazyListMeasure.kt:145)
at androidx.compose.foundation.lazy.list.LazyListKt$rememberLazyListMeasurePolicy$1$1.measure-3p2s80s(LazyList.kt:259)
at androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$2.invoke-0kLqBqw(LazyLayout.kt:55)
at androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$2.invoke(LazyLayout.kt:44)
at androidx.compose.ui.layout.SubcomposeLayoutState$createMeasurePolicy$1.measure-3p2s80s(SubcomposeLayout.kt:355)
at androidx.compose.ui.node.InnerPlaceable.measure-BRTryo0(InnerPlaceable.kt:55)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s(GraphicsLayerModifier.kt:306)
at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.foundation.layout.FillModifier.measure-3p2s80s(Size.kt:658)
at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39)
at androidx.compose.foundation.layout.FillModifier.measure-3p2s80s(Size.kt:658)
at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:99)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:98)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:126)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:88)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:76)
at androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0(OuterMeasurablePlaceable.kt:98)
at androidx.compose.ui.node.OuterMeasurablePlaceable.measure-BRTryo0(OuterMeasurablePlaceable.kt:75)
at androidx.compose.ui.node.LayoutNode.measure-BRTryo0(LayoutNode.kt:1308)
at androidx.compose.foundation.layout.RowColumnImplKt$rowColumnMeasurePolicy$1.measure-3p2s80s(RowColumnImpl.kt:147)
at androidx.compose.ui.node.InnerPlaceable.measure-BRTryo0(InnerPlaceable.kt:55)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.foundation.layout.FillModifier.measure-3p2s80s(Size.kt:658)
at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39)
at androidx.compose.foundation.layout.FillModifier.measure-3p2s80s(Size.kt:658)
at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:99)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:98)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:126)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:88)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:76)
at androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0(OuterMeasurablePlaceable.kt:98)
at androidx.compose.ui.node.OuterMeasurablePlaceable.measure-BRTryo0(OuterMeasurablePlaceable.kt:75)
at androidx.compose.ui.node.LayoutNode.measure-BRTryo0(LayoutNode.kt:1308)
at androidx.compose.foundation.layout.RowColumnImplKt$rowColumnMeasurePolicy$1.measure-3p2s80s(RowColumnImpl.kt:147)
at androidx.compose.ui.node.InnerPlaceable.measure-BRTryo0(InnerPlaceable.kt:55)
at androidx.compose.foundation.layout.FillModifier.measure-3p2s80s(Size.kt:658)
at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:99)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:98)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:126)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:88)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:76)
at androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0(OuterMeasurablePlaceable.kt:98)
at androidx.compose.ui.node.OuterMeasurablePlaceable.measure-BRTryo0(OuterMeasurablePlaceable.kt:75)
at androidx.compose.ui.node.LayoutNode.measure-BRTryo0(LayoutNode.kt:1308)
at androidx.compose.ui.layout.RootMeasurePolicy.measure-3p2s80s(RootMeasurePolicy.kt:38)
at androidx.compose.ui.node.InnerPlaceable.measure-BRTryo0(InnerPlaceable.kt:55)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:99)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:98)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:1798)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:121)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:88)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:76)
at androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0(OuterMeasurablePlaceable.kt:98)
at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release(LayoutNode.kt:1317)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure(MeasureAndLayoutDelegate.kt:168)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.remeasureAndRelayoutIfNeeded(MeasureAndLayoutDelegate.kt:228)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.access$remeasureAndRelayoutIfNeeded(MeasureAndLayoutDelegate.kt:38)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout(MeasureAndLayoutDelegate.kt:201)
at androidx.compose.ui.platform.AndroidComposeView.onMeasure(AndroidComposeView.android.kt:703)
at android.view.View.measure(View.java:27124)
at androidx.compose.ui.platform.AbstractComposeView.internalOnMeasure$ui_release(ComposeView.android.kt:302)
at androidx.compose.ui.platform.AbstractComposeView.onMeasure(ComposeView.android.kt:289)
at android.view.View.measure(View.java:27124)
at androidx.constraintlayout.widget.ConstraintLayout$Measurer.measure(ConstraintLayout.java:811)
at androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.measure(BasicMeasure.java:466)
at androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.measureChildren(BasicMeasure.java:134)
at androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.solverMeasure(BasicMeasure.java:278)
at androidx.constraintlayout.core.widgets.ConstraintWidgetContainer.measure(ConstraintWidgetContainer.java:120)
at androidx.constraintlayout.widget.ConstraintLayout.resolveSystem(ConstraintLayout.java:1594)
at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1708)
at android.view.View.measure(View.java:27124)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7980)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:27124)
at androidx.constraintlayout.widget.ConstraintLayout$Measurer.measure(ConstraintLayout.java:811)
at androidx.constraintlayout.core.widgets.ConstraintWidgetContainer.measure(ConstraintWidgetContainer.java:632)
at androidx.constraintlayout.core.widgets.analyzer.Direct.verticalSolvingPass(Direct.java:453)
at androidx.constraintlayout.core.widgets.analyzer.Direct.solveVerticalMatchConstraint(Direct.java:750)
at androidx.constraintlayout.core.widgets.analyzer.Direct.verticalSolvingPass(Direct.java:505)
at androidx.constraintlayout.core.widgets.analyzer.Direct.verticalSolvingPass(Direct.java:544)
at androidx.constraintlayout.core.widgets.analyzer.Direct.solvingPass(Direct.java:224)
at androidx.constraintlayout.core.widgets.ConstraintWidgetContainer.layout(ConstraintWidgetContainer.java:693)
at androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.solveLinearSystem(BasicMeasure.java:160)
at androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.solverMeasure(BasicMeasure.java:291)
at androidx.constraintlayout.core.widgets.ConstraintWidgetContainer.measure(ConstraintWidgetContainer.java:120)
at androidx.constraintlayout.widget.ConstraintLayout.resolveSystem(ConstraintLayout.java:1594)
at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1708)
at android.view.View.measure(View.java:27124)
at androidx.drawerlayout.widget.DrawerLayout.onMeasure(DrawerLayout.java:1119)
at android.view.View.measure(View.java:27124)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7980)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:145)
at android.view.View.measure(View.java:27124)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7980)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
at android.view.View.measure(View.java:27124)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7980)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:27124)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7980)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
at android.view.View.measure(View.java:27124)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7980)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:1237)
at android.view.View.measure(View.java:27124)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:4430)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:3135)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3427)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2831)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:10311)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1063)
at android.view.Choreographer.doCallbacks(Choreographer.java:845)
at android.view.Choreographer.doFrame(Choreographer.java:780)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1048)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8641)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1133)
Fatal Exception: java.lang.NullPointerException
at androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList(RenderNodeLayer.android.kt:292)
at androidx.compose.ui.platform.AndroidComposeView.dispatchDraw(AndroidComposeView.android.kt:857)
at android.view.View.draw(View.java:23904)
at android.view.View.updateDisplayListIfDirty(View.java:22776)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5320)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5292)
at android.view.View.updateDisplayListIfDirty(View.java:22731)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5320)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5292)
at android.view.View.updateDisplayListIfDirty(View.java:22731)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5320)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5292)
at android.view.View.updateDisplayListIfDirty(View.java:22731)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5320)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5292)
at android.view.View.updateDisplayListIfDirty(View.java:22731)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5320)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5292)
at android.view.View.updateDisplayListIfDirty(View.java:22731)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:5320)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:5292)
at android.view.View.updateDisplayListIfDirty(View.java:22731)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:579)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:585)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:662)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:5042)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4749)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3866)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2618)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9971)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1010)
at android.view.Choreographer.doCallbacks(Choreographer.java:809)
at android.view.Choreographer.doFrame(Choreographer.java:744)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:995)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8653)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
Fatal Exception: java.lang.IllegalStateException: Compose Runtime internal error. Unexpected or incorrect use of the Compose internal runtime API (Start/end imbalance). Please report to Google or use
at androidx.compose.runtime.ComposerKt.composeRuntimeError(Composer.kt:3466)
at androidx.compose.runtime.ComposerImpl.finalizeCompose(Composer.kt:3550)
at androidx.compose.runtime.ComposerImpl.endRoot(Composer.kt:1237)
at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:2588)
at androidx.compose.runtime.ComposerImpl.composeContent$runtime_release(Composer.kt:2522)
at androidx.compose.runtime.CompositionImpl.composeContent(Composition.kt:478)
at androidx.compose.runtime.Recomposer.composeInitial$runtime_release(Recomposer.kt:748)
at androidx.compose.runtime.ComposerImpl$CompositionContextImpl.composeInitial$runtime_release(Composer.kt:2987)
at androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:431)
at androidx.compose.ui.layout.SubcomposeLayoutState.subcomposeInto(SubcomposeLayout.kt:269)
at androidx.compose.ui.layout.SubcomposeLayoutState.access$subcomposeInto(SubcomposeLayout.kt:154)
at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2.invoke(SubcomposeLayout.kt:244)
at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2.invoke(SubcomposeLayout.kt:241)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.withNoObservations(SnapshotStateObserver.kt:142)
at androidx.compose.ui.node.OwnerSnapshotObserver.withNoSnapshotReadObservation$ui_release(OwnerSnapshotObserver.kt:55)
at androidx.compose.ui.node.LayoutNode.withNoSnapshotReadObservation$ui_release(LayoutNode.kt:1175)
at androidx.compose.ui.layout.SubcomposeLayoutState.subcompose(SubcomposeLayout.kt:241)
at androidx.compose.ui.layout.SubcomposeLayoutState.subcompose(SubcomposeLayout.kt:235)
at androidx.compose.ui.layout.SubcomposeLayoutState.subcompose$ui_release(SubcomposeLayout.kt:224)
at androidx.compose.ui.layout.SubcomposeLayoutState$Scope.subcompose(SubcomposeLayout.kt:490)
at androidx.compose.foundation.lazy.layout.LazyLayoutPlaceablesProvider.getAndMeasure-0kLqBqw(LazyMeasurePolicy.kt:58)
at androidx.compose.foundation.lazy.list.LazyMeasuredItemProvider.getAndMeasure-oA9-DU0(LazyMeasuredItemProvider.kt:45)
at androidx.compose.foundation.lazy.list.LazyListMeasureKt.measureLazyList-wroFCeY(LazyListMeasure.kt:145)
at androidx.compose.foundation.lazy.list.LazyListKt$rememberLazyListMeasurePolicy$1$1.measure-3p2s80s(LazyList.kt:259)
at androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$2.invoke-0kLqBqw(LazyLayout.kt:55)
at androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$2.invoke(LazyLayout.kt:44)
at androidx.compose.ui.layout.SubcomposeLayoutState$createMeasurePolicy$1.measure-3p2s80s(SubcomposeLayout.kt:355)
at androidx.compose.ui.node.InnerPlaceable.measure-BRTryo0(InnerPlaceable.kt:55)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s(GraphicsLayerModifier.kt:306)
at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.foundation.layout.FillModifier.measure-3p2s80s(Size.kt:658)
at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39)
at androidx.compose.foundation.layout.FillModifier.measure-3p2s80s(Size.kt:658)
at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:99)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:98)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:126)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:88)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:76)
at androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0(OuterMeasurablePlaceable.kt:98)
at androidx.compose.ui.node.OuterMeasurablePlaceable.measure-BRTryo0(OuterMeasurablePlaceable.kt:75)
at androidx.compose.ui.node.LayoutNode.measure-BRTryo0(LayoutNode.kt:1308)
at androidx.compose.foundation.layout.RowColumnImplKt$rowColumnMeasurePolicy$1.measure-3p2s80s(RowColumnImpl.kt:147)
at androidx.compose.ui.node.InnerPlaceable.measure-BRTryo0(InnerPlaceable.kt:55)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.foundation.layout.FillModifier.measure-3p2s80s(Size.kt:658)
at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39)
at androidx.compose.foundation.layout.FillModifier.measure-3p2s80s(Size.kt:658)
at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:99)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:98)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:126)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:88)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:76)
at androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0(OuterMeasurablePlaceable.kt:98)
at androidx.compose.ui.node.OuterMeasurablePlaceable.measure-BRTryo0(OuterMeasurablePlaceable.kt:75)
at androidx.compose.ui.node.LayoutNode.measure-BRTryo0(LayoutNode.kt:1308)
at androidx.compose.foundation.layout.RowColumnImplKt$rowColumnMeasurePolicy$1.measure-3p2s80s(RowColumnImpl.kt:147)
at androidx.compose.ui.node.InnerPlaceable.measure-BRTryo0(InnerPlaceable.kt:55)
at androidx.compose.foundation.layout.FillModifier.measure-3p2s80s(Size.kt:658)
at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:99)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:98)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:126)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:88)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:76)
at androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0(OuterMeasurablePlaceable.kt:98)
at androidx.compose.ui.node.OuterMeasurablePlaceable.measure-BRTryo0(OuterMeasurablePlaceable.kt:75)
at androidx.compose.ui.node.LayoutNode.measure-BRTryo0(LayoutNode.kt:1308)
at androidx.compose.ui.layout.RootMeasurePolicy.measure-3p2s80s(RootMeasurePolicy.kt:38)
at androidx.compose.ui.node.InnerPlaceable.measure-BRTryo0(InnerPlaceable.kt:55)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:99)
at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:98)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:1798)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:121)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:88)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:76)
at androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0(OuterMeasurablePlaceable.kt:98)
at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release(LayoutNode.kt:1317)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure(MeasureAndLayoutDelegate.kt:168)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.remeasureAndRelayoutIfNeeded(MeasureAndLayoutDelegate.kt:228)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.access$remeasureAndRelayoutIfNeeded(MeasureAndLayoutDelegate.kt:38)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout(MeasureAndLayoutDelegate.kt:201)
at androidx.compose.ui.platform.AndroidComposeView.onMeasure(AndroidComposeView.android.kt:703)
at android.view.View.measure(View.java:17565)
at androidx.compose.ui.platform.AbstractComposeView.internalOnMeasure$ui_release(ComposeView.android.kt:302)
at androidx.compose.ui.platform.AbstractComposeView.onMeasure(ComposeView.android.kt:289)
at android.view.View.measure(View.java:17565)
at androidx.constraintlayout.widget.ConstraintLayout$Measurer.measure(ConstraintLayout.java:811)
at androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.measure(BasicMeasure.java:466)
at androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.measureChildren(BasicMeasure.java:134)
at androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.solverMeasure(BasicMeasure.java:278)
at androidx.constraintlayout.core.widgets.ConstraintWidgetContainer.measure(ConstraintWidgetContainer.java:120)
at androidx.constraintlayout.widget.ConstraintLayout.resolveSystem(ConstraintLayout.java:1594)
at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1708)
at android.view.View.measure(View.java:17565)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.view.View.measure(View.java:17565)
at androidx.constraintlayout.widget.ConstraintLayout$Measurer.measure(ConstraintLayout.java:811)
at androidx.constraintlayout.core.widgets.ConstraintWidgetContainer.measure(ConstraintWidgetContainer.java:632)
at androidx.constraintlayout.core.widgets.analyzer.Direct.verticalSolvingPass(Direct.java:453)
at androidx.constraintlayout.core.widgets.analyzer.Direct.solveVerticalMatchConstraint(Direct.java:750)
at androidx.constraintlayout.core.widgets.analyzer.Direct.verticalSolvingPass(Direct.java:505)
at androidx.constraintlayout.core.widgets.analyzer.Direct.verticalSolvingPass(Direct.java:544)
at androidx.constraintlayout.core.widgets.analyzer.Direct.solvingPass(Direct.java:224)
at androidx.constraintlayout.core.widgets.ConstraintWidgetContainer.layout(ConstraintWidgetContainer.java:693)
at androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.solveLinearSystem(BasicMeasure.java:160)
at androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.solverMeasure(BasicMeasure.java:291)
at androidx.constraintlayout.core.widgets.ConstraintWidgetContainer.measure(ConstraintWidgetContainer.java:120)
at androidx.constraintlayout.widget.ConstraintLayout.resolveSystem(ConstraintLayout.java:1594)
at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java:1708)
at android.view.View.measure(View.java:17565)
at androidx.drawerlayout.widget.DrawerLayout.onMeasure(DrawerLayout.java:1119)
at android.view.View.measure(View.java:17565)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:145)
at android.view.View.measure(View.java:17565)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17565)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.view.View.measure(View.java:17565)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17565)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2615)
at android.view.View.measure(View.java:17565)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2045)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1196)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1409)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1084)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5990)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
Caused by java.lang.IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true
at androidx.compose.ui.node.LayoutNodeWrapper.getParentLayoutCoordinates(LayoutNodeWrapper.kt:168)
at androidx.compose.ui.layout.LayoutCoordinatesKt.findRoot(LayoutCoordinates.kt:158)
at androidx.compose.ui.semantics.SemanticsWrapper.touchBoundsInRoot(SemanticsWrapper.kt:88)
at androidx.compose.ui.semantics.SemanticsNode.getTouchBoundsInRoot(SemanticsNode.kt:93)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2518)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2533)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2559)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.getCurrentSemanticsNodes(AndroidComposeViewAccessibilityDelegateCompat.android.kt:228)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.createNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:337)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.access$sendScrollEventIfNeeded(AndroidComposeViewAccessibilityDelegateCompat.android.kt:113)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider.createAccessibilityNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2391)
at android.view.View.createAccessibilityNodeInfoInternal(View.java:7918)
at android.view.View$AccessibilityDelegate.createAccessibilityNodeInfo(View.java:27418)
at android.view.View.createAccessibilityNodeInfo(View.java:7904)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:146)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:119)
at android.view.View.onInitializeAccessibilityEventInternal(View.java:7858)
at android.view.View$AccessibilityDelegate.onInitializeAccessibilityEvent(View.java:27301)
at androidx.core.view.AccessibilityDelegateCompat.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:257)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:76)
at android.view.View.onInitializeAccessibilityEvent(View.java:7844)
at android.view.View.sendAccessibilityEventUncheckedInternal(View.java:7708)
at android.view.View$AccessibilityDelegate.sendAccessibilityEventUnchecked(View.java:27240)
at androidx.core.view.AccessibilityDelegateCompat.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:196)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:113)
at android.view.View.sendAccessibilityEventUnchecked(View.java:7691)
at android.view.ViewRootImpl$SendWindowContentChangedAccessibilityEvent.run(ViewRootImpl.java:9304)
at android.view.ViewRootImpl$SendWindowContentChangedAccessibilityEvent.runOrPost(ViewRootImpl.java:9330)
at android.view.ViewRootImpl.postSendWindowContentChangedCallback(ViewRootImpl.java:8267)
at android.view.ViewRootImpl.notifySubtreeAccessibilityStateChanged(ViewRootImpl.java:8442)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3776)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3776)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3776)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3776)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3776)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3776)
at android.view.View.notifySubtreeAccessibilityStateChangedIfNeeded(View.java:11901)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChangedIfNeeded(ViewGroup.java:3800)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChangedIfNeeded(ViewGroup.java:3796)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5456)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5403)
at android.view.ViewGroup.removeView(ViewGroup.java:5334)
at androidx.compose.ui.platform.AndroidComposeView.removeAndroidView(AndroidComposeView.android.kt:618)
at androidx.compose.ui.viewinterop.AndroidViewHolder$layoutNode$1$4.invoke(AndroidViewHolder.android.kt:276)
at androidx.compose.ui.viewinterop.AndroidViewHolder$layoutNode$1$4.invoke(AndroidViewHolder.android.kt:275)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:363)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:374)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:374)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:374)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:374)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:374)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:374)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:374)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:374)
at androidx.compose.ui.node.LayoutNode.removeAll$ui_release(LayoutNode.kt:269)
at androidx.compose.ui.node.UiApplier.onClear(UiApplier.android.kt:44)
at androidx.compose.runtime.AbstractApplier.clear(Applier.kt:210)
at androidx.compose.runtime.CompositionImpl.dispose(Composition.kt:495)
at androidx.compose.ui.platform.WrappedComposition.dispose(Wrapper.android.kt:171)
at androidx.compose.ui.platform.WrappedComposition.onStateChanged(Wrapper.android.kt:179)
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:354)
at androidx.lifecycle.LifecycleRegistry.backwardPass(LifecycleRegistry.java:284)
at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:302)
at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:148)
at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:134)
at androidx.lifecycle.ReportFragment.dispatch(ReportFragment.java:68)
at androidx.lifecycle.ReportFragment.dispatch(ReportFragment.java:144)
at androidx.lifecycle.ReportFragment.onDestroy(ReportFragment.java:134)
at android.app.Fragment.performDestroy(Fragment.java:2870)
at android.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1424)
at android.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1549)
at android.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1611)
at android.app.FragmentManagerImpl.dispatchMoveToState(FragmentManagerImpl.java:3045)
at android.app.FragmentManagerImpl.dispatchDestroy(FragmentManagerImpl.java:3025)
at android.app.FragmentController.dispatchDestroy(FragmentController.java:245)
at android.app.Activity.performDestroy(Activity.java:7521)
at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1255)
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4592)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4623)
at android.app.ActivityThread.-wrap5(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1757)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
etc, etc, etc, I can go with those crashes in random places for hours. 99% of those crashes- samsungs. All of them after 6-8 hours of device sleep, still to this day I'm trying to figure out what compose view does this.
so...@google.com <so...@google.com> #7
Thanks for more details. Unfortunately, we couldn't reproduce it locally so we couldn't come up with a fix yet, we tried a few blind fixes that they didn't work so far.
Checking the crash stack we've got some new ideas for the potential fixes that are being verified.
Please keep us posted if you're able to reproduce the bug.
ap...@google.com <ap...@google.com> #8
Branch: androidx-main
commit c505dbf74711673fc60871fa6980899a7f70c068
Author: System Administrator <soboleva@google.com>
Date: Wed Mar 16 18:58:54 2022
Fix of crash in acessibility code path
It's a blind fix since the issue is not reproducable locally. The logs suggest the parent is getting detached while we're calculating the uncovered semantics nodes. It seems like the activity (and hence compose view) is destroyed but then the accessibility delegate is called. So this fix ensures that node info is not created if we're in destroyed state.
I'll keep the test that was failing flaky and re-enable it later after observing it for a while in CI.
Test: N/A
Bug: 206967867
Bug: 215116019
Change-Id: If9d3a20699056e39b40f27b6a674b9f96cee3420
M compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt
iv...@gmail.com <iv...@gmail.com> #9
val data = state.anyData ?: return
crashes phones, while
val data = state.anyData
if(data != null){
//do your code
}
dont crashes phones.
And the best part is that emulator google pixel 5 with api 31 crashes 100% times instantly on my side with config of
kotlin_version = 1.6.10
compose_version = 1.1.1
and by running
@Composable
fun ComposeSplashUI() {
Box(
contentAlignment = Alignment.BottomEnd,
modifier = Modifier
.background(color = Color.Black)
.fillMaxSize()
) {
Text(text = "reachable and its fine")
return@Box
Text(text = "Unreachable and its fine")
}
}
java.lang.IllegalStateException: Compose Runtime internal error. Unexpected or incorrect use of the Compose internal runtime API (Start/end imbalance). Please report to Google or use
at androidx.compose.runtime.ComposerKt.composeRuntimeError(Composer.kt:3466)
at androidx.compose.runtime.ComposerImpl.finalizeCompose(Composer.kt:3550)
at androidx.compose.runtime.ComposerImpl.endRoot(Composer.kt:1237)
at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:2588)
at androidx.compose.runtime.ComposerImpl.composeContent$runtime_release(Composer.kt:2522)
at androidx.compose.runtime.CompositionImpl.composeContent(Composition.kt:478)
at androidx.compose.runtime.Recomposer.composeInitial$runtime_release(Recomposer.kt:748)
at androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:433)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:140)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:131)
at androidx.compose.ui.platform.AndroidComposeView.setOnViewTreeOwnersAvailable(AndroidComposeView.android.kt:907)
at androidx.compose.ui.platform.WrappedComposition.setContent(Wrapper.android.kt:131)
at androidx.compose.ui.platform.WrappedComposition.onStateChanged(Wrapper.android.kt:182)
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:354)
at androidx.lifecycle.LifecycleRegistry.addObserver(LifecycleRegistry.java:196)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:138)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:131)
at androidx.compose.ui.platform.AndroidComposeView.onAttachedToWindow(AndroidComposeView.android.kt:994)
at android.view.View.dispatchAttachedToWindow(View.java:20753)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3490)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3497)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3497)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3497)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3497)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3497)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3497)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2613)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2126)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8653)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1037)
at android.view.Choreographer.doCallbacks(Choreographer.java:845)
at android.view.Choreographer.doFrame(Choreographer.java:780)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1022)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7839)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
which makes me think there is something wrong with returns in kotlin. Can you, please, confirm you have same issue?
so...@google.com <so...@google.com> #10
Marking this bug as resolved for the original crash report in
es...@gmail.com <es...@gmail.com> #11
We have the same issue when navigating to GoogleMaps Compose on Android 7 devices (Samsung & Xiaomi).
soboleva@google.com, which version is going to include this fix?
Thanks
so...@google.com <so...@google.com> #12
The fix has been released in 1.2.0-alpha07.
Do you encounter an issue on later version?
st...@avast.com <st...@avast.com> #13
Fatal Exception: java.lang.IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true
at androidx.compose.ui.node.LayoutNodeWrapper.getParentLayoutCoordinates(LayoutNodeWrapper.kt:199)
at androidx.compose.ui.layout.LayoutCoordinatesKt.findRoot(LayoutCoordinates.kt:158)
at androidx.compose.ui.layout.LayoutCoordinatesKt.boundsInRoot(LayoutCoordinates.kt:114)
at androidx.compose.ui.semantics.SemanticsEntity.touchBoundsInRoot(SemanticsEntity.kt:67)
at androidx.compose.ui.semantics.SemanticsNode.getTouchBoundsInRoot(SemanticsNode.kt:100)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2553)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2568)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2568)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2568)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2594)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.getCurrentSemanticsNodes(AndroidComposeViewAccessibilityDelegateCompat.android.kt:230)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.createNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:344)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.access$createNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:115)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider.createAccessibilityNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2424)
at android.view.View.createAccessibilityNodeInfoInternal(View.java:7263)
at android.view.View$AccessibilityDelegate.createAccessibilityNodeInfo(View.java:26009)
at android.view.View.createAccessibilityNodeInfo(View.java:7249)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:146)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:119)
at android.view.View.onInitializeAccessibilityEventInternal(View.java:7203)
at android.view.View$AccessibilityDelegate.onInitializeAccessibilityEvent(View.java:25892)
at androidx.core.view.AccessibilityDelegateCompat.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:265)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:80)
at android.view.View.onInitializeAccessibilityEvent(View.java:7189)
at android.view.View.sendAccessibilityEventUncheckedInternal(View.java:7053)
at android.view.View$AccessibilityDelegate.sendAccessibilityEventUnchecked(View.java:25831)
at androidx.core.view.AccessibilityDelegateCompat.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:201)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:117)
at android.view.View.sendAccessibilityEventUnchecked(View.java:7036)
at android.view.ViewRootImpl$SendWindowContentChangedAccessibilityEvent.run(ViewRootImpl.java:7920)
at android.view.ViewRootImpl$SendWindowContentChangedAccessibilityEvent.runOrPost(ViewRootImpl.java:7946)
at android.view.ViewRootImpl.postSendWindowContentChangedCallback(ViewRootImpl.java:7057)
at android.view.ViewRootImpl.notifySubtreeAccessibilityStateChanged(ViewRootImpl.java:7232)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3571)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3571)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3571)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3571)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3571)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3571)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3571)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3571)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3571)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3571)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3571)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3571)
at android.view.View.notifySubtreeAccessibilityStateChangedIfNeeded(View.java:11193)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChangedIfNeeded(ViewGroup.java:3595)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChangedIfNeeded(ViewGroup.java:3591)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5247)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5194)
at android.view.ViewGroup.removeView(ViewGroup.java:5125)
at androidx.compose.ui.platform.AndroidComposeView.removeAndroidView(AndroidComposeView.android.kt:695)
at androidx.compose.ui.viewinterop.AndroidViewHolder$layoutNode$1$4.invoke(AndroidViewHolder.android.kt:290)
at androidx.compose.ui.viewinterop.AndroidViewHolder$layoutNode$1$4.invoke(AndroidViewHolder.android.kt:289)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:358)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:369)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:369)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:369)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:369)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:369)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:369)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:369)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:369)
at androidx.compose.ui.node.LayoutNode.removeAt$ui_release(LayoutNode.kt:245)
at androidx.compose.ui.node.UiApplier.remove(UiApplier.android.kt:35)
at androidx.compose.runtime.ComposerImpl$realizeMovement$1.invoke(Composer.kt:3626)
at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:763)
at androidx.compose.runtime.CompositionImpl.applyChanges(Composition.kt:794)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:526)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:454)
at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:34)
at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.android.kt:109)
at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.android.kt:41)
at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:69)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:964)
at android.view.Choreographer.doCallbacks(Choreographer.java:778)
at android.view.Choreographer.doFrame(Choreographer.java:710)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:952)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:169)
at android.app.ActivityThread.main(ActivityThread.java:6585)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
br...@stripe.com <br...@stripe.com> #14
When debugging through the code to try to understand it, the test passed. So it looks like some race condition when finishing the test.
I added a call to `composeTestRule.waitForIdle()` at the end and they pass now:
You can clone the repo and run this test removing the `composeTestRule.waitForIdle()` call to reproduce:
el...@gmail.com <el...@gmail.com> #15
iv...@gmail.com <iv...@gmail.com> #16
We are currently migrating to api33 with upgrading everything we got, including compose, I'l give more info after the migration end(2 weeks) + few days on real phones
ra...@appsfactory.de <ra...@appsfactory.de> #17
Seems that the issue is only happening on Android 8 (& 7) devices and mostly on Samsung.
So far Samsung S7, Tab S2 and S7 Edge are most affected but also other Samsung devices (A3, J5, S6, Tab A).
androidx.compose.ui.node.LayoutNodeWrapper.getParentLayoutCoordinates (LayoutNodeWrapper.kt:168)
androidx.compose.ui.layout.LayoutCoordinatesKt.findRoot (LayoutCoordinatesKt.java:158)
androidx.compose.ui.layout.LayoutCoordinatesKt.boundsInRoot (LayoutCoordinatesKt.java:114)
androidx.compose.ui.semantics.NodeLocationHolder$compareTo$child2$1.invoke (SemanticsSort.kt:148)
androidx.compose.ui.semantics.NodeLocationHolder$compareTo$child2$1.invoke (SemanticsSort.kt:146)
androidx.compose.ui.semantics.SemanticsSortKt.findNodeByPredicateTraversal (SemanticsSortKt.java:174)
androidx.compose.ui.semantics.SemanticsSortKt.findNodeByPredicateTraversal (SemanticsSortKt.java:179)
androidx.compose.ui.semantics.SemanticsSortKt.findNodeByPredicateTraversal (SemanticsSortKt.java:179)
androidx.compose.ui.semantics.SemanticsSortKt.findNodeByPredicateTraversal (SemanticsSortKt.java:179)
androidx.compose.ui.semantics.NodeLocationHolder.compareTo (SemanticsSort.kt:146)
androidx.compose.ui.semantics.NodeLocationHolder.compareTo (SemanticsSort.kt:66)
java.util.ComparableTimSort.countRunAndMakeAscending (ComparableTimSort.java:320)
java.util.ComparableTimSort.sort (ComparableTimSort.java:188)
java.util.Arrays.sort (Arrays.java:1312)
java.util.Arrays.sort (Arrays.java:1491)
java.util.ArrayList.sort (ArrayList.java:1470)
java.util.Collections.sort (Collections.java:201)
java.util.Collections.sort (Collections.java:156)
kotlin.collections.CollectionsKt__MutableCollectionsJVMKt.sort (MutableCollectionsJVM.kt:31)
androidx.compose.ui.semantics.SemanticsSortKt.findOneLayerOfSemanticsWrappersSortedByBounds$sortWithStrategy (SemanticsSortKt.java:37)
androidx.compose.ui.semantics.SemanticsSortKt.findOneLayerOfSemanticsWrappersSortedByBounds (SemanticsSortKt.java:53)
androidx.compose.ui.semantics.SemanticsSortKt.findOneLayerOfSemanticsWrappersSortedByBounds (SemanticsSortKt.java:60)
androidx.compose.ui.semantics.SemanticsSortKt.findOneLayerOfSemanticsWrappersSortedByBounds$default (SemanticsSortKt.java:28)
androidx.compose.ui.semantics.SemanticsNode.unmergedChildren$ui_release (SemanticsNode.kt:194)
androidx.compose.ui.semantics.SemanticsNode.getChildren (SemanticsNode.kt:278)
androidx.compose.ui.semantics.SemanticsNode.getReplacedChildrenSortedByBounds$ui_release (SemanticsNode.java:245)
androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.populateAccessibilityNodeInfoProperties (AndroidComposeViewAccessibilityDelegateCompat.java:422)
androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.createNodeInfo (AndroidComposeViewAccessibilityDelegateCompat.java:371)
androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.access$createNodeInfo (AndroidComposeViewAccessibilityDelegateCompat.java:113)
androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider.createAccessibilityNodeInfo (AndroidComposeViewAccessibilityDelegateCompat.android.kt:2391)
android.view.View.createAccessibilityNodeInfoInternal (View.java:7918)
android.view.View$AccessibilityDelegate.createAccessibilityNodeInfo (View.java:27418)
android.view.View.createAccessibilityNodeInfo (View.java:7904)
android.view.accessibility.AccessibilityRecord.setSource (AccessibilityRecord.java:146)
android.view.accessibility.AccessibilityRecord.setSource (AccessibilityRecord.java:119)
android.view.View.onInitializeAccessibilityEventInternal (View.java:7858)
android.view.View$AccessibilityDelegate.onInitializeAccessibilityEvent (View.java:27301)
androidx.core.view.AccessibilityDelegateCompat.onInitializeAccessibilityEvent (AccessibilityDelegateCompat.java:257)
androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.onInitializeAccessibilityEvent (AccessibilityDelegateCompat.java:76)
android.view.View.onInitializeAccessibilityEvent (View.java:7844)
android.view.View.sendAccessibilityEventUncheckedInternal (View.java:7708)
android.view.View$AccessibilityDelegate.sendAccessibilityEventUnchecked (View.java:27240)
androidx.core.view.AccessibilityDelegateCompat.sendAccessibilityEventUnchecked (AccessibilityDelegateCompat.java:196)
androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.sendAccessibilityEventUnchecked (AccessibilityDelegateCompat.java:113)
android.view.View.sendAccessibilityEventUnchecked (View.java:7691)
android.view.ViewRootImpl$SendWindowContentChangedAccessibilityEvent.run (ViewRootImpl.java:9304)
android.view.ViewRootImpl$SendWindowContentChangedAccessibilityEvent.runOrPost (ViewRootImpl.java:9330)
android.view.ViewRootImpl.postSendWindowContentChangedCallback (ViewRootImpl.java:8267)
android.view.ViewRootImpl.notifySubtreeAccessibilityStateChanged (ViewRootImpl.java:8442)
android.view.ViewGroup.notifySubtreeAccessibilityStateChanged (ViewGroup.java:3776)
android.view.ViewGroup.notifySubtreeAccessibilityStateChanged (ViewGroup.java:3776)
android.view.ViewGroup.notifySubtreeAccessibilityStateChanged (ViewGroup.java:3776)
android.view.ViewGroup.notifySubtreeAccessibilityStateChanged (ViewGroup.java:3776)
android.view.ViewGroup.notifySubtreeAccessibilityStateChanged (ViewGroup.java:3776)
android.view.ViewGroup.notifySubtreeAccessibilityStateChanged (ViewGroup.java:3776)
android.view.ViewGroup.notifySubtreeAccessibilityStateChanged (ViewGroup.java:3776)
android.view.ViewGroup.notifySubtreeAccessibilityStateChanged (ViewGroup.java:3776)
android.view.ViewGroup.notifySubtreeAccessibilityStateChanged (ViewGroup.java:3776)
android.view.ViewGroup.notifySubtreeAccessibilityStateChanged (ViewGroup.java:3776)
android.view.ViewGroup.notifySubtreeAccessibilityStateChanged (ViewGroup.java:3776)
android.view.ViewGroup.notifySubtreeAccessibilityStateChanged (ViewGroup.java:3776)
android.view.ViewGroup.notifySubtreeAccessibilityStateChanged (ViewGroup.java:3776)
android.view.View.notifySubtreeAccessibilityStateChangedIfNeeded (View.java:11901)
android.view.ViewGroup.notifySubtreeAccessibilityStateChangedIfNeeded (ViewGroup.java:3800)
android.view.ViewGroup.addViewInner (ViewGroup.java:5184)
android.view.ViewGroup.addView (ViewGroup.java:4953)
android.view.ViewGroup.addView (ViewGroup.java:4893)
android.view.ViewGroup.addView (ViewGroup.java:4866)
androidx.compose.ui.platform.AndroidComposeView.getAndroidViewsHandler$ui_release (AndroidComposeView.android.kt:284)
androidx.compose.ui.platform.AndroidComposeView.addAndroidView (AndroidComposeView.java:585)
androidx.compose.ui.viewinterop.AndroidViewHolder$layoutNode$1$3.invoke (AndroidViewHolder.android.kt:272)
androidx.compose.ui.viewinterop.AndroidViewHolder$layoutNode$1$3.invoke (AndroidViewHolder.android.kt:271)
androidx.compose.ui.node.LayoutNode.attach$ui_release (LayoutNode.kt:344)
androidx.compose.ui.node.LayoutNode.attach$ui_release (LayoutNode.kt:337)
androidx.compose.ui.node.LayoutNode.insertAt$ui_release (LayoutNode.kt:222)
androidx.compose.ui.node.UiApplier.insertBottomUp (UiApplier.android.kt:32)
androidx.compose.ui.node.UiApplier.insertBottomUp (UiApplier.android.kt:22)
androidx.compose.runtime.ComposerImpl$createNode$3.invoke (Composer.kt:1376)
androidx.compose.runtime.ComposerImpl$createNode$3.invoke (Composer.kt:1371)
androidx.compose.runtime.ComposerImpl$recordInsert$2.invoke (Composer.kt:2768)
androidx.compose.runtime.ComposerImpl$recordInsert$2.invoke (Composer.kt:2765)
androidx.compose.runtime.CompositionImpl.applyChanges (Composition.kt:637)
androidx.compose.runtime.Recomposer.composeInitial$runtime_release (Recomposer.kt:763)
androidx.compose.runtime.ComposerImpl$CompositionContextImpl.composeInitial$runtime_release (Composer.kt:2987)
androidx.compose.runtime.CompositionImpl.setContent (Composition.kt:431)
androidx.compose.ui.layout.SubcomposeLayoutState.subcomposeInto (SubcomposeLayout.kt:269)
androidx.compose.ui.layout.SubcomposeLayoutState.access$subcomposeInto (SubcomposeLayout.kt:154)
androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2.invoke (SubcomposeLayoutState.java:244)
androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2.invoke (SubcomposeLayoutState.java:241)
androidx.compose.runtime.snapshots.SnapshotStateObserver.withNoObservations (SnapshotStateObserver.java:142)
androidx.compose.ui.node.OwnerSnapshotObserver.withNoSnapshotReadObservation$ui_release (OwnerSnapshotObserver.java:55)
androidx.compose.ui.node.LayoutNode.withNoSnapshotReadObservation$ui_release (LayoutNode.java:1175)
androidx.compose.ui.layout.SubcomposeLayoutState.subcompose (SubcomposeLayout.kt:241)
androidx.compose.ui.layout.SubcomposeLayoutState.subcompose (SubcomposeLayout.kt:235)
androidx.compose.ui.layout.SubcomposeLayoutState.subcompose$ui_release (SubcomposeLayoutState.java:224)
androidx.compose.ui.layout.SubcomposeLayoutState$Scope.subcompose (SubcomposeLayout.kt:490)
androidx.compose.foundation.lazy.layout.LazyLayoutPlaceablesProvider.getAndMeasure-0kLqBqw (LazyMeasurePolicy.kt:58)
androidx.compose.foundation.lazy.list.LazyMeasuredItemProvider.getAndMeasure-oA9-DU0 (LazyMeasuredItemProvider.java:45)
androidx.compose.foundation.lazy.list.LazyListMeasureKt.measureLazyList-wroFCeY (LazyListMeasureKt.java:145)
androidx.compose.foundation.lazy.list.LazyListKt$rememberLazyListMeasurePolicy$1$1.measure-3p2s80s (LazyList.kt:259)
androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$2.invoke-0kLqBqw (LazyLayout.kt:55)
androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$2.invoke (LazyLayout.kt:44)
androidx.compose.ui.layout.SubcomposeLayoutState$createMeasurePolicy$1.measure-3p2s80s (SubcomposeLayout.kt:355)
androidx.compose.ui.node.InnerPlaceable.measure-BRTryo0 (InnerPlaceable.kt:55)
androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0 (DelegatingLayoutNodeWrapper.kt:131)
androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0 (DelegatingLayoutNodeWrapper.kt:131)
androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0 (DelegatingLayoutNodeWrapper.kt:131)
androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0 (DelegatingLayoutNodeWrapper.kt:131)
androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0 (DelegatingLayoutNodeWrapper.kt:131)
androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0 (DelegatingLayoutNodeWrapper.kt:131)
androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s (GraphicsLayerModifier.kt:306)
androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0 (ModifiedLayoutNode.kt:39)
androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0 (DelegatingLayoutNodeWrapper.kt:131)
androidx.compose.foundation.layout.FillModifier.measure-3p2s80s (Size.kt:658)
androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0 (ModifiedLayoutNode.kt:39)
androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke (OuterMeasurablePlaceable.kt:99)
androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke (OuterMeasurablePlaceable.kt:98)
androidx.compose.runtime.snapshots.Snapshot$Companion.observe (Snapshot.java:1798)
androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads (SnapshotStateObserver.kt:121)
androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release (OwnerSnapshotObserver.kt:88)
androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release (OwnerSnapshotObserver.java:76)
androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0 (OuterMeasurablePlaceable.kt:98)
androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release (LayoutNode.kt:1317)
androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release$default (LayoutNode.kt:1313)
androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure (MeasureAndLayoutDelegate.kt:170)
androidx.compose.ui.node.MeasureAndLayoutDelegate.remeasureAndRelayoutIfNeeded (MeasureAndLayoutDelegate.kt:228)
androidx.compose.ui.node.MeasureAndLayoutDelegate.access$remeasureAndRelayoutIfNeeded (MeasureAndLayoutDelegate.kt:38)
androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout (MeasureAndLayoutDelegate.kt:201)
androidx.compose.ui.platform.AndroidComposeView.measureAndLayout (AndroidComposeView.android.kt:662)
androidx.compose.ui.node.Owner$DefaultImpls.measureAndLayout$default (Owner.kt:182)
androidx.compose.ui.platform.AndroidComposeView.dispatchDraw (AndroidComposeView.android.kt:846)
android.view.View.draw (View.java:20376)
android.view.View.updateDisplayListIfDirty (View.java:19318)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4405)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4385)
android.view.View.updateDisplayListIfDirty (View.java:19277)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4405)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4385)
android.view.View.updateDisplayListIfDirty (View.java:19277)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4405)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4385)
android.view.View.updateDisplayListIfDirty (View.java:19277)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4405)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4385)
android.view.View.updateDisplayListIfDirty (View.java:19277)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4405)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4385)
android.view.View.updateDisplayListIfDirty (View.java:19277)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4405)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4385)
android.view.View.updateDisplayListIfDirty (View.java:19277)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4405)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4385)
android.view.View.updateDisplayListIfDirty (View.java:19277)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4405)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4385)
android.view.View.updateDisplayListIfDirty (View.java:19277)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4405)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4385)
android.view.View.updateDisplayListIfDirty (View.java:19277)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4405)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4385)
android.view.View.updateDisplayListIfDirty (View.java:19277)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4405)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4385)
android.view.View.updateDisplayListIfDirty (View.java:19277)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4405)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4385)
android.view.View.updateDisplayListIfDirty (View.java:19277)
android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4405)
android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4385)
android.view.View.updateDisplayListIfDirty (View.java:19277)
android.view.ThreadedRenderer.updateViewTreeDisplayList (ThreadedRenderer.java:686)
android.view.ThreadedRenderer.updateRootDisplayList (ThreadedRenderer.java:692)
android.view.ThreadedRenderer.draw (ThreadedRenderer.java:800)
android.view.ViewRootImpl.draw (ViewRootImpl.java:3496)
android.view.ViewRootImpl.performDraw (ViewRootImpl.java:3283)
android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2818)
android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1780)
android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:7827)
android.view.Choreographer$CallbackRecord.run (Choreographer.java:911)
android.view.Choreographer.doCallbacks (Choreographer.java:723)
android.view.Choreographer.doFrame (Choreographer.java:658)
android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:897)
android.os.Handler.handleCallback (Handler.java:789)
android.os.Handler.dispatchMessage (Handler.java:98)
android.os.Looper.loop (Looper.java:164)
android.app.ActivityThread.main (ActivityThread.java:6944)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:327)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374)
so...@google.com <so...@google.com>
el...@gmail.com <el...@gmail.com> #18
al...@mercari.com <al...@mercari.com> #19
Steps to reproduce or a workaround will be a godsend. Can confirm we're getting this crash a lot and 100% on Samsung and Android 8.0. 99% on a 'Galaxy Feel' device.
[Deleted User] <[Deleted User]> #20
Create a sample app can 100% reproduce on Samsung Galaxy S9 Android version 8.0.0, hope it could help to clarify the issue.
It contains only Compose Navigation and selectable Android TextView.
Reproduce steps:
1. Click button to next screen
2. Long press text to show selection menu
3. Press back key to cancel selection menu
4. Press back key to previous screen
5. Crash
Test on both Compose ui version "1.2.0-rc02" & "1.3.0-beta01", both crash but the logs are different.
Thanks.
re...@gmail.com <re...@gmail.com> #21
Is there anything the community can do in order to get this bug fixed? And is it possible to bump the priority? Despite it occurs mostly on older OS versions, this issue causes the top crash in our app, affecting more than 4K Android 8 users in the past quarter, with devices from all over the spectrum (in decreasing order of occurrences: Samsung, LGE, Huawei, Xiaomi, Motorola, Sony, OnePlus, HTC, Asus, Lenovo, ZTE, Wiko, Sharp, Doogee, BullittGroupLimited, Blackview, Infix Mobility Limited, Shift, Techain).
Interestingly enough there is a single user with Android 10 (KTE M8) who also faces the problem.
so...@google.com <so...@google.com> #22
Re:
Re:
re...@gmail.com <re...@gmail.com> #23
re:v1.3.0-beta03
, so far no occurrence of this issue.
ATM I can only confirm the issue is still present in v1.2.1
, pointing a few lines below the original trace from v1.0.5
:
Fatal Exception: java.lang.IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true
at androidx.compose.ui.node.NodeCoordinator.getParentLayoutCoordinates(NodeCoordinator.kt:271)
at androidx.compose.ui.layout.LayoutCoordinatesKt.findRootCoordinates(LayoutCoordinates.kt:183)
at androidx.compose.ui.layout.LayoutCoordinatesKt.boundsInRoot(LayoutCoordinates.kt:128)
at androidx.compose.ui.node.SemanticsModifierNodeKt.touchBoundsInRoot(SemanticsModifierNode.kt:56)
at androidx.compose.ui.semantics.SemanticsNode.getTouchBoundsInRoot(SemanticsNode.kt:109)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2573)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2588)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2588)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2588)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2614)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.getCurrentSemanticsNodes(AndroidComposeViewAccessibilityDelegateCompat.android.kt:232)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.createNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:346)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.access$createNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:117)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider.createAccessibilityNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2443)
at android.view.View.createAccessibilityNodeInfoInternal(View.java:7343)
at android.view.View$AccessibilityDelegate.createAccessibilityNodeInfo(View.java:26385)
at android.view.View.createAccessibilityNodeInfo(View.java:7329)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:146)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:119)
at android.view.View.onInitializeAccessibilityEventInternal(View.java:7283)
at android.view.View$AccessibilityDelegate.onInitializeAccessibilityEvent(View.java:26268)
at androidx.core.view.AccessibilityDelegateCompat.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:265)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:80)
at android.view.View.onInitializeAccessibilityEvent(View.java:7269)
at android.view.View.sendAccessibilityEventUncheckedInternal(View.java:7133)
at android.view.View$AccessibilityDelegate.sendAccessibilityEventUnchecked(View.java:26207)
at androidx.core.view.AccessibilityDelegateCompat.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:201)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:117)
at android.view.View.sendAccessibilityEventUnchecked(View.java:7116)
at android.view.ViewRootImpl$SendWindowContentChangedAccessibilityEvent.run(ViewRootImpl.java:8623)
at android.view.ViewRootImpl$SendWindowContentChangedAccessibilityEvent.runOrPost(ViewRootImpl.java:8649)
at android.view.ViewRootImpl.postSendWindowContentChangedCallback(ViewRootImpl.java:7717)
at android.view.ViewRootImpl.notifySubtreeAccessibilityStateChanged(ViewRootImpl.java:7892)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3697)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3697)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3697)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3697)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3697)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3697)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3697)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3697)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3697)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3697)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3697)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3697)
at android.view.View.notifySubtreeAccessibilityStateChangedIfNeeded(View.java:11273)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChangedIfNeeded(ViewGroup.java:3721)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChangedIfNeeded(ViewGroup.java:3717)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5404)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5347)
at android.view.ViewGroup.removeView(ViewGroup.java:5278)
at androidx.compose.ui.platform.AndroidComposeView.removeAndroidView(AndroidComposeView.android.kt:727)
at androidx.compose.ui.viewinterop.AndroidViewHolder$layoutNode$1$4.invoke(AndroidViewHolder.android.kt:290)
at androidx.compose.ui.viewinterop.AndroidViewHolder$layoutNode$1$4.invoke(AndroidViewHolder.android.kt:289)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:415)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:427)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:427)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:427)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:427)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:427)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:427)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:427)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:427)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:427)
at androidx.compose.ui.node.LayoutNode.onChildRemoved(LayoutNode.kt:310)
at androidx.compose.ui.node.LayoutNode.removeAt$ui_release(LayoutNode.kt:288)
at androidx.compose.ui.node.UiApplier.remove(UiApplier.android.kt:35)
at androidx.compose.runtime.ComposerImpl$realizeMovement$1.invoke(Composer.kt:3701)
at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:790)
at androidx.compose.runtime.CompositionImpl.applyChanges(Composition.kt:822)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:585)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:503)
at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:34)
at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.android.kt:109)
at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.android.kt:41)
at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:69)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:946)
at android.view.Choreographer.doCallbacks(Choreographer.java:750)
at android.view.Choreographer.doFrame(Choreographer.java:679)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:934)
at android.os.Handler.handleCallback(Handler.java:869)
at android.os.Handler.dispatchMessage(Handler.java:101)
at android.os.Looper.loop(Looper.java:206)
at android.app.ActivityThread.main(ActivityThread.java:6760)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:845)
an...@nrk.no <an...@nrk.no> #24
We experience this as well will working with accessibility and have a case where it possible to reproduce each time for Android 13. We're currently using compose-ui 1.2. (compiler 1.2.1).
Unfortunately we're not able to share our codebase here, and haven't had time to see if we could make a reproducer either.
re...@gmail.com <re...@gmail.com> #25
Having v1.3.0-beta03
in our production app for a week, there is no occurrence of this issue anymore!
ca...@stroeer.de <ca...@stroeer.de> #26
Hi, we use compose version 1.3.1
and compose compiler 1.3.0
. We still have this exact crash only on Samsung devices and Android 8.
Fatal Exception: java.lang.IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true
at androidx.compose.ui.node.NodeCoordinator.getParentLayoutCoordinates(NodeCoordinator.kt:271)
at androidx.compose.ui.layout.LayoutCoordinatesKt.findRootCoordinates(LayoutCoordinates.kt:183)
at androidx.compose.ui.layout.LayoutCoordinatesKt.boundsInRoot(LayoutCoordinates.kt:128)
at androidx.compose.ui.node.SemanticsModifierNodeKt.touchBoundsInRoot(SemanticsModifierNode.kt:68)
at androidx.compose.ui.semantics.SemanticsNode.getTouchBoundsInRoot(SemanticsNode.kt:109)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2573)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2588)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2588)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2588)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2614)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.getCurrentSemanticsNodes(AndroidComposeViewAccessibilityDelegateCompat.android.kt:232)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.createNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:346)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.access$createNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:117)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider.createAccessibilityNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2443)
at android.view.View.createAccessibilityNodeInfoInternal(View.java:7918)
at android.view.View$AccessibilityDelegate.createAccessibilityNodeInfo(View.java:27418)
at android.view.View.createAccessibilityNodeInfo(View.java:7904)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:146)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:119)
at android.view.View.onInitializeAccessibilityEventInternal(View.java:7858)
at android.view.View$AccessibilityDelegate.onInitializeAccessibilityEvent(View.java:27301)
at androidx.core.view.AccessibilityDelegateCompat.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:265)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:80)
at android.view.View.onInitializeAccessibilityEvent(View.java:7844)
at android.view.View.sendAccessibilityEventUncheckedInternal(View.java:7708)
at android.view.View$AccessibilityDelegate.sendAccessibilityEventUnchecked(View.java:27240)
at androidx.core.view.AccessibilityDelegateCompat.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:201)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:117)
at android.view.View.sendAccessibilityEventUnchecked(View.java:7691)
at android.view.View.sendAccessibilityEventInternal(View.java:7670)
at android.view.View$AccessibilityDelegate.sendAccessibilityEvent(View.java:27198)
at androidx.core.view.AccessibilityDelegateCompat.sendAccessibilityEvent(AccessibilityDelegateCompat.java:178)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.sendAccessibilityEvent(AccessibilityDelegateCompat.java:112)
at android.view.View.sendAccessibilityEvent(View.java:7635)
at android.view.View.onFocusChanged(View.java:7551)
at androidx.compose.ui.platform.AndroidComposeView.onFocusChanged(AndroidComposeView.android.kt:592)
at android.view.View.handleFocusGainInternal(View.java:7248)
at android.view.ViewGroup.handleFocusGainInternal(ViewGroup.java:733)
at android.view.View.requestFocusNoSearch(View.java:11523)
at android.view.View.requestFocus(View.java:11502)
at android.view.ViewGroup.requestFocus(ViewGroup.java:3360)
at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:3405)
at android.view.ViewGroup.requestFocus(ViewGroup.java:3361)
at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:3405)
at android.view.ViewGroup.requestFocus(ViewGroup.java:3361)
at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:3405)
at android.view.ViewGroup.requestFocus(ViewGroup.java:3361)
at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:3405)
at android.view.ViewGroup.requestFocus(ViewGroup.java:3361)
at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:3405)
at android.view.ViewGroup.requestFocus(ViewGroup.java:3361)
at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:3405)
at android.view.ViewGroup.requestFocus(ViewGroup.java:3364)
at android.view.View.requestFocus(View.java:11469)
at android.view.View.requestFocus(View.java:11411)
at android.view.View.rootViewRequestFocus(View.java:7430)
at android.view.ViewGroup.removeAllViewsInLayout(ViewGroup.java:5661)
at androidx.compose.ui.viewinterop.AndroidViewHolder.setView$ui_release(AndroidViewHolder.android.kt:93)
at androidx.compose.ui.viewinterop.AndroidViewHolder$layoutNode$1$4.invoke(AndroidViewHolder.android.kt:302)
at androidx.compose.ui.viewinterop.AndroidViewHolder$layoutNode$1$4.invoke(AndroidViewHolder.android.kt:299)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:416)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:428)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:428)
at androidx.compose.ui.node.LayoutNode.onChildRemoved(LayoutNode.kt:310)
at androidx.compose.ui.node.LayoutNode.removeAt$ui_release(LayoutNode.kt:288)
at androidx.compose.ui.node.UiApplier.remove(UiApplier.android.kt:35)
at androidx.compose.runtime.ComposerImpl$realizeMovement$1.invoke(Composer.kt:3769)
at androidx.compose.runtime.ComposerImpl$realizeMovement$1.invoke(Composer.kt:3769)
at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:808)
at androidx.compose.runtime.CompositionImpl.applyChanges(Composition.kt:839)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:585)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:503)
at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:34)
at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.android.kt:109)
at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.android.kt:41)
at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:69)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:909)
at android.view.Choreographer.doCallbacks(Choreographer.java:723)
at android.view.Choreographer.doFrame(Choreographer.java:655)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
ae...@google.com <ae...@google.com>
ae...@google.com <ae...@google.com> #27
I obtained a Galaxy S7 with Android 8 and tried interacting with various standard Compose UI scenes in our demo apps using TalkBack since the stacktrace accessibility-related, but nothing I thought of trying got it to crash.
Without repro steps it is hard to say with confidence, but I'm currently theorizing that the theoretical fixes we landed for 1.3 did fix most of the crash cases, but there are still some rarer ones on the edges. (Some people reported it went away in 1.3, and for the still existing 1.3 crash stack in #26, that involves "requestFocus" in the lower part of the stack, whereas the earlier ones all involved "detach".) Is that reflected in a reduced frequency on folks' crash dashboards after upgrading to 1.3, or has it remained the same?
Also for anyone still seeing this in 1.3 or above, repro steps with a description/video of the structure of the UI being interacted with would continue to be very helpful, along with a copy of the stacktrace you're seeing when you get it to crash with those steps.
r....@futuremind.com <r....@futuremind.com> #28
Crash isn't there on any of my devices, except Samsung S7.
Stacktrace:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.lppsa.app.reserved.redesign, PID: 1056
java.lang.IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true
at androidx.compose.ui.node.NodeCoordinator.getParentLayoutCoordinates(NodeCoordinator.kt:274)
at androidx.compose.ui.layout.LayoutCoordinatesKt.findRootCoordinates(LayoutCoordinates.kt:183)
at androidx.compose.ui.node.NodeCoordinator.touchBoundsInRoot(NodeCoordinator.kt:711)
at androidx.compose.ui.node.SemanticsModifierNodeKt.touchBoundsInRoot(SemanticsModifierNode.kt:71)
at androidx.compose.ui.semantics.SemanticsNode.getTouchBoundsInRoot(SemanticsNode.kt:109)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2792)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2807)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2807)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2807)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2833)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.getCurrentSemanticsNodes(AndroidComposeViewAccessibilityDelegateCompat.android.kt:280)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.createNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:407)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.access$createNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:121)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider.createAccessibilityNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2617)
at android.view.View.createAccessibilityNodeInfoInternal(View.java:7918)
at android.view.View$AccessibilityDelegate.createAccessibilityNodeInfo(View.java:27418)
at android.view.View.createAccessibilityNodeInfo(View.java:7904)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:146)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:119)
at android.view.View.onInitializeAccessibilityEventInternal(View.java:7858)
at android.view.View$AccessibilityDelegate.onInitializeAccessibilityEvent(View.java:27301)
at androidx.core.view.AccessibilityDelegateCompat.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:265)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:80)
at android.view.View.onInitializeAccessibilityEvent(View.java:7844)
at android.view.View.sendAccessibilityEventUncheckedInternal(View.java:7708)
at android.view.View$AccessibilityDelegate.sendAccessibilityEventUnchecked(View.java:27240)
at androidx.core.view.AccessibilityDelegateCompat.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:201)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:117)
at android.view.View.sendAccessibilityEventUnchecked(View.java:7691)
at android.view.View.sendAccessibilityEventInternal(View.java:7670)
at android.view.View$AccessibilityDelegate.sendAccessibilityEvent(View.java:27198)
E/AndroidRuntime: at androidx.core.view.AccessibilityDelegateCompat.sendAccessibilityEvent(AccessibilityDelegateCompat.java:178)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.sendAccessibilityEvent(AccessibilityDelegateCompat.java:112)
at android.view.View.sendAccessibilityEvent(View.java:7635)
at android.view.View.onFocusChanged(View.java:7551)
at androidx.compose.ui.platform.AndroidComposeView.onFocusChanged(AndroidComposeView.android.kt:615)
at android.view.View.handleFocusGainInternal(View.java:7248)
at android.view.ViewGroup.handleFocusGainInternal(ViewGroup.java:733)
at android.view.View.requestFocusNoSearch(View.java:11523)
at android.view.View.requestFocus(View.java:11502)
at android.view.ViewGroup.requestFocus(ViewGroup.java:3360)
at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:3405)
at android.view.ViewGroup.requestFocus(ViewGroup.java:3361)
at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:3405)
at android.view.ViewGroup.requestFocus(ViewGroup.java:3361)
at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:3405)
at android.view.ViewGroup.requestFocus(ViewGroup.java:3361)
at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:3405)
at android.view.ViewGroup.requestFocus(ViewGroup.java:3361)
at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:3405)
at android.view.ViewGroup.requestFocus(ViewGroup.java:3361)
at android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:3405)
at android.view.ViewGroup.requestFocus(ViewGroup.java:3364)
at android.view.View.requestFocus(View.java:11469)
at android.view.View.requestFocus(View.java:11411)
at android.view.View.rootViewRequestFocus(View.java:7430)
at android.view.ViewGroup.removeAllViewsInLayout(ViewGroup.java:5661)
at androidx.compose.ui.viewinterop.AndroidViewHolder.setView$ui_release(AndroidViewHolder.android.kt:95)
at androidx.compose.ui.viewinterop.AndroidViewHolder$layoutNode$1$4.invoke(AndroidViewHolder.android.kt:310)
at androidx.compose.ui.viewinterop.AndroidViewHolder$layoutNode$1$4.invoke(AndroidViewHolder.android.kt:307)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:427)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:439)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:439)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:439)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:439)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:439)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:439)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:439)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:439)
at androidx.compose.ui.node.LayoutNode.onChildRemoved(LayoutNode.kt:318)
at androidx.compose.ui.node.LayoutNode.removeAt$ui_release(LayoutNode.kt:292)
at androidx.compose.ui.node.UiApplier.remove(UiApplier.android.kt:35)
at androidx.compose.runtime.ComposerImpl$realizeMovement$1.invoke(Composer.kt:3835)
at androidx.compose.runtime.ComposerImpl$realizeMovement$1.invoke(Composer.kt:3835)
at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:808)
at androidx.compose.runtime.CompositionImpl.applyChanges(Composition.kt:839)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:593)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:511)
at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:34)
at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.android.kt:109)
at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.android.kt:41)
E/AndroidRuntime: at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:69)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:909)
at android.view.Choreographer.doCallbacks(Choreographer.java:723)
at android.view.Choreographer.doFrame(Choreographer.java:655)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
ca...@stroeer.de <ca...@stroeer.de> #29
As #28 says, we use a lot of WebViews (WebView app) created in Compose by AndroidView(). I was trying to find a pattern to recreate the problem, but it happens unexpectedly. My theory is that the problem occurs when there is an active WebView and a recomposition is executed. We have reports from Android 8 and Android 6.
r....@futuremind.com <r....@futuremind.com> #31
te...@gmail.com <te...@gmail.com> #32
I have the problem on Samsung S9 with API 26:
java.lang.IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true
at androidx.compose.ui.node.NodeCoordinator.getParentLayoutCoordinates(NodeCoordinator.kt:271)
at androidx.compose.ui.layout.LayoutCoordinatesKt.findRootCoordinates(LayoutCoordinates.kt:183)
at androidx.compose.ui.layout.LayoutCoordinatesKt.boundsInRoot(LayoutCoordinates.kt:128)
at androidx.compose.ui.node.SemanticsModifierNodeKt.touchBoundsInRoot(SemanticsModifierNode.kt:68)
at androidx.compose.ui.semantics.SemanticsNode.getTouchBoundsInRoot(SemanticsNode.kt:109)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2573)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2588)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2588)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2614)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.getCurrentSemanticsNodes(AndroidComposeViewAccessibilityDelegateCompat.android.kt:232)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.createNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:346)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.access$createNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:117)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider.createAccessibilityNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2443)
at android.view.View.createAccessibilityNodeInfoInternal(View.java:7895)
at android.view.View$AccessibilityDelegate.createAccessibilityNodeInfo(View.java:27383)
at android.view.View.createAccessibilityNodeInfo(View.java:7881)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:146)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:119)
at android.view.View.onInitializeAccessibilityEventInternal(View.java:7835)
at android.view.View$AccessibilityDelegate.onInitializeAccessibilityEvent(View.java:27266)
at androidx.core.view.AccessibilityDelegateCompat.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:265)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:80)
at android.view.View.onInitializeAccessibilityEvent(View.java:7821)
at android.view.View.sendAccessibilityEventUncheckedInternal(View.java:7685)
at android.view.View$AccessibilityDelegate.sendAccessibilityEventUnchecked(View.java:27205)
at androidx.core.view.AccessibilityDelegateCompat.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:201)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:117)
at android.view.View.sendAccessibilityEventUnchecked(View.java:7668)
at android.view.View.sendAccessibilityEventInternal(View.java:7647)
at android.view.View$AccessibilityDelegate.sendAccessibilityEvent(View.java:27163)
at androidx.core.view.AccessibilityDelegateCompat.sendAccessibilityEvent(AccessibilityDelegateCompat.java:178)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.sendAccessibilityEvent(AccessibilityDelegateCompat.java:112)
at android.view.View.sendAccessibilityEvent(View.java:7612)
at android.view.View.onFocusChanged(View.java:7528)
at androidx.compose.ui.
This is happening in tests, where activity is being finished
ba...@gmail.com <ba...@gmail.com> #33
et...@google.com <et...@google.com> #34
Encountering a similar issue when navigating a particular Compose layout with TalkBack
sa...@gmail.com <sa...@gmail.com> #35
aj...@physics.msu.ru <aj...@physics.msu.ru> #36
gl...@gmail.com <gl...@gmail.com> #37
gl...@gmail.com <gl...@gmail.com> #38
Geeting the same error in compose version 1.3.3
ap...@google.com <ap...@google.com> #39
Branch: androidx-main
commit 8812e216f6498ff3dd07fe52819cba7bfd7ce647
Author: Melba Nuzen <mnuzen@google.com>
Date: Tue Mar 14 13:23:53 2023
Avoid throwing when node is detached in semantics-sort
This switches several `boundsInWindow` calls to a different method which returns a default value instead of throwing when the layoutNode
is detached.
Test: N/A. Crashing case has been reported in the wild but we haven't yet been able to reproduce it in isolation.
Bug: 273311855
Bug: 215116019
Change-Id: Ie5b181131f6c2e65dde9356513b47eb88b0b37fe
M compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt
ap...@google.com <ap...@google.com> #40
Branch: androidx-main
commit bb8f582fb916d8e36f7cb5243928d955b1934fc5
Author: Ralston Da Silva <ralu@google.com>
Date: Tue Mar 14 11:28:38 2023
Fix crash in Fake semantics node
This fix ensures that a fake Semantics Node uses the
touch bounds of the non-fake parent.
Bug: 215116019
Test: ./gradlew compose:ui:ui:cC -P android.testInstrumentationRunnerArguments.package=androidx.compose.ui.semantics.SemanticsTests
Change-Id: I1c56b4c158b012295a5855f43d8c1abd8a92f806
M compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/semantics/SemanticsTests.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/SemanticsModifierNode.kt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsNode.kt
gl...@gmail.com <gl...@gmail.com> #41
** Gradle:
. Kotlin version: 1.8.10
. platform('androidx.compose:compose-bom:2023.01.00')
. androidx.compose.ui:ui: 1.4.0-rc01
. kotlinCompilerExtensionVersion "1.4.3"
. com.google.accompanist:accompanist-navigation-animation 0.29.2-rc
. com.google.accompanist:accompanist-pager 0.29.2-rc
. com.google.accompanist:accompanist-systemuicontroller 0.29.2-rc
. androidx.compose.material3:material3 1.1.0-alpha08
** Crashlytics reports:
. Early crashe (0-2s)
. Repetitive crashes (5 per user on avg)
. Concerned API: 59% Android 7, 25% Android 8, 16% Android 6
** Stack trace:
Fatal Exception: java.lang.IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true
at androidx.compose.ui.node.NodeCoordinator.getParentLayoutCoordinates(NodeCoordinator.kt:277)
at androidx.compose.ui.layout.LayoutCoordinatesKt.findRootCoordinates(LayoutCoordinatesKt.java:180)
at androidx.compose.ui.layout.LayoutCoordinatesKt.boundsInWindow(LayoutCoordinatesKt.java:134)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.sortByGeometryGroupings(AndroidComposeViewAccessibilityDelegateCompat.android.kt:607)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.subtreeSortedByGeometryGrouping(AndroidComposeViewAccessibilityDelegateCompat.android.kt:666)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.subtreeSortedByGeometryGrouping$depthFirstSearch(AndroidComposeViewAccessibilityDelegateCompat.android.kt:650)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.subtreeSortedByGeometryGrouping$depthFirstSearch(AndroidComposeViewAccessibilityDelegateCompat.android.kt:657)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.subtreeSortedByGeometryGrouping(AndroidComposeViewAccessibilityDelegateCompat.android.kt:663)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.setTraversalValues(AndroidComposeViewAccessibilityDelegateCompat.android.kt:678)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.getCurrentSemanticsNodes(AndroidComposeViewAccessibilityDelegateCompat.android.kt:355)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.createNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.java:485)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.access$createNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.java:189)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider.createAccessibilityNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2879)
at android.view.View.createAccessibilityNodeInfoInternal(View.java:6578)
at android.view.View$AccessibilityDelegate.createAccessibilityNodeInfo(View.java:23764)
at android.view.View.createAccessibilityNodeInfo(View.java:6564)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:145)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:119)
at android.view.View.onInitializeAccessibilityEventInternal(View.java:6518)
at android.view.View$AccessibilityDelegate.onInitializeAccessibilityEvent(View.java:23676)
at androidx.core.view.AccessibilityDelegateCompat.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:265)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:80)
at android.view.View.onInitializeAccessibilityEvent(View.java:6504)
at android.view.View.sendAccessibilityEventUncheckedInternal(View.java:6365)
at android.view.View$AccessibilityDelegate.sendAccessibilityEventUnchecked(View.java:23615)
at androidx.core.view.AccessibilityDelegateCompat.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:201)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:117)
at android.view.View.sendAccessibilityEventUnchecked(View.java:6348)
at android.view.ViewRootImpl$SendWindowContentChangedAccessibilityEvent.run(ViewRootImpl.java:8969)
at android.view.ViewRootImpl$SendWindowContentChangedAccessibilityEvent.runOrPost(ViewRootImpl.java:8998)
at android.view.ViewRootImpl.postSendWindowContentChangedCallback(ViewRootImpl.java:7941)
at android.view.ViewRootImpl.notifySubtreeAccessibilityStateChanged(ViewRootImpl.java:8120)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3310)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3310)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3310)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3310)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3310)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3310)
at android.view.View.notifySubtreeAccessibilityStateChangedIfNeeded(View.java:9390)
at android.view.ViewGroup.addViewInner(ViewGroup.java:4717)
at android.view.ViewGroup.addView(ViewGroup.java:4492)
at android.view.ViewGroup.addView(ViewGroup.java:4433)
at android.view.ViewGroup.addView(ViewGroup.java:4406)
at androidx.compose.ui.platform.AndroidComposeView.getAndroidViewsHandler$ui_release(AndroidComposeView.android.kt:299)
at androidx.compose.ui.platform.AndroidComposeView.addAndroidView(AndroidComposeView.java:706)
at androidx.compose.ui.viewinterop.AndroidViewHolder$layoutNode$1$3.invoke(AndroidViewHolder.android.kt:335)
at androidx.compose.ui.viewinterop.AndroidViewHolder$layoutNode$1$3.invoke(AndroidViewHolder.android.kt:334)
at androidx.compose.ui.node.LayoutNode.attach$ui_release(LayoutNode.kt:423)
at androidx.compose.ui.node.LayoutNode.attach$ui_release(LayoutNode.kt:416)
at androidx.compose.ui.node.LayoutNode.attach$ui_release(LayoutNode.kt:416)
at androidx.compose.ui.node.LayoutNode.attach$ui_release(LayoutNode.kt:416)
at androidx.compose.ui.node.LayoutNode.attach$ui_release(LayoutNode.kt:416)
at androidx.compose.ui.node.LayoutNode.insertAt$ui_release(LayoutNode.kt:286)
at androidx.compose.ui.node.UiApplier.insertBottomUp(UiApplier.android.kt:31)
at androidx.compose.ui.node.UiApplier.insertBottomUp(UiApplier.android.kt:21)
at androidx.compose.runtime.ComposerImpl$createNode$3.invoke(Composer.kt:1626)
at androidx.compose.runtime.ComposerImpl$createNode$3.invoke(Composer.kt:1621)
at androidx.compose.runtime.ComposerImpl$recordInsert$2.invoke(Composer.kt:3554)
at androidx.compose.runtime.ComposerImpl$recordInsert$2.invoke(Composer.kt:3551)
at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:810)
at androidx.compose.runtime.CompositionImpl.applyChanges(Composition.kt:842)
at androidx.compose.runtime.Recomposer.composeInitial$runtime_release(Recomposer.kt:994)
at androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:519)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:140)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:131)
at androidx.compose.ui.platform.AndroidComposeView.setOnViewTreeOwnersAvailable(AndroidComposeView.android.kt:1095)
at androidx.compose.ui.platform.WrappedComposition.setContent(Wrapper.android.kt:131)
at androidx.compose.ui.platform.WrappedComposition.onStateChanged(Wrapper.android.kt:181)
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.kt:314)
at androidx.lifecycle.LifecycleRegistry.addObserver(LifecycleRegistry.kt:192)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:138)
at androidx.compose.ui.platform.WrappedComposition$setContent$1.invoke(Wrapper.android.kt:131)
at androidx.compose.ui.platform.AndroidComposeView.onAttachedToWindow(AndroidComposeView.android.kt:1170)
at android.view.View.dispatchAttachedToWindow(View.java:15837)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3139)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3147)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3147)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3147)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3147)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3147)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3147)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1783)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1489)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7472)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
at android.view.Choreographer.doCallbacks(Choreographer.java:686)
at android.view.Choreographer.doFrame(Choreographer.java:622)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7223)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
ja...@gmail.com <ja...@gmail.com> #42
Hi,
please take a look at LayoutCoordinate operations are only valid when isAttached is true
This issue is happening on multiple types of devices (also in emulator).
In our logs i saw that we had similar crashes when user was on dialog screen where we have text inputs. I guess its related to my comment above (but i was never able to reproduce that issue by myself until i updated compose to 1.4.3).
he...@gmail.com <he...@gmail.com> #43
java.lang.IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true
at androidx.compose.ui.node.NodeCoordinator.localToRoot-MK-Hz9U(NodeCoordinator.kt:850)
at androidx.compose.foundation.text.TextFieldDelegate$Companion.notifyFocusedRect$foundation_release(TextFieldDelegate.kt:173)
at androidx.compose.foundation.text.CoreTextFieldKt.notifyFocusedRect(CoreTextField.kt:1111)
at androidx.compose.foundation.text.CoreTextFieldKt.access$notifyFocusedRect(CoreTextField.kt:1)
at androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$5$1$1$2.measure-3p2s80s(CoreTextField.kt:644)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(InnerNodeCoordinator.kt:106)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke(LayoutNodeLayoutDelegate.kt:1427)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke(LayoutNodeLayoutDelegate.kt:1423)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:2254)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:457)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:230)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:120)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:107)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:1423)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.access$performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:36)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:514)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.measure-BRTryo0(LayoutNodeLayoutDelegate.kt:493)
at androidx.compose.foundation.text.selection.SimpleLayoutKt$SimpleLayout$1.measure-3p2s80s(SimpleLayout.kt:35)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(InnerNodeCoordinator.kt:106)
at androidx.compose.foundation.text.TextFieldSizeKt$textFieldMinSize$1$1.invoke-3p2s80s(TextFieldSize.kt:69)
at androidx.compose.foundation.text.TextFieldSizeKt$textFieldMinSize$1$1.invoke(TextFieldSize.kt:61)
at androidx.compose.ui.layout.LayoutModifierImpl.measure-3p2s80s(LayoutModifier.kt:294)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.foundation.text.HorizontalScrollLayoutModifier.measure-3p2s80s(TextFieldScroll.kt:188)
at androidx.compose.ui.node.BackwardsCompatNode.measure-3p2s80s(BackwardsCompatNode.kt:314)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s(GraphicsLayerModifier.kt:649)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.foundation.layout.SizeNode.measure-3p2s80s(Size.kt:838)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.foundation.layout.SizeNode.measure-3p2s80s(Size.kt:838)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke(LayoutNodeLayoutDelegate.kt:1427)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke(LayoutNodeLayoutDelegate.kt:1423)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:2254)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:457)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:230)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:120)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:107)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:1423)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.access$performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:36)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:514)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.measure-BRTryo0(LayoutNodeLayoutDelegate.kt:493)
at androidx.compose.foundation.layout.BoxKt$boxMeasurePolicy$1.measure-3p2s80s(Box.kt:114)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(InnerNodeCoordinator.kt:106)
at androidx.compose.foundation.layout.SizeNode.measure-3p2s80s(Size.kt:838)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.foundation.layout.PaddingNode.measure-3p2s80s(Padding.kt:397)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.foundation.layout.IntrinsicSizeModifier.measure-3p2s80s(Intrinsic.kt:253)
at androidx.compose.ui.node.BackwardsCompatNode.measure-3p2s80s(BackwardsCompatNode.kt:314)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:116)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke(LayoutNodeLayoutDelegate.kt:1427)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke(LayoutNodeLayoutDelegate.kt:1423)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:2254)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:457)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:230)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:120)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:107)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:1423)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate.access$performMeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:36)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0(LayoutNodeLayoutDelegate.kt:514)
at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release(LayoutNode.kt:1090)
at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release$default(LayoutNode.kt:1081)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure-sdFAvZA(MeasureAndLayoutDelegate.kt:315)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.remeasureAndRelayoutIfNeeded(MeasureAndLayoutDelegate.kt:450)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.remeasureAndRelayoutIfNeeded$default(MeasureAndLayoutDelegate.kt:433)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout(MeasureAndLayoutDelegate.kt:336)
at androidx.compose.ui.platform.AndroidComposeView.measureAndLayout(AndroidComposeView.android.kt:822)
at androidx.compose.ui.node.Owner.measureAndLayout$default(Owner.kt:220)
at androidx.compose.ui.platform.AndroidComposeView.dispatchDraw(AndroidComposeView.android.kt:1052)
at android.view.View.draw(View.java:22647)
at android.view.View.updateDisplayListIfDirty(View.java:21519)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
at android.view.View.updateDisplayListIfDirty(View.java:21475)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
at android.view.View.updateDisplayListIfDirty(View.java:21475)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
at android.view.View.updateDisplayListIfDirty(View.java:21475)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
at android.view.View.updateDisplayListIfDirty(View.java:21475)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
at android.view.View.updateDisplayListIfDirty(View.java:21475)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
at android.view.View.updateDisplayListIfDirty(View.java:21475)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
at android.view.View.updateDisplayListIfDirty(View.java:21475)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
at android.view.View.updateDisplayListIfDirty(View.java:21475)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
at android.view.View.updateDisplayListIfDirty(View.java:21475)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
at android.view.View.updateDisplayListIfDirty(View.java:21475)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:534)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:540)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:616)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:4421)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4149)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3309)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2126)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8658)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1037)
at android.view.Choreographer.doCallbacks(Choreographer.java:845)
at android.view.Choreographer.doFrame(Choreographer.java:780)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1022)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7839)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
It seems to happen when i edit the text in a BasicTextField. Essentially i can reproduce it by clearing the text then pressing a character then backspace then a character and eventually it crashes as above.
I noticed that it crashes for this text box:
@Composable
fun MiniTextField(
modifier: Modifier = Modifier,
textFieldValue: TextFieldValue,
onValueChange: (TextFieldValue) -> Unit,
charLimit: Int? = null,
textAlign: TextAlign = TextAlign.End,
focusManager: FocusManager = LocalFocusManager.current,
overrideFocusDirection: FocusDirection? = null,
focusRequester: FocusRequester? = null,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
focusUpdateScope: CoroutineScope = rememberCoroutineScope(),
colors: TextFieldColors = TextFieldDefaults.textFieldColors()
) = BasicTextField(
value = textFieldValue,
onValueChange = {
if (charLimit == null || it.text.length <= charLimit) onValueChange(it)
},
textStyle = MaterialTheme.typography.h5.copy(
textAlign = textAlign,
color = MaterialTheme.tngColors.onSurface
),
cursorBrush = SolidColor(MaterialTheme.tngColors.primary),
interactionSource = interactionSource,
decorationBox = {
if (textFieldValue.text == "") Text(
"0",
style = MaterialTheme.typography.h5,
textAlign = textAlign,
color = MaterialTheme.tngColors.onSurface.copy(
alpha = MaterialTheme.tngColors.disabledAlpha
)
)
else it()
},
keyboardActions = KeyboardActions(
onNext = {
focusManager.moveFocus(
overrideFocusDirection ?: FocusDirection.Right
)
}
),
singleLine = true,
modifier = modifier
.width(IntrinsicSize.Min)
.padding(start = 4.dp)
.widthIn(min = 40.dp, max = 40.dp)
.let {
if (focusRequester != null) it.focusRequester(focusRequester)
else it
},
keyboardOptions = KeyboardOptions(
keyboardType = KeyboardType.Number,
imeAction = ImeAction.Next
)
)
But if i remove the decoration box code i don't see the issue:
@Composable
fun MiniTextField(
modifier: Modifier = Modifier,
textFieldValue: TextFieldValue,
onValueChange: (TextFieldValue) -> Unit,
charLimit: Int? = null,
textAlign: TextAlign = TextAlign.End,
focusManager: FocusManager = LocalFocusManager.current,
overrideFocusDirection: FocusDirection? = null,
focusRequester: FocusRequester? = null,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
focusUpdateScope: CoroutineScope = rememberCoroutineScope(),
colors: TextFieldColors = TextFieldDefaults.textFieldColors()
) = BasicTextField(
value = textFieldValue,
onValueChange = {
if (charLimit == null || it.text.length <= charLimit) onValueChange(it)
},
textStyle = MaterialTheme.typography.h5.copy(
textAlign = textAlign,
color = MaterialTheme.tngColors.onSurface
),
cursorBrush = SolidColor(MaterialTheme.tngColors.primary),
interactionSource = interactionSource,
keyboardActions = KeyboardActions(
onNext = {
focusManager.moveFocus(
overrideFocusDirection ?: FocusDirection.Right
)
}
),
singleLine = true,
modifier = modifier
.width(IntrinsicSize.Min)
.padding(start = 4.dp)
.widthIn(min = 40.dp, max = 40.dp)
.let {
if (focusRequester != null) it.focusRequester(focusRequester)
else it
},
keyboardOptions = KeyboardOptions(
keyboardType = KeyboardType.Number,
imeAction = ImeAction.Next
)
)
ae...@google.com <ae...@google.com> #44
Sean, could you investigate the TextField-related crasher newly reported in #43? (You can ignore the rest of this bug, it covers many different crashers most of which have been fixed already.)
se...@google.com <se...@google.com> #45
initial note: this call is cause
This is dispatched directly during a call for (remeasure?) in the same call stack
at androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$5$1$1$2.measure-3p2s80s(CoreTextField.kt:644)
at androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(InnerNodeCoordinator.kt:106)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke(LayoutNodeLayoutDelegate.kt:1427)
at androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke(LayoutNodeLayoutDelegate.kt:1423)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:2254)
Checking
George, can we assume that we're attached in measure? And if not any suggestions on how to resolve here?
mo...@google.com <mo...@google.com> #46
It looks like it is properly checking to see if the LayoutNode
is attached before calling invalidating:
But that doesn't mean it is still valid by the time it is remeasured. This should be checked, either in LayoutNode or in the caller.
ae...@google.com <ae...@google.com>
se...@google.com <se...@google.com> #48
Halil, can you take a look at the crash in #43?
It looks like we can skip the work in CoreTextFiled measure block when not attached based on George's input.
ja...@gmail.com <ja...@gmail.com> #49
composes version 1.5.0-alpha04
Currently im able to reproduce that issue when i have multiple textinputs in that dialog - i click on first input, keyboard is shown up, i click into last one textinput, then i click into first input again and crash occur.
E at androidx.compose.ui.node.NodeCoordinator.localToRoot-MK-Hz9U(NodeCoordinator.kt:844)
E at androidx.compose.foundation.text.TextFieldDelegate$Companion.notifyFocusedRect$foundation_release(TextFieldDelegate.kt:173)
E at androidx.compose.foundation.text.CoreTextFieldKt.notifyFocusedRect(CoreTextField.kt:1111)
E at androidx.compose.foundation.text.CoreTextFieldKt.notifyTextInputServiceOnFocusChange(CoreTextField.kt:962)
E at androidx.compose.foundation.text.CoreTextFieldKt.access$notifyTextInputServiceOnFocusChange(CoreTextField.kt:1)
E at androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$focusModifier$1.invoke(CoreTextField.kt:293)
E at androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$focusModifier$1.invoke(CoreTextField.kt:282)
E at androidx.compose.ui.focus.FocusChangedModifierNode.onFocusEvent(FocusChangedModifier.kt:59)
E at androidx.compose.ui.focus.FocusEventModifierNodeKt.refreshFocusEventNodes(FocusEventModifierNode.kt:68)
E at androidx.compose.ui.focus.FocusTransactionsKt.requestFocusForChild(FocusTransactions.kt:208)
E at androidx.compose.ui.focus.FocusTransactionsKt.performRequestFocus(FocusTransactions.kt:69)
E at androidx.compose.ui.focus.FocusTransactionsKt.requestFocus(FocusTransactions.kt:44)
E at androidx.compose.ui.focus.FocusRequester.focus$ui_release(FocusRequester.kt:72)
E at androidx.compose.ui.focus.FocusRequester.requestFocus(FocusRequester.kt:63)
E at androidx.compose.foundation.text.CoreTextFieldKt.tapToFocus(CoreTextField.kt:939)
E at androidx.compose.foundation.text.CoreTextFieldKt.access$tapToFocus(CoreTextField.kt:1)
E at androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$pointerModifier$1.invoke-k-4lQ0M(CoreTextField.kt:342)
E at androidx.compose.foundation.text.CoreTextFieldKt$CoreTextField$pointerModifier$1.invoke(CoreTextField.kt:341)
E at androidx.compose.foundation.text.TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1$2$2.invoke-k-4lQ0M(TextFieldPressGestureFilter.kt:81)
E at androidx.compose.foundation.text.TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1$2$2.invoke(TextFieldPressGestureFilter.kt:54)
E at androidx.compose.foundation.gestures.TapGestureDetectorKt$detectTapAndPress$2$1.invokeSuspend(TapGestureDetector.kt:255)
E at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
E at kotlinx.coroutines.DispatchedTaskKt.resume(DispatchedTask.kt:178)
E at kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:166)
E at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:397)
E at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl(CancellableContinuationImpl.kt:431)
E at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$default(CancellableContinuationImpl.kt:420)
E at kotlinx.coroutines.CancellableContinuationImpl.resumeWith(CancellableContinuationImpl.kt:328)
E at androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine.offerPointerEvent(SuspendingPointerInputFilter.kt:670)
E at androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl.dispatchPointerEvent(SuspendingPointerInputFilter.kt:546)
E at androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl.onPointerEvent-H0pRuoY(SuspendingPointerInputFilter.kt:568)
E at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:317)
E at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:303)
E at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:303)
E at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:303)
E at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:303)
E at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:303)
E at androidx.compose.ui.input.pointer.NodeParent.dispatchMainEventPass(HitPathTracker.kt:183)
E at androidx.compose.ui.input.pointer.HitPathTracker.dispatchChanges(HitPathTracker.kt:102)
E at androidx.compose.ui.input.pointer.PointerInputEventProcessor.process-BIzXfog(PointerInputEventProcessor.kt:96)
E at androidx.compose.ui.platform.AndroidComposeView.sendMotionEvent-8iAsVTc(AndroidComposeView.android.kt:1376)
E at androidx.compose.ui.platform.AndroidComposeView.handleMotionEvent-8iAsVTc(AndroidComposeView.android.kt:1328)
E at androidx.compose.ui.platform.AndroidComposeView.dispatchTouchEvent(AndroidComposeView.android.kt:1268)
E at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3121)
E at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2802)
E at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3121)
E at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2802)
E at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3121)
E at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2802)
E at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3121)
E at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2802)
E at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3121)
E at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2802)
E at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3121)
E at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2802)
E at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3121)
E at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2802)
E at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3121)
E at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2802)
E at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3121)
E at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2802)
E at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:500)
E at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1905)
E at android.app.Dialog.dispatchTouchEvent(Dialog.java:911)
E at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:70)
E at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:458)
E at android.view.View.dispatchPointerEvent(View.java:15262)
E at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:6654)
E at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6454)
E at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5910)
E at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5967)
E at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5933)
E at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:6098)
E at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5941)
E at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:6155)
E at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5914)
E at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5967)
E at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5933)
E at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5941)
E at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5914)
E at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:8996)
E at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:8947)
E at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:8916)
E at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:9119)
E at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:267)
E at android.os.MessageQueue.nativePollOnce(Native Method)
E at android.os.MessageQueue.next(MessageQueue.java:335)
E at android.os.Looper.loopOnce(Looper.java:161)
E at android.os.Looper.loop(Looper.java:288)
E at android.app.ActivityThread.main(ActivityThread.java:7872)
E at java.lang.reflect.Method.invoke(Native Method)
E at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
E at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
E Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [androidx.compose.ui.platform.MotionDurationScaleImpl@dc5dd85, androidx.compose.runtime.BroadcastFrameClock@9c07da, StandaloneCoroutine{Cancelling}@96ff40b, AndroidUiDispatcher@c8872e8]```
ha...@google.com <ha...@google.com> #50
The issue in
- MiniTextField calls BasicTextField which instantiates and remembers an internal
TextFieldState
TextFieldState
is responsible for keeping track of many BasicTextField objects, including LayoutCoordinates- layout coordinates are useful for decoration boxes. Thanks to them we can keep track of where the actual text field is inside the decoration box.
- Decoration box in the given code (MiniTextField) toggles the innerTextField in and out of composition according to text content
- This in turn invalidates the layout nodes and coordinates.
- However,
TextFieldState
is still remembered and keeps the latest layoutCoordinates that were reported by outer and inner text field's globallyPositioned modifiers- When innerTextField is removed from composition by the
decorationBox
, cached coordinates become stale.
- When innerTextField is removed from composition by the
- Next time innerTextField toggles in to the composition, first measure block reads the stale layoutCoordinates
- Measure happens before globallyPositioned modifier updates the inner text field's layoutCoordinates inside TextFieldState.
In any case, we should not assume that we have an attached
layoutCoordinates object during measure.
Until a fix is released, my advice is to remove this toggling behavior from decorationBox in your code.
I couldn't reproduce the other issue that was mentioned in
ha...@google.com <ha...@google.com> #51
I also created this issue
se...@google.com <se...@google.com>
ap...@google.com <ap...@google.com> #52
Branch: androidx-main
commit f4b892cb2d511d397d24e62e2bcc6fe561b1d7f9
Author: Halil Ozercan <halilibo@google.com>
Date: Thu May 11 16:52:35 2023
Guard LayoutCoordinates in TextFieldState
CoreTextField uses layoutCoordinates in TextFieldState to only calculate relative positioning, focused rectangle area, etc. We are safer to fully guard layoutCoordinates by only providing it when it's attached.
Fix:
Bug:
Test: :compose:foundation:foundation:cAT
Change-Id: I31244f4b8feafbac62a3f126b16e641e136d70b9
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/CoreTextField.kt
ap...@google.com <ap...@google.com> #53
Branch: androidx-main
commit e75b234414cf330eda12f2654e648de350e739b5
Author: Halil Ozercan <halilibo@google.com>
Date: Thu May 11 16:27:46 2023
Add a failing test for stale layoutCoordinates
This added test should fail. The following CL should contain the fix and make this test pass.
Bug:
Test: :compose:foundation:foundation:cAT
Change-Id: Ia82d34e01343aadd452f78513b710d6f96436650
M compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/textfield/TextFieldTest.kt
sa...@mindstix.com <sa...@mindstix.com> #54
When this fix mentioned in
ja...@gmail.com <ja...@gmail.com> #55
AndroidView documentation:
vy...@gmail.com <vy...@gmail.com> #56
Using compose 1.4.3 reproduces this error every time TextField is focused for a second time.
It is marked as fixed, but no information how to get fix. Can someone provide more information on the fix. For now TextFields are unusable.
ra...@gmail.com <ra...@gmail.com> #57
k....@gmail.com <k....@gmail.com> #58
la...@gmail.com <la...@gmail.com> #59
ca...@digitalchargingsolutions.com <ca...@digitalchargingsolutions.com> #60
Can a Googler please confirm with what release this was fixed? With latest compose alphas (dev.chrisbanes.compose:compose-bom:2023.10.00-alpha02) it doesn't crash,
on the latest stable BOM (2023.09.02) it does crash.
ca...@digitalchargingsolutions.com <ca...@digitalchargingsolutions.com> #61
ca...@digitalchargingsolutions.com <ca...@digitalchargingsolutions.com> #62
Sorry to bump, still unclear when this got fixed.
kv...@mafcarrefour.com <kv...@mafcarrefour.com> #63
Quick info :
I have tested with lot of compose versions . It is started breaking from 1.4.0-alpha04 and started working again from 1.6.0-alpha01
But looking at the commits still not sure which commit is impacting this change. Can somebody please check and confirm the changes and also let us know when 1.6.0 stable version will be available
si...@esri.com <si...@esri.com> #64
Android Studio Hedgehog | 2023.1.1 | Kotlin 1.9.10 | Compose 1.5.4 | androidx.compose.material3:material3-android:1.2.0-alpha12 | The app crashes when layout inspector is opened in Android Studio.
java.lang.IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true
at androidx.compose.ui.node.NodeCoordinator.localToRoot-MK-Hz9U(NodeCoordinator.kt:854)
at androidx.compose.ui.node.NodeCoordinator.localToWindow-MK-Hz9U(NodeCoordinator.kt:730)
at androidx.compose.ui.layout.LayoutCoordinatesKt.positionInWindow(LayoutCoordinates.kt:122)
at deps.ui.inspection.androidx.compose.ui.tooling.data.SlotTreeKt.boundsOfLayoutNode(SlotTree.jvm.kt:568)
at deps.ui.inspection.androidx.compose.ui.tooling.data.SlotTreeKt.access$boundsOfLayoutNode(SlotTree.jvm.kt:1)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:596)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
at deps.ui.inspection.androidx.compose.ui.tooling.data.CompositionCallStack.convert(SlotTree.jvm.kt:591)
so...@gmail.com <so...@gmail.com> #65
ay...@gmail.com <ay...@gmail.com> #66
It crashes with this error when navigating from one tab to the other (by swiping or by clicking directly on the other tab)
I'm using Android Studio Hedgehog | 2023.1.1 and androidx.compose.material3:material3:1.2.0-beta01
ni...@gmail.com <ni...@gmail.com> #67
bg...@gmail.com <bg...@gmail.com> #68
ra...@gmail.com <ra...@gmail.com> #69
da...@gmail.com <da...@gmail.com> #70
ic...@gmail.com <ic...@gmail.com> #71
gu...@googlemail.com <gu...@googlemail.com> #72
I am also affected by this issue, java.lang.IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true
whenever I try to refresh a compose layout with the LayoutInspector.
Android Studio Iguana | 2023.2.1; Compose BOM 2023.10.01; M2 chip MacOS
de...@gmail.com <de...@gmail.com> #73
Android Studio Iguana
ma...@gmail.com <ma...@gmail.com> #74
ch...@gmail.com <ch...@gmail.com> #75
if(someCondition) {
...
} else {
innerTextField()
}
which lead to "java.lang.IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true", next chunk solves the problem:
if(someCondition) {
...
}
innerTextField()
Hope it helps to someone.
ha...@monday.com <ha...@monday.com> #76
This issue is back for some samsung devices with Android 14 (Galaxy S23 Ultra, Galaxy S22 Ultra, Galaxy Z Fold3 5G, Galaxy Tab S6 Lite, Galaxy Tab S7 FE).
Fatal Exception: java.lang.IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true
at androidx.compose.ui.node.NodeCoordinator.getParentLayoutCoordinates(NodeCoordinator.kt:255)
at androidx.compose.ui.layout.LayoutCoordinatesKt.findRootCoordinates(LayoutCoordinates.kt:180)
at androidx.compose.foundation.text.TextFieldDelegate$Companion$updateTextLayoutResult$1$1$1.invoke-58bKbWc(TextFieldDelegate.kt:207)
at androidx.compose.foundation.text.TextFieldDelegate$Companion$updateTextLayoutResult$1$1$1.invoke(TextFieldDelegate.kt:202)
at androidx.compose.ui.text.input.CursorAnchorInfoController.updateCursorAnchorInfo(CursorAnchorInfoController.android.kt:141)
at androidx.compose.ui.text.input.CursorAnchorInfoController.requestUpdate(CursorAnchorInfoController.java:82)
at androidx.compose.ui.text.input.TextInputServiceAndroid$createInputConnection$1.onRequestCursorAnchorInfo(TextInputServiceAndroid.android.kt:163)
at androidx.compose.ui.text.input.RecordingInputConnection.requestCursorUpdates(RecordingInputConnection.android.kt:303)
at android.view.inputmethod.InputConnection.requestCursorUpdates(InputConnection.java:1261)
at android.view.inputmethod.RemoteInputConnectionImpl.requestCursorUpdatesInternal(RemoteInputConnectionImpl.java:1156)
at android.view.inputmethod.RemoteInputConnectionImpl.lambda$requestCursorUpdates$40(RemoteInputConnectionImpl.java:1117)
at android.view.inputmethod.RemoteInputConnectionImpl.$r8$lambda$k6-S-92SkX46wBp_cJHayK6e50Q()
at android.view.inputmethod.RemoteInputConnectionImpl$$ExternalSyntheticLambda42.get(:8)
at android.view.inputmethod.RemoteInputConnectionImpl.lambda$dispatchWithTracing$48(RemoteInputConnectionImpl.java:1479)
at android.view.inputmethod.RemoteInputConnectionImpl.$r8$lambda$uOaDEZ_WodR-21KtgmT8kU0QoWI()
at android.view.inputmethod.RemoteInputConnectionImpl$$ExternalSyntheticLambda18.run(:10)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:230)
at android.os.Looper.loop(Looper.java:319)
at android.app.ActivityThread.main(ActivityThread.java:8893)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:608)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)
26...@gmail.com <26...@gmail.com> #77
implementation(platform("androidx.compose:compose-bom:2024.05.00"))
implementation("androidx.compose.ui:ui")
implementation("androidx.compose.ui:ui-viewbinding")
implementation("androidx.compose.ui:ui-graphics")
implementation("androidx.compose.ui:ui-tooling-preview")
implementation("androidx.compose.material3:material3")
Fatal Exception: java.lang.IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true
at androidx.compose.ui.internal.InlineClassHelperKt.throwIllegalStateException(InlineClassHelper.kt:26)
at androidx.compose.ui.node.NodeCoordinator.getParentLayoutCoordinates(NodeCoordinator.kt:1545)
at androidx.compose.ui.layout.LayoutCoordinatesKt.findRootCoordinates(LayoutCoordinates.kt:228)
at androidx.compose.ui.focus.FocusTraversalKt.focusRect(FocusTraversal.kt:130)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt.findBestCandidate-4WY_MpI(TwoDimensionalFocusSearch.kt:234)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt.searchChildren-4C6V_qg(TwoDimensionalFocusSearch.kt:177)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt.generateAndSearchChildren-4C6V_qg(TwoDimensionalFocusSearch.kt:152)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt.searchChildren-4C6V_qg(TwoDimensionalFocusSearch.kt:184)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt.generateAndSearchChildren-4C6V_qg(TwoDimensionalFocusSearch.kt:152)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt.searchChildren-4C6V_qg(TwoDimensionalFocusSearch.kt:184)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt.access$searchChildren-4C6V_qg(TwoDimensionalFocusSearch.kt:1)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt$generateAndSearchChildren$1.invoke(TwoDimensionalFocusSearch.kt:159)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt$generateAndSearchChildren$1.invoke(TwoDimensionalFocusSearch.kt:157)
at androidx.tv.foundation.lazy.list.LazyLayoutBeyondBoundsModifierLocal.layout-o7g1Pn8(LazyBeyondBoundsModifier.kt:185)
at androidx.compose.ui.focus.BeyondBoundsLayoutKt.searchBeyondBounds--OM-vw8(BeyondBoundsLayout.kt:45)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt.generateAndSearchChildren-4C6V_qg(TwoDimensionalFocusSearch.kt:157)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt.twoDimensionalFocusSearch-sMXa3k8(TwoDimensionalFocusSearch.kt:81)
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:222)
at androidx.compose.ui.platform.AndroidComposeView$keyInputModifier$1.invoke-ZmokQxo(AndroidComposeView.android.kt:284)
at androidx.compose.ui.platform.AndroidComposeView$keyInputModifier$1.invoke(AndroidComposeView.android.kt:279)
at androidx.compose.ui.input.key.KeyInputNode.onKeyEvent-ZmokQxo(KeyInputModifier.kt:80)
at androidx.compose.ui.focus.FocusOwnerImpl.dispatchKeyEvent-ZmokQxo(FocusOwnerImpl.kt:249)
at androidx.compose.ui.platform.AndroidComposeView.dispatchKeyEvent(AndroidComposeView.android.kt:801)
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:490)
at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1880)
at android.app.Activity.dispatchKeyEvent(Activity.java:4156)
at androidx.core.app.ComponentActivity.superDispatchKeyEvent(ComponentActivity.java:120)
at androidx.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:85)
at androidx.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.java:138)
at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:404)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:6278)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6144)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5626)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5683)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5649)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5814)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5657)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5871)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5630)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5683)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5649)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5657)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5630)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5683)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5649)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5847)
at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:6005)
at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:3263)
at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2827)
at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2818)
at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:3240)
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:7839)
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:1003)
so...@gmail.com <so...@gmail.com> #78
java.lang.IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true
at t1.e1.j(Unknown Source:28)
at androidx.compose.ui.layout.a.d(Unknown Source:0)
at androidx.compose.ui.focus.a.k(Unknown Source:4)
at androidx.compose.ui.focus.a.h(Unknown Source:93)
at androidx.compose.ui.focus.a.Q(Unknown Source:154)
at androidx.compose.ui.focus.a.q(Unknown Source:0)
at androidx.compose.ui.focus.a.Q(Unknown Source:180)
at c1.z.a(Unknown Source:14)
at c1.z.d(Unknown Source:7)
at b8.b.i(Unknown Source:121)
at androidx.compose.ui.focus.a.O(Unknown Source:206)
at androidx.compose.ui.focus.a.q(Unknown Source:19)
at androidx.compose.ui.focus.a.R(Unknown Source:110)
at androidx.compose.ui.focus.a.R(Unknown Source:83)
at c1.g.b(Unknown Source:290)
at u1.r.d(Unknown Source:214)
at m1.d.S(Unknown Source:9)
at u1.x.dispatchKeyEvent(Unknown Source:1090)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1959)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1959)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1959)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1959)
at com.android.internal.policy.DecorView.superDispatchKeyEvent(DecorView.java:476)
at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1861)
at android.app.Activity.dispatchKeyEvent(Activity.java:4085)
at c.n.c(Unknown Source:5)
at fk.n.M0(Unknown Source:10)
at c.n.i(Unknown Source:26)
at c.n.dispatchKeyEvent(Unknown Source:0)
at qc.g.dispatchKeyEvent(Unknown Source:163)
at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:390)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:5960)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5828)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5310)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5367)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5333)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5498)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5341)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5555)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5314)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5367)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5333)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5341)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5314)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5367)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5333)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5531)
at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:5689)
at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:3287)
at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2829)
at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2820)
at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:3264)
at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:143)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:335)
at android.os.Looper.loop(Looper.java:183)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
mm...@ebay.com <mm...@ebay.com> #79
I know from experience with Flutter and Japanese language input, Samsung keyboards behave in ...interesting ways.
Device: Samsung S23 Ultra
OS: Android 14
so...@google.com <so...@google.com> #80
This ticket has been marked as Fixed and is not monitored anymore.
If you do encounter the same or a similar issue, please file a separate bug. Thanks!
Description
Jetpack Compose release version: 1.0.5
Android Studio Build:
Android Studio Bumblebee | 2021.1.1 Beta 3
Build #AI-211.7628.21.2111.7863044, built on October 28, 2021
Runtime version: 11.0.11+9-b60-7590822 amd64
VM: OpenJDK 64-Bit Server VM by Oracle Corporation
Windows 10 10.0
GC: G1 Young Generation, G1 Old Generation
Memory: 4096M
Cores: 8
Registry: external.system.auto.import.disabled=true
Kotlin version: 1.5.31
Steps to Reproduce: Unknown, crashlytics device
Device info:
Brand:samsung
Model:Galaxy S7 edge
Orientation: Landscape
RAM free: 1.26 GB
Disk free: 2.99 GB
Operating System
Version:Android 8.0.0
Rooted:No
Crash:
Fatal Exception: java.lang.RuntimeException: Unable to destroy activity {x.ui.activity.SplashActivity}: java.lang.IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4605)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4623)
at android.app.ActivityThread.-wrap5(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1757)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Caused by java.lang.IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true
at androidx.compose.ui.node.LayoutNodeWrapper.getParentLayoutCoordinates(LayoutNodeWrapper.kt:168)
at androidx.compose.ui.layout.LayoutCoordinatesKt.findRoot(LayoutCoordinates.kt:158)
at androidx.compose.ui.semantics.SemanticsWrapper.touchBoundsInRoot(SemanticsWrapper.kt:88)
at androidx.compose.ui.semantics.SemanticsNode.getTouchBoundsInRoot(SemanticsNode.kt:93)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2518)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2533)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2559)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.getCurrentSemanticsNodes(AndroidComposeViewAccessibilityDelegateCompat.android.kt:228)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.createNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:337)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.access$sendScrollEventIfNeeded(AndroidComposeViewAccessibilityDelegateCompat.android.kt:113)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider.createAccessibilityNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2391)
at android.view.View.createAccessibilityNodeInfoInternal(View.java:7918)
at android.view.View$AccessibilityDelegate.createAccessibilityNodeInfo(View.java:27418)
at android.view.View.createAccessibilityNodeInfo(View.java:7904)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:146)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:119)
at android.view.View.onInitializeAccessibilityEventInternal(View.java:7858)
at android.view.View$AccessibilityDelegate.onInitializeAccessibilityEvent(View.java:27301)
at androidx.core.view.AccessibilityDelegateCompat.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:257)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:76)
at android.view.View.onInitializeAccessibilityEvent(View.java:7844)
at android.view.View.sendAccessibilityEventUncheckedInternal(View.java:7708)
at android.view.View$AccessibilityDelegate.sendAccessibilityEventUnchecked(View.java:27240)
at androidx.core.view.AccessibilityDelegateCompat.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:196)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:113)
at android.view.View.sendAccessibilityEventUnchecked(View.java:7691)
at android.view.ViewRootImpl$SendWindowContentChangedAccessibilityEvent.run(ViewRootImpl.java:9304)
at android.view.ViewRootImpl$SendWindowContentChangedAccessibilityEvent.runOrPost(ViewRootImpl.java:9330)
at android.view.ViewRootImpl.postSendWindowContentChangedCallback(ViewRootImpl.java:8267)
at android.view.ViewRootImpl.notifySubtreeAccessibilityStateChanged(ViewRootImpl.java:8442)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3776)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3776)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3776)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3776)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3776)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:3776)
at android.view.View.notifySubtreeAccessibilityStateChangedIfNeeded(View.java:11901)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChangedIfNeeded(ViewGroup.java:3800)
at android.view.ViewGroup.notifySubtreeAccessibilityStateChangedIfNeeded(ViewGroup.java:3796)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5456)
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5403)
at android.view.ViewGroup.removeView(ViewGroup.java:5334)
at androidx.compose.ui.platform.AndroidComposeView.removeAndroidView(AndroidComposeView.android.kt:618)
at androidx.compose.ui.viewinterop.AndroidViewHolder$layoutNode$1$4.invoke(AndroidViewHolder.android.kt:276)
at androidx.compose.ui.viewinterop.AndroidViewHolder$layoutNode$1$4.invoke(AndroidViewHolder.android.kt:275)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:363)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:374)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:374)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:374)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:374)
at androidx.compose.ui.node.LayoutNode.detach$ui_release(LayoutNode.kt:374)
at androidx.compose.ui.node.LayoutNode.removeAll$ui_release(LayoutNode.kt:269)
at androidx.compose.ui.node.UiApplier.onClear(UiApplier.android.kt:44)
at androidx.compose.runtime.AbstractApplier.clear(Applier.kt:210)
at androidx.compose.runtime.CompositionImpl.dispose(Composition.kt:495)
at androidx.compose.ui.platform.WrappedComposition.dispose(Wrapper.android.kt:171)
at androidx.compose.ui.platform.WrappedComposition.onStateChanged(Wrapper.android.kt:179)
at androidx.lifecycle.LifecycleRegistry$ObserverWithState.dispatchEvent(LifecycleRegistry.java:354)
at androidx.lifecycle.LifecycleRegistry.backwardPass(LifecycleRegistry.java:284)
at androidx.lifecycle.LifecycleRegistry.sync(LifecycleRegistry.java:302)
at androidx.lifecycle.LifecycleRegistry.moveToState(LifecycleRegistry.java:148)
at androidx.lifecycle.LifecycleRegistry.handleLifecycleEvent(LifecycleRegistry.java:134)
at androidx.lifecycle.ReportFragment.dispatch(ReportFragment.java:68)
at androidx.lifecycle.ReportFragment.dispatch(ReportFragment.java:144)
at androidx.lifecycle.ReportFragment.onDestroy(ReportFragment.java:134)
at android.app.Fragment.performDestroy(Fragment.java:2870)
at android.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1424)
at android.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1549)
at android.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1611)
at android.app.FragmentManagerImpl.dispatchMoveToState(FragmentManagerImpl.java:3045)
at android.app.FragmentManagerImpl.dispatchDestroy(FragmentManagerImpl.java:3025)
at android.app.FragmentController.dispatchDestroy(FragmentController.java:245)
at android.app.Activity.performDestroy(Activity.java:7521)
at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1255)
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4592)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4623)
at android.app.ActivityThread.-wrap5(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1757)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)