Skip to content

[Split Browser] : java.util.NoSuchElementException: List is empty when toggling Card/Notes #19924

@sanjaysargam

Description

@sanjaysargam

I got an exception changing to notes only mode. My be related.

Instead of working around it, I'd rather move that logic to the ViewModel and get a unit test around it, it's bad code which I haven't tackled yet in the ViewModel/fragment refactor of the class

2025-12-13 21:55:20.521 13278-13278 CardBrowserViewModel    com.ichi2.anki.debug                 I  Toggle select all / none
2025-12-13 21:55:20.521 13278-13278 CardBrowserViewModel    com.ichi2.anki.debug                 D  selecting none
2025-12-13 21:55:20.523 13278-13278 CardBrowse...lectedRows com.ichi2.anki.debug                 D  refreshed selected rows
2025-12-13 21:55:20.523 13278-13278 CardBrowser             com.ichi2.anki.debug                 D  onSelectionChanged
2025-12-13 21:55:20.523 13278-13278 CardBrowser             com.ichi2.anki.debug                 D  updateMultiselectMenu()
2025-12-13 21:55:22.015 13278-13306 chi2.anki.debug         com.ichi2.anki.debug                 I  Explicit concurrent mark compact GC freed 1390KB AllocSpace bytes, 0(0B) LOS objects, 49% free, 16MB/33MB, paused 268us,2.142ms total 47.843ms
2025-12-13 21:55:22.116 13278-13306 LeakCanary              com.ichi2.anki.debug                 D  Not showing notification: already requested missing POST_NOTIFICATIONS permission.
2025-12-13 21:55:24.157 13278-13306 chi2.anki.debug         com.ichi2.anki.debug                 I  Explicit concurrent mark compact GC freed 628KB AllocSpace bytes, 0(0B) LOS objects, 49% free, 16MB/32MB, paused 169us,1.925ms total 38.856ms
2025-12-13 21:55:24.259 13278-13306 LeakCanary              com.ichi2.anki.debug                 D  Not showing notification: already requested missing POST_NOTIFICATIONS permission.
2025-12-13 21:55:25.928 13278-13278 WindowOnBackDispatcher  com.ichi2.anki.debug                 W  sendCancelIfRunning: isInProgress=false callback=android.widget.PopupWindow$PopupDecorView$$ExternalSyntheticLambda1@c00aad9
2025-12-13 21:55:26.302 13278-13306 chi2.anki.debug         com.ichi2.anki.debug                 I  Explicit concurrent mark compact GC freed 456KB AllocSpace bytes, 0(0B) LOS objects, 49% free, 16MB/32MB, paused 173us,1.602ms total 40.681ms
2025-12-13 21:55:26.405 13278-13306 LeakCanary              com.ichi2.anki.debug                 D  Not showing notification: already requested missing POST_NOTIFICATIONS permission.
2025-12-13 21:55:27.388 13278-13278 CardBrowser             com.ichi2.anki.debug                 D  onSelectionChanged
2025-12-13 21:55:27.389 13278-13278 CardBrowser             com.ichi2.anki.debug                 D  updateMultiselectMenu()
2025-12-13 21:55:27.390 13278-13278 CardBrowser             com.ichi2.anki.debug                 D  end multiselect mode
2025-12-13 21:55:27.419 13278-13278 CardBrowser             com.ichi2.anki.debug                 D  onCreateOptionsMenu()
2025-12-13 21:55:27.429 13278-13278 CardBrowser             com.ichi2.anki.debug                 D  onSelectionChanged
2025-12-13 21:55:27.429 13278-13278 CardBrowser             com.ichi2.anki.debug                 D  updateMultiselectMenu()
2025-12-13 21:55:28.444 13278-13306 chi2.anki.debug         com.ichi2.anki.debug                 I  Explicit concurrent mark compact GC freed 525KB AllocSpace bytes, 0(0B) LOS objects, 49% free, 16MB/32MB, paused 157us,1.289ms total 35.826ms
2025-12-13 21:55:28.546 13278-13306 LeakCanary              com.ichi2.anki.debug                 D  Not showing notification: already requested missing POST_NOTIFICATIONS permission.
2025-12-13 21:55:30.586 13278-13306 chi2.anki.debug         com.ichi2.anki.debug                 I  Explicit concurrent mark compact GC freed 670KB AllocSpace bytes, 0(0B) LOS objects, 49% free, 16MB/33MB, paused 190us,1.201ms total 36.242ms
2025-12-13 21:55:30.688 13278-13306 LeakCanary              com.ichi2.anki.debug                 D  Not showing notification: already requested missing POST_NOTIFICATIONS permission.
2025-12-13 21:55:30.967 13278-13278 NoteEditorFragment      com.ichi2.anki.debug                 D  NoteEditor::onMenuItemSelected
2025-12-13 21:55:30.967 13278-13278 CardBrowse...$setupMenu com.ichi2.anki.debug                 D  CardBrowserFragment::onMenuItemSelected
2025-12-13 21:55:30.968 13278-13278 BrowserOpt...$Companion com.ichi2.anki.debug                 I  BrowserOptionsDialog::newInstance
2025-12-13 21:55:30.969 13278-13278 NoteEditorFragment      com.ichi2.anki.debug                 D  NoteEditor::onMenuItemSelected
2025-12-13 21:55:30.969 13278-13278 WindowOnBackDispatcher  com.ichi2.anki.debug                 W  sendCancelIfRunning: isInProgress=false callback=android.widget.PopupWindow$PopupDecorView$$ExternalSyntheticLambda1@146f82c
2025-12-13 21:55:30.972 13278-13278 FragmentLifecycleLogger com.ichi2.anki.debug                 I  CardBrowser::BrowserOptionsDialog::onAttach
2025-12-13 21:55:30.973 13278-13278 FragmentLifecycleLogger com.ichi2.anki.debug                 I  CardBrowser::BrowserOptionsDialog::onCreate
2025-12-13 21:55:31.011 13278-13278 FragmentLifecycleLogger com.ichi2.anki.debug                 I  CardBrowser::BrowserOptionsDialog::onViewCreated
2025-12-13 21:55:31.021 13278-13278 FragmentLifecycleLogger com.ichi2.anki.debug                 I  CardBrowser::BrowserOptionsDialog::onStart
2025-12-13 21:55:31.021 13278-13278 FragmentLifecycleLogger com.ichi2.anki.debug                 I  CardBrowser::BrowserOptionsDialog::onResume
2025-12-13 21:55:31.321 13278-13375 HWUI                    com.ichi2.anki.debug                 D  endAllActiveAnimators on 0xb40000721d9eb580 (MenuPopupWindow$MenuDropDownListView) with handle 0xb40000715d97f950
2025-12-13 21:55:32.737 13278-13306 chi2.anki.debug         com.ichi2.anki.debug                 I  Explicit concurrent mark compact GC freed 1527KB AllocSpace bytes, 0(0B) LOS objects, 49% free, 17MB/34MB, paused 207us,1.635ms total 46.439ms
2025-12-13 21:55:32.838 13278-13306 LeakCanary              com.ichi2.anki.debug                 D  Not showing notification: already requested missing POST_NOTIFICATIONS permission.
2025-12-13 21:55:33.905 13278-13278 CardBrowse...rdsOrNotes com.ichi2.anki.debug                 I  setting mode to NOTES
2025-12-13 21:55:33.905 13278-13278 WindowOnBackDispatcher  com.ichi2.anki.debug                 W  sendCancelIfRunning: isInProgress=false callback=android.app.Dialog$$ExternalSyntheticLambda2@a22453d
2025-12-13 21:55:33.910 13278-13375 HWUI                    com.ichi2.anki.debug                 D  endAllActiveAnimators on 0xb40000721dbc7510 (RippleDrawable) with handle 0xb40000715da0c230
2025-12-13 21:55:33.914 13278-13278 CardBrowse...mnHeadings com.ichi2.anki.debug                 D  updated headings for 4 columns
2025-12-13 21:55:33.914 13278-13278 CardBrowserFragment     com.ichi2.anki.debug                 D  column names changed
2025-12-13 21:55:33.914 13278-13278 CardBrowserFragment     com.ichi2.anki.debug                 D  setting up column ColumnHeading(label=Sort Field, ankiColumnKey=noteFld)
2025-12-13 21:55:33.915 13278-13278 CardBrowserFragment     com.ichi2.anki.debug                 D  setting up column ColumnHeading(label=Cards, ankiColumnKey=template)
2025-12-13 21:55:33.916 13278-13278 CardBrowserFragment     com.ichi2.anki.debug                 D  setting up column ColumnHeading(label=Due, ankiColumnKey=cardDue)
2025-12-13 21:55:33.917 13278-13278 CardBrowserFragment     com.ichi2.anki.debug                 D  setting up column ColumnHeading(label=Deck, ankiColumnKey=deck)
2025-12-13 21:55:33.918 13278-13278 CardBrowserViewModel    com.ichi2.anki.debug                 D  loading columns for NOTES mode
2025-12-13 21:55:33.918 13278-13278 CardBrowserViewModel    com.ichi2.anki.debug                 D  updating active columns
2025-12-13 21:55:33.920 13278-13278 CardBrowser             com.ichi2.anki.debug                 D  search state: Searching
2025-12-13 21:55:33.920 13278-13278 CardBrowse...mnHeadings com.ichi2.anki.debug                 D  updated headings for 4 columns
2025-12-13 21:55:33.921 13278-13278 CardBrowserFragment     com.ichi2.anki.debug                 D  column names changed
2025-12-13 21:55:33.921 13278-13278 CardBrowserFragment     com.ichi2.anki.debug                 D  setting up column ColumnHeading(label=Sort Field, ankiColumnKey=noteFld)
2025-12-13 21:55:33.922 13278-13557 CardBrowse...chForCards com.ichi2.anki.debug                 D  performing search: ''
2025-12-13 21:55:33.923 13278-13278 CardBrowserFragment     com.ichi2.anki.debug                 D  setting up column ColumnHeading(label=Note Type, ankiColumnKey=note)
2025-12-13 21:55:33.923 13278-13557 CardBrowse...chForCards com.ichi2.anki.debug                 D  Search returned 4 card(s)
2025-12-13 21:55:33.923 13278-13278 CardBrowserFragment     com.ichi2.anki.debug                 D  setting up column ColumnHeading(label=Cards, ankiColumnKey=template)
2025-12-13 21:55:33.924 13278-13278 CardBrowserFragment     com.ichi2.anki.debug                 D  setting up column ColumnHeading(label=Tags, ankiColumnKey=noteTags)
2025-12-13 21:55:33.924 13278-13278 CardBrowserFragment     com.ichi2.anki.debug                 D  columns changed
2025-12-13 21:55:33.939 13278-13278 FragmentLifecycleLogger com.ichi2.anki.debug                 I  CardBrowser::BrowserOptionsDialog::onPause
2025-12-13 21:55:33.939 13278-13278 FragmentLifecycleLogger com.ichi2.anki.debug                 I  CardBrowser::BrowserOptionsDialog::onStop
2025-12-13 21:55:33.939 13278-13278 LeakCanary              com.ichi2.anki.debug                 D  Watching instance of android.widget.ScrollView (com.ichi2.anki.dialogs.BrowserOptionsDialog received Fragment#onDestroyView() callback (references to its views should be cleared to prevent leaks)) with key 5519fc4b-6e67-469f-a137-6e4164f814c6
2025-12-13 21:55:33.940 13278-13278 FragmentLifecycleLogger com.ichi2.anki.debug                 I  CardBrowser::BrowserOptionsDialog::onViewDestroyed
2025-12-13 21:55:33.940 13278-13278 LeakCanary              com.ichi2.anki.debug                 D  Watching instance of androidx.lifecycle.SavedStateHandlesVM (androidx.lifecycle.SavedStateHandlesVM received ViewModel#onCleared() callback) with key ddb1a680-bbf4-4b6e-b4f3-f38e79d24741
2025-12-13 21:55:33.940 13278-13278 LeakCanary              com.ichi2.anki.debug                 D  Watching instance of leakcanary.internal.ViewModelClearedWatcher (leakcanary.internal.ViewModelClearedWatcher received ViewModel#onCleared() callback) with key 3afe93c2-3959-4c6e-825d-c9b5cbd8c177
2025-12-13 21:55:33.940 13278-13278 LeakCanary              com.ichi2.anki.debug                 D  Watching instance of androidx.loader.app.LoaderManagerImpl$LoaderViewModel (androidx.loader.app.LoaderManagerImpl$LoaderViewModel received ViewModel#onCleared() callback) with key a619cd09-887e-4792-9069-89729f1d4145
2025-12-13 21:55:33.940 13278-13278 LeakCanary              com.ichi2.anki.debug                 D  Watching instance of com.ichi2.anki.dialogs.BrowserOptionsDialog (com.ichi2.anki.dialogs.BrowserOptionsDialog received Fragment#onDestroy() callback) with key c21611d1-a276-4cc3-a19d-5519b434d40d
2025-12-13 21:55:33.940 13278-13278 FragmentLifecycleLogger com.ichi2.anki.debug                 I  CardBrowser::BrowserOptionsDialog::onDestroy
2025-12-13 21:55:33.940 13278-13278 FragmentLifecycleLogger com.ichi2.anki.debug                 I  CardBrowser::BrowserOptionsDialog::onDetach
2025-12-13 21:55:33.941 13278-13278 CardBrowser             com.ichi2.anki.debug                 D  search state: Completed
2025-12-13 21:55:33.942 13278-13278 CardBrowse...fterSearch com.ichi2.anki.debug                 I  CardBrowser:: Completed searchCards() Successfully
2025-12-13 21:55:33.943 13278-13278 CardBrowser             com.ichi2.anki.debug                 D  updateList
2025-12-13 21:55:33.944 13278-13278 CardBrowser             com.ichi2.anki.debug                 D  onSelectionChanged
2025-12-13 21:55:33.944 13278-13278 CardBrowser             com.ichi2.anki.debug                 D  updateMultiselectMenu()
2025-12-13 21:55:33.961 13278-13278 CoroutineHelpersKt      com.ichi2.anki.debug                 E  java.util.NoSuchElementException: List is empty.
                                                                                                    	at kotlin.collections.CollectionsKt___CollectionsKt.first(_Collections.kt:221)
                                                                                                    	at com.ichi2.anki.browser.CardOrNoteId.toCardId_impl$lambda$0(CardOrNoteId.kt:42)
                                                                                                    	at com.ichi2.anki.browser.CardOrNoteId.$r8$lambda$bxkjGAhWtD0G-4MOEwFHY5dBQno(Unknown Source:0)
                                                                                                    	at com.ichi2.anki.browser.CardOrNoteId$$ExternalSyntheticLambda1.invoke(D8$$SyntheticClass:0)
                                                                                                    	at com.ichi2.anki.CollectionManager.withCol$lambda$1(CollectionManager.kt:146)
                                                                                                    	at com.ichi2.anki.CollectionManager.$r8$lambda$ffr4nUlMOyAvThaKA2WuJlnLaPU(Unknown Source:0)
                                                                                                    	at com.ichi2.anki.CollectionManager$$ExternalSyntheticLambda10.invoke(D8$$SyntheticClass:0)
                                                                                                    	at com.ichi2.anki.CollectionManager$withQueue$3.invokeSuspend(CollectionManager.kt:128)
                                                                                                    	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:34)
                                                                                                    	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:101)
                                                                                                    	at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:113)
                                                                                                    	at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:89)
                                                                                                    	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:589)
                                                                                                    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:823)
                                                                                                    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:720)
                                                                                                    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:707)
