diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java index 242d44aec..1298b0c06 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java @@ -122,8 +122,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns public abstract void markDownloadState(long messageId, long state); public abstract void markIncomingNotificationReceived(long threadId); - public abstract Set incrementReceiptCount(SyncMessageId messageId, long timestamp, @NonNull ReceiptType receiptType); - public abstract Set incrementStoryReceiptCount(SyncMessageId messageId, long timestamp, @NonNull ReceiptType receiptType); + public abstract Set incrementReceiptCount(SyncMessageId messageId, long timestamp, @NonNull ReceiptType receiptType, boolean storiesOnly); abstract @NonNull MmsSmsDatabase.TimestampReadResult setTimestampRead(SyncMessageId messageId, long proposedExpireStarted, @NonNull Map threadToLatestRead); public abstract List setEntireThreadRead(long threadId); public abstract List setMessagesReadSince(long threadId, long timestamp); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java index 1f1c8fb55..b676af27a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java @@ -37,6 +37,7 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.signal.core.util.CursorUtil; +import org.signal.core.util.SQLiteDatabaseExtensionsKt; import org.signal.core.util.SqlUtil; import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.util.Pair; @@ -916,13 +917,14 @@ public class MmsDatabase extends MessageDatabase { } @Override - public Set incrementReceiptCount(SyncMessageId messageId, long timestamp, @NonNull ReceiptType receiptType) { + public Set incrementReceiptCount(SyncMessageId messageId, long timestamp, @NonNull ReceiptType receiptType, boolean storiesOnly) { SQLiteDatabase database = databaseHelper.getSignalWritableDatabase(); Set messageUpdates = new HashSet<>(); - try (Cursor cursor = database.query(TABLE_NAME, new String[] {ID, THREAD_ID, MESSAGE_BOX, RECIPIENT_ID, receiptType.getColumnName(), RECEIPT_TIMESTAMP}, - DATE_SENT + " = ?", new String[] {String.valueOf(messageId.getTimetamp())}, - null, null, null, null)) + try (Cursor cursor = SQLiteDatabaseExtensionsKt.select(database, ID, THREAD_ID, MESSAGE_BOX, RECIPIENT_ID, receiptType.getColumnName(), RECEIPT_TIMESTAMP) + .from(TABLE_NAME) + .where(DATE_SENT + " = ?" + (storiesOnly ? " AND " + IS_STORY_CLAUSE : ""), messageId.getTimetamp()) + .run()) { while (cursor.moveToNext()) { if (Types.isOutgoingMessageType(CursorUtil.requireLong(cursor, MESSAGE_BOX))) { @@ -961,8 +963,7 @@ public class MmsDatabase extends MessageDatabase { return messageUpdates; } - @Override - public Set incrementStoryReceiptCount(SyncMessageId messageId, long timestamp, @NonNull ReceiptType receiptType) { + private Set incrementStoryReceiptCount(SyncMessageId messageId, long timestamp, @NonNull ReceiptType receiptType) { SQLiteDatabase database = databaseHelper.getSignalWritableDatabase(); Set messageUpdates = new HashSet<>(); String columnName = receiptType.getColumnName(); 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 9b87b5b87..d6ff0103f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java @@ -516,8 +516,8 @@ public class MmsSmsDatabase extends Database { private @NonNull Set incrementReceiptCountInternal(SyncMessageId syncMessageId, long timestamp, MessageDatabase.ReceiptType receiptType) { Set messageUpdates = new HashSet<>(); - messageUpdates.addAll(SignalDatabase.sms().incrementReceiptCount(syncMessageId, timestamp, receiptType)); - messageUpdates.addAll(SignalDatabase.mms().incrementReceiptCount(syncMessageId, timestamp, receiptType)); + messageUpdates.addAll(SignalDatabase.sms().incrementReceiptCount(syncMessageId, timestamp, receiptType, false)); + messageUpdates.addAll(SignalDatabase.mms().incrementReceiptCount(syncMessageId, timestamp, receiptType, false)); return messageUpdates; } @@ -526,7 +526,7 @@ public class MmsSmsDatabase extends Database { * Doesn't do any transactions or updates, so we can re-use the method safely. */ private @NonNull Set incrementStoryReceiptCountInternal(@NonNull SyncMessageId syncMessageId, long timestamp, @NonNull MessageDatabase.ReceiptType receiptType) { - return SignalDatabase.mms().incrementStoryReceiptCount(syncMessageId, timestamp, receiptType); + return SignalDatabase.mms().incrementReceiptCount(syncMessageId, timestamp, receiptType, true); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java index e383d93fe..c0babfe39 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java @@ -32,6 +32,8 @@ import com.google.protobuf.ByteString; import net.zetetic.database.sqlcipher.SQLiteStatement; +import org.signal.core.util.CursorUtil; +import org.signal.core.util.SqlUtil; import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.util.Pair; import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch; @@ -59,9 +61,7 @@ import org.thoughtcrime.securesms.sms.IncomingGroupUpdateMessage; import org.thoughtcrime.securesms.sms.IncomingTextMessage; import org.thoughtcrime.securesms.sms.OutgoingTextMessage; import org.thoughtcrime.securesms.util.Base64; -import org.signal.core.util.CursorUtil; import org.thoughtcrime.securesms.util.JsonUtils; -import org.signal.core.util.SqlUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; @@ -486,7 +486,7 @@ public class SmsDatabase extends MessageDatabase { } @Override - public @NonNull Set incrementReceiptCount(SyncMessageId messageId, long timestamp, @NonNull ReceiptType receiptType) { + public @NonNull Set incrementReceiptCount(SyncMessageId messageId, long timestamp, @NonNull ReceiptType receiptType, boolean storiesOnly) { if (receiptType == ReceiptType.VIEWED) { return Collections.emptySet(); } @@ -530,11 +530,6 @@ public class SmsDatabase extends MessageDatabase { } } - @Override - public Set incrementStoryReceiptCount(SyncMessageId messageId, long timestamp, @NonNull ReceiptType receiptType) { - throw new UnsupportedOperationException(); - } - @Override @NonNull MmsSmsDatabase.TimestampReadResult setTimestampRead(SyncMessageId messageId, long proposedExpireStarted, @NonNull Map threadToLatestRead) { SQLiteDatabase database = databaseHelper.getSignalWritableDatabase(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/my/MyStoriesItem.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/my/MyStoriesItem.kt index b1478519b..04b73a33b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/my/MyStoriesItem.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/my/MyStoriesItem.kt @@ -47,6 +47,7 @@ object MyStoriesItem { override fun areContentsTheSame(newItem: Model): Boolean { return distributionStory == newItem.distributionStory && !hasStatusChange(newItem) && + distributionStory.messageRecord.viewedReceiptCount == newItem.distributionStory.messageRecord.viewedReceiptCount && super.areContentsTheSame(newItem) } diff --git a/core-util/src/main/java/org/signal/core/util/SQLiteDatabaseExtensions.kt b/core-util/src/main/java/org/signal/core/util/SQLiteDatabaseExtensions.kt index 18bea539d..1105b572f 100644 --- a/core-util/src/main/java/org/signal/core/util/SQLiteDatabaseExtensions.kt +++ b/core-util/src/main/java/org/signal/core/util/SQLiteDatabaseExtensions.kt @@ -53,7 +53,7 @@ class SelectBuilderPart2( private val tableName: String ) { fun where(where: String, vararg whereArgs: Any): SelectBuilderPart3 { - return SelectBuilderPart3(db, columns, tableName, where, SqlUtil.buildArgs(whereArgs)) + return SelectBuilderPart3(db, columns, tableName, where, SqlUtil.buildArgs(*whereArgs)) } fun run(): Cursor { @@ -181,7 +181,7 @@ class UpdateBuilderPart2( private val values: ContentValues ) { fun where(where: String, vararg whereArgs: Any): UpdateBuilderPart3 { - return UpdateBuilderPart3(db, tableName, values, where, SqlUtil.buildArgs(whereArgs)) + return UpdateBuilderPart3(db, tableName, values, where, SqlUtil.buildArgs(*whereArgs)) } fun run(conflictStrategy: Int = SQLiteDatabase.CONFLICT_NONE): Int { @@ -206,7 +206,7 @@ class DeleteBuilderPart1( private val tableName: String ) { fun where(where: String, vararg whereArgs: Any): DeleteBuilderPart2 { - return DeleteBuilderPart2(db, tableName, where, SqlUtil.buildArgs(whereArgs)) + return DeleteBuilderPart2(db, tableName, where, SqlUtil.buildArgs(*whereArgs)) } fun run(): Int {