Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sudden crash when manage columns #17999

Open
2 of 4 tasks
Kobayashi-996 opened this issue Feb 21, 2025 · 1 comment
Open
2 of 4 tasks

Sudden crash when manage columns #17999

Kobayashi-996 opened this issue Feb 21, 2025 · 1 comment

Comments

@Kobayashi-996
Copy link

Checked for duplicates?

  • This issue is not a duplicate

Does it also happen in the desktop version?

  • This bug does not occur in the latest version of Anki Desktop

What are the steps to reproduce this bug?

The last step was trying to drag a column item.

FATAL EXCEPTION: main
Process: com.ichi2.anki.debug, PID: 21699
java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling androidx.recyclerview.widget.RecyclerView{27232e3 VFED..... ......ID 0,168-1080,1731 #7f0a03e7 app:id/recycler_view}, adapter:com.ichi2.anki.browser.BrowserColumnSelectionAdapter@b99016b, layout:androidx.recyclerview.widget.LinearLayoutManager@9f49300, context:android.view.ContextThemeWrapper@b66fa6a
at androidx.recyclerview.widget.RecyclerView.assertNotInLayoutOrScroll(RecyclerView.java:3587)
at androidx.recyclerview.widget.RecyclerView$RecyclerViewDataObserver.onItemRangeChanged(RecyclerView.java:6167)
at androidx.recyclerview.widget.RecyclerView$AdapterDataObservable.notifyItemRangeChanged(RecyclerView.java:13401)
at androidx.recyclerview.widget.RecyclerView$AdapterDataObservable.notifyItemRangeChanged(RecyclerView.java:13391)
at androidx.recyclerview.widget.RecyclerView$Adapter.notifyItemRangeChanged(RecyclerView.java:8259)
at com.ichi2.anki.browser.BrowserColumnSelectionAdapter.refreshDataset(BrowserColumnSelectionAdapter.kt:117)
at com.ichi2.anki.browser.BrowserColumnSelectionFragment$setupRecyclerView$callback$1.clearView(BrowserColumnSelectionFragment.kt:190)
at androidx.recyclerview.widget.ItemTouchHelper$3.onAnimationEnd(ItemTouchHelper.java:652)
at android.animation.Animator$AnimatorListener.onAnimationEnd(Animator.java:552)
at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1232)
at android.animation.ValueAnimator.cancel(ValueAnimator.java:1117)
at androidx.recyclerview.widget.ItemTouchHelper$RecoverAnimation.cancel(ItemTouchHelper.java:2446)
at androidx.recyclerview.widget.ItemTouchHelper.endRecoverAnimation(ItemTouchHelper.java:929)
at androidx.recyclerview.widget.ItemTouchHelper.onChildViewDetachedFromWindow(ItemTouchHelper.java:911)
at androidx.recyclerview.widget.RecyclerView.dispatchChildDetached(RecyclerView.java:8473)
at androidx.recyclerview.widget.RecyclerView$6.removeViewAt(RecyclerView.java:1005)
at androidx.recyclerview.widget.ChildHelper.removeViewAt(ChildHelper.java:212)
at androidx.recyclerview.widget.RecyclerView$LayoutManager.removeViewAt(RecyclerView.java:9585)
at androidx.recyclerview.widget.RecyclerView$LayoutManager.removeAndRecycleViewAt(RecyclerView.java:9856)
at androidx.recyclerview.widget.LinearLayoutManager.recycleChildren(LinearLayoutManager.java:1524)
at androidx.recyclerview.widget.LinearLayoutManager.recycleViewsFromStart(LinearLayoutManager.java:1574)
at androidx.recyclerview.widget.LinearLayoutManager.recycleByLayoutState(LinearLayoutManager.java:1649)
at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1708)
at androidx.recyclerview.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1485)
at androidx.recyclerview.widget.LinearLayoutManager.scrollVerticallyBy(LinearLayoutManager.java:1218)
at androidx.recyclerview.widget.RecyclerView.scrollStep(RecyclerView.java:2161)
at androidx.recyclerview.widget.RecyclerView.scrollByInternal(RecyclerView.java:2260)
at androidx.recyclerview.widget.RecyclerView.onTouchEvent(RecyclerView.java:3958)
at android.view.View.dispatchTouchEvent(View.java:12513)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3024)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2705)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3030)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2719)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:440)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1830)
at android.app.Dialog.dispatchTouchEvent(Dialog.java:847)
at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:398)
at android.view.View.dispatchPointerEvent(View.java:12752)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5106)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4909)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4426)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4479)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4445)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4585)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4453)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4642)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4426)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4479)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4445)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4453)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4426)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:7092)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:7061)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7022)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7195)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:186)
at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:177)
at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:7166)
at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:7218)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
at android.view.Choreographer.doCallbacks(Choreographer.java:761)
at android.view.Choreographer.doFrame(Choreographer.java:690)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Image

Expected behaviour

Normal operation

Debug info

AnkiDroid Version = 2.21alpha11-debug (36d72441509a8c566b14bb48dbcf5c39159e13f6)
Backend Version = 0.1.49-anki25.01rc1 (25.01rc1 b65fa693dacbd92c0bdd2a8c3800d0827432d108)
Android Version = 9 (SDK 28)
ProductFlavor = amazon
Device Info = Google | google | generic_x86_arm | sdk_gphone_x86_arm | AOSP on IA Emulator | ranchu
Webview User Agent = Mozilla/5.0 (Linux; Android 9; AOSP on IA Emulator Build/PSR1.180720.122; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36
ACRA UUID = 9e2d2699-2496-49df-a45d-f6eb6841dfd2
FSRS = 2.0.2 (Enabled: false)
Crash Reports Enabled = false

(Optional) Anything else you want to share?

No response

Research

  • I have checked the manual and the FAQ and could not find a solution to my issue
  • (Optional) I have confirmed the issue is not resolved in the latest alpha release (instructions)
@MritunjayTiwari14
Copy link

MritunjayTiwari14 commented Feb 22, 2025

I think this can be Solved by using post() operation on recycleview so that after the layout is refreshed only after the dataset has been changed

Over here in the BrowserColumnSelectionAdapter.kt
fun refreshDataset() { notifyItemRangeChanged(0, items.size) }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants