thunderbird / thunderbird/thunderbird-android
Message List - Swiping a message to delete cause entire list to flash
Nobody has claimed this yet.
- Dominant language
- Kotlin
- Stars
- 14k
- Forks
- 2.8k
- Avg merge
- 3d 3h
- Merged PRs (30d)
- 57
Description
Checklist
- I have used the search function to see if someone else has already submitted the same bug report.
- I will describe the problem with as much detail as possible.
App
Thunderbird for Android
App version
18.0
Where did you get the app from?
Google Play
Android version
Android 16
Device model
Pixel 10 Pro
Steps to reproduce
- Configure unified inbox
- Load messages
- Configure the action to be able to delete a message via swipe
- Swipe some messages to delete them
- Notice that the entire message list flashes white, sometimes for several seconds, while repainting
Expected behavior
The messages are deleted without long repaint issues.
Actual behavior
The message list takes a noticeable amount of time to repaint after a swipe to delete.
Logs
2026-04-18 11:16:29.815 8570-8620 Sink$-CC net.thunderbird.android I Command 'clearNotifications' completed
2026-04-18 11:16:29.832 1612-2440 ImeTracker system_server I net.thunderbird.android:158c1b87: onRequestHide at ORIGIN_SERVER reason HIDE_SAME_WINDOW_FOCUSED_WITHOUT_EDITOR fromUser false userId 0 displayId 0
2026-04-18 11:16:29.833 8570-8570 InsetsController net.thunderbird.android D hide(ime())
2026-04-18 11:16:29.833 8570-8570 ImeTracker net.thunderbird.android I net.thunderbird.android:158c1b87: onCancelled at PHASE_CLIENT_ALREADY_HIDDEN
2026-04-18 11:16:29.834 27050-27050 GoogleInpu...hodService com...gle.android.inputmethod.latin I GoogleInputMethodService.onStartInput():1446 onStartInput(EditorInfo{EditorInfo{packageName=net.thunderbird.android, inputType=0, inputTypeString=NULL, enableLearning=false, autoCorrection=false, autoComplete=false, imeOptions=0, privateImeOptions=null, actionName=UNSPECIFIED, actionLabel=null, initialSelStart=-1, initialSelEnd=-1, initialCapsMode=0, label=null, fieldId=0, fieldName=null, extras=null, hintText=null, hintLocales=[]}}, false)
2026-04-18 11:16:29.835 1612-2925 PackageConfigPersister system_server W App-specific configuration not found for packageName: net.thunderbird.android and userId: 0
2026-04-18 11:16:47.494 8570-8620 Sink$-CC net.thunderbird.android I Running command 'deleteThreads', seq = 1852 (background priority)
2026-04-18 11:16:47.494 8570-21344 DefaultOut...derManager net.thunderbird.android V getOutboxFolderId() called with: uuid = e093d0d0-c825-4e7b-8016-ffddb2a18e83
2026-04-18 11:16:47.496 8570-8620 Sink$-CC net.thunderbird.android D Query = SELECT subject, sender_list, date, uid, flags, messages.id, to_list, cc_list, bcc_list, reply_to_list, attachment_count, internal_date, messages.message_id, folder_id, preview, threads.id, threads.root, deleted, read, flagged, answered, forwarded, message_part_id, messages.mime_type, preview_type, header FROM messages LEFT JOIN threads ON (threads.message_id = messages.id) LEFT JOIN message_parts ON (message_parts.id = messages.message_part_id) LEFT JOIN folders ON (folders.id = messages.folder_id) WHERE (empty = 0 AND deleted = 0) AND (threads.root = ?) ORDER BY date DESC
2026-04-18 11:16:47.496 8570-21344 DefaultOut...derManager net.thunderbird.android D getOutboxFolderId: Found Outbox folder with id = 1 in cache. Cache expires on 2026-04-18T18:31:47.061Z
2026-04-18 11:16:47.696 8570-8620 Sink$-CC net.thunderbird.android V Removing notification for message MessageReference(accountUuid=e093d0d0-c825-4e7b-8016-ffddb2a18e83, folderId=2, uid=67545)
2026-04-18 11:16:47.697 8570-8620 Sink$-CC net.thunderbird.android D Deleting messages in normal folder, moving
2026-04-18 11:16:47.697 8570-8620 Sink$-CC net.thunderbird.android D Moving message [ID: 10422] to folder [ID: 12]
2026-04-18 11:16:47.754 8570-8620 Sink$-CC net.thunderbird.android V LockableDatabase: Transaction ended, took 7 ms / com.fsck.k9.storage.messages.K9MessageStore.moveMessage(r8-map-id-58ffc31692aca602e32e3e0ca244b5e3933fd63bb5128a208a2793d5aa8da2da:52)
2026-04-18 11:16:47.756 8570-8620 Sink$-CC net.thunderbird.android V LockableDatabase: Transaction ended, took 1 ms / app.k9mail.legacy.mailstore.ListenableMessageStore.setFlag(r8-map-id-58ffc31692aca602e32e3e0ca244b5e3933fd63bb5128a208a2793d5aa8da2da:103)
2026-04-18 11:16:47.757 8570-21344 DefaultOut...derManager net.thunderbird.android V getOutboxFolderId() called with: uuid = e093d0d0-c825-4e7b-8016-ffddb2a18e83
2026-04-18 11:16:47.757 8570-21344 DefaultOut...derManager net.thunderbird.android D getOutboxFolderId: Found Outbox folder with id = 1 in cache. Cache expires on 2026-04-18T18:31:47.061Z
2026-04-18 11:16:47.861 8570-8620 Sink$-CC net.thunderbird.android D Delete policy for account e093d0d0-c825-4e7b-8016-ffddb2a18e83 is ON_DELETE
2026-04-18 11:16:47.861 8570-8620 DefaultOut...derManager net.thunderbird.android V getOutboxFolderId() called with: uuid = e093d0d0-c825-4e7b-8016-ffddb2a18e83
2026-04-18 11:16:47.862 8570-8620 DefaultOut...derManager net.thunderbird.android D getOutboxFolderId: Found Outbox folder with id = 1 in cache. Cache expires on 2026-04-18T18:31:47.061Z
2026-04-18 11:16:47.864 8570-8620 Sink$-CC net.thunderbird.android I Command 'deleteThreads' completed
2026-04-18 11:16:47.864 8570-8620 Sink$-CC net.thunderbird.android I Running command 'processPendingCommands', seq = 1853 (background priority)
2026-04-18 11:16:47.864 8570-8620 Sink$-CC net.thunderbird.android D Processing pending command 'move_and_mark_as_read'
2026-04-18 11:16:47.870 8570-8620 Sink$-CC net.thunderbird.android D Connecting to imap.fastmail.com as imap.fastmail.com/103.168.172.58
2026-04-18 11:16:47.997 8570-28690 CursorWindow net.thunderbird.android E Failed to read row 855, column 0 from a window with 855 rows, 18 columns
2026-04-18 11:16:47.998 8570-28690 Sink$-CC net.thunderbird.android E Error while fetching message list (Fix with AI)
java.lang.IllegalStateException: Couldn't read row 855, col 0 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
at android.database.CursorWindow.nativeGetLong(Native Method)
at android.database.CursorWindow.getLong(CursorWindow.java:579)
at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:78)
at com.android.billingclient.api.zzcn.getId(r8-map-id-58ffc31692aca602e32e3e0ca244b5e3933fd63bb5128a208a2793d5aa8da2da:6)
at com.fsck.k9.mailstore.LocalStore$1.map(r8-map-id-58ffc31692aca602e32e3e0ca244b5e3933fd63bb5128a208a2793d5aa8da2da:1)
at com.fsck.k9.storage.messages.RetrieveMessageListOperations$$ExternalSyntheticLambda0.doDbWork(r8-map-id-58ffc31692aca602e32e3e0ca244b5e3933fd63bb5128a208a2793d5aa8da2da:49)
at com.fsck.k9.mailstore.LockableDatabase.execute(r8-map-id-58ffc31692aca602e32e3e0ca244b5e3933fd63bb5128a208a2793d5aa8da2da:67)
at com.fsck.k9.mailstore.DefaultMessageListRepository.getThreadedMessages(r8-map-id-58ffc31692aca602e32e3e0ca244b5e3933fd63bb5128a208a2793d5aa8da2da:132)
at com.fsck.k9.ui.messagelist.MessageListLoader.getMessageListInfo(r8-map-id-58ffc31692aca602e32e3e0ca244b5e3933fd63bb5128a208a2793d5aa8da2da:334)
at com.fsck.k9.ui.messagelist.MessageListLiveData$loadMessageListAsync$1$messageList$1.invokeSuspend(r8-map-id-58ffc31692aca602e32e3e0ca244b5e3933fd63bb5128a208a2793d5aa8da2da:113)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(r8-map-id-58ffc31692aca602e32e3e0ca244b5e3933fd63bb5128a208a2793d5aa8da2da:8)
at kotlinx.coroutines.DispatchedTask.run(r8-map-id-58ffc31692aca602e32e3e0ca244b5e3933fd63bb5128a208a2793d5aa8da2da:114)
at com.google.android.gms.tasks.zzi.run(r8-map-id-58ffc31692aca602e32e3e0ca244b5e3933fd63bb5128a208a2793d5aa8da2da:16)
at kotlinx.coroutines.scheduling.TaskImpl.run(r8-map-id-58ffc31692aca602e32e3e0ca244b5e3933fd63bb5128a208a2793d5aa8da2da:3)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(r8-map-id-58ffc31692aca602e32e3e0ca244b5e3933fd63bb5128a208a2793d5aa8da2da:88)
2026-04-18 11:16:48.510 8570-8620 Sink$-CC net.thunderbird.android V conn67342483 <<< #null# [OK, IMAP4 ready]
2026-04-18 11:16:48.511 8570-8620 Sink$-CC net.thunderbird.android I Did not get capabilities in banner, requesting CAPABILITY for conn67342483
2026-04-18 11:16:48.511 8570-8620 Sink$-CC net.thunderbird.android V conn67342483>>> 1 CAPABILITY
2026-04-18 11:16:48.703 8570-8620 Sink$-CC net.thunderbird.android V conn67342483<<<#null# [CAPABILITY, IMAP4, IMAP4rev1, IMAP4rev2, LITERAL+, ENABLE, UIDPLUS, SASL-IR, NAMESPACE, CONDSTORE, SORT, LIST-EXTENDED, QRESYNC, MOVE, SPECIAL-USE, CREATE-SPECIAL-USE, IDLE, AUTH=PLAIN, AUTH=LOGIN, AUTH=XOAUTH2, AUTH=OAUTHBEARER]
2026-04-18 11:16:48.704 8570-8620 Sink$-CC net.thunderbird.android V conn67342483<<<#1# [OK, completed]
2026-04-18 11:16:48.707 8570-8620 Sink$-CC net.thunderbird.android D Saving [NAMESPACE, SPECIAL-USE, QRESYNC, AUTH=XOAUTH2, IMAP4, IMAP4REV2, SASL-IR, ENABLE, UIDPLUS, CONDSTORE, AUTH=PLAIN, LITERAL+, MOVE, IMAP4REV1, IDLE, SORT, AUTH=LOGIN, LIST-EXTENDED, AUTH=OAUTHBEARER, CREATE-SPECIAL-USE] capabilities for conn67342483
2026-04-18 11:16:48.708 8570-8620 Sink$-CC net.thunderbird.android V conn67342483>>> 2 AUTHENTICATE PLAIN
2026-04-18 11:16:48.818 8570-8620 Sink$-CC net.thunderbird.android V conn67342483<<<#+# []
2026-04-18 11:16:49.015 8570-8620 Sink$-CC net.thunderbird.android V conn67342483<<<#2# [OK, [CAPABILITY, IMAP4rev1, IMAP4rev2, ACL, ANNOTATE-EXPERIMENT-1, APPENDLIMIT=209715200, BINARY, CATENATE, CHILDREN, COMPRESS=DEFLATE, CONDSTORE, CREATE-SPECIAL-USE, ENABLE, ESEARCH, ESORT, ID, IDLE, INPROGRESS, LIST-EXTENDED, LIST-METADATA, LIST-MYRIGHTS, LIST-STATUS, LITERAL+, LOGINDISABLED, MAILBOX-REFERRALS, METADATA, MOVE, MULTIAPPEND, MULTISEARCH, NAMESPACE, NOTIFY, OBJECTID, PARTIAL, PREVIEW, QRESYNC, QUOTA, QUOTA=RES-STORAGE, QUOTA=RES-MESSAGE, QUOTA=RES-ANNOTATION-STORAGE, QUOTA=RES-MAILBOX, QUOTASET, REPLACE, RIGHTS=kxten, SAVEDATE, SEARCH=FUZZY, SEARCHRES, SORT, SORT=DISPLAY, SPECIAL-USE, STATUS=SIZE, THREAD=ORDEREDSUBJECT, THREAD=REFERENCES, UIDBATCHES, UIDONLY, UIDPLUS, UNSELECT, URL-PARTIAL, UTF8=ACCEPT, WITHIN, DIGEST=SHA1, NO_ATOMIC_RENAME, SORT=MODSEQ, SORT=UID, THREAD=REFS, X-CREATEDMODSEQ, X-REPLICATION, X-REPLICATION-ARCHIVE, X-SIEVE-MAILBOX, XAPPLEPUSHSERVICE, XLIST, XUSERGROUPS], User logged in SESSIONID=<slotpi12m20-1776536210-574134-1-3804637947258480061>]
2026-04-18 11:16:49.016 8570-8620 Sink$-CC net.thunderbird.android D Saving [NAMESPACE, URL-PARTIAL, X-SIEVE-MAILBOX, THREAD=REFERENCES, SAVEDATE, MULTIAPPEND, XLIST, ESORT, OBJECTID, CONDSTORE, STATUS=SIZE, MULTISEARCH, INPROGRESS, CATENATE, QUOTA=RES-STORAGE, XAPPLEPUSHSERVICE, ID, REPLACE, X-CREATEDMODSEQ, UIDBATCHES, QUOTA=RES-MAILBOX, UNSELECT, ENABLE, UIDPLUS, COMPRESS=DEFLATE, LITERAL+, ESEARCH, SORT, UIDONLY, NO_ATOMIC_RENAME, LIST-STATUS, UTF8=ACCEPT, QUOTA, DIGEST=SHA1, SORT=UID, XUSERGROUPS, BINARY, WITHIN, SEARCHRES, RIGHTS=KXTEN, NOTIFY, QUOTASET, LIST-METADATA, CREATE-SPECIAL-USE, SORT=DISPLAY, QUOTA=RES-MESSAGE, APPENDLIMIT=209715200, SEARCH=FUZZY, SPECIAL-USE, SORT=MODSEQ, QRESYNC, ANNOTATE-EXPERIMENT-1, IMAP4REV2, PARTIAL, ACL, THREAD=ORDEREDSUBJECT, CHILDREN, QUOTA=RES-ANNOTATION-STORAGE, X-REPLICATION-ARCHIVE, X-REPLICATION, MOVE, IMAP4REV1, IDLE, LOGINDISABLED, LIST-EXTENDED, METADATA, PREVIEW, THREAD=REFS, MAILBOX-REFERRALS, LIST-MYRIGHTS] capabilities for conn67342483
2026-04-18 11:16:49.017 8570-8620 Sink$-CC net.thunderbird.android V conn67342483>>> 3 COMPRESS DEFLATE
2026-04-18 11:16:49.212 8570-8620 Sink$-CC net.thunderbird.android V conn67342483<<<#3# [OK, DEFLATE active]
2026-04-18 11:16:49.213 8570-8620 Sink$-CC net.thunderbird.android I Compression enabled for conn67342483
2026-04-18 11:16:49.215 8570-8620 Sink$-CC net.thunderbird.android V conn67342483>>> 4 ID ("name" "Thunderbird for Android" "version" "18.0")
2026-04-18 11:16:49.315 8570-8620 Sink$-CC net.thunderbird.android V conn67342483<<<#null# [ID, [name, Cyrus IMAPD, version, 3.13.1-467-ga42f9ccba-fm-20260413.001-ga42f9ccb, vendor, Project Cyrus, support-url, https://www.cyrusimap.org]]
2026-04-18 11:16:49.316 8570-8620 Sink$-CC net.thunderbird.android V conn67342483<<<#4# [OK, Completed]
2026-04-18 11:16:49.317 8570-8620 Sink$-CC net.thunderbird.android V conn67342483>>> 5 ENABLE UTF8=ACCEPT
2026-04-18 11:16:49.415 8570-8620 Sink$-CC net.thunderbird.android V conn67342483<<<#null# [ENABLED, UTF8=ACCEPT]
2026-04-18 11:16:49.415 8570-8620 Sink$-CC net.thunderbird.android V conn67342483<<<#5# [OK, Completed]
2026-04-18 11:16:49.417 8570-8620 Sink$-CC net.thunderbird.android V conn67342483>>> 6 SELECT "INBOX"
2026-04-18 11:16:49.621 8570-8620 Sink$-CC net.thunderbird.android V conn67342483<<<#null# [4606, EXISTS]
2026-04-18 11:16:49.621 8570-8620 Sink$-CC net.thunderbird.android V conn67342483<<<#null# [0, RECENT]
2026-04-18 11:16:49.621 8570-8620 Sink$-CC net.thunderbird.android V conn67342483<<<#null# [FLAGS, [\Answered, \Flagged, \Draft, \Deleted, \Seen, $X-ME-Annot-2, $HasAttachment, $IsMailingList, $IsNotification, $MailFlagBit0, $Forwarded, Forwarded, $notjunk, NotJunk, $CanUnsubscribe, $Phishing, $IsTrusted, $Junk, $Filtered, Junk, $MailFlagBit1, $MailFlagBit2, $HighImportance, NonJunk]]
2026-04-18 11:16:49.621 8570-8620 Sink$-CC net.thunderbird.android V conn67342483<<<#null# [OK, [PERMANENTFLAGS, [\Answered, \Flagged, \Draft, \Deleted, \Seen, $X-ME-Annot-2, $HasAttachment, $IsMailingList, $IsNotification, $MailFlagBit0, $Forwarded, Forwarded, $notjunk, NotJunk, $CanUnsubscribe, $Phishing, $IsTrusted, $Junk, $Filtered, Junk, $MailFlagBit1, $MailFlagBit2, $HighImportance, NonJunk, \*]], Ok]
2026-04-18 11:16:49.622 8570-8620 Sink$-CC net.thunderbird.android V conn67342483<<<#null# [OK, [UNSEEN, 4604], Ok]
2026-04-18 11:16:49.622 8570-8620 Sink$-CC net.thunderbird.android V conn67342483<<<#null# [OK, [UIDVALIDITY, 1592263766], Ok]
2026-04-18 11:16:49.622 8570-8620 Sink$-CC net.thunderbird.android V conn67342483<<<#null# [OK, [UIDNEXT, 67557], Ok]
2026-04-18 11:16:49.622 8570-8620 Sink$-CC net.thunderbird.android V conn67342483<<<#null# [OK, [HIGHESTMODSEQ, 585541], Ok]
2026-04-18 11:16:49.622 8570-8620 Sink$-CC net.thunderbird.android V conn67342483<<<#null# [OK, [MAILBOXID, [P-F]], Ok]
2026-04-18 11:16:49.622 8570-8620 Sink$-CC net.thunderbird.android V conn67342483<<<#null# [OK, [URLMECH, INTERNAL], Ok]
2026-04-18 11:16:49.622 8570-8620 Sink$-CC net.thunderbird.android V conn67342483<<<#null# [OK, [ANNOTATIONS, 65536], Ok]
2026-04-18 11:16:49.622 8570-8620 Sink$-CC net.thunderbird.android V conn67342483<<<#6# [OK, [READ-WRITE], Completed]
2026-04-18 11:16:49.623 8570-8620 Sink$-CC net.thunderbird.android D Got untagged EXISTS with value 4606 for e093d0d0-c825-4e7b-8016-ffddb2a18e83:INBOX/MessagingController/conn67342483
2026-04-18 11:16:49.623 8570-8620 Sink$-CC net.thunderbird.android D Got UidNext = 67557 for e093d0d0-c825-4e7b-8016-ffddb2a18e83:INBOX/MessagingController/conn67342483
2026-04-18 11:16:49.623 8570-8620 Sink$-CC net.thunderbird.android D moveOrCopyMessages: source folder = INBOX, 1 messages, destination folder = Trash, isCopy = false
2026-04-18 11:16:49.624 8570-8620 Sink$-CC net.thunderbird.android D Connecting to imap.fastmail.com as imap.fastmail.com/103.168.172.58
2026-04-18 11:16:50.374 8570-8620 Sink$-CC net.thunderbird.android V conn141197067 <<< #null# [OK, IMAP4 ready]
2026-04-18 11:16:50.374 8570-8620 Sink$-CC net.thunderbird.android I Did not get capabilities in banner, requesting CAPABILITY for conn141197067
2026-04-18 11:16:50.375 8570-8620 Sink$-CC net.thunderbird.android V conn141197067>>> 1 CAPABILITY
2026-04-18 11:16:50.565 8570-8620 Sink$-CC net.thunderbird.android V conn141197067<<<#null# [CAPABILITY, IMAP4, IMAP4rev1, IMAP4rev2, LITERAL+, ENABLE, UIDPLUS, SASL-IR, NAMESPACE, CONDSTORE, SORT, LIST-EXTENDED, QRESYNC, MOVE, SPECIAL-USE, CREATE-SPECIAL-USE, IDLE, AUTH=PLAIN, AUTH=LOGIN, AUTH=XOAUTH2, AUTH=OAUTHBEARER]
2026-04-18 11:16:50.566 8570-8620 Sink$-CC net.thunderbird.android V conn141197067<<<#1# [OK, completed]
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with MessageListLiveData, MessageListLoader, DefaultMessageListRepository, and RetrieveMessageListOperations, which appear in the reported stack trace. Reproduce deletion by swipe in a unified inbox and investigate the CursorWindow fetch failure alongside the list repaint. Done means deleting messages no longer causes a prolonged white flash or message-list fetch error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, kotlin
- Domain
- database, mobile, performance
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100