Checklist
Affected app version
1.9.1
Affected Android/Custom ROM version
Android 17 / GrapheneOS (build 2026091001)
Affected device model
Pixel 10 Pro XL
How did you install the app?
F-Droid / IzzyOnDroid
Steps to reproduce the bug
- Open a conversation that has enough messages to fill more than one screen.
- Scroll all the way to the bottom.
- Receive a message in that conversation.
Expected behavior
The list scrolls down so the newly received message is fully visible.
Actual behavior
The list does not scroll. The new message lands below the fold - often with only its top edge visible - and has to be scrolled to by hand to be read.
It happens both with and without the keyboard open. Conversations short enough to fit entirely on screen are not affected, because stackFromEnd keeps them pinned to the bottom regardless.
Additional information
The relevant code is in ThreadActivity.setupAdapter():
val lastPosition = itemCount - 1
val lastVisiblePosition = layoutManager.findLastVisibleItemPosition()
val shouldScrollToBottom =
currentList.lastOrNull() != latestThreadItems.lastOrNull() &&
lastPosition - lastVisiblePosition == 1
updateMessages(latestThreadItems, if (shouldScrollToBottom) lastPosition else -1)
Two things look wrong here:
-
lastPosition - lastVisiblePosition == 1 is the "is the user at the bottom" test, but when the user really is at the bottom that difference is 0, not 1. The condition fails in exactly the case it is meant to catch.
-
When it does fire, the scroll target is lastPosition, which is itemCount - 1 of the list before the update - that is, the message before the one that just arrived.
I have a working fix for this and would be glad to open a PR if this gets the help wanted label.
Checklist
Affected app version
1.9.1
Affected Android/Custom ROM version
Android 17 / GrapheneOS (build 2026091001)
Affected device model
Pixel 10 Pro XL
How did you install the app?
F-Droid / IzzyOnDroid
Steps to reproduce the bug
Expected behavior
The list scrolls down so the newly received message is fully visible.
Actual behavior
The list does not scroll. The new message lands below the fold - often with only its top edge visible - and has to be scrolled to by hand to be read.
It happens both with and without the keyboard open. Conversations short enough to fit entirely on screen are not affected, because
stackFromEndkeeps them pinned to the bottom regardless.Additional information
The relevant code is in
ThreadActivity.setupAdapter():Two things look wrong here:
lastPosition - lastVisiblePosition == 1is the "is the user at the bottom" test, but when the user really is at the bottom that difference is0, not1. The condition fails in exactly the case it is meant to catch.When it does fire, the scroll target is
lastPosition, which isitemCount - 1of the list before the update - that is, the message before the one that just arrived.I have a working fix for this and would be glad to open a PR if this gets the
help wantedlabel.