From 1e0e2fadfdba421200eff55b8dc188468dc0be61 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Fri, 10 Jul 2020 12:02:42 -0400 Subject: [PATCH] Improve scroll to last position behavior. --- .../conversation/ConversationFragment.java | 2 +- .../securesms/database/ThreadDatabase.java | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java index a184e5cfdd..42ad0835ec 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java @@ -287,7 +287,7 @@ public class ConversationFragment extends LoggingFragment { int firstVisiblePosition = getListLayoutManager().findFirstCompletelyVisibleItemPosition(); final long lastVisibleMessageTimestamp; - if (firstVisiblePosition != 0 && lastVisiblePosition != RecyclerView.NO_POSITION) { + if (firstVisiblePosition > 0 && lastVisiblePosition != RecyclerView.NO_POSITION) { MessageRecord message = getListAdapter().getLastVisibleMessageRecord(lastVisiblePosition); lastVisibleMessageTimestamp = message != null ? message.getDateReceived() : 0; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java index 91680ff431..4820fd794c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java @@ -51,7 +51,6 @@ import org.thoughtcrime.securesms.util.CursorUtil; import org.thoughtcrime.securesms.util.JsonUtils; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.Pair; import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupUtil; @@ -193,6 +192,10 @@ public class ThreadDatabase extends Database { contentValues.put(ARCHIVED, 0); } + if (count != getConversationMessageCount(threadId)) { + contentValues.put(LAST_SCROLLED, 0); + } + SQLiteDatabase db = databaseHelper.getWritableDatabase(); db.update(TABLE_NAME, contentValues, ID + " = ?", new String[] {threadId + ""}); notifyConversationListListeners(); @@ -666,6 +669,17 @@ public class ThreadDatabase extends Database { } } + public int getConversationMessageCount(long threadId) { + SQLiteDatabase db = databaseHelper.getReadableDatabase(); + + try (Cursor cursor = db.query(TABLE_NAME, new String[]{MESSAGE_COUNT}, ID_WHERE, new String[]{String.valueOf(threadId)}, null, null, null)) { + if (cursor != null && cursor.moveToFirst()) { + return CursorUtil.requireInt(cursor, MESSAGE_COUNT); + } + } + return 0; + } + public void deleteConversation(long threadId) { DatabaseFactory.getSmsDatabase(context).deleteThread(threadId); DatabaseFactory.getMmsDatabase(context).deleteThread(threadId);