2025-12-13 21:55:33.961 13278-13278 CoroutineHelpersKt      com.ichi2.anki.debug                 E  	at com.ichi2.anki.CoroutineHelpersKt.launchCatchingTask$default(CoroutineHelpers.kt:222)
                                                                                                    	at com.ichi2.anki.CardBrowser.redrawAfterSearch(CardBrowser.kt:1187)
                                                                                                    	at com.ichi2.anki.CardBrowser.setupFlows$searchStateChanged(CardBrowser.kt:538)
                                                                                                    	at com.ichi2.anki.CardBrowser.setupFlows$searchStateChanged$30(CardBrowser.kt:596)
                                                                                                    	at com.ichi2.anki.CardBrowser.access$setupFlows$searchStateChanged$30(CardBrowser.kt:111)
                                                                                                    	at com.ichi2.anki.CardBrowser$setupFlows$8.invoke(CardBrowser.kt:596)
                                                                                                    	at com.ichi2.anki.CardBrowser$setupFlows$8.invoke(CardBrowser.kt:596)
                                                                                                    	at com.ichi2.anki.AnkiActivity$launchCollectionInLifecycleScope$1$1$1.emit(AnkiActivity.kt:766)
                                                                                                    	at kotlinx.coroutines.flow.SharedFlowImpl.collect$suspendImpl(SharedFlow.kt:397)
                                                                                                    	at kotlinx.coroutines.flow.SharedFlowImpl$collect$1.invokeSuspend(Unknown Source:19)
                                                                                                    	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:34)
                                                                                                    	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:101)
                                                                                                    	at android.os.Handler.handleCallback(Handler.java:995)
                                                                                                    	at android.os.Handler.dispatchMessage(Handler.java:103)
                                                                                                    	at android.os.Looper.loopOnce(Looper.java:248)
                                                                                                    	at android.os.Looper.loop(Looper.java:338)
                                                                                                    	at android.app.ActivityThread.main(ActivityThread.java:9067)
                                                                                                    	at java.lang.reflect.Method.invoke(Native Method)
                                                                                                    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593)
                                                                                                    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:932)

Originally posted by @david-allison in #19790 (review)

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions