Verified
Status Update
Comments
jo...@google.com <jo...@google.com>
to...@unext.jp <to...@unext.jp> #2
Thanks for the report. I was puzzled.
to...@unext.jp <to...@unext.jp> #3
The same for me. Android 4.0.4.
to...@unext.jp <to...@unext.jp> #4
This is intentional to reduce complexity of Spinner's API and implementation. Consider using a full-blown ListView in a dialog instead.
to...@unext.jp <to...@unext.jp> #6
I just spent 3 hours on this issue and I disagree that it is "working as intended". If you want to make developers happy, fail fast.
Spinner$DropDownAdapter wraps the client's adapter and shadows getItemViewType() and getViewTypeCount() and simply returns constants. This will never work as intended if the inner adapter has more view types.
I suggest the DropDownAdapter constructor asserts if adapter.getViewTypeCount() != 1.
Spinner$DropDownAdapter wraps the client's adapter and shadows getItemViewType() and getViewTypeCount() and simply returns constants. This will never work as intended if the inner adapter has more view types.
I suggest the DropDownAdapter constructor asserts if adapter.getViewTypeCount() != 1.
to...@gmail.com <to...@gmail.com> #7
THIS NEEDS TO BE FIXED.
to...@gmail.com <to...@gmail.com> #8
What's going on with this issue?
ra...@google.com <ra...@google.com>
ra...@google.com <ra...@google.com> #9
Implementation of Spinner.setAdapter() has changed in API 21 to enforce this, and now throws an exception.
From setAdapter's documentation:
On API LOLLIPOP and above, attempting to set an adapter with more than one view type will throw an IllegalArgumentException.
From setAdapter's documentation:
On API LOLLIPOP and above, attempting to set an adapter with more than one view type will throw an IllegalArgumentException.
ra...@google.com <ra...@google.com> #10
Levi, would it be possible to prioritize a fix for
le...@google.com <le...@google.com> #11
Hi Ralston, the fix for
se...@google.com <se...@google.com>
le...@google.com <le...@google.com> #12
Verified that the fix for
kl...@a8c.com <kl...@a8c.com> #13
We do not have a lazy columns/lists after compose-wrapped EditText and we are still getting this ANR. We do have a sort of complicated hierarchy of composables after the EditText tho, and I confirmed that you can reproduce the issue with just a regular column filled with a bunch of elements. Fix in 1.8.0 does not address this issues completely.
Description
Kotlin version: 1.9.23
We have an `EditText` wrapped in an `AndroidView` composable. It's causing a ton of ANRs for our users but we can't repro the issue so I don't have repro steps for you, sorry.
Stack trace (if applicable):
```
main (runnable):tid=1 systid=31507
at androidx.compose.ui.graphics.Matrix.g(Matrix.kt:1)
at androidx.compose.ui.platform.GraphicsLayerOwnerLayer.updateMatrix(GraphicsLayerOwnerLayer.android.kt:409)
at androidx.compose.ui.platform.GraphicsLayerOwnerLayer.getMatrix-sQKQjiQ(GraphicsLayerOwnerLayer.android.kt:377)
at androidx.compose.ui.platform.GraphicsLayerOwnerLayer.mapBounds(GraphicsLayerOwnerLayer.android.kt:330)
at androidx.compose.ui.node.NodeCoordinator.rectInParent$ui_release(NodeCoordinator.kt:1111)
at androidx.compose.ui.node.NodeCoordinator.rectInParent$ui_release$default(NodeCoordinator.kt:1089)
at androidx.compose.ui.node.NodeCoordinator.localBoundingBoxOf(NodeCoordinator.kt:949)
at androidx.compose.ui.focus.FocusTraversalKt.focusRect(FocusTraversal.kt:130)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt.findBestCandidate-4WY_MpI(TwoDimensionalFocusSearch.kt:238)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt.searchChildren-4C6V_qg(TwoDimensionalFocusSearch.kt:181)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt.access$searchChildren-4C6V_qg(TwoDimensionalFocusSearch.kt:1)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt$generateAndSearchChildren$1.invoke(TwoDimensionalFocusSearch.kt:162)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt$generateAndSearchChildren$1.invoke(TwoDimensionalFocusSearch.kt:160)
at androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsModifierLocal.layout-o7g1Pn8(LazyLayoutBeyondBoundsModifierLocal.kt:111)
at androidx.compose.ui.focus.BeyondBoundsLayoutKt.searchBeyondBounds--OM-vw8(BeyondBoundsLayout.kt:45)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt.generateAndSearchChildren-4C6V_qg(TwoDimensionalFocusSearch.kt:160)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt.searchChildren-4C6V_qg(TwoDimensionalFocusSearch.kt:188)
at androidx.compose.ui.focus.TwoDimensionalFocusSearchKt.generateAndSearchChildren-4C6V_qg(TwoDimensionalFocusSearch.kt:155)
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:247)
at androidx.compose.ui.platform.AndroidComposeView.focusSearch(AndroidComposeView.android.kt:855)
at android.view.ViewGroup.focusSearch(ViewGroup.java:1089)
at android.view.ViewGroup.focusSearch(ViewGroup.java:1089)
at android.view.View.focusSearch(View.java:14212)
at android.widget.TextView.hasEditorInFocusSearchDirection(TextView.java:10298)
at android.widget.TextView.onCreateInputConnection(TextView.java:10324)
at androidx.appcompat.widget.AppCompatEditText.onCreateInputConnection(AppCompatEditText.java:270)
at com.twitter.ui.widget.TwitterEditText.onCreateInputConnection(TwitterEditText.java:734)
at android.view.inputmethod.InputMethodManager.createInputConnection(InputMethodManager.java:4716)
at android.view.inputmethod.InputMethodManager.startInputInner(InputMethodManager.java:2873)
at android.view.inputmethod.InputMethodManager.startInputOnWindowFocusGainInternal(InputMethodManager.java:1003)
at android.view.inputmethod.InputMethodManager.checkFocus(InputMethodManager.java:3165)
at android.view.inputmethod.InputMethodManager.isActive(InputMethodManager.java:1870)
at android.widget.Editor.onDraw(Editor.java:2341)
at android.widget.TextView.onDraw(TextView.java:9601)
at com.twitter.ui.widget.TwitterEditText.onDraw(TwitterEditText.java:549)
at android.view.View.draw(View.java:25177)
at android.view.View.updateDisplayListIfDirty(View.java:24036)
at android.view.View.draw(View.java:24907)
at android.view.ViewGroup.drawChild(ViewGroup.java:4780)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4538)
at android.view.View.draw(View.java:25180)
at androidx.compose.ui.platform.AndroidViewsHandler.drawView(AndroidViewsHandler.java:79)
at androidx.compose.ui.platform.AndroidComposeView.drawAndroidView(AndroidComposeView.java:1223)
at androidx.compose.ui.viewinterop.AndroidViewHolder$layoutNode$1$coreModifier$2.invoke(AndroidViewHolder.android.kt:358)
at androidx.compose.ui.viewinterop.AndroidViewHolder$layoutNode$1$coreModifier$2.invoke(AndroidViewHolder.android.kt:353)
at androidx.compose.ui.draw.DrawBackgroundModifier.draw(DrawModifier.kt:127)
at androidx.compose.ui.node.LayoutNodeDrawScope.drawDirect-eZhPAX0$ui_release(LayoutNodeDrawScope.kt:110)
at androidx.compose.ui.node.LayoutNodeDrawScope.draw-eZhPAX0$ui_release(LayoutNodeDrawScope.kt:89)
at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:450)
at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:439)
at androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw(LayoutModifierNodeCoordinator.kt:280)
at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:447)
at androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:439)
at androidx.compose.ui.node.LayoutNode.draw$ui_release(LayoutNode.kt:999)
at androidx.compose.ui.node.InnerNodeCoordinator.performDraw(InnerNodeCoordinator.kt:196)
at androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:447)
at androidx.compose.ui.node.NodeCoordinator.access$drawContainedDrawModifiers(NodeCoordinator.kt:58)
at androidx.compose.ui.node.NodeCoordinator$drawBlock$1$1.invoke(NodeCoordinator.kt:469)
at androidx.compose.ui.node.NodeCoordinator$drawBlock$1$1.invoke(NodeCoordinator.kt:468)
at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:2441)
at androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:502)
at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:258)
at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:133)
at androidx.compose.ui.node.NodeCoordinator$drawBlock$1.invoke(NodeCoordinator.kt:468)
at androidx.compose.ui.node.NodeCoordinator$drawBlock$1.invoke(NodeCoordinator.kt:466)
at androidx.compose.ui.platform.GraphicsLayerOwnerLayer$recordLambda$1.invoke(GraphicsLayerOwnerLayer.android.kt:291)
at androidx.compose.ui.platform.GraphicsLayerOwnerLayer$recordLambda$1.invoke(GraphicsLayerOwnerLayer.android.kt:289)
at androidx.compose.ui.graphics.layer.GraphicsLayerV29.record(GraphicsLayerV29.android.kt:245)
at androidx.compose.ui.graphics.layer.GraphicsLayer.recordInternal(AndroidGraphicsLayer.android.kt:430)
at androidx.compose.ui.graphics.layer.GraphicsLayer.record-mL-hObY(GraphicsLayer.java:423)
at androidx.compose.ui.platform.GraphicsLayerOwnerLayer.updateDisplayList(GraphicsLayerOwnerLayer.android.kt:284)
at androidx.compose.ui.platform.AndroidComposeView.dispatchDraw(AndroidComposeView.android.kt:1572)
at android.view.View.draw(View.java:25180)
at android.view.View.updateDisplayListIfDirty(View.java:24036)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4764)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4736)
at android.view.View.updateDisplayListIfDirty(View.java:23982)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4764)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4736)
at android.view.View.updateDisplayListIfDirty(View.java:23982)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4764)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4736)
at android.view.View.updateDisplayListIfDirty(View.java:23982)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4764)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4736)
at android.view.View.updateDisplayListIfDirty(View.java:23982)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4764)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4736)
at android.view.View.updateDisplayListIfDirty(View.java:23982)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4764)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4736)
at android.view.View.updateDisplayListIfDirty(View.java:23982)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:768)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:774)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:872)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:6055)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:5710)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:4799)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:3291)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:11329)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1689)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1698)
at android.view.Choreographer.doCallbacks(Choreographer.java:1153)
at android.view.Choreographer.doFrame(Choreographer.java:1079)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1646)
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:8918)
at java.lang.reflect.Method.invoke(Native method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:608)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)
```