From 898d92ba54d62f861910cfffc805399e1d678a35 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Fri, 4 Dec 2020 10:48:05 -0500 Subject: [PATCH] Fix issue where remote deletes screwed up jump positions. Fixes #10171 --- .../securesms/database/MmsSmsDatabase.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java index 030e482f37..7a17a4e9c4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java @@ -34,6 +34,7 @@ import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.tracing.Trace; +import org.thoughtcrime.securesms.util.CursorUtil; import org.whispersystems.libsignal.util.Pair; import java.io.Closeable; @@ -422,9 +423,9 @@ public class MmsSmsDatabase extends Database { public int getQuotedMessagePosition(long threadId, long quoteId, @NonNull RecipientId recipientId) { String order = MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " DESC"; - String selection = MmsSmsColumns.THREAD_ID + " = " + threadId + " AND " + MmsSmsColumns.REMOTE_DELETED + " = 0"; + String selection = MmsSmsColumns.THREAD_ID + " = " + threadId; - try (Cursor cursor = queryTables(new String[]{ MmsSmsColumns.NORMALIZED_DATE_SENT, MmsSmsColumns.RECIPIENT_ID}, selection, order, null)) { + try (Cursor cursor = queryTables(new String[]{ MmsSmsColumns.NORMALIZED_DATE_SENT, MmsSmsColumns.RECIPIENT_ID, MmsSmsColumns.REMOTE_DELETED}, selection, order, null)) { boolean isOwnNumber = Recipient.resolved(recipientId).isSelf(); while (cursor != null && cursor.moveToNext()) { @@ -432,7 +433,11 @@ public class MmsSmsDatabase extends Database { boolean recipientIdMatches = recipientId.equals(RecipientId.from(cursor.getLong(1))); if (quoteIdMatches && (recipientIdMatches || isOwnNumber)) { - return cursor.getPosition(); + if (CursorUtil.requireBoolean(cursor, MmsSmsColumns.REMOTE_DELETED)) { + return -1; + } else { + return cursor.getPosition(); + } } } } @@ -441,17 +446,22 @@ public class MmsSmsDatabase extends Database { public int getMessagePositionInConversation(long threadId, long receivedTimestamp, @NonNull RecipientId recipientId) { String order = MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " DESC"; - String selection = MmsSmsColumns.THREAD_ID + " = " + threadId + " AND " + MmsSmsColumns.REMOTE_DELETED + " = 0"; + String selection = MmsSmsColumns.THREAD_ID + " = " + threadId; - try (Cursor cursor = queryTables(new String[]{ MmsSmsColumns.NORMALIZED_DATE_RECEIVED, MmsSmsColumns.RECIPIENT_ID}, selection, order, null)) { + try (Cursor cursor = queryTables(new String[]{ MmsSmsColumns.NORMALIZED_DATE_RECEIVED, MmsSmsColumns.RECIPIENT_ID, MmsSmsColumns.REMOTE_DELETED}, selection, order, null)) { boolean isOwnNumber = Recipient.resolved(recipientId).isSelf(); while (cursor != null && cursor.moveToNext()) { boolean timestampMatches = cursor.getLong(0) == receivedTimestamp; boolean recipientIdMatches = recipientId.equals(RecipientId.from(cursor.getLong(1))); + if (timestampMatches && (recipientIdMatches || isOwnNumber)) { - return cursor.getPosition(); + if (CursorUtil.requireBoolean(cursor, MmsSmsColumns.REMOTE_DELETED)) { + return -1; + } else { + return cursor.getPosition(); + } } } }