diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/Attachment.java b/app/src/main/java/org/thoughtcrime/securesms/attachments/Attachment.java index cf99c5c91..5f872042d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/Attachment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/Attachment.java @@ -7,8 +7,8 @@ import androidx.annotation.Nullable; import org.thoughtcrime.securesms.audio.AudioHash; import org.thoughtcrime.securesms.blurhash.BlurHash; -import org.thoughtcrime.securesms.database.AttachmentDatabase; -import org.thoughtcrime.securesms.database.AttachmentDatabase.TransformProperties; +import org.thoughtcrime.securesms.database.AttachmentTable; +import org.thoughtcrime.securesms.database.AttachmentTable.TransformProperties; import org.thoughtcrime.securesms.stickers.StickerLocator; public abstract class Attachment { @@ -118,13 +118,13 @@ public abstract class Attachment { } public boolean isInProgress() { - return transferState != AttachmentDatabase.TRANSFER_PROGRESS_DONE && - transferState != AttachmentDatabase.TRANSFER_PROGRESS_FAILED && - transferState != AttachmentDatabase.TRANSFER_PROGRESS_PERMANENT_FAILURE; + return transferState != AttachmentTable.TRANSFER_PROGRESS_DONE && + transferState != AttachmentTable.TRANSFER_PROGRESS_FAILED && + transferState != AttachmentTable.TRANSFER_PROGRESS_PERMANENT_FAILURE; } public boolean isPermanentlyFailed() { - return transferState == AttachmentDatabase.TRANSFER_PROGRESS_PERMANENT_FAILURE; + return transferState == AttachmentTable.TRANSFER_PROGRESS_PERMANENT_FAILURE; } public long getSize() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachment.java b/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachment.java index 06489236b..2634564c6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachment.java @@ -6,7 +6,7 @@ import androidx.annotation.Nullable; import org.thoughtcrime.securesms.audio.AudioHash; import org.thoughtcrime.securesms.blurhash.BlurHash; -import org.thoughtcrime.securesms.database.AttachmentDatabase.TransformProperties; +import org.thoughtcrime.securesms.database.AttachmentTable.TransformProperties; import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.stickers.StickerLocator; diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/MmsNotificationAttachment.java b/app/src/main/java/org/thoughtcrime/securesms/attachments/MmsNotificationAttachment.java index f88b19138..807692c99 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/MmsNotificationAttachment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/MmsNotificationAttachment.java @@ -5,8 +5,8 @@ import android.net.Uri; import androidx.annotation.Nullable; -import org.thoughtcrime.securesms.database.AttachmentDatabase; -import org.thoughtcrime.securesms.database.MmsDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; +import org.thoughtcrime.securesms.database.MmsTable; public class MmsNotificationAttachment extends Attachment { @@ -26,14 +26,14 @@ public class MmsNotificationAttachment extends Attachment { } private static int getTransferStateFromStatus(int status) { - if (status == MmsDatabase.Status.DOWNLOAD_INITIALIZED || - status == MmsDatabase.Status.DOWNLOAD_NO_CONNECTIVITY) + if (status == MmsTable.Status.DOWNLOAD_INITIALIZED || + status == MmsTable.Status.DOWNLOAD_NO_CONNECTIVITY) { - return AttachmentDatabase.TRANSFER_PROGRESS_PENDING; - } else if (status == MmsDatabase.Status.DOWNLOAD_CONNECTING) { - return AttachmentDatabase.TRANSFER_PROGRESS_STARTED; + return AttachmentTable.TRANSFER_PROGRESS_PENDING; + } else if (status == MmsTable.Status.DOWNLOAD_CONNECTING) { + return AttachmentTable.TRANSFER_PROGRESS_STARTED; } else { - return AttachmentDatabase.TRANSFER_PROGRESS_FAILED; + return AttachmentTable.TRANSFER_PROGRESS_FAILED; } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/PointerAttachment.java b/app/src/main/java/org/thoughtcrime/securesms/attachments/PointerAttachment.java index d6dd753af..94f161bdf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/PointerAttachment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/PointerAttachment.java @@ -6,7 +6,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import org.thoughtcrime.securesms.blurhash.BlurHash; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.stickers.StickerLocator; import org.thoughtcrime.securesms.util.Base64; import org.whispersystems.signalservice.api.messages.SignalServiceAttachment; @@ -102,7 +102,7 @@ public class PointerAttachment extends Attachment { } return Optional.of(new PointerAttachment(pointer.get().getContentType(), - AttachmentDatabase.TRANSFER_PROGRESS_PENDING, + AttachmentTable.TRANSFER_PROGRESS_PENDING, pointer.get().asPointer().getSize().orElse(0), pointer.get().asPointer().getFileName().orElse(null), pointer.get().asPointer().getCdnNumber(), @@ -126,7 +126,7 @@ public class PointerAttachment extends Attachment { SignalServiceAttachment thumbnail = pointer.getThumbnail(); return Optional.of(new PointerAttachment(pointer.getContentType(), - AttachmentDatabase.TRANSFER_PROGRESS_PENDING, + AttachmentTable.TRANSFER_PROGRESS_PENDING, thumbnail != null ? thumbnail.asPointer().getSize().orElse(0) : 0, pointer.getFileName(), thumbnail != null ? thumbnail.asPointer().getCdnNumber() : 0, diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/TombstoneAttachment.java b/app/src/main/java/org/thoughtcrime/securesms/attachments/TombstoneAttachment.java index 6aabd328f..e2e2c44d4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/TombstoneAttachment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/TombstoneAttachment.java @@ -5,7 +5,7 @@ import android.net.Uri; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; /** * An attachment that represents where an attachment used to be. Useful when you need to know that @@ -16,7 +16,7 @@ import org.thoughtcrime.securesms.database.AttachmentDatabase; public class TombstoneAttachment extends Attachment { public TombstoneAttachment(@NonNull String contentType, boolean quote) { - super(contentType, AttachmentDatabase.TRANSFER_PROGRESS_DONE, 0, null, 0, null, null, null, null, null, false, false, false, 0, 0, quote, 0, null, null, null, null, null); + super(contentType, AttachmentTable.TRANSFER_PROGRESS_DONE, 0, null, 0, null, null, null, null, null, false, false, false, 0, 0, quote, 0, null, null, null, null, null); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/UriAttachment.java b/app/src/main/java/org/thoughtcrime/securesms/attachments/UriAttachment.java index c1317f7e6..c83f68b38 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/UriAttachment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/UriAttachment.java @@ -7,7 +7,7 @@ import androidx.annotation.Nullable; import org.thoughtcrime.securesms.audio.AudioHash; import org.thoughtcrime.securesms.blurhash.BlurHash; -import org.thoughtcrime.securesms.database.AttachmentDatabase.TransformProperties; +import org.thoughtcrime.securesms.database.AttachmentTable.TransformProperties; import org.thoughtcrime.securesms.stickers.StickerLocator; public class UriAttachment extends Attachment { diff --git a/app/src/main/java/org/thoughtcrime/securesms/audio/AudioWaveForm.java b/app/src/main/java/org/thoughtcrime/securesms/audio/AudioWaveForm.java index d06c08ed0..9c523fff1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/audio/AudioWaveForm.java +++ b/app/src/main/java/org/thoughtcrime/securesms/audio/AudioWaveForm.java @@ -21,7 +21,7 @@ import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.databaseprotos.AudioWaveFormData; import org.thoughtcrime.securesms.media.DecryptableUriMediaInput; @@ -100,7 +100,7 @@ public final class AudioWaveForm { if (attachment instanceof DatabaseAttachment) { try { - AttachmentDatabase attachmentDatabase = SignalDatabase.attachments(); + AttachmentTable attachmentDatabase = SignalDatabase.attachments(); DatabaseAttachment dbAttachment = (DatabaseAttachment) attachment; long startTime = System.currentTimeMillis(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/BackupCountQueries.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/BackupCountQueries.kt index aab1210ed..88b57b034 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/BackupCountQueries.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/BackupCountQueries.kt @@ -1,30 +1,30 @@ package org.thoughtcrime.securesms.backup -import org.thoughtcrime.securesms.database.AttachmentDatabase -import org.thoughtcrime.securesms.database.GroupReceiptDatabase -import org.thoughtcrime.securesms.database.MmsDatabase -import org.thoughtcrime.securesms.database.SmsDatabase +import org.thoughtcrime.securesms.database.AttachmentTable +import org.thoughtcrime.securesms.database.GroupReceiptTable +import org.thoughtcrime.securesms.database.MmsTable +import org.thoughtcrime.securesms.database.SmsTable /** * Queries used by backup exporter to estimate total counts for various complicated tables. */ object BackupCountQueries { - const val mmsCount: String = "SELECT COUNT(*) FROM ${MmsDatabase.TABLE_NAME} WHERE ${MmsDatabase.EXPIRES_IN} <= 0 AND ${MmsDatabase.VIEW_ONCE} <= 0" + const val mmsCount: String = "SELECT COUNT(*) FROM ${MmsTable.TABLE_NAME} WHERE ${MmsTable.EXPIRES_IN} <= 0 AND ${MmsTable.VIEW_ONCE} <= 0" - const val smsCount: String = "SELECT COUNT(*) FROM ${SmsDatabase.TABLE_NAME} WHERE ${SmsDatabase.EXPIRES_IN} <= 0" + const val smsCount: String = "SELECT COUNT(*) FROM ${SmsTable.TABLE_NAME} WHERE ${SmsTable.EXPIRES_IN} <= 0" @get:JvmStatic val groupReceiptCount: String = """ - SELECT COUNT(*) FROM ${GroupReceiptDatabase.TABLE_NAME} - INNER JOIN ${MmsDatabase.TABLE_NAME} ON ${GroupReceiptDatabase.TABLE_NAME}.${GroupReceiptDatabase.MMS_ID} = ${MmsDatabase.TABLE_NAME}.${MmsDatabase.ID} - WHERE ${MmsDatabase.TABLE_NAME}.${MmsDatabase.EXPIRES_IN} <= 0 AND ${MmsDatabase.TABLE_NAME}.${MmsDatabase.VIEW_ONCE} <= 0 + SELECT COUNT(*) FROM ${GroupReceiptTable.TABLE_NAME} + INNER JOIN ${MmsTable.TABLE_NAME} ON ${GroupReceiptTable.TABLE_NAME}.${GroupReceiptTable.MMS_ID} = ${MmsTable.TABLE_NAME}.${MmsTable.ID} + WHERE ${MmsTable.TABLE_NAME}.${MmsTable.EXPIRES_IN} <= 0 AND ${MmsTable.TABLE_NAME}.${MmsTable.VIEW_ONCE} <= 0 """.trimIndent() @get:JvmStatic val attachmentCount: String = """ - SELECT COUNT(*) FROM ${AttachmentDatabase.TABLE_NAME} - INNER JOIN ${MmsDatabase.TABLE_NAME} ON ${AttachmentDatabase.TABLE_NAME}.${AttachmentDatabase.MMS_ID} = ${MmsDatabase.TABLE_NAME}.${MmsDatabase.ID} - WHERE ${MmsDatabase.TABLE_NAME}.${MmsDatabase.EXPIRES_IN} <= 0 AND ${MmsDatabase.TABLE_NAME}.${MmsDatabase.VIEW_ONCE} <= 0 + SELECT COUNT(*) FROM ${AttachmentTable.TABLE_NAME} + INNER JOIN ${MmsTable.TABLE_NAME} ON ${AttachmentTable.TABLE_NAME}.${AttachmentTable.MMS_ID} = ${MmsTable.TABLE_NAME}.${MmsTable.ID} + WHERE ${MmsTable.TABLE_NAME}.${MmsTable.EXPIRES_IN} <= 0 AND ${MmsTable.TABLE_NAME}.${MmsTable.VIEW_ONCE} <= 0 """.trimIndent() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java index 29f8026ef..fafd89a4f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java @@ -29,23 +29,23 @@ import org.thoughtcrime.securesms.attachments.AttachmentId; import org.thoughtcrime.securesms.crypto.AttachmentSecret; import org.thoughtcrime.securesms.crypto.ClassicDecryptingPartInputStream; import org.thoughtcrime.securesms.crypto.ModernDecryptingPartInputStream; -import org.thoughtcrime.securesms.database.AttachmentDatabase; -import org.thoughtcrime.securesms.database.EmojiSearchDatabase; -import org.thoughtcrime.securesms.database.GroupReceiptDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; +import org.thoughtcrime.securesms.database.EmojiSearchTable; +import org.thoughtcrime.securesms.database.GroupReceiptTable; import org.thoughtcrime.securesms.database.KeyValueDatabase; -import org.thoughtcrime.securesms.database.MentionDatabase; -import org.thoughtcrime.securesms.database.MmsDatabase; +import org.thoughtcrime.securesms.database.MentionTable; +import org.thoughtcrime.securesms.database.MmsTable; import org.thoughtcrime.securesms.database.MmsSmsColumns; -import org.thoughtcrime.securesms.database.OneTimePreKeyDatabase; -import org.thoughtcrime.securesms.database.PendingRetryReceiptDatabase; -import org.thoughtcrime.securesms.database.ReactionDatabase; -import org.thoughtcrime.securesms.database.SearchDatabase; -import org.thoughtcrime.securesms.database.SenderKeyDatabase; -import org.thoughtcrime.securesms.database.SenderKeySharedDatabase; -import org.thoughtcrime.securesms.database.SessionDatabase; -import org.thoughtcrime.securesms.database.SignedPreKeyDatabase; -import org.thoughtcrime.securesms.database.SmsDatabase; -import org.thoughtcrime.securesms.database.StickerDatabase; +import org.thoughtcrime.securesms.database.OneTimePreKeyTable; +import org.thoughtcrime.securesms.database.PendingRetryReceiptTable; +import org.thoughtcrime.securesms.database.ReactionTable; +import org.thoughtcrime.securesms.database.SearchTable; +import org.thoughtcrime.securesms.database.SenderKeyTable; +import org.thoughtcrime.securesms.database.SenderKeySharedTable; +import org.thoughtcrime.securesms.database.SessionTable; +import org.thoughtcrime.securesms.database.SignedPreKeyTable; +import org.thoughtcrime.securesms.database.SmsTable; +import org.thoughtcrime.securesms.database.StickerTable; import org.thoughtcrime.securesms.database.model.AvatarPickerDatabase; import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; @@ -96,15 +96,15 @@ public class FullBackupExporter extends FullBackupBase { * but we will not export the actual contents. */ private static final Set TABLE_CONTENT_BLOCKLIST = SetUtil.newHashSet( - SignedPreKeyDatabase.TABLE_NAME, - OneTimePreKeyDatabase.TABLE_NAME, - SessionDatabase.TABLE_NAME, - SearchDatabase.SMS_FTS_TABLE_NAME, - SearchDatabase.MMS_FTS_TABLE_NAME, - EmojiSearchDatabase.TABLE_NAME, - SenderKeyDatabase.TABLE_NAME, - SenderKeySharedDatabase.TABLE_NAME, - PendingRetryReceiptDatabase.TABLE_NAME, + SignedPreKeyTable.TABLE_NAME, + OneTimePreKeyTable.TABLE_NAME, + SessionTable.TABLE_NAME, + SearchTable.SMS_FTS_TABLE_NAME, + SearchTable.MMS_FTS_TABLE_NAME, + EmojiSearchTable.TABLE_NAME, + SenderKeyTable.TABLE_NAME, + SenderKeySharedTable.TABLE_NAME, + PendingRetryReceiptTable.TABLE_NAME, AvatarPickerDatabase.TABLE_NAME ); @@ -172,19 +172,19 @@ public class FullBackupExporter extends FullBackupBase { for (String table : tables) { throwIfCanceled(cancellationSignal); - if (table.equals(MmsDatabase.TABLE_NAME)) { + if (table.equals(MmsTable.TABLE_NAME)) { count = exportTable(table, input, outputStream, FullBackupExporter::isNonExpiringMmsMessage, null, count, estimatedCount, cancellationSignal); - } else if (table.equals(SmsDatabase.TABLE_NAME)) { + } else if (table.equals(SmsTable.TABLE_NAME)) { count = exportTable(table, input, outputStream, FullBackupExporter::isNonExpiringSmsMessage, null, count, estimatedCount, cancellationSignal); - } else if (table.equals(ReactionDatabase.TABLE_NAME)) { - count = exportTable(table, input, outputStream, cursor -> isForNonExpiringMessage(input, new MessageId(CursorUtil.requireLong(cursor, ReactionDatabase.MESSAGE_ID), CursorUtil.requireBoolean(cursor, ReactionDatabase.IS_MMS))), null, count, estimatedCount, cancellationSignal); - } else if (table.equals(MentionDatabase.TABLE_NAME)) { - count = exportTable(table, input, outputStream, cursor -> isForNonExpiringMmsMessage(input, CursorUtil.requireLong(cursor, MentionDatabase.MESSAGE_ID)), null, count, estimatedCount, cancellationSignal); - } else if (table.equals(GroupReceiptDatabase.TABLE_NAME)) { - count = exportTable(table, input, outputStream, cursor -> isForNonExpiringMmsMessage(input, cursor.getLong(cursor.getColumnIndexOrThrow(GroupReceiptDatabase.MMS_ID))), null, count, estimatedCount, cancellationSignal); - } else if (table.equals(AttachmentDatabase.TABLE_NAME)) { - count = exportTable(table, input, outputStream, cursor -> isForNonExpiringMmsMessage(input, cursor.getLong(cursor.getColumnIndexOrThrow(AttachmentDatabase.MMS_ID))), (cursor, innerCount) -> exportAttachment(attachmentSecret, cursor, outputStream, innerCount, estimatedCount), count, estimatedCount, cancellationSignal); - } else if (table.equals(StickerDatabase.TABLE_NAME)) { + } else if (table.equals(ReactionTable.TABLE_NAME)) { + count = exportTable(table, input, outputStream, cursor -> isForNonExpiringMessage(input, new MessageId(CursorUtil.requireLong(cursor, ReactionTable.MESSAGE_ID), CursorUtil.requireBoolean(cursor, ReactionTable.IS_MMS))), null, count, estimatedCount, cancellationSignal); + } else if (table.equals(MentionTable.TABLE_NAME)) { + count = exportTable(table, input, outputStream, cursor -> isForNonExpiringMmsMessage(input, CursorUtil.requireLong(cursor, MentionTable.MESSAGE_ID)), null, count, estimatedCount, cancellationSignal); + } else if (table.equals(GroupReceiptTable.TABLE_NAME)) { + count = exportTable(table, input, outputStream, cursor -> isForNonExpiringMmsMessage(input, cursor.getLong(cursor.getColumnIndexOrThrow(GroupReceiptTable.MMS_ID))), null, count, estimatedCount, cancellationSignal); + } else if (table.equals(AttachmentTable.TABLE_NAME)) { + count = exportTable(table, input, outputStream, cursor -> isForNonExpiringMmsMessage(input, cursor.getLong(cursor.getColumnIndexOrThrow(AttachmentTable.MMS_ID))), (cursor, innerCount) -> exportAttachment(attachmentSecret, cursor, outputStream, innerCount, estimatedCount), count, estimatedCount, cancellationSignal); + } else if (table.equals(StickerTable.TABLE_NAME)) { count = exportTable(table, input, outputStream, cursor -> true, (cursor, innerCount) -> exportSticker(attachmentSecret, cursor, outputStream, innerCount, estimatedCount), count, estimatedCount, cancellationSignal); } else if (!TABLE_CONTENT_BLOCKLIST.contains(table)) { count = exportTable(table, input, outputStream, null, null, count, estimatedCount, cancellationSignal); @@ -230,15 +230,15 @@ public class FullBackupExporter extends FullBackupBase { long count = DATABASE_VERSION_RECORD_COUNT + TABLE_RECORD_COUNT_MULTIPLIER * tables.size(); for (String table : tables) { - if (table.equals(MmsDatabase.TABLE_NAME)) { + if (table.equals(MmsTable.TABLE_NAME)) { count += getCount(input, BackupCountQueries.mmsCount); - } else if (table.equals(SmsDatabase.TABLE_NAME)) { + } else if (table.equals(SmsTable.TABLE_NAME)) { count += getCount(input, BackupCountQueries.smsCount); - } else if (table.equals(GroupReceiptDatabase.TABLE_NAME)) { + } else if (table.equals(GroupReceiptTable.TABLE_NAME)) { count += getCount(input, BackupCountQueries.getGroupReceiptCount()); - } else if (table.equals(AttachmentDatabase.TABLE_NAME)) { + } else if (table.equals(AttachmentTable.TABLE_NAME)) { count += getCount(input, BackupCountQueries.getAttachmentCount()); - } else if (table.equals(StickerDatabase.TABLE_NAME)) { + } else if (table.equals(StickerTable.TABLE_NAME)) { count += getCount(input, "SELECT COUNT(*) FROM " + table); } else if (!TABLE_CONTENT_BLOCKLIST.contains(table)) { count += getCount(input, "SELECT COUNT(*) FROM " + table); @@ -375,9 +375,9 @@ public class FullBackupExporter extends FullBackupBase { } boolean isReservedTable = table.startsWith("sqlite_"); - boolean isSmsFtsSecretTable = !table.equals(SearchDatabase.SMS_FTS_TABLE_NAME) && table.startsWith(SearchDatabase.SMS_FTS_TABLE_NAME); - boolean isMmsFtsSecretTable = !table.equals(SearchDatabase.MMS_FTS_TABLE_NAME) && table.startsWith(SearchDatabase.MMS_FTS_TABLE_NAME); - boolean isEmojiFtsSecretTable = !table.equals(EmojiSearchDatabase.TABLE_NAME) && table.startsWith(EmojiSearchDatabase.TABLE_NAME); + boolean isSmsFtsSecretTable = !table.equals(SearchTable.SMS_FTS_TABLE_NAME) && table.startsWith(SearchTable.SMS_FTS_TABLE_NAME); + boolean isMmsFtsSecretTable = !table.equals(SearchTable.MMS_FTS_TABLE_NAME) && table.startsWith(SearchTable.MMS_FTS_TABLE_NAME); + boolean isEmojiFtsSecretTable = !table.equals(EmojiSearchTable.TABLE_NAME) && table.startsWith(EmojiSearchTable.TABLE_NAME); return !isReservedTable && !isSmsFtsSecretTable && @@ -451,12 +451,12 @@ public class FullBackupExporter extends FullBackupBase { long estimatedCount) throws IOException { - long rowId = cursor.getLong(cursor.getColumnIndexOrThrow(AttachmentDatabase.ROW_ID)); - long uniqueId = cursor.getLong(cursor.getColumnIndexOrThrow(AttachmentDatabase.UNIQUE_ID)); - long size = cursor.getLong(cursor.getColumnIndexOrThrow(AttachmentDatabase.SIZE)); + long rowId = cursor.getLong(cursor.getColumnIndexOrThrow(AttachmentTable.ROW_ID)); + long uniqueId = cursor.getLong(cursor.getColumnIndexOrThrow(AttachmentTable.UNIQUE_ID)); + long size = cursor.getLong(cursor.getColumnIndexOrThrow(AttachmentTable.SIZE)); - String data = cursor.getString(cursor.getColumnIndexOrThrow(AttachmentDatabase.DATA)); - byte[] random = cursor.getBlob(cursor.getColumnIndexOrThrow(AttachmentDatabase.DATA_RANDOM)); + String data = cursor.getString(cursor.getColumnIndexOrThrow(AttachmentTable.DATA)); + byte[] random = cursor.getBlob(cursor.getColumnIndexOrThrow(AttachmentTable.DATA_RANDOM)); if (!TextUtils.isEmpty(data)) { long fileLength = new File(data).length(); @@ -487,11 +487,11 @@ public class FullBackupExporter extends FullBackupBase { long estimatedCount) throws IOException { - long rowId = cursor.getLong(cursor.getColumnIndexOrThrow(StickerDatabase._ID)); - long size = cursor.getLong(cursor.getColumnIndexOrThrow(StickerDatabase.FILE_LENGTH)); + long rowId = cursor.getLong(cursor.getColumnIndexOrThrow(StickerTable._ID)); + long size = cursor.getLong(cursor.getColumnIndexOrThrow(StickerTable.FILE_LENGTH)); - String data = cursor.getString(cursor.getColumnIndexOrThrow(StickerDatabase.FILE_PATH)); - byte[] random = cursor.getBlob(cursor.getColumnIndexOrThrow(StickerDatabase.FILE_RANDOM)); + String data = cursor.getString(cursor.getColumnIndexOrThrow(StickerTable.FILE_PATH)); + byte[] random = cursor.getBlob(cursor.getColumnIndexOrThrow(StickerTable.FILE_RANDOM)); if (!TextUtils.isEmpty(data) && size > 0) { EventBus.getDefault().post(new BackupEvent(BackupEvent.Type.PROGRESS, ++count, estimatedCount)); @@ -587,7 +587,7 @@ public class FullBackupExporter extends FullBackupBase { private static boolean isNonExpiringMmsMessage(@NonNull Cursor cursor) { return cursor.getLong(cursor.getColumnIndexOrThrow(MmsSmsColumns.EXPIRES_IN)) <= 0 && - cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.VIEW_ONCE)) <= 0; + cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.VIEW_ONCE)) <= 0; } private static boolean isNonExpiringSmsMessage(@NonNull Cursor cursor) { @@ -603,11 +603,11 @@ public class FullBackupExporter extends FullBackupBase { } private static boolean isForNonExpiringSmsMessage(@NonNull SQLiteDatabase db, long smsId) { - String[] columns = new String[] { SmsDatabase.EXPIRES_IN }; - String where = SmsDatabase.ID + " = ?"; + String[] columns = new String[] { SmsTable.EXPIRES_IN }; + String where = SmsTable.ID + " = ?"; String[] args = new String[] { String.valueOf(smsId) }; - try (Cursor cursor = db.query(SmsDatabase.TABLE_NAME, columns, where, args, null, null, null)) { + try (Cursor cursor = db.query(SmsTable.TABLE_NAME, columns, where, args, null, null, null)) { if (cursor != null && cursor.moveToFirst()) { return isNonExpiringSmsMessage(cursor); } @@ -617,11 +617,11 @@ public class FullBackupExporter extends FullBackupBase { } private static boolean isForNonExpiringMmsMessage(@NonNull SQLiteDatabase db, long mmsId) { - String[] columns = new String[] { MmsDatabase.RECIPIENT_ID, MmsDatabase.EXPIRES_IN, MmsDatabase.VIEW_ONCE }; - String where = MmsDatabase.ID + " = ?"; + String[] columns = new String[] { MmsTable.RECIPIENT_ID, MmsTable.EXPIRES_IN, MmsTable.VIEW_ONCE }; + String where = MmsTable.ID + " = ?"; String[] args = new String[] { String.valueOf(mmsId) }; - try (Cursor mmsCursor = db.query(MmsDatabase.TABLE_NAME, columns, where, args, null, null, null)) { + try (Cursor mmsCursor = db.query(MmsTable.TABLE_NAME, columns, where, args, null, null, null)) { if (mmsCursor != null && mmsCursor.moveToFirst()) { return isNonExpiringMmsMessage(mmsCursor); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupImporter.java b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupImporter.java index ba3f11019..3d31374a0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupImporter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupImporter.java @@ -24,11 +24,11 @@ import org.thoughtcrime.securesms.backup.BackupProtos.SqlStatement; import org.thoughtcrime.securesms.backup.BackupProtos.Sticker; import org.thoughtcrime.securesms.crypto.AttachmentSecret; import org.thoughtcrime.securesms.crypto.ModernEncryptingPartOutputStream; -import org.thoughtcrime.securesms.database.AttachmentDatabase; -import org.thoughtcrime.securesms.database.EmojiSearchDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; +import org.thoughtcrime.securesms.database.EmojiSearchTable; import org.thoughtcrime.securesms.database.KeyValueDatabase; -import org.thoughtcrime.securesms.database.SearchDatabase; -import org.thoughtcrime.securesms.database.StickerDatabase; +import org.thoughtcrime.securesms.database.SearchTable; +import org.thoughtcrime.securesms.database.StickerTable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.keyvalue.KeyValueDataSet; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -132,9 +132,9 @@ public class FullBackupImporter extends FullBackupBase { } private static void processStatement(@NonNull SQLiteDatabase db, SqlStatement statement) { - boolean isForSmsFtsSecretTable = statement.getStatement().contains(SearchDatabase.SMS_FTS_TABLE_NAME + "_"); - boolean isForMmsFtsSecretTable = statement.getStatement().contains(SearchDatabase.MMS_FTS_TABLE_NAME + "_"); - boolean isForEmojiSecretTable = statement.getStatement().contains(EmojiSearchDatabase.TABLE_NAME + "_"); + boolean isForSmsFtsSecretTable = statement.getStatement().contains(SearchTable.SMS_FTS_TABLE_NAME + "_"); + boolean isForMmsFtsSecretTable = statement.getStatement().contains(SearchTable.MMS_FTS_TABLE_NAME + "_"); + boolean isForEmojiSecretTable = statement.getStatement().contains(EmojiSearchTable.TABLE_NAME + "_"); boolean isForSqliteSecretTable = statement.getStatement().toLowerCase().startsWith("create table sqlite_"); if (isForSmsFtsSecretTable || isForMmsFtsSecretTable || isForEmojiSecretTable || isForSqliteSecretTable) { @@ -159,7 +159,7 @@ public class FullBackupImporter extends FullBackupBase { private static void processAttachment(@NonNull Context context, @NonNull AttachmentSecret attachmentSecret, @NonNull SQLiteDatabase db, @NonNull Attachment attachment, BackupRecordInputStream inputStream) throws IOException { - File dataFile = AttachmentDatabase.newFile(context); + File dataFile = AttachmentTable.newFile(context); Pair output = ModernEncryptingPartOutputStream.createFor(attachmentSecret, dataFile, false); ContentValues contentValues = new ContentValues(); @@ -167,24 +167,24 @@ public class FullBackupImporter extends FullBackupBase { try { inputStream.readAttachmentTo(output.second, attachment.getLength()); - contentValues.put(AttachmentDatabase.DATA, dataFile.getAbsolutePath()); - contentValues.put(AttachmentDatabase.DATA_RANDOM, output.first); + contentValues.put(AttachmentTable.DATA, dataFile.getAbsolutePath()); + contentValues.put(AttachmentTable.DATA_RANDOM, output.first); } catch (BackupRecordInputStream.BadMacException e) { Log.w(TAG, "Bad MAC for attachment " + attachment.getAttachmentId() + "! Can't restore it.", e); dataFile.delete(); - contentValues.put(AttachmentDatabase.DATA, (String) null); - contentValues.put(AttachmentDatabase.DATA_RANDOM, (String) null); + contentValues.put(AttachmentTable.DATA, (String) null); + contentValues.put(AttachmentTable.DATA_RANDOM, (String) null); } - db.update(AttachmentDatabase.TABLE_NAME, contentValues, - AttachmentDatabase.ROW_ID + " = ? AND " + AttachmentDatabase.UNIQUE_ID + " = ?", + db.update(AttachmentTable.TABLE_NAME, contentValues, + AttachmentTable.ROW_ID + " = ? AND " + AttachmentTable.UNIQUE_ID + " = ?", new String[] {String.valueOf(attachment.getRowId()), String.valueOf(attachment.getAttachmentId())}); } private static void processSticker(@NonNull Context context, @NonNull AttachmentSecret attachmentSecret, @NonNull SQLiteDatabase db, @NonNull Sticker sticker, BackupRecordInputStream inputStream) throws IOException { - File stickerDirectory = context.getDir(StickerDatabase.DIRECTORY, Context.MODE_PRIVATE); + File stickerDirectory = context.getDir(StickerTable.DIRECTORY, Context.MODE_PRIVATE); File dataFile = File.createTempFile("sticker", ".mms", stickerDirectory); Pair output = ModernEncryptingPartOutputStream.createFor(attachmentSecret, dataFile, false); @@ -192,12 +192,12 @@ public class FullBackupImporter extends FullBackupBase { inputStream.readAttachmentTo(output.second, sticker.getLength()); ContentValues contentValues = new ContentValues(); - contentValues.put(StickerDatabase.FILE_PATH, dataFile.getAbsolutePath()); - contentValues.put(StickerDatabase.FILE_LENGTH, sticker.getLength()); - contentValues.put(StickerDatabase.FILE_RANDOM, output.first); + contentValues.put(StickerTable.FILE_PATH, dataFile.getAbsolutePath()); + contentValues.put(StickerTable.FILE_LENGTH, sticker.getLength()); + contentValues.put(StickerTable.FILE_RANDOM, output.first); - db.update(StickerDatabase.TABLE_NAME, contentValues, - StickerDatabase._ID + " = ?", + db.update(StickerTable.TABLE_NAME, contentValues, + StickerTable._ID + " = ?", new String[] {String.valueOf(sticker.getRowId())}); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeRepository.kt index 6b614a24b..f797959ab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeRepository.kt @@ -6,7 +6,7 @@ import io.reactivex.rxjava3.core.Completable import io.reactivex.rxjava3.schedulers.Schedulers import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.badges.models.Badge -import org.thoughtcrime.securesms.database.RecipientDatabase +import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.jobs.MultiDeviceProfileContentUpdateJob @@ -40,13 +40,13 @@ class BadgeRepository(context: Context) { ): List { Log.d(TAG, "[setVisibilityForAllBadgesSync] Setting badge visibility...", true) - val recipientDatabase: RecipientDatabase = SignalDatabase.recipients + val recipientTable: RecipientTable = SignalDatabase.recipients val badges = selfBadges.map { it.copy(visible = displayBadgesOnProfile) } Log.d(TAG, "[setVisibilityForAllBadgesSync] Uploading profile...", true) ProfileUtil.uploadProfileWithBadges(context, badges) SignalStore.donationsValues().setDisplayBadgesOnProfile(displayBadgesOnProfile) - recipientDatabase.markNeedsSync(Recipient.self().id) + recipientTable.markNeedsSync(Recipient.self().id) Log.d(TAG, "[setVisibilityForAllBadgesSync] Requesting data change sync...", true) StorageSyncHelper.scheduleSyncForDataChange() diff --git a/app/src/main/java/org/thoughtcrime/securesms/badges/gifts/Gifts.kt b/app/src/main/java/org/thoughtcrime/securesms/badges/gifts/Gifts.kt index afdd45602..3259c470c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/badges/gifts/Gifts.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/gifts/Gifts.kt @@ -4,7 +4,7 @@ import android.content.Context import org.signal.libsignal.zkgroup.InvalidInputException import org.signal.libsignal.zkgroup.receipts.ReceiptCredentialPresentation import org.thoughtcrime.securesms.R -import org.thoughtcrime.securesms.database.ThreadDatabase +import org.thoughtcrime.securesms.database.ThreadTable import org.thoughtcrime.securesms.database.model.StoryType import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge import org.thoughtcrime.securesms.mms.OutgoingMediaMessage @@ -38,7 +38,7 @@ object Gifts { Base64.encodeBytes(giftBadge.toByteArray()), listOf(), sentTimestamp, - ThreadDatabase.DistributionTypes.CONVERSATION, + ThreadTable.DistributionTypes.CONVERSATION, expiresIn, false, StoryType.NONE, diff --git a/app/src/main/java/org/thoughtcrime/securesms/badges/gifts/flow/GiftFlowRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/badges/gifts/flow/GiftFlowRepository.kt index 562ef1c6b..cd8d62502 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/badges/gifts/flow/GiftFlowRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/gifts/flow/GiftFlowRepository.kt @@ -8,7 +8,7 @@ import org.signal.core.util.money.FiatMoney import org.thoughtcrime.securesms.badges.Badges import org.thoughtcrime.securesms.badges.models.Badge import org.thoughtcrime.securesms.components.settings.app.subscription.errors.DonationError -import org.thoughtcrime.securesms.database.RecipientDatabase +import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId @@ -70,7 +70,7 @@ class GiftFlowRepository { throw DonationError.GiftRecipientVerificationError.SelectedRecipientDoesNotSupportGifts } - if (recipient.isGroup || recipient.isDistributionList || recipient.registered != RecipientDatabase.RegisteredState.REGISTERED) { + if (recipient.isGroup || recipient.isDistributionList || recipient.registered != RecipientTable.RegisteredState.REGISTERED) { Log.w(TAG, "Invalid badge recipient $badgeRecipient. Verification failed.", true) throw DonationError.GiftRecipientVerificationError.SelectedRecipientIsInvalid } diff --git a/app/src/main/java/org/thoughtcrime/securesms/blocked/BlockedUsersRepository.java b/app/src/main/java/org/thoughtcrime/securesms/blocked/BlockedUsersRepository.java index c8f82d270..7ae791b1a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/blocked/BlockedUsersRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/blocked/BlockedUsersRepository.java @@ -7,7 +7,7 @@ import androidx.core.util.Consumer; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.groups.GroupChangeBusyException; import org.thoughtcrime.securesms.groups.GroupChangeFailedException; @@ -32,8 +32,8 @@ class BlockedUsersRepository { void getBlocked(@NonNull Consumer> blockedUsers) { SignalExecutors.BOUNDED.execute(() -> { - RecipientDatabase db = SignalDatabase.recipients(); - try (RecipientDatabase.RecipientReader reader = db.readerForBlocked(db.getBlocked())) { + RecipientTable db = SignalDatabase.recipients(); + try (RecipientTable.RecipientReader reader = db.readerForBlocked(db.getBlocked())) { int count = reader.getCount(); if (count == 0) { blockedUsers.accept(Collections.emptyList()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/AudioView.java b/app/src/main/java/org/thoughtcrime/securesms/components/AudioView.java index 4393c1ee2..889490ff6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/AudioView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/AudioView.java @@ -34,7 +34,7 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.audio.AudioWaveForm; import org.thoughtcrime.securesms.components.voice.VoiceNotePlaybackState; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.events.PartProgressEvent; import org.thoughtcrime.securesms.mms.AudioSlide; import org.thoughtcrime.securesms.mms.SlideClickListener; @@ -192,7 +192,7 @@ public final class AudioView extends FrameLayout { if (circleProgress.isSpinning()) circleProgress.stopSpinning(); circleProgress.setVisibility(View.GONE); } - } else if (showControls && audio.getTransferState() == AttachmentDatabase.TRANSFER_PROGRESS_STARTED) { + } else if (showControls && audio.getTransferState() == AttachmentTable.TRANSFER_PROGRESS_STARTED) { controlToggle.displayQuick(progressAndPlay); seekBar.setEnabled(false); if (circleProgress != null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/DocumentView.java b/app/src/main/java/org/thoughtcrime/securesms/components/DocumentView.java index 44fc28968..921f4552d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/DocumentView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/DocumentView.java @@ -22,7 +22,7 @@ import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.events.PartProgressEvent; import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.mms.SlideClickListener; @@ -97,7 +97,7 @@ public class DocumentView extends FrameLayout { controlToggle.displayQuick(downloadButton); downloadButton.setOnClickListener(new DownloadClickedListener(documentSlide)); if (downloadProgress.isSpinning()) downloadProgress.stopSpinning(); - } else if (showControls && documentSlide.getTransferState() == AttachmentDatabase.TRANSFER_PROGRESS_STARTED) { + } else if (showControls && documentSlide.getTransferState() == AttachmentTable.TRANSFER_PROGRESS_STARTED) { controlToggle.displayQuick(downloadProgress); downloadProgress.spin(); } else { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java b/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java index e5fa1d871..5cdee7a7a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java @@ -39,7 +39,7 @@ import org.thoughtcrime.securesms.components.emoji.MediaKeyboard; import org.thoughtcrime.securesms.components.voice.VoiceNotePlaybackState; import org.thoughtcrime.securesms.conversation.ConversationStickerSuggestionAdapter; import org.thoughtcrime.securesms.conversation.VoiceNoteDraftView; -import org.thoughtcrime.securesms.database.DraftDatabase; +import org.thoughtcrime.securesms.database.DraftTable; import org.thoughtcrime.securesms.database.model.StickerRecord; import org.thoughtcrime.securesms.keyboard.KeyboardPage; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -518,7 +518,7 @@ public class InputPanel extends LinearLayout microphoneRecorderView.unlockAction(); } - public void setVoiceNoteDraft(@Nullable DraftDatabase.Draft voiceNoteDraft) { + public void setVoiceNoteDraft(@Nullable DraftTable.Draft voiceNoteDraft) { if (voiceNoteDraft != null) { voiceNoteDraftView.setDraft(voiceNoteDraft); voiceNoteDraftView.setVisibility(VISIBLE); @@ -531,7 +531,7 @@ public class InputPanel extends LinearLayout } } - public @Nullable DraftDatabase.Draft getVoiceNoteDraft() { + public @Nullable DraftTable.Draft getVoiceNoteDraft() { return voiceNoteDraftView.getDraft(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/SharedContactView.java b/app/src/main/java/org/thoughtcrime/securesms/components/SharedContactView.java index 34ff46fbf..5d4c7836d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/SharedContactView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/SharedContactView.java @@ -22,7 +22,7 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.contactshare.Contact; import org.thoughtcrime.securesms.contactshare.ContactUtil; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri; import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.recipients.LiveRecipient; @@ -195,7 +195,7 @@ public class SharedContactView extends LinearLayout implements RecipientForeverO List systemUsers = new ArrayList<>(recipients.size()); for (LiveRecipient recipient : activeRecipients.values()) { - if (recipient.get().getRegistered() == RecipientDatabase.RegisteredState.REGISTERED) { + if (recipient.get().getRegistered() == RecipientTable.RegisteredState.REGISTERED) { pushUsers.add(recipient.get()); } else if (recipient.get().isSystemContact()) { systemUsers.add(recipient.get()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ThreadPhotoRailView.java b/app/src/main/java/org/thoughtcrime/securesms/components/ThreadPhotoRailView.java index 4c09af37e..7c16f9f8c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ThreadPhotoRailView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ThreadPhotoRailView.java @@ -18,7 +18,7 @@ import androidx.recyclerview.widget.RecyclerView; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.database.CursorRecyclerViewAdapter; -import org.thoughtcrime.securesms.database.MediaDatabase; +import org.thoughtcrime.securesms.database.MediaTable; import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.util.MediaUtil; @@ -88,9 +88,9 @@ public class ThreadPhotoRailView extends FrameLayout { @Override public void onBindItemViewHolder(ThreadPhotoViewHolder viewHolder, @NonNull Cursor cursor) { - ThumbnailView imageView = viewHolder.imageView; - MediaDatabase.MediaRecord mediaRecord = MediaDatabase.MediaRecord.from(cursor); - Slide slide = MediaUtil.getSlideForAttachment(getContext(), mediaRecord.getAttachment()); + ThumbnailView imageView = viewHolder.imageView; + MediaTable.MediaRecord mediaRecord = MediaTable.MediaRecord.from(cursor); + Slide slide = MediaUtil.getSlideForAttachment(getContext(), mediaRecord.getAttachment()); if (slide != null) { imageView.setImageResource(glideRequests, slide, false, false); @@ -118,6 +118,6 @@ public class ThreadPhotoRailView extends FrameLayout { } public interface OnItemClickedListener { - void onItemClicked(MediaDatabase.MediaRecord mediaRecord); + void onItemClicked(MediaTable.MediaRecord mediaRecord); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java b/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java index 4ed01702e..3b6cfd725 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java @@ -21,20 +21,18 @@ import androidx.annotation.UiThread; import androidx.appcompat.widget.AppCompatImageView; import com.bumptech.glide.RequestBuilder; -import com.bumptech.glide.TransitionOptions; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.resource.bitmap.BitmapTransformation; import com.bumptech.glide.load.resource.bitmap.CenterCrop; import com.bumptech.glide.load.resource.bitmap.FitCenter; import com.bumptech.glide.load.resource.bitmap.RoundedCorners; -import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.RequestOptions; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.blurhash.BlurHash; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri; import org.thoughtcrime.securesms.mms.GlideRequest; import org.thoughtcrime.securesms.mms.GlideRequests; @@ -347,7 +345,7 @@ public class ThumbnailView extends FrameLayout { } if (slide.getUri() != null && slide.hasPlayOverlay() && - (slide.getTransferState() == AttachmentDatabase.TRANSFER_PROGRESS_DONE || isPreview)) + (slide.getTransferState() == AttachmentTable.TRANSFER_PROGRESS_DONE || isPreview)) { this.playOverlay.setVisibility(View.VISIBLE); } else { @@ -579,7 +577,7 @@ public class ThumbnailView extends FrameLayout { public void onClick(View view) { boolean validThumbnail = slide != null && slide.asAttachment().getUri() != null && - slide.getTransferState() == AttachmentDatabase.TRANSFER_PROGRESS_DONE; + slide.getTransferState() == AttachmentTable.TRANSFER_PROGRESS_DONE; boolean permanentFailure = slide != null && slide.asAttachment().isPermanentlyFailed(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/TransferControlView.java b/app/src/main/java/org/thoughtcrime/securesms/components/TransferControlView.java index ef922616c..0deb3b2a8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/TransferControlView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/TransferControlView.java @@ -19,7 +19,7 @@ import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.attachments.Attachment; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.events.PartProgressEvent; import org.thoughtcrime.securesms.mms.Slide; @@ -114,17 +114,17 @@ public final class TransferControlView extends FrameLayout { } for (Slide slide : slides) { - if (slide.asAttachment().getTransferState() == AttachmentDatabase.TRANSFER_PROGRESS_DONE) { + if (slide.asAttachment().getTransferState() == AttachmentTable.TRANSFER_PROGRESS_DONE) { networkProgress.put(slide.asAttachment(), 1f); } } switch (getTransferState(slides)) { - case AttachmentDatabase.TRANSFER_PROGRESS_STARTED: + case AttachmentTable.TRANSFER_PROGRESS_STARTED: showProgressSpinner(calculateProgress(networkProgress, compresssionProgress)); break; - case AttachmentDatabase.TRANSFER_PROGRESS_PENDING: - case AttachmentDatabase.TRANSFER_PROGRESS_FAILED: + case AttachmentTable.TRANSFER_PROGRESS_PENDING: + case AttachmentTable.TRANSFER_PROGRESS_FAILED: downloadDetailsText.setText(getDownloadText(this.slides)); display(downloadDetails); break; @@ -183,27 +183,27 @@ public final class TransferControlView extends FrameLayout { } private int getTransferState(@NonNull List slides) { - int transferState = AttachmentDatabase.TRANSFER_PROGRESS_DONE; + int transferState = AttachmentTable.TRANSFER_PROGRESS_DONE; boolean allFailed = true; for (Slide slide : slides) { - if (slide.getTransferState() != AttachmentDatabase.TRANSFER_PROGRESS_PERMANENT_FAILURE) { + if (slide.getTransferState() != AttachmentTable.TRANSFER_PROGRESS_PERMANENT_FAILURE) { allFailed = false; - if (slide.getTransferState() == AttachmentDatabase.TRANSFER_PROGRESS_PENDING && transferState == AttachmentDatabase.TRANSFER_PROGRESS_DONE) { + if (slide.getTransferState() == AttachmentTable.TRANSFER_PROGRESS_PENDING && transferState == AttachmentTable.TRANSFER_PROGRESS_DONE) { transferState = slide.getTransferState(); } else { transferState = Math.max(transferState, slide.getTransferState()); } } } - return allFailed ? AttachmentDatabase.TRANSFER_PROGRESS_PERMANENT_FAILURE : transferState; + return allFailed ? AttachmentTable.TRANSFER_PROGRESS_PERMANENT_FAILURE : transferState; } private String getDownloadText(@NonNull List slides) { if (slides.size() == 1) { return slides.get(0).getContentDescription(); } else { - int downloadCount = Stream.of(slides).reduce(0, (count, slide) -> slide.getTransferState() != AttachmentDatabase.TRANSFER_PROGRESS_DONE ? count + 1 : count); + int downloadCount = Stream.of(slides).reduce(0, (count, slide) -> slide.getTransferState() != AttachmentTable.TRANSFER_PROGRESS_DONE ? count + 1 : count); return getContext().getResources().getQuantityString(R.plurals.TransferControlView_n_items, downloadCount, downloadCount); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/identity/UnverifiedSendDialog.java b/app/src/main/java/org/thoughtcrime/securesms/components/identity/UnverifiedSendDialog.java index caa7cfe8e..70324e3f6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/identity/UnverifiedSendDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/identity/UnverifiedSendDialog.java @@ -8,7 +8,7 @@ import androidx.appcompat.app.AlertDialog; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.crypto.ReentrantSessionLock; -import org.thoughtcrime.securesms.database.IdentityDatabase; +import org.thoughtcrime.securesms.database.IdentityTable; import org.thoughtcrime.securesms.database.model.IdentityRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.signal.core.util.concurrent.SimpleTask; @@ -44,7 +44,7 @@ public class UnverifiedSendDialog extends AlertDialog.Builder implements DialogI for (IdentityRecord identityRecord : untrustedRecords) { ApplicationDependencies.getProtocolStore().aci().identities().setVerified(identityRecord.getRecipientId(), identityRecord.getIdentityKey(), - IdentityDatabase.VerifiedStatus.DEFAULT); + IdentityTable.VerifiedStatus.DEFAULT); } } return null; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberRepository.kt index 3470912e8..a62ffccf3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberRepository.kt @@ -12,7 +12,7 @@ import org.signal.libsignal.protocol.util.KeyHelper import org.signal.libsignal.protocol.util.Medium import org.thoughtcrime.securesms.crypto.IdentityKeyUtil import org.thoughtcrime.securesms.crypto.PreKeyUtil -import org.thoughtcrime.securesms.database.IdentityDatabase +import org.thoughtcrime.securesms.database.IdentityTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.databaseprotos.PendingChangeNumberMetadata import org.thoughtcrime.securesms.database.model.toProtoByteString @@ -237,7 +237,7 @@ class ChangeNumberRepository( pniProtocolStore.identities().saveIdentityWithoutSideEffects( Recipient.self().id, pniProtocolStore.identityKeyPair.publicKey, - IdentityDatabase.VerifiedStatus.VERIFIED, + IdentityTable.VerifiedStatus.VERIFIED, true, System.currentTimeMillis(), true diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/sms/SmsSettingsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/sms/SmsSettingsRepository.kt index ed84c54e2..c9e12cb6f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/sms/SmsSettingsRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/sms/SmsSettingsRepository.kt @@ -3,13 +3,13 @@ package org.thoughtcrime.securesms.components.settings.app.chats.sms import androidx.annotation.WorkerThread import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.schedulers.Schedulers -import org.thoughtcrime.securesms.database.MessageDatabase +import org.thoughtcrime.securesms.database.MessageTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.util.FeatureFlags class SmsSettingsRepository( - private val smsDatabase: MessageDatabase = SignalDatabase.sms, - private val mmsDatabase: MessageDatabase = SignalDatabase.mms + private val smsDatabase: MessageTable = SignalDatabase.sms, + private val mmsDatabase: MessageTable = SignalDatabase.mms ) { fun getSmsExportState(): Single { if (!FeatureFlags.smsExporter()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsRepository.kt index c0cda821b..2792969f7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/InternalSettingsRepository.kt @@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.components.settings.app.internal import android.content.Context import org.signal.core.util.concurrent.SignalExecutors -import org.thoughtcrime.securesms.database.MessageDatabase +import org.thoughtcrime.securesms.database.MessageTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.addStyle import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList @@ -38,7 +38,7 @@ class InternalSettingsRepository(context: Context) { val recipientId = SignalStore.releaseChannelValues().releaseChannelRecipientId!! val threadId = SignalDatabase.threads.getOrCreateThreadIdFor(Recipient.resolved(recipientId)) - val insertResult: MessageDatabase.InsertResult? = ReleaseChannel.insertReleaseChannelMessage( + val insertResult: MessageTable.InsertResult? = ReleaseChannel.insertReleaseChannelMessage( recipientId = recipientId, body = body, threadId = threadId, diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/expire/ExpireTimerSettingsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/expire/ExpireTimerSettingsRepository.kt index 526aeef93..242582dcc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/expire/ExpireTimerSettingsRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/expire/ExpireTimerSettingsRepository.kt @@ -5,7 +5,7 @@ import androidx.annotation.WorkerThread import org.signal.core.util.concurrent.SignalExecutors import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.database.SignalDatabase -import org.thoughtcrime.securesms.database.ThreadDatabase +import org.thoughtcrime.securesms.database.ThreadTable import org.thoughtcrime.securesms.groups.GroupChangeException import org.thoughtcrime.securesms.groups.GroupManager import org.thoughtcrime.securesms.keyvalue.SignalStore @@ -57,8 +57,8 @@ class ExpireTimerSettingsRepository(val context: Context) { @WorkerThread private fun getThreadId(recipientId: RecipientId): Long { - val threadDatabase: ThreadDatabase = SignalDatabase.threads + val threadTable: ThreadTable = SignalDatabase.threads val recipient: Recipient = Recipient.resolved(recipientId) - return threadDatabase.getOrCreateThreadIdFor(recipient) + return threadTable.getOrCreateThreadIdFor(recipient) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsRepository.kt index a6b60570b..1aae16366 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsRepository.kt @@ -11,8 +11,8 @@ import org.signal.core.util.logging.Log import org.signal.storageservice.protos.groups.local.DecryptedGroup import org.signal.storageservice.protos.groups.local.DecryptedPendingMember import org.thoughtcrime.securesms.contacts.sync.ContactDiscovery -import org.thoughtcrime.securesms.database.GroupDatabase -import org.thoughtcrime.securesms.database.MediaDatabase +import org.thoughtcrime.securesms.database.GroupTable +import org.thoughtcrime.securesms.database.MediaTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.IdentityRecord import org.thoughtcrime.securesms.database.model.StoryViewState @@ -42,7 +42,7 @@ class ConversationSettingsRepository( return if (threadId <= 0) { Optional.empty() } else { - Optional.of(SignalDatabase.media.getGalleryMediaForThread(threadId, MediaDatabase.Sorting.Newest)) + Optional.of(SignalDatabase.media.getGalleryMediaForThread(threadId, MediaTable.Sorting.Newest)) } } @@ -91,7 +91,7 @@ class ConversationSettingsRepository( .getPushGroupsContainingMember(recipientId) .asSequence() .filter { it.members.contains(Recipient.self().id) } - .map(GroupDatabase.GroupRecord::getRecipientId) + .map(GroupTable.GroupRecord::getRecipientId) .map(Recipient::resolved) .sortedBy { gr -> gr.getDisplayName(context) } .toList() @@ -129,7 +129,7 @@ class ConversationSettingsRepository( fun getGroupCapacity(groupId: GroupId, consumer: (GroupCapacityResult) -> Unit) { SignalExecutors.BOUNDED.execute { - val groupRecord: GroupDatabase.GroupRecord = SignalDatabase.groups.getGroup(groupId).get() + val groupRecord: GroupTable.GroupRecord = SignalDatabase.groups.getGroup(groupId).get() consumer( if (groupRecord.isV2Group) { val decryptedGroup: DecryptedGroup = groupRecord.requireV2GroupProperties().decryptedGroup diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsViewModel.kt index 27ff70892..bd47e28f0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsViewModel.kt @@ -13,8 +13,8 @@ import org.signal.core.util.ThreadUtil import org.signal.core.util.concurrent.SignalExecutors import org.thoughtcrime.securesms.components.settings.conversation.preferences.ButtonStripPreference import org.thoughtcrime.securesms.components.settings.conversation.preferences.LegacyGroupPreference -import org.thoughtcrime.securesms.database.AttachmentDatabase -import org.thoughtcrime.securesms.database.RecipientDatabase +import org.thoughtcrime.securesms.database.AttachmentTable +import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.database.model.StoryViewState import org.thoughtcrime.securesms.groups.GroupId import org.thoughtcrime.securesms.groups.LiveGroup @@ -70,7 +70,7 @@ sealed class ConversationSettingsViewModel( val ids: List = cursor.map> { val result = mutableListOf() while (it.moveToNext()) { - result.add(CursorUtil.requireLong(it, AttachmentDatabase.ROW_ID)) + result.add(CursorUtil.requireLong(it, AttachmentTable.ROW_ID)) } result }.orElse(listOf()) @@ -148,9 +148,9 @@ sealed class ConversationSettingsViewModel( state.copy( recipient = recipient, buttonStripState = ButtonStripPreference.State( - isVideoAvailable = recipient.registered == RecipientDatabase.RegisteredState.REGISTERED && !recipient.isSelf && !recipient.isBlocked && !recipient.isReleaseNotes, + isVideoAvailable = recipient.registered == RecipientTable.RegisteredState.REGISTERED && !recipient.isSelf && !recipient.isBlocked && !recipient.isReleaseNotes, isAudioAvailable = isAudioAvailable, - isAudioSecure = recipient.registered == RecipientDatabase.RegisteredState.REGISTERED, + isAudioSecure = recipient.registered == RecipientTable.RegisteredState.REGISTERED, isMuted = recipient.isMuted, isMuteAvailable = !recipient.isSelf, isSearchAvailable = true diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/SharedMediaPreference.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/SharedMediaPreference.kt index 8e7a7d9f4..27870f438 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/SharedMediaPreference.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/SharedMediaPreference.kt @@ -5,7 +5,7 @@ import android.view.View import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.components.ThreadPhotoRailView import org.thoughtcrime.securesms.components.settings.PreferenceModel -import org.thoughtcrime.securesms.database.MediaDatabase +import org.thoughtcrime.securesms.database.MediaTable import org.thoughtcrime.securesms.mms.GlideApp import org.thoughtcrime.securesms.util.ViewUtil import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory @@ -24,7 +24,7 @@ object SharedMediaPreference { class Model( val mediaCursor: Cursor, val mediaIds: List, - val onMediaRecordClick: (MediaDatabase.MediaRecord, Boolean) -> Unit + val onMediaRecordClick: (MediaTable.MediaRecord, Boolean) -> Unit ) : PreferenceModel() { override fun areItemsTheSame(newItem: Model): Boolean { return true diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/SoundsAndNotificationsSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/SoundsAndNotificationsSettingsFragment.kt index 35c6c5c58..fbd53fbeb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/SoundsAndNotificationsSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/SoundsAndNotificationsSettingsFragment.kt @@ -11,7 +11,7 @@ import org.thoughtcrime.securesms.components.settings.DSLSettingsIcon import org.thoughtcrime.securesms.components.settings.DSLSettingsText import org.thoughtcrime.securesms.components.settings.configure import org.thoughtcrime.securesms.components.settings.conversation.preferences.Utils.formatMutedUntil -import org.thoughtcrime.securesms.database.RecipientDatabase +import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter import org.thoughtcrime.securesms.util.navigation.safeNavigate @@ -82,7 +82,7 @@ class SoundsAndNotificationsSettingsFragment : DSLSettingsFragment( ) if (state.hasMentionsSupport) { - val mentionSelection = if (state.mentionSetting == RecipientDatabase.MentionSetting.ALWAYS_NOTIFY) { + val mentionSelection = if (state.mentionSetting == RecipientTable.MentionSetting.ALWAYS_NOTIFY) { 0 } else { 1 @@ -96,9 +96,9 @@ class SoundsAndNotificationsSettingsFragment : DSLSettingsFragment( onSelected = { viewModel.setMentionSetting( if (it == 0) { - RecipientDatabase.MentionSetting.ALWAYS_NOTIFY + RecipientTable.MentionSetting.ALWAYS_NOTIFY } else { - RecipientDatabase.MentionSetting.DO_NOT_NOTIFY + RecipientTable.MentionSetting.DO_NOT_NOTIFY } ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/SoundsAndNotificationsSettingsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/SoundsAndNotificationsSettingsRepository.kt index c8cde4b06..1a5193cf4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/SoundsAndNotificationsSettingsRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/SoundsAndNotificationsSettingsRepository.kt @@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.components.settings.conversation.sounds import android.content.Context import org.signal.core.util.concurrent.SignalExecutors -import org.thoughtcrime.securesms.database.RecipientDatabase +import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.notifications.NotificationChannels import org.thoughtcrime.securesms.recipients.Recipient @@ -25,7 +25,7 @@ class SoundsAndNotificationsSettingsRepository(private val context: Context) { } } - fun setMentionSetting(recipientId: RecipientId, mentionSetting: RecipientDatabase.MentionSetting) { + fun setMentionSetting(recipientId: RecipientId, mentionSetting: RecipientTable.MentionSetting) { SignalExecutors.BOUNDED.execute { SignalDatabase.recipients.setMentionSetting(recipientId, mentionSetting) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/SoundsAndNotificationsSettingsState.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/SoundsAndNotificationsSettingsState.kt index 8e1a5836f..82ac5ea90 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/SoundsAndNotificationsSettingsState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/SoundsAndNotificationsSettingsState.kt @@ -1,13 +1,13 @@ package org.thoughtcrime.securesms.components.settings.conversation.sounds -import org.thoughtcrime.securesms.database.RecipientDatabase +import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId data class SoundsAndNotificationsSettingsState( val recipientId: RecipientId = Recipient.UNKNOWN.id, val muteUntil: Long = 0L, - val mentionSetting: RecipientDatabase.MentionSetting = RecipientDatabase.MentionSetting.DO_NOT_NOTIFY, + val mentionSetting: RecipientTable.MentionSetting = RecipientTable.MentionSetting.DO_NOT_NOTIFY, val hasCustomNotificationSettings: Boolean = false, val hasMentionsSupport: Boolean = false, val channelConsistencyCheckComplete: Boolean = false diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/SoundsAndNotificationsSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/SoundsAndNotificationsSettingsViewModel.kt index 67b377d9a..562bbb5c0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/SoundsAndNotificationsSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/SoundsAndNotificationsSettingsViewModel.kt @@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.components.settings.conversation.sounds import androidx.lifecycle.LiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider -import org.thoughtcrime.securesms.database.RecipientDatabase +import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.notifications.NotificationChannels import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId @@ -38,7 +38,7 @@ class SoundsAndNotificationsSettingsViewModel( repository.setMuteUntil(recipientId, 0L) } - fun setMentionSetting(mentionSetting: RecipientDatabase.MentionSetting) { + fun setMentionSetting(mentionSetting: RecipientTable.MentionSetting) { repository.setMentionSetting(recipientId, mentionSetting) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/custom/CustomNotificationsSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/custom/CustomNotificationsSettingsFragment.kt index 7a6b5e199..9395b3ebd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/custom/CustomNotificationsSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/custom/CustomNotificationsSettingsFragment.kt @@ -17,7 +17,7 @@ import org.thoughtcrime.securesms.components.settings.DSLConfiguration import org.thoughtcrime.securesms.components.settings.DSLSettingsFragment import org.thoughtcrime.securesms.components.settings.DSLSettingsText import org.thoughtcrime.securesms.components.settings.configure -import org.thoughtcrime.securesms.database.RecipientDatabase +import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.notifications.NotificationChannels import org.thoughtcrime.securesms.util.ConversationUtil import org.thoughtcrime.securesms.util.RingtoneUtil @@ -106,7 +106,7 @@ class CustomNotificationsSettingsFragment : DSLSettingsFragment(R.string.CustomN title = DSLSettingsText.from(R.string.CustomNotificationsDialogFragment__vibrate), isEnabled = state.controlsEnabled, isChecked = state.messageVibrateEnabled, - onClick = { viewModel.setMessageVibrate(RecipientDatabase.VibrateState.fromBoolean(!state.messageVibrateEnabled)) } + onClick = { viewModel.setMessageVibrate(RecipientTable.VibrateState.fromBoolean(!state.messageVibrateEnabled)) } ) } else { radioListPref( @@ -115,7 +115,7 @@ class CustomNotificationsSettingsFragment : DSLSettingsFragment(R.string.CustomN listItems = vibrateLabels, selected = state.messageVibrateState.id, onSelected = { - viewModel.setMessageVibrate(RecipientDatabase.VibrateState.fromId(it)) + viewModel.setMessageVibrate(RecipientTable.VibrateState.fromId(it)) } ) } @@ -139,7 +139,7 @@ class CustomNotificationsSettingsFragment : DSLSettingsFragment(R.string.CustomN listItems = vibrateLabels, selected = state.callVibrateState.id, onSelected = { - viewModel.setCallVibrate(RecipientDatabase.VibrateState.fromId(it)) + viewModel.setCallVibrate(RecipientTable.VibrateState.fromId(it)) } ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/custom/CustomNotificationsSettingsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/custom/CustomNotificationsSettingsRepository.kt index 421cab10b..d838b78e3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/custom/CustomNotificationsSettingsRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/custom/CustomNotificationsSettingsRepository.kt @@ -4,7 +4,7 @@ import android.content.Context import android.net.Uri import androidx.annotation.WorkerThread import org.signal.core.util.concurrent.SignalExecutors -import org.thoughtcrime.securesms.database.RecipientDatabase +import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.notifications.NotificationChannels @@ -27,7 +27,7 @@ class CustomNotificationsSettingsRepository(context: Context) { if (recipient.notificationChannel != null) { val ringtoneUri: Uri? = NotificationChannels.getInstance().getMessageRingtone(recipient) database.setMessageRingtone(recipient.id, if (ringtoneUri == Uri.EMPTY) null else ringtoneUri) - database.setMessageVibrate(recipient.id, RecipientDatabase.VibrateState.fromBoolean(NotificationChannels.getInstance().getMessageVibrate(recipient))) + database.setMessageVibrate(recipient.id, RecipientTable.VibrateState.fromBoolean(NotificationChannels.getInstance().getMessageVibrate(recipient))) } } @@ -45,7 +45,7 @@ class CustomNotificationsSettingsRepository(context: Context) { } } - fun setMessageVibrate(recipientId: RecipientId, vibrateState: RecipientDatabase.VibrateState) { + fun setMessageVibrate(recipientId: RecipientId, vibrateState: RecipientTable.VibrateState) { executor.execute { val recipient: Recipient = Recipient.resolved(recipientId) @@ -54,7 +54,7 @@ class CustomNotificationsSettingsRepository(context: Context) { } } - fun setCallingVibrate(recipientId: RecipientId, vibrateState: RecipientDatabase.VibrateState) { + fun setCallingVibrate(recipientId: RecipientId, vibrateState: RecipientTable.VibrateState) { executor.execute { SignalDatabase.recipients.setCallVibrate(recipientId, vibrateState) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/custom/CustomNotificationsSettingsState.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/custom/CustomNotificationsSettingsState.kt index 4194d1a78..953a9d76f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/custom/CustomNotificationsSettingsState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/custom/CustomNotificationsSettingsState.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.components.settings.conversation.sounds.custom import android.net.Uri -import org.thoughtcrime.securesms.database.RecipientDatabase +import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.recipients.Recipient data class CustomNotificationsSettingsState( @@ -9,10 +9,10 @@ data class CustomNotificationsSettingsState( val recipient: Recipient? = null, val hasCustomNotifications: Boolean = false, val controlsEnabled: Boolean = false, - val messageVibrateState: RecipientDatabase.VibrateState = RecipientDatabase.VibrateState.DEFAULT, + val messageVibrateState: RecipientTable.VibrateState = RecipientTable.VibrateState.DEFAULT, val messageVibrateEnabled: Boolean = false, val messageSound: Uri? = null, - val callVibrateState: RecipientDatabase.VibrateState = RecipientDatabase.VibrateState.DEFAULT, + val callVibrateState: RecipientTable.VibrateState = RecipientTable.VibrateState.DEFAULT, val callSound: Uri? = null, val showCallingOptions: Boolean = false, ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/custom/CustomNotificationsSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/custom/CustomNotificationsSettingsViewModel.kt index 57f1bbf98..9d2aa5173 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/custom/CustomNotificationsSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/sounds/custom/CustomNotificationsSettingsViewModel.kt @@ -4,7 +4,7 @@ import android.net.Uri import androidx.lifecycle.LiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider -import org.thoughtcrime.securesms.database.RecipientDatabase +import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.notifications.NotificationChannels import org.thoughtcrime.securesms.recipients.Recipient @@ -31,9 +31,9 @@ class CustomNotificationsSettingsViewModel( messageSound = recipient.messageRingtone, messageVibrateState = recipient.messageVibrate, messageVibrateEnabled = when (recipient.messageVibrate) { - RecipientDatabase.VibrateState.DEFAULT -> SignalStore.settings().isMessageVibrateEnabled - RecipientDatabase.VibrateState.ENABLED -> true - RecipientDatabase.VibrateState.DISABLED -> false + RecipientTable.VibrateState.DEFAULT -> SignalStore.settings().isMessageVibrateEnabled + RecipientTable.VibrateState.ENABLED -> true + RecipientTable.VibrateState.DISABLED -> false }, showCallingOptions = recipient.isRegistered && (!recipient.isGroup || FeatureFlags.groupCallRinging()), callSound = recipient.callRingtone, @@ -46,7 +46,7 @@ class CustomNotificationsSettingsViewModel( repository.setHasCustomNotifications(recipientId, hasCustomNotifications) } - fun setMessageVibrate(messageVibrateState: RecipientDatabase.VibrateState) { + fun setMessageVibrate(messageVibrateState: RecipientTable.VibrateState) { repository.setMessageVibrate(recipientId, messageVibrateState) } @@ -54,7 +54,7 @@ class CustomNotificationsSettingsViewModel( repository.setMessageSound(recipientId, uri) } - fun setCallVibrate(callVibrateState: RecipientDatabase.VibrateState) { + fun setCallVibrate(callVibrateState: RecipientTable.VibrateState) { repository.setCallingVibrate(recipientId, callVibrateState) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNoteDraft.kt b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNoteDraft.kt index 727a0578d..7e9ceb586 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNoteDraft.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNoteDraft.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.components.voice import android.net.Uri -import org.thoughtcrime.securesms.database.DraftDatabase +import org.thoughtcrime.securesms.database.DraftTable private const val SIZE = "size" @@ -11,8 +11,8 @@ class VoiceNoteDraft( ) { companion object { @JvmStatic - fun fromDraft(draft: DraftDatabase.Draft): VoiceNoteDraft { - if (draft.type != DraftDatabase.Draft.VOICE_NOTE) { + fun fromDraft(draft: DraftTable.Draft): VoiceNoteDraft { + if (draft.type != DraftTable.Draft.VOICE_NOTE) { throw IllegalArgumentException() } @@ -25,9 +25,9 @@ class VoiceNoteDraft( } } - fun asDraft(): DraftDatabase.Draft { + fun asDraft(): DraftTable.Draft { val draftUri = uri.buildUpon().appendQueryParameter(SIZE, size.toString()) - return DraftDatabase.Draft(DraftDatabase.Draft.VOICE_NOTE, draftUri.build().toString()) + return DraftTable.Draft(DraftTable.Draft.VOICE_NOTE, draftUri.build().toString()) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackService.java b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackService.java index 5a7469d99..e341f8ad8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackService.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackService.java @@ -30,7 +30,7 @@ import com.google.android.exoplayer2.ui.PlayerNotificationManager; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.MessageDatabase; +import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; @@ -254,10 +254,10 @@ public class VoiceNotePlaybackService extends MediaBrowserServiceCompat { return; } long messageId = extras.getLong(VoiceNoteMediaItemFactory.EXTRA_MESSAGE_ID); - RecipientId recipientId = RecipientId.from(extras.getString(VoiceNoteMediaItemFactory.EXTRA_INDIVIDUAL_RECIPIENT_ID)); - MessageDatabase messageDatabase = SignalDatabase.mms(); + RecipientId recipientId = RecipientId.from(extras.getString(VoiceNoteMediaItemFactory.EXTRA_INDIVIDUAL_RECIPIENT_ID)); + MessageTable messageDatabase = SignalDatabase.mms(); - MessageDatabase.MarkedMessageInfo markedMessageInfo = messageDatabase.setIncomingMessageViewed(messageId); + MessageTable.MarkedMessageInfo markedMessageInfo = messageDatabase.setIncomingMessageViewed(messageId); if (markedMessageInfo != null) { ApplicationDependencies.getJobManager().add(new SendViewedReceiptJob(markedMessageInfo.getThreadId(), diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallRepository.java b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallRepository.java index f85071b8f..0274cd71c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallRepository.java @@ -7,7 +7,7 @@ import androidx.annotation.WorkerThread; import androidx.core.util.Consumer; import org.signal.core.util.concurrent.SignalExecutors; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.identity.IdentityRecordList; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; @@ -30,7 +30,7 @@ class WebRtcCallRepository { List recipients; if (recipient.isGroup()) { - recipients = SignalDatabase.groups().getGroupMembers(recipient.requireGroupId(), GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); + recipients = SignalDatabase.groups().getGroupMembers(recipient.requireGroupId(), GroupTable.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); } else { recipients = Collections.singletonList(recipient); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactRepository.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactRepository.java index 98358acbe..52f137a18 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactRepository.java @@ -11,7 +11,7 @@ import androidx.annotation.NonNull; import androidx.annotation.WorkerThread; import org.signal.libsignal.protocol.util.Pair; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter; import org.thoughtcrime.securesms.recipients.Recipient; @@ -32,8 +32,8 @@ import java.util.Map; */ public class ContactRepository { - private final RecipientDatabase recipientDatabase; - private final String noteToSelfTitle; + private final RecipientTable recipientTable; + private final String noteToSelfTitle; private final Context context; public static final String ID_COLUMN = "id"; @@ -53,18 +53,18 @@ public class ContactRepository { /** Maps the recipient results to the legacy contact column names */ private static final List> SEARCH_CURSOR_MAPPERS = new ArrayList>() {{ - add(new Pair<>(ID_COLUMN, cursor -> CursorUtil.requireLong(cursor, RecipientDatabase.ID))); + add(new Pair<>(ID_COLUMN, cursor -> CursorUtil.requireLong(cursor, RecipientTable.ID))); add(new Pair<>(NAME_COLUMN, cursor -> { - String system = CursorUtil.requireString(cursor, RecipientDatabase.SYSTEM_JOINED_NAME); - String profile = CursorUtil.requireString(cursor, RecipientDatabase.SEARCH_PROFILE_NAME); + String system = CursorUtil.requireString(cursor, RecipientTable.SYSTEM_JOINED_NAME); + String profile = CursorUtil.requireString(cursor, RecipientTable.SEARCH_PROFILE_NAME); return Util.getFirstNonEmpty(system, profile); })); add(new Pair<>(NUMBER_COLUMN, cursor -> { - String phone = CursorUtil.requireString(cursor, RecipientDatabase.PHONE); - String email = CursorUtil.requireString(cursor, RecipientDatabase.EMAIL); + String phone = CursorUtil.requireString(cursor, RecipientTable.PHONE); + String email = CursorUtil.requireString(cursor, RecipientTable.EMAIL); if (phone != null) { phone = PhoneNumberFormatter.prettyPrint(phone); @@ -73,18 +73,18 @@ public class ContactRepository { return Util.getFirstNonEmpty(phone, email); })); - add(new Pair<>(NUMBER_TYPE_COLUMN, cursor -> CursorUtil.requireInt(cursor, RecipientDatabase.SYSTEM_PHONE_TYPE))); + add(new Pair<>(NUMBER_TYPE_COLUMN, cursor -> CursorUtil.requireInt(cursor, RecipientTable.SYSTEM_PHONE_TYPE))); - add(new Pair<>(LABEL_COLUMN, cursor -> CursorUtil.requireString(cursor, RecipientDatabase.SYSTEM_PHONE_LABEL))); + add(new Pair<>(LABEL_COLUMN, cursor -> CursorUtil.requireString(cursor, RecipientTable.SYSTEM_PHONE_LABEL))); add(new Pair<>(CONTACT_TYPE_COLUMN, cursor -> { - int registered = CursorUtil.requireInt(cursor, RecipientDatabase.REGISTERED); - return registered == RecipientDatabase.RegisteredState.REGISTERED.getId() ? PUSH_TYPE : NORMAL_TYPE; + int registered = CursorUtil.requireInt(cursor, RecipientTable.REGISTERED); + return registered == RecipientTable.RegisteredState.REGISTERED.getId() ? PUSH_TYPE : NORMAL_TYPE; })); add(new Pair<>(ABOUT_COLUMN, cursor -> { - String aboutEmoji = CursorUtil.requireString(cursor, RecipientDatabase.ABOUT_EMOJI); - String about = CursorUtil.requireString(cursor, RecipientDatabase.ABOUT); + String aboutEmoji = CursorUtil.requireString(cursor, RecipientTable.ABOUT_EMOJI); + String about = CursorUtil.requireString(cursor, RecipientTable.ABOUT); if (!Util.isEmpty(aboutEmoji)) { if (!Util.isEmpty(about)) { @@ -101,8 +101,8 @@ public class ContactRepository { }}; public ContactRepository(@NonNull Context context, @NonNull String noteToSelfTitle) { - this.recipientDatabase = SignalDatabase.recipients(); - this.noteToSelfTitle = noteToSelfTitle; + this.recipientTable = SignalDatabase.recipients(); + this.noteToSelfTitle = noteToSelfTitle; this.context = context.getApplicationContext(); } @@ -113,8 +113,8 @@ public class ContactRepository { @WorkerThread public @NonNull Cursor querySignalContacts(@NonNull String query, boolean includeSelf) { - Cursor cursor = TextUtils.isEmpty(query) ? recipientDatabase.getSignalContacts(includeSelf) - : recipientDatabase.querySignalContacts(query, includeSelf); + Cursor cursor = TextUtils.isEmpty(query) ? recipientTable.getSignalContacts(includeSelf) + : recipientTable.querySignalContacts(query, includeSelf); cursor = handleNoteToSelfQuery(query, includeSelf, cursor); @@ -123,8 +123,8 @@ public class ContactRepository { @WorkerThread public @NonNull Cursor queryNonGroupContacts(@NonNull String query, boolean includeSelf) { - Cursor cursor = TextUtils.isEmpty(query) ? recipientDatabase.getNonGroupContacts(includeSelf) - : recipientDatabase.queryNonGroupContacts(query, includeSelf); + Cursor cursor = TextUtils.isEmpty(query) ? recipientTable.getNonGroupContacts(includeSelf) + : recipientTable.queryNonGroupContacts(query, includeSelf); cursor = handleNoteToSelfQuery(query, includeSelf, cursor); @@ -139,8 +139,8 @@ public class ContactRepository { boolean shouldAdd = !nameMatch && !numberMatch; if (shouldAdd) { - MatrixCursor selfCursor = new MatrixCursor(RecipientDatabase.SEARCH_PROJECTION_NAMES); - selfCursor.addRow(new Object[]{ self.getId().serialize(), noteToSelfTitle, self.getE164().orElse(""), self.getEmail().orElse(null), null, -1, RecipientDatabase.RegisteredState.REGISTERED.getId(), self.getAbout(), self.getAboutEmoji(), null, true, noteToSelfTitle, noteToSelfTitle }); + MatrixCursor selfCursor = new MatrixCursor(RecipientTable.SEARCH_PROJECTION_NAMES); + selfCursor.addRow(new Object[]{ self.getId().serialize(), noteToSelfTitle, self.getE164().orElse(""), self.getEmail().orElse(null), null, -1, RecipientTable.RegisteredState.REGISTERED.getId(), self.getAbout(), self.getAboutEmoji(), null, true, noteToSelfTitle, noteToSelfTitle }); cursor = cursor == null ? selfCursor : new MergeCursor(new Cursor[]{ cursor, selfCursor }); } @@ -150,8 +150,8 @@ public class ContactRepository { @WorkerThread public Cursor queryNonSignalContacts(@NonNull String query) { - Cursor cursor = TextUtils.isEmpty(query) ? recipientDatabase.getNonSignalContacts() - : recipientDatabase.queryNonSignalContacts(query); + Cursor cursor = TextUtils.isEmpty(query) ? recipientTable.getNonSignalContacts() + : recipientTable.queryNonSignalContacts(query); return new SearchCursorWrapper(cursor, SEARCH_CURSOR_MAPPERS); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsCursorLoader.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsCursorLoader.java index 01fbfaef8..6c797217b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsCursorLoader.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsCursorLoader.java @@ -25,10 +25,10 @@ import androidx.annotation.NonNull; import org.signal.core.util.CursorUtil; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.database.model.ThreadRecord; import org.thoughtcrime.securesms.phonenumbers.NumberUtil; import org.thoughtcrime.securesms.recipients.RecipientId; @@ -193,12 +193,12 @@ public class ContactsCursorLoader extends AbstractContactsCursorLoader { } private Cursor getRecentConversationsCursor(boolean groupsOnly) { - ThreadDatabase threadDatabase = SignalDatabase.threads(); + ThreadTable threadTable = SignalDatabase.threads(); MatrixCursor recentConversations = ContactsCursorRows.createMatrixCursor(RECENT_CONVERSATION_MAX); - try (Cursor rawConversations = threadDatabase.getRecentConversationList(RECENT_CONVERSATION_MAX, flagSet(mode, DisplayMode.FLAG_INACTIVE_GROUPS), false, groupsOnly, hideGroupsV1(mode), !smsEnabled(mode), false)) { - ThreadDatabase.Reader reader = threadDatabase.readerFor(rawConversations); - ThreadRecord threadRecord; + try (Cursor rawConversations = threadTable.getRecentConversationList(RECENT_CONVERSATION_MAX, flagSet(mode, DisplayMode.FLAG_INACTIVE_GROUPS), false, groupsOnly, hideGroupsV1(mode), !smsEnabled(mode), false)) { + ThreadTable.Reader reader = threadTable.readerFor(rawConversations); + ThreadRecord threadRecord; while ((threadRecord = reader.getNext()) != null) { recentConversations.addRow(ContactsCursorRows.forRecipient(getContext(), threadRecord.getRecipient())); } @@ -221,11 +221,11 @@ public class ContactsCursorLoader extends AbstractContactsCursorLoader { } private Cursor getGroupsCursor() { - MatrixCursor groupContacts = ContactsCursorRows.createMatrixCursor(); - Map groups = new LinkedHashMap<>(); + MatrixCursor groupContacts = ContactsCursorRows.createMatrixCursor(); + Map groups = new LinkedHashMap<>(); - try (GroupDatabase.Reader reader = SignalDatabase.groups().queryGroupsByTitle(getFilter(), flagSet(mode, DisplayMode.FLAG_INACTIVE_GROUPS), hideGroupsV1(mode), !smsEnabled(mode))) { - GroupDatabase.GroupRecord groupRecord; + try (GroupTable.Reader reader = SignalDatabase.groups().queryGroupsByTitle(getFilter(), flagSet(mode, DisplayMode.FLAG_INACTIVE_GROUPS), hideGroupsV1(mode), !smsEnabled(mode))) { + GroupTable.GroupRecord groupRecord; while ((groupRecord = reader.getNext()) != null) { groups.put(groupRecord.getRecipientId(), groupRecord); } @@ -235,19 +235,19 @@ public class ContactsCursorLoader extends AbstractContactsCursorLoader { Set filteredContacts = new HashSet<>(); try (Cursor cursor = SignalDatabase.recipients().queryAllContacts(getFilter())) { while (cursor != null && cursor.moveToNext()) { - filteredContacts.add(RecipientId.from(CursorUtil.requireString(cursor, RecipientDatabase.ID))); + filteredContacts.add(RecipientId.from(CursorUtil.requireString(cursor, RecipientTable.ID))); } } - try (GroupDatabase.Reader reader = SignalDatabase.groups().queryGroupsByMembership(filteredContacts, flagSet(mode, DisplayMode.FLAG_INACTIVE_GROUPS), hideGroupsV1(mode), !smsEnabled(mode))) { - GroupDatabase.GroupRecord groupRecord; + try (GroupTable.Reader reader = SignalDatabase.groups().queryGroupsByMembership(filteredContacts, flagSet(mode, DisplayMode.FLAG_INACTIVE_GROUPS), hideGroupsV1(mode), !smsEnabled(mode))) { + GroupTable.GroupRecord groupRecord; while ((groupRecord = reader.getNext()) != null) { groups.put(groupRecord.getRecipientId(), groupRecord); } } } - for (GroupDatabase.GroupRecord groupRecord : groups.values()) { + for (GroupTable.GroupRecord groupRecord : groups.values()) { groupContacts.addRow(ContactsCursorRows.forGroup(groupRecord)); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsCursorRows.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsCursorRows.java index bf4ac82ee..d9a2ea133 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsCursorRows.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsCursorRows.java @@ -8,7 +8,7 @@ import android.provider.ContactsContract; import androidx.annotation.NonNull; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter; import org.thoughtcrime.securesms.recipients.Recipient; import org.whispersystems.signalservice.api.util.OptionalUtil; @@ -74,7 +74,7 @@ public final class ContactsCursorRows { /** * Create a row for a contacts cursor based off the given group record. */ - public static @NonNull Object[] forGroup(@NonNull GroupDatabase.GroupRecord groupRecord) { + public static @NonNull Object[] forGroup(@NonNull GroupTable.GroupRecord groupRecord) { return new Object[]{groupRecord.getRecipientId().serialize(), groupRecord.getTitle(), groupRecord.getId(), diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/TurnOffContactJoinedNotificationsActivity.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/TurnOffContactJoinedNotificationsActivity.java index 0f8650cbd..0b2dbf7d3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/TurnOffContactJoinedNotificationsActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/TurnOffContactJoinedNotificationsActivity.java @@ -9,9 +9,9 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.database.MessageDatabase; +import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.notifications.MarkReadReceiver; @@ -52,9 +52,9 @@ public class TurnOffContactJoinedNotificationsActivity extends AppCompatActivity private void handlePositiveAction(@NonNull DialogInterface dialog) { SimpleTask.run(getLifecycle(), () -> { - ThreadDatabase threadDatabase = SignalDatabase.threads(); + ThreadTable threadTable = SignalDatabase.threads(); - List marked = threadDatabase.setRead(getIntent().getLongExtra(EXTRA_THREAD_ID, -1), false); + List marked = threadTable.setRead(getIntent().getLongExtra(EXTRA_THREAD_ID, -1), false); MarkReadReceiver.process(this, marked); SignalStore.settings().setNotifyWhenContactJoinsSignal(false); diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GroupRecordContactPhoto.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GroupRecordContactPhoto.java index 2d3d27dad..1e1798a27 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GroupRecordContactPhoto.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GroupRecordContactPhoto.java @@ -8,7 +8,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import org.signal.core.util.Conversions; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.profiles.AvatarHelper; @@ -30,8 +30,8 @@ public final class GroupRecordContactPhoto implements ContactPhoto { @Override public InputStream openInputStream(Context context) throws IOException { - GroupDatabase groupDatabase = SignalDatabase.groups(); - Optional groupRecord = groupDatabase.getGroup(groupId); + GroupTable groupDatabase = SignalDatabase.groups(); + Optional groupRecord = groupDatabase.getGroup(groupId); if (!groupRecord.isPresent() || !AvatarHelper.hasAvatar(context, groupRecord.get().getRecipientId())) { throw new IOException("No avatar for group: " + groupId); diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSource.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSource.kt index 580cc12d0..3b02eb67b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSource.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSource.kt @@ -6,7 +6,7 @@ import org.thoughtcrime.securesms.contacts.paged.collections.ContactSearchCollec import org.thoughtcrime.securesms.contacts.paged.collections.ContactSearchIterator import org.thoughtcrime.securesms.contacts.paged.collections.CursorSearchIterator import org.thoughtcrime.securesms.contacts.paged.collections.StoriesSearchCollection -import org.thoughtcrime.securesms.database.GroupDatabase.GroupRecord +import org.thoughtcrime.securesms.database.GroupTable.GroupRecord import org.thoughtcrime.securesms.database.model.DistributionListPrivacyMode import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.keyvalue.StorySend diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSourceRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSourceRepository.kt index c84a9efc3..871cf2c9e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSourceRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSourceRepository.kt @@ -6,11 +6,11 @@ import org.signal.core.util.CursorUtil import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.contacts.ContactRepository import org.thoughtcrime.securesms.contacts.paged.collections.ContactSearchIterator -import org.thoughtcrime.securesms.database.DistributionListDatabase -import org.thoughtcrime.securesms.database.GroupDatabase -import org.thoughtcrime.securesms.database.GroupDatabase.GroupRecord +import org.thoughtcrime.securesms.database.DistributionListTables +import org.thoughtcrime.securesms.database.GroupTable +import org.thoughtcrime.securesms.database.GroupTable.GroupRecord import org.thoughtcrime.securesms.database.SignalDatabase -import org.thoughtcrime.securesms.database.ThreadDatabase +import org.thoughtcrime.securesms.database.ThreadTable import org.thoughtcrime.securesms.database.model.DistributionListPrivacyMode import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.keyvalue.StorySend @@ -53,7 +53,7 @@ open class ContactSearchPagedDataSourceRepository( query: String? ): ContactSearchIterator { return SignalDatabase.groups.queryGroups( - GroupDatabase.GroupQuery.Builder() + GroupTable.GroupQuery.Builder() .withSearchQuery(query) .withInactiveGroups(section.includeInactive) .withMmsGroups(section.includeMms) @@ -80,15 +80,15 @@ open class ContactSearchPagedDataSourceRepository( } open fun getRecipientFromDistributionListCursor(cursor: Cursor): Recipient { - return Recipient.resolved(RecipientId.from(CursorUtil.requireLong(cursor, DistributionListDatabase.RECIPIENT_ID))) + return Recipient.resolved(RecipientId.from(CursorUtil.requireLong(cursor, DistributionListTables.RECIPIENT_ID))) } open fun getPrivacyModeFromDistributionListCursor(cursor: Cursor): DistributionListPrivacyMode { - return DistributionListPrivacyMode.deserialize(CursorUtil.requireLong(cursor, DistributionListDatabase.PRIVACY_MODE)) + return DistributionListPrivacyMode.deserialize(CursorUtil.requireLong(cursor, DistributionListTables.PRIVACY_MODE)) } open fun getRecipientFromThreadCursor(cursor: Cursor): Recipient { - return Recipient.resolved(RecipientId.from(CursorUtil.requireLong(cursor, ThreadDatabase.RECIPIENT_ID))) + return Recipient.resolved(RecipientId.from(CursorUtil.requireLong(cursor, ThreadTable.RECIPIENT_ID))) } open fun getRecipientFromRecipientCursor(cursor: Cursor): Recipient { diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchRepository.kt index 5cebb5916..7e32edd7a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchRepository.kt @@ -4,7 +4,7 @@ import androidx.annotation.CheckResult import io.reactivex.rxjava3.core.Completable import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.schedulers.Schedulers -import org.thoughtcrime.securesms.database.GroupDatabase +import org.thoughtcrime.securesms.database.GroupTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.DistributionListId import org.thoughtcrime.securesms.groups.GroupId @@ -42,7 +42,7 @@ class ContactSearchRepository { @CheckResult fun markDisplayAsStory(recipientIds: Collection): Completable { return Completable.fromAction { - SignalDatabase.groups.setShowAsStoryState(recipientIds, GroupDatabase.ShowAsStoryState.ALWAYS) + SignalDatabase.groups.setShowAsStoryState(recipientIds, GroupTable.ShowAsStoryState.ALWAYS) SignalDatabase.recipients.markNeedsSync(recipientIds) StorageSyncHelper.scheduleSyncForDataChange() }.subscribeOn(Schedulers.io()) @@ -51,7 +51,7 @@ class ContactSearchRepository { @CheckResult fun unmarkDisplayAsStory(groupId: GroupId): Completable { return Completable.fromAction { - SignalDatabase.groups.setShowAsStoryState(groupId, GroupDatabase.ShowAsStoryState.NEVER) + SignalDatabase.groups.setShowAsStoryState(groupId, GroupTable.ShowAsStoryState.NEVER) SignalDatabase.recipients.markNeedsSync(Recipient.externalGroupExact(groupId).id) StorageSyncHelper.scheduleSyncForDataChange() }.subscribeOn(Schedulers.io()) diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscovery.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscovery.kt index 5ff43c193..b1aab639f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscovery.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscovery.kt @@ -10,7 +10,7 @@ import org.signal.contacts.SystemContactsRepository.ContactPhoneDetails import org.signal.core.util.Stopwatch import org.signal.core.util.StringUtil import org.signal.core.util.logging.Log -import org.thoughtcrime.securesms.database.RecipientDatabase +import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.jobs.SyncSystemContactLinksJob @@ -93,7 +93,7 @@ object ContactDiscovery { @JvmStatic @Throws(IOException::class) @WorkerThread - fun refresh(context: Context, recipient: Recipient, notifyOfNewUsers: Boolean): RecipientDatabase.RegisteredState { + fun refresh(context: Context, recipient: Recipient, notifyOfNewUsers: Boolean): RecipientTable.RegisteredState { val result: RefreshResult = refreshRecipients( context = context, descriptor = "refresh-single", @@ -105,9 +105,9 @@ object ContactDiscovery { ) return if (result.registeredIds.contains(recipient.id)) { - RecipientDatabase.RegisteredState.REGISTERED + RecipientTable.RegisteredState.REGISTERED } else { - RecipientDatabase.RegisteredState.NOT_REGISTERED + RecipientTable.RegisteredState.NOT_REGISTERED } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryRefreshV2.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryRefreshV2.kt index c62bb6083..1a16eacdc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryRefreshV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryRefreshV2.kt @@ -9,7 +9,7 @@ import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.BuildConfig import org.thoughtcrime.securesms.contacts.sync.FuzzyPhoneNumberHelper.InputResult import org.thoughtcrime.securesms.contacts.sync.FuzzyPhoneNumberHelper.OutputResult -import org.thoughtcrime.securesms.database.RecipientDatabase.CdsV2Result +import org.thoughtcrime.securesms.database.RecipientTable.CdsV2Result import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.jobs.RetrieveProfileJob diff --git a/app/src/main/java/org/thoughtcrime/securesms/contactshare/Contact.java b/app/src/main/java/org/thoughtcrime/securesms/contactshare/Contact.java index 3bfa7a03d..2d61ec3b6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contactshare/Contact.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contactshare/Contact.java @@ -15,7 +15,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.attachments.AttachmentId; import org.thoughtcrime.securesms.attachments.UriAttachment; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.util.JsonUtils; import org.thoughtcrime.securesms.util.MediaUtil; @@ -643,7 +643,7 @@ public class Contact implements Parcelable { private static Attachment attachmentFromUri(@Nullable Uri uri) { if (uri == null) return null; - return new UriAttachment(uri, MediaUtil.IMAGE_JPEG, AttachmentDatabase.TRANSFER_PROGRESS_DONE, 0, null, false, false, false, false, null, null, null, null, null); + return new UriAttachment(uri, MediaUtil.IMAGE_JPEG, AttachmentTable.TRANSFER_PROGRESS_DONE, 0, null, false, false, false, false, null, null, null, null, null); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/contactshare/SharedContactDetailsActivity.java b/app/src/main/java/org/thoughtcrime/securesms/contactshare/SharedContactDetailsActivity.java index 4560f513e..4b665ec3c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contactshare/SharedContactDetailsActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contactshare/SharedContactDetailsActivity.java @@ -22,7 +22,7 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy; import org.thoughtcrime.securesms.PassphraseRequiredActivity; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobs.DirectoryRefreshJob; import org.thoughtcrime.securesms.mms.GlideApp; @@ -194,7 +194,7 @@ public class SharedContactDetailsActivity extends PassphraseRequiredActivity { List systemUsers = new ArrayList<>(recipients.size()); for (LiveRecipient recipient : activeRecipients.values()) { - if (recipient.get().getRegistered() == RecipientDatabase.RegisteredState.REGISTERED) { + if (recipient.get().getRegistered() == RecipientTable.RegisteredState.REGISTERED) { pushUsers.add(recipient.get()); } else if (recipient.get().isSystemContact()) { systemUsers.add(recipient.get()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationDataSource.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationDataSource.java index d3f48b5be..8baac2a57 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationDataSource.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationDataSource.java @@ -13,9 +13,8 @@ import org.signal.paging.PagedDataSource; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; import org.thoughtcrime.securesms.conversation.ConversationData.MessageRequestData; import org.thoughtcrime.securesms.conversation.ConversationMessage.ConversationMessageFactory; -import org.thoughtcrime.securesms.database.MessageDatabase; -import org.thoughtcrime.securesms.database.MmsSmsColumns; -import org.thoughtcrime.securesms.database.MmsSmsDatabase; +import org.thoughtcrime.securesms.database.MessageTable; +import org.thoughtcrime.securesms.database.MmsSmsTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.InMemoryMessageRecord; import org.thoughtcrime.securesms.database.model.MediaMmsMessageRecord; @@ -94,16 +93,16 @@ public class ConversationDataSource implements PagedDataSource load(int start, int length, @NonNull CancellationSignal cancellationSignal) { - Stopwatch stopwatch = new Stopwatch("load(" + start + ", " + length + "), thread " + threadId); - MmsSmsDatabase db = SignalDatabase.mmsSms(); - List records = new ArrayList<>(length); + Stopwatch stopwatch = new Stopwatch("load(" + start + ", " + length + "), thread " + threadId); + MmsSmsTable db = SignalDatabase.mmsSms(); + List records = new ArrayList<>(length); MentionHelper mentionHelper = new MentionHelper(); AttachmentHelper attachmentHelper = new AttachmentHelper(); ReactionHelper reactionHelper = new ReactionHelper(); PaymentHelper paymentHelper = new PaymentHelper(); Set referencedIds = new HashSet<>(); - try (MmsSmsDatabase.Reader reader = MmsSmsDatabase.readerFor(db.getConversation(threadId, start, length))) { + try (MmsSmsTable.Reader reader = MmsSmsTable.readerFor(db.getConversation(threadId, start, length))) { MessageRecord record; while ((record = reader.getNext()) != null && !cancellationSignal.isCanceled()) { records.add(record); @@ -167,9 +166,9 @@ public class ConversationDataSource implements PagedDataSource media; private StickerLocator stickerLocator; private boolean isBorderless; - private int distributionType = ThreadDatabase.DistributionTypes.DEFAULT; + private int distributionType = ThreadTable.DistributionTypes.DEFAULT; private int startingPosition = -1; private Uri dataUri; private String dataType; diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java index 3fd444c00..9700fccaa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java @@ -96,9 +96,9 @@ import org.thoughtcrime.securesms.conversation.colors.Colorizer; import org.thoughtcrime.securesms.conversation.mutiselect.MultiselectCollection; import org.thoughtcrime.securesms.conversation.mutiselect.MultiselectPart; import org.thoughtcrime.securesms.conversation.ui.payment.PaymentMessageView; -import org.thoughtcrime.securesms.database.AttachmentDatabase; -import org.thoughtcrime.securesms.database.MediaDatabase; -import org.thoughtcrime.securesms.database.MessageDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; +import org.thoughtcrime.securesms.database.MediaTable; +import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MediaMmsMessageRecord; import org.thoughtcrime.securesms.database.model.MessageRecord; @@ -1958,10 +1958,10 @@ public final class ConversationItem extends RelativeLayout implements BindableCo if (messageRecord.isMms()) { TextSlide slide = ((MmsMessageRecord) messageRecord).getSlideDeck().getTextSlide(); - if (slide != null && slide.asAttachment().getTransferState() == AttachmentDatabase.TRANSFER_PROGRESS_DONE) { + if (slide != null && slide.asAttachment().getTransferState() == AttachmentTable.TRANSFER_PROGRESS_DONE) { message = getResources().getString(R.string.ConversationItem_read_more); action = () -> eventListener.onMoreTextClicked(conversationRecipient.getId(), messageRecord.getId(), messageRecord.isMms()); - } else if (slide != null && slide.asAttachment().getTransferState() == AttachmentDatabase.TRANSFER_PROGRESS_STARTED) { + } else if (slide != null && slide.asAttachment().getTransferState() == AttachmentTable.TRANSFER_PROGRESS_STARTED) { message = getResources().getString(R.string.ConversationItem_pending); action = () -> {}; } else if (slide != null) { @@ -2363,7 +2363,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo false, false, false, - MediaDatabase.Sorting.Newest, + MediaTable.Sorting.Newest, slide.isVideoGif()); context.startActivity(MediaIntentFactory.create(context, args)); } else if (slide.getUri() != null) { @@ -2560,8 +2560,8 @@ public final class ConversationItem extends RelativeLayout implements BindableCo if (message > -1) builder.setMessage(message); builder.setPositiveButton(R.string.yes, (dialogInterface, i) -> { - MessageDatabase db = messageRecord.isMms() ? SignalDatabase.mms() - : SignalDatabase.sms(); + MessageTable db = messageRecord.isMms() ? SignalDatabase.mms() + : SignalDatabase.sms(); db.markAsInsecure(messageRecord.getId()); db.markAsOutbox(messageRecord.getId()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java index 94b20abb4..a375c423d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java @@ -169,14 +169,14 @@ import org.thoughtcrime.securesms.conversation.ui.inlinequery.InlineQueryViewMod import org.thoughtcrime.securesms.conversation.ui.mentions.MentionsPickerViewModel; import org.thoughtcrime.securesms.crypto.ReentrantSessionLock; import org.thoughtcrime.securesms.crypto.SecurityEvent; -import org.thoughtcrime.securesms.database.DraftDatabase.Draft; -import org.thoughtcrime.securesms.database.DraftDatabase.Drafts; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.IdentityDatabase.VerifiedStatus; -import org.thoughtcrime.securesms.database.RecipientDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase.RegisteredState; +import org.thoughtcrime.securesms.database.DraftTable.Draft; +import org.thoughtcrime.securesms.database.DraftTable.Drafts; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.IdentityTable.VerifiedStatus; +import org.thoughtcrime.securesms.database.RecipientTable; +import org.thoughtcrime.securesms.database.RecipientTable.RegisteredState; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.database.identity.IdentityRecordList; import org.thoughtcrime.securesms.database.model.IdentityRecord; import org.thoughtcrime.securesms.database.model.Mention; @@ -331,7 +331,7 @@ import io.reactivex.rxjava3.core.Flowable; import io.reactivex.rxjava3.disposables.Disposable; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; -import static org.thoughtcrime.securesms.database.GroupDatabase.GroupRecord; +import static org.thoughtcrime.securesms.database.GroupTable.GroupRecord; /** * Fragment for displaying a message thread, as well as @@ -946,7 +946,7 @@ public class ConversationParentFragment extends Fragment if (!isPushGroupConversation()) { inflater.inflate(R.menu.conversation_mms_group_options, menu); - if (distributionType == ThreadDatabase.DistributionTypes.BROADCAST) { + if (distributionType == ThreadTable.DistributionTypes.BROADCAST) { menu.findItem(R.id.menu_distribution_broadcast).setChecked(true); } else { menu.findItem(R.id.menu_distribution_conversation).setChecked(true); @@ -1429,7 +1429,7 @@ public class ConversationParentFragment extends Fragment } private void handleDistributionBroadcastEnabled(MenuItem item) { - distributionType = ThreadDatabase.DistributionTypes.BROADCAST; + distributionType = ThreadTable.DistributionTypes.BROADCAST; draftViewModel.setDistributionType(distributionType); item.setChecked(true); @@ -1437,7 +1437,7 @@ public class ConversationParentFragment extends Fragment new AsyncTask() { @Override protected Void doInBackground(Void... params) { - SignalDatabase.threads().setDistributionType(threadId, ThreadDatabase.DistributionTypes.BROADCAST); + SignalDatabase.threads().setDistributionType(threadId, ThreadTable.DistributionTypes.BROADCAST); return null; } }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); @@ -1445,7 +1445,7 @@ public class ConversationParentFragment extends Fragment } private void handleDistributionConversationEnabled(MenuItem item) { - distributionType = ThreadDatabase.DistributionTypes.CONVERSATION; + distributionType = ThreadTable.DistributionTypes.CONVERSATION; draftViewModel.setDistributionType(distributionType); item.setChecked(true); @@ -1453,7 +1453,7 @@ public class ConversationParentFragment extends Fragment new AsyncTask() { @Override protected Void doInBackground(Void... params) { - SignalDatabase.threads().setDistributionType(threadId, ThreadDatabase.DistributionTypes.CONVERSATION); + SignalDatabase.threads().setDistributionType(threadId, ThreadTable.DistributionTypes.CONVERSATION); return null; } }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); @@ -1732,7 +1732,7 @@ public class ConversationParentFragment extends Fragment throw new AssertionError(); } - if (!leftGroup && !canCancelRequest && selfMembership.isAnnouncementGroup() && selfMembership.getMemberLevel() != GroupDatabase.MemberLevel.ADMINISTRATOR) { + if (!leftGroup && !canCancelRequest && selfMembership.isAnnouncementGroup() && selfMembership.getMemberLevel() != GroupTable.MemberLevel.ADMINISTRATOR) { canSendMessages = false; cannotSendInAnnouncementGroupBanner.get().setVisibility(View.VISIBLE); cannotSendInAnnouncementGroupBanner.get().setMovementMethod(LinkMovementMethod.getInstance()); @@ -1958,7 +1958,7 @@ public class ConversationParentFragment extends Fragment List recipients; if (params[0].isGroup()) { - recipients = SignalDatabase.groups().getGroupMembers(params[0].requireGroupId(), GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); + recipients = SignalDatabase.groups().getGroupMembers(params[0].requireGroupId(), GroupTable.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); } else { recipients = Collections.singletonList(params[0]); } @@ -3186,12 +3186,12 @@ public class ConversationParentFragment extends Fragment new AsyncTask() { @Override protected Void doInBackground(Void... params) { - RecipientDatabase recipientDatabase = SignalDatabase.recipients(); + RecipientTable recipientTable = SignalDatabase.recipients(); - recipientDatabase.setDefaultSubscriptionId(recipient.getId(), sendType.getSimSubscriptionIdOr(-1)); + recipientTable.setDefaultSubscriptionId(recipient.getId(), sendType.getSimSubscriptionIdOr(-1)); if (!recipient.resolve().isPushGroup()) { - recipientDatabase.setForceSmsSelection(recipient.getId(), recipient.get().getRegistered() == RegisteredState.REGISTERED && sendType.usesSmsTransport()); + recipientTable.setForceSmsSelection(recipient.getId(), recipient.get().getRegistered() == RegisteredState.REGISTERED && sendType.usesSmsTransport()); } return null; diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationRepository.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationRepository.java index 02e54819b..80b8efacc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationRepository.java @@ -10,11 +10,11 @@ import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.contacts.sync.ContactDiscovery; import org.thoughtcrime.securesms.database.DatabaseObserver; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.MessageDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.MessageTable; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobs.MultiDeviceViewedUpdateJob; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -58,8 +58,8 @@ class ConversationRepository { @WorkerThread public @NonNull ConversationData getConversationData(long threadId, @NonNull Recipient conversationRecipient, int jumpToPosition) { - ThreadDatabase.ConversationMetadata metadata = SignalDatabase.threads().getConversationMetadata(threadId); - int threadSize = SignalDatabase.mmsSms().getConversationCount(threadId); + ThreadTable.ConversationMetadata metadata = SignalDatabase.threads().getConversationMetadata(threadId); + int threadSize = SignalDatabase.mmsSms().getConversationCount(threadId); long lastSeen = metadata.getLastSeen(); int lastSeenPosition = 0; long lastScrolled = metadata.getLastScrolled(); @@ -84,7 +84,7 @@ class ConversationRepository { boolean isGroup = false; boolean recipientIsKnownOrHasGroupsInCommon = false; if (conversationRecipient.isGroup()) { - Optional group = SignalDatabase.groups().getGroup(conversationRecipient.getId()); + Optional group = SignalDatabase.groups().getGroup(conversationRecipient.getId()); if (group.isPresent()) { List recipients = Recipient.resolvedList(group.get().getMembers()); for (Recipient recipient : recipients) { @@ -115,12 +115,12 @@ class ConversationRepository { void markGiftBadgeRevealed(long messageId) { SignalExecutors.BOUNDED_IO.execute(() -> { - List markedMessageInfo = SignalDatabase.mms().setOutgoingGiftsRevealed(Collections.singletonList(messageId)); + List markedMessageInfo = SignalDatabase.mms().setOutgoingGiftsRevealed(Collections.singletonList(messageId)); if (!markedMessageInfo.isEmpty()) { Log.d(TAG, "Marked gift badge revealed. Sending view sync message."); MultiDeviceViewedUpdateJob.enqueue( markedMessageInfo.stream() - .map(MessageDatabase.MarkedMessageInfo::getSyncMessageId) + .map(MessageTable.MarkedMessageInfo::getSyncMessageId) .collect(Collectors.toList())); } }); @@ -148,11 +148,11 @@ class ConversationRepository { private @NonNull Single getSecurityInfo(@NonNull Recipient recipient) { return Single.fromCallable(() -> { Log.i(TAG, "Resolving registered state..."); - RecipientDatabase.RegisteredState registeredState; + RecipientTable.RegisteredState registeredState; if (recipient.isPushGroup()) { Log.i(TAG, "Push group recipient..."); - registeredState = RecipientDatabase.RegisteredState.REGISTERED; + registeredState = RecipientTable.RegisteredState.REGISTERED; } else { Log.i(TAG, "Checking through resolved recipient"); registeredState = recipient.getRegistered(); @@ -161,7 +161,7 @@ class ConversationRepository { Log.i(TAG, "Resolved registered state: " + registeredState); boolean signalEnabled = Recipient.self().isRegistered(); - if (registeredState == RecipientDatabase.RegisteredState.UNKNOWN) { + if (registeredState == RecipientTable.RegisteredState.UNKNOWN) { try { Log.i(TAG, "Refreshing directory for user: " + recipient.getId().serialize()); registeredState = ContactDiscovery.refresh(context, recipient, false); @@ -176,7 +176,7 @@ class ConversationRepository { Log.i(TAG, "Returning registered state..."); return new ConversationSecurityInfo(recipient.getId(), - registeredState == RecipientDatabase.RegisteredState.REGISTERED && signalEnabled, + registeredState == RecipientTable.RegisteredState.REGISTERED && signalEnabled, Util.isDefaultSmsProvider(context), true, hasUnexportedInsecureMessages); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/MarkReadHelper.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/MarkReadHelper.java index e31621584..50f406013 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/MarkReadHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/MarkReadHelper.java @@ -8,9 +8,9 @@ import androidx.lifecycle.LifecycleOwner; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.MessageDatabase; +import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.notifications.MarkReadReceiver; import org.thoughtcrime.securesms.notifications.v2.ConversationId; @@ -47,8 +47,8 @@ public class MarkReadHelper { debouncer.publish(() -> { EXECUTOR.execute(() -> { - ThreadDatabase threadDatabase = SignalDatabase.threads(); - List infos = threadDatabase.setReadSince(conversationId, false, timestamp); + ThreadTable threadTable = SignalDatabase.threads(); + List infos = threadTable.setReadSince(conversationId, false, timestamp); Log.d(TAG, "Marking " + infos.size() + " messages as read."); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ShowAdminsBottomSheetDialog.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ShowAdminsBottomSheetDialog.java index 1cea1e3c1..a5c9460d7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ShowAdminsBottomSheetDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ShowAdminsBottomSheetDialog.java @@ -15,7 +15,7 @@ import androidx.fragment.app.FragmentManager; import com.google.android.material.bottomsheet.BottomSheetDialogFragment; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.groups.ParcelableGroupId; @@ -94,7 +94,7 @@ public final class ShowAdminsBottomSheetDialog extends BottomSheetDialogFragment private static @NonNull List getAdmins(@NonNull Context context, @NonNull GroupId groupId) { return SignalDatabase.groups() .getGroup(groupId) - .map(GroupDatabase.GroupRecord::getAdmins) + .map(GroupTable.GroupRecord::getAdmins) .orElse(Collections.emptyList()); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/VoiceNoteDraftView.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/VoiceNoteDraftView.kt index ff4d60e13..efea3a923 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/VoiceNoteDraftView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/VoiceNoteDraftView.kt @@ -9,7 +9,7 @@ import androidx.lifecycle.Observer import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.components.AudioView import org.thoughtcrime.securesms.components.voice.VoiceNotePlaybackState -import org.thoughtcrime.securesms.database.DraftDatabase +import org.thoughtcrime.securesms.database.DraftTable import org.thoughtcrime.securesms.mms.AudioSlide class VoiceNoteDraftView @JvmOverloads constructor( @@ -20,7 +20,7 @@ class VoiceNoteDraftView @JvmOverloads constructor( var listener: Listener? = null - var draft: DraftDatabase.Draft? = null + var draft: DraftTable.Draft? = null private set private lateinit var audioView: AudioView @@ -49,7 +49,7 @@ class VoiceNoteDraftView @JvmOverloads constructor( this.draft = null } - fun setDraft(draft: DraftDatabase.Draft) { + fun setDraft(draft: DraftTable.Draft) { audioView.setAudio( AudioSlide.createFromVoiceNoteDraft(context, draft), AudioViewCallbacksAdapter(), diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/GroupAuthorNameColorHelper.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/GroupAuthorNameColorHelper.kt index e17264269..9909a5d77 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/GroupAuthorNameColorHelper.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/GroupAuthorNameColorHelper.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.conversation.colors import androidx.annotation.NonNull -import org.thoughtcrime.securesms.database.GroupDatabase +import org.thoughtcrime.securesms.database.GroupTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.groups.GroupId import org.thoughtcrime.securesms.recipients.Recipient @@ -24,7 +24,7 @@ class GroupAuthorNameColorHelper { fun getColorMap(@NonNull groupId: GroupId): Map { val dbMembers: Set = SignalDatabase .groups - .getGroupMembers(groupId, GroupDatabase.MemberSet.FULL_MEMBERS_INCLUDING_SELF) + .getGroupMembers(groupId, GroupTable.MemberSet.FULL_MEMBERS_INCLUDING_SELF) .toSet() val cachedMembers: Set = fullMemberCache.getOrDefault(groupId, setOf()) val allMembers: Set = cachedMembers + dbMembers diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/ui/ChatColorsOptionsLiveData.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/ui/ChatColorsOptionsLiveData.kt index 8ac443428..8691b6b30 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/ui/ChatColorsOptionsLiveData.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/ui/ChatColorsOptionsLiveData.kt @@ -4,7 +4,7 @@ import androidx.lifecycle.LiveData import org.signal.core.util.concurrent.SignalExecutors import org.thoughtcrime.securesms.conversation.colors.ChatColors import org.thoughtcrime.securesms.conversation.colors.ChatColorsPalette -import org.thoughtcrime.securesms.database.ChatColorsDatabase +import org.thoughtcrime.securesms.database.ChatColorsTable import org.thoughtcrime.securesms.database.DatabaseObserver import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.dependencies.ApplicationDependencies @@ -12,7 +12,7 @@ import org.thoughtcrime.securesms.util.concurrent.SerialMonoLifoExecutor import java.util.concurrent.Executor class ChatColorsOptionsLiveData : LiveData>() { - private val chatColorsDatabase: ChatColorsDatabase = SignalDatabase.chatColors + private val chatColorsTable: ChatColorsTable = SignalDatabase.chatColors private val observer: DatabaseObserver.Observer = DatabaseObserver.Observer { refreshChatColors() } private val executor: Executor = SerialMonoLifoExecutor(SignalExecutors.BOUNDED) @@ -29,7 +29,7 @@ class ChatColorsOptionsLiveData : LiveData>() { executor.execute { val options = mutableListOf().apply { addAll(ChatColorsPalette.Bubbles.all) - addAll(chatColorsDatabase.getSavedChatColors()) + addAll(chatColorsTable.getSavedChatColors()) } postValue(options) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftRepository.kt index 557306983..eab2be6e4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftRepository.kt @@ -8,12 +8,12 @@ import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.schedulers.Schedulers import org.signal.core.util.concurrent.SignalExecutors import org.thoughtcrime.securesms.components.mention.MentionAnnotation -import org.thoughtcrime.securesms.database.DraftDatabase -import org.thoughtcrime.securesms.database.DraftDatabase.Drafts +import org.thoughtcrime.securesms.database.DraftTable +import org.thoughtcrime.securesms.database.DraftTable.Drafts import org.thoughtcrime.securesms.database.MentionUtil import org.thoughtcrime.securesms.database.MmsSmsColumns import org.thoughtcrime.securesms.database.SignalDatabase -import org.thoughtcrime.securesms.database.ThreadDatabase +import org.thoughtcrime.securesms.database.ThreadTable import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.providers.BlobProvider import org.thoughtcrime.securesms.recipients.Recipient @@ -23,12 +23,12 @@ import java.util.concurrent.Executor class DraftRepository( private val context: Context = ApplicationDependencies.getApplication(), - private val threadDatabase: ThreadDatabase = SignalDatabase.threads, - private val draftDatabase: DraftDatabase = SignalDatabase.drafts, + private val threadTable: ThreadTable = SignalDatabase.threads, + private val draftTable: DraftTable = SignalDatabase.drafts, private val saveDraftsExecutor: Executor = SerialMonoLifoExecutor(SignalExecutors.BOUNDED) ) { - fun deleteVoiceNoteDraftData(draft: DraftDatabase.Draft?) { + fun deleteVoiceNoteDraftData(draft: DraftTable.Draft?) { if (draft != null) { SignalExecutors.BOUNDED.execute { BlobProvider.getInstance().delete(context, Uri.parse(draft.value).buildUpon().clearQuery().build()) @@ -40,28 +40,28 @@ class DraftRepository( saveDraftsExecutor.execute { if (drafts.isNotEmpty()) { val actualThreadId = if (threadId == -1L) { - threadDatabase.getOrCreateThreadIdFor(recipient, distributionType) + threadTable.getOrCreateThreadIdFor(recipient, distributionType) } else { threadId } - draftDatabase.replaceDrafts(actualThreadId, drafts) - threadDatabase.updateSnippet(actualThreadId, drafts.getSnippet(context), drafts.uriSnippet, System.currentTimeMillis(), MmsSmsColumns.Types.BASE_DRAFT_TYPE, true) + draftTable.replaceDrafts(actualThreadId, drafts) + threadTable.updateSnippet(actualThreadId, drafts.getSnippet(context), drafts.uriSnippet, System.currentTimeMillis(), MmsSmsColumns.Types.BASE_DRAFT_TYPE, true) } else if (threadId > 0) { - draftDatabase.clearDrafts(threadId) - threadDatabase.update(threadId, unarchive = false, allowDeletion = false) + draftTable.clearDrafts(threadId) + threadTable.update(threadId, unarchive = false, allowDeletion = false) } } } fun loadDrafts(threadId: Long): Single { return Single.fromCallable { - val drafts: Drafts = draftDatabase.getDrafts(threadId) - val mentionsDraft = drafts.getDraftOfType(DraftDatabase.Draft.MENTION) + val drafts: Drafts = draftTable.getDrafts(threadId) + val mentionsDraft = drafts.getDraftOfType(DraftTable.Draft.MENTION) var updatedText: Spannable? = null if (mentionsDraft != null) { - val text = drafts.getDraftOfType(DraftDatabase.Draft.TEXT)!!.value + val text = drafts.getDraftOfType(DraftTable.Draft.TEXT)!!.value val mentions = MentionUtil.bodyRangeListToMentions(context, Base64.decodeOrThrow(mentionsDraft.value)) val updated = MentionUtil.updateBodyAndMentionsWithDisplayNames(context, text, mentions) updatedText = SpannableString(updated.body) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftState.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftState.kt index f9d8f3923..e5add72cf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftState.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.conversation.drafts -import org.thoughtcrime.securesms.database.DraftDatabase -import org.thoughtcrime.securesms.database.DraftDatabase.Drafts +import org.thoughtcrime.securesms.database.DraftTable +import org.thoughtcrime.securesms.database.DraftTable.Drafts import org.thoughtcrime.securesms.recipients.RecipientId /** @@ -13,11 +13,11 @@ data class DraftState( val recipientId: RecipientId = RecipientId.UNKNOWN, val threadId: Long = -1, val distributionType: Int = 0, - val textDraft: DraftDatabase.Draft? = null, - val mentionsDraft: DraftDatabase.Draft? = null, - val quoteDraft: DraftDatabase.Draft? = null, - val locationDraft: DraftDatabase.Draft? = null, - val voiceNoteDraft: DraftDatabase.Draft? = null, + val textDraft: DraftTable.Draft? = null, + val mentionsDraft: DraftTable.Draft? = null, + val quoteDraft: DraftTable.Draft? = null, + val locationDraft: DraftTable.Draft? = null, + val voiceNoteDraft: DraftTable.Draft? = null, ) { fun copyAndClearDrafts(threadId: Long = this.threadId): DraftState { @@ -37,11 +37,11 @@ data class DraftState( fun copyAndSetDrafts(threadId: Long, drafts: Drafts): DraftState { return copy( threadId = threadId, - textDraft = drafts.getDraftOfType(DraftDatabase.Draft.TEXT), - mentionsDraft = drafts.getDraftOfType(DraftDatabase.Draft.MENTION), - quoteDraft = drafts.getDraftOfType(DraftDatabase.Draft.QUOTE), - locationDraft = drafts.getDraftOfType(DraftDatabase.Draft.LOCATION), - voiceNoteDraft = drafts.getDraftOfType(DraftDatabase.Draft.VOICE_NOTE), + textDraft = drafts.getDraftOfType(DraftTable.Draft.TEXT), + mentionsDraft = drafts.getDraftOfType(DraftTable.Draft.MENTION), + quoteDraft = drafts.getDraftOfType(DraftTable.Draft.QUOTE), + locationDraft = drafts.getDraftOfType(DraftTable.Draft.LOCATION), + voiceNoteDraft = drafts.getDraftOfType(DraftTable.Draft.VOICE_NOTE), ) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftViewModel.kt index 919fd765b..a85948ebe 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/drafts/DraftViewModel.kt @@ -6,7 +6,7 @@ import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.core.Single import org.thoughtcrime.securesms.components.location.SignalPlace import org.thoughtcrime.securesms.components.voice.VoiceNoteDraft -import org.thoughtcrime.securesms.database.DraftDatabase.Draft +import org.thoughtcrime.securesms.database.DraftTable.Draft import org.thoughtcrime.securesms.database.MentionUtil import org.thoughtcrime.securesms.database.model.Mention import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/ChangedRecipient.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/ChangedRecipient.java index a16c781f3..f538376aa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/ChangedRecipient.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/ChangedRecipient.java @@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.conversation.ui.error; import androidx.annotation.NonNull; -import org.thoughtcrime.securesms.database.IdentityDatabase; +import org.thoughtcrime.securesms.database.IdentityTable; import org.thoughtcrime.securesms.database.model.IdentityRecord; import org.thoughtcrime.securesms.recipients.Recipient; @@ -29,11 +29,11 @@ final class ChangedRecipient { } boolean isUnverified() { - return record.getVerifiedStatus() == IdentityDatabase.VerifiedStatus.UNVERIFIED; + return record.getVerifiedStatus() == IdentityTable.VerifiedStatus.UNVERIFIED; } boolean isVerified() { - return record.getVerifiedStatus() == IdentityDatabase.VerifiedStatus.VERIFIED; + return record.getVerifiedStatus() == IdentityTable.VerifiedStatus.VERIFIED; } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeRepository.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeRepository.java index 2702d332e..3c93cfb7c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeRepository.java @@ -16,9 +16,9 @@ import org.signal.libsignal.protocol.IdentityKey; import org.signal.libsignal.protocol.SignalProtocolAddress; import org.thoughtcrime.securesms.crypto.ReentrantSessionLock; import org.thoughtcrime.securesms.crypto.storage.SignalIdentityKeyStore; -import org.thoughtcrime.securesms.database.IdentityDatabase; -import org.thoughtcrime.securesms.database.MessageDatabase; -import org.thoughtcrime.securesms.database.MmsSmsDatabase; +import org.thoughtcrime.securesms.database.IdentityTable; +import org.thoughtcrime.securesms.database.MessageTable; +import org.thoughtcrime.securesms.database.MmsSmsTable; import org.thoughtcrime.securesms.database.NoSuchMessageException; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.IdentityRecord; @@ -114,9 +114,9 @@ public final class SafetyNumberChangeRepository { private @Nullable MessageRecord getMessageRecord(Long messageId, String messageType) { try { switch (messageType) { - case MmsSmsDatabase.SMS_TRANSPORT: + case MmsSmsTable.SMS_TRANSPORT: return SignalDatabase.sms().getMessageRecord(messageId); - case MmsSmsDatabase.MMS_TRANSPORT: + case MmsSmsTable.MMS_TRANSPORT: return SignalDatabase.mms().getMessageRecord(messageId); default: throw new AssertionError("no valid message type specified"); @@ -139,7 +139,7 @@ public final class SafetyNumberChangeRepository { Log.d(TAG, "Setting " + identityRecord.getRecipientId() + " as verified"); ApplicationDependencies.getProtocolStore().aci().identities().setVerified(identityRecord.getRecipientId(), identityRecord.getIdentityKey(), - IdentityDatabase.VerifiedStatus.DEFAULT); + IdentityTable.VerifiedStatus.DEFAULT); } else { Log.d(TAG, "Setting " + identityRecord.getRecipientId() + " as approved"); identityStore.setApproval(identityRecord.getRecipientId(), true); @@ -185,8 +185,8 @@ public final class SafetyNumberChangeRepository { @WorkerThread private void processOutgoingMessageRecord(@NonNull List changedRecipients, @NonNull MessageRecord messageRecord) { Log.d(TAG, "processOutgoingMessageRecord"); - MessageDatabase smsDatabase = SignalDatabase.sms(); - MessageDatabase mmsDatabase = SignalDatabase.mms(); + MessageTable smsDatabase = SignalDatabase.sms(); + MessageTable mmsDatabase = SignalDatabase.mms(); Set resendIds = new HashSet<>(); for (ChangedRecipient changedRecipient : changedRecipients) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerRepository.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerRepository.java index 81fdfeb96..ee5990beb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerRepository.java @@ -4,8 +4,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; @@ -15,12 +15,12 @@ import java.util.List; final class MentionsPickerRepository { - private final RecipientDatabase recipientDatabase; - private final GroupDatabase groupDatabase; + private final RecipientTable recipientTable; + private final GroupTable groupDatabase; MentionsPickerRepository() { - recipientDatabase = SignalDatabase.recipients(); - groupDatabase = SignalDatabase.groups(); + recipientTable = SignalDatabase.recipients(); + groupDatabase = SignalDatabase.groups(); } @WorkerThread @@ -29,7 +29,7 @@ final class MentionsPickerRepository { return Collections.emptyList(); } - return groupDatabase.getGroupMemberIds(recipient.requireGroupId(), GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); + return groupDatabase.getGroupMemberIds(recipient.requireGroupId(), GroupTable.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); } @WorkerThread @@ -38,7 +38,7 @@ final class MentionsPickerRepository { return Collections.emptyList(); } - return recipientDatabase.queryRecipientsForMentions(mentionQuery.query, mentionQuery.members); + return recipientTable.queryRecipientsForMentions(mentionQuery.query, mentionQuery.members); } static class MentionQuery { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListDataSource.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListDataSource.java index 1574bfea0..a3de4cfd1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListDataSource.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListDataSource.java @@ -15,8 +15,8 @@ import org.thoughtcrime.securesms.conversationlist.model.Conversation; import org.thoughtcrime.securesms.conversationlist.model.ConversationFilter; import org.thoughtcrime.securesms.conversationlist.model.ConversationReader; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.SmsDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.SmsTable; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.ThreadRecord; import org.thoughtcrime.securesms.database.model.UpdateDescription; @@ -36,11 +36,11 @@ abstract class ConversationListDataSource implements PagedDataSource cursors = new ArrayList<>(2); - Cursor cursor = threadDatabase.getArchivedConversationList(conversationFilter, offset, limit); + Cursor cursor = threadTable.getArchivedConversationList(conversationFilter, offset, limit); cursors.add(cursor); if (offset + limit >= totalCount && totalCount > 0 && conversationFilter != ConversationFilter.OFF) { @@ -164,10 +164,10 @@ abstract class ConversationListDataSource implements PagedDataSource= totalCount && hasConversationFilterFooter(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java index 6baedba1f..722646595 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListFragment.java @@ -114,9 +114,9 @@ import org.thoughtcrime.securesms.contacts.sync.CdsTemporaryErrorBottomSheet; import org.thoughtcrime.securesms.conversation.ConversationFragment; import org.thoughtcrime.securesms.conversationlist.model.Conversation; import org.thoughtcrime.securesms.conversationlist.model.UnreadPayments; -import org.thoughtcrime.securesms.database.MessageDatabase.MarkedMessageInfo; +import org.thoughtcrime.securesms.database.MessageTable.MarkedMessageInfo; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.database.model.ThreadRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.events.ReminderUpdateEvent; @@ -574,7 +574,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode hideKeyboard(); getNavigator().goToConversation(contact.getId(), threadId, - ThreadDatabase.DistributionTypes.DEFAULT, + ThreadTable.DistributionTypes.DEFAULT, -1); }); } @@ -588,7 +588,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode hideKeyboard(); getNavigator().goToConversation(message.getConversationRecipient().getId(), message.getThreadId(), - ThreadDatabase.DistributionTypes.DEFAULT, + ThreadTable.DistributionTypes.DEFAULT, startingPosition); }); } @@ -1081,7 +1081,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode } SimpleTask.run(SignalExecutors.BOUNDED, () -> { - ThreadDatabase db = SignalDatabase.threads(); + ThreadTable db = SignalDatabase.threads(); db.pinConversations(toPin); ConversationUtil.refreshRecipientShortcuts(); @@ -1094,7 +1094,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode private void handleUnpin(@NonNull Collection ids) { SimpleTask.run(SignalExecutors.BOUNDED, () -> { - ThreadDatabase db = SignalDatabase.threads(); + ThreadTable db = SignalDatabase.threads(); db.unpinConversations(ids); ConversationUtil.refreshRecipientShortcuts(); @@ -1431,7 +1431,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode Snackbar.LENGTH_LONG, false) { - private final ThreadDatabase threadDatabase = SignalDatabase.threads(); + private final ThreadTable threadTable = SignalDatabase.threads(); private List pinnedThreadIds; @@ -1439,11 +1439,11 @@ public class ConversationListFragment extends MainFragment implements ActionMode protected void executeAction(@Nullable Long parameter) { Context context = requireActivity(); - pinnedThreadIds = threadDatabase.getPinnedThreadIds(); - threadDatabase.archiveConversation(threadId); + pinnedThreadIds = threadTable.getPinnedThreadIds(); + threadTable.archiveConversation(threadId); if (unreadCount > 0) { - List messageIds = threadDatabase.setRead(threadId, false); + List messageIds = threadTable.setRead(threadId, false); ApplicationDependencies.getMessageNotifier().updateNotification(context); MarkReadReceiver.process(context, messageIds); } @@ -1455,11 +1455,11 @@ public class ConversationListFragment extends MainFragment implements ActionMode protected void reverseAction(@Nullable Long parameter) { Context context = requireActivity(); - threadDatabase.unarchiveConversation(threadId); - threadDatabase.restorePins(pinnedThreadIds); + threadTable.unarchiveConversation(threadId); + threadTable.restorePins(pinnedThreadIds); if (unreadCount > 0) { - threadDatabase.incrementUnread(threadId, unreadCount, unreadSelfMentionsCount); + threadTable.incrementUnread(threadId, unreadCount, unreadSelfMentionsCount); ApplicationDependencies.getMessageNotifier().updateNotification(context); } @@ -1698,7 +1698,7 @@ public class ConversationListFragment extends MainFragment implements ActionMode @Override public void onNavigateToMessage(long threadId, @NonNull RecipientId threadRecipientId, @NonNull RecipientId senderId, long messageSentAt, long messagePositionInThread) { - MainNavigator.get(requireActivity()).goToConversation(threadRecipientId, threadId, ThreadDatabase.DistributionTypes.DEFAULT, (int) messagePositionInThread); + MainNavigator.get(requireActivity()).goToConversation(threadRecipientId, threadId, ThreadTable.DistributionTypes.DEFAULT, (int) messagePositionInThread); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java index 61fb82b94..611077610 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java @@ -59,8 +59,8 @@ import org.thoughtcrime.securesms.components.TypingIndicatorView; import org.thoughtcrime.securesms.components.emoji.EmojiStrings; import org.thoughtcrime.securesms.conversationlist.model.ConversationSet; import org.thoughtcrime.securesms.database.MmsSmsColumns; -import org.thoughtcrime.securesms.database.SmsDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.SmsTable; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.database.model.LiveUpdateMessage; import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.ThreadRecord; @@ -509,51 +509,51 @@ public final class ConversationListItem extends ConstraintLayout implements Bind if (!thread.isMessageRequestAccepted()) { return emphasisAdded(context, context.getString(R.string.ThreadRecord_message_request), defaultTint); - } else if (SmsDatabase.Types.isGroupUpdate(thread.getType())) { + } else if (SmsTable.Types.isGroupUpdate(thread.getType())) { if (thread.getRecipient().isPushV2Group()) { return emphasisAdded(context, MessageRecord.getGv2ChangeDescription(context, thread.getBody(), null), defaultTint); } else { return emphasisAdded(context, context.getString(R.string.ThreadRecord_group_updated), R.drawable.ic_update_group_16, defaultTint); } - } else if (SmsDatabase.Types.isGroupQuit(thread.getType())) { + } else if (SmsTable.Types.isGroupQuit(thread.getType())) { return emphasisAdded(context, context.getString(R.string.ThreadRecord_left_the_group), R.drawable.ic_update_group_leave_16, defaultTint); - } else if (SmsDatabase.Types.isKeyExchangeType(thread.getType())) { + } else if (SmsTable.Types.isKeyExchangeType(thread.getType())) { return emphasisAdded(context, context.getString(R.string.ConversationListItem_key_exchange_message), defaultTint); - } else if (SmsDatabase.Types.isChatSessionRefresh(thread.getType())) { + } else if (SmsTable.Types.isChatSessionRefresh(thread.getType())) { return emphasisAdded(context, context.getString(R.string.ThreadRecord_chat_session_refreshed), R.drawable.ic_refresh_16, defaultTint); - } else if (SmsDatabase.Types.isNoRemoteSessionType(thread.getType())) { + } else if (SmsTable.Types.isNoRemoteSessionType(thread.getType())) { return emphasisAdded(context, context.getString(R.string.MessageDisplayHelper_message_encrypted_for_non_existing_session), defaultTint); - } else if (SmsDatabase.Types.isEndSessionType(thread.getType())) { + } else if (SmsTable.Types.isEndSessionType(thread.getType())) { return emphasisAdded(context, context.getString(R.string.ThreadRecord_secure_session_reset), defaultTint); } else if (MmsSmsColumns.Types.isLegacyType(thread.getType())) { return emphasisAdded(context, context.getString(R.string.MessageRecord_message_encrypted_with_a_legacy_protocol_version_that_is_no_longer_supported), defaultTint); } else if (MmsSmsColumns.Types.isDraftMessageType(thread.getType())) { String draftText = context.getString(R.string.ThreadRecord_draft); return emphasisAdded(context, draftText + " " + thread.getBody(), defaultTint); - } else if (SmsDatabase.Types.isOutgoingAudioCall(thread.getType())) { + } else if (SmsTable.Types.isOutgoingAudioCall(thread.getType())) { return emphasisAdded(context, context.getString(R.string.ThreadRecord_called), R.drawable.ic_update_audio_call_outgoing_16, defaultTint); - } else if (SmsDatabase.Types.isOutgoingVideoCall(thread.getType())) { + } else if (SmsTable.Types.isOutgoingVideoCall(thread.getType())) { return emphasisAdded(context, context.getString(R.string.ThreadRecord_called), R.drawable.ic_update_video_call_outgoing_16, defaultTint); - } else if (SmsDatabase.Types.isIncomingAudioCall(thread.getType())) { + } else if (SmsTable.Types.isIncomingAudioCall(thread.getType())) { return emphasisAdded(context, context.getString(R.string.ThreadRecord_called_you), R.drawable.ic_update_audio_call_incoming_16, defaultTint); - } else if (SmsDatabase.Types.isIncomingVideoCall(thread.getType())) { + } else if (SmsTable.Types.isIncomingVideoCall(thread.getType())) { return emphasisAdded(context, context.getString(R.string.ThreadRecord_called_you), R.drawable.ic_update_video_call_incoming_16, defaultTint); - } else if (SmsDatabase.Types.isMissedAudioCall(thread.getType())) { + } else if (SmsTable.Types.isMissedAudioCall(thread.getType())) { return emphasisAdded(context, context.getString(R.string.ThreadRecord_missed_audio_call), R.drawable.ic_update_audio_call_missed_16, defaultTint); - } else if (SmsDatabase.Types.isMissedVideoCall(thread.getType())) { + } else if (SmsTable.Types.isMissedVideoCall(thread.getType())) { return emphasisAdded(context, context.getString(R.string.ThreadRecord_missed_video_call), R.drawable.ic_update_video_call_missed_16, defaultTint); } else if (MmsSmsColumns.Types.isGroupCall(thread.getType())) { return emphasisAdded(context, MessageRecord.getGroupCallUpdateDescription(context, thread.getBody(), false), defaultTint); - } else if (SmsDatabase.Types.isJoinedType(thread.getType())) { + } else if (SmsTable.Types.isJoinedType(thread.getType())) { return emphasisAdded(recipientToStringAsync(thread.getRecipient().getId(), r -> new SpannableString(context.getString(R.string.ThreadRecord_s_is_on_signal, r.getDisplayName(context))))); - } else if (SmsDatabase.Types.isExpirationTimerUpdate(thread.getType())) { + } else if (SmsTable.Types.isExpirationTimerUpdate(thread.getType())) { int seconds = (int) (thread.getExpiresIn() / 1000); if (seconds <= 0) { return emphasisAdded(context, context.getString(R.string.ThreadRecord_disappearing_messages_disabled), R.drawable.ic_update_timer_disabled_16, defaultTint); } String time = ExpirationUtil.getExpirationDisplayValue(context, seconds); return emphasisAdded(context, context.getString(R.string.ThreadRecord_disappearing_message_time_updated_to_s, time), R.drawable.ic_update_timer_16, defaultTint); - } else if (SmsDatabase.Types.isIdentityUpdate(thread.getType())) { + } else if (SmsTable.Types.isIdentityUpdate(thread.getType())) { return emphasisAdded(recipientToStringAsync(thread.getRecipient().getId(), r -> { if (r.isGroup()) { return new SpannableString(context.getString(R.string.ThreadRecord_safety_number_changed)); @@ -561,20 +561,20 @@ public final class ConversationListItem extends ConstraintLayout implements Bind return new SpannableString(context.getString(R.string.ThreadRecord_your_safety_number_with_s_has_changed, r.getDisplayName(context))); } })); - } else if (SmsDatabase.Types.isIdentityVerified(thread.getType())) { + } else if (SmsTable.Types.isIdentityVerified(thread.getType())) { return emphasisAdded(context, context.getString(R.string.ThreadRecord_you_marked_verified), defaultTint); - } else if (SmsDatabase.Types.isIdentityDefault(thread.getType())) { + } else if (SmsTable.Types.isIdentityDefault(thread.getType())) { return emphasisAdded(context, context.getString(R.string.ThreadRecord_you_marked_unverified), defaultTint); - } else if (SmsDatabase.Types.isUnsupportedMessageType(thread.getType())) { + } else if (SmsTable.Types.isUnsupportedMessageType(thread.getType())) { return emphasisAdded(context, context.getString(R.string.ThreadRecord_message_could_not_be_processed), defaultTint); - } else if (SmsDatabase.Types.isProfileChange(thread.getType())) { + } else if (SmsTable.Types.isProfileChange(thread.getType())) { return emphasisAdded(context, "", defaultTint); - } else if (SmsDatabase.Types.isChangeNumber(thread.getType()) || SmsDatabase.Types.isBoostRequest(thread.getType())) { + } else if (SmsTable.Types.isChangeNumber(thread.getType()) || SmsTable.Types.isBoostRequest(thread.getType())) { return emphasisAdded(context, "", defaultTint); } else if (MmsSmsColumns.Types.isBadDecryptType(thread.getType())) { return emphasisAdded(context, context.getString(R.string.ThreadRecord_delivery_issue), defaultTint); } else { - ThreadDatabase.Extra extra = thread.getExtra(); + ThreadTable.Extra extra = thread.getExtra(); if (extra != null && extra.isViewOnce()) { return emphasisAdded(context, getViewOnceDescription(context, thread.getContentType()), defaultTint); } else if (extra != null && extra.isRemoteDelete()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/model/ConversationReader.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/model/ConversationReader.java index 8288dc389..d973a2be0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/model/ConversationReader.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/model/ConversationReader.java @@ -4,13 +4,13 @@ import android.database.Cursor; import androidx.annotation.NonNull; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.database.model.ThreadRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.recipients.Recipient; import org.signal.core.util.CursorUtil; -public class ConversationReader extends ThreadDatabase.StaticReader { +public class ConversationReader extends ThreadTable.StaticReader { public static final String[] HEADER_COLUMN = { "header" }; public static final String[] ARCHIVED_COLUMNS = { "header", "count" }; diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/model/UnreadPaymentsLiveData.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/model/UnreadPaymentsLiveData.java index e73974d30..78f8c52e1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/model/UnreadPaymentsLiveData.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/model/UnreadPaymentsLiveData.java @@ -6,7 +6,7 @@ import androidx.lifecycle.LiveData; import org.signal.core.util.concurrent.SignalExecutors; import org.thoughtcrime.securesms.database.DatabaseObserver; -import org.thoughtcrime.securesms.database.PaymentDatabase; +import org.thoughtcrime.securesms.database.PaymentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.recipients.Recipient; @@ -23,7 +23,7 @@ import java.util.concurrent.Executor; */ public final class UnreadPaymentsLiveData extends LiveData> { - private final PaymentDatabase paymentDatabase; + private final PaymentTable paymentDatabase; private final DatabaseObserver.Observer observer; private final Executor executor; @@ -50,14 +50,14 @@ public final class UnreadPaymentsLiveData extends LiveData unseenPayments = paymentDatabase.getUnseenPayments(); - int unseenCount = unseenPayments.size(); + List unseenPayments = paymentDatabase.getUnseenPayments(); + int unseenCount = unseenPayments.size(); switch (unseenCount) { case 0: return null; case 1: - PaymentDatabase.PaymentTransaction transaction = unseenPayments.get(0); + PaymentTable.PaymentTransaction transaction = unseenPayments.get(0); Recipient recipient = transaction.getPayee().hasRecipientId() ? Recipient.resolved(transaction.getPayee().requireRecipientId()) : null; diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java index a0a3a4457..e05fee47f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java @@ -17,8 +17,6 @@ import org.signal.libsignal.protocol.ecc.Curve; import org.signal.libsignal.protocol.ecc.ECPublicKey; import org.signal.libsignal.zkgroup.profiles.ProfileKey; import org.thoughtcrime.securesms.BuildConfig; -import org.thoughtcrime.securesms.database.RecipientDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase.UnidentifiedAccessMode; import org.thoughtcrime.securesms.keyvalue.CertificateType; import org.thoughtcrime.securesms.keyvalue.PhoneNumberPrivacyValues; import org.thoughtcrime.securesms.keyvalue.SignalStore; diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore.java index 672aca782..b87aedda2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore.java @@ -12,8 +12,8 @@ import org.signal.libsignal.protocol.IdentityKey; import org.signal.libsignal.protocol.SignalProtocolAddress; import org.signal.libsignal.protocol.state.IdentityKeyStore; import org.thoughtcrime.securesms.crypto.storage.SignalIdentityKeyStore.SaveResult; -import org.thoughtcrime.securesms.database.IdentityDatabase; -import org.thoughtcrime.securesms.database.IdentityDatabase.VerifiedStatus; +import org.thoughtcrime.securesms.database.IdentityTable; +import org.thoughtcrime.securesms.database.IdentityTable.VerifiedStatus; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.identity.IdentityRecordList; import org.thoughtcrime.securesms.database.model.IdentityRecord; @@ -53,7 +53,7 @@ public class SignalBaseIdentityKeyStore { this(context, SignalDatabase.identities()); } - SignalBaseIdentityKeyStore(@NonNull Context context, @NonNull IdentityDatabase identityDatabase) { + SignalBaseIdentityKeyStore(@NonNull Context context, @NonNull IdentityTable identityDatabase) { this.context = context; this.cache = new Cache(identityDatabase); } @@ -263,9 +263,9 @@ public class SignalBaseIdentityKeyStore { private static final class Cache { private final Map cache; - private final IdentityDatabase identityDatabase; + private final IdentityTable identityDatabase; - Cache(@NonNull IdentityDatabase identityDatabase) { + Cache(@NonNull IdentityTable identityDatabase) { this.identityDatabase = identityDatabase; this.cache = new LRUCache<>(200); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalIdentityKeyStore.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalIdentityKeyStore.java index 0ca25d2c1..bcc87702d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalIdentityKeyStore.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalIdentityKeyStore.java @@ -6,7 +6,7 @@ import org.signal.libsignal.protocol.IdentityKey; import org.signal.libsignal.protocol.IdentityKeyPair; import org.signal.libsignal.protocol.SignalProtocolAddress; import org.signal.libsignal.protocol.state.IdentityKeyStore; -import org.thoughtcrime.securesms.database.IdentityDatabase.VerifiedStatus; +import org.thoughtcrime.securesms.database.IdentityTable.VerifiedStatus; import org.thoughtcrime.securesms.database.identity.IdentityRecordList; import org.thoughtcrime.securesms.database.model.IdentityRecord; import org.thoughtcrime.securesms.recipients.Recipient; diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalSenderKeyStore.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalSenderKeyStore.java index 10beaf9cb..098d96c1e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalSenderKeyStore.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalSenderKeyStore.java @@ -6,6 +6,7 @@ import androidx.annotation.NonNull; import org.signal.libsignal.protocol.SignalProtocolAddress; import org.signal.libsignal.protocol.groups.state.SenderKeyRecord; +import org.thoughtcrime.securesms.database.SenderKeyTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.whispersystems.signalservice.api.SignalServiceSenderKeyStore; import org.whispersystems.signalservice.api.push.DistributionId; @@ -18,7 +19,7 @@ import javax.annotation.Nullable; /** * An implementation of the storage interface used by the protocol layer to store sender keys. For - * more details around sender keys, see {@link org.thoughtcrime.securesms.database.SenderKeyDatabase}. + * more details around sender keys, see {@link SenderKeyTable}. */ public final class SignalSenderKeyStore implements SignalServiceSenderKeyStore { diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/TextSecureSessionStore.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/TextSecureSessionStore.java index 9ecc91073..2983dfa13 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/TextSecureSessionStore.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/TextSecureSessionStore.java @@ -8,7 +8,7 @@ import org.signal.libsignal.protocol.NoSessionException; import org.signal.libsignal.protocol.SignalProtocolAddress; import org.signal.libsignal.protocol.message.CiphertextMessage; import org.signal.libsignal.protocol.state.SessionRecord; -import org.thoughtcrime.securesms.database.SessionDatabase; +import org.thoughtcrime.securesms.database.SessionTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; @@ -145,9 +145,9 @@ public class TextSecureSessionStore implements SignalServiceSessionStore { public void archiveSiblingSessions(@NonNull SignalProtocolAddress address) { synchronized (LOCK) { - List sessions = SignalDatabase.sessions().getAllFor(accountId, address.getName()); + List sessions = SignalDatabase.sessions().getAllFor(accountId, address.getName()); - for (SessionDatabase.SessionRow row : sessions) { + for (SessionTable.SessionRow row : sessions) { if (row.getDeviceId() != address.getDeviceId()) { row.getRecord().archiveCurrentState(); storeSession(new SignalProtocolAddress(row.getAddress(), row.getDeviceId()), row.getRecord()); @@ -158,9 +158,9 @@ public class TextSecureSessionStore implements SignalServiceSessionStore { public void archiveAllSessions() { synchronized (LOCK) { - List sessions = SignalDatabase.sessions().getAll(accountId); + List sessions = SignalDatabase.sessions().getAll(accountId); - for (SessionDatabase.SessionRow row : sessions) { + for (SessionTable.SessionRow row : sessions) { row.getRecord().archiveCurrentState(); storeSession(new SignalProtocolAddress(row.getAddress(), row.getDeviceId()), row.getRecord()); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.java similarity index 99% rename from app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java rename to app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.java index dbd19f4f4..3fbcf5b81 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.java @@ -86,9 +86,9 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; -public class AttachmentDatabase extends Database { +public class AttachmentTable extends DatabaseTable { - private static final String TAG = Log.tag(AttachmentDatabase.class); + private static final String TAG = Log.tag(AttachmentTable.class); public static final String TABLE_NAME = "part"; public static final String ROW_ID = "_id"; @@ -198,7 +198,7 @@ public class AttachmentDatabase extends Database { private final AttachmentSecret attachmentSecret; - public AttachmentDatabase(Context context, SignalDatabase databaseHelper, AttachmentSecret attachmentSecret) { + public AttachmentTable(Context context, SignalDatabase databaseHelper, AttachmentSecret attachmentSecret) { super(context, databaseHelper); this.attachmentSecret = attachmentSecret; } @@ -476,7 +476,7 @@ public class AttachmentDatabase extends Database { public void trimAllAbandonedAttachments() { SQLiteDatabase db = databaseHelper.getSignalWritableDatabase(); - String selectAllMmsIds = "SELECT " + MmsDatabase.ID + " FROM " + MmsDatabase.TABLE_NAME; + String selectAllMmsIds = "SELECT " + MmsTable.ID + " FROM " + MmsTable.TABLE_NAME; String where = MMS_ID + " != " + PREUPLOAD_MESSAGE_ID + " AND " + MMS_ID + " NOT IN (" + selectAllMmsIds + ")"; int deletes = db.delete(TABLE_NAME, where, null); @@ -1024,11 +1024,11 @@ public class AttachmentDatabase extends Database { String query = "SELECT DISTINCT " + STICKER_PACK_ID + ", " + STICKER_PACK_KEY + " FROM " + TABLE_NAME + " WHERE " + - STICKER_PACK_ID + " NOT NULL AND " + - STICKER_PACK_KEY + " NOT NULL AND " + - STICKER_PACK_ID + " NOT IN (" + - "SELECT DISTINCT " + StickerDatabase.PACK_ID + " FROM " + StickerDatabase.TABLE_NAME + - ")"; + STICKER_PACK_ID + " NOT NULL AND " + + STICKER_PACK_KEY + " NOT NULL AND " + + STICKER_PACK_ID + " NOT IN (" + + "SELECT DISTINCT " + StickerTable.PACK_ID + " FROM " + StickerTable.TABLE_NAME + + ")"; return databaseHelper.getSignalReadableDatabase().rawQuery(query, null); } @@ -1232,7 +1232,7 @@ public class AttachmentDatabase extends Database { public List getAttachments(@NonNull Cursor cursor) { try { - if (cursor.getColumnIndex(AttachmentDatabase.ATTACHMENT_JSON_ALIAS) != -1) { + if (cursor.getColumnIndex(AttachmentTable.ATTACHMENT_JSON_ALIAS) != -1) { if (cursor.isNull(cursor.getColumnIndexOrThrow(ATTACHMENT_JSON_ALIAS))) { return new LinkedList<>(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/CdsDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/CdsTable.kt similarity index 95% rename from app/src/main/java/org/thoughtcrime/securesms/database/CdsDatabase.kt rename to app/src/main/java/org/thoughtcrime/securesms/database/CdsTable.kt index e5ec71bae..f9fb2ce07 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/CdsDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/CdsTable.kt @@ -17,9 +17,9 @@ import org.signal.core.util.withinTransaction * an accurate history of numbers we've queried so that we're only "charged" for * querying new numbers. */ -class CdsDatabase(context: Context, databaseHelper: SignalDatabase) : Database(context, databaseHelper) { +class CdsTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTable(context, databaseHelper) { companion object { - private val TAG = Log.tag(CdsDatabase::class.java) + private val TAG = Log.tag(CdsTable::class.java) const val TABLE_NAME = "cds" diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ChatColorsDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/ChatColorsTable.kt similarity index 97% rename from app/src/main/java/org/thoughtcrime/securesms/database/ChatColorsDatabase.kt rename to app/src/main/java/org/thoughtcrime/securesms/database/ChatColorsTable.kt index 91a06f52f..35ce273fa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ChatColorsDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ChatColorsTable.kt @@ -10,7 +10,7 @@ import org.thoughtcrime.securesms.database.model.databaseprotos.ChatColor import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.keyvalue.SignalStore -class ChatColorsDatabase(context: Context, databaseHelper: SignalDatabase) : Database(context, databaseHelper) { +class ChatColorsTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTable(context, databaseHelper) { companion object { private const val TABLE_NAME = "chat_colors" diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/DatabaseObserver.java b/app/src/main/java/org/thoughtcrime/securesms/database/DatabaseObserver.java index 299e6d483..3ccf809ef 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/DatabaseObserver.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/DatabaseObserver.java @@ -23,7 +23,7 @@ import java.util.concurrent.Executor; /** * Allows listening to database changes to varying degrees of specificity. * - * A replacement for the observer system in {@link Database}. We should move to this over time. + * A replacement for the observer system in {@link DatabaseTable}. We should move to this over time. */ public class DatabaseObserver { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/Database.java b/app/src/main/java/org/thoughtcrime/securesms/database/DatabaseTable.java similarity index 96% rename from app/src/main/java/org/thoughtcrime/securesms/database/Database.java rename to app/src/main/java/org/thoughtcrime/securesms/database/DatabaseTable.java index 834d6c877..4ccadea8e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/Database.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/DatabaseTable.java @@ -21,10 +21,9 @@ import android.content.Context; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import java.util.HashSet; -import java.util.List; import java.util.Set; -public abstract class Database { +public abstract class DatabaseTable { protected static final String ID_WHERE = "_id = ?"; protected static final String[] COUNT = new String[] { "COUNT(*)" }; @@ -35,7 +34,7 @@ public abstract class Database { static final Set recipientIdDatabaseTables = new HashSet<>(); static final Set threadIdDatabaseTables = new HashSet<>(); - public Database(Context context, SignalDatabase databaseHelper) { + public DatabaseTable(Context context, SignalDatabase databaseHelper) { this.context = context; this.databaseHelper = databaseHelper; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/DistributionListDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/DistributionListTables.kt similarity index 96% rename from app/src/main/java/org/thoughtcrime/securesms/database/DistributionListDatabase.kt rename to app/src/main/java/org/thoughtcrime/securesms/database/DistributionListTables.kt index 461456f28..ed2b87bd5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/DistributionListDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/DistributionListTables.kt @@ -32,10 +32,10 @@ import java.util.UUID /** * Stores distribution lists, which represent different sets of people you may want to share a story with. */ -class DistributionListDatabase constructor(context: Context?, databaseHelper: SignalDatabase?) : Database(context, databaseHelper), RecipientIdDatabaseReference { +class DistributionListTables constructor(context: Context?, databaseHelper: SignalDatabase?) : DatabaseTable(context, databaseHelper), RecipientIdDatabaseReference { companion object { - private val TAG = Log.tag(DistributionListDatabase::class.java) + private val TAG = Log.tag(DistributionListTables::class.java) @JvmField val CREATE_TABLE: Array = arrayOf(ListTable.CREATE_TABLE, MembershipTable.CREATE_TABLE) @@ -50,12 +50,12 @@ class DistributionListDatabase constructor(context: Context?, databaseHelper: Si fun insertInitialDistributionListAtCreationTime(db: net.zetetic.database.sqlcipher.SQLiteDatabase) { val recipientId = db.insert( - RecipientDatabase.TABLE_NAME, null, + RecipientTable.TABLE_NAME, null, contentValuesOf( - RecipientDatabase.GROUP_TYPE to RecipientDatabase.GroupType.DISTRIBUTION_LIST.id, - RecipientDatabase.DISTRIBUTION_LIST_ID to DistributionListId.MY_STORY_ID, - RecipientDatabase.STORAGE_SERVICE_ID to Base64.encodeBytes(StorageSyncHelper.generateKey()), - RecipientDatabase.PROFILE_SHARING to 1 + RecipientTable.GROUP_TYPE to RecipientTable.GroupType.DISTRIBUTION_LIST.id, + RecipientTable.DISTRIBUTION_LIST_ID to DistributionListId.MY_STORY_ID, + RecipientTable.STORAGE_SERVICE_ID to Base64.encodeBytes(StorageSyncHelper.generateKey()), + RecipientTable.PROFILE_SHARING to 1 ) ) db.insert( @@ -88,7 +88,7 @@ class DistributionListDatabase constructor(context: Context?, databaseHelper: Si $ID INTEGER PRIMARY KEY AUTOINCREMENT, $NAME TEXT UNIQUE NOT NULL, $DISTRIBUTION_ID TEXT UNIQUE NOT NULL, - $RECIPIENT_ID INTEGER UNIQUE REFERENCES ${RecipientDatabase.TABLE_NAME} (${RecipientDatabase.ID}), + $RECIPIENT_ID INTEGER UNIQUE REFERENCES ${RecipientTable.TABLE_NAME} (${RecipientTable.ID}), $ALLOWS_REPLIES INTEGER DEFAULT 1, $DELETION_TIMESTAMP INTEGER DEFAULT 0, $IS_UNKNOWN INTEGER DEFAULT 0, @@ -116,7 +116,7 @@ class DistributionListDatabase constructor(context: Context?, databaseHelper: Si CREATE TABLE $TABLE_NAME ( $ID INTEGER PRIMARY KEY AUTOINCREMENT, $LIST_ID INTEGER NOT NULL REFERENCES ${ListTable.TABLE_NAME} (${ListTable.ID}) ON DELETE CASCADE, - $RECIPIENT_ID INTEGER NOT NULL REFERENCES ${RecipientDatabase.TABLE_NAME} (${RecipientDatabase.ID}), + $RECIPIENT_ID INTEGER NOT NULL REFERENCES ${RecipientTable.TABLE_NAME} (${RecipientTable.ID}), $PRIVACY_MODE INTEGER DEFAULT 0 ) """ @@ -408,14 +408,14 @@ class DistributionListDatabase constructor(context: Context?, databaseHelper: Si DistributionListPrivacyMode.ALL -> { SignalDatabase.recipients .getSignalContacts(false)!! - .readToList { it.requireObject(RecipientDatabase.ID, RecipientId.SERIALIZER) } + .readToList { it.requireObject(RecipientTable.ID, RecipientId.SERIALIZER) } } DistributionListPrivacyMode.ALL_EXCEPT -> { SignalDatabase.recipients .getSignalContacts(false)!! .readToList( predicate = { !rawMembers.contains(it) }, - mapper = { it.requireObject(RecipientDatabase.ID, RecipientId.SERIALIZER) } + mapper = { it.requireObject(RecipientTable.ID, RecipientId.SERIALIZER) } ) } DistributionListPrivacyMode.ONLY_WITH -> rawMembers diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/DonationReceiptDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/DonationReceiptTable.kt similarity index 96% rename from app/src/main/java/org/thoughtcrime/securesms/database/DonationReceiptDatabase.kt rename to app/src/main/java/org/thoughtcrime/securesms/database/DonationReceiptTable.kt index 3d2110afb..5350896d7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/DonationReceiptDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/DonationReceiptTable.kt @@ -10,7 +10,7 @@ import org.thoughtcrime.securesms.database.model.DonationReceiptRecord import java.math.BigDecimal import java.util.Currency -class DonationReceiptDatabase(context: Context, databaseHelper: SignalDatabase) : Database(context, databaseHelper) { +class DonationReceiptTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTable(context, databaseHelper) { companion object { private const val TABLE_NAME = "donation_receipt" diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/DraftDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/DraftTable.java similarity index 96% rename from app/src/main/java/org/thoughtcrime/securesms/database/DraftDatabase.java rename to app/src/main/java/org/thoughtcrime/securesms/database/DraftTable.java index 84e2f373e..2d35364c8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/DraftDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/DraftTable.java @@ -17,9 +17,9 @@ import java.util.LinkedList; import java.util.List; import java.util.Set; -public class DraftDatabase extends Database implements ThreadIdDatabaseReference { +public class DraftTable extends DatabaseTable implements ThreadIdDatabaseReference { - private static final String TAG = Log.tag(DraftDatabase.class); + private static final String TAG = Log.tag(DraftTable.class); static final String TABLE_NAME = "drafts"; public static final String ID = "_id"; @@ -34,7 +34,7 @@ public class DraftDatabase extends Database implements ThreadIdDatabaseReference "CREATE INDEX IF NOT EXISTS draft_thread_index ON " + TABLE_NAME + " (" + THREAD_ID + ");", }; - public DraftDatabase(Context context, SignalDatabase databaseHelper) { + public DraftTable(Context context, SignalDatabase databaseHelper) { super(context, databaseHelper); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/EmojiSearchDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/EmojiSearchTable.kt similarity index 96% rename from app/src/main/java/org/thoughtcrime/securesms/database/EmojiSearchDatabase.kt rename to app/src/main/java/org/thoughtcrime/securesms/database/EmojiSearchTable.kt index 2a358ed73..fa5f9073f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/EmojiSearchDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/EmojiSearchTable.kt @@ -13,7 +13,7 @@ import kotlin.math.roundToInt /** * Contains all info necessary for full-text search of emoji tags. */ -class EmojiSearchDatabase(context: Context, databaseHelper: SignalDatabase) : Database(context, databaseHelper) { +class EmojiSearchTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTable(context, databaseHelper) { companion object { const val TABLE_NAME = "emoji_search" diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/GroupCallRingDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/GroupCallRingTable.kt similarity index 95% rename from app/src/main/java/org/thoughtcrime/securesms/database/GroupCallRingDatabase.kt rename to app/src/main/java/org/thoughtcrime/securesms/database/GroupCallRingTable.kt index ffdff0358..58747a7fe 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/GroupCallRingDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/GroupCallRingTable.kt @@ -10,7 +10,7 @@ import java.util.concurrent.TimeUnit /** * Track state of Group Call ring cancellations. */ -class GroupCallRingDatabase(context: Context, databaseHelper: SignalDatabase) : Database(context, databaseHelper) { +class GroupCallRingTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTable(context, databaseHelper) { companion object { private val VALID_RING_DURATION = TimeUnit.MINUTES.toMillis(30) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/GroupReceiptDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/GroupReceiptTable.java similarity index 96% rename from app/src/main/java/org/thoughtcrime/securesms/database/GroupReceiptDatabase.java rename to app/src/main/java/org/thoughtcrime/securesms/database/GroupReceiptTable.java index 9f07953a9..677416ea8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/GroupReceiptDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/GroupReceiptTable.java @@ -18,7 +18,7 @@ import java.util.List; import javax.annotation.Nullable; -public class GroupReceiptDatabase extends Database implements RecipientIdDatabaseReference { +public class GroupReceiptTable extends DatabaseTable implements RecipientIdDatabaseReference { public static final String TABLE_NAME = "group_receipts"; @@ -43,7 +43,7 @@ public class GroupReceiptDatabase extends Database implements RecipientIdDatabas "CREATE INDEX IF NOT EXISTS group_receipt_mms_id_index ON " + TABLE_NAME + " (" + MMS_ID + ");", }; - public GroupReceiptDatabase(Context context, SignalDatabase databaseHelper) { + public GroupReceiptTable(Context context, SignalDatabase databaseHelper) { super(context, databaseHelper); } @@ -156,7 +156,7 @@ public class GroupReceiptDatabase extends Database implements RecipientIdDatabas void deleteAbandonedRows() { SQLiteDatabase db = databaseHelper.getSignalWritableDatabase(); - db.delete(TABLE_NAME, MMS_ID + " NOT IN (SELECT " + MmsDatabase.ID + " FROM " + MmsDatabase.TABLE_NAME + ")", null); + db.delete(TABLE_NAME, MMS_ID + " NOT IN (SELECT " + MmsTable.ID + " FROM " + MmsTable.TABLE_NAME + ")", null); } void deleteAllRows() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/GroupTable.java similarity index 95% rename from app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java rename to app/src/main/java/org/thoughtcrime/securesms/database/GroupTable.java index 3f80fdc12..78c162718 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/GroupTable.java @@ -65,9 +65,9 @@ import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; -public class GroupDatabase extends Database implements RecipientIdDatabaseReference { +public class GroupTable extends DatabaseTable implements RecipientIdDatabaseReference { - private static final String TAG = Log.tag(GroupDatabase.class); + private static final String TAG = Log.tag(GroupTable.class); static final String TABLE_NAME = "groups"; private static final String ID = "_id"; @@ -139,7 +139,7 @@ public class GroupDatabase extends Database implements RecipientIdDatabaseRefere static final List TYPED_GROUP_PROJECTION = Stream.of(GROUP_PROJECTION).map(columnName -> TABLE_NAME + "." + columnName).toList(); - public GroupDatabase(Context context, SignalDatabase databaseHelper) { + public GroupTable(Context context, SignalDatabase databaseHelper) { super(context, databaseHelper); } @@ -331,7 +331,7 @@ public class GroupDatabase extends Database implements RecipientIdDatabaseRefere String membershipQuery = "(" + Util.join(recipientLikeClauses, " OR ") + ")"; if (includeInactive) { - query = membershipQuery + " AND (" + ACTIVE + " = ? OR " + RECIPIENT_ID + " IN (SELECT " + ThreadDatabase.RECIPIENT_ID + " FROM " + ThreadDatabase.TABLE_NAME + "))"; + query = membershipQuery + " AND (" + ACTIVE + " = ? OR " + RECIPIENT_ID + " IN (SELECT " + ThreadTable.RECIPIENT_ID + " FROM " + ThreadTable.TABLE_NAME + "))"; queryArgs = SqlUtil.buildArgs(1); } else { query = membershipQuery + " AND " + ACTIVE + " = ?"; @@ -352,9 +352,9 @@ public class GroupDatabase extends Database implements RecipientIdDatabaseRefere public Reader queryGroupsByRecency(@NonNull GroupQuery groupQuery) { SqlUtil.Query query = getGroupQueryWhereStatement(groupQuery.searchQuery, groupQuery.includeInactive, !groupQuery.includeV1, !groupQuery.includeMms); String sql = "SELECT * FROM " + TABLE_NAME + - " LEFT JOIN " + ThreadDatabase.TABLE_NAME + " ON " + RECIPIENT_ID + " = " + ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.RECIPIENT_ID + + " LEFT JOIN " + ThreadTable.TABLE_NAME + " ON " + RECIPIENT_ID + " = " + ThreadTable.TABLE_NAME + "." + ThreadTable.RECIPIENT_ID + " WHERE " + query.getWhere() + - " ORDER BY " + ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.DATE + " DESC"; + " ORDER BY " + ThreadTable.TABLE_NAME + "." + ThreadTable.DATE + " DESC"; return new Reader(databaseHelper.getSignalReadableDatabase().rawQuery(sql, query.getWhereArgs())); } @@ -374,7 +374,7 @@ public class GroupDatabase extends Database implements RecipientIdDatabaseRefere String caseInsensitiveQuery = SqlUtil.buildCaseInsensitiveGlobPattern(inputQuery); if (includeInactive) { - query = TITLE + " GLOB ? AND (" + ACTIVE + " = ? OR " + RECIPIENT_ID + " IN (SELECT " + ThreadDatabase.RECIPIENT_ID + " FROM " + ThreadDatabase.TABLE_NAME + "))"; + query = TITLE + " GLOB ? AND (" + ACTIVE + " = ? OR " + RECIPIENT_ID + " IN (SELECT " + ThreadTable.RECIPIENT_ID + " FROM " + ThreadTable.TABLE_NAME + "))"; queryArgs = SqlUtil.buildArgs(caseInsensitiveQuery, 1); } else { query = TITLE + " GLOB ? AND " + ACTIVE + " = ?"; @@ -464,10 +464,10 @@ public class GroupDatabase extends Database implements RecipientIdDatabaseRefere @WorkerThread public @NonNull List getGroupsContainingMember(@NonNull RecipientId recipientId, boolean pushOnly, boolean includeInactive) { SQLiteDatabase database = databaseHelper.getSignalReadableDatabase(); - String table = TABLE_NAME + " INNER JOIN " + ThreadDatabase.TABLE_NAME + " ON " + TABLE_NAME + "." + RECIPIENT_ID + " = " + ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.RECIPIENT_ID; + String table = TABLE_NAME + " INNER JOIN " + ThreadTable.TABLE_NAME + " ON " + TABLE_NAME + "." + RECIPIENT_ID + " = " + ThreadTable.TABLE_NAME + "." + ThreadTable.RECIPIENT_ID; String query = MEMBERS + " LIKE ?"; String[] args = SqlUtil.buildArgs("%" + recipientId.serialize() + "%"); - String orderBy = ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.DATE + " DESC"; + String orderBy = ThreadTable.TABLE_NAME + "." + ThreadTable.DATE + " DESC"; if (pushOnly) { query += " AND " + MMS + " = ?"; @@ -647,9 +647,9 @@ public class GroupDatabase extends Database implements RecipientIdDatabaseRefere @Nullable GroupMasterKey groupMasterKey, @Nullable DecryptedGroup groupState) { - RecipientDatabase recipientDatabase = SignalDatabase.recipients(); - RecipientId groupRecipientId = recipientDatabase.getOrInsertFromGroupId(groupId); - List members = new ArrayList<>(new HashSet<>(memberCollection)); + RecipientTable recipientTable = SignalDatabase.recipients(); + RecipientId groupRecipientId = recipientTable.getOrInsertFromGroupId(groupId); + List members = new ArrayList<>(new HashSet<>(memberCollection)); Collections.sort(members); @@ -703,11 +703,11 @@ public class GroupDatabase extends Database implements RecipientIdDatabaseRefere databaseHelper.getSignalWritableDatabase().insert(TABLE_NAME, null, contentValues); if (groupState != null && groupState.hasDisappearingMessagesTimer()) { - recipientDatabase.setExpireMessages(groupRecipientId, groupState.getDisappearingMessagesTimer().getDuration()); + recipientTable.setExpireMessages(groupRecipientId, groupState.getDisappearingMessagesTimer().getDuration()); } if (groupMembers != null && (groupId.isMms() || Recipient.resolved(groupRecipientId).isProfileSharing())) { - recipientDatabase.setHasGroupsInCommon(groupMembers); + recipientTable.setHasGroupsInCommon(groupMembers); } Recipient.live(groupRecipientId).refresh(); @@ -802,9 +802,9 @@ public class GroupDatabase extends Database implements RecipientIdDatabaseRefere } public void update(@NonNull GroupId.V2 groupId, @NonNull DecryptedGroup decryptedGroup) { - RecipientDatabase recipientDatabase = SignalDatabase.recipients(); - RecipientId groupRecipientId = recipientDatabase.getOrInsertFromGroupId(groupId); - Optional existingGroup = getGroup(groupId); + RecipientTable recipientTable = SignalDatabase.recipients(); + RecipientId groupRecipientId = recipientTable.getOrInsertFromGroupId(groupId); + Optional existingGroup = getGroup(groupId); String title = decryptedGroup.getTitle(); ContentValues contentValues = new ContentValues(); @@ -852,11 +852,11 @@ public class GroupDatabase extends Database implements RecipientIdDatabaseRefere new String[]{ groupId.toString() }); if (decryptedGroup.hasDisappearingMessagesTimer()) { - recipientDatabase.setExpireMessages(groupRecipientId, decryptedGroup.getDisappearingMessagesTimer().getDuration()); + recipientTable.setExpireMessages(groupRecipientId, decryptedGroup.getDisappearingMessagesTimer().getDuration()); } if (groupId.isMms() || Recipient.resolved(groupRecipientId).isProfileSharing()) { - recipientDatabase.setHasGroupsInCommon(groupMembers); + recipientTable.setHasGroupsInCommon(groupMembers); } Recipient.live(groupRecipientId).refresh(); @@ -1079,9 +1079,9 @@ public class GroupDatabase extends Database implements RecipientIdDatabaseRefere newMembers.add(toId); ContentValues groupValues = new ContentValues(); - groupValues.put(GroupDatabase.MEMBERS, RecipientId.toSerializedList(newMembers)); + groupValues.put(GroupTable.MEMBERS, RecipientId.toSerializedList(newMembers)); - getWritableDatabase().update(GroupDatabase.TABLE_NAME, groupValues, GroupDatabase.RECIPIENT_ID + " = ?", SqlUtil.buildArgs(group.recipientId)); + getWritableDatabase().update(GroupTable.TABLE_NAME, groupValues, GroupTable.RECIPIENT_ID + " = ?", SqlUtil.buildArgs(group.recipientId)); if (group.isV2Group()) { removeUnmigratedV1Members(group.id.requireV2(), Collections.singletonList(fromId)); @@ -1510,16 +1510,16 @@ public class GroupDatabase extends Database implements RecipientIdDatabaseRefere public @NonNull List getGroupsToDisplayAsStories() throws BadGroupIdException { String query = "SELECT " + GROUP_ID + ", (" + - "SELECT " + MmsDatabase.TABLE_NAME + "." + MmsDatabase.DATE_RECEIVED + " FROM " + MmsDatabase.TABLE_NAME + - " WHERE " + MmsDatabase.TABLE_NAME + "." + MmsDatabase.RECIPIENT_ID + " = " + ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.RECIPIENT_ID + - " AND " + MmsDatabase.STORY_TYPE + " > 1 ORDER BY " + MmsDatabase.TABLE_NAME + "." + MmsDatabase.DATE_RECEIVED + " DESC LIMIT 1" + - ") as active_timestamp" + + "SELECT " + MmsTable.TABLE_NAME + "." + MmsTable.DATE_RECEIVED + " FROM " + MmsTable.TABLE_NAME + + " WHERE " + MmsTable.TABLE_NAME + "." + MmsTable.RECIPIENT_ID + " = " + ThreadTable.TABLE_NAME + "." + ThreadTable.RECIPIENT_ID + + " AND " + MmsTable.STORY_TYPE + " > 1 ORDER BY " + MmsTable.TABLE_NAME + "." + MmsTable.DATE_RECEIVED + " DESC LIMIT 1" + + ") as active_timestamp" + " FROM " + TABLE_NAME + - " INNER JOIN " + ThreadDatabase.TABLE_NAME + " ON " + ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.RECIPIENT_ID + " = " + TABLE_NAME + "." + RECIPIENT_ID + + " INNER JOIN " + ThreadTable.TABLE_NAME + " ON " + ThreadTable.TABLE_NAME + "." + ThreadTable.RECIPIENT_ID + " = " + TABLE_NAME + "." + RECIPIENT_ID + " WHERE " + ACTIVE + " = 1 " + " AND (" + - SHOW_AS_STORY_STATE + " = " + ShowAsStoryState.ALWAYS.code + - " OR (" + SHOW_AS_STORY_STATE + " = " + ShowAsStoryState.IF_ACTIVE.code + " AND active_timestamp IS NOT NULL)" + + SHOW_AS_STORY_STATE + " = " + ShowAsStoryState.ALWAYS.code + + " OR (" + SHOW_AS_STORY_STATE + " = " + ShowAsStoryState.IF_ACTIVE.code + " AND active_timestamp IS NOT NULL)" + ") ORDER BY active_timestamp DESC"; try (Cursor cursor = getReadableDatabase().query(query)) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/IdentityDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/IdentityTable.java similarity index 96% rename from app/src/main/java/org/thoughtcrime/securesms/database/IdentityDatabase.java rename to app/src/main/java/org/thoughtcrime/securesms/database/IdentityTable.java index be792eb4a..9f1c581b5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/IdentityDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/IdentityTable.java @@ -29,7 +29,6 @@ import org.signal.libsignal.protocol.IdentityKey; import org.signal.libsignal.protocol.InvalidKeyException; import org.thoughtcrime.securesms.database.model.IdentityRecord; import org.thoughtcrime.securesms.database.model.IdentityStoreRecord; -import org.thoughtcrime.securesms.database.model.RecipientRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; @@ -43,12 +42,11 @@ import org.whispersystems.signalservice.api.util.UuidUtil; import java.io.IOException; import java.util.Optional; -import java.util.UUID; -public class IdentityDatabase extends Database { +public class IdentityTable extends DatabaseTable { @SuppressWarnings("unused") - private static final String TAG = Log.tag(IdentityDatabase.class); + private static final String TAG = Log.tag(IdentityTable.class); static final String TABLE_NAME = "identities"; private static final String ID = "_id"; @@ -89,7 +87,7 @@ public class IdentityDatabase extends Database { } } - IdentityDatabase(Context context, SignalDatabase databaseHelper) { + IdentityTable(Context context, SignalDatabase databaseHelper) { super(context, databaseHelper); } @@ -207,7 +205,7 @@ public class IdentityDatabase extends Database { } public void delete(@NonNull String addressName) { - databaseHelper.getSignalWritableDatabase().delete(IdentityDatabase.TABLE_NAME, IdentityDatabase.ADDRESS + " = ?", SqlUtil.buildArgs(addressName)); + databaseHelper.getSignalWritableDatabase().delete(IdentityTable.TABLE_NAME, IdentityTable.ADDRESS + " = ?", SqlUtil.buildArgs(addressName)); } private Optional getIdentityRecord(@NonNull String addressName) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MediaDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MediaDatabase.java deleted file mode 100644 index b7487b563..000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MediaDatabase.java +++ /dev/null @@ -1,301 +0,0 @@ -package org.thoughtcrime.securesms.database; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.database.Cursor; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import org.thoughtcrime.securesms.attachments.DatabaseAttachment; -import org.thoughtcrime.securesms.recipients.RecipientId; -import org.thoughtcrime.securesms.util.MediaUtil; - -import java.util.List; - -@SuppressLint({"RecipientIdDatabaseReferenceUsage", "ThreadIdDatabaseReferenceUsage"}) // Not a real table, just a view -public class MediaDatabase extends Database { - - public static final int ALL_THREADS = -1; - private static final String THREAD_RECIPIENT_ID = "THREAD_RECIPIENT_ID"; - - private static final String BASE_MEDIA_QUERY = "SELECT " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.ROW_ID + " AS " + AttachmentDatabase.ROW_ID + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.CONTENT_TYPE + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.UNIQUE_ID + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.MMS_ID + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.TRANSFER_STATE + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.SIZE + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.FILE_NAME + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.DATA + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.CDN_NUMBER + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.CONTENT_LOCATION + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.CONTENT_DISPOSITION + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.DIGEST + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.FAST_PREFLIGHT_ID + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.VOICE_NOTE + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.BORDERLESS + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.VIDEO_GIF + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.WIDTH + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.HEIGHT + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.QUOTE + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.STICKER_PACK_ID + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.STICKER_PACK_KEY + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.STICKER_ID + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.STICKER_EMOJI + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.VISUAL_HASH + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.TRANSFORM_PROPERTIES + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.DISPLAY_ORDER + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.CAPTION + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.NAME + ", " - + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.UPLOAD_TIMESTAMP + ", " - + MmsDatabase.TABLE_NAME + "." + MmsDatabase.MESSAGE_BOX + ", " - + MmsDatabase.TABLE_NAME + "." + MmsDatabase.DATE_SENT + ", " - + MmsDatabase.TABLE_NAME + "." + MmsDatabase.DATE_RECEIVED + ", " - + MmsDatabase.TABLE_NAME + "." + MmsDatabase.DATE_SERVER + ", " - + MmsDatabase.TABLE_NAME + "." + MmsDatabase.THREAD_ID + ", " - + MmsDatabase.TABLE_NAME + "." + MmsDatabase.RECIPIENT_ID + ", " - + ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.RECIPIENT_ID + " as " + THREAD_RECIPIENT_ID + " " - + "FROM " + AttachmentDatabase.TABLE_NAME + " LEFT JOIN " + MmsDatabase.TABLE_NAME - + " ON " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.MMS_ID + " = " + MmsDatabase.TABLE_NAME + "." + MmsDatabase.ID + " " - + "LEFT JOIN " + ThreadDatabase.TABLE_NAME - + " ON " + ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.ID + " = " + MmsDatabase.TABLE_NAME + "." + MmsDatabase.THREAD_ID + " " - + "WHERE " + AttachmentDatabase.MMS_ID + " IN (SELECT " + MmsSmsColumns.ID - + " FROM " + MmsDatabase.TABLE_NAME - + " WHERE " + MmsDatabase.THREAD_ID + " __EQUALITY__ ?) AND (%s) AND " - + MmsDatabase.VIEW_ONCE + " = 0 AND " - + MmsDatabase.STORY_TYPE + " = 0 AND " - + AttachmentDatabase.DATA + " IS NOT NULL AND " - + "(" + AttachmentDatabase.QUOTE + " = 0 OR (" + AttachmentDatabase.QUOTE + " = 1 AND " + AttachmentDatabase.DATA_HASH + " IS NULL)) AND " - + AttachmentDatabase.STICKER_PACK_ID + " IS NULL AND " - + MmsDatabase.RECIPIENT_ID + " > 0 AND " - + THREAD_RECIPIENT_ID + " > 0"; - - private static final String UNIQUE_MEDIA_QUERY = "SELECT " - + "MAX(" + AttachmentDatabase.SIZE + ") as " + AttachmentDatabase.SIZE + ", " - + AttachmentDatabase.CONTENT_TYPE + " " - + "FROM " + AttachmentDatabase.TABLE_NAME + " " - + "WHERE " + AttachmentDatabase.STICKER_PACK_ID + " IS NULL AND " + AttachmentDatabase.TRANSFER_STATE + " = " + AttachmentDatabase.TRANSFER_PROGRESS_DONE + " " - + "GROUP BY " + AttachmentDatabase.DATA; - - private static final String GALLERY_MEDIA_QUERY = String.format(BASE_MEDIA_QUERY, AttachmentDatabase.CONTENT_TYPE + " NOT LIKE 'image/svg%' AND (" + - AttachmentDatabase.CONTENT_TYPE + " LIKE 'image/%' OR " + - AttachmentDatabase.CONTENT_TYPE + " LIKE 'video/%')"); - private static final String AUDIO_MEDIA_QUERY = String.format(BASE_MEDIA_QUERY, AttachmentDatabase.CONTENT_TYPE + " LIKE 'audio/%'"); - private static final String ALL_MEDIA_QUERY = String.format(BASE_MEDIA_QUERY, AttachmentDatabase.CONTENT_TYPE + " NOT LIKE 'text/x-signal-plain'"); - private static final String DOCUMENT_MEDIA_QUERY = String.format(BASE_MEDIA_QUERY, AttachmentDatabase.CONTENT_TYPE + " LIKE 'image/svg%' OR (" + - AttachmentDatabase.CONTENT_TYPE + " NOT LIKE 'image/%' AND " + - AttachmentDatabase.CONTENT_TYPE + " NOT LIKE 'video/%' AND " + - AttachmentDatabase.CONTENT_TYPE + " NOT LIKE 'audio/%' AND " + - AttachmentDatabase.CONTENT_TYPE + " NOT LIKE 'text/x-signal-plain')"); - - MediaDatabase(Context context, SignalDatabase databaseHelper) { - super(context, databaseHelper); - } - - public @NonNull Cursor getGalleryMediaForThread(long threadId, @NonNull Sorting sorting) { - SQLiteDatabase database = databaseHelper.getSignalReadableDatabase(); - String query = sorting.applyToQuery(applyEqualityOperator(threadId, GALLERY_MEDIA_QUERY)); - String[] args = {threadId + ""}; - - return database.rawQuery(query, args); - } - - public @NonNull Cursor getDocumentMediaForThread(long threadId, @NonNull Sorting sorting) { - SQLiteDatabase database = databaseHelper.getSignalReadableDatabase(); - String query = sorting.applyToQuery(applyEqualityOperator(threadId, DOCUMENT_MEDIA_QUERY)); - String[] args = {threadId + ""}; - - return database.rawQuery(query, args); - } - - public @NonNull Cursor getAudioMediaForThread(long threadId, @NonNull Sorting sorting) { - SQLiteDatabase database = databaseHelper.getSignalReadableDatabase(); - String query = sorting.applyToQuery(applyEqualityOperator(threadId, AUDIO_MEDIA_QUERY)); - String[] args = {threadId + ""}; - - return database.rawQuery(query, args); - } - - public @NonNull Cursor getAllMediaForThread(long threadId, @NonNull Sorting sorting) { - SQLiteDatabase database = databaseHelper.getSignalReadableDatabase(); - String query = sorting.applyToQuery(applyEqualityOperator(threadId, ALL_MEDIA_QUERY)); - String[] args = {threadId + ""}; - - return database.rawQuery(query, args); - } - - private static String applyEqualityOperator(long threadId, String query) { - return query.replace("__EQUALITY__", threadId == ALL_THREADS ? "!=" : "="); - } - - public StorageBreakdown getStorageBreakdown() { - StorageBreakdown storageBreakdown = new StorageBreakdown(); - SQLiteDatabase database = databaseHelper.getSignalReadableDatabase(); - - try (Cursor cursor = database.rawQuery(UNIQUE_MEDIA_QUERY, new String[0])) { - int sizeColumn = cursor.getColumnIndexOrThrow(AttachmentDatabase.SIZE); - int contentTypeColumn = cursor.getColumnIndexOrThrow(AttachmentDatabase.CONTENT_TYPE); - - while (cursor.moveToNext()) { - int size = cursor.getInt(sizeColumn); - String type = cursor.getString(contentTypeColumn); - - switch (MediaUtil.getSlideTypeFromContentType(type)) { - case GIF: - case IMAGE: - case MMS: - storageBreakdown.photoSize += size; - break; - case VIDEO: - storageBreakdown.videoSize += size; - break; - case AUDIO: - storageBreakdown.audioSize += size; - break; - case LONG_TEXT: - case DOCUMENT: - storageBreakdown.documentSize += size; - break; - default: - break; - } - } - } - - return storageBreakdown; - } - - public static class MediaRecord { - - private final DatabaseAttachment attachment; - private final RecipientId recipientId; - private final RecipientId threadRecipientId; - private final long threadId; - private final long date; - private final boolean outgoing; - - private MediaRecord(@Nullable DatabaseAttachment attachment, - @NonNull RecipientId recipientId, - @NonNull RecipientId threadRecipientId, - long threadId, - long date, - boolean outgoing) - { - this.attachment = attachment; - this.recipientId = recipientId; - this.threadRecipientId = threadRecipientId; - this.threadId = threadId; - this.date = date; - this.outgoing = outgoing; - } - - public static MediaRecord from(@NonNull Cursor cursor) { - AttachmentDatabase attachmentDatabase = SignalDatabase.attachments(); - List attachments = attachmentDatabase.getAttachments(cursor); - RecipientId recipientId = RecipientId.from(cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.RECIPIENT_ID))); - long threadId = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.THREAD_ID)); - boolean outgoing = MessageDatabase.Types.isOutgoingMessageType(cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.MESSAGE_BOX))); - - long date; - - if (MmsDatabase.Types.isPushType(cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.MESSAGE_BOX)))) { - date = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.DATE_SENT)); - } else { - date = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.DATE_RECEIVED)); - } - - RecipientId threadRecipient = RecipientId.from(cursor.getLong(cursor.getColumnIndexOrThrow(THREAD_RECIPIENT_ID))); - - return new MediaRecord(attachments != null && attachments.size() > 0 ? attachments.get(0) : null, - recipientId, - threadRecipient, - threadId, - date, - outgoing); - } - - public @Nullable DatabaseAttachment getAttachment() { - return attachment; - } - - public String getContentType() { - return attachment.getContentType(); - } - - public @NonNull RecipientId getRecipientId() { - return recipientId; - } - - public @NonNull RecipientId getThreadRecipientId() { - return threadRecipientId; - } - - public long getThreadId() { - return threadId; - } - - public long getDate() { - return date; - } - - public boolean isOutgoing() { - return outgoing; - } - } - - public enum Sorting { - Newest (AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.MMS_ID + " DESC, " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.DISPLAY_ORDER + " DESC, " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.ROW_ID + " DESC"), - Oldest (AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.MMS_ID + " ASC, " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.DISPLAY_ORDER + " DESC, " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.ROW_ID + " ASC"), - Largest(AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.SIZE + " DESC, " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.DISPLAY_ORDER + " DESC"); - - private final String postFix; - - Sorting(@NonNull String order) { - postFix = " ORDER BY " + order; - } - - private String applyToQuery(@NonNull String query) { - return query + postFix; - } - - public boolean isRelatedToFileSize() { - return this == Largest; - } - - public static @NonNull Sorting deserialize(int code) { - switch (code) { - case 0: - return Newest; - case 1: - return Oldest; - case 2: - return Largest; - default: - throw new IllegalArgumentException("Unknown code: " + code); - } - } - } - - public final static class StorageBreakdown { - private long photoSize; - private long videoSize; - private long audioSize; - private long documentSize; - - public long getPhotoSize() { - return photoSize; - } - - public long getVideoSize() { - return videoSize; - } - - public long getAudioSize() { - return audioSize; - } - - public long getDocumentSize() { - return documentSize; - } - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MediaTable.java b/app/src/main/java/org/thoughtcrime/securesms/database/MediaTable.java new file mode 100644 index 000000000..23502f8aa --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MediaTable.java @@ -0,0 +1,301 @@ +package org.thoughtcrime.securesms.database; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.database.Cursor; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import org.thoughtcrime.securesms.attachments.DatabaseAttachment; +import org.thoughtcrime.securesms.recipients.RecipientId; +import org.thoughtcrime.securesms.util.MediaUtil; + +import java.util.List; + +@SuppressLint({"RecipientIdDatabaseReferenceUsage", "ThreadIdDatabaseReferenceUsage"}) // Not a real table, just a view +public class MediaTable extends DatabaseTable { + + public static final int ALL_THREADS = -1; + private static final String THREAD_RECIPIENT_ID = "THREAD_RECIPIENT_ID"; + + private static final String BASE_MEDIA_QUERY = "SELECT " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.ROW_ID + " AS " + AttachmentTable.ROW_ID + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.CONTENT_TYPE + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.UNIQUE_ID + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.MMS_ID + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.TRANSFER_STATE + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.SIZE + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.FILE_NAME + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.DATA + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.CDN_NUMBER + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.CONTENT_LOCATION + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.CONTENT_DISPOSITION + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.DIGEST + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.FAST_PREFLIGHT_ID + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.VOICE_NOTE + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.BORDERLESS + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.VIDEO_GIF + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.WIDTH + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.HEIGHT + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.QUOTE + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.STICKER_PACK_ID + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.STICKER_PACK_KEY + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.STICKER_ID + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.STICKER_EMOJI + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.VISUAL_HASH + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.TRANSFORM_PROPERTIES + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.DISPLAY_ORDER + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.CAPTION + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.NAME + ", " + + AttachmentTable.TABLE_NAME + "." + AttachmentTable.UPLOAD_TIMESTAMP + ", " + + MmsTable.TABLE_NAME + "." + MmsTable.MESSAGE_BOX + ", " + + MmsTable.TABLE_NAME + "." + MmsTable.DATE_SENT + ", " + + MmsTable.TABLE_NAME + "." + MmsTable.DATE_RECEIVED + ", " + + MmsTable.TABLE_NAME + "." + MmsTable.DATE_SERVER + ", " + + MmsTable.TABLE_NAME + "." + MmsTable.THREAD_ID + ", " + + MmsTable.TABLE_NAME + "." + MmsTable.RECIPIENT_ID + ", " + + ThreadTable.TABLE_NAME + "." + ThreadTable.RECIPIENT_ID + " as " + THREAD_RECIPIENT_ID + " " + + "FROM " + AttachmentTable.TABLE_NAME + " LEFT JOIN " + MmsTable.TABLE_NAME + + " ON " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.MMS_ID + " = " + MmsTable.TABLE_NAME + "." + MmsTable.ID + " " + + "LEFT JOIN " + ThreadTable.TABLE_NAME + + " ON " + ThreadTable.TABLE_NAME + "." + ThreadTable.ID + " = " + MmsTable.TABLE_NAME + "." + MmsTable.THREAD_ID + " " + + "WHERE " + AttachmentTable.MMS_ID + " IN (SELECT " + MmsSmsColumns.ID + + " FROM " + MmsTable.TABLE_NAME + + " WHERE " + MmsTable.THREAD_ID + " __EQUALITY__ ?) AND (%s) AND " + + MmsTable.VIEW_ONCE + " = 0 AND " + + MmsTable.STORY_TYPE + " = 0 AND " + + AttachmentTable.DATA + " IS NOT NULL AND " + + "(" + AttachmentTable.QUOTE + " = 0 OR (" + AttachmentTable.QUOTE + " = 1 AND " + AttachmentTable.DATA_HASH + " IS NULL)) AND " + + AttachmentTable.STICKER_PACK_ID + " IS NULL AND " + + MmsTable.RECIPIENT_ID + " > 0 AND " + + THREAD_RECIPIENT_ID + " > 0"; + + private static final String UNIQUE_MEDIA_QUERY = "SELECT " + + "MAX(" + AttachmentTable.SIZE + ") as " + AttachmentTable.SIZE + ", " + + AttachmentTable.CONTENT_TYPE + " " + + "FROM " + AttachmentTable.TABLE_NAME + " " + + "WHERE " + AttachmentTable.STICKER_PACK_ID + " IS NULL AND " + AttachmentTable.TRANSFER_STATE + " = " + AttachmentTable.TRANSFER_PROGRESS_DONE + " " + + "GROUP BY " + AttachmentTable.DATA; + + private static final String GALLERY_MEDIA_QUERY = String.format(BASE_MEDIA_QUERY, AttachmentTable.CONTENT_TYPE + " NOT LIKE 'image/svg%' AND (" + + AttachmentTable.CONTENT_TYPE + " LIKE 'image/%' OR " + + AttachmentTable.CONTENT_TYPE + " LIKE 'video/%')"); + private static final String AUDIO_MEDIA_QUERY = String.format(BASE_MEDIA_QUERY, AttachmentTable.CONTENT_TYPE + " LIKE 'audio/%'"); + private static final String ALL_MEDIA_QUERY = String.format(BASE_MEDIA_QUERY, AttachmentTable.CONTENT_TYPE + " NOT LIKE 'text/x-signal-plain'"); + private static final String DOCUMENT_MEDIA_QUERY = String.format(BASE_MEDIA_QUERY, AttachmentTable.CONTENT_TYPE + " LIKE 'image/svg%' OR (" + + AttachmentTable.CONTENT_TYPE + " NOT LIKE 'image/%' AND " + + AttachmentTable.CONTENT_TYPE + " NOT LIKE 'video/%' AND " + + AttachmentTable.CONTENT_TYPE + " NOT LIKE 'audio/%' AND " + + AttachmentTable.CONTENT_TYPE + " NOT LIKE 'text/x-signal-plain')"); + + MediaTable(Context context, SignalDatabase databaseHelper) { + super(context, databaseHelper); + } + + public @NonNull Cursor getGalleryMediaForThread(long threadId, @NonNull Sorting sorting) { + SQLiteDatabase database = databaseHelper.getSignalReadableDatabase(); + String query = sorting.applyToQuery(applyEqualityOperator(threadId, GALLERY_MEDIA_QUERY)); + String[] args = {threadId + ""}; + + return database.rawQuery(query, args); + } + + public @NonNull Cursor getDocumentMediaForThread(long threadId, @NonNull Sorting sorting) { + SQLiteDatabase database = databaseHelper.getSignalReadableDatabase(); + String query = sorting.applyToQuery(applyEqualityOperator(threadId, DOCUMENT_MEDIA_QUERY)); + String[] args = {threadId + ""}; + + return database.rawQuery(query, args); + } + + public @NonNull Cursor getAudioMediaForThread(long threadId, @NonNull Sorting sorting) { + SQLiteDatabase database = databaseHelper.getSignalReadableDatabase(); + String query = sorting.applyToQuery(applyEqualityOperator(threadId, AUDIO_MEDIA_QUERY)); + String[] args = {threadId + ""}; + + return database.rawQuery(query, args); + } + + public @NonNull Cursor getAllMediaForThread(long threadId, @NonNull Sorting sorting) { + SQLiteDatabase database = databaseHelper.getSignalReadableDatabase(); + String query = sorting.applyToQuery(applyEqualityOperator(threadId, ALL_MEDIA_QUERY)); + String[] args = {threadId + ""}; + + return database.rawQuery(query, args); + } + + private static String applyEqualityOperator(long threadId, String query) { + return query.replace("__EQUALITY__", threadId == ALL_THREADS ? "!=" : "="); + } + + public StorageBreakdown getStorageBreakdown() { + StorageBreakdown storageBreakdown = new StorageBreakdown(); + SQLiteDatabase database = databaseHelper.getSignalReadableDatabase(); + + try (Cursor cursor = database.rawQuery(UNIQUE_MEDIA_QUERY, new String[0])) { + int sizeColumn = cursor.getColumnIndexOrThrow(AttachmentTable.SIZE); + int contentTypeColumn = cursor.getColumnIndexOrThrow(AttachmentTable.CONTENT_TYPE); + + while (cursor.moveToNext()) { + int size = cursor.getInt(sizeColumn); + String type = cursor.getString(contentTypeColumn); + + switch (MediaUtil.getSlideTypeFromContentType(type)) { + case GIF: + case IMAGE: + case MMS: + storageBreakdown.photoSize += size; + break; + case VIDEO: + storageBreakdown.videoSize += size; + break; + case AUDIO: + storageBreakdown.audioSize += size; + break; + case LONG_TEXT: + case DOCUMENT: + storageBreakdown.documentSize += size; + break; + default: + break; + } + } + } + + return storageBreakdown; + } + + public static class MediaRecord { + + private final DatabaseAttachment attachment; + private final RecipientId recipientId; + private final RecipientId threadRecipientId; + private final long threadId; + private final long date; + private final boolean outgoing; + + private MediaRecord(@Nullable DatabaseAttachment attachment, + @NonNull RecipientId recipientId, + @NonNull RecipientId threadRecipientId, + long threadId, + long date, + boolean outgoing) + { + this.attachment = attachment; + this.recipientId = recipientId; + this.threadRecipientId = threadRecipientId; + this.threadId = threadId; + this.date = date; + this.outgoing = outgoing; + } + + public static MediaRecord from(@NonNull Cursor cursor) { + AttachmentTable attachmentDatabase = SignalDatabase.attachments(); + List attachments = attachmentDatabase.getAttachments(cursor); + RecipientId recipientId = RecipientId.from(cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.RECIPIENT_ID))); + long threadId = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.THREAD_ID)); + boolean outgoing = MessageTable.Types.isOutgoingMessageType(cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.MESSAGE_BOX))); + + long date; + + if (MmsTable.Types.isPushType(cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.MESSAGE_BOX)))) { + date = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.DATE_SENT)); + } else { + date = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.DATE_RECEIVED)); + } + + RecipientId threadRecipient = RecipientId.from(cursor.getLong(cursor.getColumnIndexOrThrow(THREAD_RECIPIENT_ID))); + + return new MediaRecord(attachments != null && attachments.size() > 0 ? attachments.get(0) : null, + recipientId, + threadRecipient, + threadId, + date, + outgoing); + } + + public @Nullable DatabaseAttachment getAttachment() { + return attachment; + } + + public String getContentType() { + return attachment.getContentType(); + } + + public @NonNull RecipientId getRecipientId() { + return recipientId; + } + + public @NonNull RecipientId getThreadRecipientId() { + return threadRecipientId; + } + + public long getThreadId() { + return threadId; + } + + public long getDate() { + return date; + } + + public boolean isOutgoing() { + return outgoing; + } + } + + public enum Sorting { + Newest (AttachmentTable.TABLE_NAME + "." + AttachmentTable.MMS_ID + " DESC, " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.DISPLAY_ORDER + " DESC, " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.ROW_ID + " DESC"), + Oldest (AttachmentTable.TABLE_NAME + "." + AttachmentTable.MMS_ID + " ASC, " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.DISPLAY_ORDER + " DESC, " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.ROW_ID + " ASC"), + Largest(AttachmentTable.TABLE_NAME + "." + AttachmentTable.SIZE + " DESC, " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.DISPLAY_ORDER + " DESC"); + + private final String postFix; + + Sorting(@NonNull String order) { + postFix = " ORDER BY " + order; + } + + private String applyToQuery(@NonNull String query) { + return query + postFix; + } + + public boolean isRelatedToFileSize() { + return this == Largest; + } + + public static @NonNull Sorting deserialize(int code) { + switch (code) { + case 0: + return Newest; + case 1: + return Oldest; + case 2: + return Largest; + default: + throw new IllegalArgumentException("Unknown code: " + code); + } + } + } + + public final static class StorageBreakdown { + private long photoSize; + private long videoSize; + private long audioSize; + private long documentSize; + + public long getPhotoSize() { + return photoSize; + } + + public long getVideoSize() { + return videoSize; + } + + public long getAudioSize() { + return audioSize; + } + + public long getDocumentSize() { + return documentSize; + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MentionDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MentionTable.java similarity index 94% rename from app/src/main/java/org/thoughtcrime/securesms/database/MentionDatabase.java rename to app/src/main/java/org/thoughtcrime/securesms/database/MentionTable.java index c84dd956d..3dbb0a6af 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MentionDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MentionTable.java @@ -21,7 +21,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; -public class MentionDatabase extends Database implements RecipientIdDatabaseReference, ThreadIdDatabaseReference { +public class MentionTable extends DatabaseTable implements RecipientIdDatabaseReference, ThreadIdDatabaseReference { public static final String TABLE_NAME = "mention"; @@ -44,7 +44,7 @@ public class MentionDatabase extends Database implements RecipientIdDatabaseRefe "CREATE INDEX IF NOT EXISTS mention_recipient_id_thread_id_index ON " + TABLE_NAME + " (" + RECIPIENT_ID + ", " + THREAD_ID + ");" }; - public MentionDatabase(@NonNull Context context, @NonNull SignalDatabase databaseHelper) { + public MentionTable(@NonNull Context context, @NonNull SignalDatabase databaseHelper) { super(context, databaseHelper); } @@ -131,7 +131,7 @@ public class MentionDatabase extends Database implements RecipientIdDatabaseRefe void deleteAbandonedMentions() { SQLiteDatabase db = databaseHelper.getSignalWritableDatabase(); - String where = MESSAGE_ID + " NOT IN (SELECT " + MmsDatabase.ID + " FROM " + MmsDatabase.TABLE_NAME + ") OR " + THREAD_ID + " NOT IN (SELECT " + ThreadDatabase.ID + " FROM " + ThreadDatabase.TABLE_NAME + ")"; + String where = MESSAGE_ID + " NOT IN (SELECT " + MmsTable.ID + " FROM " + MmsTable.TABLE_NAME + ") OR " + THREAD_ID + " NOT IN (SELECT " + ThreadTable.ID + " FROM " + ThreadTable.TABLE_NAME + ")"; db.delete(TABLE_NAME, where, null); } @@ -169,7 +169,7 @@ public class MentionDatabase extends Database implements RecipientIdDatabaseRefe @Override public void remapThread(long fromId, long toId) { ContentValues values = new ContentValues(); - values.put(MentionDatabase.THREAD_ID, toId); + values.put(MentionTable.THREAD_ID, toId); getWritableDatabase().update(TABLE_NAME, values, THREAD_ID + " = ?", SqlUtil.buildArgs(fromId)); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MentionUtil.java b/app/src/main/java/org/thoughtcrime/securesms/database/MentionUtil.java index d74a14f9e..ed238808c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MentionUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MentionUtil.java @@ -12,7 +12,7 @@ import com.annimon.stream.function.Function; import com.google.protobuf.InvalidProtocolBufferException; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.database.RecipientDatabase.MentionSetting; +import org.thoughtcrime.securesms.database.RecipientTable.MentionSetting; import org.thoughtcrime.securesms.database.model.Mention; import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessageSendLogDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/MessageSendLogTables.kt similarity index 96% rename from app/src/main/java/org/thoughtcrime/securesms/database/MessageSendLogDatabase.kt rename to app/src/main/java/org/thoughtcrime/securesms/database/MessageSendLogTables.kt index ffbb1bb28..1f5e004b9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageSendLogDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageSendLogTables.kt @@ -47,10 +47,10 @@ import org.whispersystems.signalservice.internal.push.SignalServiceProtos * - We *don't* really need to optimize for retrieval, since that happens very infrequently. In particular, we don't want to slow down inserts in order to * improve retrieval time. That means we shouldn't be adding indexes that optimize for retrieval. */ -class MessageSendLogDatabase constructor(context: Context?, databaseHelper: SignalDatabase?) : Database(context, databaseHelper), RecipientIdDatabaseReference { +class MessageSendLogTables constructor(context: Context?, databaseHelper: SignalDatabase?) : DatabaseTable(context, databaseHelper), RecipientIdDatabaseReference { companion object { - private val TAG = Log.tag(MessageSendLogDatabase::class.java) + private val TAG = Log.tag(MessageSendLogTables::class.java) @JvmField val CREATE_TABLE: Array = arrayOf(PayloadTable.CREATE_TABLE, RecipientTable.CREATE_TABLE, MessageTable.CREATE_TABLE) @@ -88,21 +88,21 @@ class MessageSendLogDatabase constructor(context: Context?, databaseHelper: Sign val CREATE_TRIGGERS = arrayOf( """ - CREATE TRIGGER msl_sms_delete AFTER DELETE ON ${SmsDatabase.TABLE_NAME} + CREATE TRIGGER msl_sms_delete AFTER DELETE ON ${SmsTable.TABLE_NAME} BEGIN - DELETE FROM $TABLE_NAME WHERE $ID IN (SELECT ${MessageTable.PAYLOAD_ID} FROM ${MessageTable.TABLE_NAME} WHERE ${MessageTable.MESSAGE_ID} = old.${SmsDatabase.ID} AND ${MessageTable.IS_MMS} = 0); + DELETE FROM $TABLE_NAME WHERE $ID IN (SELECT ${MessageTable.PAYLOAD_ID} FROM ${MessageTable.TABLE_NAME} WHERE ${MessageTable.MESSAGE_ID} = old.${SmsTable.ID} AND ${MessageTable.IS_MMS} = 0); END """, """ - CREATE TRIGGER msl_mms_delete AFTER DELETE ON ${MmsDatabase.TABLE_NAME} + CREATE TRIGGER msl_mms_delete AFTER DELETE ON ${MmsTable.TABLE_NAME} BEGIN - DELETE FROM $TABLE_NAME WHERE $ID IN (SELECT ${MessageTable.PAYLOAD_ID} FROM ${MessageTable.TABLE_NAME} WHERE ${MessageTable.MESSAGE_ID} = old.${MmsDatabase.ID} AND ${MessageTable.IS_MMS} = 1); + DELETE FROM $TABLE_NAME WHERE $ID IN (SELECT ${MessageTable.PAYLOAD_ID} FROM ${MessageTable.TABLE_NAME} WHERE ${MessageTable.MESSAGE_ID} = old.${MmsTable.ID} AND ${MessageTable.IS_MMS} = 1); END """, """ - CREATE TRIGGER msl_attachment_delete AFTER DELETE ON ${AttachmentDatabase.TABLE_NAME} + CREATE TRIGGER msl_attachment_delete AFTER DELETE ON ${AttachmentTable.TABLE_NAME} BEGIN - DELETE FROM $TABLE_NAME WHERE $ID IN (SELECT ${MessageTable.PAYLOAD_ID} FROM ${MessageTable.TABLE_NAME} WHERE ${MessageTable.MESSAGE_ID} = old.${AttachmentDatabase.MMS_ID} AND ${MessageTable.IS_MMS} = 1); + DELETE FROM $TABLE_NAME WHERE $ID IN (SELECT ${MessageTable.PAYLOAD_ID} FROM ${MessageTable.TABLE_NAME} WHERE ${MessageTable.MESSAGE_ID} = old.${AttachmentTable.MMS_ID} AND ${MessageTable.IS_MMS} = 1); END """ ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.java similarity index 97% rename from app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java rename to app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.java index 37acb5c9c..511a77f95 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.java @@ -60,14 +60,14 @@ import java.util.Optional; import java.util.Set; import java.util.UUID; -public abstract class MessageDatabase extends Database implements MmsSmsColumns, RecipientIdDatabaseReference, ThreadIdDatabaseReference { +public abstract class MessageTable extends DatabaseTable implements MmsSmsColumns, RecipientIdDatabaseReference, ThreadIdDatabaseReference { - private static final String TAG = Log.tag(MessageDatabase.class); + private static final String TAG = Log.tag(MessageTable.class); protected static final String THREAD_ID_WHERE = THREAD_ID + " = ?"; protected static final String[] THREAD_ID_PROJECTION = new String[] { THREAD_ID }; - public MessageDatabase(Context context, SignalDatabase databaseHelper) { + public MessageTable(Context context, SignalDatabase databaseHelper) { super(context, databaseHelper); } @@ -174,8 +174,8 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns, public abstract @NonNull InsertResult insertChatSessionRefreshedMessage(@NonNull RecipientId recipientId, long senderDeviceId, long sentTimestamp); public abstract void insertBadDecryptMessage(@NonNull RecipientId recipientId, int senderDevice, long sentTimestamp, long receivedTimestamp, long threadId); public abstract long insertMessageOutbox(long threadId, OutgoingTextMessage message, boolean forceSms, long date, InsertListener insertListener); - public abstract long insertMessageOutbox(@NonNull OutgoingMediaMessage message, long threadId, boolean forceSms, @Nullable SmsDatabase.InsertListener insertListener) throws MmsException; - public abstract long insertMessageOutbox(@NonNull OutgoingMediaMessage message, long threadId, boolean forceSms, int defaultReceiptStatus, @Nullable SmsDatabase.InsertListener insertListener) throws MmsException; + public abstract long insertMessageOutbox(@NonNull OutgoingMediaMessage message, long threadId, boolean forceSms, @Nullable SmsTable.InsertListener insertListener) throws MmsException; + public abstract long insertMessageOutbox(@NonNull OutgoingMediaMessage message, long threadId, boolean forceSms, int defaultReceiptStatus, @Nullable SmsTable.InsertListener insertListener) throws MmsException; public abstract void insertProfileNameChangeMessages(@NonNull Recipient recipient, @NonNull String newProfileName, @NonNull String previousProfileName); public abstract void insertGroupV1MigrationEvents(@NonNull RecipientId recipientId, long threadId, @NonNull GroupMigrationMembershipChange membershipChange); public abstract void insertNumberChangeMessages(@NonNull RecipientId recipientId); @@ -220,7 +220,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns, public abstract @NonNull Cursor getStoryReplies(long parentStoryId); public abstract @Nullable Long getOldestStorySendTimestamp(boolean hasSeenReleaseChannelStories); public abstract int deleteStoriesOlderThan(long timestamp, boolean hasSeenReleaseChannelStories); - public abstract @NonNull MessageDatabase.Reader getUnreadStories(@NonNull RecipientId recipientId, int limit); + public abstract @NonNull MessageTable.Reader getUnreadStories(@NonNull RecipientId recipientId, int limit); public abstract @Nullable ParentStoryId.GroupReply getParentStoryIdForGroupReply(long messageId); public abstract void deleteGroupStoryReplies(long parentStoryId); public abstract boolean isOutgoingStoryAlreadyInDatabase(@NonNull RecipientId recipientId, long sentTimestamp); @@ -313,7 +313,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns, * @param messageId An id representing the author-timestamp pair of the message that was read on a linked device. Note that the author could be self when * syncing read receipts for reactions. */ - final @NonNull MmsSmsDatabase.TimestampReadResult setTimestampReadFromSyncMessage(SyncMessageId messageId, long proposedExpireStarted, @NonNull Map threadToLatestRead) { + final @NonNull MmsSmsTable.TimestampReadResult setTimestampReadFromSyncMessage(SyncMessageId messageId, long proposedExpireStarted, @NonNull Map threadToLatestRead) { SQLiteDatabase database = databaseHelper.getSignalWritableDatabase(); List> expiring = new LinkedList<>(); String[] projection = new String[] { ID, THREAD_ID, EXPIRES_IN, EXPIRE_STARTED }; @@ -349,7 +349,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns, } } - return new MmsSmsDatabase.TimestampReadResult(expiring, threads); + return new MmsSmsTable.TimestampReadResult(expiring, threads); } private int getMessageCountForRecipientsAndType(String typeClause) { @@ -552,7 +552,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns, @Override public void remapThread(long fromId, long toId) { ContentValues values = new ContentValues(); - values.put(SmsDatabase.THREAD_ID, toId); + values.put(SmsTable.THREAD_ID, toId); getWritableDatabase().update(getTableName(), values, THREAD_ID + " = ?", SqlUtil.buildArgs(fromId)); } @@ -689,9 +689,9 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns, } protected enum ReceiptType { - READ(READ_RECEIPT_COUNT, GroupReceiptDatabase.STATUS_READ), - DELIVERY(DELIVERY_RECEIPT_COUNT, GroupReceiptDatabase.STATUS_DELIVERED), - VIEWED(VIEWED_RECEIPT_COUNT, GroupReceiptDatabase.STATUS_VIEWED); + READ(READ_RECEIPT_COUNT, GroupReceiptTable.STATUS_READ), + DELIVERY(DELIVERY_RECEIPT_COUNT, GroupReceiptTable.STATUS_DELIVERED), + VIEWED(VIEWED_RECEIPT_COUNT, GroupReceiptTable.STATUS_VIEWED); private final String columnName; private final int groupStatus; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsTable.java similarity index 60% rename from app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java rename to app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsTable.java index b1faceb57..6b92fec9b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsTable.java @@ -33,8 +33,8 @@ 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.MessageDatabase.MessageUpdate; -import org.thoughtcrime.securesms.database.MessageDatabase.SyncMessageId; +import org.thoughtcrime.securesms.database.MessageTable.MessageUpdate; +import org.thoughtcrime.securesms.database.MessageTable.SyncMessageId; import org.thoughtcrime.securesms.database.model.MessageExportStatus; import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.database.model.MessageRecord; @@ -59,77 +59,77 @@ import java.util.stream.Collectors; import static org.thoughtcrime.securesms.database.MmsSmsColumns.Types.GROUP_V2_LEAVE_BITS; -public class MmsSmsDatabase extends Database { +public class MmsSmsTable extends DatabaseTable { @SuppressWarnings("unused") - private static final String TAG = Log.tag(MmsSmsDatabase.class); + private static final String TAG = Log.tag(MmsSmsTable.class); public static final String TRANSPORT = "transport_type"; public static final String MMS_TRANSPORT = "mms"; public static final String SMS_TRANSPORT = "sms"; - private static final String[] PROJECTION = {MmsSmsColumns.ID, - MmsSmsColumns.UNIQUE_ROW_ID, - SmsDatabase.BODY, - SmsDatabase.TYPE, - MmsSmsColumns.THREAD_ID, - SmsDatabase.RECIPIENT_ID, - SmsDatabase.ADDRESS_DEVICE_ID, - SmsDatabase.SUBJECT, - MmsSmsColumns.NORMALIZED_DATE_SENT, - MmsSmsColumns.NORMALIZED_DATE_RECEIVED, - MmsSmsColumns.DATE_SERVER, - MmsDatabase.MESSAGE_TYPE, - MmsDatabase.MESSAGE_BOX, - SmsDatabase.STATUS, - MmsSmsColumns.UNIDENTIFIED, - MmsDatabase.PART_COUNT, - MmsDatabase.CONTENT_LOCATION, - MmsDatabase.TRANSACTION_ID, - MmsDatabase.MESSAGE_SIZE, - MmsDatabase.EXPIRY, - MmsDatabase.STATUS, - MmsSmsColumns.DELIVERY_RECEIPT_COUNT, - MmsSmsColumns.READ_RECEIPT_COUNT, - MmsSmsColumns.MISMATCHED_IDENTITIES, - MmsDatabase.NETWORK_FAILURE, - MmsSmsColumns.SUBSCRIPTION_ID, - MmsSmsColumns.EXPIRES_IN, - MmsSmsColumns.EXPIRE_STARTED, - MmsSmsColumns.NOTIFIED, - TRANSPORT, - AttachmentDatabase.ATTACHMENT_JSON_ALIAS, - MmsDatabase.QUOTE_ID, - MmsDatabase.QUOTE_AUTHOR, - MmsDatabase.QUOTE_BODY, - MmsDatabase.QUOTE_MISSING, - MmsDatabase.QUOTE_ATTACHMENT, - MmsDatabase.QUOTE_TYPE, - MmsDatabase.QUOTE_MENTIONS, - MmsDatabase.SHARED_CONTACTS, - MmsDatabase.LINK_PREVIEWS, - MmsDatabase.VIEW_ONCE, - MmsSmsColumns.READ, - MmsSmsColumns.REACTIONS_UNREAD, - MmsSmsColumns.REACTIONS_LAST_SEEN, - MmsSmsColumns.REMOTE_DELETED, - MmsDatabase.MENTIONS_SELF, - MmsSmsColumns.NOTIFIED_TIMESTAMP, - MmsSmsColumns.VIEWED_RECEIPT_COUNT, - MmsSmsColumns.RECEIPT_TIMESTAMP, - MmsDatabase.MESSAGE_RANGES, - MmsDatabase.STORY_TYPE, - MmsDatabase.PARENT_STORY_ID}; + private static final String[] PROJECTION = { MmsSmsColumns.ID, + MmsSmsColumns.UNIQUE_ROW_ID, + SmsTable.BODY, + SmsTable.TYPE, + MmsSmsColumns.THREAD_ID, + SmsTable.RECIPIENT_ID, + SmsTable.ADDRESS_DEVICE_ID, + SmsTable.SUBJECT, + MmsSmsColumns.NORMALIZED_DATE_SENT, + MmsSmsColumns.NORMALIZED_DATE_RECEIVED, + MmsSmsColumns.DATE_SERVER, + MmsTable.MESSAGE_TYPE, + MmsTable.MESSAGE_BOX, + SmsTable.STATUS, + MmsSmsColumns.UNIDENTIFIED, + MmsTable.PART_COUNT, + MmsTable.CONTENT_LOCATION, + MmsTable.TRANSACTION_ID, + MmsTable.MESSAGE_SIZE, + MmsTable.EXPIRY, + MmsTable.STATUS, + MmsSmsColumns.DELIVERY_RECEIPT_COUNT, + MmsSmsColumns.READ_RECEIPT_COUNT, + MmsSmsColumns.MISMATCHED_IDENTITIES, + MmsTable.NETWORK_FAILURE, + MmsSmsColumns.SUBSCRIPTION_ID, + MmsSmsColumns.EXPIRES_IN, + MmsSmsColumns.EXPIRE_STARTED, + MmsSmsColumns.NOTIFIED, + TRANSPORT, + AttachmentTable.ATTACHMENT_JSON_ALIAS, + MmsTable.QUOTE_ID, + MmsTable.QUOTE_AUTHOR, + MmsTable.QUOTE_BODY, + MmsTable.QUOTE_MISSING, + MmsTable.QUOTE_ATTACHMENT, + MmsTable.QUOTE_TYPE, + MmsTable.QUOTE_MENTIONS, + MmsTable.SHARED_CONTACTS, + MmsTable.LINK_PREVIEWS, + MmsTable.VIEW_ONCE, + MmsSmsColumns.READ, + MmsSmsColumns.REACTIONS_UNREAD, + MmsSmsColumns.REACTIONS_LAST_SEEN, + MmsSmsColumns.REMOTE_DELETED, + MmsTable.MENTIONS_SELF, + MmsSmsColumns.NOTIFIED_TIMESTAMP, + MmsSmsColumns.VIEWED_RECEIPT_COUNT, + MmsSmsColumns.RECEIPT_TIMESTAMP, + MmsTable.MESSAGE_RANGES, + MmsTable.STORY_TYPE, + MmsTable.PARENT_STORY_ID}; - private static final String SNIPPET_QUERY = "SELECT " + MmsSmsColumns.ID + ", 0 AS " + TRANSPORT + ", " + SmsDatabase.TYPE + " AS " + MmsSmsColumns.NORMALIZED_TYPE + ", " + SmsDatabase.DATE_RECEIVED + " AS " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " FROM " + SmsDatabase.TABLE_NAME + " " + - "WHERE " + MmsSmsColumns.THREAD_ID + " = ? AND " + SmsDatabase.TYPE + " NOT IN (" + SmsDatabase.Types.PROFILE_CHANGE_TYPE + ", " + SmsDatabase.Types.GV1_MIGRATION_TYPE + ", " + SmsDatabase.Types.CHANGE_NUMBER_TYPE + ", " + SmsDatabase.Types.BOOST_REQUEST_TYPE + ", " + SmsDatabase.Types.SMS_EXPORT_TYPE + ") AND " + SmsDatabase.TYPE + " & " + GROUP_V2_LEAVE_BITS + " != " + GROUP_V2_LEAVE_BITS + " " + + private static final String SNIPPET_QUERY = "SELECT " + MmsSmsColumns.ID + ", 0 AS " + TRANSPORT + ", " + SmsTable.TYPE + " AS " + MmsSmsColumns.NORMALIZED_TYPE + ", " + SmsTable.DATE_RECEIVED + " AS " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " FROM " + SmsTable.TABLE_NAME + " " + + "WHERE " + MmsSmsColumns.THREAD_ID + " = ? AND " + SmsTable.TYPE + " NOT IN (" + SmsTable.Types.PROFILE_CHANGE_TYPE + ", " + SmsTable.Types.GV1_MIGRATION_TYPE + ", " + SmsTable.Types.CHANGE_NUMBER_TYPE + ", " + SmsTable.Types.BOOST_REQUEST_TYPE + ", " + SmsTable.Types.SMS_EXPORT_TYPE + ") AND " + SmsTable.TYPE + " & " + GROUP_V2_LEAVE_BITS + " != " + GROUP_V2_LEAVE_BITS + " " + "UNION ALL " + - "SELECT " + MmsSmsColumns.ID + ", 1 AS " + TRANSPORT + ", " + MmsDatabase.MESSAGE_BOX + " AS " + MmsSmsColumns.NORMALIZED_TYPE + ", " + MmsDatabase.DATE_RECEIVED + " AS " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " FROM " + MmsDatabase.TABLE_NAME + " " + - "WHERE " + MmsSmsColumns.THREAD_ID + " = ? AND " + MmsDatabase.MESSAGE_BOX + " & " + GROUP_V2_LEAVE_BITS + " != " + GROUP_V2_LEAVE_BITS + " AND " + MmsDatabase.STORY_TYPE + " = 0 AND " + MmsDatabase.PARENT_STORY_ID + " <= 0 " + + "SELECT " + MmsSmsColumns.ID + ", 1 AS " + TRANSPORT + ", " + MmsTable.MESSAGE_BOX + " AS " + MmsSmsColumns.NORMALIZED_TYPE + ", " + MmsTable.DATE_RECEIVED + " AS " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " FROM " + MmsTable.TABLE_NAME + " " + + "WHERE " + MmsSmsColumns.THREAD_ID + " = ? AND " + MmsTable.MESSAGE_BOX + " & " + GROUP_V2_LEAVE_BITS + " != " + GROUP_V2_LEAVE_BITS + " AND " + MmsTable.STORY_TYPE + " = 0 AND " + MmsTable.PARENT_STORY_ID + " <= 0 " + "ORDER BY " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " DESC " + "LIMIT 1"; - public MmsSmsDatabase(Context context, SignalDatabase databaseHelper) { + public MmsSmsTable(Context context, SignalDatabase databaseHelper) { super(context, databaseHelper); } @@ -154,9 +154,9 @@ public class MmsSmsDatabase extends Database { } private @NonNull Pair getGroupAddedBy(long threadId, long lastQuitChecked) { - MessageDatabase mmsDatabase = SignalDatabase.mms(); - MessageDatabase smsDatabase = SignalDatabase.sms(); - long latestQuit = mmsDatabase.getLatestGroupQuitTimestamp(threadId, lastQuitChecked); + MessageTable mmsDatabase = SignalDatabase.mms(); + MessageTable smsDatabase = SignalDatabase.sms(); + long latestQuit = mmsDatabase.getLatestGroupQuitTimestamp(threadId, lastQuitChecked); RecipientId id = smsDatabase.getOldestGroupUpdateSender(threadId, latestQuit); return new Pair<>(id, latestQuit); @@ -166,7 +166,7 @@ public class MmsSmsDatabase extends Database { String[] projection = new String[] { "COUNT(*)" }; String selection = MmsSmsColumns.THREAD_ID + " = " + threadId + " AND " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " >= " + timestamp + " AND " + - MmsDatabase.STORY_TYPE + " = 0 AND " + MmsDatabase.PARENT_STORY_ID + " <= 0"; + MmsTable.STORY_TYPE + " = 0 AND " + MmsTable.PARENT_STORY_ID + " <= 0"; try (Cursor cursor = queryTables(projection, selection, null, null, false)) { if (cursor != null && cursor.moveToNext()) { @@ -180,7 +180,7 @@ public class MmsSmsDatabase extends Database { Recipient author = Recipient.resolved(authorId); try (Cursor cursor = queryTables(PROJECTION, MmsSmsColumns.NORMALIZED_DATE_SENT + " = " + timestamp, null, null, true)) { - MmsSmsDatabase.Reader reader = readerFor(cursor); + MmsSmsTable.Reader reader = readerFor(cursor); MessageRecord messageRecord; @@ -211,7 +211,7 @@ public class MmsSmsDatabase extends Database { public Cursor getConversation(long threadId, long offset, long limit) { SQLiteDatabase db = databaseHelper.getSignalReadableDatabase(); String order = MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " DESC"; - String selection = MmsSmsColumns.THREAD_ID + " = " + threadId + " AND " + MmsDatabase.STORY_TYPE + " = 0 AND " + MmsDatabase.PARENT_STORY_ID + " <= 0"; + String selection = MmsSmsColumns.THREAD_ID + " = " + threadId + " AND " + MmsTable.STORY_TYPE + " = 0 AND " + MmsTable.PARENT_STORY_ID + " <= 0"; String limitStr = limit > 0 || offset > 0 ? offset + ", " + limit : null; String query = buildQuery(PROJECTION, selection, order, limitStr, false); @@ -274,7 +274,7 @@ public class MmsSmsDatabase extends Database { } String order = MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " ASC"; - String selection = MmsSmsColumns.NOTIFIED + " = 0 AND " + MmsDatabase.STORY_TYPE + " = 0 AND (" + MmsSmsColumns.READ + " = 0 OR " + MmsSmsColumns.REACTIONS_UNREAD + " = 1" + (stickyQuery.length() > 0 ? " OR (" + stickyQuery + ")" : "") + ")"; + String selection = MmsSmsColumns.NOTIFIED + " = 0 AND " + MmsTable.STORY_TYPE + " = 0 AND (" + MmsSmsColumns.READ + " = 0 OR " + MmsSmsColumns.REACTIONS_UNREAD + " = 1" + (stickyQuery.length() > 0 ? " OR (" + stickyQuery + ")" : "") + ")"; return queryTables(PROJECTION, selection, order, null, true); } @@ -286,10 +286,10 @@ public class MmsSmsDatabase extends Database { RecipientId author = messageRecord.isOutgoing() ? Recipient.self().getId() : messageRecord.getRecipient().getId(); long timestamp = messageRecord.getDateSent(); - String where = MmsDatabase.QUOTE_ID + " = ? AND " + MmsDatabase.QUOTE_AUTHOR + " = ?"; + String where = MmsTable.QUOTE_ID + " = ? AND " + MmsTable.QUOTE_AUTHOR + " = ?"; String[] whereArgs = SqlUtil.buildArgs(timestamp, author); - try (Cursor cursor = getReadableDatabase().query(MmsDatabase.TABLE_NAME, new String[]{ "1" }, where, whereArgs, null, null, null, "1")) { + try (Cursor cursor = getReadableDatabase().query(MmsTable.TABLE_NAME, new String[]{ "1" }, where, whereArgs, null, null, null, "1")) { return cursor.moveToFirst(); } } @@ -303,7 +303,7 @@ public class MmsSmsDatabase extends Database { } RecipientId author = targetMessage.isOutgoing() ? Recipient.self().getId() : targetMessage.getRecipient().getId(); - String query = MmsDatabase.QUOTE_ID + " = " + targetMessage.getDateSent() + " AND " + MmsDatabase.QUOTE_AUTHOR + " = " + author.serialize(); + String query = MmsTable.QUOTE_ID + " = " + targetMessage.getDateSent() + " AND " + MmsTable.QUOTE_AUTHOR + " = " + author.serialize(); String order = MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " DESC"; List records = new ArrayList<>(); @@ -331,14 +331,14 @@ public class MmsSmsDatabase extends Database { private @NonNull String getStickyWherePartForParentStoryId(@Nullable Long parentStoryId) { if (parentStoryId == null) { - return " AND " + MmsDatabase.PARENT_STORY_ID + " <= 0"; + return " AND " + MmsTable.PARENT_STORY_ID + " <= 0"; } - return " AND " + MmsDatabase.PARENT_STORY_ID + " = " + parentStoryId; + return " AND " + MmsTable.PARENT_STORY_ID + " = " + parentStoryId; } public int getUnreadCount(long threadId) { - String selection = MmsSmsColumns.READ + " = 0 AND " + MmsDatabase.STORY_TYPE + " = 0 AND " + MmsSmsColumns.THREAD_ID + " = " + threadId + " AND " + MmsDatabase.PARENT_STORY_ID + " <= 0"; + String selection = MmsSmsColumns.READ + " = 0 AND " + MmsTable.STORY_TYPE + " = 0 AND " + MmsSmsColumns.THREAD_ID + " = " + threadId + " AND " + MmsTable.PARENT_STORY_ID + " <= 0"; try (Cursor cursor = queryTables(PROJECTION, selection, null, null, false)) { return cursor != null ? cursor.getCount() : 0; @@ -346,8 +346,8 @@ public class MmsSmsDatabase extends Database { } public boolean checkMessageExists(@NonNull MessageRecord messageRecord) { - MessageDatabase db = messageRecord.isMms() ? SignalDatabase.mms() - : SignalDatabase.sms(); + MessageTable db = messageRecord.isMms() ? SignalDatabase.mms() + : SignalDatabase.sms(); try (Cursor cursor = db.getMessageCursor(messageRecord.getId())) { return cursor != null && cursor.getCount() > 0; @@ -468,37 +468,37 @@ public class MmsSmsDatabase extends Database { } public Collection incrementDeliveryReceiptCounts(@NonNull List syncMessageIds, long timestamp) { - return incrementReceiptCounts(syncMessageIds, timestamp, MessageDatabase.ReceiptType.DELIVERY); + return incrementReceiptCounts(syncMessageIds, timestamp, MessageTable.ReceiptType.DELIVERY); } public boolean incrementDeliveryReceiptCount(SyncMessageId syncMessageId, long timestamp) { - return incrementReceiptCount(syncMessageId, timestamp, MessageDatabase.ReceiptType.DELIVERY); + return incrementReceiptCount(syncMessageId, timestamp, MessageTable.ReceiptType.DELIVERY); } /** * @return A list of ID's that were not updated. */ public @NonNull Collection incrementReadReceiptCounts(@NonNull List syncMessageIds, long timestamp) { - return incrementReceiptCounts(syncMessageIds, timestamp, MessageDatabase.ReceiptType.READ); + return incrementReceiptCounts(syncMessageIds, timestamp, MessageTable.ReceiptType.READ); } public boolean incrementReadReceiptCount(SyncMessageId syncMessageId, long timestamp) { - return incrementReceiptCount(syncMessageId, timestamp, MessageDatabase.ReceiptType.READ); + return incrementReceiptCount(syncMessageId, timestamp, MessageTable.ReceiptType.READ); } /** * @return A list of ID's that were not updated. */ public @NonNull Collection incrementViewedReceiptCounts(@NonNull List syncMessageIds, long timestamp) { - return incrementReceiptCounts(syncMessageIds, timestamp, MessageDatabase.ReceiptType.VIEWED); + return incrementReceiptCounts(syncMessageIds, timestamp, MessageTable.ReceiptType.VIEWED); } public @NonNull Collection incrementViewedNonStoryReceiptCounts(@NonNull List syncMessageIds, long timestamp) { - return incrementReceiptCounts(syncMessageIds, timestamp, MessageDatabase.ReceiptType.VIEWED, MessageDatabase.MessageQualifier.NORMAL); + return incrementReceiptCounts(syncMessageIds, timestamp, MessageTable.ReceiptType.VIEWED, MessageTable.MessageQualifier.NORMAL); } public boolean incrementViewedReceiptCount(SyncMessageId syncMessageId, long timestamp) { - return incrementReceiptCount(syncMessageId, timestamp, MessageDatabase.ReceiptType.VIEWED); + return incrementReceiptCount(syncMessageId, timestamp, MessageTable.ReceiptType.VIEWED); } public @NonNull Collection incrementViewedStoryReceiptCounts(@NonNull List syncMessageIds, long timestamp) { @@ -509,7 +509,7 @@ public class MmsSmsDatabase extends Database { db.beginTransaction(); try { for (SyncMessageId id : syncMessageIds) { - Set updates = incrementReceiptCountInternal(id, timestamp, MessageDatabase.ReceiptType.VIEWED, MessageDatabase.MessageQualifier.STORY); + Set updates = incrementReceiptCountInternal(id, timestamp, MessageTable.ReceiptType.VIEWED, MessageTable.MessageQualifier.STORY); if (updates.size() > 0) { messageUpdates.addAll(updates); @@ -540,13 +540,13 @@ public class MmsSmsDatabase extends Database { * * @return Whether or not some thread was updated. */ - private boolean incrementReceiptCount(SyncMessageId syncMessageId, long timestamp, @NonNull MessageDatabase.ReceiptType receiptType) { - return incrementReceiptCount(syncMessageId, timestamp, receiptType, MessageDatabase.MessageQualifier.ALL); + private boolean incrementReceiptCount(SyncMessageId syncMessageId, long timestamp, @NonNull MessageTable.ReceiptType receiptType) { + return incrementReceiptCount(syncMessageId, timestamp, receiptType, MessageTable.MessageQualifier.ALL); } - private boolean incrementReceiptCount(SyncMessageId syncMessageId, long timestamp, @NonNull MessageDatabase.ReceiptType receiptType, @NonNull MessageDatabase.MessageQualifier messageQualifier) { + private boolean incrementReceiptCount(SyncMessageId syncMessageId, long timestamp, @NonNull MessageTable.ReceiptType receiptType, @NonNull MessageTable.MessageQualifier messageQualifier) { SQLiteDatabase db = databaseHelper.getSignalWritableDatabase(); - ThreadDatabase threadDatabase = SignalDatabase.threads(); + ThreadTable threadTable = SignalDatabase.threads(); Set messageUpdates = new HashSet<>(); db.beginTransaction(); @@ -554,7 +554,7 @@ public class MmsSmsDatabase extends Database { messageUpdates = incrementReceiptCountInternal(syncMessageId, timestamp, receiptType, messageQualifier); for (MessageUpdate messageUpdate : messageUpdates) { - threadDatabase.update(messageUpdate.getThreadId(), false); + threadTable.update(messageUpdate.getThreadId(), false); } db.setTransactionSuccessful(); @@ -574,14 +574,14 @@ public class MmsSmsDatabase extends Database { * * @return All of the messages that didn't result in updates. */ - private @NonNull Collection incrementReceiptCounts(@NonNull List syncMessageIds, long timestamp, @NonNull MessageDatabase.ReceiptType receiptType) { - return incrementReceiptCounts(syncMessageIds, timestamp, receiptType, MessageDatabase.MessageQualifier.ALL); + private @NonNull Collection incrementReceiptCounts(@NonNull List syncMessageIds, long timestamp, @NonNull MessageTable.ReceiptType receiptType) { + return incrementReceiptCounts(syncMessageIds, timestamp, receiptType, MessageTable.MessageQualifier.ALL); } - private @NonNull Collection incrementReceiptCounts(@NonNull List syncMessageIds, long timestamp, @NonNull MessageDatabase.ReceiptType receiptType, @NonNull MessageDatabase.MessageQualifier messageQualifier) { - SQLiteDatabase db = databaseHelper.getSignalWritableDatabase(); - ThreadDatabase threadDatabase = SignalDatabase.threads(); - Set messageUpdates = new HashSet<>(); + private @NonNull Collection incrementReceiptCounts(@NonNull List syncMessageIds, long timestamp, @NonNull MessageTable.ReceiptType receiptType, @NonNull MessageTable.MessageQualifier messageQualifier) { + SQLiteDatabase db = databaseHelper.getSignalWritableDatabase(); + ThreadTable threadTable = SignalDatabase.threads(); + Set messageUpdates = new HashSet<>(); Collection unhandled = new HashSet<>(); db.beginTransaction(); @@ -597,7 +597,7 @@ public class MmsSmsDatabase extends Database { } for (MessageUpdate update : messageUpdates) { - threadDatabase.updateSilently(update.getThreadId(), false); + threadTable.updateSilently(update.getThreadId(), false); } db.setTransactionSuccessful(); @@ -621,7 +621,7 @@ public class MmsSmsDatabase extends Database { /** * Doesn't do any transactions or updates, so we can re-use the method safely. */ - private @NonNull Set incrementReceiptCountInternal(SyncMessageId syncMessageId, long timestamp, MessageDatabase.ReceiptType receiptType, @NonNull MessageDatabase.MessageQualifier messageQualifier) { + private @NonNull Set incrementReceiptCountInternal(SyncMessageId syncMessageId, long timestamp, MessageTable.ReceiptType receiptType, @NonNull MessageTable.MessageQualifier messageQualifier) { Set messageUpdates = new HashSet<>(); messageUpdates.addAll(SignalDatabase.sms().incrementReceiptCount(syncMessageId, timestamp, receiptType, messageQualifier)); @@ -635,7 +635,7 @@ public class MmsSmsDatabase extends Database { } private @NonNull MessageExportState getMessageExportState(@NonNull MessageId messageId) throws NoSuchMessageException { - String table = messageId.isMms() ? MmsDatabase.TABLE_NAME : SmsDatabase.TABLE_NAME; + String table = messageId.isMms() ? MmsTable.TABLE_NAME : SmsTable.TABLE_NAME; String[] projection = SqlUtil.buildArgs(MmsSmsColumns.EXPORT_STATE); String[] args = SqlUtil.buildArgs(messageId.getId()); @@ -674,7 +674,7 @@ public class MmsSmsDatabase extends Database { } public void markMessageExported(@NonNull MessageId messageId) { - String table = messageId.isMms() ? MmsDatabase.TABLE_NAME : SmsDatabase.TABLE_NAME; + String table = messageId.isMms() ? MmsTable.TABLE_NAME : SmsTable.TABLE_NAME; ContentValues contentValues = new ContentValues(1); contentValues.put(MmsSmsColumns.EXPORTED, MessageExportStatus.EXPORTED.getCode()); @@ -683,7 +683,7 @@ public class MmsSmsDatabase extends Database { } public void markMessageExportFailed(@NonNull MessageId messageId) { - String table = messageId.isMms() ? MmsDatabase.TABLE_NAME : SmsDatabase.TABLE_NAME; + String table = messageId.isMms() ? MmsTable.TABLE_NAME : SmsTable.TABLE_NAME; ContentValues contentValues = new ContentValues(1); contentValues.put(MmsSmsColumns.EXPORTED, MessageExportStatus.ERROR.getCode()); @@ -692,7 +692,7 @@ public class MmsSmsDatabase extends Database { } private void setMessageExportState(@NonNull MessageId messageId, @NonNull MessageExportState messageExportState) { - String table = messageId.isMms() ? MmsDatabase.TABLE_NAME : SmsDatabase.TABLE_NAME; + String table = messageId.isMms() ? MmsTable.TABLE_NAME : SmsTable.TABLE_NAME; ContentValues contentValues = new ContentValues(1); contentValues.put(MmsSmsColumns.EXPORT_STATE, messageExportState.toByteArray()); @@ -762,7 +762,7 @@ 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 " + MmsDatabase.STORY_TYPE + " = 0" + " AND " + MmsDatabase.PARENT_STORY_ID + " <= 0"; + String selection = MmsSmsColumns.THREAD_ID + " = " + threadId + " AND " + MmsTable.STORY_TYPE + " = 0" + " AND " + MmsTable.PARENT_STORY_ID + " <= 0"; try (Cursor cursor = queryTables(new String[]{ MmsSmsColumns.NORMALIZED_DATE_SENT, MmsSmsColumns.RECIPIENT_ID, MmsSmsColumns.REMOTE_DELETED}, selection, order, null, false)) { boolean isOwnNumber = Recipient.resolved(recipientId).isSelf(); @@ -785,7 +785,7 @@ 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 " + MmsDatabase.STORY_TYPE + " = 0" + " AND " + MmsDatabase.PARENT_STORY_ID + " <= 0"; + String selection = MmsSmsColumns.THREAD_ID + " = " + threadId + " AND " + MmsTable.STORY_TYPE + " = 0" + " AND " + MmsTable.PARENT_STORY_ID + " <= 0"; try (Cursor cursor = queryTables(new String[]{ MmsSmsColumns.NORMALIZED_DATE_RECEIVED, MmsSmsColumns.RECIPIENT_ID, MmsSmsColumns.REMOTE_DELETED}, selection, order, null, false)) { boolean isOwnNumber = Recipient.resolved(recipientId).isSelf(); @@ -834,12 +834,12 @@ public class MmsSmsDatabase extends Database { order = MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " ASC"; selection = MmsSmsColumns.THREAD_ID + " = " + threadId + " AND " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " < " + receivedTimestamp + " AND " + - MmsDatabase.STORY_TYPE + " = 0 AND " + MmsDatabase.PARENT_STORY_ID + " = " + groupStoryId; + MmsTable.STORY_TYPE + " = 0 AND " + MmsTable.PARENT_STORY_ID + " = " + groupStoryId; } else { order = MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " DESC"; selection = MmsSmsColumns.THREAD_ID + " = " + threadId + " AND " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " > " + receivedTimestamp + " AND " + - MmsDatabase.STORY_TYPE + " = 0 AND " + MmsDatabase.PARENT_STORY_ID + " <= 0"; + MmsTable.STORY_TYPE + " = 0 AND " + MmsTable.PARENT_STORY_ID + " <= 0"; } try (Cursor cursor = queryTables(new String[]{ "COUNT(*)" }, selection, order, null, false)) { @@ -881,8 +881,8 @@ public class MmsSmsDatabase extends Database { SignalDatabase.mms().deleteAbandonedMessages(); } - public @NonNull List getReportSpamMessageServerData(long threadId, long timestamp, int limit) { - List data = new ArrayList<>(); + public @NonNull List getReportSpamMessageServerData(long threadId, long timestamp, int limit) { + List data = new ArrayList<>(); data.addAll(SignalDatabase.sms().getReportSpamMessageServerGuids(threadId, timestamp)); data.addAll(SignalDatabase.mms().getReportSpamMessageServerGuids(threadId, timestamp)); return data.stream() @@ -894,126 +894,126 @@ public class MmsSmsDatabase extends Database { private static @NonNull String buildQuery(String[] projection, String selection, String order, String limit, boolean includeAttachments) { String attachmentJsonJoin; if (includeAttachments) { - attachmentJsonJoin = "json_group_array(json_object(" + "'" + AttachmentDatabase.ROW_ID + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.ROW_ID + ", " + - "'" + AttachmentDatabase.UNIQUE_ID + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.UNIQUE_ID + ", " + - "'" + AttachmentDatabase.MMS_ID + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.MMS_ID + "," + - "'" + AttachmentDatabase.SIZE + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.SIZE + ", " + - "'" + AttachmentDatabase.FILE_NAME + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.FILE_NAME + ", " + - "'" + AttachmentDatabase.DATA + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.DATA + ", " + - "'" + AttachmentDatabase.CONTENT_TYPE + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.CONTENT_TYPE + ", " + - "'" + AttachmentDatabase.CDN_NUMBER + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.CDN_NUMBER + ", " + - "'" + AttachmentDatabase.CONTENT_LOCATION + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.CONTENT_LOCATION + ", " + - "'" + AttachmentDatabase.FAST_PREFLIGHT_ID + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.FAST_PREFLIGHT_ID + ", " + - "'" + AttachmentDatabase.VOICE_NOTE + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.VOICE_NOTE + ", " + - "'" + AttachmentDatabase.BORDERLESS + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.BORDERLESS + ", " + - "'" + AttachmentDatabase.VIDEO_GIF + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.VIDEO_GIF + ", " + - "'" + AttachmentDatabase.WIDTH + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.WIDTH + ", " + - "'" + AttachmentDatabase.HEIGHT + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.HEIGHT + ", " + - "'" + AttachmentDatabase.QUOTE + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.QUOTE + ", " + - "'" + AttachmentDatabase.CONTENT_DISPOSITION + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.CONTENT_DISPOSITION + ", " + - "'" + AttachmentDatabase.NAME + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.NAME + ", " + - "'" + AttachmentDatabase.TRANSFER_STATE + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.TRANSFER_STATE + ", " + - "'" + AttachmentDatabase.CAPTION + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.CAPTION + ", " + - "'" + AttachmentDatabase.STICKER_PACK_ID + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.STICKER_PACK_ID + ", " + - "'" + AttachmentDatabase.STICKER_PACK_KEY + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.STICKER_PACK_KEY + ", " + - "'" + AttachmentDatabase.STICKER_ID + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.STICKER_ID + ", " + - "'" + AttachmentDatabase.STICKER_EMOJI + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.STICKER_EMOJI + ", " + - "'" + AttachmentDatabase.VISUAL_HASH + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.VISUAL_HASH + ", " + - "'" + AttachmentDatabase.TRANSFORM_PROPERTIES + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.TRANSFORM_PROPERTIES + ", " + - "'" + AttachmentDatabase.DISPLAY_ORDER + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.DISPLAY_ORDER + ", " + - "'" + AttachmentDatabase.UPLOAD_TIMESTAMP + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.UPLOAD_TIMESTAMP + "))"; + attachmentJsonJoin = "json_group_array(json_object(" + "'" + AttachmentTable.ROW_ID + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.ROW_ID + ", " + + "'" + AttachmentTable.UNIQUE_ID + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.UNIQUE_ID + ", " + + "'" + AttachmentTable.MMS_ID + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.MMS_ID + "," + + "'" + AttachmentTable.SIZE + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.SIZE + ", " + + "'" + AttachmentTable.FILE_NAME + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.FILE_NAME + ", " + + "'" + AttachmentTable.DATA + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.DATA + ", " + + "'" + AttachmentTable.CONTENT_TYPE + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.CONTENT_TYPE + ", " + + "'" + AttachmentTable.CDN_NUMBER + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.CDN_NUMBER + ", " + + "'" + AttachmentTable.CONTENT_LOCATION + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.CONTENT_LOCATION + ", " + + "'" + AttachmentTable.FAST_PREFLIGHT_ID + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.FAST_PREFLIGHT_ID + ", " + + "'" + AttachmentTable.VOICE_NOTE + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.VOICE_NOTE + ", " + + "'" + AttachmentTable.BORDERLESS + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.BORDERLESS + ", " + + "'" + AttachmentTable.VIDEO_GIF + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.VIDEO_GIF + ", " + + "'" + AttachmentTable.WIDTH + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.WIDTH + ", " + + "'" + AttachmentTable.HEIGHT + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.HEIGHT + ", " + + "'" + AttachmentTable.QUOTE + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.QUOTE + ", " + + "'" + AttachmentTable.CONTENT_DISPOSITION + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.CONTENT_DISPOSITION + ", " + + "'" + AttachmentTable.NAME + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.NAME + ", " + + "'" + AttachmentTable.TRANSFER_STATE + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.TRANSFER_STATE + ", " + + "'" + AttachmentTable.CAPTION + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.CAPTION + ", " + + "'" + AttachmentTable.STICKER_PACK_ID + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.STICKER_PACK_ID + ", " + + "'" + AttachmentTable.STICKER_PACK_KEY + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.STICKER_PACK_KEY + ", " + + "'" + AttachmentTable.STICKER_ID + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.STICKER_ID + ", " + + "'" + AttachmentTable.STICKER_EMOJI + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.STICKER_EMOJI + ", " + + "'" + AttachmentTable.VISUAL_HASH + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.VISUAL_HASH + ", " + + "'" + AttachmentTable.TRANSFORM_PROPERTIES + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.TRANSFORM_PROPERTIES + ", " + + "'" + AttachmentTable.DISPLAY_ORDER + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.DISPLAY_ORDER + ", " + + "'" + AttachmentTable.UPLOAD_TIMESTAMP + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.UPLOAD_TIMESTAMP + "))"; } else { attachmentJsonJoin = "NULL"; } - String[] mmsProjection = {MmsDatabase.DATE_SENT + " AS " + MmsSmsColumns.NORMALIZED_DATE_SENT, - MmsDatabase.DATE_RECEIVED + " AS " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED, - MmsDatabase.TABLE_NAME + "." + MmsDatabase.ID + " AS " + MmsSmsColumns.ID, - "'MMS::' || " + MmsDatabase.TABLE_NAME + "." + MmsDatabase.ID + " || '::' || " + MmsDatabase.DATE_SENT + " AS " + MmsSmsColumns.UNIQUE_ROW_ID, - attachmentJsonJoin + " AS " + AttachmentDatabase.ATTACHMENT_JSON_ALIAS, - SmsDatabase.BODY, - MmsSmsColumns.READ, - MmsSmsColumns.THREAD_ID, - SmsDatabase.TYPE, - SmsDatabase.RECIPIENT_ID, - SmsDatabase.ADDRESS_DEVICE_ID, - SmsDatabase.SUBJECT, - MmsDatabase.MESSAGE_TYPE, - MmsDatabase.MESSAGE_BOX, - SmsDatabase.STATUS, - MmsDatabase.PART_COUNT, - MmsDatabase.CONTENT_LOCATION, - MmsDatabase.TRANSACTION_ID, - MmsDatabase.MESSAGE_SIZE, - MmsDatabase.EXPIRY, - MmsDatabase.STATUS, - MmsDatabase.UNIDENTIFIED, - MmsSmsColumns.DELIVERY_RECEIPT_COUNT, - MmsSmsColumns.READ_RECEIPT_COUNT, - MmsSmsColumns.MISMATCHED_IDENTITIES, - MmsSmsColumns.SUBSCRIPTION_ID, - MmsSmsColumns.EXPIRES_IN, - MmsSmsColumns.EXPIRE_STARTED, - MmsSmsColumns.NOTIFIED, - MmsDatabase.NETWORK_FAILURE, TRANSPORT, - MmsDatabase.QUOTE_ID, - MmsDatabase.QUOTE_AUTHOR, - MmsDatabase.QUOTE_BODY, - MmsDatabase.QUOTE_MISSING, - MmsDatabase.QUOTE_ATTACHMENT, - MmsDatabase.QUOTE_TYPE, - MmsDatabase.QUOTE_MENTIONS, - MmsDatabase.SHARED_CONTACTS, - MmsDatabase.LINK_PREVIEWS, - MmsDatabase.VIEW_ONCE, - MmsSmsColumns.REACTIONS_UNREAD, - MmsSmsColumns.REACTIONS_LAST_SEEN, - MmsSmsColumns.DATE_SERVER, - MmsSmsColumns.REMOTE_DELETED, - MmsDatabase.MENTIONS_SELF, - MmsSmsColumns.NOTIFIED_TIMESTAMP, - MmsSmsColumns.VIEWED_RECEIPT_COUNT, - MmsSmsColumns.RECEIPT_TIMESTAMP, - MmsDatabase.MESSAGE_RANGES, - MmsDatabase.STORY_TYPE, - MmsDatabase.PARENT_STORY_ID}; + String[] mmsProjection = { MmsTable.DATE_SENT + " AS " + MmsSmsColumns.NORMALIZED_DATE_SENT, + MmsTable.DATE_RECEIVED + " AS " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED, + MmsTable.TABLE_NAME + "." + MmsTable.ID + " AS " + MmsSmsColumns.ID, + "'MMS::' || " + MmsTable.TABLE_NAME + "." + MmsTable.ID + " || '::' || " + MmsTable.DATE_SENT + " AS " + MmsSmsColumns.UNIQUE_ROW_ID, + attachmentJsonJoin + " AS " + AttachmentTable.ATTACHMENT_JSON_ALIAS, + SmsTable.BODY, + MmsSmsColumns.READ, + MmsSmsColumns.THREAD_ID, + SmsTable.TYPE, + SmsTable.RECIPIENT_ID, + SmsTable.ADDRESS_DEVICE_ID, + SmsTable.SUBJECT, + MmsTable.MESSAGE_TYPE, + MmsTable.MESSAGE_BOX, + SmsTable.STATUS, + MmsTable.PART_COUNT, + MmsTable.CONTENT_LOCATION, + MmsTable.TRANSACTION_ID, + MmsTable.MESSAGE_SIZE, + MmsTable.EXPIRY, + MmsTable.STATUS, + MmsTable.UNIDENTIFIED, + MmsSmsColumns.DELIVERY_RECEIPT_COUNT, + MmsSmsColumns.READ_RECEIPT_COUNT, + MmsSmsColumns.MISMATCHED_IDENTITIES, + MmsSmsColumns.SUBSCRIPTION_ID, + MmsSmsColumns.EXPIRES_IN, + MmsSmsColumns.EXPIRE_STARTED, + MmsSmsColumns.NOTIFIED, + MmsTable.NETWORK_FAILURE, TRANSPORT, + MmsTable.QUOTE_ID, + MmsTable.QUOTE_AUTHOR, + MmsTable.QUOTE_BODY, + MmsTable.QUOTE_MISSING, + MmsTable.QUOTE_ATTACHMENT, + MmsTable.QUOTE_TYPE, + MmsTable.QUOTE_MENTIONS, + MmsTable.SHARED_CONTACTS, + MmsTable.LINK_PREVIEWS, + MmsTable.VIEW_ONCE, + MmsSmsColumns.REACTIONS_UNREAD, + MmsSmsColumns.REACTIONS_LAST_SEEN, + MmsSmsColumns.DATE_SERVER, + MmsSmsColumns.REMOTE_DELETED, + MmsTable.MENTIONS_SELF, + MmsSmsColumns.NOTIFIED_TIMESTAMP, + MmsSmsColumns.VIEWED_RECEIPT_COUNT, + MmsSmsColumns.RECEIPT_TIMESTAMP, + MmsTable.MESSAGE_RANGES, + MmsTable.STORY_TYPE, + MmsTable.PARENT_STORY_ID}; - String[] smsProjection = {SmsDatabase.DATE_SENT + " AS " + MmsSmsColumns.NORMALIZED_DATE_SENT, - SmsDatabase.DATE_RECEIVED + " AS " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED, - MmsSmsColumns.ID, "'SMS::' || " + MmsSmsColumns.ID + " || '::' || " + SmsDatabase.DATE_SENT + " AS " + MmsSmsColumns.UNIQUE_ROW_ID, - "NULL AS " + AttachmentDatabase.ATTACHMENT_JSON_ALIAS, - SmsDatabase.BODY, MmsSmsColumns.READ, MmsSmsColumns.THREAD_ID, - SmsDatabase.TYPE, SmsDatabase.RECIPIENT_ID, SmsDatabase.ADDRESS_DEVICE_ID, SmsDatabase.SUBJECT, MmsDatabase.MESSAGE_TYPE, - MmsDatabase.MESSAGE_BOX, SmsDatabase.STATUS, MmsDatabase.PART_COUNT, - MmsDatabase.CONTENT_LOCATION, MmsDatabase.TRANSACTION_ID, - MmsDatabase.MESSAGE_SIZE, MmsDatabase.EXPIRY, MmsDatabase.STATUS, - MmsDatabase.UNIDENTIFIED, - MmsSmsColumns.DELIVERY_RECEIPT_COUNT, MmsSmsColumns.READ_RECEIPT_COUNT, - MmsSmsColumns.MISMATCHED_IDENTITIES, - MmsSmsColumns.SUBSCRIPTION_ID, MmsSmsColumns.EXPIRES_IN, MmsSmsColumns.EXPIRE_STARTED, - MmsSmsColumns.NOTIFIED, - MmsDatabase.NETWORK_FAILURE, TRANSPORT, - MmsDatabase.QUOTE_ID, - MmsDatabase.QUOTE_AUTHOR, - MmsDatabase.QUOTE_BODY, - MmsDatabase.QUOTE_MISSING, - MmsDatabase.QUOTE_ATTACHMENT, - MmsDatabase.QUOTE_TYPE, - MmsDatabase.QUOTE_MENTIONS, - MmsDatabase.SHARED_CONTACTS, - MmsDatabase.LINK_PREVIEWS, - MmsDatabase.VIEW_ONCE, - MmsSmsColumns.REACTIONS_UNREAD, - MmsSmsColumns.REACTIONS_LAST_SEEN, - MmsSmsColumns.DATE_SERVER, - MmsSmsColumns.REMOTE_DELETED, - MmsDatabase.MENTIONS_SELF, - MmsSmsColumns.NOTIFIED_TIMESTAMP, - MmsSmsColumns.VIEWED_RECEIPT_COUNT, - MmsSmsColumns.RECEIPT_TIMESTAMP, - MmsDatabase.MESSAGE_RANGES, - "0 AS " + MmsDatabase.STORY_TYPE, - "0 AS " + MmsDatabase.PARENT_STORY_ID}; + String[] smsProjection = { SmsTable.DATE_SENT + " AS " + MmsSmsColumns.NORMALIZED_DATE_SENT, + SmsTable.DATE_RECEIVED + " AS " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED, + MmsSmsColumns.ID, "'SMS::' || " + MmsSmsColumns.ID + " || '::' || " + SmsTable.DATE_SENT + " AS " + MmsSmsColumns.UNIQUE_ROW_ID, + "NULL AS " + AttachmentTable.ATTACHMENT_JSON_ALIAS, + SmsTable.BODY, MmsSmsColumns.READ, MmsSmsColumns.THREAD_ID, + SmsTable.TYPE, SmsTable.RECIPIENT_ID, SmsTable.ADDRESS_DEVICE_ID, SmsTable.SUBJECT, MmsTable.MESSAGE_TYPE, + MmsTable.MESSAGE_BOX, SmsTable.STATUS, MmsTable.PART_COUNT, + MmsTable.CONTENT_LOCATION, MmsTable.TRANSACTION_ID, + MmsTable.MESSAGE_SIZE, MmsTable.EXPIRY, MmsTable.STATUS, + MmsTable.UNIDENTIFIED, + MmsSmsColumns.DELIVERY_RECEIPT_COUNT, MmsSmsColumns.READ_RECEIPT_COUNT, + MmsSmsColumns.MISMATCHED_IDENTITIES, + MmsSmsColumns.SUBSCRIPTION_ID, MmsSmsColumns.EXPIRES_IN, MmsSmsColumns.EXPIRE_STARTED, + MmsSmsColumns.NOTIFIED, + MmsTable.NETWORK_FAILURE, TRANSPORT, + MmsTable.QUOTE_ID, + MmsTable.QUOTE_AUTHOR, + MmsTable.QUOTE_BODY, + MmsTable.QUOTE_MISSING, + MmsTable.QUOTE_ATTACHMENT, + MmsTable.QUOTE_TYPE, + MmsTable.QUOTE_MENTIONS, + MmsTable.SHARED_CONTACTS, + MmsTable.LINK_PREVIEWS, + MmsTable.VIEW_ONCE, + MmsSmsColumns.REACTIONS_UNREAD, + MmsSmsColumns.REACTIONS_LAST_SEEN, + MmsSmsColumns.DATE_SERVER, + MmsSmsColumns.REMOTE_DELETED, + MmsTable.MENTIONS_SELF, + MmsSmsColumns.NOTIFIED_TIMESTAMP, + MmsSmsColumns.VIEWED_RECEIPT_COUNT, + MmsSmsColumns.RECEIPT_TIMESTAMP, + MmsTable.MESSAGE_RANGES, + "0 AS " + MmsTable.STORY_TYPE, + "0 AS " + MmsTable.PARENT_STORY_ID}; SQLiteQueryBuilder mmsQueryBuilder = new SQLiteQueryBuilder(); SQLiteQueryBuilder smsQueryBuilder = new SQLiteQueryBuilder(); @@ -1023,13 +1023,13 @@ public class MmsSmsDatabase extends Database { smsQueryBuilder.setDistinct(true); } - smsQueryBuilder.setTables(SmsDatabase.TABLE_NAME); + smsQueryBuilder.setTables(SmsTable.TABLE_NAME); if (includeAttachments) { - mmsQueryBuilder.setTables(MmsDatabase.TABLE_NAME + " LEFT OUTER JOIN " + AttachmentDatabase.TABLE_NAME + - " ON " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.MMS_ID + " = " + MmsDatabase.TABLE_NAME + "." + MmsDatabase.ID); + mmsQueryBuilder.setTables(MmsTable.TABLE_NAME + " LEFT OUTER JOIN " + AttachmentTable.TABLE_NAME + + " ON " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.MMS_ID + " = " + MmsTable.TABLE_NAME + "." + MmsTable.ID); } else { - mmsQueryBuilder.setTables(MmsDatabase.TABLE_NAME); + mmsQueryBuilder.setTables(MmsTable.TABLE_NAME); } Set mmsColumnsPresent = new HashSet<>(); @@ -1045,40 +1045,40 @@ public class MmsSmsDatabase extends Database { mmsColumnsPresent.add(MmsSmsColumns.SUBSCRIPTION_ID); mmsColumnsPresent.add(MmsSmsColumns.EXPIRES_IN); mmsColumnsPresent.add(MmsSmsColumns.EXPIRE_STARTED); - mmsColumnsPresent.add(MmsDatabase.MESSAGE_TYPE); - mmsColumnsPresent.add(MmsDatabase.MESSAGE_BOX); - mmsColumnsPresent.add(MmsDatabase.DATE_SENT); - mmsColumnsPresent.add(MmsDatabase.DATE_RECEIVED); - mmsColumnsPresent.add(MmsDatabase.DATE_SERVER); - mmsColumnsPresent.add(MmsDatabase.PART_COUNT); - mmsColumnsPresent.add(MmsDatabase.CONTENT_LOCATION); - mmsColumnsPresent.add(MmsDatabase.TRANSACTION_ID); - mmsColumnsPresent.add(MmsDatabase.MESSAGE_SIZE); - mmsColumnsPresent.add(MmsDatabase.EXPIRY); - mmsColumnsPresent.add(MmsDatabase.NOTIFIED); - mmsColumnsPresent.add(MmsDatabase.STATUS); - mmsColumnsPresent.add(MmsDatabase.UNIDENTIFIED); - mmsColumnsPresent.add(MmsDatabase.NETWORK_FAILURE); - mmsColumnsPresent.add(MmsDatabase.QUOTE_ID); - mmsColumnsPresent.add(MmsDatabase.QUOTE_AUTHOR); - mmsColumnsPresent.add(MmsDatabase.QUOTE_BODY); - mmsColumnsPresent.add(MmsDatabase.QUOTE_MISSING); - mmsColumnsPresent.add(MmsDatabase.QUOTE_ATTACHMENT); - mmsColumnsPresent.add(MmsDatabase.QUOTE_TYPE); - mmsColumnsPresent.add(MmsDatabase.QUOTE_MENTIONS); - mmsColumnsPresent.add(MmsDatabase.SHARED_CONTACTS); - mmsColumnsPresent.add(MmsDatabase.LINK_PREVIEWS); - mmsColumnsPresent.add(MmsDatabase.VIEW_ONCE); - mmsColumnsPresent.add(MmsDatabase.REACTIONS_UNREAD); - mmsColumnsPresent.add(MmsDatabase.REACTIONS_LAST_SEEN); - mmsColumnsPresent.add(MmsDatabase.REMOTE_DELETED); - mmsColumnsPresent.add(MmsDatabase.MENTIONS_SELF); + mmsColumnsPresent.add(MmsTable.MESSAGE_TYPE); + mmsColumnsPresent.add(MmsTable.MESSAGE_BOX); + mmsColumnsPresent.add(MmsTable.DATE_SENT); + mmsColumnsPresent.add(MmsTable.DATE_RECEIVED); + mmsColumnsPresent.add(MmsTable.DATE_SERVER); + mmsColumnsPresent.add(MmsTable.PART_COUNT); + mmsColumnsPresent.add(MmsTable.CONTENT_LOCATION); + mmsColumnsPresent.add(MmsTable.TRANSACTION_ID); + mmsColumnsPresent.add(MmsTable.MESSAGE_SIZE); + mmsColumnsPresent.add(MmsTable.EXPIRY); + mmsColumnsPresent.add(MmsTable.NOTIFIED); + mmsColumnsPresent.add(MmsTable.STATUS); + mmsColumnsPresent.add(MmsTable.UNIDENTIFIED); + mmsColumnsPresent.add(MmsTable.NETWORK_FAILURE); + mmsColumnsPresent.add(MmsTable.QUOTE_ID); + mmsColumnsPresent.add(MmsTable.QUOTE_AUTHOR); + mmsColumnsPresent.add(MmsTable.QUOTE_BODY); + mmsColumnsPresent.add(MmsTable.QUOTE_MISSING); + mmsColumnsPresent.add(MmsTable.QUOTE_ATTACHMENT); + mmsColumnsPresent.add(MmsTable.QUOTE_TYPE); + mmsColumnsPresent.add(MmsTable.QUOTE_MENTIONS); + mmsColumnsPresent.add(MmsTable.SHARED_CONTACTS); + mmsColumnsPresent.add(MmsTable.LINK_PREVIEWS); + mmsColumnsPresent.add(MmsTable.VIEW_ONCE); + mmsColumnsPresent.add(MmsTable.REACTIONS_UNREAD); + mmsColumnsPresent.add(MmsTable.REACTIONS_LAST_SEEN); + mmsColumnsPresent.add(MmsTable.REMOTE_DELETED); + mmsColumnsPresent.add(MmsTable.MENTIONS_SELF); mmsColumnsPresent.add(MmsSmsColumns.NOTIFIED_TIMESTAMP); mmsColumnsPresent.add(MmsSmsColumns.VIEWED_RECEIPT_COUNT); mmsColumnsPresent.add(MmsSmsColumns.RECEIPT_TIMESTAMP); - mmsColumnsPresent.add(MmsDatabase.MESSAGE_RANGES); - mmsColumnsPresent.add(MmsDatabase.STORY_TYPE); - mmsColumnsPresent.add(MmsDatabase.PARENT_STORY_ID); + mmsColumnsPresent.add(MmsTable.MESSAGE_RANGES); + mmsColumnsPresent.add(MmsTable.STORY_TYPE); + mmsColumnsPresent.add(MmsTable.PARENT_STORY_ID); Set smsColumnsPresent = new HashSet<>(); smsColumnsPresent.add(MmsSmsColumns.ID); @@ -1094,22 +1094,22 @@ public class MmsSmsDatabase extends Database { smsColumnsPresent.add(MmsSmsColumns.EXPIRES_IN); smsColumnsPresent.add(MmsSmsColumns.EXPIRE_STARTED); smsColumnsPresent.add(MmsSmsColumns.NOTIFIED); - smsColumnsPresent.add(SmsDatabase.TYPE); - smsColumnsPresent.add(SmsDatabase.SUBJECT); - smsColumnsPresent.add(SmsDatabase.DATE_SENT); - smsColumnsPresent.add(SmsDatabase.DATE_RECEIVED); - smsColumnsPresent.add(SmsDatabase.DATE_SERVER); - smsColumnsPresent.add(SmsDatabase.STATUS); - smsColumnsPresent.add(SmsDatabase.UNIDENTIFIED); - smsColumnsPresent.add(SmsDatabase.REACTIONS_UNREAD); - smsColumnsPresent.add(SmsDatabase.REACTIONS_LAST_SEEN); + smsColumnsPresent.add(SmsTable.TYPE); + smsColumnsPresent.add(SmsTable.SUBJECT); + smsColumnsPresent.add(SmsTable.DATE_SENT); + smsColumnsPresent.add(SmsTable.DATE_RECEIVED); + smsColumnsPresent.add(SmsTable.DATE_SERVER); + smsColumnsPresent.add(SmsTable.STATUS); + smsColumnsPresent.add(SmsTable.UNIDENTIFIED); + smsColumnsPresent.add(SmsTable.REACTIONS_UNREAD); + smsColumnsPresent.add(SmsTable.REACTIONS_LAST_SEEN); smsColumnsPresent.add(MmsSmsColumns.REMOTE_DELETED); smsColumnsPresent.add(MmsSmsColumns.NOTIFIED_TIMESTAMP); smsColumnsPresent.add(MmsSmsColumns.RECEIPT_TIMESTAMP); - smsColumnsPresent.add("0 AS " + MmsDatabase.STORY_TYPE); - smsColumnsPresent.add("0 AS " + MmsDatabase.PARENT_STORY_ID); + smsColumnsPresent.add("0 AS " + MmsTable.STORY_TYPE); + smsColumnsPresent.add("0 AS " + MmsTable.PARENT_STORY_ID); - String mmsGroupBy = includeAttachments ? MmsDatabase.TABLE_NAME + "." + MmsDatabase.ID : null; + String mmsGroupBy = includeAttachments ? MmsTable.TABLE_NAME + "." + MmsTable.ID : null; String mmsSubQuery = mmsQueryBuilder.buildUnionSubQuery(TRANSPORT, mmsProjection, mmsColumnsPresent, 4, MMS_TRANSPORT, selection, null, mmsGroupBy, null); String smsSubQuery = smsQueryBuilder.buildUnionSubQuery(TRANSPORT, smsProjection, smsColumnsPresent, 4, SMS_TRANSPORT, selection, null, null, null); @@ -1135,25 +1135,25 @@ public class MmsSmsDatabase extends Database { public static class Reader implements Closeable { - private final Cursor cursor; - private SmsDatabase.Reader smsReader; - private MmsDatabase.Reader mmsReader; + private final Cursor cursor; + private SmsTable.Reader smsReader; + private MmsTable.Reader mmsReader; public Reader(Cursor cursor) { this.cursor = cursor; } - private SmsDatabase.Reader getSmsReader() { + private SmsTable.Reader getSmsReader() { if (smsReader == null) { - smsReader = SmsDatabase.readerFor(cursor); + smsReader = SmsTable.readerFor(cursor); } return smsReader; } - private MmsDatabase.Reader getMmsReader() { + private MmsTable.Reader getMmsReader() { if (mmsReader == null) { - mmsReader = MmsDatabase.readerFor(cursor); + mmsReader = MmsTable.readerFor(cursor); } return mmsReader; @@ -1169,8 +1169,8 @@ public class MmsSmsDatabase extends Database { public MessageRecord getCurrent() { String type = cursor.getString(cursor.getColumnIndexOrThrow(TRANSPORT)); - if (MmsSmsDatabase.MMS_TRANSPORT.equals(type)) return getMmsReader().getCurrent(); - else if (MmsSmsDatabase.SMS_TRANSPORT.equals(type)) return getSmsReader().getCurrent(); + if (MmsSmsTable.MMS_TRANSPORT.equals(type)) return getMmsReader().getCurrent(); + else if (MmsSmsTable.SMS_TRANSPORT.equals(type)) return getSmsReader().getCurrent(); else throw new AssertionError("Bad type: " + type); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MmsTable.java similarity index 92% rename from app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java rename to app/src/main/java/org/thoughtcrime/securesms/database/MmsTable.java index 9660d19f7..8f4452eef 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsTable.java @@ -117,9 +117,9 @@ import java.util.UUID; import static org.thoughtcrime.securesms.contactshare.Contact.Avatar; -public class MmsDatabase extends MessageDatabase { +public class MmsTable extends MessageTable { - private static final String TAG = Log.tag(MmsDatabase.class); + private static final String TAG = Log.tag(MmsTable.class); public static final String TABLE_NAME = "mms"; static final String DATE_SENT = "date"; @@ -216,7 +216,7 @@ public class MmsDatabase extends MessageDatabase { }; private static final String[] MMS_PROJECTION = new String[] { - MmsDatabase.TABLE_NAME + "." + ID + " AS " + ID, + MmsTable.TABLE_NAME + "." + ID + " AS " + ID, THREAD_ID, DATE_SENT + " AS " + NORMALIZED_DATE_SENT, DATE_RECEIVED + " AS " + NORMALIZED_DATE_RECEIVED, DATE_SERVER, @@ -230,35 +230,35 @@ public class MmsDatabase extends MessageDatabase { REMOTE_DELETED, MENTIONS_SELF, NOTIFIED_TIMESTAMP, VIEWED_RECEIPT_COUNT, RECEIPT_TIMESTAMP, MESSAGE_RANGES, STORY_TYPE, PARENT_STORY_ID, "json_group_array(json_object(" + - "'" + AttachmentDatabase.ROW_ID + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.ROW_ID + ", " + - "'" + AttachmentDatabase.UNIQUE_ID + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.UNIQUE_ID + ", " + - "'" + AttachmentDatabase.MMS_ID + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.MMS_ID + ", " + - "'" + AttachmentDatabase.SIZE + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.SIZE + ", " + - "'" + AttachmentDatabase.FILE_NAME + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.FILE_NAME + ", " + - "'" + AttachmentDatabase.DATA + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.DATA + ", " + - "'" + AttachmentDatabase.CONTENT_TYPE + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.CONTENT_TYPE + ", " + - "'" + AttachmentDatabase.CDN_NUMBER + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.CDN_NUMBER + ", " + - "'" + AttachmentDatabase.CONTENT_LOCATION + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.CONTENT_LOCATION + ", " + - "'" + AttachmentDatabase.FAST_PREFLIGHT_ID + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.FAST_PREFLIGHT_ID + "," + - "'" + AttachmentDatabase.VOICE_NOTE + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.VOICE_NOTE + "," + - "'" + AttachmentDatabase.BORDERLESS + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.BORDERLESS + "," + - "'" + AttachmentDatabase.VIDEO_GIF + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.VIDEO_GIF + "," + - "'" + AttachmentDatabase.WIDTH + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.WIDTH + "," + - "'" + AttachmentDatabase.HEIGHT + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.HEIGHT + "," + - "'" + AttachmentDatabase.QUOTE + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.QUOTE + ", " + - "'" + AttachmentDatabase.CONTENT_DISPOSITION + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.CONTENT_DISPOSITION + ", " + - "'" + AttachmentDatabase.NAME + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.NAME + ", " + - "'" + AttachmentDatabase.TRANSFER_STATE + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.TRANSFER_STATE + ", " + - "'" + AttachmentDatabase.CAPTION + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.CAPTION + ", " + - "'" + AttachmentDatabase.STICKER_PACK_ID + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.STICKER_PACK_ID + ", " + - "'" + AttachmentDatabase.STICKER_PACK_KEY + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.STICKER_PACK_KEY + ", " + - "'" + AttachmentDatabase.STICKER_ID + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.STICKER_ID + ", " + - "'" + AttachmentDatabase.STICKER_EMOJI + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.STICKER_EMOJI + ", " + - "'" + AttachmentDatabase.VISUAL_HASH + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.VISUAL_HASH + ", " + - "'" + AttachmentDatabase.TRANSFORM_PROPERTIES + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.TRANSFORM_PROPERTIES + ", " + - "'" + AttachmentDatabase.DISPLAY_ORDER + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.DISPLAY_ORDER + ", " + - "'" + AttachmentDatabase.UPLOAD_TIMESTAMP + "', " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.UPLOAD_TIMESTAMP + - ")) AS " + AttachmentDatabase.ATTACHMENT_JSON_ALIAS, + "'" + AttachmentTable.ROW_ID + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.ROW_ID + ", " + + "'" + AttachmentTable.UNIQUE_ID + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.UNIQUE_ID + ", " + + "'" + AttachmentTable.MMS_ID + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.MMS_ID + ", " + + "'" + AttachmentTable.SIZE + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.SIZE + ", " + + "'" + AttachmentTable.FILE_NAME + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.FILE_NAME + ", " + + "'" + AttachmentTable.DATA + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.DATA + ", " + + "'" + AttachmentTable.CONTENT_TYPE + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.CONTENT_TYPE + ", " + + "'" + AttachmentTable.CDN_NUMBER + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.CDN_NUMBER + ", " + + "'" + AttachmentTable.CONTENT_LOCATION + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.CONTENT_LOCATION + ", " + + "'" + AttachmentTable.FAST_PREFLIGHT_ID + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.FAST_PREFLIGHT_ID + "," + + "'" + AttachmentTable.VOICE_NOTE + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.VOICE_NOTE + "," + + "'" + AttachmentTable.BORDERLESS + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.BORDERLESS + "," + + "'" + AttachmentTable.VIDEO_GIF + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.VIDEO_GIF + "," + + "'" + AttachmentTable.WIDTH + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.WIDTH + "," + + "'" + AttachmentTable.HEIGHT + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.HEIGHT + "," + + "'" + AttachmentTable.QUOTE + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.QUOTE + ", " + + "'" + AttachmentTable.CONTENT_DISPOSITION + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.CONTENT_DISPOSITION + ", " + + "'" + AttachmentTable.NAME + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.NAME + ", " + + "'" + AttachmentTable.TRANSFER_STATE + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.TRANSFER_STATE + ", " + + "'" + AttachmentTable.CAPTION + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.CAPTION + ", " + + "'" + AttachmentTable.STICKER_PACK_ID + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.STICKER_PACK_ID + ", " + + "'" + AttachmentTable.STICKER_PACK_KEY + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.STICKER_PACK_KEY + ", " + + "'" + AttachmentTable.STICKER_ID + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.STICKER_ID + ", " + + "'" + AttachmentTable.STICKER_EMOJI + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.STICKER_EMOJI + ", " + + "'" + AttachmentTable.VISUAL_HASH + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.VISUAL_HASH + ", " + + "'" + AttachmentTable.TRANSFORM_PROPERTIES + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.TRANSFORM_PROPERTIES + ", " + + "'" + AttachmentTable.DISPLAY_ORDER + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.DISPLAY_ORDER + ", " + + "'" + AttachmentTable.UPLOAD_TIMESTAMP + "', " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.UPLOAD_TIMESTAMP + + ")) AS " + AttachmentTable.ATTACHMENT_JSON_ALIAS, }; private static final String IS_STORY_CLAUSE = STORY_TYPE + " > 0 AND " + REMOTE_DELETED + " = 0"; @@ -270,7 +270,7 @@ public class MmsDatabase extends MessageDatabase { private final EarlyReceiptCache earlyDeliveryReceiptCache = new EarlyReceiptCache("MmsDelivery"); - public MmsDatabase(Context context, SignalDatabase databaseHelper) { + public MmsTable(Context context, SignalDatabase databaseHelper) { super(context, databaseHelper); } @@ -621,7 +621,7 @@ public class MmsDatabase extends MessageDatabase { } @Override - public @NonNull MessageDatabase.Reader getOutgoingStoriesTo(@NonNull RecipientId recipientId) { + public @NonNull MessageTable.Reader getOutgoingStoriesTo(@NonNull RecipientId recipientId) { Recipient recipient = Recipient.resolved(recipientId); Long threadId = null; @@ -644,14 +644,14 @@ public class MmsDatabase extends MessageDatabase { } @Override - public @NonNull MessageDatabase.Reader getAllOutgoingStories(boolean reverse, int limit) { + public @NonNull MessageTable.Reader getAllOutgoingStories(boolean reverse, int limit) { String where = IS_STORY_CLAUSE + " AND (" + getOutgoingTypeClause() + ")"; return new Reader(rawQuery(where, null, reverse, limit)); } @Override - public @NonNull MessageDatabase.Reader getAllOutgoingStoriesAt(long sentTimestamp) { + public @NonNull MessageTable.Reader getAllOutgoingStoriesAt(long sentTimestamp) { String where = IS_STORY_CLAUSE + " AND " + DATE_SENT + " = ? AND (" + getOutgoingTypeClause() + ")"; String[] whereArgs = SqlUtil.buildArgs(sentTimestamp); Cursor cursor = rawQuery(where, whereArgs, false, -1L); @@ -685,7 +685,7 @@ public class MmsDatabase extends MessageDatabase { } @Override - public @NonNull MessageDatabase.Reader getAllStoriesFor(@NonNull RecipientId recipientId, int limit) { + public @NonNull MessageTable.Reader getAllStoriesFor(@NonNull RecipientId recipientId, int limit) { long threadId = SignalDatabase.threads().getThreadIdIfExistsFor(recipientId); String where = IS_STORY_CLAUSE + " AND " + THREAD_ID_WHERE; String[] whereArgs = SqlUtil.buildArgs(threadId); @@ -695,7 +695,7 @@ public class MmsDatabase extends MessageDatabase { } @Override - public @NonNull MessageDatabase.Reader getUnreadStories(@NonNull RecipientId recipientId, int limit) { + public @NonNull MessageTable.Reader getUnreadStories(@NonNull RecipientId recipientId, int limit) { final long threadId = SignalDatabase.threads().getThreadIdIfExistsFor(recipientId); final String query = IS_STORY_CLAUSE + " AND NOT (" + getOutgoingTypeClause() + ") " + @@ -826,10 +826,10 @@ public class MmsDatabase extends MessageDatabase { @Override public @NonNull List getUnreadStoryThreadRecipientIds() { SQLiteDatabase db = getReadableDatabase(); - String query = "SELECT DISTINCT " + ThreadDatabase.RECIPIENT_ID + "\n" + String query = "SELECT DISTINCT " + ThreadTable.RECIPIENT_ID + "\n" + "FROM " + TABLE_NAME + "\n" - + "JOIN " + ThreadDatabase.TABLE_NAME + "\n" - + "ON " + TABLE_NAME + "." + THREAD_ID + " = " + ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.ID + "\n" + + "JOIN " + ThreadTable.TABLE_NAME + "\n" + + "ON " + TABLE_NAME + "." + THREAD_ID + " = " + ThreadTable.TABLE_NAME + "." + ThreadTable.ID + "\n" + "WHERE " + IS_STORY_CLAUSE + " AND (" + getOutgoingTypeClause() + ") = 0 AND " + VIEWED_RECEIPT_COUNT + " = 0 AND " + TABLE_NAME + "." + READ + " = 0"; try (Cursor cursor = db.rawQuery(query, null)) { @@ -877,7 +877,7 @@ public class MmsDatabase extends MessageDatabase { results = new ArrayList<>(cursor.getCount()); while (cursor.moveToNext()) { - results.add(new StoryResult(RecipientId.from(CursorUtil.requireLong(cursor, ThreadDatabase.RECIPIENT_ID)), + results.add(new StoryResult(RecipientId.from(CursorUtil.requireLong(cursor, ThreadTable.RECIPIENT_ID)), CursorUtil.requireLong(cursor, "mms_id"), CursorUtil.requireLong(cursor, "sent_timestamp"), CursorUtil.requireBoolean(cursor, "is_outgoing"))); @@ -1288,12 +1288,12 @@ public class MmsDatabase extends MessageDatabase { private Cursor rawQuery(@NonNull String[] projection, @NonNull String where, @Nullable String[] arguments, boolean reverse, long limit) { SQLiteDatabase database = databaseHelper.getSignalReadableDatabase(); String rawQueryString = "SELECT " + Util.join(projection, ",") + - " FROM " + MmsDatabase.TABLE_NAME + " LEFT OUTER JOIN " + AttachmentDatabase.TABLE_NAME + - " ON (" + MmsDatabase.TABLE_NAME + "." + MmsDatabase.ID + " = " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.MMS_ID + ")" + - " WHERE " + where + " GROUP BY " + MmsDatabase.TABLE_NAME + "." + MmsDatabase.ID; + " FROM " + MmsTable.TABLE_NAME + " LEFT OUTER JOIN " + AttachmentTable.TABLE_NAME + + " ON (" + MmsTable.TABLE_NAME + "." + MmsTable.ID + " = " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.MMS_ID + ")" + + " WHERE " + where + " GROUP BY " + MmsTable.TABLE_NAME + "." + MmsTable.ID; if (reverse) { - rawQueryString += " ORDER BY " + MmsDatabase.TABLE_NAME + "." + MmsDatabase.ID + " DESC"; + rawQueryString += " ORDER BY " + MmsTable.TABLE_NAME + "." + MmsTable.ID + " DESC"; } if (limit > 0) { @@ -1330,7 +1330,7 @@ public class MmsDatabase extends MessageDatabase { @Override public Reader getMessages(Collection messageIds) { String ids = TextUtils.join(",", messageIds); - return readerFor(rawQuery(MmsDatabase.TABLE_NAME + "." + MmsDatabase.ID + " IN (" + ids + ")", null)); + return readerFor(rawQuery(MmsTable.TABLE_NAME + "." + MmsTable.ID + " IN (" + ids + ")", null)); } private void updateMailboxBitmask(long id, long maskOff, long maskOn, Optional threadId) { @@ -1679,14 +1679,14 @@ public class MmsDatabase extends MessageDatabase { */ void trimEntriesForExpiredMessages() { SQLiteDatabase database = databaseHelper.getSignalWritableDatabase(); - String trimmedCondition = " NOT IN (SELECT " + MmsDatabase.ID + " FROM " + MmsDatabase.TABLE_NAME + ")"; + String trimmedCondition = " NOT IN (SELECT " + MmsTable.ID + " FROM " + MmsTable.TABLE_NAME + ")"; - database.delete(GroupReceiptDatabase.TABLE_NAME, GroupReceiptDatabase.MMS_ID + trimmedCondition, null); + database.delete(GroupReceiptTable.TABLE_NAME, GroupReceiptTable.MMS_ID + trimmedCondition, null); - String[] columns = new String[] { AttachmentDatabase.ROW_ID, AttachmentDatabase.UNIQUE_ID }; - String where = AttachmentDatabase.MMS_ID + trimmedCondition; + String[] columns = new String[] { AttachmentTable.ROW_ID, AttachmentTable.UNIQUE_ID }; + String where = AttachmentTable.MMS_ID + trimmedCondition; - try (Cursor cursor = database.query(AttachmentDatabase.TABLE_NAME, columns, where, null, null, null, null)) { + try (Cursor cursor = database.query(AttachmentTable.TABLE_NAME, columns, where, null, null, null, null)) { while (cursor != null && cursor.moveToNext()) { SignalDatabase.attachments().deleteAttachment(new AttachmentId(cursor.getLong(0), cursor.getLong(1))); } @@ -1694,7 +1694,7 @@ public class MmsDatabase extends MessageDatabase { SignalDatabase.mentions().deleteAbandonedMentions(); - try (Cursor cursor = database.query(ThreadDatabase.TABLE_NAME, new String[] { ThreadDatabase.ID }, ThreadDatabase.EXPIRES_IN + " > 0", null, null, null, null)) { + try (Cursor cursor = database.query(ThreadTable.TABLE_NAME, new String[] { ThreadTable.ID }, ThreadTable.EXPIRES_IN + " > 0", null, null, null, null)) { while (cursor != null && cursor.moveToNext()) { SignalDatabase.threads().setLastScrolled(cursor.getLong(0), 0); SignalDatabase.threads().update(cursor.getLong(0), false); @@ -1727,9 +1727,9 @@ public class MmsDatabase extends MessageDatabase { public OutgoingMediaMessage getOutgoingMessage(long messageId) throws MmsException, NoSuchMessageException { - AttachmentDatabase attachmentDatabase = SignalDatabase.attachments(); - MentionDatabase mentionDatabase = SignalDatabase.mentions(); - Cursor cursor = null; + AttachmentTable attachmentDatabase = SignalDatabase.attachments(); + MentionTable mentionDatabase = SignalDatabase.mentions(); + Cursor cursor = null; try { cursor = rawQuery(RAW_ID_WHERE, new String[] {String.valueOf(messageId)}); @@ -1747,8 +1747,8 @@ public class MmsDatabase extends MessageDatabase { long recipientId = cursor.getLong(cursor.getColumnIndexOrThrow(RECIPIENT_ID)); long threadId = cursor.getLong(cursor.getColumnIndexOrThrow(THREAD_ID)); int distributionType = SignalDatabase.threads().getDistributionType(threadId); - String mismatchDocument = cursor.getString(cursor.getColumnIndexOrThrow(MmsDatabase.MISMATCHED_IDENTITIES)); - String networkDocument = cursor.getString(cursor.getColumnIndexOrThrow(MmsDatabase.NETWORK_FAILURE)); + String mismatchDocument = cursor.getString(cursor.getColumnIndexOrThrow(MmsTable.MISMATCHED_IDENTITIES)); + String networkDocument = cursor.getString(cursor.getColumnIndexOrThrow(MmsTable.NETWORK_FAILURE)); StoryType storyType = StoryType.fromCode(CursorUtil.requireInt(cursor, STORY_TYPE)); ParentStoryId parentStoryId = ParentStoryId.deserialize(CursorUtil.requireLong(cursor, PARENT_STORY_ID)); @@ -2205,16 +2205,16 @@ public class MmsDatabase extends MessageDatabase { public long insertMessageOutbox(@NonNull OutgoingMediaMessage message, long threadId, boolean forceSms, - @Nullable SmsDatabase.InsertListener insertListener) + @Nullable SmsTable.InsertListener insertListener) throws MmsException { - return insertMessageOutbox(message, threadId, forceSms, GroupReceiptDatabase.STATUS_UNDELIVERED, insertListener); + return insertMessageOutbox(message, threadId, forceSms, GroupReceiptTable.STATUS_UNDELIVERED, insertListener); } @Override public long insertMessageOutbox(@NonNull OutgoingMediaMessage message, long threadId, boolean forceSms, int defaultReceiptStatus, - @Nullable SmsDatabase.InsertListener insertListener) + @Nullable SmsTable.InsertListener insertListener) throws MmsException { SQLiteDatabase db = databaseHelper.getSignalWritableDatabase(); @@ -2326,8 +2326,8 @@ public class MmsDatabase extends MessageDatabase { if (message.getRecipient().isGroup()) { OutgoingGroupUpdateMessage outgoingGroupUpdateMessage = (message instanceof OutgoingGroupUpdateMessage) ? (OutgoingGroupUpdateMessage) message : null; - GroupReceiptDatabase receiptDatabase = SignalDatabase.groupReceipts(); - Set members = new HashSet<>(); + GroupReceiptTable receiptDatabase = SignalDatabase.groupReceipts(); + Set members = new HashSet<>(); if (outgoingGroupUpdateMessage != null && outgoingGroupUpdateMessage.isV2Group()) { MessageGroupContext.GroupV2Properties groupV2Properties = outgoingGroupUpdateMessage.requireGroupV2Properties(); @@ -2337,22 +2337,22 @@ public class MmsDatabase extends MessageDatabase { .toList()); members.remove(Recipient.self().getId()); } else { - members.addAll(Stream.of(SignalDatabase.groups().getGroupMembers(message.getRecipient().requireGroupId(), GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF)).map(Recipient::getId).toList()); + members.addAll(Stream.of(SignalDatabase.groups().getGroupMembers(message.getRecipient().requireGroupId(), GroupTable.MemberSet.FULL_MEMBERS_EXCLUDING_SELF)).map(Recipient::getId).toList()); } receiptDatabase.insert(members, messageId, defaultReceiptStatus, message.getSentTimeMillis()); for (RecipientId recipientId : earlyDeliveryReceipts.keySet()) { - receiptDatabase.update(recipientId, messageId, GroupReceiptDatabase.STATUS_DELIVERED, -1); + receiptDatabase.update(recipientId, messageId, GroupReceiptTable.STATUS_DELIVERED, -1); } } else if (message.getRecipient().isDistributionList()) { - GroupReceiptDatabase receiptDatabase = SignalDatabase.groupReceipts(); - List members = SignalDatabase.distributionLists().getMembers(message.getRecipient().requireDistributionListId()); + GroupReceiptTable receiptDatabase = SignalDatabase.groupReceipts(); + List members = SignalDatabase.distributionLists().getMembers(message.getRecipient().requireDistributionListId()); receiptDatabase.insert(members, messageId, defaultReceiptStatus, message.getSentTimeMillis()); for (RecipientId recipientId : earlyDeliveryReceipts.keySet()) { - receiptDatabase.update(recipientId, messageId, GroupReceiptDatabase.STATUS_DELIVERED, -1); + receiptDatabase.update(recipientId, messageId, GroupReceiptTable.STATUS_DELIVERED, -1); } } @@ -2399,9 +2399,9 @@ public class MmsDatabase extends MessageDatabase { boolean unarchive) throws MmsException { - SQLiteDatabase db = databaseHelper.getSignalWritableDatabase(); - AttachmentDatabase partsDatabase = SignalDatabase.attachments(); - MentionDatabase mentionDatabase = SignalDatabase.mentions(); + SQLiteDatabase db = databaseHelper.getSignalWritableDatabase(); + AttachmentTable partsDatabase = SignalDatabase.attachments(); + MentionTable mentionDatabase = SignalDatabase.mentions(); boolean mentionsSelf = Stream.of(mentions).filter(m -> Recipient.resolved(m.getRecipientId()).isSelf()).findFirst().isPresent(); @@ -2477,14 +2477,14 @@ public class MmsDatabase extends MessageDatabase { public boolean deleteMessage(long messageId) { Log.d(TAG, "deleteMessage(" + messageId + ")"); - long threadId = getThreadIdForMessage(messageId); - AttachmentDatabase attachmentDatabase = SignalDatabase.attachments(); + long threadId = getThreadIdForMessage(messageId); + AttachmentTable attachmentDatabase = SignalDatabase.attachments(); attachmentDatabase.deleteAttachmentsForMessage(messageId); - GroupReceiptDatabase groupReceiptDatabase = SignalDatabase.groupReceipts(); + GroupReceiptTable groupReceiptDatabase = SignalDatabase.groupReceipts(); groupReceiptDatabase.deleteRowsForMessage(messageId); - MentionDatabase mentionDatabase = SignalDatabase.mentions(); + MentionTable mentionDatabase = SignalDatabase.mentions(); mentionDatabase.deleteMentionsForMessage(messageId); SQLiteDatabase database = databaseHelper.getSignalWritableDatabase(); @@ -2617,8 +2617,8 @@ public class MmsDatabase extends MessageDatabase { long bodyTextSize = CursorExtensionsKt.readToSingleLong(messageTextSize); - String select = "SUM(" + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.SIZE + ") AS s"; - String fromJoin = TABLE_NAME + " INNER JOIN " + AttachmentDatabase.TABLE_NAME + " ON " + TABLE_NAME + "." + ID + " = " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.MMS_ID; + String select = "SUM(" + AttachmentTable.TABLE_NAME + "." + AttachmentTable.SIZE + ") AS s"; + String fromJoin = TABLE_NAME + " INNER JOIN " + AttachmentTable.TABLE_NAME + " ON " + TABLE_NAME + "." + ID + " = " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.MMS_ID; String where = getInsecureMessageClause() + " AND " + EXPORTED + " < " + MessageExportStatus.EXPORTED.serialize(); long fileSize = CursorExtensionsKt.readToSingleLong(getReadableDatabase().rawQuery("SELECT " + select + " FROM " + fromJoin + " WHERE " + where, null)); @@ -2682,7 +2682,7 @@ public class MmsDatabase extends MessageDatabase { @Override void deleteAbandonedMessages() { SQLiteDatabase db = databaseHelper.getSignalWritableDatabase(); - String where = THREAD_ID + " NOT IN (SELECT _id FROM " + ThreadDatabase.TABLE_NAME + ")"; + String where = THREAD_ID + " NOT IN (SELECT _id FROM " + ThreadTable.TABLE_NAME + ")"; int deletes = db.delete(TABLE_NAME, where, null); if (deletes > 0) { @@ -2736,15 +2736,15 @@ public class MmsDatabase extends MessageDatabase { long nearestExpiration = Long.MAX_VALUE; String query = "SELECT " + - TABLE_NAME + "." + ID + ", " + - VIEW_ONCE + ", " + - DATE_RECEIVED + " " + - "FROM " + TABLE_NAME + " INNER JOIN " + AttachmentDatabase.TABLE_NAME + " " + - "ON " + TABLE_NAME + "." + ID + " = " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.MMS_ID + " " + + TABLE_NAME + "." + ID + ", " + + VIEW_ONCE + ", " + + DATE_RECEIVED + " " + + "FROM " + TABLE_NAME + " INNER JOIN " + AttachmentTable.TABLE_NAME + " " + + "ON " + TABLE_NAME + "." + ID + " = " + AttachmentTable.TABLE_NAME + "." + AttachmentTable.MMS_ID + " " + "WHERE " + - VIEW_ONCE + " > 0 AND " + - "(" + AttachmentDatabase.DATA + " NOT NULL OR " + AttachmentDatabase.TRANSFER_STATE + " != ?)"; - String[] args = new String[] { String.valueOf(AttachmentDatabase.TRANSFER_PROGRESS_DONE) }; + VIEW_ONCE + " > 0 AND " + + "(" + AttachmentTable.DATA + " NOT NULL OR " + AttachmentTable.TRANSFER_STATE + " != ?)"; + String[] args = new String[] { String.valueOf(AttachmentTable.TRANSFER_PROGRESS_DONE) }; try (Cursor cursor = db.rawQuery(query, args)) { while (cursor != null && cursor.moveToNext()) { @@ -2800,7 +2800,7 @@ public class MmsDatabase extends MessageDatabase { @Override public void remapThread(long fromId, long toId) { ContentValues values = new ContentValues(); - values.put(SmsDatabase.THREAD_ID, toId); + values.put(SmsTable.THREAD_ID, toId); getWritableDatabase().update(TABLE_NAME, values, THREAD_ID + " = ?", SqlUtil.buildArgs(fromId)); } @@ -2894,7 +2894,7 @@ public class MmsDatabase extends MessageDatabase { * 1. They only utilize one of the two interfaces (legacy or iterator) * 1. They close this reader after use, preferably via try-with-resources or a use block. */ - public static class Reader implements MessageDatabase.Reader { + public static class Reader implements MessageTable.Reader { private final Cursor cursor; private final Context context; @@ -2914,7 +2914,7 @@ public class MmsDatabase extends MessageDatabase { @Override public MessageRecord getCurrent() { - long mmsType = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.MESSAGE_TYPE)); + long mmsType = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.MESSAGE_TYPE)); if (mmsType == PduHeaders.MESSAGE_TYPE_NOTIFICATION_IND) { return getNotificationMmsMessageRecord(cursor); @@ -2925,7 +2925,7 @@ public class MmsDatabase extends MessageDatabase { @Override public @NonNull MessageExportState getMessageExportStateForCurrentRecord() { - byte[] messageExportState = CursorUtil.requireBlob(cursor, MmsDatabase.EXPORT_STATE); + byte[] messageExportState = CursorUtil.requireBlob(cursor, MmsTable.EXPORT_STATE); if (messageExportState == null) { return MessageExportState.getDefaultInstance(); } @@ -2943,28 +2943,28 @@ public class MmsDatabase extends MessageDatabase { } private NotificationMmsMessageRecord getNotificationMmsMessageRecord(Cursor cursor) { - long id = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.ID)); - long dateSent = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.NORMALIZED_DATE_SENT)); - long dateReceived = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.NORMALIZED_DATE_RECEIVED)); - long threadId = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.THREAD_ID)); - long mailbox = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.MESSAGE_BOX)); - long recipientId = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.RECIPIENT_ID)); - int addressDeviceId = cursor.getInt(cursor.getColumnIndexOrThrow(MmsDatabase.ADDRESS_DEVICE_ID)); + long id = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.ID)); + long dateSent = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.NORMALIZED_DATE_SENT)); + long dateReceived = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.NORMALIZED_DATE_RECEIVED)); + long threadId = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.THREAD_ID)); + long mailbox = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.MESSAGE_BOX)); + long recipientId = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.RECIPIENT_ID)); + int addressDeviceId = cursor.getInt(cursor.getColumnIndexOrThrow(MmsTable.ADDRESS_DEVICE_ID)); Recipient recipient = Recipient.live(RecipientId.from(recipientId)).get(); - String contentLocation = cursor.getString(cursor.getColumnIndexOrThrow(MmsDatabase.CONTENT_LOCATION)); - String transactionId = cursor.getString(cursor.getColumnIndexOrThrow(MmsDatabase.TRANSACTION_ID)); - long messageSize = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.MESSAGE_SIZE)); - long expiry = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.EXPIRY)); - int status = cursor.getInt(cursor.getColumnIndexOrThrow(MmsDatabase.STATUS)); - int deliveryReceiptCount = cursor.getInt(cursor.getColumnIndexOrThrow(MmsDatabase.DELIVERY_RECEIPT_COUNT)); - int readReceiptCount = cursor.getInt(cursor.getColumnIndexOrThrow(MmsDatabase.READ_RECEIPT_COUNT)); - int subscriptionId = cursor.getInt(cursor.getColumnIndexOrThrow(MmsDatabase.SUBSCRIPTION_ID)); + String contentLocation = cursor.getString(cursor.getColumnIndexOrThrow(MmsTable.CONTENT_LOCATION)); + String transactionId = cursor.getString(cursor.getColumnIndexOrThrow(MmsTable.TRANSACTION_ID)); + long messageSize = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.MESSAGE_SIZE)); + long expiry = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.EXPIRY)); + int status = cursor.getInt(cursor.getColumnIndexOrThrow(MmsTable.STATUS)); + int deliveryReceiptCount = cursor.getInt(cursor.getColumnIndexOrThrow(MmsTable.DELIVERY_RECEIPT_COUNT)); + int readReceiptCount = cursor.getInt(cursor.getColumnIndexOrThrow(MmsTable.READ_RECEIPT_COUNT)); + int subscriptionId = cursor.getInt(cursor.getColumnIndexOrThrow(MmsTable.SUBSCRIPTION_ID)); int viewedReceiptCount = cursor.getInt(cursor.getColumnIndexOrThrow(MmsSmsColumns.VIEWED_RECEIPT_COUNT)); long receiptTimestamp = CursorUtil.requireLong(cursor, MmsSmsColumns.RECEIPT_TIMESTAMP); StoryType storyType = StoryType.fromCode(CursorUtil.requireInt(cursor, STORY_TYPE)); ParentStoryId parentStoryId = ParentStoryId.deserialize(CursorUtil.requireLong(cursor, PARENT_STORY_ID)); - String body = cursor.getString(cursor.getColumnIndexOrThrow(MmsDatabase.BODY)); + String body = cursor.getString(cursor.getColumnIndexOrThrow(MmsTable.BODY)); if (!TextSecurePreferences.isReadReceiptsEnabled(context)) { readReceiptCount = 0; @@ -2999,26 +2999,26 @@ public class MmsDatabase extends MessageDatabase { } private MediaMmsMessageRecord getMediaMmsMessageRecord(Cursor cursor) { - long id = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.ID)); - long dateSent = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.NORMALIZED_DATE_SENT)); - long dateReceived = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.NORMALIZED_DATE_RECEIVED)); - long dateServer = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.DATE_SERVER)); - long box = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.MESSAGE_BOX)); - long threadId = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.THREAD_ID)); - long recipientId = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.RECIPIENT_ID)); - int addressDeviceId = cursor.getInt(cursor.getColumnIndexOrThrow(MmsDatabase.ADDRESS_DEVICE_ID)); - int deliveryReceiptCount = cursor.getInt(cursor.getColumnIndexOrThrow(MmsDatabase.DELIVERY_RECEIPT_COUNT)); - int readReceiptCount = cursor.getInt(cursor.getColumnIndexOrThrow(MmsDatabase.READ_RECEIPT_COUNT)); - String body = cursor.getString(cursor.getColumnIndexOrThrow(MmsDatabase.BODY)); - int partCount = cursor.getInt(cursor.getColumnIndexOrThrow(MmsDatabase.PART_COUNT)); - String mismatchDocument = cursor.getString(cursor.getColumnIndexOrThrow(MmsDatabase.MISMATCHED_IDENTITIES)); - String networkDocument = cursor.getString(cursor.getColumnIndexOrThrow(MmsDatabase.NETWORK_FAILURE)); - int subscriptionId = cursor.getInt(cursor.getColumnIndexOrThrow(MmsDatabase.SUBSCRIPTION_ID)); - long expiresIn = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.EXPIRES_IN)); - long expireStarted = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.EXPIRE_STARTED)); - boolean unidentified = cursor.getInt(cursor.getColumnIndexOrThrow(MmsDatabase.UNIDENTIFIED)) == 1; - boolean isViewOnce = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.VIEW_ONCE)) == 1; - boolean remoteDelete = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.REMOTE_DELETED)) == 1; + long id = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.ID)); + long dateSent = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.NORMALIZED_DATE_SENT)); + long dateReceived = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.NORMALIZED_DATE_RECEIVED)); + long dateServer = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.DATE_SERVER)); + long box = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.MESSAGE_BOX)); + long threadId = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.THREAD_ID)); + long recipientId = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.RECIPIENT_ID)); + int addressDeviceId = cursor.getInt(cursor.getColumnIndexOrThrow(MmsTable.ADDRESS_DEVICE_ID)); + int deliveryReceiptCount = cursor.getInt(cursor.getColumnIndexOrThrow(MmsTable.DELIVERY_RECEIPT_COUNT)); + int readReceiptCount = cursor.getInt(cursor.getColumnIndexOrThrow(MmsTable.READ_RECEIPT_COUNT)); + String body = cursor.getString(cursor.getColumnIndexOrThrow(MmsTable.BODY)); + int partCount = cursor.getInt(cursor.getColumnIndexOrThrow(MmsTable.PART_COUNT)); + String mismatchDocument = cursor.getString(cursor.getColumnIndexOrThrow(MmsTable.MISMATCHED_IDENTITIES)); + String networkDocument = cursor.getString(cursor.getColumnIndexOrThrow(MmsTable.NETWORK_FAILURE)); + int subscriptionId = cursor.getInt(cursor.getColumnIndexOrThrow(MmsTable.SUBSCRIPTION_ID)); + long expiresIn = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.EXPIRES_IN)); + long expireStarted = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.EXPIRE_STARTED)); + boolean unidentified = cursor.getInt(cursor.getColumnIndexOrThrow(MmsTable.UNIDENTIFIED)) == 1; + boolean isViewOnce = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.VIEW_ONCE)) == 1; + boolean remoteDelete = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.REMOTE_DELETED)) == 1; boolean mentionsSelf = CursorUtil.requireBoolean(cursor, MENTIONS_SELF); long notifiedTimestamp = CursorUtil.requireLong(cursor, NOTIFIED_TIMESTAMP); int viewedReceiptCount = cursor.getInt(cursor.getColumnIndexOrThrow(MmsSmsColumns.VIEWED_RECEIPT_COUNT)); @@ -3106,11 +3106,11 @@ public class MmsDatabase extends MessageDatabase { } private @Nullable Quote getQuote(@NonNull Cursor cursor) { - long quoteId = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.QUOTE_ID)); - long quoteAuthor = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.QUOTE_AUTHOR)); - CharSequence quoteText = cursor.getString(cursor.getColumnIndexOrThrow(MmsDatabase.QUOTE_BODY)); - int quoteType = cursor.getInt(cursor.getColumnIndexOrThrow(MmsDatabase.QUOTE_TYPE)); - boolean quoteMissing = cursor.getInt(cursor.getColumnIndexOrThrow(MmsDatabase.QUOTE_MISSING)) == 1; + long quoteId = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.QUOTE_ID)); + long quoteAuthor = cursor.getLong(cursor.getColumnIndexOrThrow(MmsTable.QUOTE_AUTHOR)); + CharSequence quoteText = cursor.getString(cursor.getColumnIndexOrThrow(MmsTable.QUOTE_BODY)); + int quoteType = cursor.getInt(cursor.getColumnIndexOrThrow(MmsTable.QUOTE_TYPE)); + boolean quoteMissing = cursor.getInt(cursor.getColumnIndexOrThrow(MmsTable.QUOTE_MISSING)) == 1; List quoteMentions = parseQuoteMentions(context, cursor); List attachments = SignalDatabase.attachments().getAttachments(cursor); List quoteAttachments = Stream.of(attachments).filter(Attachment::isQuote).toList(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/NotificationProfileDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/NotificationProfileTables.kt similarity index 99% rename from app/src/main/java/org/thoughtcrime/securesms/database/NotificationProfileDatabase.kt rename to app/src/main/java/org/thoughtcrime/securesms/database/NotificationProfileTables.kt index 6113a4540..1e00ccad1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/NotificationProfileDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/NotificationProfileTables.kt @@ -20,7 +20,7 @@ import java.time.DayOfWeek /** * Database for maintaining Notification Profiles, Notification Profile Schedules, and Notification Profile allowed memebers. */ -class NotificationProfileDatabase(context: Context, databaseHelper: SignalDatabase) : Database(context, databaseHelper), RecipientIdDatabaseReference { +class NotificationProfileDatabase(context: Context, databaseHelper: SignalDatabase) : DatabaseTable(context, databaseHelper), RecipientIdDatabaseReference { companion object { @JvmField diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/OneTimePreKeyDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/OneTimePreKeyTable.kt similarity index 93% rename from app/src/main/java/org/thoughtcrime/securesms/database/OneTimePreKeyDatabase.kt rename to app/src/main/java/org/thoughtcrime/securesms/database/OneTimePreKeyTable.kt index 5259d4535..5989f1cf4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/OneTimePreKeyDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/OneTimePreKeyTable.kt @@ -13,9 +13,9 @@ import org.thoughtcrime.securesms.util.Base64 import org.whispersystems.signalservice.api.push.ServiceId import java.io.IOException -class OneTimePreKeyDatabase(context: Context, databaseHelper: SignalDatabase) : Database(context, databaseHelper) { +class OneTimePreKeyTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTable(context, databaseHelper) { companion object { - private val TAG = Log.tag(OneTimePreKeyDatabase::class.java) + private val TAG = Log.tag(OneTimePreKeyTable::class.java) const val TABLE_NAME = "one_time_prekeys" const val ID = "_id" diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/PaymentDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/PaymentTable.java similarity index 99% rename from app/src/main/java/org/thoughtcrime/securesms/database/PaymentDatabase.java rename to app/src/main/java/org/thoughtcrime/securesms/database/PaymentTable.java index ec658b217..e7bb8cdf5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/PaymentDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/PaymentTable.java @@ -44,9 +44,9 @@ import java.util.LinkedList; import java.util.List; import java.util.UUID; -public final class PaymentDatabase extends Database implements RecipientIdDatabaseReference { +public final class PaymentTable extends DatabaseTable implements RecipientIdDatabaseReference { - private static final String TAG = Log.tag(PaymentDatabase.class); + private static final String TAG = Log.tag(PaymentTable.class); public static final String TABLE_NAME = "payments"; @@ -98,7 +98,7 @@ public final class PaymentDatabase extends Database implements RecipientIdDataba private final MutableLiveData changeSignal; - PaymentDatabase(@NonNull Context context, @NonNull SignalDatabase databaseHelper) { + PaymentTable(@NonNull Context context, @NonNull SignalDatabase databaseHelper) { super(context, databaseHelper); this.changeSignal = new MutableLiveData<>(new Object()); @@ -410,7 +410,7 @@ public final class PaymentDatabase extends Database implements RecipientIdDataba .where(query.getWhere(), (Object[]) query.getWhereArgs()) .run(); - payments.addAll(CursorExtensionsKt.readToList(cursor, PaymentDatabase::readPayment)); + payments.addAll(CursorExtensionsKt.readToList(cursor, PaymentTable::readPayment)); } return payments; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/PendingPniSignatureMessageDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/PendingPniSignatureMessageTable.kt similarity index 90% rename from app/src/main/java/org/thoughtcrime/securesms/database/PendingPniSignatureMessageDatabase.kt rename to app/src/main/java/org/thoughtcrime/securesms/database/PendingPniSignatureMessageTable.kt index 83690238a..685db6044 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/PendingPniSignatureMessageDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/PendingPniSignatureMessageTable.kt @@ -16,10 +16,10 @@ import org.whispersystems.signalservice.api.messages.SendMessageResult * When we receive delivery receipts for these messages, we remove entries from the table and can clear * the `needsPniSignature` flag on the recipient when all are delivered. */ -class PendingPniSignatureMessageDatabase(context: Context, databaseHelper: SignalDatabase) : Database(context, databaseHelper), RecipientIdDatabaseReference { +class PendingPniSignatureMessageTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTable(context, databaseHelper), RecipientIdDatabaseReference { companion object { - private val TAG = Log.tag(PendingPniSignatureMessageDatabase::class.java) + private val TAG = Log.tag(PendingPniSignatureMessageTable::class.java) const val TABLE_NAME = "pending_pni_signature_message" @@ -31,7 +31,7 @@ class PendingPniSignatureMessageDatabase(context: Context, databaseHelper: Signa const val CREATE_TABLE = """ CREATE TABLE $TABLE_NAME ( $ID INTEGER PRIMARY KEY, - $RECIPIENT_ID INTEGER NOT NULL REFERENCES ${RecipientDatabase.TABLE_NAME} (${RecipientDatabase.ID}) ON DELETE CASCADE, + $RECIPIENT_ID INTEGER NOT NULL REFERENCES ${RecipientTable.TABLE_NAME} (${RecipientTable.ID}) ON DELETE CASCADE, $SENT_TIMESTAMP INTEGER NOT NULL, $DEVICE_ID INTEGER NOT NULL ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/PendingRetryReceiptCache.kt b/app/src/main/java/org/thoughtcrime/securesms/database/PendingRetryReceiptCache.kt index 6e588e620..7ac9a56d4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/PendingRetryReceiptCache.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/PendingRetryReceiptCache.kt @@ -6,7 +6,7 @@ import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.util.FeatureFlags /** - * A write-through cache for [PendingRetryReceiptDatabase]. + * A write-through cache for [PendingRetryReceiptTable]. * * We have to read from this cache every time we process an incoming message. As a result, it's a very performance-sensitive operation. * @@ -14,7 +14,7 @@ import org.thoughtcrime.securesms.util.FeatureFlags * future reads can happen in memory. */ class PendingRetryReceiptCache @VisibleForTesting constructor( - private val database: PendingRetryReceiptDatabase = SignalDatabase.pendingRetryReceipts + private val database: PendingRetryReceiptTable = SignalDatabase.pendingRetryReceipts ) { private val pendingRetries: MutableMap = HashMap() diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/PendingRetryReceiptDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/PendingRetryReceiptTable.java similarity index 95% rename from app/src/main/java/org/thoughtcrime/securesms/database/PendingRetryReceiptDatabase.java rename to app/src/main/java/org/thoughtcrime/securesms/database/PendingRetryReceiptTable.java index f8eaa1aec..f3bfd9e6f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/PendingRetryReceiptDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/PendingRetryReceiptTable.java @@ -22,7 +22,7 @@ import java.util.List; * * Do not use directly! The only class that should be accessing this is {@link PendingRetryReceiptCache} */ -public final class PendingRetryReceiptDatabase extends Database implements RecipientIdDatabaseReference, ThreadIdDatabaseReference { +public final class PendingRetryReceiptTable extends DatabaseTable implements RecipientIdDatabaseReference, ThreadIdDatabaseReference { public static final String TABLE_NAME = "pending_retry_receipts"; @@ -41,7 +41,7 @@ public final class PendingRetryReceiptDatabase extends Database implements Recip THREAD_ID + " INTEGER NOT NULL, " + "UNIQUE(" + AUTHOR + "," + SENT_TIMESTAMP + ") ON CONFLICT REPLACE);"; - PendingRetryReceiptDatabase(Context context, SignalDatabase databaseHelper) { + PendingRetryReceiptTable(Context context, SignalDatabase databaseHelper) { super(context, databaseHelper); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/PnpOperations.kt b/app/src/main/java/org/thoughtcrime/securesms/database/PnpOperations.kt index a79537484..ced9718c9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/PnpOperations.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/PnpOperations.kt @@ -7,7 +7,7 @@ import org.whispersystems.signalservice.api.push.ACI import org.whispersystems.signalservice.api.push.PNI /** - * Encapsulates data around processing a tuple of user data into a user entry in [RecipientDatabase]. + * Encapsulates data around processing a tuple of user data into a user entry in [RecipientTable]. * Also lets you apply a list of [PnpOperation]s to get what the resulting dataset would be. */ data class PnpDataSet( @@ -132,7 +132,7 @@ data class PnpDataSet( /** * Represents a set of actions that need to be applied to incorporate a tuple of user data - * into [RecipientDatabase]. + * into [RecipientTable]. */ data class PnpChangeSet( val id: PnpIdResolver, @@ -172,7 +172,7 @@ sealed class PnpIdResolver { } /** - * An operation that needs to be performed on the [RecipientDatabase] as part of merging in new user data. + * An operation that needs to be performed on the [RecipientTable] as part of merging in new user data. * Lets us describe various situations as a series of operations, making code clearer and tests easier. */ sealed class PnpOperation { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/PushDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/PushTable.java similarity index 98% rename from app/src/main/java/org/thoughtcrime/securesms/database/PushDatabase.java rename to app/src/main/java/org/thoughtcrime/securesms/database/PushTable.java index ef83d89c7..12e5170a8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/PushDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/PushTable.java @@ -16,9 +16,9 @@ import java.io.Closeable; import java.io.IOException; import java.util.Optional; -public class PushDatabase extends Database { +public class PushTable extends DatabaseTable { - private static final String TAG = Log.tag(PushDatabase.class); + private static final String TAG = Log.tag(PushTable.class); private static final String TABLE_NAME = "push"; public static final String ID = "_id"; @@ -45,7 +45,7 @@ public class PushDatabase extends Database { SERVER_DELIVERED_TIMESTAMP + " INTEGER DEFAULT 0, " + SERVER_GUID + " TEXT DEFAULT NULL);"; - public PushDatabase(Context context, SignalDatabase databaseHelper) { + public PushTable(Context context, SignalDatabase databaseHelper) { super(context, databaseHelper); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ReactionDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/ReactionTable.kt similarity index 90% rename from app/src/main/java/org/thoughtcrime/securesms/database/ReactionDatabase.kt rename to app/src/main/java/org/thoughtcrime/securesms/database/ReactionTable.kt index 2cb3363ba..de6388f71 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ReactionDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ReactionTable.kt @@ -13,7 +13,7 @@ import org.thoughtcrime.securesms.recipients.RecipientId /** * Store reactions on messages. */ -class ReactionDatabase(context: Context, databaseHelper: SignalDatabase) : Database(context, databaseHelper), RecipientIdDatabaseReference { +class ReactionTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTable(context, databaseHelper), RecipientIdDatabaseReference { companion object { const val TABLE_NAME = "reaction" @@ -32,7 +32,7 @@ class ReactionDatabase(context: Context, databaseHelper: SignalDatabase) : Datab $ID INTEGER PRIMARY KEY, $MESSAGE_ID INTEGER NOT NULL, $IS_MMS INTEGER NOT NULL, - $AUTHOR_ID INTEGER NOT NULL REFERENCES ${RecipientDatabase.TABLE_NAME} (${RecipientDatabase.ID}) ON DELETE CASCADE, + $AUTHOR_ID INTEGER NOT NULL REFERENCES ${RecipientTable.TABLE_NAME} (${RecipientTable.ID}) ON DELETE CASCADE, $EMOJI TEXT NOT NULL, $DATE_SENT INTEGER NOT NULL, $DATE_RECEIVED INTEGER NOT NULL, @@ -43,15 +43,15 @@ class ReactionDatabase(context: Context, databaseHelper: SignalDatabase) : Datab @JvmField val CREATE_TRIGGERS = arrayOf( """ - CREATE TRIGGER reactions_sms_delete AFTER DELETE ON ${SmsDatabase.TABLE_NAME} + CREATE TRIGGER reactions_sms_delete AFTER DELETE ON ${SmsTable.TABLE_NAME} BEGIN - DELETE FROM $TABLE_NAME WHERE $MESSAGE_ID = old.${SmsDatabase.ID} AND $IS_MMS = 0; + DELETE FROM $TABLE_NAME WHERE $MESSAGE_ID = old.${SmsTable.ID} AND $IS_MMS = 0; END """, """ - CREATE TRIGGER reactions_mms_delete AFTER DELETE ON ${MmsDatabase.TABLE_NAME} + CREATE TRIGGER reactions_mms_delete AFTER DELETE ON ${MmsTable.TABLE_NAME} BEGIN - DELETE FROM $TABLE_NAME WHERE $MESSAGE_ID = old.${MmsDatabase.ID} AND $IS_MMS = 1; + DELETE FROM $TABLE_NAME WHERE $MESSAGE_ID = old.${MmsTable.ID} AND $IS_MMS = 1; END """ ) @@ -200,9 +200,9 @@ class ReactionDatabase(context: Context, databaseHelper: SignalDatabase) : Datab fun deleteAbandonedReactions() { val query = """ - ($IS_MMS = 0 AND $MESSAGE_ID NOT IN (SELECT ${SmsDatabase.ID} FROM ${SmsDatabase.TABLE_NAME})) + ($IS_MMS = 0 AND $MESSAGE_ID NOT IN (SELECT ${SmsTable.ID} FROM ${SmsTable.TABLE_NAME})) OR - ($IS_MMS = 1 AND $MESSAGE_ID NOT IN (SELECT ${MmsDatabase.ID} FROM ${MmsDatabase.TABLE_NAME})) + ($IS_MMS = 1 AND $MESSAGE_ID NOT IN (SELECT ${MmsTable.ID} FROM ${MmsTable.TABLE_NAME})) """.trimIndent() writableDatabase.delete(TABLE_NAME, query, null) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt similarity index 98% rename from app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.kt rename to app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt index 363bacf96..b01c343b7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt @@ -49,10 +49,10 @@ import org.thoughtcrime.securesms.conversation.colors.ChatColors.Companion.forCh import org.thoughtcrime.securesms.conversation.colors.ChatColors.Id.Companion.forLongValue import org.thoughtcrime.securesms.conversation.colors.ChatColorsMapper.getChatColors import org.thoughtcrime.securesms.crypto.ProfileKeyUtil -import org.thoughtcrime.securesms.database.GroupDatabase.LegacyGroupInsertException -import org.thoughtcrime.securesms.database.GroupDatabase.MissedGroupMigrationInsertException -import org.thoughtcrime.securesms.database.GroupDatabase.ShowAsStoryState -import org.thoughtcrime.securesms.database.IdentityDatabase.VerifiedStatus +import org.thoughtcrime.securesms.database.GroupTable.LegacyGroupInsertException +import org.thoughtcrime.securesms.database.GroupTable.MissedGroupMigrationInsertException +import org.thoughtcrime.securesms.database.GroupTable.ShowAsStoryState +import org.thoughtcrime.securesms.database.IdentityTable.VerifiedStatus import org.thoughtcrime.securesms.database.SignalDatabase.Companion.groups import org.thoughtcrime.securesms.database.SignalDatabase.Companion.identities import org.thoughtcrime.securesms.database.SignalDatabase.Companion.runPostSuccessfulTransaction @@ -115,10 +115,10 @@ import java.util.Optional import java.util.concurrent.TimeUnit import kotlin.math.max -open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : Database(context, databaseHelper) { +open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTable(context, databaseHelper) { companion object { - private val TAG = Log.tag(RecipientDatabase::class.java) + private val TAG = Log.tag(RecipientTable::class.java) private val UNREGISTERED_LIFESPAN: Long = TimeUnit.DAYS.toMillis(30) @@ -382,15 +382,15 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : private val INSIGHTS_INVITEE_LIST = """ SELECT $TABLE_NAME.$ID - FROM $TABLE_NAME INNER JOIN ${ThreadDatabase.TABLE_NAME} ON $TABLE_NAME.$ID = ${ThreadDatabase.TABLE_NAME}.${ThreadDatabase.RECIPIENT_ID} + FROM $TABLE_NAME INNER JOIN ${ThreadTable.TABLE_NAME} ON $TABLE_NAME.$ID = ${ThreadTable.TABLE_NAME}.${ThreadTable.RECIPIENT_ID} WHERE $TABLE_NAME.$GROUP_ID IS NULL AND $TABLE_NAME.$REGISTERED = ${RegisteredState.NOT_REGISTERED.id} AND $TABLE_NAME.$SEEN_INVITE_REMINDER < ${InsightsBannerTier.TIER_TWO.id} AND - ${ThreadDatabase.TABLE_NAME}.${ThreadDatabase.HAS_SENT} AND - ${ThreadDatabase.TABLE_NAME}.${ThreadDatabase.DATE} > ? AND + ${ThreadTable.TABLE_NAME}.${ThreadTable.HAS_SENT} AND + ${ThreadTable.TABLE_NAME}.${ThreadTable.DATE} > ? AND $TABLE_NAME.$HIDDEN = 0 - ORDER BY ${ThreadDatabase.TABLE_NAME}.${ThreadDatabase.DATE} DESC LIMIT 50 + ORDER BY ${ThreadTable.TABLE_NAME}.${ThreadTable.DATE} DESC LIMIT 50 """ } @@ -1123,19 +1123,19 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : private fun getRecordForSync(query: String?, args: Array?): List { val table = """ - $TABLE_NAME LEFT OUTER JOIN ${IdentityDatabase.TABLE_NAME} ON $TABLE_NAME.$SERVICE_ID = ${IdentityDatabase.TABLE_NAME}.${IdentityDatabase.ADDRESS} - LEFT OUTER JOIN ${GroupDatabase.TABLE_NAME} ON $TABLE_NAME.$GROUP_ID = ${GroupDatabase.TABLE_NAME}.${GroupDatabase.GROUP_ID} - LEFT OUTER JOIN ${ThreadDatabase.TABLE_NAME} ON $TABLE_NAME.$ID = ${ThreadDatabase.TABLE_NAME}.${ThreadDatabase.RECIPIENT_ID} + $TABLE_NAME LEFT OUTER JOIN ${IdentityTable.TABLE_NAME} ON $TABLE_NAME.$SERVICE_ID = ${IdentityTable.TABLE_NAME}.${IdentityTable.ADDRESS} + LEFT OUTER JOIN ${GroupTable.TABLE_NAME} ON $TABLE_NAME.$GROUP_ID = ${GroupTable.TABLE_NAME}.${GroupTable.GROUP_ID} + LEFT OUTER JOIN ${ThreadTable.TABLE_NAME} ON $TABLE_NAME.$ID = ${ThreadTable.TABLE_NAME}.${ThreadTable.RECIPIENT_ID} """.trimIndent() val out: MutableList = ArrayList() val columns: Array = TYPED_RECIPIENT_PROJECTION + arrayOf( "$TABLE_NAME.$STORAGE_PROTO", "$TABLE_NAME.$UNREGISTERED_TIMESTAMP", - "${GroupDatabase.TABLE_NAME}.${GroupDatabase.V2_MASTER_KEY}", - "${ThreadDatabase.TABLE_NAME}.${ThreadDatabase.ARCHIVED}", - "${ThreadDatabase.TABLE_NAME}.${ThreadDatabase.READ}", - "${IdentityDatabase.TABLE_NAME}.${IdentityDatabase.VERIFIED} AS $IDENTITY_STATUS", - "${IdentityDatabase.TABLE_NAME}.${IdentityDatabase.IDENTITY_KEY} AS $IDENTITY_KEY" + "${GroupTable.TABLE_NAME}.${GroupTable.V2_MASTER_KEY}", + "${ThreadTable.TABLE_NAME}.${ThreadTable.ARCHIVED}", + "${ThreadTable.TABLE_NAME}.${ThreadTable.READ}", + "${IdentityTable.TABLE_NAME}.${IdentityTable.VERIFIED} AS $IDENTITY_STATUS", + "${IdentityTable.TABLE_NAME}.${IdentityTable.IDENTITY_KEY} AS $IDENTITY_KEY" ) readableDatabase.query(table, columns, query, args, "$TABLE_NAME.$ID", null, null).use { cursor -> @@ -3157,7 +3157,7 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : } fun getRecipientsForMultiDeviceSync(): List { - val subquery = "SELECT ${ThreadDatabase.TABLE_NAME}.${ThreadDatabase.RECIPIENT_ID} FROM ${ThreadDatabase.TABLE_NAME}" + val subquery = "SELECT ${ThreadTable.TABLE_NAME}.${ThreadTable.RECIPIENT_ID} FROM ${ThreadTable.TABLE_NAME}" val selection = "$REGISTERED = ? AND $GROUP_ID IS NULL AND $ID != ? AND ($SYSTEM_CONTACT_URI NOT NULL OR $ID IN ($subquery))" val args = arrayOf(RegisteredState.REGISTERED.id.toString(), Recipient.self().id.serialize()) val recipients: MutableList = ArrayList() @@ -3300,11 +3300,11 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : val select = """ SELECT r.$ID FROM $TABLE_NAME AS r - INNER JOIN ${ThreadDatabase.TABLE_NAME} AS t ON t.${ThreadDatabase.RECIPIENT_ID} = r.$ID + INNER JOIN ${ThreadTable.TABLE_NAME} AS t ON t.${ThreadTable.RECIPIENT_ID} = r.$ID WHERE r.$PROFILE_SHARING = 0 AND ( - EXISTS(SELECT 1 FROM ${SmsDatabase.TABLE_NAME} WHERE ${SmsDatabase.THREAD_ID} = t.${ThreadDatabase.ID} AND ${SmsDatabase.DATE_RECEIVED} < ?) OR - EXISTS(SELECT 1 FROM ${MmsDatabase.TABLE_NAME} WHERE ${MmsDatabase.THREAD_ID} = t.${ThreadDatabase.ID} AND ${MmsDatabase.DATE_RECEIVED} < ?) + EXISTS(SELECT 1 FROM ${SmsTable.TABLE_NAME} WHERE ${SmsTable.THREAD_ID} = t.${ThreadTable.ID} AND ${SmsTable.DATE_RECEIVED} < ?) OR + EXISTS(SELECT 1 FROM ${MmsTable.TABLE_NAME} WHERE ${MmsTable.THREAD_ID} = t.${ThreadTable.ID} AND ${MmsTable.DATE_RECEIVED} < ?) ) """.trimIndent() @@ -3953,9 +3953,9 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : private fun getSyncExtras(cursor: Cursor): RecipientRecord.SyncExtras { val storageProtoRaw = cursor.optionalString(STORAGE_PROTO).orElse(null) val storageProto = if (storageProtoRaw != null) Base64.decodeOrThrow(storageProtoRaw) else null - val archived = cursor.optionalBoolean(ThreadDatabase.ARCHIVED).orElse(false) - val forcedUnread = cursor.optionalInt(ThreadDatabase.READ).map { status: Int -> status == ThreadDatabase.ReadStatus.FORCED_UNREAD.serialize() }.orElse(false) - val groupMasterKey = cursor.optionalBlob(GroupDatabase.V2_MASTER_KEY).map { GroupUtil.requireMasterKey(it) }.orElse(null) + val archived = cursor.optionalBoolean(ThreadTable.ARCHIVED).orElse(false) + val forcedUnread = cursor.optionalInt(ThreadTable.READ).map { status: Int -> status == ThreadTable.ReadStatus.FORCED_UNREAD.serialize() }.orElse(false) + val groupMasterKey = cursor.optionalBlob(GroupTable.V2_MASTER_KEY).map { GroupUtil.requireMasterKey(it) }.orElse(null) val identityKey = cursor.optionalString(IDENTITY_KEY).map { Base64.decodeOrThrow(it) }.orElse(null) val identityStatus = cursor.optionalInt(IDENTITY_STATUS).map { VerifiedStatus.forState(it) }.orElse(VerifiedStatus.DEFAULT) val unregisteredTimestamp = cursor.optionalLong(UNREGISTERED_TIMESTAMP).orElse(0) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RemappedRecordsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/RemappedRecordTables.java similarity index 97% rename from app/src/main/java/org/thoughtcrime/securesms/database/RemappedRecordsDatabase.java rename to app/src/main/java/org/thoughtcrime/securesms/database/RemappedRecordTables.java index 47b40ba5d..387191873 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RemappedRecordsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RemappedRecordTables.java @@ -17,7 +17,7 @@ import java.util.Map; /** * The backing datastore for {@link RemappedRecords}. See that class for more details. */ -public class RemappedRecordsDatabase extends Database { +public class RemappedRecordTables extends DatabaseTable { public static final String[] CREATE_TABLE = { Recipients.CREATE_TABLE, Threads.CREATE_TABLE }; @@ -42,7 +42,7 @@ public class RemappedRecordsDatabase extends Database { NEW_ID + " INTEGER)"; } - RemappedRecordsDatabase(Context context, SignalDatabase databaseHelper) { + RemappedRecordTables(Context context, SignalDatabase databaseHelper) { super(context, databaseHelper); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RemoteMegaphoneDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/RemoteMegaphoneTable.kt similarity index 97% rename from app/src/main/java/org/thoughtcrime/securesms/database/RemoteMegaphoneDatabase.kt rename to app/src/main/java/org/thoughtcrime/securesms/database/RemoteMegaphoneTable.kt index 025fa47a9..c350cf143 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RemoteMegaphoneDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RemoteMegaphoneTable.kt @@ -24,10 +24,10 @@ import java.util.concurrent.TimeUnit /** * Stores remotely configured megaphones. */ -class RemoteMegaphoneDatabase(context: Context, databaseHelper: SignalDatabase) : Database(context, databaseHelper) { +class RemoteMegaphoneTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTable(context, databaseHelper) { companion object { - private val TAG = Log.tag(RemoteMegaphoneDatabase::class.java) + private val TAG = Log.tag(RemoteMegaphoneTable::class.java) private const val TABLE_NAME = "remote_megaphone" private const val ID = "_id" diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SearchDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/SearchDatabase.java deleted file mode 100644 index e00e91a2d..000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SearchDatabase.java +++ /dev/null @@ -1,170 +0,0 @@ -package org.thoughtcrime.securesms.database; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.database.Cursor; -import android.text.TextUtils; - -import androidx.annotation.NonNull; - -import com.annimon.stream.Stream; - -/** - * Contains all databases necessary for full-text search (FTS). - */ -@SuppressLint({ "RecipientIdDatabaseReferenceUsage", "ThreadIdDatabaseReferenceUsage"}) // Handles updates via triggers -public class SearchDatabase extends Database { - - public static final String SMS_FTS_TABLE_NAME = "sms_fts"; - public static final String MMS_FTS_TABLE_NAME = "mms_fts"; - - public static final String ID = "rowid"; - public static final String BODY = MmsSmsColumns.BODY; - public static final String THREAD_ID = MmsSmsColumns.THREAD_ID; - public static final String SNIPPET = "snippet"; - public static final String CONVERSATION_RECIPIENT = "conversation_recipient"; - public static final String MESSAGE_RECIPIENT = "message_recipient"; - public static final String IS_MMS = "is_mms"; - public static final String MESSAGE_ID = "message_id"; - - public static final String SNIPPET_WRAP = "..."; - - public static final String[] CREATE_TABLE = { - "CREATE VIRTUAL TABLE " + SMS_FTS_TABLE_NAME + " USING fts5(" + BODY + ", " + THREAD_ID + " UNINDEXED, content=" + SmsDatabase.TABLE_NAME + ", content_rowid=" + SmsDatabase.ID + ");", - - "CREATE TRIGGER sms_ai AFTER INSERT ON " + SmsDatabase.TABLE_NAME + " BEGIN\n" + - " INSERT INTO " + SMS_FTS_TABLE_NAME + "(" + ID + ", " + BODY + ", " + THREAD_ID + ") VALUES (new." + SmsDatabase.ID + ", new." + SmsDatabase.BODY + ", new." + SmsDatabase.THREAD_ID + ");\n" + - "END;\n", - "CREATE TRIGGER sms_ad AFTER DELETE ON " + SmsDatabase.TABLE_NAME + " BEGIN\n" + - " INSERT INTO " + SMS_FTS_TABLE_NAME + "(" + SMS_FTS_TABLE_NAME + ", " + ID + ", " + BODY + ", " + THREAD_ID + ") VALUES('delete', old." + SmsDatabase.ID + ", old." + SmsDatabase.BODY + ", old." + SmsDatabase.THREAD_ID + ");\n" + - "END;\n", - "CREATE TRIGGER sms_au AFTER UPDATE ON " + SmsDatabase.TABLE_NAME + " BEGIN\n" + - " INSERT INTO " + SMS_FTS_TABLE_NAME + "(" + SMS_FTS_TABLE_NAME + ", " + ID + ", " + BODY + ", " + THREAD_ID + ") VALUES('delete', old." + SmsDatabase.ID + ", old." + SmsDatabase.BODY + ", old." + SmsDatabase.THREAD_ID + ");\n" + - " INSERT INTO " + SMS_FTS_TABLE_NAME + "(" + ID + ", " + BODY + ", " + THREAD_ID + ") VALUES(new." + SmsDatabase.ID + ", new." + SmsDatabase.BODY + ", new." + SmsDatabase.THREAD_ID + ");\n" + - "END;", - - - "CREATE VIRTUAL TABLE " + MMS_FTS_TABLE_NAME + " USING fts5(" + BODY + ", " + THREAD_ID + " UNINDEXED, content=" + MmsDatabase.TABLE_NAME + ", content_rowid=" + MmsDatabase.ID + ");", - - "CREATE TRIGGER mms_ai AFTER INSERT ON " + MmsDatabase.TABLE_NAME + " BEGIN\n" + - " INSERT INTO " + MMS_FTS_TABLE_NAME + "(" + ID + ", " + BODY + ", " + THREAD_ID + ") VALUES (new." + MmsDatabase.ID + ", new." + MmsDatabase.BODY + ", new." + MmsDatabase.THREAD_ID + ");\n" + - "END;\n", - "CREATE TRIGGER mms_ad AFTER DELETE ON " + MmsDatabase.TABLE_NAME + " BEGIN\n" + - " INSERT INTO " + MMS_FTS_TABLE_NAME + "(" + MMS_FTS_TABLE_NAME + ", " + ID + ", " + BODY + ", " + THREAD_ID + ") VALUES('delete', old." + MmsDatabase.ID + ", old." + MmsDatabase.BODY + ", old." + MmsDatabase.THREAD_ID + ");\n" + - "END;\n", - "CREATE TRIGGER mms_au AFTER UPDATE ON " + MmsDatabase.TABLE_NAME + " BEGIN\n" + - " INSERT INTO " + MMS_FTS_TABLE_NAME + "(" + MMS_FTS_TABLE_NAME + ", " + ID + ", " + BODY + ", " + THREAD_ID + ") VALUES('delete', old." + MmsDatabase.ID + ", old." + MmsDatabase.BODY + ", old." + MmsDatabase.THREAD_ID + ");\n" + - " INSERT INTO " + MMS_FTS_TABLE_NAME + "(" + ID + ", " + BODY + ", " + THREAD_ID + ") VALUES (new." + MmsDatabase.ID + ", new." + MmsDatabase.BODY + ", new." + MmsDatabase.THREAD_ID + ");\n" + - "END;" - }; - - private static final String MESSAGES_QUERY = - "SELECT " + - ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.RECIPIENT_ID + " AS " + CONVERSATION_RECIPIENT + ", " + - MmsSmsColumns.RECIPIENT_ID + " AS " + MESSAGE_RECIPIENT + ", " + - "snippet(" + SMS_FTS_TABLE_NAME + ", -1, '', '', '" + SNIPPET_WRAP + "', 7) AS " + SNIPPET + ", " + - SmsDatabase.TABLE_NAME + "." + SmsDatabase.DATE_RECEIVED + " AS " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + ", " + - SMS_FTS_TABLE_NAME + "." + THREAD_ID + ", " + - SMS_FTS_TABLE_NAME + "." + BODY + ", " + - SMS_FTS_TABLE_NAME + "." + ID + " AS " + MESSAGE_ID + ", " + - "0 AS " + IS_MMS + " " + - "FROM " + SmsDatabase.TABLE_NAME + " " + - "INNER JOIN " + SMS_FTS_TABLE_NAME + " ON " + SMS_FTS_TABLE_NAME + "." + ID + " = " + SmsDatabase.TABLE_NAME + "." + SmsDatabase.ID + " " + - "INNER JOIN " + ThreadDatabase.TABLE_NAME + " ON " + SMS_FTS_TABLE_NAME + "." + THREAD_ID + " = " + ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.ID + " " + - "WHERE " + SMS_FTS_TABLE_NAME + " MATCH ? " + - "AND " + SmsDatabase.TABLE_NAME + "." + SmsDatabase.TYPE + " & " + MmsSmsColumns.Types.GROUP_V2_BIT + " = 0 " + - "AND " + SmsDatabase.TABLE_NAME + "." + SmsDatabase.TYPE + " & " + MmsSmsColumns.Types.BASE_TYPE_MASK + " != " + MmsSmsColumns.Types.PROFILE_CHANGE_TYPE + " " + - "AND " + SmsDatabase.TABLE_NAME + "." + SmsDatabase.TYPE + " & " + MmsSmsColumns.Types.BASE_TYPE_MASK + " != " + MmsSmsColumns.Types.GROUP_CALL_TYPE + " " + - "UNION ALL " + - "SELECT " + - ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.RECIPIENT_ID + " AS " + CONVERSATION_RECIPIENT + ", " + - MmsSmsColumns.RECIPIENT_ID + " AS " + MESSAGE_RECIPIENT + ", " + - "snippet(" + MMS_FTS_TABLE_NAME + ", -1, '', '', '" + SNIPPET_WRAP + "', 7) AS " + SNIPPET + ", " + - MmsDatabase.TABLE_NAME + "." + MmsDatabase.DATE_RECEIVED + " AS " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + ", " + - MMS_FTS_TABLE_NAME + "." + THREAD_ID + ", " + - MMS_FTS_TABLE_NAME + "." + BODY + ", " + - MMS_FTS_TABLE_NAME + "." + ID + " AS " + MESSAGE_ID + ", " + - "1 AS " + IS_MMS + " " + - "FROM " + MmsDatabase.TABLE_NAME + " " + - "INNER JOIN " + MMS_FTS_TABLE_NAME + " ON " + MMS_FTS_TABLE_NAME + "." + ID + " = " + MmsDatabase.TABLE_NAME + "." + MmsDatabase.ID + " " + - "INNER JOIN " + ThreadDatabase.TABLE_NAME + " ON " + MMS_FTS_TABLE_NAME + "." + THREAD_ID + " = " + ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.ID + " " + - "WHERE " + MMS_FTS_TABLE_NAME + " MATCH ? " + - "AND " + MmsDatabase.TABLE_NAME + "." + MmsDatabase.MESSAGE_BOX + " & " + MmsSmsColumns.Types.GROUP_V2_BIT + " = 0 " + - "AND " + MmsDatabase.TABLE_NAME + "." + MmsDatabase.MESSAGE_BOX + " & " + MmsSmsColumns.Types.SPECIAL_TYPE_PAYMENTS_NOTIFICATION + " = 0 " + - "ORDER BY " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " DESC " + - "LIMIT 500"; - - private static final String MESSAGES_FOR_THREAD_QUERY = - "SELECT " + - ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.RECIPIENT_ID + " AS " + CONVERSATION_RECIPIENT + ", " + - MmsSmsColumns.RECIPIENT_ID + " AS " + MESSAGE_RECIPIENT + ", " + - "snippet(" + SMS_FTS_TABLE_NAME + ", -1, '', '', '" + SNIPPET_WRAP + "', 7) AS " + SNIPPET + ", " + - SmsDatabase.TABLE_NAME + "." + SmsDatabase.DATE_RECEIVED + " AS " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + ", " + - SMS_FTS_TABLE_NAME + "." + THREAD_ID + ", " + - SMS_FTS_TABLE_NAME + "." + BODY + ", " + - SMS_FTS_TABLE_NAME + "." + ID + " AS " + MESSAGE_ID + ", " + - "0 AS " + IS_MMS + " " + - "FROM " + SmsDatabase.TABLE_NAME + " " + - "INNER JOIN " + SMS_FTS_TABLE_NAME + " ON " + SMS_FTS_TABLE_NAME + "." + ID + " = " + SmsDatabase.TABLE_NAME + "." + SmsDatabase.ID + " " + - "INNER JOIN " + ThreadDatabase.TABLE_NAME + " ON " + SMS_FTS_TABLE_NAME + "." + THREAD_ID + " = " + ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.ID + " " + - "WHERE " + SMS_FTS_TABLE_NAME + " MATCH ? AND " + SmsDatabase.TABLE_NAME + "." + MmsSmsColumns.THREAD_ID + " = ? " + - "UNION ALL " + - "SELECT " + - ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.RECIPIENT_ID + " AS " + CONVERSATION_RECIPIENT + ", " + - MmsSmsColumns.RECIPIENT_ID + " AS " + MESSAGE_RECIPIENT + ", " + - "snippet(" + MMS_FTS_TABLE_NAME + ", -1, '', '', '" + SNIPPET_WRAP + "', 7) AS " + SNIPPET + ", " + - MmsDatabase.TABLE_NAME + "." + MmsDatabase.DATE_RECEIVED + " AS " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + ", " + - MMS_FTS_TABLE_NAME + "." + THREAD_ID + ", " + - MMS_FTS_TABLE_NAME + "." + BODY + ", " + - MMS_FTS_TABLE_NAME + "." + ID + " AS " + MESSAGE_ID + ", " + - "1 AS " + IS_MMS + " " + - "FROM " + MmsDatabase.TABLE_NAME + " " + - "INNER JOIN " + MMS_FTS_TABLE_NAME + " ON " + MMS_FTS_TABLE_NAME + "." + ID + " = " + MmsDatabase.TABLE_NAME + "." + MmsDatabase.ID + " " + - "INNER JOIN " + ThreadDatabase.TABLE_NAME + " ON " + MMS_FTS_TABLE_NAME + "." + THREAD_ID + " = " + ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.ID + " " + - "WHERE " + MMS_FTS_TABLE_NAME + " MATCH ? AND " + MmsDatabase.TABLE_NAME + "." + MmsSmsColumns.THREAD_ID + " = ? " + - "ORDER BY " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " DESC " + - "LIMIT 500"; - - public SearchDatabase(@NonNull Context context, @NonNull SignalDatabase databaseHelper) { - super(context, databaseHelper); - } - - public Cursor queryMessages(@NonNull String query) { - SQLiteDatabase db = databaseHelper.getSignalReadableDatabase(); - String fullTextSearchQuery = createFullTextSearchQuery(query); - - if (TextUtils.isEmpty(fullTextSearchQuery)) { - return null; - } - - return db.rawQuery(MESSAGES_QUERY, new String[] { fullTextSearchQuery, fullTextSearchQuery }); - } - - public Cursor queryMessages(@NonNull String query, long threadId) { - SQLiteDatabase db = databaseHelper.getSignalReadableDatabase(); - String fullTextSearchQuery = createFullTextSearchQuery(query); - - if (TextUtils.isEmpty(fullTextSearchQuery)) { - return null; - } - - return db.rawQuery(MESSAGES_FOR_THREAD_QUERY, new String[] { fullTextSearchQuery, - String.valueOf(threadId), - fullTextSearchQuery, - String.valueOf(threadId) }); - } - - private static String createFullTextSearchQuery(@NonNull String query) { - return Stream.of(query.split(" ")) - .map(String::trim) - .filter(s -> s.length() > 0) - .map(SearchDatabase::fullTextSearchEscape) - .collect(StringBuilder::new, (sb, s) -> sb.append(s).append("* ")) - .toString(); - } - - private static String fullTextSearchEscape(String s) { - return "\"" + s.replace("\"", "\"\"") + "\""; - } -} - diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SearchTable.java b/app/src/main/java/org/thoughtcrime/securesms/database/SearchTable.java new file mode 100644 index 000000000..38ddf1812 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SearchTable.java @@ -0,0 +1,170 @@ +package org.thoughtcrime.securesms.database; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.database.Cursor; +import android.text.TextUtils; + +import androidx.annotation.NonNull; + +import com.annimon.stream.Stream; + +/** + * Contains all databases necessary for full-text search (FTS). + */ +@SuppressLint({ "RecipientIdDatabaseReferenceUsage", "ThreadIdDatabaseReferenceUsage"}) // Handles updates via triggers +public class SearchTable extends DatabaseTable { + + public static final String SMS_FTS_TABLE_NAME = "sms_fts"; + public static final String MMS_FTS_TABLE_NAME = "mms_fts"; + + public static final String ID = "rowid"; + public static final String BODY = MmsSmsColumns.BODY; + public static final String THREAD_ID = MmsSmsColumns.THREAD_ID; + public static final String SNIPPET = "snippet"; + public static final String CONVERSATION_RECIPIENT = "conversation_recipient"; + public static final String MESSAGE_RECIPIENT = "message_recipient"; + public static final String IS_MMS = "is_mms"; + public static final String MESSAGE_ID = "message_id"; + + public static final String SNIPPET_WRAP = "..."; + + public static final String[] CREATE_TABLE = { + "CREATE VIRTUAL TABLE " + SMS_FTS_TABLE_NAME + " USING fts5(" + BODY + ", " + THREAD_ID + " UNINDEXED, content=" + SmsTable.TABLE_NAME + ", content_rowid=" + SmsTable.ID + ");", + + "CREATE TRIGGER sms_ai AFTER INSERT ON " + SmsTable.TABLE_NAME + " BEGIN\n" + + " INSERT INTO " + SMS_FTS_TABLE_NAME + "(" + ID + ", " + BODY + ", " + THREAD_ID + ") VALUES (new." + SmsTable.ID + ", new." + SmsTable.BODY + ", new." + SmsTable.THREAD_ID + ");\n" + + "END;\n", + "CREATE TRIGGER sms_ad AFTER DELETE ON " + SmsTable.TABLE_NAME + " BEGIN\n" + + " INSERT INTO " + SMS_FTS_TABLE_NAME + "(" + SMS_FTS_TABLE_NAME + ", " + ID + ", " + BODY + ", " + THREAD_ID + ") VALUES('delete', old." + SmsTable.ID + ", old." + SmsTable.BODY + ", old." + SmsTable.THREAD_ID + ");\n" + + "END;\n", + "CREATE TRIGGER sms_au AFTER UPDATE ON " + SmsTable.TABLE_NAME + " BEGIN\n" + + " INSERT INTO " + SMS_FTS_TABLE_NAME + "(" + SMS_FTS_TABLE_NAME + ", " + ID + ", " + BODY + ", " + THREAD_ID + ") VALUES('delete', old." + SmsTable.ID + ", old." + SmsTable.BODY + ", old." + SmsTable.THREAD_ID + ");\n" + + " INSERT INTO " + SMS_FTS_TABLE_NAME + "(" + ID + ", " + BODY + ", " + THREAD_ID + ") VALUES(new." + SmsTable.ID + ", new." + SmsTable.BODY + ", new." + SmsTable.THREAD_ID + ");\n" + + "END;", + + + "CREATE VIRTUAL TABLE " + MMS_FTS_TABLE_NAME + " USING fts5(" + BODY + ", " + THREAD_ID + " UNINDEXED, content=" + MmsTable.TABLE_NAME + ", content_rowid=" + MmsTable.ID + ");", + + "CREATE TRIGGER mms_ai AFTER INSERT ON " + MmsTable.TABLE_NAME + " BEGIN\n" + + " INSERT INTO " + MMS_FTS_TABLE_NAME + "(" + ID + ", " + BODY + ", " + THREAD_ID + ") VALUES (new." + MmsTable.ID + ", new." + MmsTable.BODY + ", new." + MmsTable.THREAD_ID + ");\n" + + "END;\n", + "CREATE TRIGGER mms_ad AFTER DELETE ON " + MmsTable.TABLE_NAME + " BEGIN\n" + + " INSERT INTO " + MMS_FTS_TABLE_NAME + "(" + MMS_FTS_TABLE_NAME + ", " + ID + ", " + BODY + ", " + THREAD_ID + ") VALUES('delete', old." + MmsTable.ID + ", old." + MmsTable.BODY + ", old." + MmsTable.THREAD_ID + ");\n" + + "END;\n", + "CREATE TRIGGER mms_au AFTER UPDATE ON " + MmsTable.TABLE_NAME + " BEGIN\n" + + " INSERT INTO " + MMS_FTS_TABLE_NAME + "(" + MMS_FTS_TABLE_NAME + ", " + ID + ", " + BODY + ", " + THREAD_ID + ") VALUES('delete', old." + MmsTable.ID + ", old." + MmsTable.BODY + ", old." + MmsTable.THREAD_ID + ");\n" + + " INSERT INTO " + MMS_FTS_TABLE_NAME + "(" + ID + ", " + BODY + ", " + THREAD_ID + ") VALUES (new." + MmsTable.ID + ", new." + MmsTable.BODY + ", new." + MmsTable.THREAD_ID + ");\n" + + "END;" + }; + + private static final String MESSAGES_QUERY = + "SELECT " + + ThreadTable.TABLE_NAME + "." + ThreadTable.RECIPIENT_ID + " AS " + CONVERSATION_RECIPIENT + ", " + + MmsSmsColumns.RECIPIENT_ID + " AS " + MESSAGE_RECIPIENT + ", " + + "snippet(" + SMS_FTS_TABLE_NAME + ", -1, '', '', '" + SNIPPET_WRAP + "', 7) AS " + SNIPPET + ", " + + SmsTable.TABLE_NAME + "." + SmsTable.DATE_RECEIVED + " AS " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + ", " + + SMS_FTS_TABLE_NAME + "." + THREAD_ID + ", " + + SMS_FTS_TABLE_NAME + "." + BODY + ", " + + SMS_FTS_TABLE_NAME + "." + ID + " AS " + MESSAGE_ID + ", " + + "0 AS " + IS_MMS + " " + + "FROM " + SmsTable.TABLE_NAME + " " + + "INNER JOIN " + SMS_FTS_TABLE_NAME + " ON " + SMS_FTS_TABLE_NAME + "." + ID + " = " + SmsTable.TABLE_NAME + "." + SmsTable.ID + " " + + "INNER JOIN " + ThreadTable.TABLE_NAME + " ON " + SMS_FTS_TABLE_NAME + "." + THREAD_ID + " = " + ThreadTable.TABLE_NAME + "." + ThreadTable.ID + " " + + "WHERE " + SMS_FTS_TABLE_NAME + " MATCH ? " + + "AND " + SmsTable.TABLE_NAME + "." + SmsTable.TYPE + " & " + MmsSmsColumns.Types.GROUP_V2_BIT + " = 0 " + + "AND " + SmsTable.TABLE_NAME + "." + SmsTable.TYPE + " & " + MmsSmsColumns.Types.BASE_TYPE_MASK + " != " + MmsSmsColumns.Types.PROFILE_CHANGE_TYPE + " " + + "AND " + SmsTable.TABLE_NAME + "." + SmsTable.TYPE + " & " + MmsSmsColumns.Types.BASE_TYPE_MASK + " != " + MmsSmsColumns.Types.GROUP_CALL_TYPE + " " + + "UNION ALL " + + "SELECT " + + ThreadTable.TABLE_NAME + "." + ThreadTable.RECIPIENT_ID + " AS " + CONVERSATION_RECIPIENT + ", " + + MmsSmsColumns.RECIPIENT_ID + " AS " + MESSAGE_RECIPIENT + ", " + + "snippet(" + MMS_FTS_TABLE_NAME + ", -1, '', '', '" + SNIPPET_WRAP + "', 7) AS " + SNIPPET + ", " + + MmsTable.TABLE_NAME + "." + MmsTable.DATE_RECEIVED + " AS " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + ", " + + MMS_FTS_TABLE_NAME + "." + THREAD_ID + ", " + + MMS_FTS_TABLE_NAME + "." + BODY + ", " + + MMS_FTS_TABLE_NAME + "." + ID + " AS " + MESSAGE_ID + ", " + + "1 AS " + IS_MMS + " " + + "FROM " + MmsTable.TABLE_NAME + " " + + "INNER JOIN " + MMS_FTS_TABLE_NAME + " ON " + MMS_FTS_TABLE_NAME + "." + ID + " = " + MmsTable.TABLE_NAME + "." + MmsTable.ID + " " + + "INNER JOIN " + ThreadTable.TABLE_NAME + " ON " + MMS_FTS_TABLE_NAME + "." + THREAD_ID + " = " + ThreadTable.TABLE_NAME + "." + ThreadTable.ID + " " + + "WHERE " + MMS_FTS_TABLE_NAME + " MATCH ? " + + "AND " + MmsTable.TABLE_NAME + "." + MmsTable.MESSAGE_BOX + " & " + MmsSmsColumns.Types.GROUP_V2_BIT + " = 0 " + + "AND " + MmsTable.TABLE_NAME + "." + MmsTable.MESSAGE_BOX + " & " + MmsSmsColumns.Types.SPECIAL_TYPE_PAYMENTS_NOTIFICATION + " = 0 " + + "ORDER BY " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " DESC " + + "LIMIT 500"; + + private static final String MESSAGES_FOR_THREAD_QUERY = + "SELECT " + + ThreadTable.TABLE_NAME + "." + ThreadTable.RECIPIENT_ID + " AS " + CONVERSATION_RECIPIENT + ", " + + MmsSmsColumns.RECIPIENT_ID + " AS " + MESSAGE_RECIPIENT + ", " + + "snippet(" + SMS_FTS_TABLE_NAME + ", -1, '', '', '" + SNIPPET_WRAP + "', 7) AS " + SNIPPET + ", " + + SmsTable.TABLE_NAME + "." + SmsTable.DATE_RECEIVED + " AS " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + ", " + + SMS_FTS_TABLE_NAME + "." + THREAD_ID + ", " + + SMS_FTS_TABLE_NAME + "." + BODY + ", " + + SMS_FTS_TABLE_NAME + "." + ID + " AS " + MESSAGE_ID + ", " + + "0 AS " + IS_MMS + " " + + "FROM " + SmsTable.TABLE_NAME + " " + + "INNER JOIN " + SMS_FTS_TABLE_NAME + " ON " + SMS_FTS_TABLE_NAME + "." + ID + " = " + SmsTable.TABLE_NAME + "." + SmsTable.ID + " " + + "INNER JOIN " + ThreadTable.TABLE_NAME + " ON " + SMS_FTS_TABLE_NAME + "." + THREAD_ID + " = " + ThreadTable.TABLE_NAME + "." + ThreadTable.ID + " " + + "WHERE " + SMS_FTS_TABLE_NAME + " MATCH ? AND " + SmsTable.TABLE_NAME + "." + MmsSmsColumns.THREAD_ID + " = ? " + + "UNION ALL " + + "SELECT " + + ThreadTable.TABLE_NAME + "." + ThreadTable.RECIPIENT_ID + " AS " + CONVERSATION_RECIPIENT + ", " + + MmsSmsColumns.RECIPIENT_ID + " AS " + MESSAGE_RECIPIENT + ", " + + "snippet(" + MMS_FTS_TABLE_NAME + ", -1, '', '', '" + SNIPPET_WRAP + "', 7) AS " + SNIPPET + ", " + + MmsTable.TABLE_NAME + "." + MmsTable.DATE_RECEIVED + " AS " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + ", " + + MMS_FTS_TABLE_NAME + "." + THREAD_ID + ", " + + MMS_FTS_TABLE_NAME + "." + BODY + ", " + + MMS_FTS_TABLE_NAME + "." + ID + " AS " + MESSAGE_ID + ", " + + "1 AS " + IS_MMS + " " + + "FROM " + MmsTable.TABLE_NAME + " " + + "INNER JOIN " + MMS_FTS_TABLE_NAME + " ON " + MMS_FTS_TABLE_NAME + "." + ID + " = " + MmsTable.TABLE_NAME + "." + MmsTable.ID + " " + + "INNER JOIN " + ThreadTable.TABLE_NAME + " ON " + MMS_FTS_TABLE_NAME + "." + THREAD_ID + " = " + ThreadTable.TABLE_NAME + "." + ThreadTable.ID + " " + + "WHERE " + MMS_FTS_TABLE_NAME + " MATCH ? AND " + MmsTable.TABLE_NAME + "." + MmsSmsColumns.THREAD_ID + " = ? " + + "ORDER BY " + MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " DESC " + + "LIMIT 500"; + + public SearchTable(@NonNull Context context, @NonNull SignalDatabase databaseHelper) { + super(context, databaseHelper); + } + + public Cursor queryMessages(@NonNull String query) { + SQLiteDatabase db = databaseHelper.getSignalReadableDatabase(); + String fullTextSearchQuery = createFullTextSearchQuery(query); + + if (TextUtils.isEmpty(fullTextSearchQuery)) { + return null; + } + + return db.rawQuery(MESSAGES_QUERY, new String[] { fullTextSearchQuery, fullTextSearchQuery }); + } + + public Cursor queryMessages(@NonNull String query, long threadId) { + SQLiteDatabase db = databaseHelper.getSignalReadableDatabase(); + String fullTextSearchQuery = createFullTextSearchQuery(query); + + if (TextUtils.isEmpty(fullTextSearchQuery)) { + return null; + } + + return db.rawQuery(MESSAGES_FOR_THREAD_QUERY, new String[] { fullTextSearchQuery, + String.valueOf(threadId), + fullTextSearchQuery, + String.valueOf(threadId) }); + } + + private static String createFullTextSearchQuery(@NonNull String query) { + return Stream.of(query.split(" ")) + .map(String::trim) + .filter(s -> s.length() > 0) + .map(SearchTable::fullTextSearchEscape) + .collect(StringBuilder::new, (sb, s) -> sb.append(s).append("* ")) + .toString(); + } + + private static String fullTextSearchEscape(String s) { + return "\"" + s.replace("\"", "\"\"") + "\""; + } +} + diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SenderKeySharedDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/SenderKeySharedTable.java similarity index 95% rename from app/src/main/java/org/thoughtcrime/securesms/database/SenderKeySharedDatabase.java rename to app/src/main/java/org/thoughtcrime/securesms/database/SenderKeySharedTable.java index ea93ef3bd..4ae077d1c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SenderKeySharedDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SenderKeySharedTable.java @@ -21,11 +21,11 @@ import java.util.Set; /** * Keeps track of which recipients are aware of which distributionIds. For the storage of sender - * keys themselves, see {@link SenderKeyDatabase}. + * keys themselves, see {@link SenderKeyTable}. */ -public class SenderKeySharedDatabase extends Database { +public class SenderKeySharedTable extends DatabaseTable { - private static final String TAG = Log.tag(SenderKeySharedDatabase.class); + private static final String TAG = Log.tag(SenderKeySharedTable.class); public static final String TABLE_NAME = "sender_key_shared"; @@ -42,7 +42,7 @@ public class SenderKeySharedDatabase extends Database { TIMESTAMP + " INTEGER DEFAULT 0, " + "UNIQUE(" + DISTRIBUTION_ID + "," + ADDRESS + ", " + DEVICE + ") ON CONFLICT REPLACE);"; - SenderKeySharedDatabase(Context context, SignalDatabase databaseHelper) { + SenderKeySharedTable(Context context, SignalDatabase databaseHelper) { super(context, databaseHelper); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SenderKeyDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/SenderKeyTable.java similarity index 96% rename from app/src/main/java/org/thoughtcrime/securesms/database/SenderKeyDatabase.java rename to app/src/main/java/org/thoughtcrime/securesms/database/SenderKeyTable.java index 08fb2ff46..3fa418bb5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SenderKeyDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SenderKeyTable.java @@ -17,17 +17,15 @@ import org.signal.core.util.CursorUtil; import org.signal.core.util.SqlUtil; import org.whispersystems.signalservice.api.push.DistributionId; -import java.io.IOException; - /** * Stores all of the sender keys -- both the ones we create, and the ones we're told about. * * When working with SenderKeys, keep this in mind: they're not *really* keys. They're sessions. * The name is largely historical, and there's too much momentum to change it. */ -public class SenderKeyDatabase extends Database { +public class SenderKeyTable extends DatabaseTable { - private static final String TAG = Log.tag(SenderKeyDatabase.class); + private static final String TAG = Log.tag(SenderKeyTable.class); public static final String TABLE_NAME = "sender_keys"; @@ -46,7 +44,7 @@ public class SenderKeyDatabase extends Database { CREATED_AT + " INTEGER NOT NULL, " + "UNIQUE(" + ADDRESS + "," + DEVICE + ", " + DISTRIBUTION_ID + ") ON CONFLICT REPLACE);"; - SenderKeyDatabase(Context context, SignalDatabase databaseHelper) { + SenderKeyTable(Context context, SignalDatabase databaseHelper) { super(context, databaseHelper); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SessionDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/SessionTable.kt similarity index 97% rename from app/src/main/java/org/thoughtcrime/securesms/database/SessionDatabase.kt rename to app/src/main/java/org/thoughtcrime/securesms/database/SessionTable.kt index 4d685d7f6..84fbb48b2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SessionDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SessionTable.kt @@ -15,9 +15,9 @@ import org.whispersystems.signalservice.api.push.SignalServiceAddress import java.io.IOException import java.util.LinkedList -class SessionDatabase(context: Context, databaseHelper: SignalDatabase) : Database(context, databaseHelper) { +class SessionTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTable(context, databaseHelper) { companion object { - private val TAG = Log.tag(SessionDatabase::class.java) + private val TAG = Log.tag(SessionTable::class.java) const val TABLE_NAME = "sessions" const val ID = "_id" diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.kt index 119e2971a..d492d57bb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.kt @@ -37,109 +37,109 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data ), SignalDatabaseOpenHelper { - val sms: SmsDatabase = SmsDatabase(context, this) - val mms: MmsDatabase = MmsDatabase(context, this) - val attachments: AttachmentDatabase = AttachmentDatabase(context, this, attachmentSecret) - val media: MediaDatabase = MediaDatabase(context, this) - val thread: ThreadDatabase = ThreadDatabase(context, this) - val mmsSmsDatabase: MmsSmsDatabase = MmsSmsDatabase(context, this) - val identityDatabase: IdentityDatabase = IdentityDatabase(context, this) - val draftDatabase: DraftDatabase = DraftDatabase(context, this) - val pushDatabase: PushDatabase = PushDatabase(context, this) - val groupDatabase: GroupDatabase = GroupDatabase(context, this) - val recipientDatabase: RecipientDatabase = RecipientDatabase(context, this) - val groupReceiptDatabase: GroupReceiptDatabase = GroupReceiptDatabase(context, this) - val preKeyDatabase: OneTimePreKeyDatabase = OneTimePreKeyDatabase(context, this) - val signedPreKeyDatabase: SignedPreKeyDatabase = SignedPreKeyDatabase(context, this) - val sessionDatabase: SessionDatabase = SessionDatabase(context, this) - val senderKeyDatabase: SenderKeyDatabase = SenderKeyDatabase(context, this) - val senderKeySharedDatabase: SenderKeySharedDatabase = SenderKeySharedDatabase(context, this) - val pendingRetryReceiptDatabase: PendingRetryReceiptDatabase = PendingRetryReceiptDatabase(context, this) - val searchDatabase: SearchDatabase = SearchDatabase(context, this) - val stickerDatabase: StickerDatabase = StickerDatabase(context, this, attachmentSecret) - val storageIdDatabase: UnknownStorageIdDatabase = UnknownStorageIdDatabase(context, this) - val remappedRecordsDatabase: RemappedRecordsDatabase = RemappedRecordsDatabase(context, this) - val mentionDatabase: MentionDatabase = MentionDatabase(context, this) - val paymentDatabase: PaymentDatabase = PaymentDatabase(context, this) - val chatColorsDatabase: ChatColorsDatabase = ChatColorsDatabase(context, this) - val emojiSearchDatabase: EmojiSearchDatabase = EmojiSearchDatabase(context, this) - val messageSendLogDatabase: MessageSendLogDatabase = MessageSendLogDatabase(context, this) + val sms: SmsTable = SmsTable(context, this) + val mms: MmsTable = MmsTable(context, this) + val attachments: AttachmentTable = AttachmentTable(context, this, attachmentSecret) + val media: MediaTable = MediaTable(context, this) + val thread: ThreadTable = ThreadTable(context, this) + val mmsSmsTable: MmsSmsTable = MmsSmsTable(context, this) + val identityTable: IdentityTable = IdentityTable(context, this) + val draftTable: DraftTable = DraftTable(context, this) + val pushTable: PushTable = PushTable(context, this) + val groupTable: GroupTable = GroupTable(context, this) + val recipientTable: RecipientTable = RecipientTable(context, this) + val groupReceiptTable: GroupReceiptTable = GroupReceiptTable(context, this) + val preKeyDatabase: OneTimePreKeyTable = OneTimePreKeyTable(context, this) + val signedPreKeyTable: SignedPreKeyTable = SignedPreKeyTable(context, this) + val sessionTable: SessionTable = SessionTable(context, this) + val senderKeyTable: SenderKeyTable = SenderKeyTable(context, this) + val senderKeySharedTable: SenderKeySharedTable = SenderKeySharedTable(context, this) + val pendingRetryReceiptTable: PendingRetryReceiptTable = PendingRetryReceiptTable(context, this) + val searchTable: SearchTable = SearchTable(context, this) + val stickerTable: StickerTable = StickerTable(context, this, attachmentSecret) + val storageIdDatabase: UnknownStorageIdTable = UnknownStorageIdTable(context, this) + val remappedRecordTables: RemappedRecordTables = RemappedRecordTables(context, this) + val mentionTable: MentionTable = MentionTable(context, this) + val paymentTable: PaymentTable = PaymentTable(context, this) + val chatColorsTable: ChatColorsTable = ChatColorsTable(context, this) + val emojiSearchTable: EmojiSearchTable = EmojiSearchTable(context, this) + val messageSendLogTables: MessageSendLogTables = MessageSendLogTables(context, this) val avatarPickerDatabase: AvatarPickerDatabase = AvatarPickerDatabase(context, this) - val groupCallRingDatabase: GroupCallRingDatabase = GroupCallRingDatabase(context, this) - val reactionDatabase: ReactionDatabase = ReactionDatabase(context, this) + val groupCallRingTable: GroupCallRingTable = GroupCallRingTable(context, this) + val reactionTable: ReactionTable = ReactionTable(context, this) val notificationProfileDatabase: NotificationProfileDatabase = NotificationProfileDatabase(context, this) - val donationReceiptDatabase: DonationReceiptDatabase = DonationReceiptDatabase(context, this) - val distributionListDatabase: DistributionListDatabase = DistributionListDatabase(context, this) - val storySendsDatabase: StorySendsDatabase = StorySendsDatabase(context, this) - val cdsDatabase: CdsDatabase = CdsDatabase(context, this) - val remoteMegaphoneDatabase: RemoteMegaphoneDatabase = RemoteMegaphoneDatabase(context, this) - val pendingPniSignatureMessageDatabase: PendingPniSignatureMessageDatabase = PendingPniSignatureMessageDatabase(context, this) + val donationReceiptTable: DonationReceiptTable = DonationReceiptTable(context, this) + val distributionListTables: DistributionListTables = DistributionListTables(context, this) + val storySendTable: StorySendTable = StorySendTable(context, this) + val cdsTable: CdsTable = CdsTable(context, this) + val remoteMegaphoneTable: RemoteMegaphoneTable = RemoteMegaphoneTable(context, this) + val pendingPniSignatureMessageTable: PendingPniSignatureMessageTable = PendingPniSignatureMessageTable(context, this) override fun onOpen(db: net.zetetic.database.sqlcipher.SQLiteDatabase) { db.setForeignKeyConstraintsEnabled(true) } override fun onCreate(db: net.zetetic.database.sqlcipher.SQLiteDatabase) { - db.execSQL(SmsDatabase.CREATE_TABLE) - db.execSQL(MmsDatabase.CREATE_TABLE) - db.execSQL(AttachmentDatabase.CREATE_TABLE) - db.execSQL(ThreadDatabase.CREATE_TABLE) - db.execSQL(IdentityDatabase.CREATE_TABLE) - db.execSQL(DraftDatabase.CREATE_TABLE) - db.execSQL(PushDatabase.CREATE_TABLE) - db.execSQL(GroupDatabase.CREATE_TABLE) - db.execSQL(RecipientDatabase.CREATE_TABLE) - db.execSQL(GroupReceiptDatabase.CREATE_TABLE) - db.execSQL(OneTimePreKeyDatabase.CREATE_TABLE) - db.execSQL(SignedPreKeyDatabase.CREATE_TABLE) - db.execSQL(SessionDatabase.CREATE_TABLE) - db.execSQL(SenderKeyDatabase.CREATE_TABLE) - db.execSQL(SenderKeySharedDatabase.CREATE_TABLE) - db.execSQL(PendingRetryReceiptDatabase.CREATE_TABLE) - db.execSQL(StickerDatabase.CREATE_TABLE) - db.execSQL(UnknownStorageIdDatabase.CREATE_TABLE) - db.execSQL(MentionDatabase.CREATE_TABLE) - db.execSQL(PaymentDatabase.CREATE_TABLE) - db.execSQL(ChatColorsDatabase.CREATE_TABLE) - db.execSQL(EmojiSearchDatabase.CREATE_TABLE) + db.execSQL(SmsTable.CREATE_TABLE) + db.execSQL(MmsTable.CREATE_TABLE) + db.execSQL(AttachmentTable.CREATE_TABLE) + db.execSQL(ThreadTable.CREATE_TABLE) + db.execSQL(IdentityTable.CREATE_TABLE) + db.execSQL(DraftTable.CREATE_TABLE) + db.execSQL(PushTable.CREATE_TABLE) + db.execSQL(GroupTable.CREATE_TABLE) + db.execSQL(RecipientTable.CREATE_TABLE) + db.execSQL(GroupReceiptTable.CREATE_TABLE) + db.execSQL(OneTimePreKeyTable.CREATE_TABLE) + db.execSQL(SignedPreKeyTable.CREATE_TABLE) + db.execSQL(SessionTable.CREATE_TABLE) + db.execSQL(SenderKeyTable.CREATE_TABLE) + db.execSQL(SenderKeySharedTable.CREATE_TABLE) + db.execSQL(PendingRetryReceiptTable.CREATE_TABLE) + db.execSQL(StickerTable.CREATE_TABLE) + db.execSQL(UnknownStorageIdTable.CREATE_TABLE) + db.execSQL(MentionTable.CREATE_TABLE) + db.execSQL(PaymentTable.CREATE_TABLE) + db.execSQL(ChatColorsTable.CREATE_TABLE) + db.execSQL(EmojiSearchTable.CREATE_TABLE) db.execSQL(AvatarPickerDatabase.CREATE_TABLE) - db.execSQL(GroupCallRingDatabase.CREATE_TABLE) - db.execSQL(ReactionDatabase.CREATE_TABLE) - db.execSQL(DonationReceiptDatabase.CREATE_TABLE) - db.execSQL(StorySendsDatabase.CREATE_TABLE) - db.execSQL(CdsDatabase.CREATE_TABLE) - db.execSQL(RemoteMegaphoneDatabase.CREATE_TABLE) - db.execSQL(PendingPniSignatureMessageDatabase.CREATE_TABLE) - executeStatements(db, SearchDatabase.CREATE_TABLE) - executeStatements(db, RemappedRecordsDatabase.CREATE_TABLE) - executeStatements(db, MessageSendLogDatabase.CREATE_TABLE) + db.execSQL(GroupCallRingTable.CREATE_TABLE) + db.execSQL(ReactionTable.CREATE_TABLE) + db.execSQL(DonationReceiptTable.CREATE_TABLE) + db.execSQL(StorySendTable.CREATE_TABLE) + db.execSQL(CdsTable.CREATE_TABLE) + db.execSQL(RemoteMegaphoneTable.CREATE_TABLE) + db.execSQL(PendingPniSignatureMessageTable.CREATE_TABLE) + executeStatements(db, SearchTable.CREATE_TABLE) + executeStatements(db, RemappedRecordTables.CREATE_TABLE) + executeStatements(db, MessageSendLogTables.CREATE_TABLE) executeStatements(db, NotificationProfileDatabase.CREATE_TABLE) - executeStatements(db, DistributionListDatabase.CREATE_TABLE) + executeStatements(db, DistributionListTables.CREATE_TABLE) - executeStatements(db, RecipientDatabase.CREATE_INDEXS) - executeStatements(db, SmsDatabase.CREATE_INDEXS) - executeStatements(db, MmsDatabase.CREATE_INDEXS) - executeStatements(db, AttachmentDatabase.CREATE_INDEXS) - executeStatements(db, ThreadDatabase.CREATE_INDEXS) - executeStatements(db, DraftDatabase.CREATE_INDEXS) - executeStatements(db, GroupDatabase.CREATE_INDEXS) - executeStatements(db, GroupReceiptDatabase.CREATE_INDEXES) - executeStatements(db, StickerDatabase.CREATE_INDEXES) - executeStatements(db, UnknownStorageIdDatabase.CREATE_INDEXES) - executeStatements(db, MentionDatabase.CREATE_INDEXES) - executeStatements(db, PaymentDatabase.CREATE_INDEXES) - executeStatements(db, MessageSendLogDatabase.CREATE_INDEXES) - executeStatements(db, GroupCallRingDatabase.CREATE_INDEXES) + executeStatements(db, RecipientTable.CREATE_INDEXS) + executeStatements(db, SmsTable.CREATE_INDEXS) + executeStatements(db, MmsTable.CREATE_INDEXS) + executeStatements(db, AttachmentTable.CREATE_INDEXS) + executeStatements(db, ThreadTable.CREATE_INDEXS) + executeStatements(db, DraftTable.CREATE_INDEXS) + executeStatements(db, GroupTable.CREATE_INDEXS) + executeStatements(db, GroupReceiptTable.CREATE_INDEXES) + executeStatements(db, StickerTable.CREATE_INDEXES) + executeStatements(db, UnknownStorageIdTable.CREATE_INDEXES) + executeStatements(db, MentionTable.CREATE_INDEXES) + executeStatements(db, PaymentTable.CREATE_INDEXES) + executeStatements(db, MessageSendLogTables.CREATE_INDEXES) + executeStatements(db, GroupCallRingTable.CREATE_INDEXES) executeStatements(db, NotificationProfileDatabase.CREATE_INDEXES) - executeStatements(db, DonationReceiptDatabase.CREATE_INDEXS) - executeStatements(db, StorySendsDatabase.CREATE_INDEXS) - executeStatements(db, DistributionListDatabase.CREATE_INDEXES) - executeStatements(db, PendingPniSignatureMessageDatabase.CREATE_INDEXES) + executeStatements(db, DonationReceiptTable.CREATE_INDEXS) + executeStatements(db, StorySendTable.CREATE_INDEXS) + executeStatements(db, DistributionListTables.CREATE_INDEXES) + executeStatements(db, PendingPniSignatureMessageTable.CREATE_INDEXES) - executeStatements(db, MessageSendLogDatabase.CREATE_TRIGGERS) - executeStatements(db, ReactionDatabase.CREATE_TRIGGERS) + executeStatements(db, MessageSendLogTables.CREATE_TRIGGERS) + executeStatements(db, ReactionTable.CREATE_TRIGGERS) - DistributionListDatabase.insertInitialDistributionListAtCreationTime(db) + DistributionListTables.insertInitialDistributionListAtCreationTime(db) if (context.getDatabasePath(ClassicOpenHelper.NAME).exists()) { val legacyHelper = ClassicOpenHelper(context) @@ -269,7 +269,7 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data instance!!.sms.deleteAbandonedMessages() instance!!.mms.deleteAbandonedMessages() instance!!.mms.trimEntriesForExpiredMessages() - instance!!.reactionDatabase.deleteAbandonedReactions() + instance!!.reactionTable.deleteAbandonedReactions() instance!!.rawWritableDatabase.execSQL("DROP TABLE IF EXISTS key_value") instance!!.rawWritableDatabase.execSQL("DROP TABLE IF EXISTS megaphone") instance!!.rawWritableDatabase.execSQL("DROP TABLE IF EXISTS job_spec") @@ -334,7 +334,7 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data @get:JvmStatic @get:JvmName("attachments") - val attachments: AttachmentDatabase + val attachments: AttachmentTable get() = instance!!.attachments @get:JvmStatic @@ -344,83 +344,83 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data @get:JvmStatic @get:JvmName("cds") - val cds: CdsDatabase - get() = instance!!.cdsDatabase + val cds: CdsTable + get() = instance!!.cdsTable @get:JvmStatic @get:JvmName("chatColors") - val chatColors: ChatColorsDatabase - get() = instance!!.chatColorsDatabase + val chatColors: ChatColorsTable + get() = instance!!.chatColorsTable @get:JvmStatic @get:JvmName("distributionLists") - val distributionLists: DistributionListDatabase - get() = instance!!.distributionListDatabase + val distributionLists: DistributionListTables + get() = instance!!.distributionListTables @get:JvmStatic @get:JvmName("donationReceipts") - val donationReceipts: DonationReceiptDatabase - get() = instance!!.donationReceiptDatabase + val donationReceipts: DonationReceiptTable + get() = instance!!.donationReceiptTable @get:JvmStatic @get:JvmName("drafts") - val drafts: DraftDatabase - get() = instance!!.draftDatabase + val drafts: DraftTable + get() = instance!!.draftTable @get:JvmStatic @get:JvmName("emojiSearch") - val emojiSearch: EmojiSearchDatabase - get() = instance!!.emojiSearchDatabase + val emojiSearch: EmojiSearchTable + get() = instance!!.emojiSearchTable @get:JvmStatic @get:JvmName("groupCallRings") - val groupCallRings: GroupCallRingDatabase - get() = instance!!.groupCallRingDatabase + val groupCallRings: GroupCallRingTable + get() = instance!!.groupCallRingTable @get:JvmStatic @get:JvmName("groupReceipts") - val groupReceipts: GroupReceiptDatabase - get() = instance!!.groupReceiptDatabase + val groupReceipts: GroupReceiptTable + get() = instance!!.groupReceiptTable @get:JvmStatic @get:JvmName("groups") - val groups: GroupDatabase - get() = instance!!.groupDatabase + val groups: GroupTable + get() = instance!!.groupTable @get:JvmStatic @get:JvmName("identities") - val identities: IdentityDatabase - get() = instance!!.identityDatabase + val identities: IdentityTable + get() = instance!!.identityTable @get:JvmStatic @get:JvmName("media") - val media: MediaDatabase + val media: MediaTable get() = instance!!.media @get:JvmStatic @get:JvmName("mentions") - val mentions: MentionDatabase - get() = instance!!.mentionDatabase + val mentions: MentionTable + get() = instance!!.mentionTable @get:JvmStatic @get:JvmName("messageSearch") - val messageSearch: SearchDatabase - get() = instance!!.searchDatabase + val messageSearch: SearchTable + get() = instance!!.searchTable @get:JvmStatic @get:JvmName("messageLog") - val messageLog: MessageSendLogDatabase - get() = instance!!.messageSendLogDatabase + val messageLog: MessageSendLogTables + get() = instance!!.messageSendLogTables @get:JvmStatic @get:JvmName("mms") - val mms: MmsDatabase + val mms: MmsTable get() = instance!!.mms @get:JvmStatic @get:JvmName("mmsSms") - val mmsSms: MmsSmsDatabase - get() = instance!!.mmsSmsDatabase + val mmsSms: MmsSmsTable + get() = instance!!.mmsSmsTable @get:JvmStatic @get:JvmName("notificationProfiles") @@ -429,93 +429,93 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data @get:JvmStatic @get:JvmName("payments") - val payments: PaymentDatabase - get() = instance!!.paymentDatabase + val payments: PaymentTable + get() = instance!!.paymentTable @get:JvmStatic @get:JvmName("pendingRetryReceipts") - val pendingRetryReceipts: PendingRetryReceiptDatabase - get() = instance!!.pendingRetryReceiptDatabase + val pendingRetryReceipts: PendingRetryReceiptTable + get() = instance!!.pendingRetryReceiptTable @get:JvmStatic @get:JvmName("oneTimePreKeys") - val oneTimePreKeys: OneTimePreKeyDatabase + val oneTimePreKeys: OneTimePreKeyTable get() = instance!!.preKeyDatabase @get:Deprecated("This only exists to migrate from legacy storage. There shouldn't be any new usages.") @get:JvmStatic @get:JvmName("push") - val push: PushDatabase - get() = instance!!.pushDatabase + val push: PushTable + get() = instance!!.pushTable @get:JvmStatic @get:JvmName("recipients") - val recipients: RecipientDatabase - get() = instance!!.recipientDatabase + val recipients: RecipientTable + get() = instance!!.recipientTable @get:JvmStatic @get:JvmName("signedPreKeys") - val signedPreKeys: SignedPreKeyDatabase - get() = instance!!.signedPreKeyDatabase + val signedPreKeys: SignedPreKeyTable + get() = instance!!.signedPreKeyTable @get:JvmStatic @get:JvmName("sms") - val sms: SmsDatabase + val sms: SmsTable get() = instance!!.sms @get:JvmStatic @get:JvmName("threads") - val threads: ThreadDatabase + val threads: ThreadTable get() = instance!!.thread @get:JvmStatic @get:JvmName("reactions") - val reactions: ReactionDatabase - get() = instance!!.reactionDatabase + val reactions: ReactionTable + get() = instance!!.reactionTable @get:JvmStatic @get:JvmName("remappedRecords") - val remappedRecords: RemappedRecordsDatabase - get() = instance!!.remappedRecordsDatabase + val remappedRecords: RemappedRecordTables + get() = instance!!.remappedRecordTables @get:JvmStatic @get:JvmName("senderKeys") - val senderKeys: SenderKeyDatabase - get() = instance!!.senderKeyDatabase + val senderKeys: SenderKeyTable + get() = instance!!.senderKeyTable @get:JvmStatic @get:JvmName("senderKeyShared") - val senderKeyShared: SenderKeySharedDatabase - get() = instance!!.senderKeySharedDatabase + val senderKeyShared: SenderKeySharedTable + get() = instance!!.senderKeySharedTable @get:JvmStatic @get:JvmName("sessions") - val sessions: SessionDatabase - get() = instance!!.sessionDatabase + val sessions: SessionTable + get() = instance!!.sessionTable @get:JvmStatic @get:JvmName("stickers") - val stickers: StickerDatabase - get() = instance!!.stickerDatabase + val stickers: StickerTable + get() = instance!!.stickerTable @get:JvmStatic @get:JvmName("storySends") - val storySends: StorySendsDatabase - get() = instance!!.storySendsDatabase + val storySends: StorySendTable + get() = instance!!.storySendTable @get:JvmStatic @get:JvmName("unknownStorageIds") - val unknownStorageIds: UnknownStorageIdDatabase + val unknownStorageIds: UnknownStorageIdTable get() = instance!!.storageIdDatabase @get:JvmStatic @get:JvmName("remoteMegaphones") - val remoteMegaphones: RemoteMegaphoneDatabase - get() = instance!!.remoteMegaphoneDatabase + val remoteMegaphones: RemoteMegaphoneTable + get() = instance!!.remoteMegaphoneTable @get:JvmStatic @get:JvmName("pendingPniSignatureMessages") - val pendingPniSignatureMessages: PendingPniSignatureMessageDatabase - get() = instance!!.pendingPniSignatureMessageDatabase + val pendingPniSignatureMessages: PendingPniSignatureMessageTable + get() = instance!!.pendingPniSignatureMessageTable } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SignedPreKeyDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/SignedPreKeyTable.kt similarity index 95% rename from app/src/main/java/org/thoughtcrime/securesms/database/SignedPreKeyDatabase.kt rename to app/src/main/java/org/thoughtcrime/securesms/database/SignedPreKeyTable.kt index 46cc98eff..bfa440495 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SignedPreKeyDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SignedPreKeyTable.kt @@ -16,9 +16,9 @@ import org.whispersystems.signalservice.api.push.ServiceId import java.io.IOException import java.util.LinkedList -class SignedPreKeyDatabase(context: Context, databaseHelper: SignalDatabase) : Database(context, databaseHelper) { +class SignedPreKeyTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTable(context, databaseHelper) { companion object { - private val TAG = Log.tag(SignedPreKeyDatabase::class.java) + private val TAG = Log.tag(SignedPreKeyTable::class.java) const val TABLE_NAME = "signed_prekeys" const val ID = "_id" diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SmsMigrator.java b/app/src/main/java/org/thoughtcrime/securesms/database/SmsMigrator.java index 26a8c4ead..4f77ed219 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SmsMigrator.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SmsMigrator.java @@ -85,16 +85,16 @@ public class SmsMigrator { int columnIndex = cursor.getColumnIndexOrThrow(key); if (cursor.isNull(columnIndex)) { - statement.bindLong(index, SmsDatabase.Types.BASE_INBOX_TYPE); + statement.bindLong(index, SmsTable.Types.BASE_INBOX_TYPE); } else { long theirType = cursor.getLong(columnIndex); - statement.bindLong(index, SmsDatabase.Types.translateFromSystemBaseType(theirType)); + statement.bindLong(index, SmsTable.Types.translateFromSystemBaseType(theirType)); } } private static boolean isAppropriateTypeForMigration(Cursor cursor, int columnIndex) { long systemType = cursor.getLong(columnIndex); - long ourType = SmsDatabase.Types.translateFromSystemBaseType(systemType); + long ourType = SmsTable.Types.translateFromSystemBaseType(systemType); return ourType == MmsSmsColumns.Types.BASE_INBOX_TYPE || ourType == MmsSmsColumns.Types.BASE_SENT_TYPE || @@ -163,8 +163,8 @@ public class SmsMigrator { ProgressDescription progress, long theirThreadId, long ourThreadId) { - MessageDatabase ourSmsDatabase = SignalDatabase.sms(); - Cursor cursor = null; + MessageTable ourSmsDatabase = SignalDatabase.sms(); + Cursor cursor = null; SQLiteStatement statement = null; try { @@ -183,7 +183,7 @@ public class SmsMigrator { while (cursor != null && cursor.moveToNext()) { int addressColumn = cursor.getColumnIndexOrThrow(SystemColumns.ADDRESS); - int typeColumn = cursor.getColumnIndex(SmsDatabase.TYPE); + int typeColumn = cursor.getColumnIndex(SmsTable.TYPE); if (!cursor.isNull(addressColumn) && (cursor.isNull(typeColumn) || isAppropriateTypeForMigration(cursor, typeColumn))) { getContentValuesForRow(context, cursor, ourThreadId, statement); @@ -211,8 +211,8 @@ public class SmsMigrator { // if (context.getSharedPreferences("SecureSMS", Context.MODE_PRIVATE).getBoolean("migrated", false)) // return; - ThreadDatabase threadDatabase = SignalDatabase.threads(); - Cursor cursor = null; + ThreadTable threadTable = SignalDatabase.threads(); + Cursor cursor = null; try { Uri threadListUri = Uri.parse("content://mms-sms/conversations?simple=true"); @@ -226,7 +226,7 @@ public class SmsMigrator { if (ourRecipients != null) { if (ourRecipients.size() == 1) { - long ourThreadId = threadDatabase.getOrCreateThreadIdFor(ourRecipients.iterator().next()); + long ourThreadId = threadTable.getOrCreateThreadIdFor(ourRecipients.iterator().next()); migrateConversation(context, listener, progress, theirThreadId, ourThreadId); } else if (ourRecipients.size() > 1) { ourRecipients.add(Recipient.self()); @@ -236,7 +236,7 @@ public class SmsMigrator { GroupId.Mms ourGroupId = SignalDatabase.groups().getOrCreateMmsGroupForMembers(recipientIds); RecipientId ourGroupRecipientId = SignalDatabase.recipients().getOrInsertFromGroupId(ourGroupId); Recipient ourGroupRecipient = Recipient.resolved(ourGroupRecipientId); - long ourThreadId = threadDatabase.getOrCreateThreadIdFor(ourGroupRecipient, ThreadDatabase.DistributionTypes.CONVERSATION); + long ourThreadId = threadTable.getOrCreateThreadIdFor(ourGroupRecipient, ThreadTable.DistributionTypes.CONVERSATION); migrateConversation(context, listener, progress, theirThreadId, ourThreadId); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/SmsTable.java similarity index 96% rename from app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java rename to app/src/main/java/org/thoughtcrime/securesms/database/SmsTable.java index 8f055a54e..3b0162197 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SmsTable.java @@ -96,9 +96,9 @@ import static org.thoughtcrime.securesms.database.MmsSmsColumns.Types.GROUP_V2_L * * @author Moxie Marlinspike */ -public class SmsDatabase extends MessageDatabase { +public class SmsTable extends MessageTable { - private static final String TAG = Log.tag(SmsDatabase.class); + private static final String TAG = Log.tag(SmsTable.class); public static final String TABLE_NAME = "sms"; public static final String PERSON = "person"; @@ -171,7 +171,7 @@ public class SmsDatabase extends MessageDatabase { private static final EarlyReceiptCache earlyDeliveryReceiptCache = new EarlyReceiptCache("SmsDelivery"); - public SmsDatabase(Context context, SignalDatabase databaseHelper) { + public SmsTable(Context context, SignalDatabase databaseHelper) { super(context, databaseHelper); } @@ -669,7 +669,7 @@ public class SmsDatabase extends MessageDatabase { @Override public boolean hasReceivedAnyCallsSince(long threadId, long timestamp) { SQLiteDatabase db = databaseHelper.getSignalReadableDatabase(); - String[] projection = SqlUtil.buildArgs(SmsDatabase.TYPE); + String[] projection = SqlUtil.buildArgs(SmsTable.TYPE); String selection = THREAD_ID + " = ? AND " + DATE_RECEIVED + " > ? AND (" + TYPE + " = ? OR " + TYPE + " = ? OR " + TYPE + " = ? OR " + TYPE + " =?)"; String[] selectionArgs = SqlUtil.buildArgs(threadId, timestamp, @@ -979,9 +979,9 @@ public class SmsDatabase extends MessageDatabase { @Override public void insertProfileNameChangeMessages(@NonNull Recipient recipient, @NonNull String newProfileName, @NonNull String previousProfileName) { - ThreadDatabase threadDatabase = SignalDatabase.threads(); - List groupRecords = SignalDatabase.groups().getGroupsContainingMember(recipient.getId(), false); - List threadIdsToUpdate = new LinkedList<>(); + ThreadTable threadTable = SignalDatabase.threads(); + List groupRecords = SignalDatabase.groups().getGroupsContainingMember(recipient.getId(), false); + List threadIdsToUpdate = new LinkedList<>(); byte[] profileChangeDetails = ProfileChangeDetails.newBuilder() .setProfileNameChange(ProfileChangeDetails.StringChange.newBuilder() @@ -996,10 +996,10 @@ public class SmsDatabase extends MessageDatabase { db.beginTransaction(); try { - threadIdsToUpdate.add(threadDatabase.getThreadIdFor(recipient.getId())); - for (GroupDatabase.GroupRecord groupRecord : groupRecords) { + threadIdsToUpdate.add(threadTable.getThreadIdFor(recipient.getId())); + for (GroupTable.GroupRecord groupRecord : groupRecords) { if (groupRecord.isActive()) { - threadIdsToUpdate.add(threadDatabase.getThreadIdFor(groupRecord.getRecipientId())); + threadIdsToUpdate.add(threadTable.getThreadIdFor(groupRecord.getRecipientId())); } } @@ -1072,18 +1072,18 @@ public class SmsDatabase extends MessageDatabase { @Override public void insertNumberChangeMessages(@NonNull RecipientId recipientId) { - ThreadDatabase threadDatabase = SignalDatabase.threads(); - List groupRecords = SignalDatabase.groups().getGroupsContainingMember(recipientId, false); - List threadIdsToUpdate = new LinkedList<>(); + ThreadTable threadTable = SignalDatabase.threads(); + List groupRecords = SignalDatabase.groups().getGroupsContainingMember(recipientId, false); + List threadIdsToUpdate = new LinkedList<>(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase(); db.beginTransaction(); try { - threadIdsToUpdate.add(threadDatabase.getThreadIdFor(recipientId)); - for (GroupDatabase.GroupRecord groupRecord : groupRecords) { + threadIdsToUpdate.add(threadTable.getThreadIdFor(recipientId)); + for (GroupTable.GroupRecord groupRecord : groupRecords) { if (groupRecord.isActive()) { - threadIdsToUpdate.add(threadDatabase.getThreadIdFor(groupRecord.getRecipientId())); + threadIdsToUpdate.add(threadTable.getThreadIdFor(groupRecord.getRecipientId())); } } @@ -1478,17 +1478,17 @@ public class SmsDatabase extends MessageDatabase { } @Override - public @NonNull MessageDatabase.Reader getOutgoingStoriesTo(@NonNull RecipientId recipientId) { + public @NonNull MessageTable.Reader getOutgoingStoriesTo(@NonNull RecipientId recipientId) { throw new UnsupportedOperationException(); } @Override - public @NonNull MessageDatabase.Reader getAllOutgoingStories(boolean reverse, int limit) { + public @NonNull MessageTable.Reader getAllOutgoingStories(boolean reverse, int limit) { throw new UnsupportedOperationException(); } @Override - public @NonNull MessageDatabase.Reader getAllOutgoingStoriesAt(long sentTimestamp) { + public @NonNull MessageTable.Reader getAllOutgoingStoriesAt(long sentTimestamp) { throw new UnsupportedOperationException(); } @@ -1508,7 +1508,7 @@ public class SmsDatabase extends MessageDatabase { } @Override - public @NonNull MessageDatabase.Reader getAllStoriesFor(@NonNull RecipientId recipientId, int limit) { + public @NonNull MessageTable.Reader getAllStoriesFor(@NonNull RecipientId recipientId, int limit) { throw new UnsupportedOperationException(); } @@ -1572,7 +1572,7 @@ public class SmsDatabase extends MessageDatabase { } @Override - public @NonNull MessageDatabase.Reader getUnreadStories(@NonNull RecipientId recipientId, int limit) { + public @NonNull MessageTable.Reader getUnreadStories(@NonNull RecipientId recipientId, int limit) { throw new UnsupportedOperationException(); } @@ -1639,7 +1639,7 @@ public class SmsDatabase extends MessageDatabase { @Override void deleteAbandonedMessages() { SQLiteDatabase db = databaseHelper.getSignalWritableDatabase(); - String where = THREAD_ID + " NOT IN (SELECT _id FROM " + ThreadDatabase.TABLE_NAME + ")"; + String where = THREAD_ID + " NOT IN (SELECT _id FROM " + ThreadTable.TABLE_NAME + ")"; int deletes = db.delete(TABLE_NAME, where, null); if (deletes > 0) { @@ -1851,7 +1851,7 @@ public class SmsDatabase extends MessageDatabase { } @Override - public MessageDatabase.Reader getMessages(Collection messageIds) { + public MessageTable.Reader getMessages(Collection messageIds) { throw new UnsupportedOperationException(); } @@ -1909,7 +1909,7 @@ public class SmsDatabase extends MessageDatabase { } } - public static class Reader implements MessageDatabase.Reader { + public static class Reader implements MessageTable.Reader { private final Cursor cursor; private final Context context; @@ -1933,7 +1933,7 @@ public class SmsDatabase extends MessageDatabase { @Override public @NonNull MessageExportState getMessageExportStateForCurrentRecord() { - byte[] messageExportState = CursorUtil.requireBlob(cursor, SmsDatabase.EXPORT_STATE); + byte[] messageExportState = CursorUtil.requireBlob(cursor, SmsTable.EXPORT_STATE); if (messageExportState == null) { return MessageExportState.getDefaultInstance(); } @@ -1946,24 +1946,24 @@ public class SmsDatabase extends MessageDatabase { } public SmsMessageRecord getCurrent() { - long messageId = cursor.getLong(cursor.getColumnIndexOrThrow(SmsDatabase.ID)); - long recipientId = cursor.getLong(cursor.getColumnIndexOrThrow(SmsDatabase.RECIPIENT_ID)); - int addressDeviceId = cursor.getInt(cursor.getColumnIndexOrThrow(SmsDatabase.ADDRESS_DEVICE_ID)); - long type = cursor.getLong(cursor.getColumnIndexOrThrow(SmsDatabase.TYPE)); - long dateReceived = cursor.getLong(cursor.getColumnIndexOrThrow(SmsDatabase.NORMALIZED_DATE_RECEIVED)); - long dateSent = cursor.getLong(cursor.getColumnIndexOrThrow(SmsDatabase.NORMALIZED_DATE_SENT)); - long dateServer = cursor.getLong(cursor.getColumnIndexOrThrow(SmsDatabase.DATE_SERVER)); - long threadId = cursor.getLong(cursor.getColumnIndexOrThrow(SmsDatabase.THREAD_ID)); - int status = cursor.getInt(cursor.getColumnIndexOrThrow(SmsDatabase.STATUS)); - int deliveryReceiptCount = cursor.getInt(cursor.getColumnIndexOrThrow(SmsDatabase.DELIVERY_RECEIPT_COUNT)); - int readReceiptCount = cursor.getInt(cursor.getColumnIndexOrThrow(SmsDatabase.READ_RECEIPT_COUNT)); - String mismatchDocument = cursor.getString(cursor.getColumnIndexOrThrow(SmsDatabase.MISMATCHED_IDENTITIES)); - int subscriptionId = cursor.getInt(cursor.getColumnIndexOrThrow(SmsDatabase.SUBSCRIPTION_ID)); - long expiresIn = cursor.getLong(cursor.getColumnIndexOrThrow(SmsDatabase.EXPIRES_IN)); - long expireStarted = cursor.getLong(cursor.getColumnIndexOrThrow(SmsDatabase.EXPIRE_STARTED)); - String body = cursor.getString(cursor.getColumnIndexOrThrow(SmsDatabase.BODY)); - boolean unidentified = cursor.getInt(cursor.getColumnIndexOrThrow(SmsDatabase.UNIDENTIFIED)) == 1; - boolean remoteDelete = cursor.getInt(cursor.getColumnIndexOrThrow(SmsDatabase.REMOTE_DELETED)) == 1; + long messageId = cursor.getLong(cursor.getColumnIndexOrThrow(SmsTable.ID)); + long recipientId = cursor.getLong(cursor.getColumnIndexOrThrow(SmsTable.RECIPIENT_ID)); + int addressDeviceId = cursor.getInt(cursor.getColumnIndexOrThrow(SmsTable.ADDRESS_DEVICE_ID)); + long type = cursor.getLong(cursor.getColumnIndexOrThrow(SmsTable.TYPE)); + long dateReceived = cursor.getLong(cursor.getColumnIndexOrThrow(SmsTable.NORMALIZED_DATE_RECEIVED)); + long dateSent = cursor.getLong(cursor.getColumnIndexOrThrow(SmsTable.NORMALIZED_DATE_SENT)); + long dateServer = cursor.getLong(cursor.getColumnIndexOrThrow(SmsTable.DATE_SERVER)); + long threadId = cursor.getLong(cursor.getColumnIndexOrThrow(SmsTable.THREAD_ID)); + int status = cursor.getInt(cursor.getColumnIndexOrThrow(SmsTable.STATUS)); + int deliveryReceiptCount = cursor.getInt(cursor.getColumnIndexOrThrow(SmsTable.DELIVERY_RECEIPT_COUNT)); + int readReceiptCount = cursor.getInt(cursor.getColumnIndexOrThrow(SmsTable.READ_RECEIPT_COUNT)); + String mismatchDocument = cursor.getString(cursor.getColumnIndexOrThrow(SmsTable.MISMATCHED_IDENTITIES)); + int subscriptionId = cursor.getInt(cursor.getColumnIndexOrThrow(SmsTable.SUBSCRIPTION_ID)); + long expiresIn = cursor.getLong(cursor.getColumnIndexOrThrow(SmsTable.EXPIRES_IN)); + long expireStarted = cursor.getLong(cursor.getColumnIndexOrThrow(SmsTable.EXPIRE_STARTED)); + String body = cursor.getString(cursor.getColumnIndexOrThrow(SmsTable.BODY)); + boolean unidentified = cursor.getInt(cursor.getColumnIndexOrThrow(SmsTable.UNIDENTIFIED)) == 1; + boolean remoteDelete = cursor.getInt(cursor.getColumnIndexOrThrow(SmsTable.REMOTE_DELETED)) == 1; long notifiedTimestamp = CursorUtil.requireLong(cursor, NOTIFIED_TIMESTAMP); long receiptTimestamp = CursorUtil.requireLong(cursor, RECEIPT_TIMESTAMP); @@ -2053,7 +2053,7 @@ public class SmsDatabase extends MessageDatabase { db.beginTransaction(); try { - try (MmsSmsDatabase.Reader reader = MmsSmsDatabase.readerFor(SignalDatabase.mmsSms().getConversation(threadId, 0, 2))) { + try (MmsSmsTable.Reader reader = MmsSmsTable.readerFor(SignalDatabase.mmsSms().getConversation(threadId, 0, 2))) { MessageRecord latestMessage = reader.getNext(); if (latestMessage != null && latestMessage.isGroupV2()) { Optional changeEditor = message.getChangeEditor(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/StickerDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/StickerTable.java similarity index 97% rename from app/src/main/java/org/thoughtcrime/securesms/database/StickerDatabase.java rename to app/src/main/java/org/thoughtcrime/securesms/database/StickerTable.java index 795a7cd5a..e8776a6c9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/StickerDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/StickerTable.java @@ -33,9 +33,9 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -public class StickerDatabase extends Database { +public class StickerTable extends DatabaseTable { - private static final String TAG = Log.tag(StickerDatabase.class); + private static final String TAG = Log.tag(StickerTable.class); public static final String TABLE_NAME = "sticker"; public static final String _ID = "_id"; @@ -80,7 +80,7 @@ public class StickerDatabase extends Database { private final AttachmentSecret attachmentSecret; - public StickerDatabase(Context context, SignalDatabase databaseHelper, AttachmentSecret attachmentSecret) { + public StickerTable(Context context, SignalDatabase databaseHelper, AttachmentSecret attachmentSecret) { super(context, databaseHelper); this.attachmentSecret = attachmentSecret; } @@ -249,8 +249,8 @@ public class StickerDatabase extends Database { SQLiteDatabase db = databaseHelper.getSignalWritableDatabase(); String query = "SELECT " + PACK_ID + " FROM " + TABLE_NAME + " WHERE " + INSTALLED + " = ? AND " + PACK_ID + " NOT IN (" + - "SELECT DISTINCT " + AttachmentDatabase.STICKER_PACK_ID + " FROM " + AttachmentDatabase.TABLE_NAME + " " + - "WHERE " + AttachmentDatabase.STICKER_PACK_ID + " NOT NULL" + + "SELECT DISTINCT " + AttachmentTable.STICKER_PACK_ID + " FROM " + AttachmentTable.TABLE_NAME + " " + + "WHERE " + AttachmentTable.STICKER_PACK_ID + " NOT NULL" + ")"; String[] args = new String[] { "0" }; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/StorySendsDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/StorySendTable.kt similarity index 89% rename from app/src/main/java/org/thoughtcrime/securesms/database/StorySendsDatabase.kt rename to app/src/main/java/org/thoughtcrime/securesms/database/StorySendTable.kt index 3a13f8be9..a9e6f6331 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/StorySendsDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/StorySendTable.kt @@ -22,7 +22,7 @@ import org.whispersystems.signalservice.api.push.DistributionId * 1. Only send a single copy of each story to a given recipient, while * 2. Knowing which people would have gotten duplicate copies. */ -class StorySendsDatabase(context: Context, databaseHelper: SignalDatabase) : Database(context, databaseHelper), RecipientIdDatabaseReference { +class StorySendTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTable(context, databaseHelper), RecipientIdDatabaseReference { companion object { const val TABLE_NAME = "story_sends" @@ -36,11 +36,11 @@ class StorySendsDatabase(context: Context, databaseHelper: SignalDatabase) : Dat val CREATE_TABLE = """ CREATE TABLE $TABLE_NAME ( $ID INTEGER PRIMARY KEY, - $MESSAGE_ID INTEGER NOT NULL REFERENCES ${MmsDatabase.TABLE_NAME} (${MmsDatabase.ID}) ON DELETE CASCADE, - $RECIPIENT_ID INTEGER NOT NULL REFERENCES ${RecipientDatabase.TABLE_NAME} (${RecipientDatabase.ID}) ON DELETE CASCADE, + $MESSAGE_ID INTEGER NOT NULL REFERENCES ${MmsTable.TABLE_NAME} (${MmsTable.ID}) ON DELETE CASCADE, + $RECIPIENT_ID INTEGER NOT NULL REFERENCES ${RecipientTable.TABLE_NAME} (${RecipientTable.ID}) ON DELETE CASCADE, $SENT_TIMESTAMP INTEGER NOT NULL, $ALLOWS_REPLIES INTEGER NOT NULL, - $DISTRIBUTION_ID TEXT NOT NULL REFERENCES ${DistributionListDatabase.LIST_TABLE_NAME} (${DistributionListDatabase.DISTRIBUTION_ID}) ON DELETE CASCADE + $DISTRIBUTION_ID TEXT NOT NULL REFERENCES ${DistributionListTables.LIST_TABLE_NAME} (${DistributionListTables.DISTRIBUTION_ID}) ON DELETE CASCADE ) """.trimIndent() @@ -141,9 +141,9 @@ class StorySendsDatabase(context: Context, databaseHelper: SignalDatabase) : Dat WHERE $MESSAGE_ID != $messageId AND $SENT_TIMESTAMP = $sentTimestamp AND $MESSAGE_ID IN ( - SELECT ${MmsDatabase.ID} - FROM ${MmsDatabase.TABLE_NAME} - WHERE ${MmsDatabase.REMOTE_DELETED} = 0 + SELECT ${MmsTable.ID} + FROM ${MmsTable.TABLE_NAME} + WHERE ${MmsTable.REMOTE_DELETED} = 0 ) ) """.trimIndent() @@ -171,7 +171,7 @@ class StorySendsDatabase(context: Context, databaseHelper: SignalDatabase) : Dat } } - fun getStoryMessagesFor(syncMessageId: MessageDatabase.SyncMessageId): Set { + fun getStoryMessagesFor(syncMessageId: MessageTable.SyncMessageId): Set { val messageIds = mutableSetOf() readableDatabase.query( @@ -208,7 +208,7 @@ class StorySendsDatabase(context: Context, databaseHelper: SignalDatabase) : Dat .where( """ $SENT_TIMESTAMP = ? AND - (SELECT ${MmsDatabase.REMOTE_DELETED} FROM ${MmsDatabase.TABLE_NAME} WHERE ${MmsDatabase.ID} = $MESSAGE_ID) = 0 + (SELECT ${MmsTable.REMOTE_DELETED} FROM ${MmsTable.TABLE_NAME} WHERE ${MmsTable.ID} = $MESSAGE_ID) = 0 """.trimIndent(), sentTimestamp ) @@ -260,17 +260,17 @@ class StorySendsDatabase(context: Context, databaseHelper: SignalDatabase) : Dat val localManifest: SentStorySyncManifest = getLocalManifest(sentTimestamp) val query = """ - SELECT ${MmsDatabase.TABLE_NAME}.${MmsDatabase.ID} as $MESSAGE_ID, ${DistributionListDatabase.DISTRIBUTION_ID} - FROM ${MmsDatabase.TABLE_NAME} - INNER JOIN ${DistributionListDatabase.LIST_TABLE_NAME} ON ${DistributionListDatabase.RECIPIENT_ID} = ${MmsDatabase.RECIPIENT_ID} - WHERE ${MmsDatabase.DATE_SENT} = $sentTimestamp AND ${DistributionListDatabase.DISTRIBUTION_ID} IS NOT NULL + SELECT ${MmsTable.TABLE_NAME}.${MmsTable.ID} as $MESSAGE_ID, ${DistributionListTables.DISTRIBUTION_ID} + FROM ${MmsTable.TABLE_NAME} + INNER JOIN ${DistributionListTables.LIST_TABLE_NAME} ON ${DistributionListTables.RECIPIENT_ID} = ${MmsTable.RECIPIENT_ID} + WHERE ${MmsTable.DATE_SENT} = $sentTimestamp AND ${DistributionListTables.DISTRIBUTION_ID} IS NOT NULL """.trimIndent() val distributionIdToMessageId = readableDatabase.query(query).use { cursor -> val results: MutableMap = mutableMapOf() while (cursor.moveToNext()) { - val distributionId = DistributionId.from(CursorUtil.requireString(cursor, DistributionListDatabase.DISTRIBUTION_ID)) + val distributionId = DistributionId.from(CursorUtil.requireString(cursor, DistributionListTables.DISTRIBUTION_ID)) val messageId = CursorUtil.requireLong(cursor, MESSAGE_ID) results[distributionId] = messageId @@ -341,9 +341,9 @@ class StorySendsDatabase(context: Context, databaseHelper: SignalDatabase) : Dat $DISTRIBUTION_ID FROM $TABLE_NAME WHERE $TABLE_NAME.$SENT_TIMESTAMP = ? AND ( - SELECT ${MmsDatabase.REMOTE_DELETED} - FROM ${MmsDatabase.TABLE_NAME} - WHERE ${MmsDatabase.ID} = $TABLE_NAME.$MESSAGE_ID + SELECT ${MmsTable.REMOTE_DELETED} + FROM ${MmsTable.TABLE_NAME} + WHERE ${MmsTable.ID} = $TABLE_NAME.$MESSAGE_ID ) = 0 """.trimIndent(), arrayOf(sentTimestamp) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt similarity index 96% rename from app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.kt rename to app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt index 9e01fac2c..b59be6475 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt @@ -25,7 +25,7 @@ import org.signal.core.util.withinTransaction import org.signal.libsignal.zkgroup.InvalidInputException import org.signal.libsignal.zkgroup.groups.GroupMasterKey import org.thoughtcrime.securesms.conversationlist.model.ConversationFilter -import org.thoughtcrime.securesms.database.MessageDatabase.MarkedMessageInfo +import org.thoughtcrime.securesms.database.MessageTable.MarkedMessageInfo import org.thoughtcrime.securesms.database.SignalDatabase.Companion.attachments import org.thoughtcrime.securesms.database.SignalDatabase.Companion.drafts import org.thoughtcrime.securesms.database.SignalDatabase.Companion.groupReceipts @@ -68,10 +68,10 @@ import kotlin.math.max import kotlin.math.min @SuppressLint("RecipientIdDatabaseReferenceUsage", "ThreadIdDatabaseReferenceUsage") // Handles remapping in a unique way -class ThreadDatabase(context: Context, databaseHelper: SignalDatabase) : Database(context, databaseHelper) { +class ThreadTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTable(context, databaseHelper) { companion object { - private val TAG = Log.tag(ThreadDatabase::class.java) + private val TAG = Log.tag(ThreadTable::class.java) const val TABLE_NAME = "thread" const val ID = "_id" @@ -167,7 +167,7 @@ class ThreadDatabase(context: Context, databaseHelper: SignalDatabase) : Databas .map { columnName: String -> "$TABLE_NAME.$columnName" } .toList() - private val COMBINED_THREAD_RECIPIENT_GROUP_PROJECTION: List = TYPED_THREAD_PROJECTION + RecipientDatabase.TYPED_RECIPIENT_PROJECTION_NO_ID + GroupDatabase.TYPED_GROUP_PROJECTION + private val COMBINED_THREAD_RECIPIENT_GROUP_PROJECTION: List = TYPED_THREAD_PROJECTION + RecipientTable.TYPED_RECIPIENT_PROJECTION_NO_ID + GroupTable.TYPED_GROUP_PROJECTION const val NO_TRIM_BEFORE_DATE_SET: Long = 0 const val NO_TRIM_MESSAGE_COUNT_SET = Int.MAX_VALUE @@ -671,33 +671,33 @@ class ThreadDatabase(context: Context, databaseHelper: SignalDatabase) : Databas var where = "" if (!includeInactiveGroups) { - where += "$MEANINGFUL_MESSAGES != 0 AND (${GroupDatabase.TABLE_NAME}.${GroupDatabase.ACTIVE} IS NULL OR ${GroupDatabase.TABLE_NAME}.${GroupDatabase.ACTIVE} = 1)" + where += "$MEANINGFUL_MESSAGES != 0 AND (${GroupTable.TABLE_NAME}.${GroupTable.ACTIVE} IS NULL OR ${GroupTable.TABLE_NAME}.${GroupTable.ACTIVE} = 1)" } else { where += "$MEANINGFUL_MESSAGES != 0" } if (groupsOnly) { - where += " AND ${RecipientDatabase.TABLE_NAME}.${RecipientDatabase.GROUP_ID} NOT NULL" + where += " AND ${RecipientTable.TABLE_NAME}.${RecipientTable.GROUP_ID} NOT NULL" } if (individualsOnly) { - where += " AND ${RecipientDatabase.TABLE_NAME}.${RecipientDatabase.GROUP_ID} IS NULL" + where += " AND ${RecipientTable.TABLE_NAME}.${RecipientTable.GROUP_ID} IS NULL" } if (hideV1Groups) { - where += " AND ${RecipientDatabase.TABLE_NAME}.${RecipientDatabase.GROUP_TYPE} != ${RecipientDatabase.GroupType.SIGNAL_V1.id}" + where += " AND ${RecipientTable.TABLE_NAME}.${RecipientTable.GROUP_TYPE} != ${RecipientTable.GroupType.SIGNAL_V1.id}" } if (hideSms) { where += """ AND ( - ${RecipientDatabase.TABLE_NAME}.${RecipientDatabase.REGISTERED} = ${RecipientDatabase.RegisteredState.REGISTERED.id} + ${RecipientTable.TABLE_NAME}.${RecipientTable.REGISTERED} = ${RecipientTable.RegisteredState.REGISTERED.id} OR ( - ${RecipientDatabase.TABLE_NAME}.${RecipientDatabase.GROUP_ID} NOT NULL - AND ${RecipientDatabase.TABLE_NAME}.${RecipientDatabase.GROUP_TYPE} != ${RecipientDatabase.GroupType.MMS.id} + ${RecipientTable.TABLE_NAME}.${RecipientTable.GROUP_ID} NOT NULL + AND ${RecipientTable.TABLE_NAME}.${RecipientTable.GROUP_TYPE} != ${RecipientTable.GroupType.MMS.id} ) )""" - where += " AND ${RecipientDatabase.TABLE_NAME}.${RecipientDatabase.FORCE_SMS_SELECTION} = 0" + where += " AND ${RecipientTable.TABLE_NAME}.${RecipientTable.FORCE_SMS_SELECTION} = 0" } if (hideSelf) { @@ -705,7 +705,7 @@ class ThreadDatabase(context: Context, databaseHelper: SignalDatabase) : Databas } where += " AND $ARCHIVED = 0" - where += " AND ${RecipientDatabase.TABLE_NAME}.${RecipientDatabase.BLOCKED} = 0" + where += " AND ${RecipientTable.TABLE_NAME}.${RecipientTable.BLOCKED} = 0" if (SignalStore.releaseChannelValues().releaseChannelRecipientId != null) { where += " AND $RECIPIENT_ID != ${SignalStore.releaseChannelValues().releaseChannelRecipientId!!.toLong()}" @@ -722,14 +722,14 @@ class ThreadDatabase(context: Context, databaseHelper: SignalDatabase) : Databas } fun getRecentPushConversationList(limit: Int, includeInactiveGroups: Boolean): Cursor { - val activeGroupQuery = if (!includeInactiveGroups) " AND " + GroupDatabase.TABLE_NAME + "." + GroupDatabase.ACTIVE + " = 1" else "" + val activeGroupQuery = if (!includeInactiveGroups) " AND " + GroupTable.TABLE_NAME + "." + GroupTable.ACTIVE + " = 1" else "" val where = """ $MEANINGFUL_MESSAGES != 0 AND ( - ${RecipientDatabase.REGISTERED} = ${RecipientDatabase.RegisteredState.REGISTERED.id} + ${RecipientTable.REGISTERED} = ${RecipientTable.RegisteredState.REGISTERED.id} OR ( - ${GroupDatabase.TABLE_NAME}.${GroupDatabase.GROUP_ID} NOT NULL - AND ${GroupDatabase.TABLE_NAME}.${GroupDatabase.MMS} = 0 + ${GroupTable.TABLE_NAME}.${GroupTable.GROUP_ID} NOT NULL + AND ${GroupTable.TABLE_NAME}.${GroupTable.MMS} = 0 $activeGroupQuery ) ) @@ -1363,7 +1363,7 @@ class ThreadDatabase(context: Context, databaseHelper: SignalDatabase) : Databas return true } - val drafts: DraftDatabase.Drafts = SignalDatabase.drafts.getDrafts(threadId) + val drafts: DraftTable.Drafts = SignalDatabase.drafts.getDrafts(threadId) if (drafts.isNotEmpty()) { val threadRecord: ThreadRecord? = getThreadRecord(threadId) if (threadRecord != null && @@ -1607,8 +1607,8 @@ class ThreadDatabase(context: Context, databaseHelper: SignalDatabase) : Databas var query = """ SELECT $projection FROM $TABLE_NAME - LEFT OUTER JOIN ${RecipientDatabase.TABLE_NAME} ON $TABLE_NAME.$RECIPIENT_ID = ${RecipientDatabase.TABLE_NAME}.${RecipientDatabase.ID} - LEFT OUTER JOIN ${GroupDatabase.TABLE_NAME} ON $TABLE_NAME.$RECIPIENT_ID = ${GroupDatabase.TABLE_NAME}.${GroupDatabase.RECIPIENT_ID} + LEFT OUTER JOIN ${RecipientTable.TABLE_NAME} ON $TABLE_NAME.$RECIPIENT_ID = ${RecipientTable.TABLE_NAME}.${RecipientTable.ID} + LEFT OUTER JOIN ${GroupTable.TABLE_NAME} ON $TABLE_NAME.$RECIPIENT_ID = ${GroupTable.TABLE_NAME}.${GroupTable.RECIPIENT_ID} WHERE $where ORDER BY $orderBy """.trimIndent() @@ -1674,7 +1674,7 @@ class ThreadDatabase(context: Context, databaseHelper: SignalDatabase) : Databas val recipientSettings = recipients.getRecord(context, cursor, RECIPIENT_ID) val recipient: Recipient = if (recipientSettings.groupId != null) { - GroupDatabase.Reader(cursor).current?.let { group -> + GroupTable.Reader(cursor).current?.let { group -> val details = RecipientDetails( group.title, null, diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/UnknownStorageIdDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/UnknownStorageIdTable.java similarity index 97% rename from app/src/main/java/org/thoughtcrime/securesms/database/UnknownStorageIdDatabase.java rename to app/src/main/java/org/thoughtcrime/securesms/database/UnknownStorageIdTable.java index 58885055e..03124661e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/UnknownStorageIdDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/UnknownStorageIdTable.java @@ -23,7 +23,7 @@ import java.util.List; * A list of storage keys whose types we do not currently have syncing logic for. We need to * remember that these keys exist so that we don't blast any data away. */ -public class UnknownStorageIdDatabase extends Database { +public class UnknownStorageIdTable extends DatabaseTable { private static final String TABLE_NAME = "storage_key"; private static final String ID = "_id"; @@ -38,7 +38,7 @@ public class UnknownStorageIdDatabase extends Database { "CREATE INDEX IF NOT EXISTS storage_key_type_index ON " + TABLE_NAME + " (" + TYPE + ");" }; - public UnknownStorageIdDatabase(Context context, SignalDatabase databaseHelper) { + public UnknownStorageIdTable(Context context, SignalDatabase databaseHelper) { super(context, databaseHelper); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/ClassicOpenHelper.java b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/ClassicOpenHelper.java index 43e1f5a8d..8129696a8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/ClassicOpenHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/ClassicOpenHelper.java @@ -29,16 +29,16 @@ import org.thoughtcrime.securesms.crypto.ClassicDecryptingPartInputStream; import org.thoughtcrime.securesms.crypto.MasterCipher; import org.thoughtcrime.securesms.crypto.MasterSecret; import org.thoughtcrime.securesms.crypto.MasterSecretUtil; -import org.thoughtcrime.securesms.database.AttachmentDatabase; -import org.thoughtcrime.securesms.database.DraftDatabase; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.GroupReceiptDatabase; -import org.thoughtcrime.securesms.database.IdentityDatabase; -import org.thoughtcrime.securesms.database.MmsDatabase; -import org.thoughtcrime.securesms.database.PushDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase; -import org.thoughtcrime.securesms.database.SmsDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; +import org.thoughtcrime.securesms.database.DraftTable; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.GroupReceiptTable; +import org.thoughtcrime.securesms.database.IdentityTable; +import org.thoughtcrime.securesms.database.MmsTable; +import org.thoughtcrime.securesms.database.PushTable; +import org.thoughtcrime.securesms.database.RecipientTable; +import org.thoughtcrime.securesms.database.SmsTable; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.migrations.LegacyMigrationJob; @@ -128,24 +128,24 @@ public class ClassicOpenHelper extends SQLiteOpenHelper { @Override public void onCreate(SQLiteDatabase db) { - db.execSQL(SmsDatabase.CREATE_TABLE); - db.execSQL(MmsDatabase.CREATE_TABLE); - db.execSQL(AttachmentDatabase.CREATE_TABLE); - db.execSQL(ThreadDatabase.CREATE_TABLE); - db.execSQL(IdentityDatabase.CREATE_TABLE); - db.execSQL(DraftDatabase.CREATE_TABLE); - db.execSQL(PushDatabase.CREATE_TABLE); - db.execSQL(GroupDatabase.CREATE_TABLE); - db.execSQL(RecipientDatabase.CREATE_TABLE); - db.execSQL(GroupReceiptDatabase.CREATE_TABLE); + db.execSQL(SmsTable.CREATE_TABLE); + db.execSQL(MmsTable.CREATE_TABLE); + db.execSQL(AttachmentTable.CREATE_TABLE); + db.execSQL(ThreadTable.CREATE_TABLE); + db.execSQL(IdentityTable.CREATE_TABLE); + db.execSQL(DraftTable.CREATE_TABLE); + db.execSQL(PushTable.CREATE_TABLE); + db.execSQL(GroupTable.CREATE_TABLE); + db.execSQL(RecipientTable.CREATE_TABLE); + db.execSQL(GroupReceiptTable.CREATE_TABLE); - executeStatements(db, SmsDatabase.CREATE_INDEXS); - executeStatements(db, MmsDatabase.CREATE_INDEXS); - executeStatements(db, AttachmentDatabase.CREATE_INDEXS); - executeStatements(db, ThreadDatabase.CREATE_INDEXS); - executeStatements(db, DraftDatabase.CREATE_INDEXS); - executeStatements(db, GroupDatabase.CREATE_INDEXS); - executeStatements(db, GroupReceiptDatabase.CREATE_INDEXES); + executeStatements(db, SmsTable.CREATE_INDEXS); + executeStatements(db, MmsTable.CREATE_INDEXS); + executeStatements(db, AttachmentTable.CREATE_INDEXS); + executeStatements(db, ThreadTable.CREATE_INDEXS); + executeStatements(db, DraftTable.CREATE_INDEXS); + executeStatements(db, GroupTable.CREATE_INDEXS); + executeStatements(db, GroupReceiptTable.CREATE_INDEXES); } public void onApplicationLevelUpgrade(Context context, MasterSecret masterSecret, int fromVersion, @@ -404,10 +404,10 @@ public class ClassicOpenHelper extends SQLiteOpenHelper { Cursor cursor = null; try { - cursor = db.query(SmsDatabase.TABLE_NAME, - new String[] {SmsDatabase.ID, SmsDatabase.BODY, SmsDatabase.TYPE}, - SmsDatabase.TYPE + " & ? == 0", - new String[] {String.valueOf(SmsDatabase.Types.ENCRYPTION_MASK)}, + cursor = db.query(SmsTable.TABLE_NAME, + new String[] { SmsTable.ID, SmsTable.BODY, SmsTable.TYPE}, + SmsTable.TYPE + " & ? == 0", + new String[] {String.valueOf(SmsTable.Types.ENCRYPTION_MASK)}, null, null, null); while (cursor.moveToNext()) { @@ -418,10 +418,10 @@ public class ClassicOpenHelper extends SQLiteOpenHelper { String encryptedBody = masterCipher.encryptBody(body); ContentValues update = new ContentValues(); - update.put(SmsDatabase.BODY, encryptedBody); - update.put(SmsDatabase.TYPE, type | 0x80000000); // Inline now deprecated symmetric encryption type + update.put(SmsTable.BODY, encryptedBody); + update.put(SmsTable.TYPE, type | 0x80000000); // Inline now deprecated symmetric encryption type - db.update(SmsDatabase.TABLE_NAME, update, SmsDatabase.ID + " = ?", + db.update(SmsTable.TABLE_NAME, update, SmsTable.ID + " = ?", new String[] {String.valueOf(id)}); } } finally { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/PreKeyMigrationHelper.java b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/PreKeyMigrationHelper.java index 5a6380e2e..b59c06bab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/PreKeyMigrationHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/PreKeyMigrationHelper.java @@ -16,8 +16,8 @@ import org.signal.libsignal.protocol.InvalidKeyException; import org.signal.libsignal.protocol.InvalidMessageException; import org.signal.libsignal.protocol.state.PreKeyRecord; import org.signal.libsignal.protocol.state.SignedPreKeyRecord; -import org.thoughtcrime.securesms.database.OneTimePreKeyDatabase; -import org.thoughtcrime.securesms.database.SignedPreKeyDatabase; +import org.thoughtcrime.securesms.database.OneTimePreKeyTable; +import org.thoughtcrime.securesms.database.SignedPreKeyTable; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.util.Base64; import org.thoughtcrime.securesms.util.JsonUtils; @@ -48,10 +48,10 @@ public final class PreKeyMigrationHelper { PreKeyRecord preKey = new PreKeyRecord(loadSerializedRecord(preKeyFile)); ContentValues contentValues = new ContentValues(); - contentValues.put(OneTimePreKeyDatabase.KEY_ID, preKey.getId()); - contentValues.put(OneTimePreKeyDatabase.PUBLIC_KEY, Base64.encodeBytes(preKey.getKeyPair().getPublicKey().serialize())); - contentValues.put(OneTimePreKeyDatabase.PRIVATE_KEY, Base64.encodeBytes(preKey.getKeyPair().getPrivateKey().serialize())); - database.insert(OneTimePreKeyDatabase.TABLE_NAME, null, contentValues); + contentValues.put(OneTimePreKeyTable.KEY_ID, preKey.getId()); + contentValues.put(OneTimePreKeyTable.PUBLIC_KEY, Base64.encodeBytes(preKey.getKeyPair().getPublicKey().serialize())); + contentValues.put(OneTimePreKeyTable.PRIVATE_KEY, Base64.encodeBytes(preKey.getKeyPair().getPrivateKey().serialize())); + database.insert(OneTimePreKeyTable.TABLE_NAME, null, contentValues); Log.i(TAG, "Migrated one-time prekey: " + preKey.getId()); } catch (IOException | InvalidMessageException | InvalidKeyException e) { Log.w(TAG, e); @@ -70,12 +70,12 @@ public final class PreKeyMigrationHelper { SignedPreKeyRecord signedPreKey = new SignedPreKeyRecord(loadSerializedRecord(signedPreKeyFile)); ContentValues contentValues = new ContentValues(); - contentValues.put(SignedPreKeyDatabase.KEY_ID, signedPreKey.getId()); - contentValues.put(SignedPreKeyDatabase.PUBLIC_KEY, Base64.encodeBytes(signedPreKey.getKeyPair().getPublicKey().serialize())); - contentValues.put(SignedPreKeyDatabase.PRIVATE_KEY, Base64.encodeBytes(signedPreKey.getKeyPair().getPrivateKey().serialize())); - contentValues.put(SignedPreKeyDatabase.SIGNATURE, Base64.encodeBytes(signedPreKey.getSignature())); - contentValues.put(SignedPreKeyDatabase.TIMESTAMP, signedPreKey.getTimestamp()); - database.insert(SignedPreKeyDatabase.TABLE_NAME, null, contentValues); + contentValues.put(SignedPreKeyTable.KEY_ID, signedPreKey.getId()); + contentValues.put(SignedPreKeyTable.PUBLIC_KEY, Base64.encodeBytes(signedPreKey.getKeyPair().getPublicKey().serialize())); + contentValues.put(SignedPreKeyTable.PRIVATE_KEY, Base64.encodeBytes(signedPreKey.getKeyPair().getPrivateKey().serialize())); + contentValues.put(SignedPreKeyTable.SIGNATURE, Base64.encodeBytes(signedPreKey.getSignature())); + contentValues.put(SignedPreKeyTable.TIMESTAMP, signedPreKey.getTimestamp()); + database.insert(SignedPreKeyTable.TABLE_NAME, null, contentValues); Log.i(TAG, "Migrated signed prekey: " + signedPreKey.getId()); } catch (IOException | InvalidMessageException e) { Log.w(TAG, e); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SessionStoreMigrationHelper.java b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SessionStoreMigrationHelper.java index 86e43299e..92fcabda9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SessionStoreMigrationHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SessionStoreMigrationHelper.java @@ -10,7 +10,7 @@ import org.signal.core.util.Conversions; import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.InvalidMessageException; import org.signal.libsignal.protocol.state.SessionRecord; -import org.thoughtcrime.securesms.database.SessionDatabase; +import org.thoughtcrime.securesms.database.SessionTable; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import java.io.File; @@ -74,11 +74,11 @@ public final class SessionStoreMigrationHelper { ContentValues contentValues = new ContentValues(); - contentValues.put(SessionDatabase.ADDRESS, address); - contentValues.put(SessionDatabase.DEVICE, deviceId); - contentValues.put(SessionDatabase.RECORD, sessionRecord.serialize()); + contentValues.put(SessionTable.ADDRESS, address); + contentValues.put(SessionTable.DEVICE, deviceId); + contentValues.put(SessionTable.RECORD, sessionRecord.serialize()); - database.insert(SessionDatabase.TABLE_NAME, null, contentValues); + database.insert(SessionTable.TABLE_NAME, null, contentValues); } catch (NumberFormatException | IOException | InvalidMessageException e) { Log.w(TAG, e); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V149_LegacyMigrations.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V149_LegacyMigrations.kt index 2fb9e5d22..61d34102c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V149_LegacyMigrations.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V149_LegacyMigrations.kt @@ -26,7 +26,7 @@ import org.thoughtcrime.securesms.conversation.colors.AvatarColor import org.thoughtcrime.securesms.conversation.colors.ChatColors import org.thoughtcrime.securesms.conversation.colors.ChatColorsMapper import org.thoughtcrime.securesms.database.KeyValueDatabase -import org.thoughtcrime.securesms.database.RecipientDatabase +import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.database.helpers.PreKeyMigrationHelper import org.thoughtcrime.securesms.database.helpers.RecipientIdCleanupHelper import org.thoughtcrime.securesms.database.helpers.RecipientIdMigrationHelper @@ -212,7 +212,7 @@ object V149_LegacyMigrations : SignalDatabaseMigration { override fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { if (oldVersion < RECIPIENT_CALL_RINGTONE_VERSION) { db.execSQL("ALTER TABLE recipient_preferences ADD COLUMN call_ringtone TEXT DEFAULT NULL") - db.execSQL("ALTER TABLE recipient_preferences ADD COLUMN call_vibrate INTEGER DEFAULT " + RecipientDatabase.VibrateState.DEFAULT.id) + db.execSQL("ALTER TABLE recipient_preferences ADD COLUMN call_vibrate INTEGER DEFAULT " + RecipientTable.VibrateState.DEFAULT.id) } if (oldVersion < MIGRATE_PREKEYS_VERSION) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/identity/IdentityRecordList.java b/app/src/main/java/org/thoughtcrime/securesms/database/identity/IdentityRecordList.java index e81174289..09ced38ec 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/identity/IdentityRecordList.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/identity/IdentityRecordList.java @@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.database.identity; import androidx.annotation.NonNull; -import org.thoughtcrime.securesms.database.IdentityDatabase.VerifiedStatus; +import org.thoughtcrime.securesms.database.IdentityTable.VerifiedStatus; import org.thoughtcrime.securesms.database.model.IdentityRecord; import org.thoughtcrime.securesms.recipients.Recipient; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/loaders/GroupedThreadMediaLoader.java b/app/src/main/java/org/thoughtcrime/securesms/database/loaders/GroupedThreadMediaLoader.java index 8b2169ea8..b742701ab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/loaders/GroupedThreadMediaLoader.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/loaders/GroupedThreadMediaLoader.java @@ -11,7 +11,7 @@ import org.signal.core.util.ThreadUtil; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.database.DatabaseObserver; -import org.thoughtcrime.securesms.database.MediaDatabase; +import org.thoughtcrime.securesms.database.MediaTable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.util.CalendarDateOnly; @@ -27,14 +27,14 @@ public final class GroupedThreadMediaLoader extends AsyncTaskLoader todayStart) return TODAY; @@ -181,7 +181,7 @@ public final class GroupedThreadMediaLoader extends AsyncTaskLoader> records = new SparseArray<>(); + private final SparseArray> records = new SparseArray<>(); private PopulatedGroupedThreadMedia(@NonNull GroupingMethod groupingMethod) { this.groupingMethod = groupingMethod; } - private void add(@NonNull MediaDatabase.MediaRecord mediaRecord) { + private void add(@NonNull MediaTable.MediaRecord mediaRecord) { int groupNo = groupingMethod.groupForRecord(mediaRecord); - List mediaRecords = records.get(groupNo); + List mediaRecords = records.get(groupNo); if (mediaRecords == null) { mediaRecords = new LinkedList<>(); records.put(groupNo, mediaRecords); @@ -303,7 +303,7 @@ public final class GroupedThreadMediaLoader extends AsyncTaskLoader> Cursor cursor = SignalDatabase.media().getGalleryMediaForThread(threadId, sorting); while (cursor.moveToNext()) { - AttachmentId attachmentId = new AttachmentId(cursor.getLong(cursor.getColumnIndexOrThrow(AttachmentDatabase.ROW_ID)), cursor.getLong(cursor.getColumnIndexOrThrow(AttachmentDatabase.UNIQUE_ID))); + AttachmentId attachmentId = new AttachmentId(cursor.getLong(cursor.getColumnIndexOrThrow(AttachmentTable.ROW_ID)), cursor.getLong(cursor.getColumnIndexOrThrow(AttachmentTable.UNIQUE_ID))); Uri attachmentUri = PartAuthority.getAttachmentDataUri(attachmentId); if (attachmentUri.equals(uri)) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/loaders/RecipientMediaLoader.java b/app/src/main/java/org/thoughtcrime/securesms/database/loaders/RecipientMediaLoader.java index 44e761ba8..08d1e06fd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/loaders/RecipientMediaLoader.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/loaders/RecipientMediaLoader.java @@ -6,7 +6,7 @@ import android.database.Cursor; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import org.thoughtcrime.securesms.database.MediaDatabase; +import org.thoughtcrime.securesms.database.MediaTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; @@ -17,13 +17,13 @@ import org.thoughtcrime.securesms.recipients.RecipientId; public final class RecipientMediaLoader extends MediaLoader { @Nullable private final RecipientId recipientId; - @NonNull private final MediaType mediaType; - @NonNull private final MediaDatabase.Sorting sorting; + @NonNull private final MediaType mediaType; + @NonNull private final MediaTable.Sorting sorting; public RecipientMediaLoader(@NonNull Context context, @Nullable RecipientId recipientId, @NonNull MediaType mediaType, - @NonNull MediaDatabase.Sorting sorting) + @NonNull MediaTable.Sorting sorting) { super(context); this.recipientId = recipientId; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/loaders/ThreadMediaLoader.java b/app/src/main/java/org/thoughtcrime/securesms/database/loaders/ThreadMediaLoader.java index fbf9a2624..7e35a4be3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/loaders/ThreadMediaLoader.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/loaders/ThreadMediaLoader.java @@ -5,19 +5,19 @@ import android.database.Cursor; import androidx.annotation.NonNull; -import org.thoughtcrime.securesms.database.MediaDatabase; +import org.thoughtcrime.securesms.database.MediaTable; import org.thoughtcrime.securesms.database.SignalDatabase; public final class ThreadMediaLoader extends MediaLoader { private final long threadId; - @NonNull private final MediaType mediaType; - @NonNull private final MediaDatabase.Sorting sorting; + @NonNull private final MediaType mediaType; + @NonNull private final MediaTable.Sorting sorting; public ThreadMediaLoader(@NonNull Context context, long threadId, @NonNull MediaType mediaType, - @NonNull MediaDatabase.Sorting sorting) + @NonNull MediaTable.Sorting sorting) { super(context); this.threadId = threadId; @@ -33,8 +33,8 @@ public final class ThreadMediaLoader extends MediaLoader { static Cursor createThreadMediaCursor(@NonNull Context context, long threadId, @NonNull MediaType mediaType, - @NonNull MediaDatabase.Sorting sorting) { - MediaDatabase mediaDatabase = SignalDatabase.media(); + @NonNull MediaTable.Sorting sorting) { + MediaTable mediaDatabase = SignalDatabase.media(); switch (mediaType) { case GALLERY : return mediaDatabase.getGalleryMediaForThread(threadId, sorting); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/AvatarPickerDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/model/AvatarPickerDatabase.kt index 00c52bfe4..8b47d9d33 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/AvatarPickerDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/AvatarPickerDatabase.kt @@ -7,7 +7,7 @@ import org.signal.core.util.CursorUtil import org.signal.core.util.SqlUtil import org.thoughtcrime.securesms.avatar.Avatar import org.thoughtcrime.securesms.avatar.Avatars -import org.thoughtcrime.securesms.database.Database +import org.thoughtcrime.securesms.database.DatabaseTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.databaseprotos.CustomAvatar import org.thoughtcrime.securesms.groups.GroupId @@ -15,7 +15,7 @@ import org.thoughtcrime.securesms.groups.GroupId /** * Database which manages the record keeping for custom created avatars. */ -class AvatarPickerDatabase(context: Context, databaseHelper: SignalDatabase) : Database(context, databaseHelper) { +class AvatarPickerDatabase(context: Context, databaseHelper: SignalDatabase) : DatabaseTable(context, databaseHelper) { companion object { const val TABLE_NAME = "avatar_picker" diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/DisplayRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/DisplayRecord.java index b17fccf2d..cab57efe6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/DisplayRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/DisplayRecord.java @@ -23,7 +23,7 @@ import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import org.thoughtcrime.securesms.database.MmsSmsColumns; -import org.thoughtcrime.securesms.database.SmsDatabase; +import org.thoughtcrime.securesms.database.SmsTable; import org.thoughtcrime.securesms.recipients.Recipient; /** @@ -72,7 +72,7 @@ public abstract class DisplayRecord { return MmsSmsColumns.Types.isFailedMessageType(type) || MmsSmsColumns.Types.isPendingSecureSmsFallbackType(type) || - deliveryStatus >= SmsDatabase.Status.STATUS_FAILED; + deliveryStatus >= SmsTable.Status.STATUS_FAILED; } public boolean isPending() { @@ -113,23 +113,23 @@ public abstract class DisplayRecord { } public boolean isKeyExchange() { - return SmsDatabase.Types.isKeyExchangeType(type); + return SmsTable.Types.isKeyExchangeType(type); } public boolean isEndSession() { - return SmsDatabase.Types.isEndSessionType(type); + return SmsTable.Types.isEndSessionType(type); } public boolean isGroupUpdate() { - return SmsDatabase.Types.isGroupUpdate(type); + return SmsTable.Types.isGroupUpdate(type); } public boolean isGroupV2() { - return SmsDatabase.Types.isGroupV2(type); + return SmsTable.Types.isGroupV2(type); } public boolean isGroupQuit() { - return SmsDatabase.Types.isGroupQuit(type); + return SmsTable.Types.isGroupQuit(type); } public boolean isGroupAction() { @@ -137,55 +137,55 @@ public abstract class DisplayRecord { } public boolean isExpirationTimerUpdate() { - return SmsDatabase.Types.isExpirationTimerUpdate(type); + return SmsTable.Types.isExpirationTimerUpdate(type); } public boolean isCallLog() { - return SmsDatabase.Types.isCallLog(type); + return SmsTable.Types.isCallLog(type); } public boolean isJoined() { - return SmsDatabase.Types.isJoinedType(type); + return SmsTable.Types.isJoinedType(type); } public boolean isIncomingAudioCall() { - return SmsDatabase.Types.isIncomingAudioCall(type); + return SmsTable.Types.isIncomingAudioCall(type); } public boolean isIncomingVideoCall() { - return SmsDatabase.Types.isIncomingVideoCall(type); + return SmsTable.Types.isIncomingVideoCall(type); } public boolean isOutgoingAudioCall() { - return SmsDatabase.Types.isOutgoingAudioCall(type); + return SmsTable.Types.isOutgoingAudioCall(type); } public boolean isOutgoingVideoCall() { - return SmsDatabase.Types.isOutgoingVideoCall(type); + return SmsTable.Types.isOutgoingVideoCall(type); } public final boolean isMissedAudioCall() { - return SmsDatabase.Types.isMissedAudioCall(type); + return SmsTable.Types.isMissedAudioCall(type); } public final boolean isMissedVideoCall() { - return SmsDatabase.Types.isMissedVideoCall(type); + return SmsTable.Types.isMissedVideoCall(type); } public final boolean isGroupCall() { - return SmsDatabase.Types.isGroupCall(type); + return SmsTable.Types.isGroupCall(type); } public boolean isVerificationStatusChange() { - return SmsDatabase.Types.isIdentityDefault(type) || SmsDatabase.Types.isIdentityVerified(type); + return SmsTable.Types.isIdentityDefault(type) || SmsTable.Types.isIdentityVerified(type); } public boolean isProfileChange() { - return SmsDatabase.Types.isProfileChange(type); + return SmsTable.Types.isProfileChange(type); } public boolean isChangeNumber() { - return SmsDatabase.Types.isChangeNumber(type); + return SmsTable.Types.isChangeNumber(type); } public boolean isBoostRequest() { @@ -216,8 +216,8 @@ public abstract class DisplayRecord { } public boolean isDelivered() { - return (deliveryStatus >= SmsDatabase.Status.STATUS_COMPLETE && - deliveryStatus < SmsDatabase.Status.STATUS_PENDING) || deliveryReceiptCount > 0; + return (deliveryStatus >= SmsTable.Status.STATUS_COMPLETE && + deliveryStatus < SmsTable.Status.STATUS_PENDING) || deliveryReceiptCount > 0; } public boolean isRemoteViewed() { @@ -229,7 +229,7 @@ public abstract class DisplayRecord { } public boolean isPendingInsecureSmsFallback() { - return SmsDatabase.Types.isPendingInsecureSmsFallbackType(type); + return SmsTable.Types.isPendingInsecureSmsFallbackType(type); } public boolean isPaymentNotification() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/DistributionListRecord.kt b/app/src/main/java/org/thoughtcrime/securesms/database/model/DistributionListRecord.kt index 4b7f46ec5..a1a8c84f0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/DistributionListRecord.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/DistributionListRecord.kt @@ -4,7 +4,7 @@ import org.thoughtcrime.securesms.recipients.RecipientId import org.whispersystems.signalservice.api.push.DistributionId /** - * Represents an entry in the [org.thoughtcrime.securesms.database.DistributionListDatabase]. + * Represents an entry in the [org.thoughtcrime.securesms.database.DistributionListTables]. */ data class DistributionListRecord( val id: DistributionListId, diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/IdentityRecord.kt b/app/src/main/java/org/thoughtcrime/securesms/database/model/IdentityRecord.kt index 7e07893c8..09314d720 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/IdentityRecord.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/IdentityRecord.kt @@ -1,13 +1,13 @@ package org.thoughtcrime.securesms.database.model import org.signal.libsignal.protocol.IdentityKey -import org.thoughtcrime.securesms.database.IdentityDatabase +import org.thoughtcrime.securesms.database.IdentityTable import org.thoughtcrime.securesms.recipients.RecipientId data class IdentityRecord( val recipientId: RecipientId, val identityKey: IdentityKey, - val verifiedStatus: IdentityDatabase.VerifiedStatus, + val verifiedStatus: IdentityTable.VerifiedStatus, @get:JvmName("isFirstUse") val firstUse: Boolean, val timestamp: Long, diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/IdentityStoreRecord.kt b/app/src/main/java/org/thoughtcrime/securesms/database/model/IdentityStoreRecord.kt index 65327da8a..6ca75edc9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/IdentityStoreRecord.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/IdentityStoreRecord.kt @@ -1,13 +1,13 @@ package org.thoughtcrime.securesms.database.model import org.signal.libsignal.protocol.IdentityKey -import org.thoughtcrime.securesms.database.IdentityDatabase +import org.thoughtcrime.securesms.database.IdentityTable import org.thoughtcrime.securesms.recipients.RecipientId data class IdentityStoreRecord( val addressName: String, val identityKey: IdentityKey, - val verifiedStatus: IdentityDatabase.VerifiedStatus, + val verifiedStatus: IdentityTable.VerifiedStatus, val firstUse: Boolean, val timestamp: Long, val nonblockingApproval: Boolean diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java index f37c1b4ce..7bc00039f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java @@ -29,8 +29,8 @@ import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.attachments.AttachmentId; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; import org.thoughtcrime.securesms.contactshare.Contact; -import org.thoughtcrime.securesms.database.MmsDatabase; -import org.thoughtcrime.securesms.database.SmsDatabase.Status; +import org.thoughtcrime.securesms.database.MmsTable; +import org.thoughtcrime.securesms.database.SmsTable.Status; import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch; import org.thoughtcrime.securesms.database.documents.NetworkFailure; import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList; @@ -125,11 +125,11 @@ public class MediaMmsMessageRecord extends MmsMessageRecord { @Override @WorkerThread public SpannableString getDisplayBody(@NonNull Context context) { - if (MmsDatabase.Types.isChatSessionRefresh(type)) { + if (MmsTable.Types.isChatSessionRefresh(type)) { return emphasisAdded(context.getString(R.string.MmsMessageRecord_bad_encrypted_mms_message)); - } else if (MmsDatabase.Types.isDuplicateMessageType(type)) { + } else if (MmsTable.Types.isDuplicateMessageType(type)) { return emphasisAdded(context.getString(R.string.SmsMessageRecord_duplicate_message)); - } else if (MmsDatabase.Types.isNoRemoteSessionType(type)) { + } else if (MmsTable.Types.isNoRemoteSessionType(type)) { return emphasisAdded(context.getString(R.string.MmsMessageRecord_mms_message_encrypted_for_non_existing_session)); } else if (isLegacyMessage()) { return emphasisAdded(context.getString(R.string.MessageRecord_message_encrypted_with_a_legacy_protocol_version_that_is_no_longer_supported)); @@ -189,7 +189,7 @@ public class MediaMmsMessageRecord extends MmsMessageRecord { Quote quote = updateQuote(context, getQuote(), attachments); List slideAttachments = attachments.stream().filter(a -> !contactAttachments.contains(a)).filter(a -> !linkPreviewAttachments.contains(a)).collect(Collectors.toList()); - SlideDeck slideDeck = MmsDatabase.Reader.buildSlideDeck(context, slideAttachments); + SlideDeck slideDeck = MmsTable.Reader.buildSlideDeck(context, slideAttachments); return new MediaMmsMessageRecord(getId(), getRecipient(), getIndividualRecipient(), getRecipientDeviceId(), getDateSent(), getDateReceived(), getServerTimestamp(), getDeliveryReceiptCount(), getThreadId(), getBody(), slideDeck, getPartCount(), getType(), getIdentityKeyMismatches(), getNetworkFailures(), getSubscriptionId(), getExpiresIn(), getExpireStarted(), isViewOnce(), diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageLogEntry.kt b/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageLogEntry.kt index 429773611..30e788a5c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageLogEntry.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageLogEntry.kt @@ -5,7 +5,7 @@ import org.whispersystems.signalservice.api.crypto.ContentHint import org.whispersystems.signalservice.internal.push.SignalServiceProtos /** - * Model class for reading from the [org.thoughtcrime.securesms.database.MessageSendLogDatabase]. + * Model class for reading from the [org.thoughtcrime.securesms.database.MessageSendLogTables]. */ data class MessageLogEntry( val recipientId: RecipientId, diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java index 0ebb456ba..f4853db49 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java @@ -42,7 +42,7 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.emoji.EmojiProvider; import org.thoughtcrime.securesms.components.emoji.parsing.EmojiParser; import org.thoughtcrime.securesms.database.MmsSmsColumns; -import org.thoughtcrime.securesms.database.SmsDatabase; +import org.thoughtcrime.securesms.database.SmsTable; import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch; import org.thoughtcrime.securesms.database.documents.NetworkFailure; import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList; @@ -494,7 +494,7 @@ public abstract class MessageRecord extends DisplayRecord { } public boolean isPush() { - return SmsDatabase.Types.isPushType(type) && !SmsDatabase.Types.isForcedSms(type); + return SmsTable.Types.isPushType(type) && !SmsTable.Types.isForcedSms(type); } public long getTimestamp() { @@ -509,15 +509,15 @@ public abstract class MessageRecord extends DisplayRecord { } public boolean isForcedSms() { - return SmsDatabase.Types.isForcedSms(type); + return SmsTable.Types.isForcedSms(type); } public boolean isIdentityVerified() { - return SmsDatabase.Types.isIdentityVerified(type); + return SmsTable.Types.isIdentityVerified(type); } public boolean isIdentityDefault() { - return SmsDatabase.Types.isIdentityDefault(type); + return SmsTable.Types.isIdentityDefault(type); } public boolean isIdentityMismatchFailure() { @@ -525,23 +525,23 @@ public abstract class MessageRecord extends DisplayRecord { } public boolean isBundleKeyExchange() { - return SmsDatabase.Types.isBundleKeyExchange(type); + return SmsTable.Types.isBundleKeyExchange(type); } public boolean isContentBundleKeyExchange() { - return SmsDatabase.Types.isContentBundleKeyExchange(type); + return SmsTable.Types.isContentBundleKeyExchange(type); } public boolean isRateLimited() { - return SmsDatabase.Types.isRateLimited(type); + return SmsTable.Types.isRateLimited(type); } public boolean isIdentityUpdate() { - return SmsDatabase.Types.isIdentityUpdate(type); + return SmsTable.Types.isIdentityUpdate(type); } public boolean isCorruptedKeyExchange() { - return SmsDatabase.Types.isCorruptedKeyExchange(type); + return SmsTable.Types.isCorruptedKeyExchange(type); } public boolean isBadDecryptType() { @@ -557,11 +557,11 @@ public abstract class MessageRecord extends DisplayRecord { } public boolean isInvalidVersionKeyExchange() { - return SmsDatabase.Types.isInvalidVersionKeyExchange(type); + return SmsTable.Types.isInvalidVersionKeyExchange(type); } public boolean isGroupV1MigrationEvent() { - return SmsDatabase.Types.isGroupV1MigrationEvent(type); + return SmsTable.Types.isGroupV1MigrationEvent(type); } public @NonNull GroupMigrationMembershipChange getGroupV1MigrationMembershipChanges() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java index 1dff9061d..4c0a417aa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java @@ -23,8 +23,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.database.MmsDatabase; -import org.thoughtcrime.securesms.database.SmsDatabase.Status; +import org.thoughtcrime.securesms.database.MmsTable; +import org.thoughtcrime.securesms.database.SmsTable.Status; import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge; import org.thoughtcrime.securesms.mms.SlideDeck; import org.thoughtcrime.securesms.recipients.Recipient; @@ -117,9 +117,9 @@ public class NotificationMmsMessageRecord extends MmsMessageRecord { @Override public SpannableString getDisplayBody(@NonNull Context context) { - if (status == MmsDatabase.Status.DOWNLOAD_INITIALIZED) { + if (status == MmsTable.Status.DOWNLOAD_INITIALIZED) { return emphasisAdded(context.getString(R.string.NotificationMmsMessageRecord_multimedia_message)); - } else if (status == MmsDatabase.Status.DOWNLOAD_CONNECTING) { + } else if (status == MmsTable.Status.DOWNLOAD_CONNECTING) { return emphasisAdded(context.getString(R.string.NotificationMmsMessageRecord_downloading_mms_message)); } else { return emphasisAdded(context.getString(R.string.NotificationMmsMessageRecord_error_downloading_mms_message)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/PendingRetryReceiptModel.kt b/app/src/main/java/org/thoughtcrime/securesms/database/model/PendingRetryReceiptModel.kt index 9f9566e49..4ec7e8e41 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/PendingRetryReceiptModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/PendingRetryReceiptModel.kt @@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.database.model import org.thoughtcrime.securesms.recipients.RecipientId -/** A model for [org.thoughtcrime.securesms.database.PendingRetryReceiptDatabase] */ +/** A model for [org.thoughtcrime.securesms.database.PendingRetryReceiptTable] */ data class PendingRetryReceiptModel( val id: Long, val author: RecipientId, diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt b/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt index 118909df9..c51b12bd5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt @@ -6,13 +6,13 @@ import org.signal.libsignal.zkgroup.profiles.ExpiringProfileKeyCredential import org.thoughtcrime.securesms.badges.models.Badge import org.thoughtcrime.securesms.conversation.colors.AvatarColor import org.thoughtcrime.securesms.conversation.colors.ChatColors -import org.thoughtcrime.securesms.database.IdentityDatabase.VerifiedStatus -import org.thoughtcrime.securesms.database.RecipientDatabase -import org.thoughtcrime.securesms.database.RecipientDatabase.InsightsBannerTier -import org.thoughtcrime.securesms.database.RecipientDatabase.MentionSetting -import org.thoughtcrime.securesms.database.RecipientDatabase.RegisteredState -import org.thoughtcrime.securesms.database.RecipientDatabase.UnidentifiedAccessMode -import org.thoughtcrime.securesms.database.RecipientDatabase.VibrateState +import org.thoughtcrime.securesms.database.IdentityTable.VerifiedStatus +import org.thoughtcrime.securesms.database.RecipientTable +import org.thoughtcrime.securesms.database.RecipientTable.InsightsBannerTier +import org.thoughtcrime.securesms.database.RecipientTable.MentionSetting +import org.thoughtcrime.securesms.database.RecipientTable.RegisteredState +import org.thoughtcrime.securesms.database.RecipientTable.UnidentifiedAccessMode +import org.thoughtcrime.securesms.database.RecipientTable.VibrateState import org.thoughtcrime.securesms.groups.GroupId import org.thoughtcrime.securesms.profiles.ProfileName import org.thoughtcrime.securesms.recipients.Recipient @@ -23,7 +23,7 @@ import org.whispersystems.signalservice.api.push.ServiceId import java.util.Optional /** - * Database model for [RecipientDatabase]. + * Database model for [RecipientTable]. */ data class RecipientRecord( val id: RecipientId, @@ -34,7 +34,7 @@ data class RecipientRecord( val email: String?, val groupId: GroupId?, val distributionListId: DistributionListId?, - val groupType: RecipientDatabase.GroupType, + val groupType: RecipientTable.GroupType, val isBlocked: Boolean, val muteUntil: Long, val messageVibrateState: VibrateState, diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java index 79c89e357..82618d4ca 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java @@ -25,7 +25,7 @@ import androidx.annotation.WorkerThread; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.database.MmsSmsColumns; -import org.thoughtcrime.securesms.database.SmsDatabase; +import org.thoughtcrime.securesms.database.SmsTable; import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch; import org.thoughtcrime.securesms.recipients.Recipient; @@ -68,7 +68,7 @@ public class SmsMessageRecord extends MessageRecord { @Override @WorkerThread public SpannableString getDisplayBody(@NonNull Context context) { - if (SmsDatabase.Types.isChatSessionRefresh(type)) { + if (SmsTable.Types.isChatSessionRefresh(type)) { return emphasisAdded(context.getString(R.string.MessageRecord_chat_session_refreshed)); } else if (isCorruptedKeyExchange()) { return emphasisAdded(context.getString(R.string.SmsMessageRecord_received_corrupted_key_exchange_message)); @@ -82,17 +82,17 @@ public class SmsMessageRecord extends MessageRecord { return new SpannableString(""); } else if (isKeyExchange() && !isOutgoing()) { return emphasisAdded(context.getString(R.string.ConversationItem_received_key_exchange_message_tap_to_process)); - } else if (SmsDatabase.Types.isDuplicateMessageType(type)) { + } else if (SmsTable.Types.isDuplicateMessageType(type)) { return emphasisAdded(context.getString(R.string.SmsMessageRecord_duplicate_message)); - } else if (SmsDatabase.Types.isNoRemoteSessionType(type)) { + } else if (SmsTable.Types.isNoRemoteSessionType(type)) { return emphasisAdded(context.getString(R.string.MessageDisplayHelper_message_encrypted_for_non_existing_session)); } else if (isEndSession() && isOutgoing()) { return emphasisAdded(context.getString(R.string.SmsMessageRecord_secure_session_reset)); } else if (isEndSession()) { return emphasisAdded(context.getString(R.string.SmsMessageRecord_secure_session_reset_s, getIndividualRecipient().getDisplayName(context))); - } else if (SmsDatabase.Types.isUnsupportedMessageType(type)) { + } else if (SmsTable.Types.isUnsupportedMessageType(type)) { return emphasisAdded(context.getString(R.string.SmsMessageRecord_this_message_could_not_be_processed_because_it_was_sent_from_a_newer_version)); - } else if (SmsDatabase.Types.isInvalidMessageType(type)) { + } else if (SmsTable.Types.isInvalidMessageType(type)) { return emphasisAdded(context.getString(R.string.SmsMessageRecord_error_handling_incoming_message)); } else { return super.getDisplayBody(context); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/StatusUtil.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/StatusUtil.java index f3e0a5176..9198ce43c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/StatusUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/StatusUtil.java @@ -1,14 +1,14 @@ package org.thoughtcrime.securesms.database.model; import org.thoughtcrime.securesms.database.MmsSmsColumns; -import org.thoughtcrime.securesms.database.SmsDatabase; +import org.thoughtcrime.securesms.database.SmsTable; final class StatusUtil { private StatusUtil() {} static boolean isDelivered(long deliveryStatus, int deliveryReceiptCount) { - return (deliveryStatus >= SmsDatabase.Status.STATUS_COMPLETE && - deliveryStatus < SmsDatabase.Status.STATUS_PENDING) || deliveryReceiptCount > 0; + return (deliveryStatus >= SmsTable.Status.STATUS_COMPLETE && + deliveryStatus < SmsTable.Status.STATUS_PENDING) || deliveryReceiptCount > 0; } static boolean isPending(long type) { @@ -20,10 +20,10 @@ final class StatusUtil { static boolean isFailed(long type, long deliveryStatus) { return MmsSmsColumns.Types.isFailedMessageType(type) || MmsSmsColumns.Types.isPendingSecureSmsFallbackType(type) || - deliveryStatus >= SmsDatabase.Status.STATUS_FAILED; + deliveryStatus >= SmsTable.Status.STATUS_FAILED; } static boolean isVerificationStatusChange(long type) { - return SmsDatabase.Types.isIdentityDefault(type) || SmsDatabase.Types.isIdentityVerified(type); + return SmsTable.Types.isIdentityDefault(type) || SmsTable.Types.isIdentityVerified(type); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/StickerPackRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/StickerPackRecord.java index 772b93dff..0e7b89eff 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/StickerPackRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/StickerPackRecord.java @@ -4,11 +4,13 @@ import android.text.TextUtils; import androidx.annotation.NonNull; +import org.thoughtcrime.securesms.database.StickerTable; + import java.util.Objects; import java.util.Optional; /** - * Represents a record for a sticker pack in the {@link org.thoughtcrime.securesms.database.StickerDatabase}. + * Represents a record for a sticker pack in the {@link StickerTable}. */ public final class StickerPackRecord { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/StickerRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/StickerRecord.java index 8f6773c8f..95f91961c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/StickerRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/StickerRecord.java @@ -5,6 +5,7 @@ import android.net.Uri; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import org.thoughtcrime.securesms.database.StickerTable; import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.Util; @@ -12,7 +13,7 @@ import org.thoughtcrime.securesms.util.Util; import java.util.Objects; /** - * Represents a record for a sticker pack in the {@link org.thoughtcrime.securesms.database.StickerDatabase}. + * Represents a record for a sticker pack in the {@link StickerTable}. */ public final class StickerRecord { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/ThreadRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/ThreadRecord.java index 31f98ce78..e83269de3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/ThreadRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/ThreadRecord.java @@ -23,9 +23,9 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import org.thoughtcrime.securesms.database.MmsSmsColumns; -import org.thoughtcrime.securesms.database.SmsDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase.Extra; +import org.thoughtcrime.securesms.database.SmsTable; +import org.thoughtcrime.securesms.database.ThreadTable; +import org.thoughtcrime.securesms.database.ThreadTable.Extra; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.whispersystems.signalservice.api.util.Preconditions; @@ -33,7 +33,7 @@ import org.whispersystems.signalservice.api.util.Preconditions; import java.util.Objects; /** - * Represents an entry in the {@link org.thoughtcrime.securesms.database.ThreadDatabase}. + * Represents an entry in the {@link org.thoughtcrime.securesms.database.ThreadTable}. */ public final class ThreadRecord { @@ -146,11 +146,11 @@ public final class ThreadRecord { } public boolean isOutgoingAudioCall() { - return SmsDatabase.Types.isOutgoingAudioCall(type); + return SmsTable.Types.isOutgoingAudioCall(type); } public boolean isOutgoingVideoCall() { - return SmsDatabase.Types.isOutgoingVideoCall(type); + return SmsTable.Types.isOutgoingVideoCall(type); } public boolean isVerificationStatusChange() { @@ -170,7 +170,7 @@ public final class ThreadRecord { } public boolean isPendingInsecureSmsFallback() { - return SmsDatabase.Types.isPendingInsecureSmsFallbackType(type); + return SmsTable.Types.isPendingInsecureSmsFallbackType(type); } public boolean isDelivered() { @@ -396,7 +396,7 @@ public final class ThreadRecord { } public ThreadRecord build() { - if (distributionType == ThreadDatabase.DistributionTypes.CONVERSATION) { + if (distributionType == ThreadTable.DistributionTypes.CONVERSATION) { Preconditions.checkArgument(threadId > 0); Preconditions.checkNotNull(body); Preconditions.checkNotNull(recipient); diff --git a/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountRepository.java b/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountRepository.java index d98c9ec79..e95f67896 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountRepository.java @@ -8,7 +8,7 @@ import com.google.i18n.phonenumbers.PhoneNumberUtil; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupManager; @@ -77,8 +77,8 @@ class DeleteAccountRepository { Log.i(TAG, "deleteAccount: attempting to leave groups..."); int groupsLeft = 0; - try (GroupDatabase.Reader groups = SignalDatabase.groups().getGroups()) { - GroupDatabase.GroupRecord groupRecord = groups.getNext(); + try (GroupTable.Reader groups = SignalDatabase.groups().getGroups()) { + GroupTable.GroupRecord groupRecord = groups.getNext(); onDeleteAccountEvent.accept(new DeleteAccountEvent.LeaveGroupsProgress(groups.getCount(), 0)); Log.i(TAG, "deleteAccount: found " + groups.getCount() + " groups to leave."); diff --git a/app/src/main/java/org/thoughtcrime/securesms/exporter/SignalSmsExportReader.kt b/app/src/main/java/org/thoughtcrime/securesms/exporter/SignalSmsExportReader.kt index 561b7bf30..cc47a1a54 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/exporter/SignalSmsExportReader.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/exporter/SignalSmsExportReader.kt @@ -4,10 +4,10 @@ import org.signal.core.util.logging.Log import org.signal.smsexporter.ExportableMessage import org.signal.smsexporter.SmsExportState import org.thoughtcrime.securesms.attachments.DatabaseAttachment -import org.thoughtcrime.securesms.database.MessageDatabase -import org.thoughtcrime.securesms.database.MmsDatabase +import org.thoughtcrime.securesms.database.MessageTable +import org.thoughtcrime.securesms.database.MmsTable import org.thoughtcrime.securesms.database.SignalDatabase -import org.thoughtcrime.securesms.database.SmsDatabase +import org.thoughtcrime.securesms.database.SmsTable import org.thoughtcrime.securesms.database.model.MessageId import org.thoughtcrime.securesms.database.model.MessageRecord import org.thoughtcrime.securesms.database.model.MmsMessageRecord @@ -23,8 +23,8 @@ import kotlin.time.Duration.Companion.milliseconds * we "page" through the unexported messages to reduce chances of exceeding that limit. */ class SignalSmsExportReader( - private val smsDatabase: MessageDatabase = SignalDatabase.sms, - private val mmsDatabase: MessageDatabase = SignalDatabase.mms + private val smsDatabase: MessageTable = SignalDatabase.sms, + private val mmsDatabase: MessageTable = SignalDatabase.mms ) : Iterable, Closeable { companion object { @@ -32,9 +32,9 @@ class SignalSmsExportReader( private const val CURSOR_LIMIT = 1000 } - private var smsReader: SmsDatabase.Reader? = null + private var smsReader: SmsTable.Reader? = null private var smsDone: Boolean = false - private var mmsReader: MmsDatabase.Reader? = null + private var mmsReader: MmsTable.Reader? = null private var mmsDone: Boolean = false override fun iterator(): Iterator { @@ -55,7 +55,7 @@ class SignalSmsExportReader( smsReader?.close() smsReader = null - val refreshedSmsReader = SmsDatabase.readerFor(smsDatabase.getUnexportedInsecureMessages(CURSOR_LIMIT)) + val refreshedSmsReader = SmsTable.readerFor(smsDatabase.getUnexportedInsecureMessages(CURSOR_LIMIT)) if (refreshedSmsReader.count > 0) { smsReader = refreshedSmsReader return @@ -69,7 +69,7 @@ class SignalSmsExportReader( mmsReader?.close() mmsReader = null - val refreshedMmsReader = MmsDatabase.readerFor(mmsDatabase.getUnexportedInsecureMessages(CURSOR_LIMIT)) + val refreshedMmsReader = MmsTable.readerFor(mmsDatabase.getUnexportedInsecureMessages(CURSOR_LIMIT)) if (refreshedMmsReader.count > 0) { mmsReader = refreshedMmsReader return diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java index f24dd70fb..767e02c05 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java @@ -13,11 +13,10 @@ import org.signal.libsignal.zkgroup.groups.UuidCiphertext; import org.signal.storageservice.protos.groups.GroupExternalCredential; import org.signal.storageservice.protos.groups.local.DecryptedGroup; import org.signal.storageservice.protos.groups.local.DecryptedGroupJoinInfo; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.groups.v2.GroupInviteLinkUrl; import org.thoughtcrime.securesms.groups.v2.GroupLinkPassword; -import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.profiles.AvatarHelper; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; @@ -85,7 +84,7 @@ public final class GroupManager { } } else if (groupId.isV1()) { List members = SignalDatabase.groups() - .getGroupMembers(groupId, GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); + .getGroupMembers(groupId, GroupTable.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); Set recipientIds = getMemberIds(new HashSet<>(members)); @@ -296,8 +295,8 @@ public final class GroupManager { @NonNull RecipientId recipientId) throws GroupChangeBusyException, IOException, GroupChangeFailedException, GroupNotAMemberException, GroupInsufficientRightsException { - GroupDatabase.V2GroupProperties groupProperties = SignalDatabase.groups().requireGroup(groupId).requireV2GroupProperties(); - Recipient recipient = Recipient.resolved(recipientId); + GroupTable.V2GroupProperties groupProperties = SignalDatabase.groups().requireGroup(groupId).requireV2GroupProperties(); + Recipient recipient = Recipient.resolved(recipientId); if (groupProperties.getBannedMembers().contains(recipient.requireServiceId().uuid())) { Log.i(TAG, "Attempt to ban already banned recipient: " + recipientId); @@ -403,14 +402,14 @@ public final class GroupManager { throws GroupChangeFailedException, GroupInsufficientRightsException, IOException, GroupNotAMemberException, GroupChangeBusyException, MembershipNotSuitableForV2Exception { if (groupId.isV2()) { - GroupDatabase.GroupRecord groupRecord = SignalDatabase.groups().requireGroup(groupId); + GroupTable.GroupRecord groupRecord = SignalDatabase.groups().requireGroup(groupId); try (GroupManagerV2.GroupEditor editor = new GroupManagerV2(context).edit(groupId.requireV2())) { return editor.addMembers(newMembers, groupRecord.requireV2GroupProperties().getBannedMembers()); } } else { - GroupDatabase.GroupRecord groupRecord = SignalDatabase.groups().requireGroup(groupId); - List members = groupRecord.getMembers(); + GroupTable.GroupRecord groupRecord = SignalDatabase.groups().requireGroup(groupId); + List members = groupRecord.getMembers(); byte[] avatar = groupRecord.hasAvatar() ? AvatarHelper.getAvatarBytes(context, groupRecord.getRecipientId()) : null; Set recipientIds = new HashSet<>(members); int originalSize = recipientIds.size(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV1.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV1.java index d835b4a48..9922187f3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV1.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV1.java @@ -12,11 +12,11 @@ import com.google.protobuf.ByteString; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.attachments.UriAttachment; -import org.thoughtcrime.securesms.database.AttachmentDatabase; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.groups.GroupManager.GroupActionResult; import org.thoughtcrime.securesms.mms.OutgoingExpirationUpdateMessage; import org.thoughtcrime.securesms.mms.OutgoingGroupUpdateMessage; @@ -25,7 +25,6 @@ import org.thoughtcrime.securesms.providers.BlobProvider; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.sms.MessageSender; -import org.thoughtcrime.securesms.util.GroupUtil; import org.thoughtcrime.securesms.util.MediaUtil; import org.whispersystems.signalservice.internal.push.SignalServiceProtos.GroupContext; @@ -49,8 +48,8 @@ final class GroupManagerV1 { @Nullable String name, boolean mms) { - final GroupDatabase groupDatabase = SignalDatabase.groups(); - final SecureRandom secureRandom = new SecureRandom(); + final GroupTable groupDatabase = SignalDatabase.groups(); + final SecureRandom secureRandom = new SecureRandom(); final GroupId groupId = mms ? GroupId.createMms(secureRandom) : GroupId.createV1(secureRandom); final RecipientId groupRecipientId = SignalDatabase.recipients().getOrInsertFromGroupId(groupId); final Recipient groupRecipient = Recipient.resolved(groupRecipientId); @@ -80,7 +79,7 @@ final class GroupManagerV1 { } groupDatabase.onAvatarUpdated(groupId, avatarBytes != null); - long threadId = SignalDatabase.threads().getOrCreateThreadIdFor(groupRecipient, ThreadDatabase.DistributionTypes.CONVERSATION); + long threadId = SignalDatabase.threads().getOrCreateThreadIdFor(groupRecipient, ThreadTable.DistributionTypes.CONVERSATION); return new GroupActionResult(groupRecipient, threadId, memberIds.size() - 1, Collections.emptyList()); } } @@ -92,8 +91,8 @@ final class GroupManagerV1 { @Nullable String name, int newMemberCount) { - final GroupDatabase groupDatabase = SignalDatabase.groups(); - final RecipientId groupRecipientId = SignalDatabase.recipients().getOrInsertFromGroupId(groupId); + final GroupTable groupDatabase = SignalDatabase.groups(); + final RecipientId groupRecipientId = SignalDatabase.recipients().getOrInsertFromGroupId(groupId); memberAddresses.add(Recipient.self().getId()); groupDatabase.updateMembers(groupId, new LinkedList<>(memberAddresses)); @@ -122,8 +121,8 @@ final class GroupManagerV1 { @Nullable byte[] avatarBytes, @Nullable String name) { - GroupDatabase groupDatabase = SignalDatabase.groups(); - RecipientId groupRecipientId = SignalDatabase.recipients().getOrInsertFromGroupId(groupId); + GroupTable groupDatabase = SignalDatabase.groups(); + RecipientId groupRecipientId = SignalDatabase.recipients().getOrInsertFromGroupId(groupId); Recipient groupRecipient = Recipient.resolved(groupRecipientId); long threadId = SignalDatabase.threads().getOrCreateThreadIdFor(groupRecipient); @@ -172,7 +171,7 @@ final class GroupManagerV1 { if (avatar != null) { Uri avatarUri = BlobProvider.getInstance().forData(avatar).createForSingleUseInMemory(); - avatarAttachment = new UriAttachment(avatarUri, MediaUtil.IMAGE_PNG, AttachmentDatabase.TRANSFER_PROGRESS_DONE, avatar.length, null, false, false, false, false, null, null, null, null, null); + avatarAttachment = new UriAttachment(avatarUri, MediaUtil.IMAGE_PNG, AttachmentTable.TRANSFER_PROGRESS_DONE, avatar.length, null, false, false, false, false, null, null, null, null, null); } OutgoingGroupUpdateMessage outgoingMessage = new OutgoingGroupUpdateMessage(groupRecipient, groupContext, avatarAttachment, System.currentTimeMillis(), 0, false, null, Collections.emptyList(), Collections.emptyList(), Collections.emptyList()); @@ -193,12 +192,12 @@ final class GroupManagerV1 { @WorkerThread static void updateGroupTimer(@NonNull Context context, @NonNull GroupId.V1 groupId, int expirationTime) { - RecipientDatabase recipientDatabase = SignalDatabase.recipients(); - ThreadDatabase threadDatabase = SignalDatabase.threads(); - Recipient recipient = Recipient.externalGroupExact(groupId); - long threadId = threadDatabase.getOrCreateThreadIdFor(recipient); + RecipientTable recipientTable = SignalDatabase.recipients(); + ThreadTable threadTable = SignalDatabase.threads(); + Recipient recipient = Recipient.externalGroupExact(groupId); + long threadId = threadTable.getOrCreateThreadIdFor(recipient); - recipientDatabase.setExpireMessages(recipient.getId(), expirationTime); + recipientTable.setExpireMessages(recipient.getId(), expirationTime); OutgoingExpirationUpdateMessage outgoingMessage = new OutgoingExpirationUpdateMessage(recipient, System.currentTimeMillis(), expirationTime * 1000L); MessageSender.send(context, outgoingMessage, threadId, false, null, null); } @@ -208,7 +207,7 @@ final class GroupManagerV1 { @NonNull GroupId.V1 groupId, @NonNull Recipient groupRecipient) { - GroupDatabase groupDatabase = SignalDatabase.groups(); + GroupTable groupDatabase = SignalDatabase.groups(); if (!groupDatabase.isActive(groupId)) { Log.w(TAG, "Group has already been left."); diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java index ff895cb31..f685cf33a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java @@ -32,9 +32,9 @@ import org.signal.storageservice.protos.groups.local.DecryptedMember; import org.signal.storageservice.protos.groups.local.DecryptedPendingMember; import org.signal.storageservice.protos.groups.local.DecryptedRequestingMember; import org.thoughtcrime.securesms.crypto.ProfileKeyUtil; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.v2.GroupCandidateHelper; @@ -94,9 +94,9 @@ final class GroupManagerV2 { private static final String TAG = Log.tag(GroupManagerV2.class); - private final Context context; - private final GroupDatabase groupDatabase; - private final GroupsV2Api groupsV2Api; + private final Context context; + private final GroupTable groupDatabase; + private final GroupsV2Api groupsV2Api; private final GroupsV2Operations groupsV2Operations; private final GroupsV2Authorization authorization; private final GroupsV2StateProcessor groupsV2StateProcessor; @@ -119,7 +119,7 @@ final class GroupManagerV2 { } @VisibleForTesting GroupManagerV2(Context context, - GroupDatabase groupDatabase, + GroupTable groupDatabase, GroupsV2Api groupsV2Api, GroupsV2Operations groupsV2Operations, GroupsV2Authorization authorization, @@ -167,11 +167,11 @@ final class GroupManagerV2 { @WorkerThread @NonNull Map getUuidCipherTexts(@NonNull GroupId.V2 groupId) { - GroupDatabase.GroupRecord groupRecord = SignalDatabase.groups().requireGroup(groupId); - GroupDatabase.V2GroupProperties v2GroupProperties = groupRecord.requireV2GroupProperties(); - GroupMasterKey groupMasterKey = v2GroupProperties.getGroupMasterKey(); - ClientZkGroupCipher clientZkGroupCipher = new ClientZkGroupCipher(GroupSecretParams.deriveFromMasterKey(groupMasterKey)); - List recipients = v2GroupProperties.getMemberRecipients(GroupDatabase.MemberSet.FULL_MEMBERS_INCLUDING_SELF); + GroupTable.GroupRecord groupRecord = SignalDatabase.groups().requireGroup(groupId); + GroupTable.V2GroupProperties v2GroupProperties = groupRecord.requireV2GroupProperties(); + GroupMasterKey groupMasterKey = v2GroupProperties.getGroupMasterKey(); + ClientZkGroupCipher clientZkGroupCipher = new ClientZkGroupCipher(GroupSecretParams.deriveFromMasterKey(groupMasterKey)); + List recipients = v2GroupProperties.getMemberRecipients(GroupTable.MemberSet.FULL_MEMBERS_INCLUDING_SELF); Map uuidCipherTexts = new HashMap<>(); for (Recipient recipient : recipients) { @@ -251,9 +251,9 @@ final class GroupManagerV2 { throws IOException, MembershipNotSuitableForV2Exception, GroupAlreadyExistsException, GroupChangeFailedException { GroupMasterKey groupMasterKey = groupIdV1.deriveV2MigrationMasterKey(); - GroupSecretParams groupSecretParams = GroupSecretParams.deriveFromMasterKey(groupMasterKey); - GroupDatabase.GroupRecord groupRecord = groupDatabase.requireGroup(groupIdV1); - String name = Util.emptyIfNull(groupRecord.getTitle()); + GroupSecretParams groupSecretParams = GroupSecretParams.deriveFromMasterKey(groupMasterKey); + GroupTable.GroupRecord groupRecord = groupDatabase.requireGroup(groupIdV1); + String name = Util.emptyIfNull(groupRecord.getTitle()); byte[] avatar = groupRecord.hasAvatar() ? AvatarHelper.getAvatarBytes(context, groupRecord.getRecipientId()) : null; int messageTimer = Recipient.resolved(groupRecord.getRecipientId()).getExpiresInSeconds(); Set memberIds = Stream.of(members) @@ -318,16 +318,16 @@ final class GroupManagerV2 { @SuppressWarnings("UnusedReturnValue") final class GroupEditor extends LockOwner { - private final GroupId.V2 groupId; - private final GroupDatabase.V2GroupProperties v2GroupProperties; - private final GroupMasterKey groupMasterKey; + private final GroupId.V2 groupId; + private final GroupTable.V2GroupProperties v2GroupProperties; + private final GroupMasterKey groupMasterKey; private final GroupSecretParams groupSecretParams; private final GroupsV2Operations.GroupOperations groupOperations; GroupEditor(@NonNull GroupId.V2 groupId, @NonNull Closeable lock) { super(lock); - GroupDatabase.GroupRecord groupRecord = groupDatabase.requireGroup(groupId); + GroupTable.GroupRecord groupRecord = groupDatabase.requireGroup(groupId); this.groupId = groupId; this.v2GroupProperties = groupRecord.requireV2GroupProperties(); @@ -455,8 +455,8 @@ final class GroupManagerV2 { void leaveGroup() throws GroupChangeFailedException, GroupInsufficientRightsException, IOException, GroupNotAMemberException { - GroupDatabase.GroupRecord groupRecord = groupDatabase.requireGroup(groupId); - DecryptedGroup decryptedGroup = groupRecord.requireV2GroupProperties().getDecryptedGroup(); + GroupTable.GroupRecord groupRecord = groupDatabase.requireGroup(groupId); + DecryptedGroup decryptedGroup = groupRecord.requireV2GroupProperties().getDecryptedGroup(); Optional selfMember = DecryptedGroupUtil.findMemberByUuid(decryptedGroup.getMembersList(), selfAci.uuid()); Optional aciPendingMember = DecryptedGroupUtil.findPendingByUuid(decryptedGroup.getPendingMembersList(), selfAci.uuid()); Optional pniPendingMember = DecryptedGroupUtil.findPendingByUuid(decryptedGroup.getPendingMembersList(), selfPni.uuid()); @@ -617,8 +617,8 @@ final class GroupManagerV2 { commitChangeWithConflictResolution(selfAci, change); if (state != GroupManager.GroupLinkState.DISABLED) { - GroupDatabase.V2GroupProperties v2GroupProperties = groupDatabase.requireGroup(groupId).requireV2GroupProperties(); - GroupMasterKey groupMasterKey = v2GroupProperties.getGroupMasterKey(); + GroupTable.V2GroupProperties v2GroupProperties = groupDatabase.requireGroup(groupId).requireV2GroupProperties(); + GroupMasterKey groupMasterKey = v2GroupProperties.getGroupMasterKey(); DecryptedGroup decryptedGroup = v2GroupProperties.getDecryptedGroup(); return GroupInviteLinkUrl.forGroup(groupMasterKey, decryptedGroup); @@ -728,9 +728,9 @@ final class GroupManagerV2 { private GroupManager.GroupActionResult commitChange(@NonNull GroupChange.Actions.Builder change, boolean allowWhenBlocked, boolean sendToMembers) throws GroupNotAMemberException, GroupChangeFailedException, IOException, GroupInsufficientRightsException { - final GroupDatabase.GroupRecord groupRecord = groupDatabase.requireGroup(groupId); - final GroupDatabase.V2GroupProperties v2GroupProperties = groupRecord.requireV2GroupProperties(); - final int nextRevision = v2GroupProperties.getGroupRevision() + 1; + final GroupTable.GroupRecord groupRecord = groupDatabase.requireGroup(groupId); + final GroupTable.V2GroupProperties v2GroupProperties = groupRecord.requireV2GroupProperties(); + final int nextRevision = v2GroupProperties.getGroupRevision() + 1; final GroupChange.Actions changeActions = change.setRevision(nextRevision).build(); final DecryptedGroupChange decryptedChange; final DecryptedGroup decryptedGroupState; @@ -923,7 +923,7 @@ final class GroupManagerV2 { alreadyAMember = true; } - Optional unmigratedV1Group = groupDatabase.getGroupV1ByExpectedV2(groupId); + Optional unmigratedV1Group = groupDatabase.getGroupV1ByExpectedV2(groupId); if (unmigratedV1Group.isPresent()) { Log.i(TAG, "Group link was for a migrated V1 group we know about! Migrating it and using that as the base."); @@ -932,7 +932,7 @@ final class GroupManagerV2 { DecryptedGroup decryptedGroup = createPlaceholderGroup(joinInfo, requestToJoin); - Optional group = groupDatabase.getGroup(groupId); + Optional group = groupDatabase.getGroup(groupId); if (group.isPresent()) { Log.i(TAG, "Group already present locally"); @@ -951,8 +951,8 @@ final class GroupManagerV2 { if (alreadyAMember) { Log.i(TAG, "Already a member of the group"); - ThreadDatabase threadDatabase = SignalDatabase.threads(); - long threadId = threadDatabase.getOrCreateValidThreadId(groupRecipient, -1); + ThreadTable threadTable = SignalDatabase.threads(); + long threadId = threadTable.getOrCreateValidThreadId(groupRecipient, -1); return new GroupManager.GroupActionResult(groupRecipient, threadId, diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV1MigrationUtil.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV1MigrationUtil.java index f6c8fb0c9..0b69f9017 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV1MigrationUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV1MigrationUtil.java @@ -10,18 +10,15 @@ import com.annimon.stream.Stream; import org.signal.core.util.logging.Log; import org.signal.libsignal.zkgroup.groups.GroupMasterKey; import org.signal.storageservice.protos.groups.local.DecryptedGroup; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.keyvalue.SignalStore; -import org.thoughtcrime.securesms.mms.MmsException; -import org.thoughtcrime.securesms.mms.OutgoingMediaMessage; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientUtil; import org.thoughtcrime.securesms.transport.RetryLaterException; import org.thoughtcrime.securesms.util.FeatureFlags; -import org.thoughtcrime.securesms.util.GroupUtil; import java.io.Closeable; import java.io.IOException; @@ -39,8 +36,8 @@ public final class GroupsV1MigrationUtil { throws IOException, RetryLaterException, GroupChangeBusyException, InvalidMigrationStateException { Recipient groupRecipient = Recipient.resolved(recipientId); - Long threadId = SignalDatabase.threads().getThreadIdFor(recipientId); - GroupDatabase groupDatabase = SignalDatabase.groups(); + Long threadId = SignalDatabase.threads().getThreadIdFor(recipientId); + GroupTable groupDatabase = SignalDatabase.groups(); if (threadId == null) { Log.w(TAG, "No thread found!"); @@ -210,7 +207,7 @@ public final class GroupsV1MigrationUtil { */ public static boolean isAutoMigratable(@NonNull Recipient recipient) { return recipient.hasServiceId() && - recipient.getRegistered() == RecipientDatabase.RegisteredState.REGISTERED && + recipient.getRegistered() == RecipientTable.RegisteredState.REGISTERED && recipient.getProfileKey() != null; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/LiveGroup.java b/app/src/main/java/org/thoughtcrime/securesms/groups/LiveGroup.java index 80846d57c..e08a97cc9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/LiveGroup.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/LiveGroup.java @@ -17,7 +17,7 @@ import org.signal.storageservice.protos.groups.AccessControl; import org.signal.storageservice.protos.groups.local.DecryptedGroup; import org.signal.storageservice.protos.groups.local.DecryptedRequestingMember; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.ui.GroupMemberEntry; @@ -46,10 +46,10 @@ public final class LiveGroup { .thenComparing(HAS_DISPLAY_NAME) .thenComparing(ALPHABETICAL); - private final GroupDatabase groupDatabase; - private final LiveData recipient; - private final LiveData groupRecord; - private final LiveData> fullMembers; + private final GroupTable groupDatabase; + private final LiveData recipient; + private final LiveData groupRecord; + private final LiveData> fullMembers; private final LiveData> requestingMembers; private final LiveData groupLink; @@ -64,7 +64,7 @@ public final class LiveGroup { this.requestingMembers = mapToRequestingMembers(this.groupRecord); if (groupId.isV2()) { - LiveData v2Properties = Transformations.map(this.groupRecord, GroupDatabase.GroupRecord::requireV2GroupProperties); + LiveData v2Properties = Transformations.map(this.groupRecord, GroupTable.GroupRecord::requireV2GroupProperties); this.groupLink = Transformations.map(v2Properties, g -> { DecryptedGroup group = g.getDecryptedGroup(); AccessControl.AccessRequired addFromInviteLink = group.getAccessControl().getAddFromInviteLink(); @@ -87,7 +87,7 @@ public final class LiveGroup { SignalExecutors.BOUNDED.execute(() -> liveRecipient.postValue(Recipient.externalGroupExact(groupId).live())); } - protected static LiveData> mapToFullMembers(@NonNull LiveData groupRecord) { + protected static LiveData> mapToFullMembers(@NonNull LiveData groupRecord) { return LiveDataUtil.mapAsync(groupRecord, g -> Stream.of(g.getMembers()) .map(m -> { @@ -98,7 +98,7 @@ public final class LiveGroup { .toList()); } - protected static LiveData> mapToRequestingMembers(@NonNull LiveData groupRecord) { + protected static LiveData> mapToRequestingMembers(@NonNull LiveData groupRecord) { return LiveDataUtil.mapAsync(groupRecord, g -> { if (!g.isV2Group()) { @@ -128,11 +128,11 @@ public final class LiveGroup { } public LiveData getDescription() { - return Transformations.map(groupRecord, GroupDatabase.GroupRecord::getDescription); + return Transformations.map(groupRecord, GroupTable.GroupRecord::getDescription); } public LiveData isAnnouncementGroup() { - return Transformations.map(groupRecord, GroupDatabase.GroupRecord::isAnnouncementGroup); + return Transformations.map(groupRecord, GroupTable.GroupRecord::isAnnouncementGroup); } public LiveData getGroupRecipient() { @@ -148,7 +148,7 @@ public final class LiveGroup { } public LiveData isActive() { - return Transformations.map(groupRecord, GroupDatabase.GroupRecord::isActive); + return Transformations.map(groupRecord, GroupTable.GroupRecord::isActive); } public LiveData getRecipientIsAdmin(@NonNull RecipientId recipientId) { @@ -171,11 +171,11 @@ public final class LiveGroup { } public LiveData getMembershipAdditionAccessControl() { - return Transformations.map(groupRecord, GroupDatabase.GroupRecord::getMembershipAdditionAccessControl); + return Transformations.map(groupRecord, GroupTable.GroupRecord::getMembershipAdditionAccessControl); } public LiveData getAttributesAccessControl() { - return Transformations.map(groupRecord, GroupDatabase.GroupRecord::getAttributesAccessControl); + return Transformations.map(groupRecord, GroupTable.GroupRecord::getAttributesAccessControl); } public LiveData> getNonAdminFullMembers() { @@ -221,7 +221,7 @@ public final class LiveGroup { return Transformations.map(getFullMembers(), fullMembers -> getMembershipDescription(resources, 0, fullMembers.size())); } - public LiveData getMemberLevel(@NonNull Recipient recipient) { + public LiveData getMemberLevel(@NonNull Recipient recipient) { return Transformations.map(groupRecord, g -> g.memberLevel(recipient)); } @@ -234,14 +234,14 @@ public final class LiveGroup { } } - private LiveData selfMemberLevel() { + private LiveData selfMemberLevel() { return Transformations.map(groupRecord, g -> g.memberLevel(Recipient.self())); } - private static boolean applyAccessControl(@NonNull GroupDatabase.MemberLevel memberLevel, @NonNull GroupAccessControl rights) { + private static boolean applyAccessControl(@NonNull GroupTable.MemberLevel memberLevel, @NonNull GroupAccessControl rights) { switch (rights) { case ALL_MEMBERS: return memberLevel.isInGroup(); - case ONLY_ADMINS: return memberLevel == GroupDatabase.MemberLevel.ADMINISTRATOR; + case ONLY_ADMINS: return memberLevel == GroupTable.MemberLevel.ADMINISTRATOR; case NO_ONE : return false; default: throw new AssertionError(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/LeaveGroupDialog.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/LeaveGroupDialog.java index 015427155..8a02a22c9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/LeaveGroupDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/LeaveGroupDialog.java @@ -12,7 +12,7 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.groups.GroupChangeException; import org.thoughtcrime.securesms.groups.GroupId; @@ -54,13 +54,13 @@ public final class LeaveGroupDialog { } SimpleTask.run(activity.getLifecycle(), () -> { - GroupDatabase.V2GroupProperties groupProperties = SignalDatabase.groups() - .getGroup(groupId) - .map(GroupDatabase.GroupRecord::requireV2GroupProperties) - .orElse(null); + GroupTable.V2GroupProperties groupProperties = SignalDatabase.groups() + .getGroup(groupId) + .map(GroupTable.GroupRecord::requireV2GroupProperties) + .orElse(null); if (groupProperties != null && groupProperties.isAdmin(Recipient.self())) { - List otherMemberRecipients = groupProperties.getMemberRecipients(GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); + List otherMemberRecipients = groupProperties.getMemberRecipients(GroupTable.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); long otherAdminsCount = Stream.of(otherMemberRecipients).filter(groupProperties::isAdmin).count(); return otherAdminsCount == 0 && !otherMemberRecipients.isEmpty(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/CreateGroupActivity.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/CreateGroupActivity.java index 22c07d1f6..bfafc1419 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/CreateGroupActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/CreateGroupActivity.java @@ -19,14 +19,13 @@ import org.thoughtcrime.securesms.ContactSelectionListFragment; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.contacts.ContactsCursorLoader; import org.thoughtcrime.securesms.contacts.sync.ContactDiscovery; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.groups.ui.creategroup.details.AddGroupDetailsActivity; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.FeatureFlags; import org.signal.core.util.Stopwatch; -import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.views.SimpleProgressDialog; import java.io.IOException; @@ -151,7 +150,7 @@ public class CreateGroupActivity extends ContactSelectionActivity { stopwatch.split("resolve"); Set registeredChecks = resolved.stream() - .filter(r -> r.getRegistered() == RecipientDatabase.RegisteredState.UNKNOWN) + .filter(r -> r.getRegistered() == RecipientTable.RegisteredState.UNKNOWN) .collect(Collectors.toSet()); Log.i(TAG, "Need to do " + registeredChecks.size() + " registration checks."); diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/invited/PendingMemberInvitesRepository.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/invited/PendingMemberInvitesRepository.java index d4e76286a..cf414f5a2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/invited/PendingMemberInvitesRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/invited/PendingMemberInvitesRepository.java @@ -15,7 +15,7 @@ import org.signal.libsignal.zkgroup.InvalidInputException; import org.signal.libsignal.zkgroup.groups.UuidCiphertext; import org.signal.storageservice.protos.groups.local.DecryptedGroup; import org.signal.storageservice.protos.groups.local.DecryptedPendingMember; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.groups.GroupChangeException; import org.thoughtcrime.securesms.groups.GroupId; @@ -49,9 +49,9 @@ final class PendingMemberInvitesRepository { public void getInvitees(@NonNull Consumer onInviteesLoaded) { executor.execute(() -> { - GroupDatabase groupDatabase = SignalDatabase.groups(); - GroupDatabase.V2GroupProperties v2GroupProperties = groupDatabase.getGroup(groupId).get().requireV2GroupProperties(); - DecryptedGroup decryptedGroup = v2GroupProperties.getDecryptedGroup(); + GroupTable groupDatabase = SignalDatabase.groups(); + GroupTable.V2GroupProperties v2GroupProperties = groupDatabase.getGroup(groupId).get().requireV2GroupProperties(); + DecryptedGroup decryptedGroup = v2GroupProperties.getDecryptedGroup(); List pendingMembersList = decryptedGroup.getPendingMembersList(); List byMe = new ArrayList<>(pendingMembersList.size()); List byOthers = new ArrayList<>(pendingMembersList.size()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/dialogs/GroupMentionSettingDialog.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/dialogs/GroupMentionSettingDialog.java index fd22004b9..650ed604a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/dialogs/GroupMentionSettingDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/dialogs/GroupMentionSettingDialog.java @@ -13,7 +13,7 @@ import androidx.appcompat.app.AlertDialog; import androidx.core.util.Consumer; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.database.RecipientDatabase.MentionSetting; +import org.thoughtcrime.securesms.database.RecipientTable.MentionSetting; public final class GroupMentionSettingDialog { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/migration/GroupsV1MigrationRepository.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/migration/GroupsV1MigrationRepository.java index e813f9270..6d7cbe0b1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/migration/GroupsV1MigrationRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/migration/GroupsV1MigrationRepository.java @@ -4,18 +4,15 @@ import androidx.annotation.NonNull; import androidx.annotation.WorkerThread; import androidx.core.util.Consumer; -import com.annimon.stream.Collectors; import com.annimon.stream.Stream; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupChangeBusyException; import org.thoughtcrime.securesms.groups.GroupsV1MigrationUtil; -import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; -import org.thoughtcrime.securesms.jobs.RetrieveProfileJob; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientUtil; @@ -24,8 +21,6 @@ import org.thoughtcrime.securesms.transport.RetryLaterException; import java.io.IOException; import java.util.Collections; import java.util.List; -import java.util.Set; -import java.util.concurrent.TimeUnit; final class GroupsV1MigrationRepository { @@ -83,7 +78,7 @@ final class GroupsV1MigrationRepository { group = group.fresh(); List ineligible = Stream.of(members) - .filter(r -> !r.hasServiceId() || r.getRegistered() != RecipientDatabase.RegisteredState.REGISTERED) + .filter(r -> !r.hasServiceId() || r.getRegistered() != RecipientTable.RegisteredState.REGISTERED) .toList(); List invites = Stream.of(members) diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/GroupCandidateHelper.java b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/GroupCandidateHelper.java index 38dc1c687..6f3f807ab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/GroupCandidateHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/GroupCandidateHelper.java @@ -5,7 +5,7 @@ import androidx.annotation.WorkerThread; import org.signal.core.util.logging.Log; import org.signal.libsignal.zkgroup.profiles.ExpiringProfileKeyCredential; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.recipients.Recipient; @@ -25,11 +25,11 @@ import java.util.Set; public class GroupCandidateHelper { private final SignalServiceAccountManager signalServiceAccountManager; - private final RecipientDatabase recipientDatabase; + private final RecipientTable recipientTable; public GroupCandidateHelper() { signalServiceAccountManager = ApplicationDependencies.getSignalServiceAccountManager(); - recipientDatabase = SignalDatabase.recipients(); + recipientTable = SignalDatabase.recipients(); } private static final String TAG = Log.tag(GroupCandidateHelper.class); @@ -54,7 +54,7 @@ public class GroupCandidateHelper { GroupCandidate candidate = new GroupCandidate(serviceId.uuid(), expiringProfileKeyCredential); if (!candidate.hasValidProfileKeyCredential()) { - recipientDatabase.clearProfileKeyCredential(recipient.getId()); + recipientTable.clearProfileKeyCredential(recipient.getId()); Optional credential = ProfileUtil.updateExpiringProfileKeyCredential(recipient); if (credential.isPresent()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.java index c33164ae1..967012b4e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.java @@ -19,12 +19,12 @@ import org.signal.storageservice.protos.groups.local.DecryptedGroupChange; import org.signal.storageservice.protos.groups.local.DecryptedMember; import org.signal.storageservice.protos.groups.local.DecryptedPendingMember; import org.signal.storageservice.protos.groups.local.DecryptedPendingMemberRemoval; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.GroupDatabase.GroupRecord; -import org.thoughtcrime.securesms.database.MessageDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.GroupTable.GroupRecord; +import org.thoughtcrime.securesms.database.MessageTable; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupDoesNotExistException; @@ -91,22 +91,22 @@ public class GroupsV2StateProcessor { */ public static final int RESTORE_PLACEHOLDER_REVISION = GroupStateMapper.RESTORE_PLACEHOLDER_REVISION; - private final Context context; - private final RecipientDatabase recipientDatabase; - private final GroupDatabase groupDatabase; + private final Context context; + private final RecipientTable recipientTable; + private final GroupTable groupDatabase; private final GroupsV2Authorization groupsV2Authorization; private final GroupsV2Api groupsV2Api; public GroupsV2StateProcessor(@NonNull Context context) { this.context = context.getApplicationContext(); this.groupsV2Authorization = ApplicationDependencies.getGroupsV2Authorization(); - this.groupsV2Api = ApplicationDependencies.getSignalServiceAccountManager().getGroupsV2Api(); - this.recipientDatabase = SignalDatabase.recipients(); - this.groupDatabase = SignalDatabase.groups(); + this.groupsV2Api = ApplicationDependencies.getSignalServiceAccountManager().getGroupsV2Api(); + this.recipientTable = SignalDatabase.recipients(); + this.groupDatabase = SignalDatabase.groups(); } public StateProcessorForGroup forGroup(@NonNull ServiceIds serviceIds, @NonNull GroupMasterKey groupMasterKey) { - ProfileAndMessageHelper profileAndMessageHelper = new ProfileAndMessageHelper(context, serviceIds.getAci(), groupMasterKey, GroupId.v2(groupMasterKey), recipientDatabase); + ProfileAndMessageHelper profileAndMessageHelper = new ProfileAndMessageHelper(context, serviceIds.getAci(), groupMasterKey, GroupId.v2(groupMasterKey), recipientTable); return new StateProcessorForGroup(serviceIds, context, groupDatabase, groupsV2Api, groupsV2Authorization, groupMasterKey, profileAndMessageHelper); } @@ -143,9 +143,9 @@ public class GroupsV2StateProcessor { public static final class StateProcessorForGroup { private final ServiceIds serviceIds; - private final Context context; - private final GroupDatabase groupDatabase; - private final GroupsV2Api groupsV2Api; + private final Context context; + private final GroupTable groupDatabase; + private final GroupsV2Api groupsV2Api; private final GroupsV2Authorization groupsV2Authorization; private final GroupMasterKey masterKey; private final GroupId.V2 groupId; @@ -154,7 +154,7 @@ public class GroupsV2StateProcessor { @VisibleForTesting StateProcessorForGroup(@NonNull ServiceIds serviceIds, @NonNull Context context, - @NonNull GroupDatabase groupDatabase, + @NonNull GroupTable groupDatabase, @NonNull GroupsV2Api groupsV2Api, @NonNull GroupsV2Authorization groupsV2Authorization, @NonNull GroupMasterKey groupMasterKey, @@ -515,12 +515,12 @@ public class GroupsV2StateProcessor { OutgoingGroupUpdateMessage leaveMessage = new OutgoingGroupUpdateMessage(groupRecipient, decryptedGroupV2Context, System.currentTimeMillis()); try { - MessageDatabase mmsDatabase = SignalDatabase.mms(); - ThreadDatabase threadDatabase = SignalDatabase.threads(); - long threadId = threadDatabase.getOrCreateThreadIdFor(groupRecipient); - long id = mmsDatabase.insertMessageOutbox(leaveMessage, threadId, false, null); + MessageTable mmsDatabase = SignalDatabase.mms(); + ThreadTable threadTable = SignalDatabase.threads(); + long threadId = threadTable.getOrCreateThreadIdFor(groupRecipient); + long id = mmsDatabase.insertMessageOutbox(leaveMessage, threadId, false, null); mmsDatabase.markAsSent(id, true); - threadDatabase.update(threadId, false, false); + threadTable.update(threadId, false, false); } catch (MmsException e) { warn( "Failed to insert leave message.", e); } @@ -607,18 +607,18 @@ public class GroupsV2StateProcessor { private final Context context; private final ServiceId serviceId; - private final GroupId.V2 groupId; - private final RecipientDatabase recipientDatabase; + private final GroupId.V2 groupId; + private final RecipientTable recipientTable; @VisibleForTesting GroupMasterKey masterKey; - ProfileAndMessageHelper(@NonNull Context context, @NonNull ServiceId serviceId, @NonNull GroupMasterKey masterKey, @NonNull GroupId.V2 groupId, @NonNull RecipientDatabase recipientDatabase) { - this.context = context; - this.serviceId = serviceId; - this.masterKey = masterKey; - this.groupId = groupId; - this.recipientDatabase = recipientDatabase; + ProfileAndMessageHelper(@NonNull Context context, @NonNull ServiceId serviceId, @NonNull GroupMasterKey masterKey, @NonNull GroupId.V2 groupId, @NonNull RecipientTable recipientTable) { + this.context = context; + this.serviceId = serviceId; + this.masterKey = masterKey; + this.groupId = groupId; + this.recipientTable = recipientTable; } void determineProfileSharing(@NonNull GlobalGroupState inputGroupState, @NonNull DecryptedGroup newLocalState) { @@ -658,7 +658,7 @@ public class GroupsV2StateProcessor { } else if (addedBy.isSystemContact() || addedBy.isProfileSharing()) { Log.i(TAG, "Group 'adder' is trusted. contact: " + addedBy.isSystemContact() + ", profileSharing: " + addedBy.isProfileSharing()); Log.i(TAG, "Added to a group and auto-enabling profile sharing"); - recipientDatabase.setProfileSharing(Recipient.externalGroupExact(groupId).getId(), true); + recipientTable.setProfileSharing(Recipient.externalGroupExact(groupId).getId(), true); } else { Log.i(TAG, "Added to a group, but not enabling profile sharing, as 'adder' is not trusted"); } @@ -720,7 +720,7 @@ public class GroupsV2StateProcessor { } void persistLearnedProfileKeys(@NonNull ProfileKeySet profileKeys) { - Set updated = recipientDatabase.persistProfileKeySet(profileKeys); + Set updated = recipientTable.persistProfileKeySet(profileKeys); if (!updated.isEmpty()) { Log.i(TAG, String.format(Locale.US, "Learned %d new profile keys, fetching profiles", updated.size())); @@ -738,25 +738,25 @@ public class GroupsV2StateProcessor { if (outgoing) { try { - MessageDatabase mmsDatabase = SignalDatabase.mms(); - ThreadDatabase threadDatabase = SignalDatabase.threads(); - RecipientId recipientId = recipientDatabase.getOrInsertFromGroupId(groupId); + MessageTable mmsDatabase = SignalDatabase.mms(); + ThreadTable threadTable = SignalDatabase.threads(); + RecipientId recipientId = recipientTable.getOrInsertFromGroupId(groupId); Recipient recipient = Recipient.resolved(recipientId); OutgoingGroupUpdateMessage outgoingMessage = new OutgoingGroupUpdateMessage(recipient, decryptedGroupV2Context, timestamp); - long threadId = threadDatabase.getOrCreateThreadIdFor(recipient); + long threadId = threadTable.getOrCreateThreadIdFor(recipient); long messageId = mmsDatabase.insertMessageOutbox(outgoingMessage, threadId, false, null); mmsDatabase.markAsSent(messageId, true); - threadDatabase.update(threadId, false, false); + threadTable.update(threadId, false, false); } catch (MmsException e) { Log.w(TAG, e); } } else { - MessageDatabase smsDatabase = SignalDatabase.sms(); - RecipientId sender = RecipientId.from(editor.get()); + MessageTable smsDatabase = SignalDatabase.sms(); + RecipientId sender = RecipientId.from(editor.get()); IncomingTextMessage incoming = new IncomingTextMessage(sender, -1, timestamp, timestamp, timestamp, "", Optional.of(groupId), 0, false, null); - IncomingGroupUpdateMessage groupMessage = new IncomingGroupUpdateMessage(incoming, decryptedGroupV2Context); - Optional insertResult = smsDatabase.insertMessageInbox(groupMessage); + IncomingGroupUpdateMessage groupMessage = new IncomingGroupUpdateMessage(incoming, decryptedGroupV2Context); + Optional insertResult = smsDatabase.insertMessageInbox(groupMessage); if (insertResult.isPresent()) { SignalDatabase.threads().update(insertResult.get().getThreadId(), false, false); diff --git a/app/src/main/java/org/thoughtcrime/securesms/insights/InsightsRepository.java b/app/src/main/java/org/thoughtcrime/securesms/insights/InsightsRepository.java index ff2fe2209..e710dc90a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/insights/InsightsRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/insights/InsightsRepository.java @@ -10,8 +10,8 @@ import com.annimon.stream.Stream; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.contacts.avatars.GeneratedContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto; -import org.thoughtcrime.securesms.database.MmsSmsDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.MmsSmsTable; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; @@ -34,8 +34,8 @@ public class InsightsRepository implements InsightsDashboardViewModel.Repository @Override public void getInsightsData(@NonNull Consumer insightsDataConsumer) { SimpleTask.run(() -> { - MmsSmsDatabase mmsSmsDatabase = SignalDatabase.mmsSms(); - int insecure = mmsSmsDatabase.getInsecureMessageCountForInsights(); + MmsSmsTable mmsSmsDatabase = SignalDatabase.mmsSms(); + int insecure = mmsSmsDatabase.getInsecureMessageCountForInsights(); int secure = mmsSmsDatabase.getSecureMessageCountForInsights(); if (insecure + secure == 0) { @@ -49,8 +49,8 @@ public class InsightsRepository implements InsightsDashboardViewModel.Repository @Override public void getInsecureRecipients(@NonNull Consumer> insecureRecipientsConsumer) { SimpleTask.run(() -> { - RecipientDatabase recipientDatabase = SignalDatabase.recipients(); - List unregisteredRecipients = recipientDatabase.getUninvitedRecipientsForInsights(); + RecipientTable recipientTable = SignalDatabase.recipients(); + List unregisteredRecipients = recipientTable.getUninvitedRecipientsForInsights(); return Stream.of(unregisteredRecipients) .map(Recipient::resolved) @@ -80,7 +80,7 @@ public class InsightsRepository implements InsightsDashboardViewModel.Repository MessageSender.send(context, new OutgoingTextMessage(resolved, message, subscriptionId), -1L, true, null, null); - RecipientDatabase database = SignalDatabase.recipients(); + RecipientTable database = SignalDatabase.recipients(); database.setHasSentInvite(recipient.getId()); return null; diff --git a/app/src/main/java/org/thoughtcrime/securesms/invites/InviteReminderModel.java b/app/src/main/java/org/thoughtcrime/securesms/invites/InviteReminderModel.java index 8b4dc42a2..b0d9bfe4d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/invites/InviteReminderModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/invites/InviteReminderModel.java @@ -10,7 +10,7 @@ import org.thoughtcrime.securesms.components.reminder.FirstInviteReminder; import org.thoughtcrime.securesms.components.reminder.Reminder; import org.thoughtcrime.securesms.components.reminder.SecondInviteReminder; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.recipients.LiveRecipient; import org.thoughtcrime.securesms.recipients.Recipient; import org.signal.core.util.concurrent.SimpleTask; @@ -48,8 +48,8 @@ public final class InviteReminderModel { return new NoReminderInfo(); } - ThreadDatabase threadDatabase = SignalDatabase.threads(); - Long threadId = threadDatabase.getThreadIdFor(recipient.getId()); + ThreadTable threadTable = SignalDatabase.threads(); + Long threadId = threadTable.getThreadIdFor(recipient.getId()); if (threadId != null) { int conversationCount = SignalDatabase.mmsSms().getInsecureSentCount(threadId); diff --git a/app/src/main/java/org/thoughtcrime/securesms/invites/InviteReminderRepository.java b/app/src/main/java/org/thoughtcrime/securesms/invites/InviteReminderRepository.java index 81fc07a0e..416a50e11 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/invites/InviteReminderRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/invites/InviteReminderRepository.java @@ -2,8 +2,8 @@ package org.thoughtcrime.securesms.invites; import android.content.Context; -import org.thoughtcrime.securesms.database.MmsSmsDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.MmsSmsTable; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.recipients.Recipient; @@ -17,20 +17,20 @@ public final class InviteReminderRepository implements InviteReminderModel.Repos @Override public void setHasSeenFirstInviteReminder(Recipient recipient) { - RecipientDatabase recipientDatabase = SignalDatabase.recipients(); - recipientDatabase.setSeenFirstInviteReminder(recipient.getId()); + RecipientTable recipientTable = SignalDatabase.recipients(); + recipientTable.setSeenFirstInviteReminder(recipient.getId()); } @Override public void setHasSeenSecondInviteReminder(Recipient recipient) { - RecipientDatabase recipientDatabase = SignalDatabase.recipients(); - recipientDatabase.setSeenSecondInviteReminder(recipient.getId()); + RecipientTable recipientTable = SignalDatabase.recipients(); + recipientTable.setSeenSecondInviteReminder(recipient.getId()); } @Override public int getPercentOfInsecureMessages(int insecureCount) { - MmsSmsDatabase mmsSmsDatabase = SignalDatabase.mmsSms(); - int insecure = mmsSmsDatabase.getInsecureMessageCountForInsights(); + MmsSmsTable mmsSmsDatabase = SignalDatabase.mmsSms(); + int insecure = mmsSmsDatabase.getInsecureMessageCountForInsights(); int secure = mmsSmsDatabase.getSecureMessageCountForInsights(); if (insecure + secure == 0) return 0; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/PushDecryptMessageJobEnvelopeMigration.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/PushDecryptMessageJobEnvelopeMigration.java index b72120d8d..804116ff5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/PushDecryptMessageJobEnvelopeMigration.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/PushDecryptMessageJobEnvelopeMigration.java @@ -6,7 +6,7 @@ import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.NoSuchMessageException; -import org.thoughtcrime.securesms.database.PushDatabase; +import org.thoughtcrime.securesms.database.PushTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.JobMigration; @@ -21,7 +21,7 @@ public class PushDecryptMessageJobEnvelopeMigration extends JobMigration { private static final String TAG = Log.tag(PushDecryptMessageJobEnvelopeMigration.class); - private final PushDatabase pushDatabase; + private final PushTable pushDatabase; public PushDecryptMessageJobEnvelopeMigration(@NonNull Context context) { super(8); @@ -38,7 +38,7 @@ public class PushDecryptMessageJobEnvelopeMigration extends JobMigration { } } - private static @NonNull JobData migratePushDecryptMessageJob(@NonNull PushDatabase pushDatabase, @NonNull JobData jobData) { + private static @NonNull JobData migratePushDecryptMessageJob(@NonNull PushTable pushDatabase, @NonNull JobData jobData) { Data data = jobData.getData(); if (data.hasLong("message_id")) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/SendReadReceiptsJobMigration.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/SendReadReceiptsJobMigration.java index 89e311f6e..be89f2948 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/SendReadReceiptsJobMigration.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/SendReadReceiptsJobMigration.java @@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.jobmanager.migrations; import androidx.annotation.NonNull; -import org.thoughtcrime.securesms.database.MmsSmsDatabase; +import org.thoughtcrime.securesms.database.MmsSmsTable; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.JobMigration; @@ -11,9 +11,9 @@ import java.util.TreeSet; public class SendReadReceiptsJobMigration extends JobMigration { - private final MmsSmsDatabase mmsSmsDatabase; + private final MmsSmsTable mmsSmsDatabase; - public SendReadReceiptsJobMigration(@NonNull MmsSmsDatabase mmsSmsDatabase) { + public SendReadReceiptsJobMigration(@NonNull MmsSmsTable mmsSmsDatabase) { super(5); this.mmsSmsDatabase = mmsSmsDatabase; } @@ -26,7 +26,7 @@ public class SendReadReceiptsJobMigration extends JobMigration { return jobData; } - private static @NonNull JobData migrateSendReadReceiptJob(@NonNull MmsSmsDatabase mmsSmsDatabase, @NonNull JobData jobData) { + private static @NonNull JobData migrateSendReadReceiptJob(@NonNull MmsSmsTable mmsSmsDatabase, @NonNull JobData jobData) { Data data = jobData.getData(); if (!data.hasLong("thread")) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/SenderKeyDistributionSendJobRecipientMigration.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/SenderKeyDistributionSendJobRecipientMigration.java index fb56d0e71..9adc98986 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/SenderKeyDistributionSendJobRecipientMigration.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/migrations/SenderKeyDistributionSendJobRecipientMigration.java @@ -4,8 +4,8 @@ import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.GroupDatabase.GroupRecord; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.GroupTable.GroupRecord; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.jobmanager.Data; @@ -22,14 +22,14 @@ public class SenderKeyDistributionSendJobRecipientMigration extends JobMigration private static final String TAG = Log.tag(SenderKeyDistributionSendJobRecipientMigration.class); - private final GroupDatabase groupDatabase; + private final GroupTable groupDatabase; public SenderKeyDistributionSendJobRecipientMigration() { this(SignalDatabase.groups()); } @VisibleForTesting - SenderKeyDistributionSendJobRecipientMigration(GroupDatabase groupDatabase) { + SenderKeyDistributionSendJobRecipientMigration(GroupTable groupDatabase) { super(9); this.groupDatabase = groupDatabase; } @@ -43,7 +43,7 @@ public class SenderKeyDistributionSendJobRecipientMigration extends JobMigration } } - private static @NonNull JobData migrateJob(@NonNull JobData jobData, @NonNull GroupDatabase groupDatabase) { + private static @NonNull JobData migrateJob(@NonNull JobData jobData, @NonNull GroupTable groupDatabase) { Data data = jobData.getData(); if (data.hasString("group_id")) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java index ee1e8b946..68f583eb1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java @@ -19,7 +19,7 @@ import org.thoughtcrime.securesms.crypto.AttachmentSecret; import org.thoughtcrime.securesms.crypto.AttachmentSecretProvider; import org.thoughtcrime.securesms.crypto.ModernDecryptingPartInputStream; import org.thoughtcrime.securesms.crypto.ModernEncryptingPartOutputStream; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.events.PartProgressEvent; import org.thoughtcrime.securesms.jobmanager.Data; @@ -129,7 +129,7 @@ public final class AttachmentCompressionJob extends BaseJob { public void onRun() throws Exception { Log.d(TAG, "Running for: " + attachmentId); - AttachmentDatabase database = SignalDatabase.attachments(); + AttachmentTable database = SignalDatabase.attachments(); DatabaseAttachment databaseAttachment = database.getAttachment(attachmentId); if (databaseAttachment == null) { @@ -155,7 +155,7 @@ public final class AttachmentCompressionJob extends BaseJob { return exception instanceof IOException; } - private void compress(@NonNull AttachmentDatabase attachmentDatabase, + private void compress(@NonNull AttachmentTable attachmentDatabase, @NonNull MediaConstraints constraints, @NonNull DatabaseAttachment attachment) throws UndeliverableMessageException @@ -187,14 +187,14 @@ public final class AttachmentCompressionJob extends BaseJob { } private static @NonNull DatabaseAttachment transcodeVideoIfNeededToDatabase(@NonNull Context context, - @NonNull AttachmentDatabase attachmentDatabase, + @NonNull AttachmentTable attachmentDatabase, @NonNull DatabaseAttachment attachment, @NonNull MediaConstraints constraints, @NonNull EventBus eventBus, @NonNull TranscoderCancelationSignal cancelationSignal) throws UndeliverableMessageException { - AttachmentDatabase.TransformProperties transformProperties = attachment.getTransformProperties(); + AttachmentTable.TransformProperties transformProperties = attachment.getTransformProperties(); boolean allowSkipOnFailure = false; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCopyJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCopyJob.java index d95b743ec..917d98549 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCopyJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCopyJob.java @@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; import org.thoughtcrime.securesms.attachments.AttachmentId; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; @@ -75,7 +75,7 @@ public class AttachmentCopyJob extends BaseJob { @Override protected void onRun() throws Exception { - AttachmentDatabase database = SignalDatabase.attachments(); + AttachmentTable database = SignalDatabase.attachments(); for (AttachmentId destinationId : destinationIds) { database.copyAttachmentData(sourceId, destinationId); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java index 9a8ddd45e..69d5e0280 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java @@ -14,7 +14,7 @@ import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.attachments.AttachmentId; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; import org.thoughtcrime.securesms.blurhash.BlurHash; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.events.PartProgressEvent; @@ -105,15 +105,15 @@ public final class AttachmentDownloadJob extends BaseJob { public void onAdded() { Log.i(TAG, "onAdded() messageId: " + messageId + " partRowId: " + partRowId + " partUniqueId: " + partUniqueId + " manual: " + manual); - final AttachmentDatabase database = SignalDatabase.attachments(); + final AttachmentTable database = SignalDatabase.attachments(); final AttachmentId attachmentId = new AttachmentId(partRowId, partUniqueId); final DatabaseAttachment attachment = database.getAttachment(attachmentId); - final boolean pending = attachment != null && attachment.getTransferState() != AttachmentDatabase.TRANSFER_PROGRESS_DONE - && attachment.getTransferState() != AttachmentDatabase.TRANSFER_PROGRESS_PERMANENT_FAILURE; + final boolean pending = attachment != null && attachment.getTransferState() != AttachmentTable.TRANSFER_PROGRESS_DONE + && attachment.getTransferState() != AttachmentTable.TRANSFER_PROGRESS_PERMANENT_FAILURE; if (pending && (manual || AttachmentUtil.isAutoDownloadPermitted(context, attachment))) { Log.i(TAG, "onAdded() Marking attachment progress as 'started'"); - database.setTransferState(messageId, attachmentId, AttachmentDatabase.TRANSFER_PROGRESS_STARTED); + database.setTransferState(messageId, attachmentId, AttachmentTable.TRANSFER_PROGRESS_STARTED); } } @@ -129,8 +129,8 @@ public final class AttachmentDownloadJob extends BaseJob { public void doWork() throws IOException, RetryLaterException { Log.i(TAG, "onRun() messageId: " + messageId + " partRowId: " + partRowId + " partUniqueId: " + partUniqueId + " manual: " + manual); - final AttachmentDatabase database = SignalDatabase.attachments(); - final AttachmentId attachmentId = new AttachmentId(partRowId, partUniqueId); + final AttachmentTable database = SignalDatabase.attachments(); + final AttachmentId attachmentId = new AttachmentId(partRowId, partUniqueId); final DatabaseAttachment attachment = database.getAttachment(attachmentId); if (attachment == null) { @@ -150,12 +150,12 @@ public final class AttachmentDownloadJob extends BaseJob { if (!manual && !AttachmentUtil.isAutoDownloadPermitted(context, attachment)) { Log.w(TAG, "Attachment can't be auto downloaded..."); - database.setTransferState(messageId, attachmentId, AttachmentDatabase.TRANSFER_PROGRESS_PENDING); + database.setTransferState(messageId, attachmentId, AttachmentTable.TRANSFER_PROGRESS_PENDING); return; } Log.i(TAG, "Downloading push part " + attachmentId); - database.setTransferState(messageId, attachmentId, AttachmentDatabase.TRANSFER_PROGRESS_STARTED); + database.setTransferState(messageId, attachmentId, AttachmentTable.TRANSFER_PROGRESS_STARTED); if (attachment.getCdnNumber() != ReleaseChannel.CDN_NUMBER) { retrieveAttachment(messageId, attachmentId, attachment); @@ -184,8 +184,8 @@ public final class AttachmentDownloadJob extends BaseJob { throws IOException, RetryLaterException { - AttachmentDatabase database = SignalDatabase.attachments(); - File attachmentFile = database.getOrCreateTransferFile(attachmentId); + AttachmentTable database = SignalDatabase.attachments(); + File attachmentFile = database.getOrCreateTransferFile(attachmentId); try { SignalServiceMessageReceiver messageReceiver = ApplicationDependencies.getSignalServiceMessageReceiver(); @@ -270,7 +270,7 @@ public final class AttachmentDownloadJob extends BaseJob { private void markFailed(long messageId, AttachmentId attachmentId) { try { - AttachmentDatabase database = SignalDatabase.attachments(); + AttachmentTable database = SignalDatabase.attachments(); database.setTransferProgressFailed(attachmentId, messageId); } catch (MmsException e) { Log.w(TAG, e); @@ -279,7 +279,7 @@ public final class AttachmentDownloadJob extends BaseJob { private void markPermanentlyFailed(long messageId, AttachmentId attachmentId) { try { - AttachmentDatabase database = SignalDatabase.attachments(); + AttachmentTable database = SignalDatabase.attachments(); database.setTransferProgressPermanentFailure(attachmentId, messageId); } catch (MmsException e) { Log.w(TAG, e); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentMarkUploadedJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentMarkUploadedJob.java index e3a5dc2e5..330ed94ea 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentMarkUploadedJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentMarkUploadedJob.java @@ -5,7 +5,7 @@ import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.attachments.AttachmentId; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; @@ -60,8 +60,8 @@ public final class AttachmentMarkUploadedJob extends BaseJob { @Override public void onRun() throws Exception { - AttachmentDatabase database = SignalDatabase.attachments(); - DatabaseAttachment databaseAttachment = database.getAttachment(attachmentId); + AttachmentTable database = SignalDatabase.attachments(); + DatabaseAttachment databaseAttachment = database.getAttachment(attachmentId); if (databaseAttachment == null) { throw new InvalidAttachmentException("Cannot find the specified attachment."); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java index fc48e94d8..bdb4fb3ab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java @@ -15,7 +15,7 @@ import org.thoughtcrime.securesms.attachments.AttachmentId; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; import org.thoughtcrime.securesms.attachments.PointerAttachment; import org.thoughtcrime.securesms.blurhash.BlurHashEncoder; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.events.PartProgressEvent; @@ -125,7 +125,7 @@ public final class AttachmentUploadJob extends BaseJob { } SignalServiceMessageSender messageSender = ApplicationDependencies.getSignalServiceMessageSender(); - AttachmentDatabase database = SignalDatabase.attachments(); + AttachmentTable database = SignalDatabase.attachments(); DatabaseAttachment databaseAttachment = database.getAttachment(attachmentId); if (databaseAttachment == null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AutomaticSessionResetJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AutomaticSessionResetJob.java index f19102cbc..4d24ba059 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AutomaticSessionResetJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AutomaticSessionResetJob.java @@ -4,7 +4,7 @@ import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; -import org.thoughtcrime.securesms.database.MessageDatabase; +import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.databaseprotos.DeviceLastResetTime; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; @@ -121,7 +121,7 @@ public class AutomaticSessionResetJob extends BaseJob { } private void insertLocalMessage() { - MessageDatabase.InsertResult result = SignalDatabase.sms().insertChatSessionRefreshedMessage(recipientId, deviceId, sentTimestamp); + MessageTable.InsertResult result = SignalDatabase.sms().insertChatSessionRefreshedMessage(recipientId, deviceId, sentTimestamp); ApplicationDependencies.getMessageNotifier().updateNotification(context, ConversationId.forConversation(result.getThreadId())); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV1DownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV1DownloadJob.java index 221a48da9..d55a3906a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV1DownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV1DownloadJob.java @@ -4,8 +4,8 @@ import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.InvalidMessageException; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.GroupDatabase.GroupRecord; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.GroupTable.GroupRecord; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; @@ -60,8 +60,8 @@ public final class AvatarGroupsV1DownloadJob extends BaseJob { @Override public void onRun() throws IOException { - GroupDatabase database = SignalDatabase.groups(); - Optional record = database.getGroup(groupId); + GroupTable database = SignalDatabase.groups(); + Optional record = database.getGroup(groupId); File attachment = null; try { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV2DownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV2DownloadJob.java index 013b27d18..6c9e2ffb0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV2DownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV2DownloadJob.java @@ -9,8 +9,8 @@ import org.signal.core.util.StreamUtil; import org.signal.core.util.logging.Log; import org.signal.libsignal.zkgroup.groups.GroupMasterKey; import org.signal.libsignal.zkgroup.groups.GroupSecretParams; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.GroupDatabase.GroupRecord; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.GroupTable.GroupRecord; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; @@ -74,8 +74,8 @@ public final class AvatarGroupsV2DownloadJob extends BaseJob { @Override public void onRun() throws IOException { - GroupDatabase database = SignalDatabase.groups(); - Optional record = database.getGroup(groupId); + GroupTable database = SignalDatabase.groups(); + Optional record = database.getGroup(groupId); File attachment = null; try { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ConversationShortcutUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ConversationShortcutUpdateJob.java index fbee838ba..c734403a3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ConversationShortcutUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ConversationShortcutUpdateJob.java @@ -4,7 +4,7 @@ import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.database.model.ThreadRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; @@ -64,11 +64,11 @@ public class ConversationShortcutUpdateJob extends BaseJob { return; } - ThreadDatabase threadDatabase = SignalDatabase.threads(); - int maxShortcuts = ConversationUtil.getMaxShortcuts(context); + ThreadTable threadTable = SignalDatabase.threads(); + int maxShortcuts = ConversationUtil.getMaxShortcuts(context); List ranked = new ArrayList<>(maxShortcuts); - try (ThreadDatabase.Reader reader = threadDatabase.readerFor(threadDatabase.getRecentConversationList(maxShortcuts, false, false, false, true, !Util.isDefaultSmsProvider(context), false))) { + try (ThreadTable.Reader reader = threadTable.readerFor(threadTable.getRecentConversationList(maxShortcuts, false, false, false, true, !Util.isDefaultSmsProvider(context), false))) { ThreadRecord record; while ((record = reader.getNext()) != null) { ranked.add(record.getRecipient().resolve()); @@ -81,7 +81,7 @@ public class ConversationShortcutUpdateJob extends BaseJob { throw new RetryLaterException(); } - ConversationUtil.removeLongLivedShortcuts(context, threadDatabase.getArchivedRecipients()); + ConversationUtil.removeLongLivedShortcuts(context, threadTable.getArchivedRecipients()); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/DonationReceiptRedemptionJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/DonationReceiptRedemptionJob.java index bc01a7769..e55a024b5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/DonationReceiptRedemptionJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/DonationReceiptRedemptionJob.java @@ -8,7 +8,7 @@ import org.signal.libsignal.zkgroup.InvalidInputException; import org.signal.libsignal.zkgroup.receipts.ReceiptCredentialPresentation; import org.thoughtcrime.securesms.components.settings.app.subscription.errors.DonationError; import org.thoughtcrime.securesms.components.settings.app.subscription.errors.DonationErrorSource; -import org.thoughtcrime.securesms.database.MessageDatabase; +import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.NoSuchMessageException; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MessageRecord; @@ -206,7 +206,7 @@ public class DonationReceiptRedemptionJob extends BaseJob { } else if (giftMessageId != NO_ID) { Log.d(TAG, "Marking gift redemption completed for " + giftMessageId); SignalDatabase.mms().markGiftRedemptionCompleted(giftMessageId); - MessageDatabase.MarkedMessageInfo markedMessageInfo = SignalDatabase.mms().setIncomingMessageViewed(giftMessageId); + MessageTable.MarkedMessageInfo markedMessageInfo = SignalDatabase.mms().setIncomingMessageViewed(giftMessageId); if (markedMessageInfo != null) { Log.d(TAG, "Marked gift message viewed for " + giftMessageId); MultiDeviceViewedUpdateJob.enqueue(Collections.singletonList(markedMessageInfo.getSyncMessageId())); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ForceUpdateGroupV2Job.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ForceUpdateGroupV2Job.java index 0b427c4ee..3d5c258e2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ForceUpdateGroupV2Job.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ForceUpdateGroupV2Job.java @@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; import org.signal.core.util.concurrent.SignalExecutors; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; @@ -28,7 +28,7 @@ public final class ForceUpdateGroupV2Job extends BaseJob { public static void enqueueIfNecessary(@NonNull GroupId.V2 groupId) { SignalExecutors.BOUNDED.execute(() -> { - Optional group = SignalDatabase.groups().getGroup(groupId); + Optional group = SignalDatabase.groups().getGroup(groupId); if (group.isPresent() && group.get().isV2Group() && group.get().getLastForceUpdateTimestamp() + FORCE_UPDATE_INTERVAL < System.currentTimeMillis() diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ForceUpdateGroupV2WorkerJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ForceUpdateGroupV2WorkerJob.java index b84e5c291..d9e37cf11 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ForceUpdateGroupV2WorkerJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ForceUpdateGroupV2WorkerJob.java @@ -1,16 +1,14 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; -import androidx.annotation.WorkerThread; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.groups.GroupChangeBusyException; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.groups.GroupManager; import org.thoughtcrime.securesms.groups.GroupNotAMemberException; -import org.thoughtcrime.securesms.groups.v2.processing.GroupsV2StateProcessor; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; @@ -20,7 +18,6 @@ import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException import java.io.IOException; import java.util.Optional; -import java.util.concurrent.TimeUnit; /** * Scheduled by {@link ForceUpdateGroupV2Job} after message queues are drained. @@ -64,7 +61,7 @@ final class ForceUpdateGroupV2WorkerJob extends BaseJob { @Override public void onRun() throws IOException, GroupNotAMemberException, GroupChangeBusyException { - Optional group = SignalDatabase.groups().getGroup(groupId); + Optional group = SignalDatabase.groups().getGroup(groupId); if (!group.isPresent()) { Log.w(TAG, "Group not found"); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/GiftSendJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/GiftSendJob.kt index 9f12f0e51..737eeed89 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/GiftSendJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/GiftSendJob.kt @@ -4,7 +4,7 @@ import com.google.protobuf.ByteString import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.badges.gifts.Gifts import org.thoughtcrime.securesms.contacts.paged.ContactSearchKey -import org.thoughtcrime.securesms.database.RecipientDatabase +import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge import org.thoughtcrime.securesms.jobmanager.Data @@ -52,7 +52,7 @@ class GiftSendJob private constructor(parameters: Parameters, private val recipi val recipient = Recipient.resolved(recipientId) - if (recipient.isGroup || recipient.isDistributionList || recipient.registered != RecipientDatabase.RegisteredState.REGISTERED) { + if (recipient.isGroup || recipient.isDistributionList || recipient.registered != RecipientTable.RegisteredState.REGISTERED) { Log.w(TAG, "Invalid recipient $recipientId for gift send.") return Result.failure() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupV2UpdateSelfProfileKeyJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupV2UpdateSelfProfileKeyJob.java index 05fb752b2..74740e3bd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupV2UpdateSelfProfileKeyJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupV2UpdateSelfProfileKeyJob.java @@ -8,7 +8,7 @@ import com.google.protobuf.ByteString; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; import org.signal.storageservice.protos.groups.local.DecryptedMember; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupChangeBusyException; @@ -112,7 +112,7 @@ public final class GroupV2UpdateSelfProfileKeyJob extends BaseJob { boolean foundMismatch = false; for (GroupId.V2 id : SignalDatabase.groups().getAllGroupV2Ids()) { - Optional group = SignalDatabase.groups().getGroup(id); + Optional group = SignalDatabase.groups().getGroup(id); if (!group.isPresent()) { Log.w(TAG, "Group " + group + " no longer exists?"); continue; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java index 124b3b430..82aa72c79 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java @@ -16,10 +16,10 @@ import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.attachments.UriAttachment; import org.thoughtcrime.securesms.contactshare.Contact; import org.thoughtcrime.securesms.contactshare.VCardUtil; -import org.thoughtcrime.securesms.database.AttachmentDatabase; -import org.thoughtcrime.securesms.database.MessageDatabase; -import org.thoughtcrime.securesms.database.MessageDatabase.InsertResult; -import org.thoughtcrime.securesms.database.MmsDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; +import org.thoughtcrime.securesms.database.MessageTable; +import org.thoughtcrime.securesms.database.MessageTable.InsertResult; +import org.thoughtcrime.securesms.database.MmsTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; @@ -110,8 +110,8 @@ public class MmsDownloadJob extends BaseJob { throw new NotReadyException(); } - MessageDatabase database = SignalDatabase.mms(); - Optional notification = database.getNotification(messageId); + MessageTable database = SignalDatabase.mms(); + Optional notification = database.getNotification(messageId); if (!notification.isPresent()) { Log.w(TAG, "No notification for ID: " + messageId); @@ -127,7 +127,7 @@ public class MmsDownloadJob extends BaseJob { throw new MmsException("Not registered"); } - database.markDownloadState(messageId, MmsDatabase.Status.DOWNLOAD_CONNECTING); + database.markDownloadState(messageId, MmsTable.Status.DOWNLOAD_CONNECTING); String contentLocation = notification.get().getContentLocation(); byte[] transactionId = new byte[0]; @@ -153,25 +153,25 @@ public class MmsDownloadJob extends BaseJob { storeRetrievedMms(contentLocation, messageId, threadId, retrieveConf, notification.get().getSubscriptionId(), notification.get().getFrom()); } catch (ApnUnavailableException e) { Log.w(TAG, e); - handleDownloadError(messageId, threadId, MmsDatabase.Status.DOWNLOAD_APN_UNAVAILABLE, + handleDownloadError(messageId, threadId, MmsTable.Status.DOWNLOAD_APN_UNAVAILABLE, automatic); } catch (MmsException e) { Log.w(TAG, e); handleDownloadError(messageId, threadId, - MmsDatabase.Status.DOWNLOAD_HARD_FAILURE, + MmsTable.Status.DOWNLOAD_HARD_FAILURE, automatic); } catch (MmsRadioException | IOException e) { Log.w(TAG, e); handleDownloadError(messageId, threadId, - MmsDatabase.Status.DOWNLOAD_SOFT_FAILURE, + MmsTable.Status.DOWNLOAD_SOFT_FAILURE, automatic); } } @Override public void onFailure() { - MessageDatabase database = SignalDatabase.mms(); - database.markDownloadState(messageId, MmsDatabase.Status.DOWNLOAD_SOFT_FAILURE); + MessageTable database = SignalDatabase.mms(); + database.markDownloadState(messageId, MmsTable.Status.DOWNLOAD_SOFT_FAILURE); if (automatic) { database.markIncomingNotificationReceived(threadId); @@ -189,8 +189,8 @@ public class MmsDownloadJob extends BaseJob { int subscriptionId, @Nullable RecipientId notificationFrom) throws MmsException { - MessageDatabase database = SignalDatabase.mms(); - Optional group = Optional.empty(); + MessageTable database = SignalDatabase.mms(); + Optional group = Optional.empty(); Set members = new HashSet<>(); String body = null; List attachments = new LinkedList<>(); @@ -238,8 +238,8 @@ public class MmsDownloadJob extends BaseJob { if (part.getName() != null) name = Util.toIsoString(part.getName()); attachments.add(new UriAttachment(uri, Util.toIsoString(part.getContentType()), - AttachmentDatabase.TRANSFER_PROGRESS_DONE, - part.getData().length, name, false, false, false, false, null, null, null, null, null)); + AttachmentTable.TRANSFER_PROGRESS_DONE, + part.getData().length, name, false, false, false, false, null, null, null, null, null)); } } } @@ -260,7 +260,7 @@ public class MmsDownloadJob extends BaseJob { private void handleDownloadError(long messageId, long threadId, int downloadStatus, boolean automatic) { - MessageDatabase db = SignalDatabase.mms(); + MessageTable db = SignalDatabase.mms(); db.markDownloadState(messageId, downloadStatus); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsReceiveJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsReceiveJob.java index 20adb1eec..174c42409 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsReceiveJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsReceiveJob.java @@ -9,7 +9,7 @@ import com.google.android.mms.pdu_alt.PduParser; import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.util.Pair; -import org.thoughtcrime.securesms.database.MessageDatabase; +import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; @@ -76,7 +76,7 @@ public class MmsReceiveJob extends BaseJob { } else if (isNotification(pdu) && isSelf(pdu)) { Log.w(TAG, "Received an MMS from ourselves! Ignoring."); } else if (isNotification(pdu)) { - MessageDatabase database = SignalDatabase.mms(); + MessageTable database = SignalDatabase.mms(); Pair messageAndThreadId = database.insertMessageInbox((NotificationInd)pdu, subscriptionId); Log.i(TAG, "Inserted received MMS notification..."); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java index e05f23722..6ba4fce0b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsSendJob.java @@ -27,11 +27,11 @@ import org.signal.core.util.StreamUtil; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.MessageDatabase; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.NoSuchMessageException; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; @@ -80,7 +80,7 @@ public final class MmsSendJob extends SendJob { /** Enqueues compression jobs for attachments and finally the MMS send job. */ @WorkerThread public static void enqueue(@NonNull Context context, @NonNull JobManager jobManager, long messageId) { - MessageDatabase database = SignalDatabase.mms(); + MessageTable database = SignalDatabase.mms(); OutgoingMediaMessage message; try { @@ -122,7 +122,7 @@ public final class MmsSendJob extends SendJob { @Override public void onSend() throws MmsException, NoSuchMessageException, IOException { - MessageDatabase database = SignalDatabase.mms(); + MessageTable database = SignalDatabase.mms(); OutgoingMediaMessage message = database.getOutgoingMessage(messageId); if (database.isSent(messageId)) { @@ -240,14 +240,14 @@ public final class MmsSendJob extends SendJob { } if (message.getRecipient().isMmsGroup()) { - List members = SignalDatabase.groups().getGroupMembers(message.getRecipient().requireGroupId(), GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); + List members = SignalDatabase.groups().getGroupMembers(message.getRecipient().requireGroupId(), GroupTable.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); for (Recipient member : members) { if (!member.hasSmsAddress()) { throw new UndeliverableMessageException("One of the group recipients did not have an SMS address! " + member.getId()); } - if (message.getDistributionType() == ThreadDatabase.DistributionTypes.BROADCAST) { + if (message.getDistributionType() == ThreadTable.DistributionTypes.BROADCAST) { req.addBcc(new EncodedStringValue(member.requireSmsAddress())); } else { req.addTo(new EncodedStringValue(member.requireSmsAddress())); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceBlockedUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceBlockedUpdateJob.java index deda767b2..07afb1770 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceBlockedUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceBlockedUpdateJob.java @@ -4,8 +4,8 @@ import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; -import org.thoughtcrime.securesms.database.RecipientDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase.RecipientReader; +import org.thoughtcrime.securesms.database.RecipientTable; +import org.thoughtcrime.securesms.database.RecipientTable.RecipientReader; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; @@ -71,7 +71,7 @@ public class MultiDeviceBlockedUpdateJob extends BaseJob { return; } - RecipientDatabase database = SignalDatabase.recipients(); + RecipientTable database = SignalDatabase.recipients(); try (RecipientReader reader = database.readerForBlocked(database.getBlocked())) { List blockedIndividuals = new LinkedList<>(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactSyncJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactSyncJob.kt index c815fd045..75f477353 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactSyncJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactSyncJob.kt @@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.jobs import org.signal.core.util.logging.Log import org.signal.libsignal.protocol.InvalidMessageException -import org.thoughtcrime.securesms.database.IdentityDatabase.VerifiedStatus +import org.thoughtcrime.securesms.database.IdentityTable.VerifiedStatus import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.jobmanager.Data diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java index 6c76df62b..2025e68d1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java @@ -16,7 +16,7 @@ import org.signal.libsignal.zkgroup.profiles.ProfileKey; import org.thoughtcrime.securesms.conversation.colors.ChatColorsMapper; import org.thoughtcrime.securesms.crypto.ProfileKeyUtil; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.IdentityRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; @@ -26,7 +26,6 @@ import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.net.NotPushRegisteredException; import org.thoughtcrime.securesms.permissions.Permissions; -import org.thoughtcrime.securesms.profiles.AvatarHelper; import org.thoughtcrime.securesms.providers.BlobProvider; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; @@ -144,7 +143,7 @@ public class MultiDeviceContactUpdateJob extends BaseJob { DeviceContactsOutputStream out = new DeviceContactsOutputStream(writeDetails.outputStream); Recipient recipient = Recipient.resolved(recipientId); - if (recipient.getRegistered() == RecipientDatabase.RegisteredState.NOT_REGISTERED) { + if (recipient.getRegistered() == RecipientTable.RegisteredState.NOT_REGISTERED) { Log.w(TAG, recipientId + " not registered!"); return; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceGroupUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceGroupUpdateJob.java index 937738689..2c8d51d40 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceGroupUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceGroupUpdateJob.java @@ -8,7 +8,7 @@ import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.conversation.colors.ChatColorsMapper; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; @@ -97,11 +97,11 @@ public class MultiDeviceGroupUpdateJob extends BaseJob { () -> Log.i(TAG, "Write successful."), e -> Log.w(TAG, "Error during write.", e)); - try (GroupDatabase.Reader reader = SignalDatabase.groups().getGroups()) { + try (GroupTable.Reader reader = SignalDatabase.groups().getGroups()) { DeviceGroupsOutputStream out = new DeviceGroupsOutputStream(new ParcelFileDescriptor.AutoCloseOutputStream(pipe[1])); boolean hasData = false; - GroupDatabase.GroupRecord record; + GroupTable.GroupRecord record; while ((record = reader.getNext()) != null) { if (record.isV1Group()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceOutgoingPaymentSyncJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceOutgoingPaymentSyncJob.java index d0acf006e..20fe1eb27 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceOutgoingPaymentSyncJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceOutgoingPaymentSyncJob.java @@ -6,7 +6,7 @@ import com.google.protobuf.ByteString; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; -import org.thoughtcrime.securesms.database.PaymentDatabase; +import org.thoughtcrime.securesms.database.PaymentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; @@ -20,7 +20,6 @@ import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.whispersystems.signalservice.api.messages.multidevice.OutgoingPaymentMessage; import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage; import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException; import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedException; @@ -80,7 +79,7 @@ public final class MultiDeviceOutgoingPaymentSyncJob extends BaseJob { return; } - PaymentDatabase.PaymentTransaction payment = SignalDatabase.payments().getPayment(uuid); + PaymentTable.PaymentTransaction payment = SignalDatabase.payments().getPayment(uuid); if (payment == null) { Log.w(TAG, "Payment not found " + uuid); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceReadUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceReadUpdateJob.java index 25992fa9a..895e9035e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceReadUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceReadUpdateJob.java @@ -8,7 +8,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import org.signal.core.util.ListUtil; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; -import org.thoughtcrime.securesms.database.MessageDatabase.SyncMessageId; +import org.thoughtcrime.securesms.database.MessageTable.SyncMessageId; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceStickerPackSyncJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceStickerPackSyncJob.java index 92ffb379f..cff064fd6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceStickerPackSyncJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceStickerPackSyncJob.java @@ -5,7 +5,7 @@ import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.StickerDatabase.StickerPackRecordReader; +import org.thoughtcrime.securesms.database.StickerTable.StickerPackRecordReader; import org.thoughtcrime.securesms.database.model.StickerPackRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceVerifiedUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceVerifiedUpdateJob.java index a75b21f3e..efcb066d4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceVerifiedUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceVerifiedUpdateJob.java @@ -7,7 +7,7 @@ import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.IdentityKey; import org.signal.libsignal.protocol.InvalidKeyException; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; -import org.thoughtcrime.securesms.database.IdentityDatabase.VerifiedStatus; +import org.thoughtcrime.securesms.database.IdentityTable.VerifiedStatus; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewOnceOpenJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewOnceOpenJob.java index 63f6e6272..80acd787a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewOnceOpenJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewOnceOpenJob.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; -import org.thoughtcrime.securesms.database.MessageDatabase.SyncMessageId; +import org.thoughtcrime.securesms.database.MessageTable.SyncMessageId; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewedUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewedUpdateJob.java index b6d774bfd..9302dafce 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewedUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewedUpdateJob.java @@ -8,7 +8,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import org.signal.core.util.ListUtil; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; -import org.thoughtcrime.securesms.database.MessageDatabase.SyncMessageId; +import org.thoughtcrime.securesms.database.MessageTable.SyncMessageId; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentLedgerUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentLedgerUpdateJob.java index a0d3cd444..9f1d389d1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentLedgerUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentLedgerUpdateJob.java @@ -6,7 +6,7 @@ import androidx.annotation.Nullable; import com.mobilecoin.lib.exceptions.FogSyncException; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.PaymentDatabase; +import org.thoughtcrime.securesms.database.PaymentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; @@ -64,8 +64,8 @@ public final class PaymentLedgerUpdateJob extends BaseJob { Long minimumBlockIndex = null; if (paymentUuid != null) { - PaymentDatabase.PaymentTransaction payment = SignalDatabase.payments() - .getPayment(paymentUuid); + PaymentTable.PaymentTransaction payment = SignalDatabase.payments() + .getPayment(paymentUuid); if (payment != null) { minimumBlockIndex = payment.getBlockIndex(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentNotificationSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentNotificationSendJob.java index efaa6433a..228cd13b6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentNotificationSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentNotificationSendJob.java @@ -4,7 +4,7 @@ import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; -import org.thoughtcrime.securesms.database.PaymentDatabase; +import org.thoughtcrime.securesms.database.PaymentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; @@ -91,8 +91,8 @@ public final class PaymentNotificationSendJob extends BaseJob { throw new NotPushRegisteredException(); } - PaymentDatabase paymentDatabase = SignalDatabase.payments(); - Recipient recipient = Recipient.resolved(recipientId); + PaymentTable paymentDatabase = SignalDatabase.payments(); + Recipient recipient = Recipient.resolved(recipientId); if (recipient.isUnregistered()) { Log.w(TAG, recipientId + " not registered!"); @@ -103,7 +103,7 @@ public final class PaymentNotificationSendJob extends BaseJob { SignalServiceAddress address = RecipientUtil.toSignalServiceAddress(context, recipient); Optional unidentifiedAccess = UnidentifiedAccessUtil.getAccessFor(context, recipient); - PaymentDatabase.PaymentTransaction payment = paymentDatabase.getPayment(uuid); + PaymentTable.PaymentTransaction payment = paymentDatabase.getPayment(uuid); if (payment == null) { Log.w(TAG, "Could not find payment, cannot send notification " + uuid); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentSendJob.java index 79dce317a..94f5075f1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentSendJob.java @@ -5,7 +5,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.PaymentDatabase; +import org.thoughtcrime.securesms.database.PaymentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; @@ -135,8 +135,8 @@ public final class PaymentSendJob extends BaseJob { Stopwatch stopwatch = new Stopwatch("Payment submission"); - Wallet wallet = ApplicationDependencies.getPayments().getWallet(); - PaymentDatabase paymentDatabase = SignalDatabase.payments(); + Wallet wallet = ApplicationDependencies.getPayments().getWallet(); + PaymentTable paymentDatabase = SignalDatabase.payments(); paymentDatabase.createOutgoingPayment(uuid, recipientId, diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentTransactionCheckJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentTransactionCheckJob.java index a325a09b6..a93657ab1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentTransactionCheckJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentTransactionCheckJob.java @@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.PaymentDatabase; +import org.thoughtcrime.securesms.database.PaymentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; @@ -52,9 +52,9 @@ public final class PaymentTransactionCheckJob extends BaseJob { @Override protected void onRun() throws Exception { - PaymentDatabase paymentDatabase = SignalDatabase.payments(); + PaymentTable paymentDatabase = SignalDatabase.payments(); - PaymentDatabase.PaymentTransaction payment = paymentDatabase.getPayment(uuid); + PaymentTable.PaymentTransaction payment = paymentDatabase.getPayment(uuid); if (payment == null) { Log.w(TAG, "No payment found for UUID " + uuid); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDistributionListSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDistributionListSendJob.java index 8ed3f9f17..405df55ac 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDistributionListSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDistributionListSendJob.java @@ -10,8 +10,8 @@ import com.annimon.stream.Stream; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; -import org.thoughtcrime.securesms.database.GroupReceiptDatabase; -import org.thoughtcrime.securesms.database.MessageDatabase; +import org.thoughtcrime.securesms.database.GroupReceiptTable; +import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.NoSuchMessageException; import org.thoughtcrime.securesms.database.SentStorySyncManifest; import org.thoughtcrime.securesms.database.SignalDatabase; @@ -138,8 +138,8 @@ public final class PushDistributionListSendJob extends PushSendJob { public void onPushSend() throws IOException, MmsException, NoSuchMessageException, RetryLaterException { - MessageDatabase database = SignalDatabase.mms(); - OutgoingMediaMessage message = database.getOutgoingMessage(messageId); + MessageTable database = SignalDatabase.mms(); + OutgoingMediaMessage message = database.getOutgoingMessage(messageId); Set existingNetworkFailures = message.getNetworkFailures(); Set existingIdentityMismatches = message.getIdentityKeyMismatches(); @@ -199,7 +199,7 @@ public final class PushDistributionListSendJob extends PushSendJob { List attachments = Stream.of(message.getAttachments()).filterNot(Attachment::isSticker).toList(); List attachmentPointers = getAttachmentPointersFor(attachments); boolean isRecipientUpdate = Stream.of(SignalDatabase.groupReceipts().getGroupReceiptInfo(messageId)) - .anyMatch(info -> info.getStatus() > GroupReceiptDatabase.STATUS_UNDELIVERED); + .anyMatch(info -> info.getStatus() > GroupReceiptTable.STATUS_UNDELIVERED); final SignalServiceStoryMessage storyMessage; if (message.getStoryType().isTextStory()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java index f4eba9c09..8f625915b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java @@ -14,13 +14,13 @@ import org.signal.core.util.SetUtil; import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.util.Pair; import org.thoughtcrime.securesms.attachments.Attachment; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.GroupReceiptDatabase; -import org.thoughtcrime.securesms.database.GroupReceiptDatabase.GroupReceiptInfo; -import org.thoughtcrime.securesms.database.MessageDatabase; -import org.thoughtcrime.securesms.database.MmsDatabase; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.GroupReceiptTable; +import org.thoughtcrime.securesms.database.GroupReceiptTable.GroupReceiptInfo; +import org.thoughtcrime.securesms.database.MessageTable; +import org.thoughtcrime.securesms.database.MmsTable; import org.thoughtcrime.securesms.database.NoSuchMessageException; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch; import org.thoughtcrime.securesms.database.documents.NetworkFailure; @@ -114,8 +114,8 @@ public final class PushGroupSendJob extends PushSendJob { throw new AssertionError("Not a group!"); } - MessageDatabase database = SignalDatabase.mms(); - OutgoingMediaMessage message = database.getOutgoingMessage(messageId); + MessageTable database = SignalDatabase.mms(); + OutgoingMediaMessage message = database.getOutgoingMessage(messageId); Set attachmentUploadIds = enqueueCompressingAndUploadAttachmentsChains(jobManager, message); if (message.getGiftBadge() != null) { @@ -162,8 +162,8 @@ public final class PushGroupSendJob extends PushSendJob { { SignalLocalMetrics.GroupMessageSend.onJobStarted(messageId); - MessageDatabase database = SignalDatabase.mms(); - OutgoingMediaMessage message = database.getOutgoingMessage(messageId); + MessageTable database = SignalDatabase.mms(); + OutgoingMediaMessage message = database.getOutgoingMessage(messageId); long threadId = database.getMessageRecord(messageId).getThreadId(); Set existingNetworkFailures = message.getNetworkFailures(); Set existingIdentityMismatches = message.getIdentityKeyMismatches(); @@ -247,17 +247,17 @@ public final class PushGroupSendJob extends PushSendJob { List attachments = Stream.of(message.getAttachments()).filterNot(Attachment::isSticker).toList(); List attachmentPointers = getAttachmentPointersFor(attachments); boolean isRecipientUpdate = Stream.of(SignalDatabase.groupReceipts().getGroupReceiptInfo(messageId)) - .anyMatch(info -> info.getStatus() > GroupReceiptDatabase.STATUS_UNDELIVERED); + .anyMatch(info -> info.getStatus() > GroupReceiptTable.STATUS_UNDELIVERED); if (message.getStoryType().isStory()) { - Optional groupRecord = SignalDatabase.groups().getGroup(groupId); + Optional groupRecord = SignalDatabase.groups().getGroup(groupId); if (groupRecord.isPresent() && groupRecord.get().isAnnouncementGroup() && !groupRecord.get().isAdmin(Recipient.self())) { throw new UndeliverableMessageException("Non-admins cannot send stories in announcement groups!"); } if (groupRecord.isPresent()) { - GroupDatabase.V2GroupProperties v2GroupProperties = groupRecord.get().requireV2GroupProperties(); + GroupTable.V2GroupProperties v2GroupProperties = groupRecord.get().requireV2GroupProperties(); SignalServiceGroupV2 groupContext = SignalServiceGroupV2.newBuilder(v2GroupProperties.getGroupMasterKey()) .withRevision(v2GroupProperties.getGroupRevision()) .build(); @@ -301,7 +301,7 @@ public final class PushGroupSendJob extends PushSendJob { throw new UndeliverableMessageException("Messages can no longer be sent to V1 groups!"); } } else { - Optional groupRecord = SignalDatabase.groups().getGroup(groupRecipient.requireGroupId()); + Optional groupRecord = SignalDatabase.groups().getGroup(groupRecipient.requireGroupId()); if (groupRecord.isPresent() && groupRecord.get().isAnnouncementGroup() && !groupRecord.get().isAdmin(Recipient.self())) { throw new UndeliverableMessageException("Non-admins cannot send messages in announcement groups!"); @@ -381,7 +381,7 @@ public final class PushGroupSendJob extends PushSendJob { @NonNull Set existingIdentityMismatches) throws RetryLaterException, ProofRequiredException { - MmsDatabase database = SignalDatabase.mms(); + MmsTable database = SignalDatabase.mms(); RecipientAccessList accessList = new RecipientAccessList(target); List networkFailures = Stream.of(results).filter(SendMessageResult::isNetworkFailure).map(result -> new NetworkFailure(accessList.requireIdByAddress(result.getAddress()))).toList(); @@ -403,9 +403,9 @@ public final class PushGroupSendJob extends PushSendJob { networkFailures.size(), identityMismatches.size(), proofRequired != null, unregisteredRecipients.size())); } - RecipientDatabase recipientDatabase = SignalDatabase.recipients(); + RecipientTable recipientTable = SignalDatabase.recipients(); for (RecipientId unregistered : unregisteredRecipients) { - recipientDatabase.markUnregistered(unregistered); + recipientTable.markUnregistered(unregistered); } existingNetworkFailures.removeAll(resolvedNetworkFailures); @@ -479,7 +479,7 @@ public final class PushGroupSendJob extends PushSendJob { } else { Log.w(TAG, "No destinations found for group message " + groupId + " using current group membership"); possible = Stream.of(SignalDatabase.groups() - .getGroupMembers(groupId, GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF)) + .getGroupMembers(groupId, GroupTable.MemberSet.FULL_MEMBERS_EXCLUDING_SELF)) .map(Recipient::resolve) .distinctBy(Recipient::getId) .toList(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSilentUpdateSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSilentUpdateSendJob.java index e1497ad4d..ccf674eb6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSilentUpdateSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSilentUpdateSendJob.java @@ -11,7 +11,7 @@ import com.google.protobuf.InvalidProtocolBufferException; import org.signal.core.util.logging.Log; import org.signal.storageservice.protos.groups.local.DecryptedGroup; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; @@ -77,7 +77,7 @@ public final class PushGroupSilentUpdateSendJob extends BaseJob { .filter(uuid -> !UuidUtil.UNKNOWN_UUID.equals(uuid)) .filter(uuid -> !SignalStore.account().requireAci().uuid().equals(uuid)) .map(uuid -> Recipient.externalPush(ServiceId.from(uuid))) - .filter(recipient -> recipient.getRegistered() != RecipientDatabase.RegisteredState.NOT_REGISTERED) + .filter(recipient -> recipient.getRegistered() != RecipientTable.RegisteredState.NOT_REGISTERED) .map(Recipient::getId) .collect(Collectors.toSet()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java index be2d2dcb8..28b7b32c7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java @@ -10,11 +10,11 @@ import com.annimon.stream.Stream; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; -import org.thoughtcrime.securesms.database.MessageDatabase; -import org.thoughtcrime.securesms.database.MessageDatabase.SyncMessageId; +import org.thoughtcrime.securesms.database.MessageTable; +import org.thoughtcrime.securesms.database.MessageTable.SyncMessageId; import org.thoughtcrime.securesms.database.NoSuchMessageException; -import org.thoughtcrime.securesms.database.PaymentDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase.UnidentifiedAccessMode; +import org.thoughtcrime.securesms.database.PaymentTable; +import org.thoughtcrime.securesms.database.RecipientTable.UnidentifiedAccessMode; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.database.model.MessageRecord; @@ -83,8 +83,8 @@ public class PushMediaSendJob extends PushSendJob { throw new AssertionError("No ServiceId!"); } - MessageDatabase database = SignalDatabase.mms(); - OutgoingMediaMessage message = database.getOutgoingMessage(messageId); + MessageTable database = SignalDatabase.mms(); + OutgoingMediaMessage message = database.getOutgoingMessage(messageId); Set attachmentUploadIds = enqueueCompressingAndUploadAttachmentsChains(jobManager, message); jobManager.add(new PushMediaSendJob(messageId, recipient, attachmentUploadIds.size() > 0), attachmentUploadIds, recipient.getId().toQueueKey()); @@ -116,7 +116,7 @@ public class PushMediaSendJob extends PushSendJob { throws IOException, MmsException, NoSuchMessageException, UndeliverableMessageException, RetryLaterException { ExpiringMessageManager expirationManager = ApplicationDependencies.getExpiringMessageManager(); - MessageDatabase database = SignalDatabase.mms(); + MessageTable database = SignalDatabase.mms(); OutgoingMediaMessage message = database.getOutgoingMessage(messageId); long threadId = database.getMessageRecord(messageId).getThreadId(); @@ -286,8 +286,8 @@ public class PushMediaSendJob extends PushSendJob { private SignalServiceDataMessage.Payment getPayment(OutgoingMediaMessage message) { if (message.isPaymentsNotification()) { - UUID paymentUuid = UuidUtil.parseOrThrow(message.getBody()); - PaymentDatabase.PaymentTransaction payment = SignalDatabase.payments().getPayment(paymentUuid); + UUID paymentUuid = UuidUtil.parseOrThrow(message.getBody()); + PaymentTable.PaymentTransaction payment = SignalDatabase.payments().getPayment(paymentUuid); if (payment == null) { Log.w(TAG, "Could not find payment, cannot send notification " + paymentUuid); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushTextSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushTextSendJob.java index a18b1ef4b..616a5bf2b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushTextSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushTextSendJob.java @@ -4,10 +4,10 @@ import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; -import org.thoughtcrime.securesms.database.MessageDatabase; -import org.thoughtcrime.securesms.database.MessageDatabase.SyncMessageId; +import org.thoughtcrime.securesms.database.MessageTable; +import org.thoughtcrime.securesms.database.MessageTable.SyncMessageId; import org.thoughtcrime.securesms.database.NoSuchMessageException; -import org.thoughtcrime.securesms.database.RecipientDatabase.UnidentifiedAccessMode; +import org.thoughtcrime.securesms.database.RecipientTable.UnidentifiedAccessMode; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.database.model.SmsMessageRecord; @@ -78,7 +78,7 @@ public class PushTextSendJob extends PushSendJob { SignalLocalMetrics.IndividualMessageSend.onJobStarted(messageId); ExpiringMessageManager expirationManager = ApplicationDependencies.getExpiringMessageManager(); - MessageDatabase database = SignalDatabase.sms(); + MessageTable database = SignalDatabase.sms(); SmsMessageRecord record = database.getSmsMessage(messageId); if (!record.isPending() && !record.isFailed()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java index 01131cd28..c81d2d193 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java @@ -7,7 +7,7 @@ import androidx.annotation.WorkerThread; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.NoSuchMessageException; -import org.thoughtcrime.securesms.database.ReactionDatabase; +import org.thoughtcrime.securesms.database.ReactionTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.database.model.MessageRecord; @@ -138,7 +138,7 @@ public class ReactionSendJob extends BaseJob { throw new NotPushRegisteredException(); } - ReactionDatabase reactionDatabase = SignalDatabase.reactions(); + ReactionTable reactionTable = SignalDatabase.reactions(); MessageRecord message; @@ -155,12 +155,12 @@ public class ReactionSendJob extends BaseJob { return; } - if (!remove && !reactionDatabase.hasReaction(messageId, reaction)) { + if (!remove && !reactionTable.hasReaction(messageId, reaction)) { Log.w(TAG, "Went to add a reaction, but it's no longer present on the message!"); return; } - if (remove && reactionDatabase.hasReaction(messageId, reaction)) { + if (remove && reactionTable.hasReaction(messageId, reaction)) { Log.w(TAG, "Went to remove a reaction, but it's still there!"); return; } @@ -209,14 +209,14 @@ public class ReactionSendJob extends BaseJob { Log.w(TAG, "Failed to send the reaction to all recipients!"); - ReactionDatabase reactionDatabase = SignalDatabase.reactions(); + ReactionTable reactionTable = SignalDatabase.reactions(); - if (remove && !reactionDatabase.hasReaction(messageId, reaction)) { + if (remove && !reactionTable.hasReaction(messageId, reaction)) { Log.w(TAG, "Reaction removal failed, so adding the reaction back."); - reactionDatabase.addReaction(messageId, reaction); - } else if (!remove && reactionDatabase.hasReaction(messageId, reaction)){ + reactionTable.addReaction(messageId, reaction); + } else if (!remove && reactionTable.hasReaction(messageId, reaction)){ Log.w(TAG, "Reaction addition failed, so removing the reaction."); - reactionDatabase.deleteReaction(messageId, reaction.getAuthor()); + reactionTable.deleteReaction(messageId, reaction.getAuthor()); } else { Log.w(TAG, "Reaction state didn't match what we'd expect to revert it, so we're just leaving it alone."); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshOwnProfileJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshOwnProfileJob.java index 13025db2d..9dfdac71b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshOwnProfileJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshOwnProfileJob.java @@ -12,7 +12,7 @@ import org.thoughtcrime.securesms.badges.BadgeRepository; import org.thoughtcrime.securesms.badges.Badges; import org.thoughtcrime.securesms.badges.models.Badge; import org.thoughtcrime.securesms.crypto.ProfileKeyUtil; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; @@ -151,8 +151,8 @@ public class RefreshOwnProfileJob extends BaseJob { @NonNull ProfileKey recipientProfileKey, @NonNull ExpiringProfileKeyCredential credential) { - RecipientDatabase recipientDatabase = SignalDatabase.recipients(); - recipientDatabase.setProfileKeyCredential(recipient.getId(), recipientProfileKey, credential); + RecipientTable recipientTable = SignalDatabase.recipients(); + recipientTable.setProfileKeyCredential(recipient.getId(), recipientProfileKey, credential); } private static SignalServiceProfile.RequestType getRequestType(@NonNull Recipient recipient) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java index 0fafe2e10..3e776acc7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java @@ -8,7 +8,7 @@ import com.annimon.stream.Stream; import org.signal.core.util.SetUtil; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.MessageDatabase; +import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.NoSuchMessageException; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.DistributionListId; @@ -135,8 +135,8 @@ public class RemoteDeleteSendJob extends BaseJob { throw new NotPushRegisteredException(); } - MessageDatabase db; - MessageRecord message; + MessageTable db; + MessageRecord message; if (isMms) { db = SignalDatabase.mms(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReportSpamJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReportSpamJob.java index 81e299f5a..1ae9fe003 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReportSpamJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReportSpamJob.java @@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.MessageDatabase.ReportSpamData; +import org.thoughtcrime.securesms.database.MessageTable.ReportSpamData; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupV2InfoWorkerJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupV2InfoWorkerJob.java index 97c92e767..79c6a3b7c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupV2InfoWorkerJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupV2InfoWorkerJob.java @@ -4,7 +4,7 @@ import androidx.annotation.NonNull; import androidx.annotation.WorkerThread; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.groups.GroupChangeBusyException; import org.thoughtcrime.securesms.groups.GroupId; @@ -76,7 +76,7 @@ final class RequestGroupV2InfoWorkerJob extends BaseJob { Log.i(TAG, "Updating group to revision " + toRevision); } - Optional group = SignalDatabase.groups().getGroup(groupId); + Optional group = SignalDatabase.groups().getGroup(groupId); if (!group.isPresent()) { Log.w(TAG, "Group not found"); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ResendMessageJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ResendMessageJob.java index a8bf883f7..49c86acd4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ResendMessageJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ResendMessageJob.java @@ -11,7 +11,7 @@ import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.SignalProtocolAddress; import org.signal.libsignal.protocol.message.SenderKeyDistributionMessage; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; -import org.thoughtcrime.securesms.database.GroupDatabase.GroupRecord; +import org.thoughtcrime.securesms.database.GroupTable.GroupRecord; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.DistributionListRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java index 5f3431f93..1078c7a34 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java @@ -8,7 +8,7 @@ import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; import org.signal.libsignal.zkgroup.profiles.ProfileKey; import org.thoughtcrime.securesms.crypto.ProfileKeyUtil; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; @@ -72,8 +72,8 @@ public class RetrieveProfileAvatarJob extends BaseJob { @Override public void onRun() throws IOException { - RecipientDatabase database = SignalDatabase.recipients(); - ProfileKey profileKey = ProfileKeyUtil.profileKeyOrNull(recipient.resolve().getProfileKey()); + RecipientTable database = SignalDatabase.recipients(); + ProfileKey profileKey = ProfileKeyUtil.profileKeyOrNull(recipient.resolve().getProfileKey()); if (profileKey == null) { Log.w(TAG, "Recipient profile key is gone!"); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java index 6259706d0..8713fa905 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java @@ -24,9 +24,9 @@ import org.signal.libsignal.zkgroup.profiles.ProfileKey; import org.thoughtcrime.securesms.badges.Badges; import org.thoughtcrime.securesms.badges.models.Badge; import org.thoughtcrime.securesms.crypto.ProfileKeyUtil; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase.UnidentifiedAccessMode; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.RecipientTable; +import org.thoughtcrime.securesms.database.RecipientTable.UnidentifiedAccessMode; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; @@ -121,7 +121,7 @@ public class RetrieveProfileJob extends BaseJob { if (recipient.isSelf()) { return new RefreshOwnProfileJob(); } else if (recipient.isGroup()) { - List recipients = SignalDatabase.groups().getGroupMemberIds(recipient.requireGroupId(), GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); + List recipients = SignalDatabase.groups().getGroupMemberIds(recipient.requireGroupId(), GroupTable.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); return new RetrieveProfileJob(new HashSet<>(recipients)); } else { @@ -146,7 +146,7 @@ public class RetrieveProfileJob extends BaseJob { if (recipient.isSelf()) { includeSelf = true; } else if (recipient.isGroup()) { - List recipients = SignalDatabase.groups().getGroupMembers(recipient.requireGroupId(), GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); + List recipients = SignalDatabase.groups().getGroupMembers(recipient.requireGroupId(), GroupTable.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); combined.addAll(Stream.of(recipients).map(Recipient::getId).toList()); } else { combined.add(recipientId); @@ -186,8 +186,8 @@ public class RetrieveProfileJob extends BaseJob { } SignalExecutors.BOUNDED.execute(() -> { - RecipientDatabase db = SignalDatabase.recipients(); - long current = System.currentTimeMillis(); + RecipientTable db = SignalDatabase.recipients(); + long current = System.currentTimeMillis(); List ids = db.getRecipientsForRoutineProfileFetch(current - TimeUnit.DAYS.toMillis(30), current - TimeUnit.DAYS.toMillis(1), @@ -243,11 +243,11 @@ public class RetrieveProfileJob extends BaseJob { return; } - Stopwatch stopwatch = new Stopwatch("RetrieveProfile"); - RecipientDatabase recipientDatabase = SignalDatabase.recipients(); + Stopwatch stopwatch = new Stopwatch("RetrieveProfile"); + RecipientTable recipientTable = SignalDatabase.recipients(); RecipientUtil.ensureUuidsAreAvailable(context, Stream.of(Recipient.resolvedList(recipientIds)) - .filter(r -> r.getRegistered() != RecipientDatabase.RegisteredState.NOT_REGISTERED) + .filter(r -> r.getRegistered() != RecipientTable.RegisteredState.NOT_REGISTERED) .toList()); List recipients = Recipient.resolvedList(recipientIds); @@ -301,11 +301,11 @@ public class RetrieveProfileJob extends BaseJob { }); }); - recipientDatabase.markProfilesFetched(success, System.currentTimeMillis()); + recipientTable.markProfilesFetched(success, System.currentTimeMillis()); // XXX The service hasn't implemented profiles for PNIs yet, so if using PNP CDS we don't want to mark users without profiles as unregistered. if ((operationState.unregistered.size() > 0 || newlyRegistered.size() > 0) && !FeatureFlags.phoneNumberPrivacy()) { Log.i(TAG, "Marking " + newlyRegistered.size() + " users as registered and " + operationState.unregistered.size() + " users as unregistered."); - recipientDatabase.bulkUpdatedRegisteredStatus(newlyRegistered, operationState.unregistered); + recipientTable.bulkUpdatedRegisteredStatus(newlyRegistered, operationState.unregistered); } stopwatch.split("process"); @@ -377,8 +377,8 @@ public class RetrieveProfileJob extends BaseJob { @NonNull ProfileKey recipientProfileKey, @NonNull ExpiringProfileKeyCredential credential) { - RecipientDatabase recipientDatabase = SignalDatabase.recipients(); - recipientDatabase.setProfileKeyCredential(recipient.getId(), recipientProfileKey, credential); + RecipientTable recipientTable = SignalDatabase.recipients(); + recipientTable.setProfileKeyCredential(recipient.getId(), recipientProfileKey, credential); } private static SignalServiceProfile.RequestType getRequestType(@NonNull Recipient recipient) { @@ -407,18 +407,18 @@ public class RetrieveProfileJob extends BaseJob { } private void setUnidentifiedAccessMode(Recipient recipient, String unidentifiedAccessVerifier, boolean unrestrictedUnidentifiedAccess) { - RecipientDatabase recipientDatabase = SignalDatabase.recipients(); - ProfileKey profileKey = ProfileKeyUtil.profileKeyOrNull(recipient.getProfileKey()); + RecipientTable recipientTable = SignalDatabase.recipients(); + ProfileKey profileKey = ProfileKeyUtil.profileKeyOrNull(recipient.getProfileKey()); if (unrestrictedUnidentifiedAccess && unidentifiedAccessVerifier != null) { if (recipient.getUnidentifiedAccessMode() != UnidentifiedAccessMode.UNRESTRICTED) { Log.i(TAG, "Marking recipient UD status as unrestricted."); - recipientDatabase.setUnidentifiedAccessMode(recipient.getId(), UnidentifiedAccessMode.UNRESTRICTED); + recipientTable.setUnidentifiedAccessMode(recipient.getId(), UnidentifiedAccessMode.UNRESTRICTED); } } else if (profileKey == null || unidentifiedAccessVerifier == null) { if (recipient.getUnidentifiedAccessMode() != UnidentifiedAccessMode.DISABLED) { Log.i(TAG, "Marking recipient UD status as disabled."); - recipientDatabase.setUnidentifiedAccessMode(recipient.getId(), UnidentifiedAccessMode.DISABLED); + recipientTable.setUnidentifiedAccessMode(recipient.getId(), UnidentifiedAccessMode.DISABLED); } } else { ProfileCipher profileCipher = new ProfileCipher(profileKey); @@ -435,7 +435,7 @@ public class RetrieveProfileJob extends BaseJob { if (recipient.getUnidentifiedAccessMode() != mode) { Log.i(TAG, "Marking recipient UD status as " + mode.name() + " after verification."); - recipientDatabase.setUnidentifiedAccessMode(recipient.getId(), mode); + recipientTable.setUnidentifiedAccessMode(recipient.getId(), mode); } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob.kt index 5cf3178e3..44b9f6ea4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob.kt @@ -10,8 +10,8 @@ import org.signal.core.util.ThreadUtil import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.BuildConfig import org.thoughtcrime.securesms.conversationlist.model.ConversationFilter -import org.thoughtcrime.securesms.database.MessageDatabase -import org.thoughtcrime.securesms.database.RemoteMegaphoneDatabase +import org.thoughtcrime.securesms.database.MessageTable +import org.thoughtcrime.securesms.database.RemoteMegaphoneTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.RemoteMegaphoneRecord import org.thoughtcrime.securesms.database.model.addButton @@ -203,7 +203,7 @@ class RetrieveRemoteAnnouncementsJob private constructor(private val force: Bool } ThreadUtil.sleep(5) - val insertResult: MessageDatabase.InsertResult? = ReleaseChannel.insertReleaseChannelMessage( + val insertResult: MessageTable.InsertResult? = ReleaseChannel.insertReleaseChannelMessage( recipientId = values.releaseChannelRecipientId!!, body = body, threadId = threadId, @@ -294,7 +294,7 @@ class RetrieveRemoteAnnouncementsJob private constructor(private val force: Bool val megaphonesToDelete = existingMegaphones .filterKeys { !manifestMegaphones.contains(it) } - .filterValues { it.minimumVersion != RemoteMegaphoneDatabase.VERSION_FINISHED } + .filterValues { it.minimumVersion != RemoteMegaphoneTable.VERSION_FINISHED } if (megaphonesToDelete.isNotEmpty()) { Log.i(TAG, "Clearing ${megaphonesToDelete.size} stale megaphones ${megaphonesToDelete.keys}") diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendJob.java index 97b4266a8..710e945eb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendJob.java @@ -10,7 +10,7 @@ import org.thoughtcrime.securesms.TextSecureExpiredException; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; import org.thoughtcrime.securesms.contactshare.Contact; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -56,7 +56,7 @@ public abstract class SendJob extends BaseJob { attachments.addAll(message.getOutgoingQuote().getAttachments()); } - AttachmentDatabase database = SignalDatabase.attachments(); + AttachmentTable database = SignalDatabase.attachments(); for (Attachment attachment : attachments) { database.markAttachmentUploaded(messageId, attachment); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendReadReceiptJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendReadReceiptJob.java index deeca34ab..1f28f16d6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendReadReceiptJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendReadReceiptJob.java @@ -9,7 +9,7 @@ import androidx.annotation.VisibleForTesting; import org.signal.core.util.ListUtil; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; -import org.thoughtcrime.securesms.database.MessageDatabase.MarkedMessageInfo; +import org.thoughtcrime.securesms.database.MessageTable.MarkedMessageInfo; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendViewedReceiptJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendViewedReceiptJob.java index 3907011fa..843f6b490 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendViewedReceiptJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendViewedReceiptJob.java @@ -8,7 +8,7 @@ import androidx.annotation.NonNull; import org.signal.core.util.ListUtil; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; -import org.thoughtcrime.securesms.database.MessageDatabase.MarkedMessageInfo; +import org.thoughtcrime.securesms.database.MessageTable.MarkedMessageInfo; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.database.model.StoryType; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java index 324b3d4b3..38eaa945c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java @@ -16,8 +16,8 @@ import com.google.android.gms.common.api.Status; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.database.MessageDatabase; -import org.thoughtcrime.securesms.database.MessageDatabase.InsertResult; +import org.thoughtcrime.securesms.database.MessageTable; +import org.thoughtcrime.securesms.database.MessageTable.InsertResult; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; @@ -154,7 +154,7 @@ public class SmsReceiveJob extends BaseJob { } private Optional storeMessage(IncomingTextMessage message) throws MigrationPendingException { - MessageDatabase database = SignalDatabase.sms(); + MessageTable database = SignalDatabase.sms(); database.ensureMigration(); if (TextSecurePreferences.getNeedsSqlCipherMigration(context)) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSendJob.java index 4e3f9637f..4a023a528 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSendJob.java @@ -12,7 +12,7 @@ import androidx.annotation.NonNull; import org.signal.core.util.PendingIntentFlags; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.MessageDatabase; +import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.NoSuchMessageException; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.SmsMessageRecord; @@ -80,7 +80,7 @@ public class SmsSendJob extends SendJob { throw new TooManyRetriesException(); } - MessageDatabase database = SignalDatabase.sms(); + MessageTable database = SignalDatabase.sms(); SmsMessageRecord record = database.getSmsMessage(messageId); if (!record.isPending() && !record.isFailed()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSentJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSentJob.java index 334bd5679..177e889ae 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSentJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsSentJob.java @@ -6,7 +6,7 @@ import android.telephony.SmsManager; import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.MessageDatabase; +import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.NoSuchMessageException; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.SmsMessageRecord; @@ -97,7 +97,7 @@ public class SmsSentJob extends BaseJob { private void handleSentResult(long messageId, int result) { try { - MessageDatabase database = SignalDatabase.sms(); + MessageTable database = SignalDatabase.sms(); SmsMessageRecord record = database.getSmsMessage(messageId); switch (result) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerDownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerDownloadJob.java index f695fa438..09cdb1c5b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerDownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerDownloadJob.java @@ -4,7 +4,7 @@ import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.StickerDatabase; +import org.thoughtcrime.securesms.database.StickerTable; import org.thoughtcrime.securesms.database.model.IncomingSticker; import org.thoughtcrime.securesms.database.model.StickerRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; @@ -77,7 +77,7 @@ public class StickerDownloadJob extends BaseJob { @Override protected void onRun() throws Exception { - StickerDatabase db = SignalDatabase.stickers(); + StickerTable db = SignalDatabase.stickers(); StickerRecord stickerRecord = db.getSticker(sticker.getPackId(), sticker.getStickerId(), sticker.isCover()); if (stickerRecord != null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerPackDownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerPackDownloadJob.java index f1fc4e3f2..efbb1fbca 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerPackDownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerPackDownloadJob.java @@ -6,7 +6,7 @@ import androidx.core.util.Preconditions; import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.InvalidMessageException; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.StickerDatabase; +import org.thoughtcrime.securesms.database.StickerTable; import org.thoughtcrime.securesms.database.model.IncomingSticker; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; @@ -113,9 +113,9 @@ public class StickerPackDownloadJob extends BaseJob { } SignalServiceMessageReceiver receiver = ApplicationDependencies.getSignalServiceMessageReceiver(); - JobManager jobManager = ApplicationDependencies.getJobManager(); - StickerDatabase stickerDatabase = SignalDatabase.stickers(); - byte[] packIdBytes = Hex.fromStringCondensed(packId); + JobManager jobManager = ApplicationDependencies.getJobManager(); + StickerTable stickerDatabase = SignalDatabase.stickers(); + byte[] packIdBytes = Hex.fromStringCondensed(packId); byte[] packKeyBytes = Hex.fromStringCondensed(packKey); SignalServiceStickerManifest manifest = receiver.retrieveStickerManifest(packIdBytes, packKeyBytes); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageForcePushJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageForcePushJob.java index bd450e412..96db300eb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageForcePushJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageForcePushJob.java @@ -6,9 +6,9 @@ import com.annimon.stream.Stream; import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.InvalidKeyException; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.UnknownStorageIdDatabase; +import org.thoughtcrime.securesms.database.UnknownStorageIdTable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; @@ -88,16 +88,16 @@ public class StorageForcePushJob extends BaseJob { StorageKey storageServiceKey = SignalStore.storageService().getOrCreateStorageKey(); SignalServiceAccountManager accountManager = ApplicationDependencies.getSignalServiceAccountManager(); - RecipientDatabase recipientDatabase = SignalDatabase.recipients(); - UnknownStorageIdDatabase storageIdDatabase = SignalDatabase.unknownStorageIds(); + RecipientTable recipientTable = SignalDatabase.recipients(); + UnknownStorageIdTable storageIdDatabase = SignalDatabase.unknownStorageIds(); long currentVersion = accountManager.getStorageManifestVersion(); - Map oldContactStorageIds = recipientDatabase.getContactStorageSyncIdsMap(); + Map oldContactStorageIds = recipientTable.getContactStorageSyncIdsMap(); long newVersion = currentVersion + 1; Map newContactStorageIds = generateContactStorageIds(oldContactStorageIds); List inserts = Stream.of(oldContactStorageIds.keySet()) - .map(recipientDatabase::getRecordForSync) + .map(recipientTable::getRecordForSync) .withoutNulls() .map(s -> StorageSyncModels.localToRemoteRecord(s, Objects.requireNonNull(newContactStorageIds.get(s.getId())).getRaw())) .toList(); @@ -132,8 +132,8 @@ public class StorageForcePushJob extends BaseJob { Log.i(TAG, "Force push succeeded. Updating local manifest version to: " + newVersion); SignalStore.storageService().setManifest(manifest); - recipientDatabase.applyStorageIdUpdates(newContactStorageIds); - recipientDatabase.applyStorageIdUpdates(Collections.singletonMap(Recipient.self().getId(), accountRecord.getId())); + recipientTable.applyStorageIdUpdates(newContactStorageIds); + recipientTable.applyStorageIdUpdates(Collections.singletonMap(Recipient.self().getId(), accountRecord.getId())); storageIdDatabase.deleteAll(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.java index f83ac253e..27899880d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.java @@ -11,9 +11,9 @@ import net.zetetic.database.sqlcipher.SQLiteDatabase; import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.InvalidKeyException; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.UnknownStorageIdDatabase; +import org.thoughtcrime.securesms.database.UnknownStorageIdTable; import org.thoughtcrime.securesms.database.model.RecipientRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; @@ -131,7 +131,7 @@ import java.util.stream.Collectors; * - Adding the parameter to the builder chain when creating a merged model * - Update builder usage in StorageSyncModels * - Handle the new data when writing to the local storage - * (i.e. {@link RecipientDatabase#applyStorageSyncContactUpdate(StorageRecordUpdate)}). + * (i.e. {@link RecipientTable#applyStorageSyncContactUpdate(StorageRecordUpdate)}). * - Make sure that whenever you change the field in the UI, we rotate the storageId for that row * and call {@link StorageSyncHelper#scheduleSyncForDataChange()}. * - If you're syncing a field that was otherwise already present in the UI, you'll probably want @@ -227,7 +227,7 @@ public class StorageSyncJob extends BaseJob { final Stopwatch stopwatch = new Stopwatch("StorageSync"); final SQLiteDatabase db = SignalDatabase.getRawDatabase(); final SignalServiceAccountManager accountManager = ApplicationDependencies.getSignalServiceAccountManager(); - final UnknownStorageIdDatabase storageIdDatabase = SignalDatabase.unknownStorageIds(); + final UnknownStorageIdTable storageIdDatabase = SignalDatabase.unknownStorageIds(); final StorageKey storageServiceKey = SignalStore.storageService().getOrCreateStorageKey(); final SignalStorageManifest localManifest = SignalStore.storageService().getManifest(); @@ -428,8 +428,8 @@ public class StorageSyncJob extends BaseJob { return Collections.emptyList(); } - RecipientDatabase recipientDatabase = SignalDatabase.recipients(); - UnknownStorageIdDatabase storageIdDatabase = SignalDatabase.unknownStorageIds(); + RecipientTable recipientTable = SignalDatabase.recipients(); + UnknownStorageIdTable storageIdDatabase = SignalDatabase.unknownStorageIds(); List records = new ArrayList<>(ids.size()); @@ -438,9 +438,9 @@ public class StorageSyncJob extends BaseJob { case ManifestRecord.Identifier.Type.CONTACT_VALUE: case ManifestRecord.Identifier.Type.GROUPV1_VALUE: case ManifestRecord.Identifier.Type.GROUPV2_VALUE: - RecipientRecord settings = recipientDatabase.getByStorageId(id.getRaw()); + RecipientRecord settings = recipientTable.getByStorageId(id.getRaw()); if (settings != null) { - if (settings.getGroupType() == RecipientDatabase.GroupType.SIGNAL_V2 && settings.getSyncExtras().getGroupMasterKey() == null) { + if (settings.getGroupType() == RecipientTable.GroupType.SIGNAL_V2 && settings.getSyncExtras().getGroupMasterKey() == null) { throw new MissingGv2MasterKeyError(); } else { records.add(StorageSyncModels.localToRemoteRecord(settings)); @@ -456,7 +456,7 @@ public class StorageSyncJob extends BaseJob { records.add(StorageSyncHelper.buildAccountRecord(context, self)); break; case ManifestRecord.Identifier.Type.STORY_DISTRIBUTION_LIST_VALUE: - RecipientRecord record = recipientDatabase.getByStorageId(id.getRaw()); + RecipientRecord record = recipientTable.getByStorageId(id.getRaw()); if (record != null) { if (record.getDistributionListId() != null) { records.add(StorageSyncModels.localToRemoteRecord(record)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/StoryOnboardingDownloadJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/StoryOnboardingDownloadJob.kt index 4c50190fb..98a122256 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/StoryOnboardingDownloadJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/StoryOnboardingDownloadJob.kt @@ -5,7 +5,7 @@ import com.fasterxml.jackson.core.JsonParseException import org.json.JSONArray import org.json.JSONObject import org.signal.core.util.logging.Log -import org.thoughtcrime.securesms.database.MessageDatabase +import org.thoughtcrime.securesms.database.MessageTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.StoryType import org.thoughtcrime.securesms.dependencies.ApplicationDependencies @@ -125,8 +125,8 @@ class StoryOnboardingDownloadJob private constructor(parameters: Parameters) : B val threadId = SignalDatabase.threads.getOrCreateThreadIdFor(Recipient.resolved(releaseChannelRecipientId)) Log.i(TAG, "Inserting messages...") - val insertResults: List = (0 until candidateArray.length()).mapNotNull { - val insertResult: MessageDatabase.InsertResult? = ReleaseChannel.insertReleaseChannelMessage( + val insertResults: List = (0 until candidateArray.length()).mapNotNull { + val insertResult: MessageTable.InsertResult? = ReleaseChannel.insertReleaseChannelMessage( releaseChannelRecipientId, "", threadId, diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/TrimThreadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/TrimThreadJob.java index 59dcb97f4..560ae596f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/TrimThreadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/TrimThreadJob.java @@ -21,7 +21,7 @@ import androidx.annotation.NonNull; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; @@ -71,10 +71,10 @@ public class TrimThreadJob extends BaseJob { KeepMessagesDuration keepMessagesDuration = SignalStore.settings().getKeepMessagesDuration(); int trimLength = SignalStore.settings().isTrimByLengthEnabled() ? SignalStore.settings().getThreadTrimLength() - : ThreadDatabase.NO_TRIM_MESSAGE_COUNT_SET; + : ThreadTable.NO_TRIM_MESSAGE_COUNT_SET; long trimBeforeDate = keepMessagesDuration != KeepMessagesDuration.FOREVER ? System.currentTimeMillis() - keepMessagesDuration.getDuration() - : ThreadDatabase.NO_TRIM_BEFORE_DATE_SET; + : ThreadTable.NO_TRIM_BEFORE_DATE_SET; SignalDatabase.threads().trimThread(threadId, trimLength, trimBeforeDate); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java index a3f03edc9..3e97efb0a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java @@ -5,7 +5,7 @@ import androidx.annotation.NonNull; import com.annimon.stream.Stream; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.jobmanager.Data; @@ -116,7 +116,7 @@ public class TypingSendJob extends BaseJob { Optional groupId = Optional.empty(); if (recipient.isGroup()) { - recipients = SignalDatabase.groups().getGroupMembers(recipient.requireGroupId(), GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); + recipients = SignalDatabase.groups().getGroupMembers(recipient.requireGroupId(), GroupTable.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); groupId = Optional.of(recipient.requireGroupId().getDecodedId()); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyboard/emoji/search/EmojiSearchRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/keyboard/emoji/search/EmojiSearchRepository.kt index 8a3986cfe..de8eb00d3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyboard/emoji/search/EmojiSearchRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyboard/emoji/search/EmojiSearchRepository.kt @@ -8,7 +8,7 @@ import org.signal.core.util.concurrent.SignalExecutors import org.thoughtcrime.securesms.components.emoji.Emoji import org.thoughtcrime.securesms.components.emoji.EmojiPageModel import org.thoughtcrime.securesms.components.emoji.RecentEmojiPageModel -import org.thoughtcrime.securesms.database.EmojiSearchDatabase +import org.thoughtcrime.securesms.database.EmojiSearchTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.emoji.EmojiSource import org.thoughtcrime.securesms.util.TextSecurePreferences @@ -22,11 +22,11 @@ private val NOT_PUNCTUATION = "[^\\p{Punct}]".toRegex() class EmojiSearchRepository(private val context: Context) { - private val emojiSearchDatabase: EmojiSearchDatabase = SignalDatabase.emojiSearch + private val emojiSearchTable: EmojiSearchTable = SignalDatabase.emojiSearch fun submitQuery(query: String, limit: Int = EMOJI_SEARCH_LIMIT): Single> { val result = if (query.length >= MINIMUM_INLINE_QUERY_THRESHOLD && NOT_PUNCTUATION.matches(query.substring(query.lastIndex))) { - Single.fromCallable { emojiSearchDatabase.query(query, limit) } + Single.fromCallable { emojiSearchTable.query(query, limit) } } else { Single.just(emptyList()) } @@ -39,7 +39,7 @@ class EmojiSearchRepository(private val context: Context) { consumer.accept(RecentEmojiPageModel(context, TextSecurePreferences.RECENT_STORAGE_KEY)) } else { SignalExecutors.SERIAL.execute { - val emoji: List = emojiSearchDatabase.query(query, limit) + val emoji: List = emojiSearchTable.query(query, limit) val displayEmoji: List = emoji .mapNotNull { canonical -> EmojiSource.latest.canonicalToVariations[canonical] } diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyboard/sticker/StickerKeyboardRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/keyboard/sticker/StickerKeyboardRepository.kt index ad70b2176..91dc72644 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyboard/sticker/StickerKeyboardRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyboard/sticker/StickerKeyboardRepository.kt @@ -3,9 +3,9 @@ package org.thoughtcrime.securesms.keyboard.sticker import android.net.Uri import org.signal.core.util.concurrent.SignalExecutors import org.thoughtcrime.securesms.R -import org.thoughtcrime.securesms.database.StickerDatabase -import org.thoughtcrime.securesms.database.StickerDatabase.StickerPackRecordReader -import org.thoughtcrime.securesms.database.StickerDatabase.StickerRecordReader +import org.thoughtcrime.securesms.database.StickerTable +import org.thoughtcrime.securesms.database.StickerTable.StickerPackRecordReader +import org.thoughtcrime.securesms.database.StickerTable.StickerRecordReader import org.thoughtcrime.securesms.database.model.StickerPackRecord import org.thoughtcrime.securesms.database.model.StickerRecord import java.util.function.Consumer @@ -13,12 +13,12 @@ import java.util.function.Consumer private const val RECENT_LIMIT = 24 private const val RECENT_PACK_ID = "RECENT" -class StickerKeyboardRepository(private val stickerDatabase: StickerDatabase) { +class StickerKeyboardRepository(private val stickerTable: StickerTable) { fun getStickerPacks(consumer: Consumer>) { SignalExecutors.BOUNDED.execute { val packs: MutableList = mutableListOf() - StickerPackRecordReader(stickerDatabase.installedStickerPacks).use { reader -> + StickerPackRecordReader(stickerTable.installedStickerPacks).use { reader -> var pack: StickerPackRecord? = reader.next while (pack != null) { packs += KeyboardStickerPack(packId = pack.packId, title = pack.title.orElse(null), coverUri = pack.cover.uri) @@ -29,7 +29,7 @@ class StickerKeyboardRepository(private val stickerDatabase: StickerDatabase) { val fullPacks: MutableList = packs.map { p -> val stickers: MutableList = mutableListOf() - StickerRecordReader(stickerDatabase.getStickersForPack(p.packId)).use { reader -> + StickerRecordReader(stickerTable.getStickersForPack(p.packId)).use { reader -> var sticker: StickerRecord? = reader.next while (sticker != null) { stickers.add(sticker) @@ -51,7 +51,7 @@ class StickerKeyboardRepository(private val stickerDatabase: StickerDatabase) { private fun getRecentStickerPack(): KeyboardStickerPack { val recentStickers: MutableList = mutableListOf() - StickerRecordReader(stickerDatabase.getRecentlyUsedStickers(RECENT_LIMIT)).use { reader -> + StickerRecordReader(stickerTable.getRecentlyUsedStickers(RECENT_LIMIT)).use { reader -> var recentSticker: StickerRecord? = reader.next while (recentSticker != null) { recentStickers.add(recentSticker) diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyboard/sticker/StickerSearchRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/keyboard/sticker/StickerSearchRepository.kt index 3ede42ea2..fc56298f4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyboard/sticker/StickerSearchRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyboard/sticker/StickerSearchRepository.kt @@ -2,10 +2,10 @@ package org.thoughtcrime.securesms.keyboard.sticker import androidx.annotation.WorkerThread import org.thoughtcrime.securesms.components.emoji.EmojiUtil -import org.thoughtcrime.securesms.database.EmojiSearchDatabase +import org.thoughtcrime.securesms.database.EmojiSearchTable import org.thoughtcrime.securesms.database.SignalDatabase -import org.thoughtcrime.securesms.database.StickerDatabase -import org.thoughtcrime.securesms.database.StickerDatabase.StickerRecordReader +import org.thoughtcrime.securesms.database.StickerTable +import org.thoughtcrime.securesms.database.StickerTable.StickerRecordReader import org.thoughtcrime.securesms.database.model.StickerRecord private const val RECENT_LIMIT = 24 @@ -13,17 +13,17 @@ private const val EMOJI_SEARCH_RESULTS_LIMIT = 20 class StickerSearchRepository { - private val emojiSearchDatabase: EmojiSearchDatabase = SignalDatabase.emojiSearch - private val stickerDatabase: StickerDatabase = SignalDatabase.stickers + private val emojiSearchTable: EmojiSearchTable = SignalDatabase.emojiSearch + private val stickerTable: StickerTable = SignalDatabase.stickers @WorkerThread fun search(query: String): List { if (query.isEmpty()) { - return StickerRecordReader(stickerDatabase.getRecentlyUsedStickers(RECENT_LIMIT)).readAll() + return StickerRecordReader(stickerTable.getRecentlyUsedStickers(RECENT_LIMIT)).readAll() } val maybeEmojiQuery: List = findStickersForEmoji(query) - val searchResults: List = emojiSearchDatabase.query(query, EMOJI_SEARCH_RESULTS_LIMIT) + val searchResults: List = emojiSearchTable.query(query, EMOJI_SEARCH_RESULTS_LIMIT) .map { findStickersForEmoji(it) } .flatten() @@ -36,7 +36,7 @@ class StickerSearchRepository { return EmojiUtil.getAllRepresentations(searchEmoji) .filterNotNull() - .map { candidate -> StickerRecordReader(stickerDatabase.getStickersByEmoji(candidate)).readAll() } + .map { candidate -> StickerRecordReader(stickerTable.getStickersByEmoji(candidate)).readAll() } .flatten() } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewRepository.java b/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewRepository.java index dbe638960..c55324d10 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewRepository.java @@ -22,8 +22,8 @@ import org.signal.storageservice.protos.groups.local.DecryptedGroupJoinInfo; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.attachments.UriAttachment; -import org.thoughtcrime.securesms.database.AttachmentDatabase; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; @@ -282,14 +282,14 @@ public class LinkPreviewRepository { } GroupMasterKey groupMasterKey = groupInviteLinkUrl.getGroupMasterKey(); - GroupId.V2 groupId = GroupId.v2(groupMasterKey); - Optional group = SignalDatabase.groups().getGroup(groupId); + GroupId.V2 groupId = GroupId.v2(groupMasterKey); + Optional group = SignalDatabase.groups().getGroup(groupId); if (group.isPresent()) { Log.i(TAG, "Creating preview for locally available group"); - GroupDatabase.GroupRecord groupRecord = group.get(); - String title = groupRecord.getTitle(); + GroupTable.GroupRecord groupRecord = group.get(); + String title = groupRecord.getTitle(); int memberCount = groupRecord.getMembers().size(); String description = getMemberCountDescription(context, memberCount); Optional thumbnail = Optional.empty(); @@ -367,7 +367,7 @@ public class LinkPreviewRepository { return new UriAttachment(uri, contentType, - AttachmentDatabase.TRANSFER_PROGRESS_STARTED, + AttachmentTable.TRANSFER_PROGRESS_STARTED, bytes.length, width, height, diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionCapabilities.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionCapabilities.java index acec125f5..cf9ebcc3f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionCapabilities.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionCapabilities.java @@ -5,7 +5,6 @@ import android.content.Context; import androidx.annotation.NonNull; import org.thoughtcrime.securesms.AppCapabilities; -import org.thoughtcrime.securesms.database.RecipientDatabase; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.RecipientRecord; import org.thoughtcrime.securesms.keyvalue.SignalStore; diff --git a/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageRepository.java b/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageRepository.java index 3fd6b9d02..5e510dca0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageRepository.java @@ -11,10 +11,10 @@ import org.signal.core.util.StreamUtil; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.conversation.ConversationMessage.ConversationMessageFactory; -import org.thoughtcrime.securesms.database.MessageDatabase; -import org.thoughtcrime.securesms.database.MmsDatabase; +import org.thoughtcrime.securesms.database.MessageTable; +import org.thoughtcrime.securesms.database.MmsTable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.SmsDatabase; +import org.thoughtcrime.securesms.database.SmsTable; import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.MmsMessageRecord; import org.thoughtcrime.securesms.mms.PartAuthority; @@ -28,8 +28,8 @@ class LongMessageRepository { private final static String TAG = Log.tag(LongMessageRepository.class); - private final MessageDatabase mmsDatabase; - private final MessageDatabase smsDatabase; + private final MessageTable mmsDatabase; + private final MessageTable smsDatabase; LongMessageRepository() { this.mmsDatabase = SignalDatabase.mms(); @@ -47,7 +47,7 @@ class LongMessageRepository { } @WorkerThread - private Optional getMmsLongMessage(@NonNull Context context, @NonNull MessageDatabase mmsDatabase, long messageId) { + private Optional getMmsLongMessage(@NonNull Context context, @NonNull MessageTable mmsDatabase, long messageId) { Optional record = getMmsMessage(mmsDatabase, messageId); if (record.isPresent()) { @@ -64,7 +64,7 @@ class LongMessageRepository { } @WorkerThread - private Optional getSmsLongMessage(@NonNull Context context, @NonNull MessageDatabase smsDatabase, long messageId) { + private Optional getSmsLongMessage(@NonNull Context context, @NonNull MessageTable smsDatabase, long messageId) { Optional record = getSmsMessage(smsDatabase, messageId); if (record.isPresent()) { @@ -76,16 +76,16 @@ class LongMessageRepository { @WorkerThread - private Optional getMmsMessage(@NonNull MessageDatabase mmsDatabase, long messageId) { + private Optional getMmsMessage(@NonNull MessageTable mmsDatabase, long messageId) { try (Cursor cursor = mmsDatabase.getMessageCursor(messageId)) { - return Optional.ofNullable((MmsMessageRecord) MmsDatabase.readerFor(cursor).getNext()); + return Optional.ofNullable((MmsMessageRecord) MmsTable.readerFor(cursor).getNext()); } } @WorkerThread - private Optional getSmsMessage(@NonNull MessageDatabase smsDatabase, long messageId) { + private Optional getSmsMessage(@NonNull MessageTable smsDatabase, long messageId) { try (Cursor cursor = smsDatabase.getMessageCursor(messageId)) { - return Optional.ofNullable(SmsDatabase.readerFor(cursor).getNext()); + return Optional.ofNullable(SmsTable.readerFor(cursor).getNext()); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaActions.java b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaActions.java index 78f1ac4be..5608d8927 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaActions.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaActions.java @@ -12,7 +12,7 @@ import androidx.fragment.app.Fragment; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.database.MediaDatabase; +import org.thoughtcrime.securesms.database.MediaTable; import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.util.AttachmentUtil; import org.thoughtcrime.securesms.util.SaveAttachmentTask; @@ -29,7 +29,7 @@ final class MediaActions { } static void handleSaveMedia(@NonNull Fragment fragment, - @NonNull Collection mediaRecords, + @NonNull Collection mediaRecords, @Nullable Runnable postExecute) { Context context = fragment.requireContext(); @@ -49,7 +49,7 @@ final class MediaActions { } static void handleDeleteMedia(@NonNull Context context, - @NonNull Collection mediaRecords) + @NonNull Collection mediaRecords) { int recordCount = mediaRecords.size(); Resources res = context.getResources(); @@ -65,29 +65,29 @@ final class MediaActions { .setCancelable(true); builder.setPositiveButton(R.string.delete, (dialogInterface, i) -> - new ProgressDialogAsyncTask(context, - R.string.MediaOverviewActivity_Media_delete_progress_title, - R.string.MediaOverviewActivity_Media_delete_progress_message) + new ProgressDialogAsyncTask(context, + R.string.MediaOverviewActivity_Media_delete_progress_title, + R.string.MediaOverviewActivity_Media_delete_progress_message) { @Override - protected Void doInBackground(MediaDatabase.MediaRecord... records) { + protected Void doInBackground(MediaTable.MediaRecord... records) { if (records == null || records.length == 0) { return null; } - for (MediaDatabase.MediaRecord record : records) { + for (MediaTable.MediaRecord record : records) { AttachmentUtil.deleteAttachment(context, record.getAttachment()); } return null; } - }.execute(mediaRecords.toArray(new MediaDatabase.MediaRecord[0])) + }.execute(mediaRecords.toArray(new MediaTable.MediaRecord[0])) ); builder.setNegativeButton(android.R.string.cancel, null); builder.show(); } - private static void performSaveToDisk(@NonNull Context context, @NonNull Collection mediaRecords, @Nullable Runnable postExecute) { + private static void performSaveToDisk(@NonNull Context context, @NonNull Collection mediaRecords, @Nullable Runnable postExecute) { new ProgressDialogAsyncTask>(context, R.string.MediaOverviewActivity_collecting_attachments, R.string.please_wait) @@ -96,7 +96,7 @@ final class MediaActions { protected List doInBackground(Void... params) { List attachments = new LinkedList<>(); - for (MediaDatabase.MediaRecord mediaRecord : mediaRecords) { + for (MediaTable.MediaRecord mediaRecord : mediaRecords) { if (mediaRecord.getAttachment().getUri() != null) { attachments.add(new SaveAttachmentTask.Attachment(mediaRecord.getAttachment().getUri(), mediaRecord.getContentType(), diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaGalleryAllAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaGalleryAllAdapter.java index 0e26d7851..e04f12cd7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaGalleryAllAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaGalleryAllAdapter.java @@ -40,8 +40,8 @@ import org.thoughtcrime.securesms.attachments.AttachmentId; import org.thoughtcrime.securesms.components.AudioView; import org.thoughtcrime.securesms.components.ThumbnailView; import org.thoughtcrime.securesms.components.voice.VoiceNotePlaybackState; -import org.thoughtcrime.securesms.database.MediaDatabase; -import org.thoughtcrime.securesms.database.MediaDatabase.MediaRecord; +import org.thoughtcrime.securesms.database.MediaTable; +import org.thoughtcrime.securesms.database.MediaTable.MediaRecord; import org.thoughtcrime.securesms.database.loaders.GroupedThreadMediaLoader.GroupedThreadMedia; import org.thoughtcrime.securesms.mms.AudioSlide; import org.thoughtcrime.securesms.mms.GlideRequests; @@ -142,8 +142,8 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { @Override public int getSectionItemViewType(int section, int offset) { - MediaDatabase.MediaRecord mediaRecord = media.get(section, offset); - Slide slide = MediaUtil.getSlideForAttachment(context, mediaRecord.getAttachment()); + MediaTable.MediaRecord mediaRecord = media.get(section, offset); + Slide slide = MediaUtil.getSlideForAttachment(context, mediaRecord.getAttachment()); if (slide.hasAudio()) return AUDIO_DETAIL; if (slide.hasImage() || slide.hasVideo()) return detailView ? GALLERY_DETAIL : GALLERY; @@ -169,8 +169,8 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { @Override public void onBindItemViewHolder(ItemViewHolder viewHolder, int section, int offset) { - MediaDatabase.MediaRecord mediaRecord = media.get(section, offset); - Slide slide = MediaUtil.getSlideForAttachment(context, mediaRecord.getAttachment()); + MediaTable.MediaRecord mediaRecord = media.get(section, offset); + Slide slide = MediaUtil.getSlideForAttachment(context, mediaRecord.getAttachment()); ((SelectableViewHolder) viewHolder).bind(context, mediaRecord, slide); } @@ -194,8 +194,8 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { } public void toggleSelection(@NonNull MediaRecord mediaRecord) { - AttachmentId attachmentId = mediaRecord.getAttachment().getAttachmentId(); - MediaDatabase.MediaRecord removed = selected.remove(attachmentId); + AttachmentId attachmentId = mediaRecord.getAttachment().getAttachmentId(); + MediaTable.MediaRecord removed = selected.remove(attachmentId); if (removed == null) { selected.put(attachmentId, mediaRecord); } @@ -247,15 +247,15 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { protected final View selectedIndicator; - private MediaDatabase.MediaRecord mediaRecord; - private boolean bound; + private MediaTable.MediaRecord mediaRecord; + private boolean bound; SelectableViewHolder(@NonNull View itemView) { super(itemView); this.selectedIndicator = itemView.findViewById(R.id.selected_indicator); } - public void bind(@NonNull Context context, @NonNull MediaDatabase.MediaRecord mediaRecord, @NonNull Slide slide) { + public void bind(@NonNull Context context, @NonNull MediaTable.MediaRecord mediaRecord, @NonNull Slide slide) { if (bound) { unbind(); } @@ -314,7 +314,7 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { } @Override - public void bind(@NonNull Context context, @NonNull MediaDatabase.MediaRecord mediaRecord, @NonNull Slide slide) { + public void bind(@NonNull Context context, @NonNull MediaTable.MediaRecord mediaRecord, @NonNull Slide slide) { super.bind(context, mediaRecord, slide); if (showFileSizes | detailView) { @@ -377,7 +377,7 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { } @Override - public void bind(@NonNull Context context, @NonNull MediaDatabase.MediaRecord mediaRecord, @NonNull Slide slide) { + public void bind(@NonNull Context context, @NonNull MediaTable.MediaRecord mediaRecord, @NonNull Slide slide) { super.bind(context, mediaRecord, slide); fileName = slide.getFileName(); @@ -406,7 +406,7 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { super.unbind(); } - private String getLine2(@NonNull Context context, @NonNull MediaDatabase.MediaRecord mediaRecord, @NonNull Slide slide) { + private String getLine2(@NonNull Context context, @NonNull MediaTable.MediaRecord mediaRecord, @NonNull Slide slide) { return context.getString(R.string.MediaOverviewActivity_detail_line_3_part, Util.getPrettyFileSize(slide.getFileSize()), getFileTypeDescription(context, slide), @@ -474,7 +474,7 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { } @Override - public void bind(@NonNull Context context, @NonNull MediaDatabase.MediaRecord mediaRecord, @NonNull Slide slide) { + public void bind(@NonNull Context context, @NonNull MediaTable.MediaRecord mediaRecord, @NonNull Slide slide) { super.bind(context, mediaRecord, slide); documentType.setText(slide.getFileType(context).orElse("").toLowerCase()); @@ -493,7 +493,7 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { } @Override - public void bind(@NonNull Context context, @NonNull MediaDatabase.MediaRecord mediaRecord, @NonNull Slide slide) { + public void bind(@NonNull Context context, @NonNull MediaTable.MediaRecord mediaRecord, @NonNull Slide slide) { if (!slide.hasAudio()) { throw new AssertionError(); } @@ -539,7 +539,7 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { } @Override - public void bind(@NonNull Context context, @NonNull MediaDatabase.MediaRecord mediaRecord, @NonNull Slide slide) { + public void bind(@NonNull Context context, @NonNull MediaTable.MediaRecord mediaRecord, @NonNull Slide slide) { super.bind(context, mediaRecord, slide); thumbnailView.setImageResource(glideRequests, slide, false, false); @@ -601,9 +601,9 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { } interface ItemClickListener { - void onMediaClicked(@NonNull MediaDatabase.MediaRecord mediaRecord); + void onMediaClicked(@NonNull MediaTable.MediaRecord mediaRecord); - void onMediaLongClicked(MediaDatabase.MediaRecord mediaRecord); + void onMediaLongClicked(MediaTable.MediaRecord mediaRecord); } interface AudioItemListener { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewActivity.java b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewActivity.java index fb69b607a..897dd8c15 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewActivity.java @@ -41,8 +41,8 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.AnimatingToggle; import org.thoughtcrime.securesms.components.BoldSelectionTabItem; import org.thoughtcrime.securesms.components.ControllableTabLayout; -import org.thoughtcrime.securesms.database.MediaDatabase; -import org.thoughtcrime.securesms.database.MediaDatabase.Sorting; +import org.thoughtcrime.securesms.database.MediaTable; +import org.thoughtcrime.securesms.database.MediaTable.Sorting; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.loaders.MediaLoader; import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme; @@ -81,7 +81,7 @@ public final class MediaOverviewActivity extends PassphraseRequiredActivity { } public static Intent forAll(@NonNull Context context) { - return forThread(context, MediaDatabase.ALL_THREADS); + return forThread(context, MediaTable.ALL_THREADS); } @Override @@ -96,7 +96,7 @@ public final class MediaOverviewActivity extends PassphraseRequiredActivity { initializeResources(); initializeToolbar(); - boolean allThreads = threadId == MediaDatabase.ALL_THREADS; + boolean allThreads = threadId == MediaTable.ALL_THREADS; BoldSelectionTabItem.registerListeners(tabLayout); fillTabLayoutIfFits(tabLayout); @@ -196,7 +196,7 @@ public final class MediaOverviewActivity extends PassphraseRequiredActivity { setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); - if (threadId == MediaDatabase.ALL_THREADS) { + if (threadId == MediaTable.ALL_THREADS) { getSupportActionBar().setTitle(R.string.MediaOverviewActivity_All_storage_use); } else { SimpleTask.run(() -> SignalDatabase.threads().getRecipientForThreadId(threadId), diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewPageFragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewPageFragment.java index 39e7e30f0..5ca8ed3ae 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewPageFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewPageFragment.java @@ -34,7 +34,7 @@ import org.thoughtcrime.securesms.components.menu.ActionItem; import org.thoughtcrime.securesms.components.menu.SignalBottomActionBar; import org.thoughtcrime.securesms.components.voice.VoiceNoteMediaController; import org.thoughtcrime.securesms.components.voice.VoiceNotePlaybackState; -import org.thoughtcrime.securesms.database.MediaDatabase; +import org.thoughtcrime.securesms.database.MediaTable; import org.thoughtcrime.securesms.database.loaders.GroupedThreadMediaLoader; import org.thoughtcrime.securesms.database.loaders.MediaLoader; import org.thoughtcrime.securesms.mediapreview.MediaIntentFactory; @@ -60,9 +60,9 @@ public final class MediaOverviewPageFragment extends Fragment private static final String MEDIA_TYPE_EXTRA = "media_type"; private static final String GRID_MODE = "grid_mode"; - private final ActionModeCallback actionModeCallback = new ActionModeCallback(); - private MediaDatabase.Sorting sorting = MediaDatabase.Sorting.Newest; - private MediaLoader.MediaType mediaType = MediaLoader.MediaType.GALLERY; + private final ActionModeCallback actionModeCallback = new ActionModeCallback(); + private MediaTable.Sorting sorting = MediaTable.Sorting.Newest; + private MediaLoader.MediaType mediaType = MediaLoader.MediaType.GALLERY; private long threadId; private TextView noMedia; private RecyclerView recyclerView; @@ -127,7 +127,7 @@ public final class MediaOverviewPageFragment extends Fragment this, this, sorting.isRelatedToFileSize(), - threadId == MediaDatabase.ALL_THREADS); + threadId == MediaTable.ALL_THREADS); this.recyclerView.setAdapter(adapter); this.recyclerView.setLayoutManager(gridManager); this.recyclerView.setHasFixedSize(true); @@ -196,7 +196,7 @@ public final class MediaOverviewPageFragment extends Fragment } @Override - public void onMediaClicked(@NonNull MediaDatabase.MediaRecord mediaRecord) { + public void onMediaClicked(@NonNull MediaTable.MediaRecord mediaRecord) { if (actionMode != null) { handleMediaMultiSelectClick(mediaRecord); } else { @@ -213,7 +213,7 @@ public final class MediaOverviewPageFragment extends Fragment } } - private void handleMediaMultiSelectClick(@NonNull MediaDatabase.MediaRecord mediaRecord) { + private void handleMediaMultiSelectClick(@NonNull MediaTable.MediaRecord mediaRecord) { MediaGalleryAllAdapter adapter = getListAdapter(); adapter.toggleSelection(mediaRecord); @@ -224,7 +224,7 @@ public final class MediaOverviewPageFragment extends Fragment } } - private void handleMediaPreviewClick(@NonNull MediaDatabase.MediaRecord mediaRecord) { + private void handleMediaPreviewClick(@NonNull MediaTable.MediaRecord mediaRecord) { if (mediaRecord.getAttachment().getUri() == null) { return; } @@ -246,7 +246,7 @@ public final class MediaOverviewPageFragment extends Fragment mediaRecord.getAttachment().getCaption(), true, true, - threadId == MediaDatabase.ALL_THREADS, + threadId == MediaTable.ALL_THREADS, true, sorting, attachment.isVideoGif()); @@ -258,7 +258,7 @@ public final class MediaOverviewPageFragment extends Fragment } } - private static void showFileExternally(@NonNull Context context, @NonNull MediaDatabase.MediaRecord mediaRecord) { + private static void showFileExternally(@NonNull Context context, @NonNull MediaTable.MediaRecord mediaRecord) { Uri uri = mediaRecord.getAttachment().getUri(); Intent intent = new Intent(Intent.ACTION_VIEW); @@ -273,7 +273,7 @@ public final class MediaOverviewPageFragment extends Fragment } @Override - public void onMediaLongClicked(MediaDatabase.MediaRecord mediaRecord) { + public void onMediaLongClicked(MediaTable.MediaRecord mediaRecord) { if (actionMode == null) { enterMultiSelect(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewViewModel.java index 659a08750..94dac8e5d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewViewModel.java @@ -9,7 +9,7 @@ import androidx.lifecycle.SavedStateViewModelFactory; import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModelProvider; -import org.thoughtcrime.securesms.database.MediaDatabase.Sorting; +import org.thoughtcrime.securesms.database.MediaTable.Sorting; public class MediaOverviewViewModel extends ViewModel { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaIntentFactory.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaIntentFactory.kt index d97ded2de..ad920519d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaIntentFactory.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaIntentFactory.kt @@ -7,8 +7,8 @@ import android.os.Bundle import android.os.Parcelable import kotlinx.parcelize.Parcelize import org.thoughtcrime.securesms.attachments.DatabaseAttachment -import org.thoughtcrime.securesms.database.MediaDatabase -import org.thoughtcrime.securesms.database.MediaDatabase.MediaRecord +import org.thoughtcrime.securesms.database.MediaTable +import org.thoughtcrime.securesms.database.MediaTable.MediaRecord object MediaIntentFactory { private const val ARGS_KEY = "args" @@ -37,7 +37,7 @@ object MediaIntentFactory { val hideAllMedia: Boolean = false, val showThread: Boolean = false, val allMediaInRail: Boolean = false, - val sorting: MediaDatabase.Sorting, + val sorting: MediaTable.Sorting, val isVideoGif: Boolean ) : Parcelable @@ -67,7 +67,7 @@ object MediaIntentFactory { attachment.caption, leftIsRecent, allMediaInRail = allMediaInRail, - sorting = MediaDatabase.Sorting.Newest, + sorting = MediaTable.Sorting.Newest, isVideoGif = attachment.isVideoGif ) ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewRepository.kt index 0951a564d..809fe22b0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewRepository.kt @@ -12,9 +12,9 @@ import org.signal.core.util.requireLong import org.thoughtcrime.securesms.attachments.AttachmentId import org.thoughtcrime.securesms.attachments.DatabaseAttachment import org.thoughtcrime.securesms.conversation.ConversationIntents -import org.thoughtcrime.securesms.database.AttachmentDatabase -import org.thoughtcrime.securesms.database.MediaDatabase -import org.thoughtcrime.securesms.database.MediaDatabase.Sorting +import org.thoughtcrime.securesms.database.AttachmentTable +import org.thoughtcrime.securesms.database.MediaTable +import org.thoughtcrime.securesms.database.MediaTable.Sorting import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.SignalDatabase.Companion.media import org.thoughtcrime.securesms.sms.MessageSender @@ -38,11 +38,11 @@ class MediaPreviewRepository { fun getAttachments(startingAttachmentId: AttachmentId, threadId: Long, sorting: Sorting, limit: Int = 500): Flowable { return Single.fromCallable { media.getGalleryMediaForThread(threadId, sorting).use { cursor -> - val mediaRecords = mutableListOf() + val mediaRecords = mutableListOf() var startingRow = -1 while (cursor.moveToNext()) { - if (startingAttachmentId.rowId == cursor.requireLong(AttachmentDatabase.ROW_ID) && - startingAttachmentId.uniqueId == cursor.requireLong(AttachmentDatabase.UNIQUE_ID) + if (startingAttachmentId.rowId == cursor.requireLong(AttachmentTable.ROW_ID) && + startingAttachmentId.uniqueId == cursor.requireLong(AttachmentTable.UNIQUE_ID) ) { startingRow = cursor.position break @@ -59,7 +59,7 @@ class MediaPreviewRepository { cursor.moveToPosition(windowStart) for (i in 0..limit) { - val element = MediaDatabase.MediaRecord.from(cursor) + val element = MediaTable.MediaRecord.from(cursor) if (element != null) { mediaRecords.add(element) } @@ -97,5 +97,5 @@ class MediaPreviewRepository { .observeOn(AndroidSchedulers.mainThread()) } - data class Result(val initialPosition: Int, val records: List) + data class Result(val initialPosition: Int, val records: List) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Fragment.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Fragment.kt index 777f107c9..fdb8e0c28 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Fragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Fragment.kt @@ -46,7 +46,7 @@ import org.thoughtcrime.securesms.attachments.DatabaseAttachment import org.thoughtcrime.securesms.components.ViewBinderDelegate import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragment import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragmentArgs -import org.thoughtcrime.securesms.database.MediaDatabase +import org.thoughtcrime.securesms.database.MediaTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.databinding.FragmentMediaPreviewV2Binding import org.thoughtcrime.securesms.mediapreview.mediarail.CenterDecoration @@ -122,7 +122,7 @@ class MediaPreviewV2Fragment : Fragment(R.layout.fragment_media_preview_v2), Med }.show() } viewModel.initialize(args.showThread, args.allMediaInRail, args.leftIsRecent) - val sorting = MediaDatabase.Sorting.deserialize(args.sorting.ordinal) + val sorting = MediaTable.Sorting.deserialize(args.sorting.ordinal) viewModel.fetchAttachments(PartAuthority.requireAttachmentId(args.initialMediaUri), args.threadId, sorting) } @@ -213,7 +213,7 @@ class MediaPreviewV2Fragment : Fragment(R.layout.fragment_media_preview_v2), Med } val currentPosition = currentState.position - val currentItem: MediaDatabase.MediaRecord = currentState.mediaRecords[currentPosition] + val currentItem: MediaTable.MediaRecord = currentState.mediaRecords[currentPosition] // pause all other fragments childFragmentManager.fragments.map { fragment -> @@ -235,7 +235,7 @@ class MediaPreviewV2Fragment : Fragment(R.layout.fragment_media_preview_v2), Med crossfadeViewIn(binding.mediaPreviewDetailsContainer) } - private fun bindTextViews(currentItem: MediaDatabase.MediaRecord, showThread: Boolean) { + private fun bindTextViews(currentItem: MediaTable.MediaRecord, showThread: Boolean) { binding.toolbar.title = getTitleText(currentItem, showThread) binding.toolbar.subtitle = getSubTitleText(currentItem) val messageId: Long? = currentItem.attachment?.mmsId @@ -256,7 +256,7 @@ class MediaPreviewV2Fragment : Fragment(R.layout.fragment_media_preview_v2), Med binding.mediaPreviewCaption.visible = caption != null } - private fun bindMenuItems(currentItem: MediaDatabase.MediaRecord) { + private fun bindMenuItems(currentItem: MediaTable.MediaRecord) { val menu: Menu = binding.toolbar.menu if (currentItem.threadId == MediaIntentFactory.NOT_IN_A_THREAD.toLong()) { menu.findItem(R.id.delete).isVisible = false @@ -274,7 +274,7 @@ class MediaPreviewV2Fragment : Fragment(R.layout.fragment_media_preview_v2), Med } } - private fun bindMediaPreviewPlaybackControls(currentItem: MediaDatabase.MediaRecord, currentFragment: MediaPreviewFragment?) { + private fun bindMediaPreviewPlaybackControls(currentItem: MediaTable.MediaRecord, currentFragment: MediaPreviewFragment?) { val mediaType: MediaPreviewPlayerControlView.MediaMode = if (currentItem.attachment?.isVideoGif == true) { MediaPreviewPlayerControlView.MediaMode.IMAGE } else { @@ -293,7 +293,7 @@ class MediaPreviewV2Fragment : Fragment(R.layout.fragment_media_preview_v2), Med currentFragment?.setBottomButtonControls(binding.mediaPreviewPlaybackControls) } - private fun bindAlbumRail(albumThumbnailMedia: List, currentItem: MediaDatabase.MediaRecord) { + private fun bindAlbumRail(albumThumbnailMedia: List, currentItem: MediaTable.MediaRecord) { val albumRail: RecyclerView = binding.mediaPreviewPlaybackControls.recyclerView if (albumThumbnailMedia.size > 1) { val albumPosition = albumThumbnailMedia.indexOfFirst { it.uri == currentItem.attachment?.uri } @@ -357,7 +357,7 @@ class MediaPreviewV2Fragment : Fragment(R.layout.fragment_media_preview_v2), Med binding.mediaPager.setCurrentItem(position, true) } - private fun getTitleText(mediaRecord: MediaDatabase.MediaRecord, showThread: Boolean): String { + private fun getTitleText(mediaRecord: MediaTable.MediaRecord, showThread: Boolean): String { val recipient: Recipient = Recipient.live(mediaRecord.recipientId).get() val defaultFromString: String = if (mediaRecord.isOutgoing) { getString(R.string.MediaPreviewActivity_you) @@ -384,7 +384,7 @@ class MediaPreviewV2Fragment : Fragment(R.layout.fragment_media_preview_v2), Med } } - private fun getSubTitleText(mediaRecord: MediaDatabase.MediaRecord): CharSequence { + private fun getSubTitleText(mediaRecord: MediaTable.MediaRecord): CharSequence { val text = if (mediaRecord.date > 0) { DateUtils.getExtendedRelativeTimeSpanString(requireContext(), Locale.getDefault(), mediaRecord.date) } else { @@ -436,7 +436,7 @@ class MediaPreviewV2Fragment : Fragment(R.layout.fragment_media_preview_v2), Med debouncer.clear() } - private fun forward(mediaItem: MediaDatabase.MediaRecord) { + private fun forward(mediaItem: MediaTable.MediaRecord) { val attachment = mediaItem.attachment val uri = attachment?.uri if (attachment != null && uri != null) { @@ -451,7 +451,7 @@ class MediaPreviewV2Fragment : Fragment(R.layout.fragment_media_preview_v2), Med } } - private fun share(mediaItem: MediaDatabase.MediaRecord) { + private fun share(mediaItem: MediaTable.MediaRecord) { val attachment = mediaItem.attachment val uri = attachment?.uri if (attachment != null && uri != null) { @@ -472,7 +472,7 @@ class MediaPreviewV2Fragment : Fragment(R.layout.fragment_media_preview_v2), Med } } - private fun saveToDisk(mediaItem: MediaDatabase.MediaRecord) { + private fun saveToDisk(mediaItem: MediaTable.MediaRecord) { SaveAttachmentTask.showWarningDialog(requireContext()) { _: DialogInterface?, _: Int -> if (StorageUtil.canWriteToMediaStore()) { performSaveToDisk(mediaItem) @@ -488,7 +488,7 @@ class MediaPreviewV2Fragment : Fragment(R.layout.fragment_media_preview_v2), Med } } - fun performSaveToDisk(mediaItem: MediaDatabase.MediaRecord) { + fun performSaveToDisk(mediaItem: MediaTable.MediaRecord) { val saveTask = SaveAttachmentTask(requireContext()) val saveDate = if (mediaItem.date > 0) mediaItem.date else System.currentTimeMillis() val attachment = mediaItem.attachment @@ -498,7 +498,7 @@ class MediaPreviewV2Fragment : Fragment(R.layout.fragment_media_preview_v2), Med } } - private fun deleteMedia(mediaItem: MediaDatabase.MediaRecord) { + private fun deleteMedia(mediaItem: MediaTable.MediaRecord) { val attachment: DatabaseAttachment = mediaItem.attachment ?: return MaterialAlertDialogBuilder(requireContext()).apply { @@ -547,7 +547,7 @@ class MediaPreviewV2Fragment : Fragment(R.layout.fragment_media_preview_v2), Med return attachmentCount <= 1 && RemoteDeleteUtil.isValidSend(listOf(SignalDatabase.mms.getMessageRecord(mmsId)), System.currentTimeMillis()) } - private fun editMediaItem(currentItem: MediaDatabase.MediaRecord) { + private fun editMediaItem(currentItem: MediaTable.MediaRecord) { val media = currentItem.toMedia() if (media == null) { val rootView = view diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2State.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2State.kt index 43705a6c6..58a82047b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2State.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2State.kt @@ -1,10 +1,10 @@ package org.thoughtcrime.securesms.mediapreview -import org.thoughtcrime.securesms.database.MediaDatabase +import org.thoughtcrime.securesms.database.MediaTable import org.thoughtcrime.securesms.mediasend.Media data class MediaPreviewV2State( - val mediaRecords: List = emptyList(), + val mediaRecords: List = emptyList(), val loadState: LoadState = LoadState.INIT, val position: Int = 0, val showThread: Boolean = false, diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2ViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2ViewModel.kt index 44dba41de..34db6625a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2ViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2ViewModel.kt @@ -13,7 +13,7 @@ import io.reactivex.rxjava3.schedulers.Schedulers import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.attachments.AttachmentId import org.thoughtcrime.securesms.attachments.DatabaseAttachment -import org.thoughtcrime.securesms.database.MediaDatabase +import org.thoughtcrime.securesms.database.MediaTable import org.thoughtcrime.securesms.mediasend.Media import org.thoughtcrime.securesms.util.rx.RxStore import java.util.Optional @@ -26,10 +26,10 @@ class MediaPreviewV2ViewModel : ViewModel() { val state: Flowable = store.stateFlowable.observeOn(AndroidSchedulers.mainThread()) - fun fetchAttachments(startingAttachmentId: AttachmentId, threadId: Long, sorting: MediaDatabase.Sorting, forceRefresh: Boolean = false) { + fun fetchAttachments(startingAttachmentId: AttachmentId, threadId: Long, sorting: MediaTable.Sorting, forceRefresh: Boolean = false) { if (store.state.loadState == MediaPreviewV2State.LoadState.INIT || forceRefresh) { disposables += store.update(repository.getAttachments(startingAttachmentId, threadId, sorting)) { result: MediaPreviewRepository.Result, oldState: MediaPreviewV2State -> - val albums = result.records.fold(mutableMapOf()) { acc: MutableMap>, mediaRecord: MediaDatabase.MediaRecord -> + val albums = result.records.fold(mutableMapOf()) { acc: MutableMap>, mediaRecord: MediaTable.MediaRecord -> val attachment = mediaRecord.attachment if (attachment != null) { val convertedMedia = mediaRecord.toMedia() ?: return@fold acc @@ -100,7 +100,7 @@ class MediaPreviewV2ViewModel : ViewModel() { } } -fun MediaDatabase.MediaRecord.toMedia(): Media? { +fun MediaTable.MediaRecord.toMedia(): Media? { val attachment = this.attachment val uri = attachment?.uri if (attachment == null || uri == null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraContactsRepository.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraContactsRepository.java index ce3e4d7f6..192f12c53 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraContactsRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraContactsRepository.java @@ -11,10 +11,10 @@ import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.contacts.ContactRepository; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.database.model.ThreadRecord; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; @@ -36,19 +36,19 @@ class CameraContactsRepository { private static final int RECENT_MAX = 25; - private final Context context; - private final ThreadDatabase threadDatabase; - private final GroupDatabase groupDatabase; - private final RecipientDatabase recipientDatabase; + private final Context context; + private final ThreadTable threadTable; + private final GroupTable groupDatabase; + private final RecipientTable recipientTable; private final ContactRepository contactRepository; private final Executor serialExecutor; private final ExecutorService parallelExecutor; CameraContactsRepository(@NonNull Context context) { - this.context = context.getApplicationContext(); - this.threadDatabase = SignalDatabase.threads(); - this.groupDatabase = SignalDatabase.groups(); - this.recipientDatabase = SignalDatabase.recipients(); + this.context = context.getApplicationContext(); + this.threadTable = SignalDatabase.threads(); + this.groupDatabase = SignalDatabase.groups(); + this.recipientTable = SignalDatabase.recipients(); this.contactRepository = new ContactRepository(context, context.getString(R.string.note_to_self)); this.serialExecutor = SignalExecutors.SERIAL; this.parallelExecutor = SignalExecutors.BOUNDED; @@ -87,7 +87,7 @@ class CameraContactsRepository { List recipients = new ArrayList<>(RECENT_MAX); - try (ThreadDatabase.Reader threadReader = threadDatabase.readerFor(threadDatabase.getRecentPushConversationList(RECENT_MAX, false))) { + try (ThreadTable.Reader threadReader = threadTable.readerFor(threadTable.getRecentPushConversationList(RECENT_MAX, false))) { ThreadRecord threadRecord; while ((threadRecord = threadReader.getNext()) != null) { recipients.add(threadRecord.getRecipient().resolve()); @@ -120,10 +120,10 @@ class CameraContactsRepository { List recipients = new ArrayList<>(); - try (GroupDatabase.Reader reader = groupDatabase.queryGroupsByTitle(query, false, true, true)) { - GroupDatabase.GroupRecord groupRecord; + try (GroupTable.Reader reader = groupDatabase.queryGroupsByTitle(query, false, true, true)) { + GroupTable.GroupRecord groupRecord; while ((groupRecord = reader.getNext()) != null) { - RecipientId recipientId = recipientDatabase.getOrInsertFromGroupId(groupRecord.getId()); + RecipientId recipientId = recipientTable.getOrInsertFromGroupId(groupRecord.getId()); recipients.add(Recipient.resolved(recipientId)); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/Media.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/Media.java index d7fee7014..e4899cdc4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/Media.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/Media.java @@ -6,7 +6,7 @@ import android.os.Parcelable; import androidx.annotation.NonNull; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.util.MediaUtil; import org.whispersystems.signalservice.api.util.Preconditions; import org.whispersystems.signalservice.internal.util.JsonUtil; @@ -32,8 +32,8 @@ public class Media implements Parcelable { private final boolean videoGif; private Optional bucketId; - private Optional caption; - private Optional transformProperties; + private Optional caption; + private Optional transformProperties; public Media(@NonNull Uri uri, @NonNull String mimeType, @@ -46,7 +46,7 @@ public class Media implements Parcelable { boolean videoGif, Optional bucketId, Optional caption, - Optional transformProperties) + Optional transformProperties) { this.uri = uri; this.mimeType = mimeType; @@ -76,7 +76,7 @@ public class Media implements Parcelable { caption = Optional.ofNullable(in.readString()); try { String json = in.readString(); - transformProperties = json == null ? Optional.empty() : Optional.ofNullable(JsonUtil.fromJson(json, AttachmentDatabase.TransformProperties.class)); + transformProperties = json == null ? Optional.empty() : Optional.ofNullable(JsonUtil.fromJson(json, AttachmentTable.TransformProperties.class)); } catch (IOException e) { throw new AssertionError(e); } @@ -130,7 +130,7 @@ public class Media implements Parcelable { this.caption = Optional.ofNullable(caption); } - public Optional getTransformProperties() { + public Optional getTransformProperties() { return transformProperties; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaUploadRepository.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaUploadRepository.java index 1941e0e93..730a322d2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaUploadRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaUploadRepository.java @@ -12,8 +12,8 @@ import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.attachments.AttachmentId; -import org.thoughtcrime.securesms.database.AttachmentDatabase; -import org.thoughtcrime.securesms.database.AttachmentDatabase.TransformProperties; +import org.thoughtcrime.securesms.database.AttachmentTable; +import org.thoughtcrime.securesms.database.AttachmentTable.TransformProperties; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.JobManager; @@ -165,7 +165,7 @@ public class MediaUploadRepository { @WorkerThread private void updateCaptionsInternal(@NonNull List updatedMedia) { - AttachmentDatabase db = SignalDatabase.attachments(); + AttachmentTable db = SignalDatabase.attachments(); for (Media updated : updatedMedia) { PreUploadResult result = uploadResults.get(updated); diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/SentMediaQualityTransform.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/SentMediaQualityTransform.java index da7be045f..42cd86845 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/SentMediaQualityTransform.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/SentMediaQualityTransform.java @@ -5,14 +5,14 @@ import android.content.Context; import androidx.annotation.NonNull; import androidx.annotation.WorkerThread; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.mms.SentMediaQuality; import java.util.Optional; /** - * Add a {@link SentMediaQuality} value for {@link AttachmentDatabase.TransformProperties#getSentMediaQuality()} on the + * Add a {@link SentMediaQuality} value for {@link AttachmentTable.TransformProperties#getSentMediaQuality()} on the * transformed media. Safe to use in a pipeline with other transforms. */ public final class SentMediaQualityTransform implements MediaTransform { @@ -37,6 +37,6 @@ public final class SentMediaQualityTransform implements MediaTransform { media.isVideoGif(), media.getBucketId(), media.getCaption(), - Optional.of(AttachmentDatabase.TransformProperties.forSentMediaQuality(media.getTransformProperties(), sentMediaQuality))); + Optional.of(AttachmentTable.TransformProperties.forSentMediaQuality(media.getTransformProperties(), sentMediaQuality))); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoTrimTransform.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoTrimTransform.java index bfe1b5015..a2f44f62d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoTrimTransform.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoTrimTransform.java @@ -5,7 +5,7 @@ import android.content.Context; import androidx.annotation.NonNull; import androidx.annotation.WorkerThread; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.mms.SentMediaQuality; import java.util.Optional; @@ -33,6 +33,6 @@ public final class VideoTrimTransform implements MediaTransform { media.isVideoGif(), media.getBucketId(), media.getCaption(), - Optional.of(new AttachmentDatabase.TransformProperties(false, data.durationEdited, data.startTimeUs, data.endTimeUs, SentMediaQuality.STANDARD.getCode()))); + Optional.of(new AttachmentTable.TransformProperties(false, data.durationEdited, data.startTimeUs, data.endTimeUs, SentMediaQuality.STANDARD.getCode()))); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaBuilder.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaBuilder.kt index c18f69457..e9f2e1b3a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaBuilder.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaBuilder.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.mediasend.v2 import android.net.Uri -import org.thoughtcrime.securesms.database.AttachmentDatabase +import org.thoughtcrime.securesms.database.AttachmentTable import org.thoughtcrime.securesms.mediasend.Media import java.util.Optional @@ -18,6 +18,6 @@ object MediaBuilder { videoGif: Boolean = false, bucketId: Optional = Optional.empty(), caption: Optional = Optional.empty(), - transformProperties: Optional = Optional.empty() + transformProperties: Optional = Optional.empty() ) = Media(uri, mimeType, date, width, height, size, duration, borderless, videoGif, bucketId, caption, transformProperties) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt index 089060ae2..f7bf4376c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt @@ -13,9 +13,9 @@ import org.signal.core.util.logging.Log import org.signal.imageeditor.core.model.EditorModel import org.thoughtcrime.securesms.contacts.paged.ContactSearchKey import org.thoughtcrime.securesms.conversation.MessageSendType -import org.thoughtcrime.securesms.database.AttachmentDatabase.TransformProperties +import org.thoughtcrime.securesms.database.AttachmentTable.TransformProperties import org.thoughtcrime.securesms.database.SignalDatabase -import org.thoughtcrime.securesms.database.ThreadDatabase +import org.thoughtcrime.securesms.database.ThreadTable import org.thoughtcrime.securesms.database.model.Mention import org.thoughtcrime.securesms.database.model.StoryType import org.thoughtcrime.securesms.keyvalue.SignalStore @@ -257,7 +257,7 @@ class MediaSelectionRepository(context: Context) { -1, TimeUnit.SECONDS.toMillis(recipient.expiresInSeconds.toLong()), isViewOnce, - ThreadDatabase.DistributionTypes.DEFAULT, + ThreadTable.DistributionTypes.DEFAULT, storyType, null, false, @@ -300,7 +300,7 @@ class MediaSelectionRepository(context: Context) { -1, TimeUnit.SECONDS.toMillis(recipient.expiresInSeconds.toLong()), isViewOnce, - ThreadDatabase.DistributionTypes.DEFAULT, + ThreadTable.DistributionTypes.DEFAULT, storyType, null, false, diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/text/send/TextStoryPostSendRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/text/send/TextStoryPostSendRepository.kt index c957f7cda..46caaf281 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/text/send/TextStoryPostSendRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/text/send/TextStoryPostSendRepository.kt @@ -8,7 +8,7 @@ import org.signal.core.util.ThreadUtil import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.contacts.paged.ContactSearchKey import org.thoughtcrime.securesms.database.SignalDatabase -import org.thoughtcrime.securesms.database.ThreadDatabase +import org.thoughtcrime.securesms.database.ThreadTable import org.thoughtcrime.securesms.database.model.StoryType import org.thoughtcrime.securesms.database.model.databaseprotos.StoryTextPost import org.thoughtcrime.securesms.fonts.TextFont @@ -86,7 +86,7 @@ class TextStoryPostSendRepository { -1, 0, false, - ThreadDatabase.DistributionTypes.DEFAULT, + ThreadTable.DistributionTypes.DEFAULT, storyType.toTextStoryType(), null, false, diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/RemoteMegaphoneRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/megaphone/RemoteMegaphoneRepository.kt index d0c75dc96..d76cb385c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/RemoteMegaphoneRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/RemoteMegaphoneRepository.kt @@ -12,7 +12,7 @@ import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.badges.models.Badge import org.thoughtcrime.securesms.components.settings.app.subscription.InAppDonations import org.thoughtcrime.securesms.components.settings.app.subscription.donate.DonateToSignalActivity -import org.thoughtcrime.securesms.database.RemoteMegaphoneDatabase +import org.thoughtcrime.securesms.database.RemoteMegaphoneTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.RemoteMegaphoneRecord import org.thoughtcrime.securesms.database.model.RemoteMegaphoneRecord.ActionId @@ -34,7 +34,7 @@ object RemoteMegaphoneRepository { private val TAG = Log.tag(RemoteMegaphoneRepository::class.java) - private val db: RemoteMegaphoneDatabase = SignalDatabase.remoteMegaphones + private val db: RemoteMegaphoneTable = SignalDatabase.remoteMegaphones private val context: Application = ApplicationDependencies.getApplication() private val snooze: Action = Action { _, controller, remote -> diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsFragment.java b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsFragment.java index ecb7fab57..9fc4870e6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsFragment.java @@ -15,7 +15,7 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.FullScreenDialogFragment; import org.thoughtcrime.securesms.conversation.colors.Colorizer; import org.thoughtcrime.securesms.conversation.colors.RecyclerViewColorizer; -import org.thoughtcrime.securesms.database.MmsSmsDatabase; +import org.thoughtcrime.securesms.database.MmsSmsTable; import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.giph.mp4.GiphyMp4PlaybackController; import org.thoughtcrime.securesms.giph.mp4.GiphyMp4ProjectionPlayerHolder; @@ -49,7 +49,7 @@ public final class MessageDetailsFragment extends FullScreenDialogFragment { Bundle args = new Bundle(); args.putLong(MESSAGE_ID_EXTRA, message.getId()); - args.putString(TYPE_EXTRA, message.isMms() ? MmsSmsDatabase.MMS_TRANSPORT : MmsSmsDatabase.SMS_TRANSPORT); + args.putString(TYPE_EXTRA, message.isMms() ? MmsSmsTable.MMS_TRANSPORT : MmsSmsTable.SMS_TRANSPORT); args.putParcelable(RECIPIENT_EXTRA, recipientId); dialogFragment.setArguments(args); diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsRepository.java b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsRepository.java index 82b3cb2ef..2b731edb0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsRepository.java @@ -11,9 +11,9 @@ import androidx.lifecycle.MutableLiveData; import org.signal.core.util.concurrent.SignalExecutors; import org.thoughtcrime.securesms.conversation.ConversationMessage.ConversationMessageFactory; import org.thoughtcrime.securesms.database.DatabaseObserver; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.GroupReceiptDatabase; -import org.thoughtcrime.securesms.database.MmsSmsDatabase; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.GroupReceiptTable; +import org.thoughtcrime.securesms.database.MmsSmsTable; import org.thoughtcrime.securesms.database.NoSuchMessageException; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch; @@ -38,7 +38,7 @@ public final class MessageDetailsRepository { private final Context context = ApplicationDependencies.getApplication(); @NonNull LiveData getMessageRecord(String type, Long messageId) { - return new MessageRecordLiveData(new MessageId(messageId, type.equals(MmsSmsDatabase.MMS_TRANSPORT))); + return new MessageRecordLiveData(new MessageId(messageId, type.equals(MmsSmsTable.MMS_TRANSPORT))); } @NonNull LiveData getMessageDetails(@Nullable MessageRecord messageRecord) { @@ -88,10 +88,10 @@ public final class MessageDetailsRepository { getNetworkFailure(messageRecord, messageRecord.getRecipient()), getKeyMismatchFailure(messageRecord, messageRecord.getRecipient()))); } else { - List receiptInfoList = SignalDatabase.groupReceipts().getGroupReceiptInfo(messageRecord.getId()); + List receiptInfoList = SignalDatabase.groupReceipts().getGroupReceiptInfo(messageRecord.getId()); if (receiptInfoList.isEmpty() && messageRecord.getRecipient().isGroup()) { - List group = SignalDatabase.groups().getGroupMembers(messageRecord.getRecipient().requireGroupId(), GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); + List group = SignalDatabase.groups().getGroupMembers(messageRecord.getRecipient().requireGroupId(), GroupTable.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); for (Recipient recipient : group) { recipients.add(new RecipientDeliveryStatus(messageRecord, @@ -117,7 +117,7 @@ public final class MessageDetailsRepository { getKeyMismatchFailure(messageRecord, recipient))); } } else { - for (GroupReceiptDatabase.GroupReceiptInfo info : receiptInfoList) { + for (GroupReceiptTable.GroupReceiptInfo info : receiptInfoList) { Recipient recipient = Recipient.resolved(info.getRecipientId()); NetworkFailure failure = getNetworkFailure(messageRecord, recipient); IdentityKeyMismatch mismatch = getKeyMismatchFailure(messageRecord, recipient); @@ -170,14 +170,14 @@ public final class MessageDetailsRepository { } private @NonNull RecipientDeliveryStatus.Status getStatusFor(int groupStatus, boolean pending, boolean failed) { - if (groupStatus == GroupReceiptDatabase.STATUS_READ) return RecipientDeliveryStatus.Status.READ; - else if (groupStatus == GroupReceiptDatabase.STATUS_DELIVERED) return RecipientDeliveryStatus.Status.DELIVERED; - else if (groupStatus == GroupReceiptDatabase.STATUS_UNDELIVERED && failed) return RecipientDeliveryStatus.Status.UNKNOWN; - else if (groupStatus == GroupReceiptDatabase.STATUS_UNDELIVERED && !pending) return RecipientDeliveryStatus.Status.SENT; - else if (groupStatus == GroupReceiptDatabase.STATUS_UNDELIVERED) return RecipientDeliveryStatus.Status.PENDING; - else if (groupStatus == GroupReceiptDatabase.STATUS_UNKNOWN) return RecipientDeliveryStatus.Status.UNKNOWN; - else if (groupStatus == GroupReceiptDatabase.STATUS_VIEWED) return RecipientDeliveryStatus.Status.VIEWED; - else if (groupStatus == GroupReceiptDatabase.STATUS_SKIPPED) return RecipientDeliveryStatus.Status.SKIPPED; + if (groupStatus == GroupReceiptTable.STATUS_READ) return RecipientDeliveryStatus.Status.READ; + else if (groupStatus == GroupReceiptTable.STATUS_DELIVERED) return RecipientDeliveryStatus.Status.DELIVERED; + else if (groupStatus == GroupReceiptTable.STATUS_UNDELIVERED && failed) return RecipientDeliveryStatus.Status.UNKNOWN; + else if (groupStatus == GroupReceiptTable.STATUS_UNDELIVERED && !pending) return RecipientDeliveryStatus.Status.SENT; + else if (groupStatus == GroupReceiptTable.STATUS_UNDELIVERED) return RecipientDeliveryStatus.Status.PENDING; + else if (groupStatus == GroupReceiptTable.STATUS_UNKNOWN) return RecipientDeliveryStatus.Status.UNKNOWN; + else if (groupStatus == GroupReceiptTable.STATUS_VIEWED) return RecipientDeliveryStatus.Status.VIEWED; + else if (groupStatus == GroupReceiptTable.STATUS_SKIPPED) return RecipientDeliveryStatus.Status.SKIPPED; throw new AssertionError(); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageRecordLiveData.java b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageRecordLiveData.java index 1eb031b5f..63f02ac1e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageRecordLiveData.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageRecordLiveData.java @@ -5,7 +5,7 @@ import androidx.lifecycle.LiveData; import org.signal.core.util.concurrent.SignalExecutors; import org.thoughtcrime.securesms.database.DatabaseObserver; -import org.thoughtcrime.securesms.database.MessageDatabase; +import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.NoSuchMessageException; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MessageId; @@ -38,7 +38,7 @@ final class MessageRecordLiveData extends LiveData { } @WorkerThread - private synchronized void retrieve(MessageDatabase messageDatabase) { + private synchronized void retrieve(MessageTable messageDatabase) { try { MessageRecord record = messageDatabase.getMessageRecord(messageId.getId()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java index 4016a49c1..6220ab0b8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java @@ -9,11 +9,11 @@ import androidx.core.util.Consumer; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; import org.signal.storageservice.protos.groups.local.DecryptedGroup; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.MessageDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.MessageTable; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupChangeException; import org.thoughtcrime.securesms.groups.GroupManager; @@ -51,15 +51,15 @@ final class MessageRequestRepository { void getGroups(@NonNull RecipientId recipientId, @NonNull Consumer> onGroupsLoaded) { executor.execute(() -> { - GroupDatabase groupDatabase = SignalDatabase.groups(); + GroupTable groupDatabase = SignalDatabase.groups(); onGroupsLoaded.accept(groupDatabase.getPushGroupNamesContainingMember(recipientId)); }); } void getGroupInfo(@NonNull RecipientId recipientId, @NonNull Consumer onGroupInfoLoaded) { executor.execute(() -> { - GroupDatabase groupDatabase = SignalDatabase.groups(); - Optional groupRecord = groupDatabase.getGroup(recipientId); + GroupTable groupDatabase = SignalDatabase.groups(); + Optional groupRecord = groupDatabase.getGroup(recipientId); onGroupInfoLoaded.accept(groupRecord.map(record -> { if (record.isV2Group()) { DecryptedGroup decryptedGroup = record.requireV2GroupProperties().getDecryptedGroup(); @@ -132,8 +132,8 @@ final class MessageRequestRepository { Log.i(TAG, "GV2 accepting invite"); GroupManager.acceptInvite(context, liveRecipient.get().requireGroupId().requireV2()); - RecipientDatabase recipientDatabase = SignalDatabase.recipients(); - recipientDatabase.setProfileSharing(liveRecipient.getId(), true); + RecipientTable recipientTable = SignalDatabase.recipients(); + recipientTable.setProfileSharing(liveRecipient.getId(), true); onMessageRequestAccepted.run(); } catch (GroupChangeException | IOException e) { @@ -141,16 +141,16 @@ final class MessageRequestRepository { error.onError(GroupChangeFailureReason.fromException(e)); } } else { - RecipientDatabase recipientDatabase = SignalDatabase.recipients(); - recipientDatabase.setProfileSharing(liveRecipient.getId(), true); + RecipientTable recipientTable = SignalDatabase.recipients(); + recipientTable.setProfileSharing(liveRecipient.getId(), true); MessageSender.sendProfileKey(threadId); - List messageIds = SignalDatabase.threads().setEntireThreadRead(threadId); + List messageIds = SignalDatabase.threads().setEntireThreadRead(threadId); ApplicationDependencies.getMessageNotifier().updateNotification(context); MarkReadReceiver.process(context, messageIds); - List viewedInfos = SignalDatabase.mms().getViewedIncomingMessages(threadId); + List viewedInfos = SignalDatabase.mms().getViewedIncomingMessages(threadId); SendViewedReceiptJob.enqueue(threadId, liveRecipient.getId(), viewedInfos); @@ -193,8 +193,8 @@ final class MessageRequestRepository { ApplicationDependencies.getJobManager().add(MultiDeviceMessageRequestResponseJob.forDelete(recipient.getId())); } - ThreadDatabase threadDatabase = SignalDatabase.threads(); - threadDatabase.deleteConversation(threadId); + ThreadTable threadTable = SignalDatabase.threads(); + threadTable.deleteConversation(threadId); onMessageRequestDeleted.run(); }); @@ -263,11 +263,11 @@ final class MessageRequestRepository { }); } - private GroupDatabase.MemberLevel getGroupMemberLevel(@NonNull RecipientId recipientId) { + private GroupTable.MemberLevel getGroupMemberLevel(@NonNull RecipientId recipientId) { return SignalDatabase.groups() .getGroup(recipientId) .map(g -> g.memberLevel(Recipient.self())) - .orElse(GroupDatabase.MemberLevel.NOT_A_MEMBER); + .orElse(GroupTable.MemberLevel.NOT_A_MEMBER); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java b/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java index 60e0438df..337165419 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java @@ -12,9 +12,8 @@ import org.signal.libsignal.protocol.InvalidRegistrationIdException; import org.signal.libsignal.protocol.NoSessionException; import org.thoughtcrime.securesms.crypto.SenderKeyUtil; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; -import org.thoughtcrime.securesms.database.GroupDatabase.GroupRecord; -import org.thoughtcrime.securesms.database.MessageSendLogDatabase; -import org.thoughtcrime.securesms.database.SentStorySyncManifest; +import org.thoughtcrime.securesms.database.GroupTable.GroupRecord; +import org.thoughtcrime.securesms.database.MessageSendLogTables; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.DistributionListId; import org.thoughtcrime.securesms.database.model.MessageId; @@ -52,7 +51,6 @@ import org.whispersystems.signalservice.internal.push.http.PartialSendCompleteLi import java.io.IOException; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; @@ -372,8 +370,8 @@ public final class GroupSendUtil { List> access = legacyTargets.stream().map(r -> recipients.getAccessPair(r.getId())).collect(Collectors.toList()); boolean recipientUpdate = isRecipientUpdate || allResults.size() > 0; - final MessageSendLogDatabase messageLogDatabase = SignalDatabase.messageLog(); - final AtomicLong entryId = new AtomicLong(-1); + final MessageSendLogTables messageLogDatabase = SignalDatabase.messageLog(); + final AtomicLong entryId = new AtomicLong(-1); final boolean includeInMessageLog = sendOperation.shouldIncludeInMessageLog(); List results = sendOperation.sendLegacy(messageSender, targets, legacyTargets, access, recipientUpdate, result -> { diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageProcessor.java index 86eacbced..3f32b11f7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageProcessor.java @@ -8,9 +8,9 @@ import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.ReentrantSessionLock; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.MessageDatabase.SyncMessageId; -import org.thoughtcrime.securesms.database.MmsSmsDatabase; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.MessageTable.SyncMessageId; +import org.thoughtcrime.securesms.database.MmsSmsTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupChangeBusyException; @@ -22,7 +22,6 @@ import org.thoughtcrime.securesms.jobs.PushProcessMessageJob; import org.thoughtcrime.securesms.messages.MessageDecryptionUtil.DecryptionResult; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; -import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.GroupUtil; import org.signal.core.util.SetUtil; import org.signal.core.util.Stopwatch; @@ -66,9 +65,9 @@ public class IncomingMessageProcessor { public class Processor implements Closeable { - private final Context context; - private final MmsSmsDatabase mmsSmsDatabase; - private final JobManager jobManager; + private final Context context; + private final MmsSmsTable mmsSmsDatabase; + private final JobManager jobManager; private Processor(@NonNull Context context) { this.context = context; @@ -177,8 +176,8 @@ public class IncomingMessageProcessor { GroupId groupId = GroupId.v2(groupContext.getMasterKey()); if (groupId.isV2()) { - String queueName = PushProcessMessageJob.getQueueName(Recipient.externalPossiblyMigratedGroup(groupId).getId()); - GroupDatabase groupDatabase = SignalDatabase.groups(); + String queueName = PushProcessMessageJob.getQueueName(Recipient.externalPossiblyMigratedGroup(groupId).getId()); + GroupTable groupDatabase = SignalDatabase.groups(); return !jobManager.isQueueEmpty(queueName) || groupContext.getRevision() > groupDatabase.getGroupV2Revision(groupId.requireV2()) || diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java index 74f8a1761..9ff6831a0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java @@ -32,24 +32,24 @@ import org.thoughtcrime.securesms.contactshare.Contact; import org.thoughtcrime.securesms.contactshare.ContactModelMapper; import org.thoughtcrime.securesms.crypto.ProfileKeyUtil; import org.thoughtcrime.securesms.crypto.SecurityEvent; -import org.thoughtcrime.securesms.database.AttachmentDatabase; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.GroupDatabase.GroupRecord; -import org.thoughtcrime.securesms.database.GroupReceiptDatabase; -import org.thoughtcrime.securesms.database.GroupReceiptDatabase.GroupReceiptInfo; -import org.thoughtcrime.securesms.database.MessageDatabase; -import org.thoughtcrime.securesms.database.MessageDatabase.InsertResult; -import org.thoughtcrime.securesms.database.MessageDatabase.SyncMessageId; -import org.thoughtcrime.securesms.database.MmsDatabase; -import org.thoughtcrime.securesms.database.MmsSmsDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.GroupTable.GroupRecord; +import org.thoughtcrime.securesms.database.GroupReceiptTable; +import org.thoughtcrime.securesms.database.GroupReceiptTable.GroupReceiptInfo; +import org.thoughtcrime.securesms.database.MessageTable; +import org.thoughtcrime.securesms.database.MessageTable.InsertResult; +import org.thoughtcrime.securesms.database.MessageTable.SyncMessageId; +import org.thoughtcrime.securesms.database.MmsTable; +import org.thoughtcrime.securesms.database.MmsSmsTable; import org.thoughtcrime.securesms.database.NoSuchMessageException; -import org.thoughtcrime.securesms.database.PaymentDatabase; +import org.thoughtcrime.securesms.database.PaymentTable; import org.thoughtcrime.securesms.database.PaymentMetaDataUtil; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SentStorySyncManifest; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.StickerDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.StickerTable; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.database.model.MediaMmsMessageRecord; import org.thoughtcrime.securesms.database.model.Mention; import org.thoughtcrime.securesms.database.model.MessageId; @@ -275,8 +275,8 @@ public final class MessageContentProcessor { log(String.valueOf(content.getTimestamp()), "Beginning message processing. Sender: " + formatSender(senderRecipient, content)); if (content.getDataMessage().isPresent()) { - GroupDatabase groupDatabase = SignalDatabase.groups(); - SignalServiceDataMessage message = content.getDataMessage().get(); + GroupTable groupDatabase = SignalDatabase.groups(); + SignalServiceDataMessage message = content.getDataMessage().get(); boolean isMediaMessage = message.getAttachments().isPresent() || message.getQuote().isPresent() || message.getSharedContacts().isPresent() || message.getPreviews().isPresent() || message.getSticker().isPresent() || message.getMentions().isPresent(); Optional groupId = GroupUtil.idFromGroupContext(message.getGroupContext()); boolean isGv2Message = groupId.isPresent() && groupId.get().isV2(); @@ -416,8 +416,8 @@ public final class MessageContentProcessor { Long threadId = SignalDatabase.threads().getThreadIdFor(destination.getId()); if (threadId != null) { - ThreadDatabase.ConversationMetadata metadata = SignalDatabase.threads().getConversationMetadata(threadId); - long visibleThread = ApplicationDependencies.getMessageNotifier().getVisibleThread().map(ConversationId::getThreadId).orElse(-1L); + ThreadTable.ConversationMetadata metadata = SignalDatabase.threads().getConversationMetadata(threadId); + long visibleThread = ApplicationDependencies.getMessageNotifier().getVisibleThread().map(ConversationId::getThreadId).orElse(-1L); if (threadId != visibleThread && metadata.getLastSeen() > 0 && metadata.getLastSeen() < pending.getReceivedTimestamp()) { receivedTime = pending.getReceivedTimestamp(); @@ -452,7 +452,7 @@ public final class MessageContentProcessor { } SignalServiceDataMessage.PaymentNotification paymentNotification = message.getPayment().get().getPaymentNotification().get(); - PaymentDatabase paymentDatabase = SignalDatabase.payments(); + PaymentTable paymentDatabase = SignalDatabase.payments(); UUID uuid = UUID.randomUUID(); String queue = "Payment_" + PushProcessMessageJob.getQueueName(senderRecipient.getId()); MessageId messageId = null; @@ -481,7 +481,7 @@ public final class MessageContentProcessor { ApplicationDependencies.getMessageNotifier().updateNotification(context, ConversationId.forConversation(insertResult.get().getThreadId())); } } - } catch (PaymentDatabase.PublicKeyConflictException e) { + } catch (PaymentTable.PublicKeyConflictException e) { warn(content.getTimestamp(), "Ignoring payment with public key already in database"); } catch (SerializationException e) { warn(content.getTimestamp(), "Ignoring payment with bad data.", e); @@ -503,7 +503,7 @@ public final class MessageContentProcessor { private boolean handleGv2PreProcessing(@NonNull GroupId.V2 groupId, @NonNull SignalServiceContent content, @NonNull SignalServiceGroupV2 groupV2, @NonNull Recipient senderRecipient) throws IOException, GroupChangeBusyException { - GroupDatabase groupDatabase = SignalDatabase.groups(); + GroupTable groupDatabase = SignalDatabase.groups(); Optional possibleGv1 = groupDatabase.getGroupV1ByExpectedV2(groupId); if (possibleGv1.isPresent()) { @@ -614,7 +614,7 @@ public final class MessageContentProcessor { log(String.valueOf(content.getTimestamp()), "handleCallOfferMessage..."); if (smsMessageId.isPresent()) { - MessageDatabase database = SignalDatabase.sms(); + MessageTable database = SignalDatabase.sms(); database.markAsMissedCall(smsMessageId.get(), message.getType() == OfferMessage.Type.VIDEO_CALL); } else { RemotePeer remotePeer = new RemotePeer(senderRecipient.getId(), new CallId(message.getId())); @@ -740,7 +740,7 @@ public final class MessageContentProcessor { { log(content.getTimestamp(), "End session message."); - MessageDatabase smsDatabase = SignalDatabase.sms(); + MessageTable smsDatabase = SignalDatabase.sms(); IncomingTextMessage incomingTextMessage = new IncomingTextMessage(senderRecipient.getId(), content.getSenderDevice(), content.getTimestamp(), @@ -780,8 +780,8 @@ public final class MessageContentProcessor { { log(envelopeTimestamp, "Synchronize end session message."); - MessageDatabase database = SignalDatabase.sms(); - Recipient recipient = getSyncMessageDestination(message); + MessageTable database = SignalDatabase.sms(); + Recipient recipient = getSyncMessageDestination(message); OutgoingTextMessage outgoingTextMessage = new OutgoingTextMessage(recipient, "", -1); OutgoingEndSessionMessage outgoingEndSessionMessage = new OutgoingEndSessionMessage(outgoingTextMessage); @@ -852,7 +852,7 @@ public final class MessageContentProcessor { throws StorageFailedException { try { - MessageDatabase database = SignalDatabase.mms(); + MessageTable database = SignalDatabase.mms(); IncomingMediaMessage mediaMessage = new IncomingMediaMessage(senderRecipient.getId(), content.getTimestamp(), content.getServerReceivedTimestamp(), @@ -922,7 +922,7 @@ public final class MessageContentProcessor { } try { - MessageDatabase database = SignalDatabase.mms(); + MessageTable database = SignalDatabase.mms(); IncomingMediaMessage mediaMessage = new IncomingMediaMessage(senderRecipient.getId(), content.getTimestamp() - (sideEffect ? 1 : 0), content.getServerReceivedTimestamp(), @@ -1034,7 +1034,7 @@ public final class MessageContentProcessor { MessageRecord targetMessage = SignalDatabase.mmsSms().getMessageFor(delete.getTargetSentTimestamp(), senderRecipient.getId()); if (targetMessage != null && RemoteDeleteUtil.isValidReceive(targetMessage, senderRecipient, content.getServerReceivedTimestamp())) { - MessageDatabase db = targetMessage.isMms() ? SignalDatabase.mms() : SignalDatabase.sms(); + MessageTable db = targetMessage.isMms() ? SignalDatabase.mms() : SignalDatabase.sms(); db.markAsRemoteDelete(targetMessage.getId()); if (MessageRecordUtil.isStory(targetMessage)) { db.deleteRemotelyDeletedStory(targetMessage.getId()); @@ -1131,8 +1131,8 @@ public final class MessageContentProcessor { { log(envelopeTimestamp, "Synchronize message request response."); - RecipientDatabase recipientDatabase = SignalDatabase.recipients(); - ThreadDatabase threadDatabase = SignalDatabase.threads(); + RecipientTable recipientTable = SignalDatabase.recipients(); + ThreadTable threadTable = SignalDatabase.threads(); Recipient recipient; @@ -1146,25 +1146,25 @@ public final class MessageContentProcessor { return; } - long threadId = threadDatabase.getOrCreateThreadIdFor(recipient); + long threadId = threadTable.getOrCreateThreadIdFor(recipient); switch (response.getType()) { case ACCEPT: - recipientDatabase.setProfileSharing(recipient.getId(), true); - recipientDatabase.setBlocked(recipient.getId(), false); + recipientTable.setProfileSharing(recipient.getId(), true); + recipientTable.setBlocked(recipient.getId(), false); break; case DELETE: - recipientDatabase.setProfileSharing(recipient.getId(), false); - if (threadId > 0) threadDatabase.deleteConversation(threadId); + recipientTable.setProfileSharing(recipient.getId(), false); + if (threadId > 0) threadTable.deleteConversation(threadId); break; case BLOCK: - recipientDatabase.setBlocked(recipient.getId(), true); - recipientDatabase.setProfileSharing(recipient.getId(), false); + recipientTable.setBlocked(recipient.getId(), true); + recipientTable.setProfileSharing(recipient.getId(), false); break; case BLOCK_AND_DELETE: - recipientDatabase.setBlocked(recipient.getId(), true); - recipientDatabase.setProfileSharing(recipient.getId(), false); - if (threadId > 0) threadDatabase.deleteConversation(threadId); + recipientTable.setBlocked(recipient.getId(), true); + recipientTable.setProfileSharing(recipient.getId(), false); + if (threadId > 0) threadTable.deleteConversation(threadId); break; default: warn("Got an unknown response type! Skipping"); @@ -1245,7 +1245,7 @@ public final class MessageContentProcessor { log(String.valueOf(content.getTimestamp()), "Processing sent transcript for message with ID " + message.getTimestamp()); try { - GroupDatabase groupDatabase = SignalDatabase.groups(); + GroupTable groupDatabase = SignalDatabase.groups(); if (message.getStoryMessage().isPresent() || !message.getStoryMessageRecipients().isEmpty()) { handleSynchronizeSentStoryMessage(message, content.getTimestamp()); @@ -1379,7 +1379,7 @@ public final class MessageContentProcessor { Collection unhandled = SignalDatabase.mmsSms().setTimestampReadFromSyncMessage(readMessages, envelopeTimestamp, threadToLatestRead); - List markedMessages = SignalDatabase.threads().setReadSince(threadToLatestRead, false); + List markedMessages = SignalDatabase.threads().setReadSince(threadToLatestRead, false); if (Util.hasItems(markedMessages)) { Log.i(TAG, "Updating past messages: " + markedMessages.size()); @@ -1471,7 +1471,7 @@ public final class MessageContentProcessor { Optional insertResult; - MessageDatabase database = SignalDatabase.mms(); + MessageTable database = SignalDatabase.mms(); database.beginTransaction(); try { @@ -1612,7 +1612,7 @@ public final class MessageContentProcessor { SignalServiceDataMessage.StoryContext storyContext = message.getStoryContext().get(); - MessageDatabase database = SignalDatabase.mms(); + MessageTable database = SignalDatabase.mms(); database.beginTransaction(); try { @@ -1703,7 +1703,7 @@ public final class MessageContentProcessor { SignalServiceDataMessage.StoryContext storyContext = message.getStoryContext().get(); - MessageDatabase database = SignalDatabase.mms(); + MessageTable database = SignalDatabase.mms(); database.beginTransaction(); try { @@ -1816,7 +1816,7 @@ public final class MessageContentProcessor { Optional insertResult; - MessageDatabase database = SignalDatabase.mms(); + MessageTable database = SignalDatabase.mms(); byte[] token = message.getGiftBadge().get().getReceiptCredentialPresentation().serialize(); GiftBadge giftBadge = GiftBadge.newBuilder() @@ -1879,7 +1879,7 @@ public final class MessageContentProcessor { Optional insertResult; - MessageDatabase database = SignalDatabase.mms(); + MessageTable database = SignalDatabase.mms(); database.beginTransaction(); try { @@ -1960,8 +1960,8 @@ public final class MessageContentProcessor { { log(message.getTimestamp(), "Synchronize sent expiration update."); - MessageDatabase database = SignalDatabase.mms(); - Recipient recipient = getSyncMessageDestination(message); + MessageTable database = SignalDatabase.mms(); + Recipient recipient = getSyncMessageDestination(message); OutgoingExpirationUpdateMessage expirationUpdateMessage = new OutgoingExpirationUpdateMessage(recipient, message.getTimestamp(), @@ -1988,9 +1988,9 @@ public final class MessageContentProcessor { try { Optional reaction = message.getDataMessage().get().getReaction(); ParentStoryId parentStoryId; - SignalServiceDataMessage.StoryContext storyContext = message.getDataMessage().get().getStoryContext().get(); - MessageDatabase database = SignalDatabase.mms(); - Recipient recipient = getSyncMessageDestination(message); + SignalServiceDataMessage.StoryContext storyContext = message.getDataMessage().get().getStoryContext().get(); + MessageTable database = SignalDatabase.mms(); + Recipient recipient = getSyncMessageDestination(message); QuoteModel quoteModel = null; long expiresInMillis = 0L; RecipientId storyAuthorRecipient = RecipientId.from(storyContext.getAuthorServiceId()); @@ -2030,7 +2030,7 @@ public final class MessageContentProcessor { -1, expiresInMillis, false, - ThreadDatabase.DistributionTypes.DEFAULT, + ThreadTable.DistributionTypes.DEFAULT, StoryType.NONE, parentStoryId, message.getDataMessage().get().getReaction().isPresent(), @@ -2053,7 +2053,7 @@ public final class MessageContentProcessor { database.beginTransaction(); try { - messageId = database.insertMessageOutbox(mediaMessage, threadId, false, GroupReceiptDatabase.STATUS_UNKNOWN, null); + messageId = database.insertMessageOutbox(mediaMessage, threadId, false, GroupReceiptTable.STATUS_UNKNOWN, null); if (recipient.isGroup()) { updateGroupReceiptStatus(message, messageId, recipient.requireGroupId()); @@ -2150,7 +2150,7 @@ public final class MessageContentProcessor { -1, 0, false, - ThreadDatabase.DistributionTypes.DEFAULT, + ThreadTable.DistributionTypes.DEFAULT, storyType, null, false, @@ -2164,15 +2164,15 @@ public final class MessageContentProcessor { mediaMessage = new OutgoingSecureMediaMessage(mediaMessage); - MmsDatabase database = SignalDatabase.mms(); - long threadId = SignalDatabase.threads().getOrCreateThreadIdFor(recipient); + MmsTable database = SignalDatabase.mms(); + long threadId = SignalDatabase.threads().getOrCreateThreadIdFor(recipient); long messageId; List attachments; database.beginTransaction(); try { - messageId = database.insertMessageOutbox(mediaMessage, threadId, false, GroupReceiptDatabase.STATUS_UNKNOWN, null); + messageId = database.insertMessageOutbox(mediaMessage, threadId, false, GroupReceiptTable.STATUS_UNKNOWN, null); if (recipient.isGroup()) { updateGroupReceiptStatus(message, messageId, recipient.requireGroupId()); @@ -2223,8 +2223,8 @@ public final class MessageContentProcessor { { log(envelopeTimestamp, "Synchronize sent media message for " + message.getTimestamp()); - MessageDatabase database = SignalDatabase.mms(); - Recipient recipients = getSyncMessageDestination(message); + MessageTable database = SignalDatabase.mms(); + Recipient recipients = getSyncMessageDestination(message); Optional quote = getValidatedQuote(message.getDataMessage().get().getQuote()); Optional sticker = getStickerAttachment(message.getDataMessage().get().getSticker()); Optional> sharedContacts = getContacts(message.getDataMessage().get().getSharedContacts()); @@ -2246,7 +2246,7 @@ public final class MessageContentProcessor { -1, TimeUnit.SECONDS.toMillis(message.getDataMessage().get().getExpiresInSeconds()), viewOnce, - ThreadDatabase.DistributionTypes.DEFAULT, + ThreadTable.DistributionTypes.DEFAULT, StoryType.NONE, null, false, @@ -2272,7 +2272,7 @@ public final class MessageContentProcessor { database.beginTransaction(); try { - messageId = database.insertMessageOutbox(mediaMessage, threadId, false, GroupReceiptDatabase.STATUS_UNKNOWN, null); + messageId = database.insertMessageOutbox(mediaMessage, threadId, false, GroupReceiptTable.STATUS_UNKNOWN, null); if (recipients.isGroup()) { updateGroupReceiptStatus(message, messageId, recipients.requireGroupId()); @@ -2328,8 +2328,8 @@ public final class MessageContentProcessor { return; } - MmsSmsDatabase database = SignalDatabase.mmsSms(); - MessageRecord record = database.getMessageFor(message.getTimestamp(), Recipient.self().getId()); + MmsSmsTable database = SignalDatabase.mmsSms(); + MessageRecord record = database.getMessageFor(message.getTimestamp(), Recipient.self().getId()); if (record == null) { warn("Got recipient update for non-existing message! Skipping."); @@ -2345,18 +2345,18 @@ public final class MessageContentProcessor { } private void updateGroupReceiptStatus(@NonNull SentTranscriptMessage message, long messageId, @NonNull GroupId groupString) { - GroupReceiptDatabase receiptDatabase = SignalDatabase.groupReceipts(); - List messageRecipientIds = Stream.of(message.getRecipients()).map(RecipientId::from).toList(); - List members = SignalDatabase.groups().getGroupMembers(groupString, GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); + GroupReceiptTable receiptDatabase = SignalDatabase.groupReceipts(); + List messageRecipientIds = Stream.of(message.getRecipients()).map(RecipientId::from).toList(); + List members = SignalDatabase.groups().getGroupMembers(groupString, GroupTable.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); Map localReceipts = Stream.of(receiptDatabase.getGroupReceiptInfo(messageId)) .collect(Collectors.toMap(GroupReceiptInfo::getRecipientId, GroupReceiptInfo::getStatus)); for (RecipientId messageRecipientId : messageRecipientIds) { //noinspection ConstantConditions - if (localReceipts.containsKey(messageRecipientId) && localReceipts.get(messageRecipientId) < GroupReceiptDatabase.STATUS_UNDELIVERED) { - receiptDatabase.update(messageRecipientId, messageId, GroupReceiptDatabase.STATUS_UNDELIVERED, message.getTimestamp()); + if (localReceipts.containsKey(messageRecipientId) && localReceipts.get(messageRecipientId) < GroupReceiptTable.STATUS_UNDELIVERED) { + receiptDatabase.update(messageRecipientId, messageId, GroupReceiptTable.STATUS_UNDELIVERED, message.getTimestamp()); } else if (!localReceipts.containsKey(messageRecipientId)) { - receiptDatabase.insert(Collections.singletonList(messageRecipientId), messageId, GroupReceiptDatabase.STATUS_UNDELIVERED, message.getTimestamp()); + receiptDatabase.insert(Collections.singletonList(messageRecipientId), messageId, GroupReceiptTable.STATUS_UNDELIVERED, message.getTimestamp()); } } @@ -2376,8 +2376,8 @@ public final class MessageContentProcessor { throws StorageFailedException { log(message.getTimestamp(), "Text message."); - MessageDatabase database = SignalDatabase.sms(); - String body = message.getBody().isPresent() ? message.getBody().get() : ""; + MessageTable database = SignalDatabase.sms(); + String body = message.getBody().isPresent() ? message.getBody().get() : ""; handlePossibleExpirationUpdate(content, message, groupId, senderRecipient, threadRecipient, receivedTime); @@ -2429,8 +2429,8 @@ public final class MessageContentProcessor { long threadId = SignalDatabase.threads().getOrCreateThreadIdFor(recipient); boolean isGroup = recipient.isGroup(); - MessageDatabase database; - long messageId; + MessageTable database; + long messageId; if (isGroup) { OutgoingMediaMessage outgoingMediaMessage = new OutgoingMediaMessage(recipient, @@ -2440,7 +2440,7 @@ public final class MessageContentProcessor { -1, expiresInMillis, false, - ThreadDatabase.DistributionTypes.DEFAULT, + ThreadTable.DistributionTypes.DEFAULT, StoryType.NONE, null, false, @@ -2451,7 +2451,7 @@ public final class MessageContentProcessor { null); outgoingMediaMessage = new OutgoingSecureMediaMessage(outgoingMediaMessage); - messageId = SignalDatabase.mms().insertMessageOutbox(outgoingMediaMessage, threadId, false, GroupReceiptDatabase.STATUS_UNKNOWN, null); + messageId = SignalDatabase.mms().insertMessageOutbox(outgoingMediaMessage, threadId, false, GroupReceiptTable.STATUS_UNKNOWN, null); database = SignalDatabase.mms(); updateGroupReceiptStatus(message, messageId, recipient.requireGroupId()); @@ -2485,7 +2485,7 @@ public final class MessageContentProcessor { { log(timestamp, "Invalid version message."); - MessageDatabase smsDatabase = SignalDatabase.sms(); + MessageTable smsDatabase = SignalDatabase.sms(); if (!smsMessageId.isPresent()) { Optional insertResult = insertPlaceholder(sender, senderDevice, timestamp); @@ -2504,7 +2504,7 @@ public final class MessageContentProcessor { { log(timestamp, "Corrupt message."); - MessageDatabase smsDatabase = SignalDatabase.sms(); + MessageTable smsDatabase = SignalDatabase.sms(); if (!smsMessageId.isPresent()) { Optional insertResult = insertPlaceholder(sender, senderDevice, timestamp); @@ -2526,7 +2526,7 @@ public final class MessageContentProcessor { { log(timestamp, "Unsupported data message."); - MessageDatabase smsDatabase = SignalDatabase.sms(); + MessageTable smsDatabase = SignalDatabase.sms(); if (!smsMessageId.isPresent()) { Optional insertResult = insertPlaceholder(sender, senderDevice, timestamp, groupId); @@ -2548,7 +2548,7 @@ public final class MessageContentProcessor { { log(timestamp, "Invalid message."); - MessageDatabase smsDatabase = SignalDatabase.sms(); + MessageTable smsDatabase = SignalDatabase.sms(); if (!smsMessageId.isPresent()) { Optional insertResult = insertPlaceholder(sender.getIdentifier(), senderDevice, timestamp, groupId); @@ -2567,7 +2567,7 @@ public final class MessageContentProcessor { { log(timestamp, "Legacy message."); - MessageDatabase smsDatabase = SignalDatabase.sms(); + MessageTable smsDatabase = SignalDatabase.sms(); if (!smsMessageId.isPresent()) { Optional insertResult = insertPlaceholder(sender, senderDevice, timestamp); @@ -2585,8 +2585,8 @@ public final class MessageContentProcessor { @NonNull byte[] messageProfileKeyBytes, @NonNull Recipient senderRecipient) { - RecipientDatabase database = SignalDatabase.recipients(); - ProfileKey messageProfileKey = ProfileKeyUtil.profileKeyOrNull(messageProfileKeyBytes); + RecipientTable database = SignalDatabase.recipients(); + ProfileKey messageProfileKey = ProfileKeyUtil.profileKeyOrNull(messageProfileKeyBytes); if (senderRecipient.isSelf()) { if (!Objects.equals(ProfileKeyUtil.getSelfProfileKey(), messageProfileKey)) { @@ -2991,27 +2991,27 @@ public final class MessageContentProcessor { int stickerId = sticker.get().getStickerId(); String emoji = sticker.get().getEmoji(); StickerLocator stickerLocator = new StickerLocator(packId, packKey, stickerId, emoji); - StickerDatabase stickerDatabase = SignalDatabase.stickers(); - StickerRecord stickerRecord = stickerDatabase.getSticker(stickerLocator.getPackId(), stickerLocator.getStickerId(), false); + StickerTable stickerDatabase = SignalDatabase.stickers(); + StickerRecord stickerRecord = stickerDatabase.getSticker(stickerLocator.getPackId(), stickerLocator.getStickerId(), false); if (stickerRecord != null) { return Optional.of(new UriAttachment(stickerRecord.getUri(), - stickerRecord.getContentType(), - AttachmentDatabase.TRANSFER_PROGRESS_DONE, - stickerRecord.getSize(), - StickerSlide.WIDTH, - StickerSlide.HEIGHT, - null, - String.valueOf(new SecureRandom().nextLong()), - false, - false, - false, - false, - null, - stickerLocator, - null, - null, - null)); + stickerRecord.getContentType(), + AttachmentTable.TRANSFER_PROGRESS_DONE, + stickerRecord.getSize(), + StickerSlide.WIDTH, + StickerSlide.HEIGHT, + null, + String.valueOf(new SecureRandom().nextLong()), + false, + false, + false, + false, + null, + stickerLocator, + null, + null, + null)); } else { return Optional.of(PointerAttachment.forPointer(Optional.of(sticker.get().getAttachment()), stickerLocator).get()); } @@ -3088,7 +3088,7 @@ public final class MessageContentProcessor { } private Optional insertPlaceholder(@NonNull String sender, int senderDevice, long timestamp, Optional groupId) { - MessageDatabase database = SignalDatabase.sms(); + MessageTable database = SignalDatabase.sms(); IncomingTextMessage textMessage = new IncomingTextMessage(Recipient.external(context, sender).getId(), senderDevice, timestamp, -1, System.currentTimeMillis(), "", groupId, 0, false, null); @@ -3137,7 +3137,7 @@ public final class MessageContentProcessor { if (conversation.isGroup() && conversation.isBlocked()) { return true; } else if (conversation.isGroup()) { - GroupDatabase groupDatabase = SignalDatabase.groups(); + GroupTable groupDatabase = SignalDatabase.groups(); Optional groupId = GroupUtil.idFromGroupContext(message.getGroupContext()); if (groupId.isPresent() && groupDatabase.isUnknownGroup(groupId.get())) { @@ -3195,7 +3195,7 @@ public final class MessageContentProcessor { DatabaseAttachment stickerAttachment = stickerAttachments.get(0); - if (stickerAttachment.getTransferState() != AttachmentDatabase.TRANSFER_PROGRESS_DONE) { + if (stickerAttachment.getTransferState() != AttachmentTable.TRANSFER_PROGRESS_DONE) { AttachmentDownloadJob downloadJob = new AttachmentDownloadJob(messageId, stickerAttachment.getAttachmentId(), true); try { diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplyUnknownFieldsToSelfMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplyUnknownFieldsToSelfMigrationJob.java index 9f06a4019..b3ddb6dff 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplyUnknownFieldsToSelfMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplyUnknownFieldsToSelfMigrationJob.java @@ -5,7 +5,7 @@ import androidx.annotation.NonNull; import com.google.protobuf.InvalidProtocolBufferException; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.RecipientRecord; import org.thoughtcrime.securesms.jobmanager.Data; @@ -57,7 +57,7 @@ public class ApplyUnknownFieldsToSelfMigrationJob extends MigrationJob { try { self = Recipient.self(); settings = SignalDatabase.recipients().getRecordForSync(self.getId()); - } catch (RecipientDatabase.MissingRecipientException e) { + } catch (RecipientTable.MissingRecipientException e) { Log.w(TAG, "Unable to find self"); return; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/LegacyMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/LegacyMigrationJob.java index a893b7a20..5ecce91ec 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/LegacyMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/LegacyMigrationJob.java @@ -8,11 +8,11 @@ import androidx.preference.PreferenceManager; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; import org.thoughtcrime.securesms.crypto.MasterSecret; -import org.thoughtcrime.securesms.database.AttachmentDatabase; -import org.thoughtcrime.securesms.database.MessageDatabase; -import org.thoughtcrime.securesms.database.MmsDatabase; -import org.thoughtcrime.securesms.database.MmsDatabase.Reader; -import org.thoughtcrime.securesms.database.PushDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; +import org.thoughtcrime.securesms.database.MessageTable; +import org.thoughtcrime.securesms.database.MmsTable; +import org.thoughtcrime.securesms.database.MmsTable.Reader; +import org.thoughtcrime.securesms.database.PushTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; @@ -245,18 +245,18 @@ public class LegacyMigrationJob extends MigrationJob { } private void schedulePendingIncomingParts(Context context) { - final AttachmentDatabase attachmentDb = SignalDatabase.attachments(); - final MessageDatabase mmsDb = SignalDatabase.mms(); + final AttachmentTable attachmentDb = SignalDatabase.attachments(); + final MessageTable mmsDb = SignalDatabase.mms(); final List pendingAttachments = SignalDatabase.attachments().getPendingAttachments(); Log.i(TAG, pendingAttachments.size() + " pending parts."); for (DatabaseAttachment attachment : pendingAttachments) { - final Reader reader = MmsDatabase.readerFor(mmsDb.getMessageCursor(attachment.getMmsId())); + final Reader reader = MmsTable.readerFor(mmsDb.getMessageCursor(attachment.getMmsId())); final MessageRecord record = reader.getNext(); if (attachment.hasData()) { Log.i(TAG, "corrected a pending media part " + attachment.getAttachmentId() + "that already had data."); - attachmentDb.setTransferState(attachment.getMmsId(), attachment.getAttachmentId(), AttachmentDatabase.TRANSFER_PROGRESS_DONE); + attachmentDb.setTransferState(attachment.getMmsId(), attachment.getAttachmentId(), AttachmentTable.TRANSFER_PROGRESS_DONE); } else if (record != null && !record.isOutgoing() && record.isPush()) { Log.i(TAG, "queuing new attachment download job for incoming push part " + attachment.getAttachmentId() + "."); ApplicationDependencies.getJobManager().add(new AttachmentDownloadJob(attachment.getMmsId(), attachment.getAttachmentId(), false)); @@ -266,10 +266,10 @@ public class LegacyMigrationJob extends MigrationJob { } private static void scheduleMessagesInPushDatabase(@NonNull Context context) { - PushDatabase pushDatabase = SignalDatabase.push(); - JobManager jobManager = ApplicationDependencies.getJobManager(); + PushTable pushDatabase = SignalDatabase.push(); + JobManager jobManager = ApplicationDependencies.getJobManager(); - try (PushDatabase.Reader pushReader = pushDatabase.readerFor(pushDatabase.getPending())) { + try (PushTable.Reader pushReader = pushDatabase.readerFor(pushDatabase.getPending())) { SignalServiceEnvelope envelope; while ((envelope = pushReader.getNext()) != null) { jobManager.add(new PushDecryptMessageJob(context, envelope)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerLaunchMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerLaunchMigrationJob.java index 908ecb81f..eba912e62 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerLaunchMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerLaunchMigrationJob.java @@ -5,7 +5,7 @@ import android.content.Context; import androidx.annotation.NonNull; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.StickerDatabase; +import org.thoughtcrime.securesms.database.StickerTable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; @@ -49,8 +49,8 @@ public class StickerLaunchMigrationJob extends MigrationJob { } private static void installPack(@NonNull Context context, @NonNull BlessedPacks.Pack pack) { - JobManager jobManager = ApplicationDependencies.getJobManager(); - StickerDatabase stickerDatabase = SignalDatabase.stickers(); + JobManager jobManager = ApplicationDependencies.getJobManager(); + StickerTable stickerDatabase = SignalDatabase.stickers(); if (stickerDatabase.isPackAvailableAsReference(pack.getPackId())) { stickerDatabase.markPackAsInstalled(pack.getPackId(), false); diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/UserNotificationMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/UserNotificationMigrationJob.java index 0fd5dbcdd..75b2516b2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/UserNotificationMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/UserNotificationMigrationJob.java @@ -15,7 +15,7 @@ import org.thoughtcrime.securesms.NewConversationActivity; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.conversationlist.model.ConversationFilter; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -75,10 +75,10 @@ public class UserNotificationMigrationJob extends MigrationJob { return; } - ThreadDatabase threadDatabase = SignalDatabase.threads(); + ThreadTable threadTable = SignalDatabase.threads(); - int threadCount = threadDatabase.getUnarchivedConversationListCount(ConversationFilter.OFF) + - threadDatabase.getArchivedConversationListCount(ConversationFilter.OFF); + int threadCount = threadTable.getUnarchivedConversationListCount(ConversationFilter.OFF) + + threadTable.getArchivedConversationListCount(ConversationFilter.OFF); if (threadCount >= 3) { Log.w(TAG, "Already have 3 or more threads. Skipping."); @@ -88,7 +88,7 @@ public class UserNotificationMigrationJob extends MigrationJob { List registered = SignalDatabase.recipients().getRegistered(); List systemContacts = SignalDatabase.recipients().getSystemContacts(); Set registeredSystemContacts = SetUtil.intersection(registered, systemContacts); - Set threadRecipients = threadDatabase.getAllThreadRecipients(); + Set threadRecipients = threadTable.getAllThreadRecipients(); if (threadRecipients.containsAll(registeredSystemContacts)) { Log.w(TAG, "Threads already exist for all relevant contacts. Skipping."); diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java index 37c3d654d..b0c907b05 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java @@ -18,7 +18,6 @@ package org.thoughtcrime.securesms.mms; import android.Manifest; import android.annotation.SuppressLint; -import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; @@ -53,8 +52,8 @@ import org.thoughtcrime.securesms.components.ThumbnailView; import org.thoughtcrime.securesms.components.location.SignalMapView; import org.thoughtcrime.securesms.components.location.SignalPlace; import org.thoughtcrime.securesms.conversation.MessageSendType; -import org.thoughtcrime.securesms.database.AttachmentDatabase; -import org.thoughtcrime.securesms.database.MediaDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; +import org.thoughtcrime.securesms.database.MediaTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.giph.ui.GiphyActivity; import org.thoughtcrime.securesms.maps.PlacePickerActivity; @@ -62,7 +61,6 @@ import org.thoughtcrime.securesms.mediapreview.MediaIntentFactory; import org.thoughtcrime.securesms.mediapreview.MediaPreviewV2Fragment; import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionActivity; import org.thoughtcrime.securesms.payments.CanNotSendPaymentDialog; -import org.thoughtcrime.securesms.payments.MobileCoinPublicAddress; import org.thoughtcrime.securesms.payments.PaymentsAddressException; import org.thoughtcrime.securesms.payments.create.CreatePaymentFragmentArgs; import org.thoughtcrime.securesms.payments.preferences.PaymentsActivity; @@ -93,7 +91,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Optional; import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; public class AttachmentManager { @@ -346,8 +343,8 @@ public class AttachmentManager { Long mediaSize = null; String fileName = null; String mimeType = null; - boolean gif = false; - AttachmentDatabase.TransformProperties transformProperties = null; + boolean gif = false; + AttachmentTable.TransformProperties transformProperties = null; if (PartAuthority.isLocalUri(uri)) { mediaSize = PartAuthority.getAttachmentSize(context, uri); @@ -529,7 +526,7 @@ public class AttachmentManager { false, false, false, - MediaDatabase.Sorting.Newest, + MediaTable.Sorting.Newest, slide.isVideoGif()); context.startActivity(MediaIntentFactory.create(context, args)); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/AudioSlide.java b/app/src/main/java/org/thoughtcrime/securesms/mms/AudioSlide.java index 696b16c14..5a4f579a6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/AudioSlide.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/AudioSlide.java @@ -27,19 +27,19 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.attachments.UriAttachment; import org.thoughtcrime.securesms.components.voice.VoiceNoteDraft; -import org.thoughtcrime.securesms.database.AttachmentDatabase; -import org.thoughtcrime.securesms.database.DraftDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; +import org.thoughtcrime.securesms.database.DraftTable; import org.thoughtcrime.securesms.util.MediaUtil; public class AudioSlide extends Slide { - public static @NonNull AudioSlide createFromVoiceNoteDraft(@NonNull Context context, @NonNull DraftDatabase.Draft draft) { + public static @NonNull AudioSlide createFromVoiceNoteDraft(@NonNull Context context, @NonNull DraftTable.Draft draft) { VoiceNoteDraft voiceNoteDraft = VoiceNoteDraft.fromDraft(draft); return new AudioSlide(context, new UriAttachment(voiceNoteDraft.getUri(), MediaUtil.AUDIO_AAC, - AttachmentDatabase.TRANSFER_PROGRESS_DONE, + AttachmentTable.TRANSFER_PROGRESS_DONE, voiceNoteDraft.getSize(), 0, 0, @@ -61,7 +61,7 @@ public class AudioSlide extends Slide { } public AudioSlide(Context context, Uri uri, long dataSize, String contentType, boolean voiceNote) { - super(context, new UriAttachment(uri, contentType, AttachmentDatabase.TRANSFER_PROGRESS_STARTED, dataSize, 0, 0, null, null, voiceNote, false, false, false, null, null, null, null, null)); + super(context, new UriAttachment(uri, contentType, AttachmentTable.TRANSFER_PROGRESS_STARTED, dataSize, 0, 0, null, null, voiceNote, false, false, false, null, null, null, null, null)); } public AudioSlide(Context context, Attachment attachment) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/ImageSlide.java b/app/src/main/java/org/thoughtcrime/securesms/mms/ImageSlide.java index 1445161c5..7e3c06103 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/ImageSlide.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/ImageSlide.java @@ -28,7 +28,7 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.blurhash.BlurHash; -import org.thoughtcrime.securesms.database.AttachmentDatabase.TransformProperties; +import org.thoughtcrime.securesms.database.AttachmentTable.TransformProperties; import org.thoughtcrime.securesms.util.MediaUtil; public class ImageSlide extends Slide { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingExpirationUpdateMessage.java b/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingExpirationUpdateMessage.java index fa8d595ac..9ea2c1197 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingExpirationUpdateMessage.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingExpirationUpdateMessage.java @@ -1,6 +1,6 @@ package org.thoughtcrime.securesms.mms; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.database.model.StoryType; import org.thoughtcrime.securesms.recipients.Recipient; @@ -14,7 +14,7 @@ public class OutgoingExpirationUpdateMessage extends OutgoingSecureMediaMessage "", new LinkedList<>(), sentTimeMillis, - ThreadDatabase.DistributionTypes.CONVERSATION, + ThreadTable.DistributionTypes.CONVERSATION, expiresIn, false, StoryType.NONE, diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingGroupUpdateMessage.java b/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingGroupUpdateMessage.java index 16affa209..4e2be16aa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingGroupUpdateMessage.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingGroupUpdateMessage.java @@ -5,7 +5,7 @@ import androidx.annotation.Nullable; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.contactshare.Contact; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.database.model.Mention; import org.thoughtcrime.securesms.database.model.StoryType; import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context; @@ -36,7 +36,7 @@ public final class OutgoingGroupUpdateMessage extends OutgoingSecureMediaMessage groupContext.getEncodedGroupContext(), avatar, sentTimeMillis, - ThreadDatabase.DistributionTypes.CONVERSATION, + ThreadTable.DistributionTypes.CONVERSATION, expiresIn, viewOnce, StoryType.NONE, diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingPaymentMessages.kt b/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingPaymentMessages.kt index f26d3aa00..f590be882 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingPaymentMessages.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingPaymentMessages.kt @@ -1,6 +1,6 @@ package org.thoughtcrime.securesms.mms -import org.thoughtcrime.securesms.database.ThreadDatabase +import org.thoughtcrime.securesms.database.ThreadTable import org.thoughtcrime.securesms.database.model.StoryType import org.thoughtcrime.securesms.recipients.Recipient import java.util.LinkedList @@ -17,7 +17,7 @@ class OutgoingRequestToActivatePaymentMessages( "", LinkedList(), sentTimeMillis, - ThreadDatabase.DistributionTypes.CONVERSATION, + ThreadTable.DistributionTypes.CONVERSATION, expiresIn, false, StoryType.NONE, @@ -46,7 +46,7 @@ class OutgoingPaymentsActivatedMessages( "", LinkedList(), sentTimeMillis, - ThreadDatabase.DistributionTypes.CONVERSATION, + ThreadTable.DistributionTypes.CONVERSATION, expiresIn, false, StoryType.NONE, @@ -72,7 +72,7 @@ class OutgoingPaymentsNotificationMessage( paymentUuid, LinkedList(), sentTimeMillis, - ThreadDatabase.DistributionTypes.CONVERSATION, + ThreadTable.DistributionTypes.CONVERSATION, expiresIn, false, StoryType.NONE, diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/PartAuthority.java b/app/src/main/java/org/thoughtcrime/securesms/mms/PartAuthority.java index a9493c7fe..68e7c657b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/PartAuthority.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/PartAuthority.java @@ -12,7 +12,7 @@ import org.thoughtcrime.securesms.BuildConfig; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.attachments.AttachmentId; import org.thoughtcrime.securesms.avatar.AvatarPickerStorage; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.emoji.EmojiFiles; import org.thoughtcrime.securesms.providers.BlobProvider; @@ -153,7 +153,7 @@ public class PartAuthority { } } - public static @Nullable AttachmentDatabase.TransformProperties getAttachmentTransformProperties(@NonNull Uri uri) { + public static @Nullable AttachmentTable.TransformProperties getAttachmentTransformProperties(@NonNull Uri uri) { int match = uriMatcher.match(uri); switch (match) { case PART_ROW: diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/Slide.java b/app/src/main/java/org/thoughtcrime/securesms/mms/Slide.java index 07c6d8c9c..3f5714010 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/Slide.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/Slide.java @@ -29,7 +29,7 @@ import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.attachments.UriAttachment; import org.thoughtcrime.securesms.audio.AudioHash; import org.thoughtcrime.securesms.blurhash.BlurHash; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.stickers.StickerLocator; import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.Util; @@ -133,8 +133,8 @@ public abstract class Slide { } public boolean isPendingDownload() { - return getTransferState() == AttachmentDatabase.TRANSFER_PROGRESS_FAILED || - getTransferState() == AttachmentDatabase.TRANSFER_PROGRESS_PENDING; + return getTransferState() == AttachmentTable.TRANSFER_PROGRESS_FAILED || + getTransferState() == AttachmentTable.TRANSFER_PROGRESS_PENDING; } public int getTransferState() { @@ -193,13 +193,13 @@ public abstract class Slide { boolean borderless, boolean gif, boolean quote, - @Nullable AttachmentDatabase.TransformProperties transformProperties) + @Nullable AttachmentTable.TransformProperties transformProperties) { String resolvedType = Optional.ofNullable(MediaUtil.getMimeType(context, uri)).orElse(defaultMime); String fastPreflightId = String.valueOf(new SecureRandom().nextLong()); return new UriAttachment(uri, resolvedType, - AttachmentDatabase.TRANSFER_PROGRESS_STARTED, + AttachmentTable.TRANSFER_PROGRESS_STARTED, size, width, height, diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/SlideFactory.java b/app/src/main/java/org/thoughtcrime/securesms/mms/SlideFactory.java index 889789a3f..80a7e9e7d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/SlideFactory.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/SlideFactory.java @@ -9,11 +9,10 @@ import android.util.Pair; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.annotation.WorkerThread; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.blurhash.BlurHash; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.util.MediaUtil; import java.io.IOException; @@ -41,7 +40,7 @@ public final class SlideFactory { * * @return A Slide with all the information we can gather about it. */ - public static @Nullable Slide getSlide(@NonNull Context context, @Nullable String contentType, @NonNull Uri uri, int width, int height, @Nullable AttachmentDatabase.TransformProperties transformProperties) { + public static @Nullable Slide getSlide(@NonNull Context context, @Nullable String contentType, @NonNull Uri uri, int width, int height, @Nullable AttachmentTable.TransformProperties transformProperties) { MediaType mediaType = MediaType.from(contentType); try { @@ -65,7 +64,7 @@ public final class SlideFactory { @NonNull Uri uri, int width, int height, - @Nullable AttachmentDatabase.TransformProperties transformProperties + @Nullable AttachmentTable.TransformProperties transformProperties ) { long start = System.currentTimeMillis(); @@ -99,7 +98,7 @@ public final class SlideFactory { @NonNull Uri uri, int width, int height, - @Nullable AttachmentDatabase.TransformProperties transformProperties + @Nullable AttachmentTable.TransformProperties transformProperties ) throws IOException { long start = System.currentTimeMillis(); @@ -162,7 +161,7 @@ public final class SlideFactory { int width, int height, boolean gif, - @Nullable AttachmentDatabase.TransformProperties transformProperties) + @Nullable AttachmentTable.TransformProperties transformProperties) { if (mimeType == null) { mimeType = "application/octet-stream"; diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/VideoSlide.java b/app/src/main/java/org/thoughtcrime/securesms/mms/VideoSlide.java index 9b6cb775c..46f693ddc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/VideoSlide.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/VideoSlide.java @@ -27,7 +27,7 @@ import androidx.annotation.Nullable; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.attachments.Attachment; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.giph.mp4.GiphyMp4PlaybackPolicy; import org.thoughtcrime.securesms.util.MediaUtil; @@ -37,11 +37,11 @@ public class VideoSlide extends Slide { this(context, uri, dataSize, gif, null, null); } - public VideoSlide(Context context, Uri uri, long dataSize, boolean gif, @Nullable String caption, @Nullable AttachmentDatabase.TransformProperties transformProperties) { + public VideoSlide(Context context, Uri uri, long dataSize, boolean gif, @Nullable String caption, @Nullable AttachmentTable.TransformProperties transformProperties) { super(context, constructAttachmentFromUri(context, uri, MediaUtil.VIDEO_UNSPECIFIED, dataSize, 0, 0, MediaUtil.hasVideoThumbnail(context, uri), null, caption, null, null, null, false, false, gif, false, transformProperties)); } - public VideoSlide(Context context, Uri uri, long dataSize, boolean gif, int width, int height, @Nullable String caption, @Nullable AttachmentDatabase.TransformProperties transformProperties) { + public VideoSlide(Context context, Uri uri, long dataSize, boolean gif, int width, int height, @Nullable String caption, @Nullable AttachmentTable.TransformProperties transformProperties) { super(context, constructAttachmentFromUri(context, uri, MediaUtil.VIDEO_UNSPECIFIED, dataSize, width, height, MediaUtil.hasVideoThumbnail(context, uri), null, caption, null, null, null, false, false, gif, false, transformProperties)); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java index 8239eec74..2e8b1644a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java @@ -12,9 +12,9 @@ import com.annimon.stream.Stream; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.MessageDatabase.ExpirationInfo; -import org.thoughtcrime.securesms.database.MessageDatabase.MarkedMessageInfo; -import org.thoughtcrime.securesms.database.MessageDatabase.SyncMessageId; +import org.thoughtcrime.securesms.database.MessageTable.ExpirationInfo; +import org.thoughtcrime.securesms.database.MessageTable.MarkedMessageInfo; +import org.thoughtcrime.securesms.database.MessageTable.SyncMessageId; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobs.MultiDeviceReadUpdateJob; diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationChannels.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationChannels.java index 0c3a1e7cd..6811c28f4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationChannels.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationChannels.java @@ -6,7 +6,6 @@ import android.app.NotificationChannel; import android.app.NotificationChannelGroup; import android.app.NotificationManager; import android.content.ActivityNotFoundException; -import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.media.AudioAttributes; @@ -27,8 +26,8 @@ import com.annimon.stream.Stream; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.BuildConfig; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.database.RecipientDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase.VibrateState; +import org.thoughtcrime.securesms.database.RecipientTable; +import org.thoughtcrime.securesms.database.RecipientTable.VibrateState; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -190,9 +189,9 @@ public class NotificationChannels { return; } - RecipientDatabase db = SignalDatabase.recipients(); + RecipientTable db = SignalDatabase.recipients(); - try (RecipientDatabase.RecipientReader reader = db.getRecipientsWithNotificationChannels()) { + try (RecipientTable.RecipientReader reader = db.getRecipientsWithNotificationChannels()) { Recipient recipient; while ((recipient = reader.getNext()) != null) { NotificationManager notificationManager = ServiceUtil.getNotificationManager(context); @@ -559,11 +558,11 @@ public class NotificationChannels { Log.d(TAG, "ensureCustomChannelConsistency()"); NotificationManager notificationManager = ServiceUtil.getNotificationManager(context); - RecipientDatabase db = SignalDatabase.recipients(); + RecipientTable db = SignalDatabase.recipients(); List customRecipients = new ArrayList<>(); Set customChannelIds = new HashSet<>(); - try (RecipientDatabase.RecipientReader reader = db.getRecipientsWithNotificationChannels()) { + try (RecipientTable.RecipientReader reader = db.getRecipientsWithNotificationChannels()) { Recipient recipient; while ((recipient = reader.getNext()) != null) { customRecipients.add(recipient); @@ -733,9 +732,9 @@ public class NotificationChannels { @WorkerThread @TargetApi(26) private void updateAllRecipientChannelLedColors(@NonNull NotificationManager notificationManager, @NonNull String color) { - RecipientDatabase database = SignalDatabase.recipients(); + RecipientTable database = SignalDatabase.recipients(); - try (RecipientDatabase.RecipientReader recipients = database.getRecipientsWithNotificationChannels()) { + try (RecipientTable.RecipientReader recipients = database.getRecipientsWithNotificationChannels()) { Recipient recipient; while ((recipient = recipients.getNext()) != null) { assert recipient.getNotificationChannel() != null; diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java index 63f2b91c5..586f39c0a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java @@ -26,7 +26,7 @@ import android.os.Bundle; import androidx.core.app.RemoteInput; import org.signal.core.util.concurrent.SignalExecutors; -import org.thoughtcrime.securesms.database.MessageDatabase.MarkedMessageInfo; +import org.thoughtcrime.securesms.database.MessageTable.MarkedMessageInfo; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.ParentStoryId; import org.thoughtcrime.securesms.database.model.StoryType; diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/ReplyMethod.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/ReplyMethod.java index 966e88078..c755ddf1d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/ReplyMethod.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/ReplyMethod.java @@ -4,7 +4,7 @@ import android.content.Context; import androidx.annotation.NonNull; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; @@ -17,7 +17,7 @@ public enum ReplyMethod { public static @NonNull ReplyMethod forRecipient(Context context, Recipient recipient) { if (recipient.isGroup()) { return ReplyMethod.GroupMessage; - } else if (SignalStore.account().isRegistered() && recipient.getRegistered() == RecipientDatabase.RegisteredState.REGISTERED && !recipient.isForceSmsSelection()) { + } else if (SignalStore.account().isRegistered() && recipient.getRegistered() == RecipientTable.RegisteredState.REGISTERED && !recipient.isForceSmsSelection()) { return ReplyMethod.SecureMessage; } else { return ReplyMethod.UnsecuredSmsMessage; diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier.kt b/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier.kt index d82f613fe..2ab195cef 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier.kt @@ -14,7 +14,7 @@ import me.leolin.shortcutbadger.ShortcutBadger import org.signal.core.util.PendingIntentFlags import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.R -import org.thoughtcrime.securesms.database.MessageDatabase +import org.thoughtcrime.securesms.database.MessageTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.keyvalue.SignalStore @@ -141,16 +141,16 @@ class DefaultMessageNotifier(context: Application) : MessageNotifier { if (state.muteFilteredMessages.isNotEmpty()) { Log.i(TAG, "Marking ${state.muteFilteredMessages.size} muted messages as notified to skip notification") state.muteFilteredMessages.forEach { item -> - val messageDatabase: MessageDatabase = if (item.isMms) SignalDatabase.mms else SignalDatabase.sms - messageDatabase.markAsNotified(item.id) + val messageTable: MessageTable = if (item.isMms) SignalDatabase.mms else SignalDatabase.sms + messageTable.markAsNotified(item.id) } } if (state.profileFilteredMessages.isNotEmpty()) { Log.i(TAG, "Marking ${state.profileFilteredMessages.size} profile filtered messages as notified to skip notification") state.profileFilteredMessages.forEach { item -> - val messageDatabase: MessageDatabase = if (item.isMms) SignalDatabase.mms else SignalDatabase.sms - messageDatabase.markAsNotified(item.id) + val messageTable: MessageTable = if (item.isMms) SignalDatabase.mms else SignalDatabase.sms + messageTable.markAsNotified(item.id) } } @@ -158,8 +158,8 @@ class DefaultMessageNotifier(context: Application) : MessageNotifier { Log.i(TAG, "Marking ${state.conversations.size} conversations as notified to skip notification") state.conversations.forEach { conversation -> conversation.notificationItems.forEach { item -> - val messageDatabase: MessageDatabase = if (item.isMms) SignalDatabase.mms else SignalDatabase.sms - messageDatabase.markAsNotified(item.id) + val messageTable: MessageTable = if (item.isMms) SignalDatabase.mms else SignalDatabase.sms + messageTable.markAsNotified(item.id) } } return @@ -172,8 +172,8 @@ class DefaultMessageNotifier(context: Application) : MessageNotifier { .forEach { conversation -> cleanedUpThreads += conversation.thread conversation.notificationItems.forEach { item -> - val messageDatabase: MessageDatabase = if (item.isMms) SignalDatabase.mms else SignalDatabase.sms - messageDatabase.markAsNotified(item.id) + val messageTable: MessageTable = if (item.isMms) SignalDatabase.mms else SignalDatabase.sms + messageTable.markAsNotified(item.id) } } if (cleanedUpThreads.isNotEmpty()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationBuilder.kt b/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationBuilder.kt index e967d1832..89c03511d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationBuilder.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationBuilder.kt @@ -18,8 +18,8 @@ import androidx.core.graphics.drawable.IconCompat import org.signal.core.util.PendingIntentFlags.mutable import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.conversation.ConversationIntents -import org.thoughtcrime.securesms.database.GroupDatabase -import org.thoughtcrime.securesms.database.RecipientDatabase +import org.thoughtcrime.securesms.database.GroupTable +import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.notifications.NotificationChannels @@ -117,7 +117,7 @@ sealed class NotificationBuilder(protected val context: Context) { fun addReplyActions(conversation: NotificationConversation) { if (privacy.isDisplayMessage && isNotLocked && !conversation.recipient.isPushV1Group && RecipientUtil.isMessageRequestAccepted(context, conversation.recipient)) { if (conversation.recipient.isPushV2Group) { - val group: Optional = SignalDatabase.groups.getGroup(conversation.recipient.requireGroupId()) + val group: Optional = SignalDatabase.groups.getGroup(conversation.recipient.requireGroupId()) if (group.isPresent && group.get().isAnnouncementGroup && !group.get().isAdmin(Recipient.self())) { return } @@ -342,7 +342,7 @@ sealed class NotificationBuilder(protected val context: Context) { builder.setSound(ringtone) } - if (vibrate == RecipientDatabase.VibrateState.ENABLED || vibrate == RecipientDatabase.VibrateState.DEFAULT && defaultVibrate) { + if (vibrate == RecipientTable.VibrateState.ENABLED || vibrate == RecipientTable.VibrateState.DEFAULT && defaultVibrate) { builder.setDefaults(Notification.DEFAULT_VIBRATE) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationStateProvider.kt b/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationStateProvider.kt index 6328782c9..5ac9eaf79 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationStateProvider.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationStateProvider.kt @@ -4,9 +4,9 @@ import androidx.annotation.WorkerThread import org.signal.core.util.CursorUtil import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.database.MmsSmsColumns -import org.thoughtcrime.securesms.database.MmsSmsDatabase +import org.thoughtcrime.securesms.database.MmsSmsTable import org.thoughtcrime.securesms.database.NoSuchMessageException -import org.thoughtcrime.securesms.database.RecipientDatabase +import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.MessageId import org.thoughtcrime.securesms.database.model.MessageRecord @@ -31,7 +31,7 @@ object NotificationStateProvider { return NotificationState.EMPTY } - MmsSmsDatabase.readerFor(unreadMessages).use { reader -> + MmsSmsTable.readerFor(unreadMessages).use { reader -> var record: MessageRecord? = reader.next while (record != null) { val threadRecipient: Recipient? = SignalDatabase.threads.getRecipientForThreadId(record.threadId) @@ -165,7 +165,7 @@ object NotificationStateProvider { } private val Recipient.isDoNotNotifyMentions: Boolean - get() = mentionSetting == RecipientDatabase.MentionSetting.DO_NOT_NOTIFY + get() = mentionSetting == RecipientTable.MentionSetting.DO_NOT_NOTIFY } private enum class MessageInclusion { diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/DataExportUtil.java b/app/src/main/java/org/thoughtcrime/securesms/payments/DataExportUtil.java index 944fc4797..6fc50b8e9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/DataExportUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/DataExportUtil.java @@ -6,7 +6,7 @@ import android.os.Build; import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; -import org.thoughtcrime.securesms.database.PaymentDatabase; +import org.thoughtcrime.securesms.database.PaymentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -33,8 +33,8 @@ public final class DataExportUtil { throw new AssertionError(); } - List paymentTransactions = SignalDatabase.payments().getAll(); - MobileCoinLedgerWrapper ledger = SignalStore.paymentsValues().liveMobileCoinLedger().getValue(); + List paymentTransactions = SignalDatabase.payments().getAll(); + MobileCoinLedgerWrapper ledger = SignalStore.paymentsValues().liveMobileCoinLedger().getValue(); List reconciled = LedgerReconcile.reconcile(paymentTransactions, Objects.requireNonNull(ledger)); return createTsv(reconciled); diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/PaymentTransactionLiveData.java b/app/src/main/java/org/thoughtcrime/securesms/payments/PaymentTransactionLiveData.java index 14ae2b9c2..a1497c47e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/PaymentTransactionLiveData.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/PaymentTransactionLiveData.java @@ -5,7 +5,7 @@ import androidx.lifecycle.LiveData; import org.signal.core.util.concurrent.SignalExecutors; import org.thoughtcrime.securesms.database.DatabaseObserver; -import org.thoughtcrime.securesms.database.PaymentDatabase; +import org.thoughtcrime.securesms.database.PaymentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.util.concurrent.SerialMonoLifoExecutor; @@ -13,10 +13,10 @@ import org.thoughtcrime.securesms.util.concurrent.SerialMonoLifoExecutor; import java.util.UUID; import java.util.concurrent.Executor; -public final class PaymentTransactionLiveData extends LiveData { +public final class PaymentTransactionLiveData extends LiveData { private final UUID paymentId; - private final PaymentDatabase paymentDatabase; + private final PaymentTable paymentDatabase; private final DatabaseObserver.Observer observer; private final Executor executor; diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentViewModel.java index f69eef699..731d8634a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentViewModel.java @@ -10,7 +10,7 @@ import androidx.lifecycle.ViewModelProvider; import org.signal.core.util.logging.Log; import org.signal.core.util.money.FiatMoney; -import org.thoughtcrime.securesms.database.PaymentDatabase.PaymentTransaction; +import org.thoughtcrime.securesms.database.PaymentTable.PaymentTransaction; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.payments.CreatePaymentDetails; diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsRepository.java b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsRepository.java index 4152a18ca..2e5d3a357 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsRepository.java @@ -9,7 +9,7 @@ import androidx.lifecycle.LiveData; import com.annimon.stream.Stream; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.PaymentDatabase; +import org.thoughtcrime.securesms.database.PaymentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.payments.Direction; @@ -29,7 +29,7 @@ public class PaymentsRepository { private static final String TAG = Log.tag(PaymentsRepository.class); - private final PaymentDatabase paymentDatabase; + private final PaymentTable paymentDatabase; private final LiveData> recentPayments; private final LiveData> recentSentPayments; private final LiveData> recentReceivedPayments; @@ -37,8 +37,8 @@ public class PaymentsRepository { public PaymentsRepository() { paymentDatabase = SignalDatabase.payments(); - LiveData> localPayments = paymentDatabase.getAllLive(); - LiveData ledger = SignalStore.paymentsValues().liveMobileCoinLedger(); + LiveData> localPayments = paymentDatabase.getAllLive(); + LiveData ledger = SignalStore.paymentsValues().liveMobileCoinLedger(); //noinspection NullableProblems this.recentPayments = LiveDataUtil.mapAsync(LiveDataUtil.combineLatest(localPayments, ledger, Pair::create), p -> reconcile(p.first, p.second)); @@ -47,7 +47,7 @@ public class PaymentsRepository { } @WorkerThread - private @NonNull List reconcile(@NonNull Collection paymentTransactions, @NonNull MobileCoinLedgerWrapper ledger) { + private @NonNull List reconcile(@NonNull Collection paymentTransactions, @NonNull MobileCoinLedgerWrapper ledger) { List reconcile = LedgerReconcile.reconcile(paymentTransactions, ledger); updateDatabaseWithNewBlockInformation(reconcile); diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/details/PaymentDetailsFragment.java b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/details/PaymentDetailsFragment.java index 2df664400..ca27d723e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/details/PaymentDetailsFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/details/PaymentDetailsFragment.java @@ -25,7 +25,7 @@ import org.thoughtcrime.securesms.LoggingFragment; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.badges.BadgeImageView; import org.thoughtcrime.securesms.components.AvatarImageView; -import org.thoughtcrime.securesms.database.PaymentDatabase; +import org.thoughtcrime.securesms.database.PaymentTable; import org.thoughtcrime.securesms.payments.Direction; import org.thoughtcrime.securesms.payments.MoneyView; import org.thoughtcrime.securesms.payments.Payee; @@ -211,7 +211,7 @@ public final class PaymentDetailsFragment extends LoggingFragment { } } - private @NonNull CharSequence describeSentTo(@NonNull PaymentsDetailsViewModel.ViewState state, @NonNull PaymentDatabase.PaymentTransaction payment) { + private @NonNull CharSequence describeSentTo(@NonNull PaymentsDetailsViewModel.ViewState state, @NonNull PaymentTable.PaymentTransaction payment) { if (payment.getDirection().isSent()) { return SpanUtil.insertSingleSpan(getResources(), R.string.PaymentsDetailsFragment__sent_to_s, describe(payment.getPayee(), state.getRecipient())); } else { @@ -219,7 +219,7 @@ public final class PaymentDetailsFragment extends LoggingFragment { } } - private @NonNull CharSequence describeStatus(@NonNull PaymentDatabase.PaymentTransaction payment) { + private @NonNull CharSequence describeStatus(@NonNull PaymentTable.PaymentTransaction payment) { switch (payment.getState()) { case INITIAL: return getResources().getString(R.string.PaymentsDetailsFragment__submitting_payment); diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/details/PaymentsDetailsViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/details/PaymentsDetailsViewModel.java index fecba7312..c48a9ac2e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/details/PaymentsDetailsViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/details/PaymentsDetailsViewModel.java @@ -8,7 +8,7 @@ import androidx.lifecycle.Transformations; import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModelProvider; -import org.thoughtcrime.securesms.database.PaymentDatabase; +import org.thoughtcrime.securesms.database.PaymentTable; import org.thoughtcrime.securesms.payments.PaymentTransactionLiveData; import org.thoughtcrime.securesms.payments.UnreadPaymentsRepository; import org.thoughtcrime.securesms.recipients.Recipient; @@ -46,10 +46,10 @@ final class PaymentsDetailsViewModel extends ViewModel { static class ViewState { - private final PaymentDatabase.PaymentTransaction payment; - private final Recipient recipient; + private final PaymentTable.PaymentTransaction payment; + private final Recipient recipient; - private ViewState(@NonNull PaymentDatabase.PaymentTransaction payment, @NonNull Recipient recipient) { + private ViewState(@NonNull PaymentTable.PaymentTransaction payment, @NonNull Recipient recipient) { this.payment = payment; this.recipient = recipient; } @@ -58,7 +58,7 @@ final class PaymentsDetailsViewModel extends ViewModel { return recipient; } - PaymentDatabase.PaymentTransaction getPayment() { + PaymentTable.PaymentTransaction getPayment() { return payment; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/ApplicationPreferencesViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/preferences/ApplicationPreferencesViewModel.java index 1e287dc2c..233d37e84 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/ApplicationPreferencesViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/ApplicationPreferencesViewModel.java @@ -12,7 +12,7 @@ import androidx.lifecycle.ViewModelProvider; import org.signal.core.util.concurrent.SignalExecutors; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.database.MediaDatabase; +import org.thoughtcrime.securesms.database.MediaTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.preferences.widgets.StorageGraphView; @@ -32,7 +32,7 @@ public class ApplicationPreferencesViewModel extends ViewModel { void refreshStorageBreakdown(@NonNull Context context) { SignalExecutors.BOUNDED.execute(() -> { - MediaDatabase.StorageBreakdown breakdown = SignalDatabase.media().getStorageBreakdown(); + MediaTable.StorageBreakdown breakdown = SignalDatabase.media().getStorageBreakdown(); StorageGraphView.StorageBreakdown latestStorageBreakdown = new StorageGraphView.StorageBreakdown(Arrays.asList( new StorageGraphView.Entry(ContextCompat.getColor(context, R.color.storage_color_photos), breakdown.getPhotoSize()), diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/StoragePreferenceFragment.java b/app/src/main/java/org/thoughtcrime/securesms/preferences/StoragePreferenceFragment.java index c78c051e7..03ff822a6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/StoragePreferenceFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/StoragePreferenceFragment.java @@ -28,7 +28,7 @@ import org.thoughtcrime.securesms.components.settings.CustomizableSingleSelectSe import org.thoughtcrime.securesms.components.settings.SingleSelectSetting; import org.thoughtcrime.securesms.components.settings.app.wrapped.SettingsWrapperFragment; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.keyvalue.KeepMessagesDuration; import org.thoughtcrime.securesms.keyvalue.SettingsValues; @@ -298,7 +298,7 @@ public class StoragePreferenceFragment extends ListSummaryPreferenceFragment { KeepMessagesDuration keepMessagesDuration = SignalStore.settings().getKeepMessagesDuration(); long trimBeforeDate = keepMessagesDuration != KeepMessagesDuration.FOREVER ? System.currentTimeMillis() - keepMessagesDuration.getDuration() - : ThreadDatabase.NO_TRIM_BEFORE_DATE_SET; + : ThreadTable.NO_TRIM_BEFORE_DATE_SET; SignalExecutors.BOUNDED.execute(() -> SignalDatabase.threads().trimAllThreads(length, trimBeforeDate)); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditGroupProfileRepository.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditGroupProfileRepository.java index 0c561a788..507a3dc0a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditGroupProfileRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditGroupProfileRepository.java @@ -10,7 +10,7 @@ import androidx.core.util.Consumer; import org.signal.core.util.StreamUtil; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.conversation.colors.AvatarColor; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.groups.GroupChangeException; import org.thoughtcrime.securesms.groups.GroupId; @@ -92,7 +92,7 @@ class EditGroupProfileRepository implements EditProfileRepository { return SignalDatabase.groups() .getGroup(recipientId) - .map(GroupDatabase.GroupRecord::getDescription) + .map(GroupTable.GroupRecord::getDescription) .orElse(""); }, descriptionConsumer::accept); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewCardRepository.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewCardRepository.java index d55fe563d..37f82ba20 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewCardRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewCardRepository.java @@ -9,7 +9,7 @@ import com.annimon.stream.Stream; import org.signal.core.util.concurrent.SignalExecutors; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupChangeException; import org.thoughtcrime.securesms.groups.GroupId; @@ -86,10 +86,10 @@ class ReviewCardRepository { ApplicationDependencies.getJobManager().add(MultiDeviceMessageRequestResponseJob.forDelete(recipientId)); } - ThreadDatabase threadDatabase = SignalDatabase.threads(); - long threadId = Objects.requireNonNull(threadDatabase.getThreadIdFor(recipientId)); + ThreadTable threadTable = SignalDatabase.threads(); + long threadId = Objects.requireNonNull(threadTable.getThreadIdFor(recipientId)); - threadDatabase.deleteConversation(threadId); + threadTable.deleteConversation(threadId); onActionCompleteListener.run(); }); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewUtil.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewUtil.java index 1d0b96c8c..9fef46f01 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewUtil.java @@ -7,7 +7,7 @@ import androidx.annotation.WorkerThread; import com.annimon.stream.Stream; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.databaseprotos.ProfileChangeDetails; @@ -60,7 +60,7 @@ public final class ReviewUtil { } List members = SignalDatabase.groups() - .getGroupMembers(groupId, GroupDatabase.MemberSet.FULL_MEMBERS_INCLUDING_SELF); + .getGroupMembers(groupId, GroupTable.MemberSet.FULL_MEMBERS_INCLUDING_SELF); List changed = Stream.of(profileChangeRecords) .distinctBy(record -> record.getRecipient().getId()) @@ -105,7 +105,7 @@ public final class ReviewUtil { return Stream.of(SignalDatabase.groups() .getPushGroupsContainingMember(recipientId)) .filter(g -> g.getMembers().contains(Recipient.self().getId())) - .map(GroupDatabase.GroupRecord::getRecipientId) + .map(GroupTable.GroupRecord::getRecipientId) .toList() .size(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/providers/BlobProvider.java b/app/src/main/java/org/thoughtcrime/securesms/providers/BlobProvider.java index 7a0a002ad..20a12827b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/providers/BlobProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/providers/BlobProvider.java @@ -22,7 +22,7 @@ import org.thoughtcrime.securesms.crypto.AttachmentSecret; import org.thoughtcrime.securesms.crypto.AttachmentSecretProvider; import org.thoughtcrime.securesms.crypto.ModernDecryptingPartInputStream; import org.thoughtcrime.securesms.crypto.ModernEncryptingPartOutputStream; -import org.thoughtcrime.securesms.database.DraftDatabase; +import org.thoughtcrime.securesms.database.DraftTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.util.IOFunction; import org.thoughtcrime.securesms.util.Util; @@ -244,8 +244,8 @@ public class BlobProvider { return; } - DraftDatabase draftDatabase = SignalDatabase.drafts(); - DraftDatabase.Drafts voiceNoteDrafts = draftDatabase.getAllVoiceNoteDrafts(); + DraftTable draftDatabase = SignalDatabase.drafts(); + DraftTable.Drafts voiceNoteDrafts = draftDatabase.getAllVoiceNoteDrafts(); @SuppressWarnings("ConstantConditions") List draftFileNames = voiceNoteDrafts.stream() diff --git a/app/src/main/java/org/thoughtcrime/securesms/providers/PartProvider.java b/app/src/main/java/org/thoughtcrime/securesms/providers/PartProvider.java index ad7f161f2..152ad927e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/providers/PartProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/providers/PartProvider.java @@ -41,7 +41,7 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.BuildConfig; import org.thoughtcrime.securesms.attachments.AttachmentId; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.mms.PartUriParser; import org.thoughtcrime.securesms.service.KeyCachingService; @@ -215,10 +215,10 @@ public final class PartProvider extends BaseContentProvider { @RequiresApi(26) private static final class ProxyCallback extends ProxyFileDescriptorCallback { - private AttachmentDatabase attachments; - private AttachmentId attachmentId; + private AttachmentTable attachments; + private AttachmentId attachmentId; - public ProxyCallback(@NonNull AttachmentDatabase attachments, @NonNull AttachmentId attachmentId) { + public ProxyCallback(@NonNull AttachmentTable attachments, @NonNull AttachmentId attachmentId) { this.attachments = attachments; this.attachmentId = attachmentId; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipient.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipient.java index 7eb840ee5..a5619b673 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipient.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipient.java @@ -13,10 +13,10 @@ import com.annimon.stream.Stream; import org.signal.core.util.ThreadUtil; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.DistributionListDatabase; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.GroupDatabase.GroupRecord; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.DistributionListTables; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.GroupTable.GroupRecord; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.DistributionListRecord; import org.thoughtcrime.securesms.database.model.RecipientRecord; @@ -41,20 +41,20 @@ public final class LiveRecipient { private final LiveData observableLiveDataResolved; private final Set observers; private final Observer foreverObserver; - private final AtomicReference recipient; - private final RecipientDatabase recipientDatabase; - private final GroupDatabase groupDatabase; - private final DistributionListDatabase distributionListDatabase; - private final MutableLiveData refreshForceNotify; + private final AtomicReference recipient; + private final RecipientTable recipientTable; + private final GroupTable groupDatabase; + private final DistributionListTables distributionListTables; + private final MutableLiveData refreshForceNotify; LiveRecipient(@NonNull Context context, @NonNull Recipient defaultRecipient) { this.context = context.getApplicationContext(); this.liveData = new MutableLiveData<>(defaultRecipient); - this.recipient = new AtomicReference<>(defaultRecipient); - this.recipientDatabase = SignalDatabase.recipients(); - this.groupDatabase = SignalDatabase.groups(); - this.distributionListDatabase = SignalDatabase.distributionLists(); - this.observers = new CopyOnWriteArraySet<>(); + this.recipient = new AtomicReference<>(defaultRecipient); + this.recipientTable = SignalDatabase.recipients(); + this.groupDatabase = SignalDatabase.groups(); + this.distributionListTables = SignalDatabase.distributionLists(); + this.observers = new CopyOnWriteArraySet<>(); this.foreverObserver = recipient -> { ThreadUtil.postToMain(() -> { for (RecipientForeverObserver o : observers) { @@ -191,7 +191,7 @@ public final class LiveRecipient { } private @NonNull Recipient fetchAndCacheRecipientFromDisk(@NonNull RecipientId id) { - RecipientRecord record = recipientDatabase.getRecord(id); + RecipientRecord record = recipientTable.getRecord(id); RecipientDetails details; if (record.getGroupId() != null) { details = getGroupRecipientDetails(record); @@ -227,7 +227,7 @@ public final class LiveRecipient { @WorkerThread private @NonNull RecipientDetails getDistributionListRecipientDetails(@NonNull RecipientRecord record) { - DistributionListRecord groupRecord = distributionListDatabase.getList(Objects.requireNonNull(record.getDistributionListId())); + DistributionListRecord groupRecord = distributionListTables.getList(Objects.requireNonNull(record.getDistributionListId())); // TODO [stories] We'll have to see what the perf is like for very large distribution lists. We may not be able to support fetching all the members. if (groupRecord != null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipientCache.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipientCache.java index 3885174db..04e41455b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipientCache.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipientCache.java @@ -1,6 +1,5 @@ package org.thoughtcrime.securesms.recipients; -import android.annotation.SuppressLint; import android.content.Context; import android.database.Cursor; @@ -12,10 +11,10 @@ import androidx.annotation.VisibleForTesting; import org.signal.core.util.ThreadUtil; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.RecipientDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase.MissingRecipientException; +import org.thoughtcrime.securesms.database.RecipientTable; +import org.thoughtcrime.securesms.database.RecipientTable.MissingRecipientException; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.database.model.ThreadRecord; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.signal.core.util.CursorUtil; @@ -41,7 +40,7 @@ public final class LiveRecipientCache { private static final int CONTACT_CACHE_WARM_MAX = 50; private final Context context; - private final RecipientDatabase recipientDatabase; + private final RecipientTable recipientTable; private final Map recipients; private final LiveRecipient unknown; private final Executor resolveExecutor; @@ -55,9 +54,9 @@ public final class LiveRecipientCache { @VisibleForTesting public LiveRecipientCache(@NonNull Context context, @NonNull Executor executor) { - this.context = context.getApplicationContext(); - this.recipientDatabase = SignalDatabase.recipients(); - this.recipients = new LRUCache<>(CACHE_MAX); + this.context = context.getApplicationContext(); + this.recipientTable = SignalDatabase.recipients(); + this.recipients = new LRUCache<>(CACHE_MAX); this.warmedUp = new AtomicBoolean(false); this.localRecipientId = new AtomicReference<>(null); this.unknown = new LiveRecipient(context, Recipient.UNKNOWN); @@ -161,15 +160,15 @@ public final class LiveRecipientCache { } if (localAci != null) { - selfId = recipientDatabase.getByServiceId(localAci).orElse(null); + selfId = recipientTable.getByServiceId(localAci).orElse(null); } if (selfId == null && localE164 != null) { - selfId = recipientDatabase.getByE164(localE164).orElse(null); + selfId = recipientTable.getByE164(localE164).orElse(null); } if (selfId == null) { - selfId = recipientDatabase.getAndPossiblyMerge(localAci, localE164); + selfId = recipientTable.getAndPossiblyMerge(localAci, localE164); } synchronized (localRecipientId) { @@ -213,10 +212,10 @@ public final class LiveRecipientCache { Stopwatch stopwatch = new Stopwatch("recipient-warm-up"); SignalExecutors.BOUNDED.execute(() -> { - ThreadDatabase threadDatabase = SignalDatabase.threads(); - List recipients = new ArrayList<>(); + ThreadTable threadTable = SignalDatabase.threads(); + List recipients = new ArrayList<>(); - try (ThreadDatabase.Reader reader = threadDatabase.readerFor(threadDatabase.getRecentConversationList(THREAD_CACHE_WARM_MAX, false, false))) { + try (ThreadTable.Reader reader = threadTable.readerFor(threadTable.getRecentConversationList(THREAD_CACHE_WARM_MAX, false, false))) { int i = 0; ThreadRecord record = null; @@ -235,7 +234,7 @@ public final class LiveRecipientCache { try (Cursor cursor = SignalDatabase.recipients().getNonGroupContacts(false)) { int count = 0; while (cursor != null && cursor.moveToNext() && count < CONTACT_CACHE_WARM_MAX) { - RecipientId id = RecipientId.from(CursorUtil.requireLong(cursor, RecipientDatabase.ID)); + RecipientId id = RecipientId.from(CursorUtil.requireLong(cursor, RecipientTable.ID)); Recipient.resolved(id); count++; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java index c52538a87..e5c09ca6b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java @@ -28,11 +28,11 @@ import org.thoughtcrime.securesms.contacts.avatars.TransparentContactPhoto; import org.thoughtcrime.securesms.conversation.colors.AvatarColor; import org.thoughtcrime.securesms.conversation.colors.ChatColors; import org.thoughtcrime.securesms.conversation.colors.ChatColorsPalette; -import org.thoughtcrime.securesms.database.RecipientDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase.MentionSetting; -import org.thoughtcrime.securesms.database.RecipientDatabase.RegisteredState; -import org.thoughtcrime.securesms.database.RecipientDatabase.UnidentifiedAccessMode; -import org.thoughtcrime.securesms.database.RecipientDatabase.VibrateState; +import org.thoughtcrime.securesms.database.RecipientTable; +import org.thoughtcrime.securesms.database.RecipientTable.MentionSetting; +import org.thoughtcrime.securesms.database.RecipientTable.RegisteredState; +import org.thoughtcrime.securesms.database.RecipientTable.UnidentifiedAccessMode; +import org.thoughtcrime.securesms.database.RecipientTable.VibrateState; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.DistributionListId; import org.thoughtcrime.securesms.database.model.ProfileAvatarFileDetails; @@ -71,7 +71,7 @@ import java.util.stream.Collectors; import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.schedulers.Schedulers; -import static org.thoughtcrime.securesms.database.RecipientDatabase.InsightsBannerTier; +import static org.thoughtcrime.securesms.database.RecipientTable.InsightsBannerTier; @SuppressWarnings("OptionalUsedAsFieldOrParameterType") public class Recipient { @@ -230,7 +230,7 @@ public class Recipient { throw new AssertionError("Unknown serviceId!"); } - RecipientDatabase db = SignalDatabase.recipients(); + RecipientTable db = SignalDatabase.recipients(); RecipientId recipientId; @@ -269,8 +269,8 @@ public class Recipient { throw new AssertionError(); } - RecipientDatabase db = SignalDatabase.recipients(); - RecipientId recipientId = db.getAndPossiblyMerge(serviceId, e164); + RecipientTable db = SignalDatabase.recipients(); + RecipientId recipientId = db.getAndPossiblyMerge(serviceId, e164); Recipient resolved = resolved(recipientId); @@ -297,8 +297,8 @@ public class Recipient { */ @WorkerThread public static @NonNull Recipient externalContact(@NonNull String identifier) { - RecipientDatabase db = SignalDatabase.recipients(); - RecipientId id = null; + RecipientTable db = SignalDatabase.recipients(); + RecipientId id = null; if (UuidUtil.isUuid(identifier)) { throw new AssertionError("UUIDs are not valid system contact identifiers!"); @@ -353,8 +353,8 @@ public class Recipient { public static @NonNull Recipient external(@NonNull Context context, @NonNull String identifier) { Preconditions.checkNotNull(identifier, "Identifier cannot be null!"); - RecipientDatabase db = SignalDatabase.recipients(); - RecipientId id = null; + RecipientTable db = SignalDatabase.recipients(); + RecipientId id = null; if (UuidUtil.isUuid(identifier)) { ServiceId serviceId = ServiceId.parseOrThrow(identifier); diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientDetails.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientDetails.java index 4d854eb46..3629cc626 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientDetails.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientDetails.java @@ -10,11 +10,11 @@ import org.signal.libsignal.zkgroup.profiles.ExpiringProfileKeyCredential; import org.thoughtcrime.securesms.badges.models.Badge; import org.thoughtcrime.securesms.conversation.colors.AvatarColor; import org.thoughtcrime.securesms.conversation.colors.ChatColors; -import org.thoughtcrime.securesms.database.RecipientDatabase.InsightsBannerTier; -import org.thoughtcrime.securesms.database.RecipientDatabase.MentionSetting; -import org.thoughtcrime.securesms.database.RecipientDatabase.RegisteredState; -import org.thoughtcrime.securesms.database.RecipientDatabase.UnidentifiedAccessMode; -import org.thoughtcrime.securesms.database.RecipientDatabase.VibrateState; +import org.thoughtcrime.securesms.database.RecipientTable.InsightsBannerTier; +import org.thoughtcrime.securesms.database.RecipientTable.MentionSetting; +import org.thoughtcrime.securesms.database.RecipientTable.RegisteredState; +import org.thoughtcrime.securesms.database.RecipientTable.UnidentifiedAccessMode; +import org.thoughtcrime.securesms.database.RecipientTable.VibrateState; import org.thoughtcrime.securesms.database.model.DistributionListId; import org.thoughtcrime.securesms.database.model.ProfileAvatarFileDetails; import org.thoughtcrime.securesms.database.model.RecipientRecord; diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java index 8796c7287..97c3aebae 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java @@ -10,10 +10,10 @@ import com.annimon.stream.Stream; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.contacts.sync.ContactDiscovery; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase.RegisteredState; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.RecipientTable.RegisteredState; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupChangeBusyException; import org.thoughtcrime.securesms.groups.GroupChangeException; @@ -214,8 +214,8 @@ public class RecipientUtil { return true; } - ThreadDatabase threadDatabase = SignalDatabase.threads(); - Recipient threadRecipient = threadDatabase.getRecipientForThreadId(threadId); + ThreadTable threadTable = SignalDatabase.threads(); + Recipient threadRecipient = threadTable.getRecipientForThreadId(threadId); if (threadRecipient == null) { return true; @@ -298,10 +298,10 @@ public class RecipientUtil { if (recipient.isProfileSharing()) { return true; } else { - GroupDatabase groupDatabase = SignalDatabase.groups(); + GroupTable groupDatabase = SignalDatabase.groups(); return groupDatabase.getPushGroupsContainingMember(recipient.getId()) .stream() - .anyMatch(GroupDatabase.GroupRecord::isV2Group); + .anyMatch(GroupTable.GroupRecord::isV2Group); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogRepository.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogRepository.java index 86c534263..0200e63cd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogRepository.java @@ -9,7 +9,7 @@ import androidx.core.util.Consumer; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.contacts.sync.ContactDiscovery; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.IdentityRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; @@ -106,11 +106,11 @@ final class RecipientDialogRepository { void getGroupMembership(@NonNull Consumer> onComplete) { SimpleTask.run(SignalExecutors.UNBOUNDED, () -> { - GroupDatabase groupDatabase = SignalDatabase.groups(); - List groupRecords = groupDatabase.getPushGroupsContainingMember(recipientId); - ArrayList groupRecipients = new ArrayList<>(groupRecords.size()); + GroupTable groupDatabase = SignalDatabase.groups(); + List groupRecords = groupDatabase.getPushGroupsContainingMember(recipientId); + ArrayList groupRecipients = new ArrayList<>(groupRecords.size()); - for (GroupDatabase.GroupRecord groupRecord : groupRecords) { + for (GroupTable.GroupRecord groupRecord : groupRecords) { groupRecipients.add(groupRecord.getRecipientId()); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogViewModel.java index 10771ce2f..8cf18ae30 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogViewModel.java @@ -21,7 +21,7 @@ import org.signal.libsignal.protocol.util.Pair; import org.thoughtcrime.securesms.BlockUnblockDialog; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.settings.conversation.ConversationSettingsActivity; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.model.IdentityRecord; import org.thoughtcrime.securesms.database.model.StoryViewState; import org.thoughtcrime.securesms.groups.GroupId; @@ -72,14 +72,14 @@ final class RecipientDialogViewModel extends ViewModel { if (recipientDialogRepository.getGroupId() != null && recipientDialogRepository.getGroupId().isV2() && !recipientIsSelf) { LiveGroup source = new LiveGroup(recipientDialogRepository.getGroupId()); - LiveData> localStatus = LiveDataUtil.combineLatest(source.isSelfAdmin(), Transformations.map(source.getGroupLink(), s -> s == null || s.isEnabled()), Pair::new); - LiveData recipientMemberLevel = Transformations.switchMap(recipient, source::getMemberLevel); + LiveData> localStatus = LiveDataUtil.combineLatest(source.isSelfAdmin(), Transformations.map(source.getGroupLink(), s -> s == null || s.isEnabled()), Pair::new); + LiveData recipientMemberLevel = Transformations.switchMap(recipient, source::getMemberLevel); adminActionStatus = LiveDataUtil.combineLatest(localStatus, recipientMemberLevel, (statuses, memberLevel) -> { boolean localAdmin = statuses.first(); boolean isLinkActive = statuses.second(); boolean inGroup = memberLevel.isInGroup(); - boolean recipientAdmin = memberLevel == GroupDatabase.MemberLevel.ADMINISTRATOR; + boolean recipientAdmin = memberLevel == GroupTable.MemberLevel.ADMINISTRATOR; return new AdminActionStatus(inGroup && localAdmin, inGroup && localAdmin && !recipientAdmin, diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationRepository.java b/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationRepository.java index 77b008e02..beff7dca2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationRepository.java @@ -17,8 +17,8 @@ import org.thoughtcrime.securesms.crypto.ProfileKeyUtil; import org.thoughtcrime.securesms.crypto.SenderKeyUtil; import org.thoughtcrime.securesms.crypto.storage.PreKeyMetadataStore; import org.thoughtcrime.securesms.crypto.storage.SignalServiceAccountDataStoreImpl; -import org.thoughtcrime.securesms.database.IdentityDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.IdentityTable; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.JobManager; @@ -158,13 +158,13 @@ public final class RegistrationRepository { accountManager.setGcmId(Optional.ofNullable(registrationData.getFcmToken())); } - RecipientDatabase recipientDatabase = SignalDatabase.recipients(); - RecipientId selfId = Recipient.trustedPush(aci, pni, registrationData.getE164()).getId(); + RecipientTable recipientTable = SignalDatabase.recipients(); + RecipientId selfId = Recipient.trustedPush(aci, pni, registrationData.getE164()).getId(); - recipientDatabase.setProfileSharing(selfId, true); - recipientDatabase.markRegisteredOrThrow(selfId, aci); - recipientDatabase.linkIdsForSelf(aci, pni, registrationData.getE164()); - recipientDatabase.setProfileKey(selfId, registrationData.getProfileKey()); + recipientTable.setProfileSharing(selfId, true); + recipientTable.markRegisteredOrThrow(selfId, aci); + recipientTable.linkIdsForSelf(aci, pni, registrationData.getE164()); + recipientTable.setProfileKey(selfId, registrationData.getProfileKey()); ApplicationDependencies.getRecipientCache().clearSelf(); @@ -201,7 +201,7 @@ public final class RegistrationRepository { private void saveOwnIdentityKey(@NonNull RecipientId selfId, @NonNull SignalServiceAccountDataStoreImpl protocolStore, long now) { protocolStore.identities().saveIdentityWithoutSideEffects(selfId, protocolStore.getIdentityKeyPair().getPublicKey(), - IdentityDatabase.VerifiedStatus.VERIFIED, + IdentityTable.VerifiedStatus.VERIFIED, true, now, true); @@ -209,8 +209,8 @@ public final class RegistrationRepository { @WorkerThread private static @Nullable ProfileKey findExistingProfileKey(@NonNull String e164number) { - RecipientDatabase recipientDatabase = SignalDatabase.recipients(); - Optional recipient = recipientDatabase.getByE164(e164number); + RecipientTable recipientTable = SignalDatabase.recipients(); + Optional recipient = recipientTable.getByE164(e164number); if (recipient.isPresent()) { return ProfileKeyUtil.profileKeyOrNull(Recipient.resolved(recipient.get()).getProfileKey()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/releasechannel/ReleaseChannel.kt b/app/src/main/java/org/thoughtcrime/securesms/releasechannel/ReleaseChannel.kt index c6d609b49..173893f5e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/releasechannel/ReleaseChannel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/releasechannel/ReleaseChannel.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.releasechannel import org.thoughtcrime.securesms.attachments.PointerAttachment -import org.thoughtcrime.securesms.database.MessageDatabase +import org.thoughtcrime.securesms.database.MessageTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.StoryType import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList @@ -30,7 +30,7 @@ object ReleaseChannel { serverUuid: String? = UUID.randomUUID().toString(), messageRanges: BodyRangeList? = null, storyType: StoryType = StoryType.NONE - ): MessageDatabase.InsertResult? { + ): MessageTable.InsertResult? { val attachments: Optional> = if (image != null) { val attachment = SignalServiceAttachmentPointer( diff --git a/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageManager.java b/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageManager.java index 414d02107..af30bb61c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageManager.java @@ -11,8 +11,8 @@ import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.AttachmentDatabase; -import org.thoughtcrime.securesms.database.MessageDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; +import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.service.TimedEventManager; @@ -24,8 +24,8 @@ public class ViewOnceMessageManager extends TimedEventManager diff --git a/app/src/main/java/org/thoughtcrime/securesms/safety/SafetyNumberBottomSheetState.kt b/app/src/main/java/org/thoughtcrime/securesms/safety/SafetyNumberBottomSheetState.kt index 49ce66b80..91224be38 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/safety/SafetyNumberBottomSheetState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/safety/SafetyNumberBottomSheetState.kt @@ -1,6 +1,6 @@ package org.thoughtcrime.securesms.safety -import org.thoughtcrime.securesms.database.IdentityDatabase +import org.thoughtcrime.securesms.database.IdentityTable /** * Screen state for SafetyNumberBottomSheetFragment and SafetyNumberReviewConnectionsFragment @@ -19,7 +19,7 @@ data class SafetyNumberBottomSheetState( fun isCheckupComplete(): Boolean { return loadState == LoadState.DONE || isEmpty() || - destinationToRecipientMap.values.flatten().all { it.identityRecord.verifiedStatus == IdentityDatabase.VerifiedStatus.VERIFIED } + destinationToRecipientMap.values.flatten().all { it.identityRecord.verifiedStatus == IdentityTable.VerifiedStatus.VERIFIED } } enum class LoadState { diff --git a/app/src/main/java/org/thoughtcrime/securesms/safety/review/SafetyNumberReviewConnectionsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/safety/review/SafetyNumberReviewConnectionsFragment.kt index 82c68e86d..b54f87fea 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/safety/review/SafetyNumberReviewConnectionsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/safety/review/SafetyNumberReviewConnectionsFragment.kt @@ -13,7 +13,7 @@ import org.thoughtcrime.securesms.components.settings.DSLSettingsFragment import org.thoughtcrime.securesms.components.settings.DSLSettingsText import org.thoughtcrime.securesms.components.settings.configure import org.thoughtcrime.securesms.crypto.IdentityKeyParcelable -import org.thoughtcrime.securesms.database.IdentityDatabase +import org.thoughtcrime.securesms.database.IdentityTable import org.thoughtcrime.securesms.safety.SafetyNumberBottomSheetState import org.thoughtcrime.securesms.safety.SafetyNumberBottomSheetViewModel import org.thoughtcrime.securesms.safety.SafetyNumberBucket @@ -71,7 +71,7 @@ class SafetyNumberReviewConnectionsFragment : DSLSettingsFragment( customPref( SafetyNumberRecipientRowItem.Model( recipient = it.recipient, - isVerified = it.identityRecord.verifiedStatus == IdentityDatabase.VerifiedStatus.VERIFIED, + isVerified = it.identityRecord.verifiedStatus == IdentityTable.VerifiedStatus.VERIFIED, distributionListMembershipCount = it.distributionListMembershipCount, groupMembershipCount = it.groupMembershipCount, getContextMenuActions = { model -> diff --git a/app/src/main/java/org/thoughtcrime/securesms/search/SearchRepository.java b/app/src/main/java/org/thoughtcrime/securesms/search/SearchRepository.java index 216ced4e9..c39eeea6d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/search/SearchRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/search/SearchRepository.java @@ -15,15 +15,15 @@ import org.signal.core.util.concurrent.LatestPrioritizedSerialExecutor; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.contacts.ContactRepository; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.MentionDatabase; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.MentionTable; import org.thoughtcrime.securesms.database.MentionUtil; -import org.thoughtcrime.securesms.database.MessageDatabase; +import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.MmsSmsColumns; -import org.thoughtcrime.securesms.database.RecipientDatabase; -import org.thoughtcrime.securesms.database.SearchDatabase; +import org.thoughtcrime.securesms.database.RecipientTable; +import org.thoughtcrime.securesms.database.SearchTable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.database.model.Mention; import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.ThreadRecord; @@ -37,10 +37,7 @@ import org.thoughtcrime.securesms.util.concurrent.SerialExecutor; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; @@ -49,7 +46,7 @@ import java.util.Set; import java.util.concurrent.Executor; import java.util.function.Consumer; -import static org.thoughtcrime.securesms.database.SearchDatabase.SNIPPET_WRAP; +import static org.thoughtcrime.securesms.database.SearchTable.SNIPPET_WRAP; /** * Manages data retrieval for search. @@ -60,12 +57,12 @@ public class SearchRepository { private final Context context; private final String noteToSelfTitle; - private final SearchDatabase searchDatabase; + private final SearchTable searchDatabase; private final ContactRepository contactRepository; - private final ThreadDatabase threadDatabase; - private final RecipientDatabase recipientDatabase; - private final MentionDatabase mentionDatabase; - private final MessageDatabase mmsDatabase; + private final ThreadTable threadTable; + private final RecipientTable recipientTable; + private final MentionTable mentionDatabase; + private final MessageTable mmsDatabase; private final LatestPrioritizedSerialExecutor searchExecutor; private final Executor serialExecutor; @@ -73,10 +70,10 @@ public class SearchRepository { public SearchRepository(@NonNull String noteToSelfTitle) { this.context = ApplicationDependencies.getApplication().getApplicationContext(); this.noteToSelfTitle = noteToSelfTitle; - this.searchDatabase = SignalDatabase.messageSearch(); - this.threadDatabase = SignalDatabase.threads(); - this.recipientDatabase = SignalDatabase.recipients(); - this.mentionDatabase = SignalDatabase.mentions(); + this.searchDatabase = SignalDatabase.messageSearch(); + this.threadTable = SignalDatabase.threads(); + this.recipientTable = SignalDatabase.recipients(); + this.mentionDatabase = SignalDatabase.mentions(); this.mmsDatabase = SignalDatabase.mms(); this.contactRepository = new ContactRepository(context, noteToSelfTitle); this.searchExecutor = new LatestPrioritizedSerialExecutor(SignalExecutors.BOUNDED); @@ -166,7 +163,7 @@ public class SearchRepository { Set filteredContacts = new LinkedHashSet<>(); try (Cursor cursor = SignalDatabase.recipients().queryAllContacts(query)) { while (cursor != null && cursor.moveToNext()) { - filteredContacts.add(RecipientId.from(CursorUtil.requireString(cursor, RecipientDatabase.ID))); + filteredContacts.add(RecipientId.from(CursorUtil.requireString(cursor, RecipientTable.ID))); } } @@ -178,8 +175,8 @@ public class SearchRepository { Set groupsByTitleIds = new LinkedHashSet<>(); - GroupDatabase.GroupRecord record; - try (GroupDatabase.Reader reader = SignalDatabase.groups().queryGroupsByTitle(query, true, false, false)) { + GroupTable.GroupRecord record; + try (GroupTable.Reader reader = SignalDatabase.groups().queryGroupsByTitle(query, true, false, false)) { while ((record = reader.getNext()) != null) { groupsByTitleIds.add(record.getRecipientId()); } @@ -187,7 +184,7 @@ public class SearchRepository { Set groupsByMemberIds = new LinkedHashSet<>(); - try (GroupDatabase.Reader reader = SignalDatabase.groups().queryGroupsByMembership(filteredContacts, true, false, false)) { + try (GroupTable.Reader reader = SignalDatabase.groups().queryGroupsByMembership(filteredContacts, true, false, false)) { while ((record = reader.getNext()) != null) { groupsByMemberIds.add(record.getRecipientId()); } @@ -203,8 +200,8 @@ public class SearchRepository { } private List getMatchingThreads(@NonNull Collection recipientIds) { - try (Cursor cursor = threadDatabase.getFilteredConversationList(new ArrayList<>(recipientIds))) { - return readToList(cursor, new ThreadModelBuilder(threadDatabase)); + try (Cursor cursor = threadTable.getFilteredConversationList(new ArrayList<>(recipientIds))) { + return readToList(cursor, new ThreadModelBuilder(threadTable)); } } @@ -293,7 +290,7 @@ public class SearchRepository { private @NonNull List queryMentions(@NonNull List cleanQueries) { Set recipientIds = new HashSet<>(); for (String cleanQuery : cleanQueries) { - for (Recipient recipient : recipientDatabase.queryRecipientsForMentions(cleanQuery)) { + for (Recipient recipient : recipientTable.queryRecipientsForMentions(cleanQuery)) { recipientIds.add(recipient.getId()); } } @@ -306,7 +303,7 @@ public class SearchRepository { List results = new ArrayList<>(); - try (MessageDatabase.Reader reader = mmsDatabase.getMessages(mentionQueryResults.keySet())) { + try (MessageTable.Reader reader = mmsDatabase.getMessages(mentionQueryResults.keySet())) { MessageRecord record; while ((record = reader.getNext()) != null) { List mentions = mentionQueryResults.get(record.getId()); @@ -316,7 +313,7 @@ public class SearchRepository { String updatedSnippet = makeSnippet(cleanQueries, updatedBody); //noinspection ConstantConditions - results.add(new MessageResult(threadDatabase.getRecipientForThreadId(record.getThreadId()), record.getRecipient(), updatedBody, updatedSnippet, record.getThreadId(), record.getId(), record.getDateReceived(), true)); + results.add(new MessageResult(threadTable.getRecipientForThreadId(record.getThreadId()), record.getRecipient(), updatedBody, updatedSnippet, record.getThreadId(), record.getId(), record.getDateReceived(), true)); } } } @@ -327,7 +324,7 @@ public class SearchRepository { private @NonNull List queryMentions(@NonNull List cleanQueries, long threadId) { Set recipientIds = new HashSet<>(); for (String cleanQuery : cleanQueries) { - for (Recipient recipient : recipientDatabase.queryRecipientsForMentions(cleanQuery)) { + for (Recipient recipient : recipientTable.queryRecipientsForMentions(cleanQuery)) { recipientIds.add(recipient.getId()); } } @@ -340,11 +337,11 @@ public class SearchRepository { List results = new ArrayList<>(); - try (MessageDatabase.Reader reader = mmsDatabase.getMessages(mentionQueryResults.keySet())) { + try (MessageTable.Reader reader = mmsDatabase.getMessages(mentionQueryResults.keySet())) { MessageRecord record; while ((record = reader.getNext()) != null) { //noinspection ConstantConditions - results.add(new MessageResult(threadDatabase.getRecipientForThreadId(record.getThreadId()), record.getRecipient(), record.getBody(), record.getBody(), record.getThreadId(), record.getId(), record.getDateReceived(), true)); + results.add(new MessageResult(threadTable.getRecipientForThreadId(record.getThreadId()), record.getRecipient(), record.getBody(), record.getBody(), record.getThreadId(), record.getId(), record.getDateReceived(), true)); } } @@ -432,15 +429,15 @@ public class SearchRepository { private static class ThreadModelBuilder implements ModelBuilder { - private final ThreadDatabase threadDatabase; + private final ThreadTable threadTable; - ThreadModelBuilder(@NonNull ThreadDatabase threadDatabase) { - this.threadDatabase = threadDatabase; + ThreadModelBuilder(@NonNull ThreadTable threadTable) { + this.threadTable = threadTable; } @Override public ThreadRecord build(@NonNull Cursor cursor) { - return threadDatabase.readerFor(cursor).getCurrent(); + return threadTable.readerFor(cursor).getCurrent(); } } @@ -448,16 +445,16 @@ public class SearchRepository { @Override public MessageResult build(@NonNull Cursor cursor) { - RecipientId conversationRecipientId = RecipientId.from(CursorUtil.requireLong(cursor, SearchDatabase.CONVERSATION_RECIPIENT)); - RecipientId messageRecipientId = RecipientId.from(CursorUtil.requireLong(cursor, SearchDatabase.MESSAGE_RECIPIENT)); + RecipientId conversationRecipientId = RecipientId.from(CursorUtil.requireLong(cursor, SearchTable.CONVERSATION_RECIPIENT)); + RecipientId messageRecipientId = RecipientId.from(CursorUtil.requireLong(cursor, SearchTable.MESSAGE_RECIPIENT)); Recipient conversationRecipient = Recipient.live(conversationRecipientId).get(); Recipient messageRecipient = Recipient.live(messageRecipientId).get(); - String body = CursorUtil.requireString(cursor, SearchDatabase.BODY); - String bodySnippet = CursorUtil.requireString(cursor, SearchDatabase.SNIPPET); + String body = CursorUtil.requireString(cursor, SearchTable.BODY); + String bodySnippet = CursorUtil.requireString(cursor, SearchTable.SNIPPET); long receivedMs = CursorUtil.requireLong(cursor, MmsSmsColumns.NORMALIZED_DATE_RECEIVED); long threadId = CursorUtil.requireLong(cursor, MmsSmsColumns.THREAD_ID); - int messageId = CursorUtil.requireInt(cursor, SearchDatabase.MESSAGE_ID); - boolean isMms = CursorUtil.requireInt(cursor, SearchDatabase.IS_MMS) == 1; + int messageId = CursorUtil.requireInt(cursor, SearchTable.MESSAGE_ID); + boolean isMms = CursorUtil.requireInt(cursor, SearchTable.IS_MMS) == 1; return new MessageResult(conversationRecipient, messageRecipient, body, bodySnippet, threadId, messageId, receivedMs, isMms); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/ExpiringMessageManager.java b/app/src/main/java/org/thoughtcrime/securesms/service/ExpiringMessageManager.java index 626bfc3c6..1595ba02f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/ExpiringMessageManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/ExpiringMessageManager.java @@ -3,10 +3,10 @@ package org.thoughtcrime.securesms.service; import android.content.Context; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.MessageDatabase; -import org.thoughtcrime.securesms.database.MmsDatabase; +import org.thoughtcrime.securesms.database.MessageTable; +import org.thoughtcrime.securesms.database.MmsTable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.SmsDatabase; +import org.thoughtcrime.securesms.database.SmsTable; import org.thoughtcrime.securesms.database.model.MessageRecord; import java.util.Comparator; @@ -21,9 +21,9 @@ public class ExpiringMessageManager { private final TreeSet expiringMessageReferences = new TreeSet<>(new ExpiringMessageComparator()); private final Executor executor = Executors.newSingleThreadExecutor(); - private final MessageDatabase smsDatabase; - private final MessageDatabase mmsDatabase; - private final Context context; + private final MessageTable smsDatabase; + private final MessageTable mmsDatabase; + private final Context context; public ExpiringMessageManager(Context context) { this.context = context.getApplicationContext(); @@ -55,8 +55,8 @@ public class ExpiringMessageManager { private class LoadTask implements Runnable { public void run() { - SmsDatabase.Reader smsReader = SmsDatabase.readerFor(smsDatabase.getExpirationStartedMessages()); - MmsDatabase.Reader mmsReader = MmsDatabase.readerFor(mmsDatabase.getExpirationStartedMessages()); + SmsTable.Reader smsReader = SmsTable.readerFor(smsDatabase.getExpirationStartedMessages()); + MmsTable.Reader mmsReader = MmsTable.readerFor(mmsDatabase.getExpirationStartedMessages()); MessageRecord messageRecord; diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/PendingRetryReceiptManager.java b/app/src/main/java/org/thoughtcrime/securesms/service/PendingRetryReceiptManager.java index 8ad9f01b4..88cfa6cb9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/PendingRetryReceiptManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/PendingRetryReceiptManager.java @@ -11,7 +11,7 @@ import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.MessageDatabase; +import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.PendingRetryReceiptCache; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.PendingRetryReceiptModel; @@ -27,7 +27,7 @@ public final class PendingRetryReceiptManager extends TimedEventManager> 24 <= 0) status = SmsDatabase.Status.STATUS_COMPLETE; - else if (status >> 24 == 2) status = SmsDatabase.Status.STATUS_PENDING; - else if (status >> 24 == 3) status = SmsDatabase.Status.STATUS_FAILED; + if (status >> 24 <= 0) status = SmsTable.Status.STATUS_COMPLETE; + else if (status >> 24 == 2) status = SmsTable.Status.STATUS_PENDING; + else if (status >> 24 == 3) status = SmsTable.Status.STATUS_FAILED; } jobManager.add(new SmsSentJob(messageId, isMultipart, DELIVERED_SMS_ACTION, status, runAttempt)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/TrimThreadsByDateManager.java b/app/src/main/java/org/thoughtcrime/securesms/service/TrimThreadsByDateManager.java index b5a4cd53a..e5cf2ea72 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/TrimThreadsByDateManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/TrimThreadsByDateManager.java @@ -9,9 +9,9 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.MmsSmsDatabase; +import org.thoughtcrime.securesms.database.MmsSmsTable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.keyvalue.KeepMessagesDuration; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -20,13 +20,13 @@ public class TrimThreadsByDateManager extends TimedEventManager { try { GroupId groupId = GroupId.v2(new GroupIdentifier(groupIdBytes)); - List recipients = SignalDatabase.groups().getGroupMembers(groupId, GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); + List recipients = SignalDatabase.groups().getGroupMembers(groupId, GroupTable.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); recipients = RecipientUtil.getEligibleForSending((recipients.stream() .map(Recipient::resolve) @@ -745,9 +745,9 @@ private void processStateless(@NonNull Function1 messages, @Nullable final String metricId, - @Nullable final SmsDatabase.InsertListener insertListener) + @Nullable final SmsTable.InsertListener insertListener) { Log.i(TAG, "Sending story messages to " + messages.size() + " targets."); - ThreadDatabase threadDatabase = SignalDatabase.threads(); - MessageDatabase database = SignalDatabase.mms(); - List messageIds = new ArrayList<>(messages.size()); + ThreadTable threadTable = SignalDatabase.threads(); + MessageTable database = SignalDatabase.mms(); + List messageIds = new ArrayList<>(messages.size()); List threads = new ArrayList<>(messages.size()); UploadDependencyGraph dependencyGraph; @@ -153,7 +153,7 @@ public class MessageSender { database.beginTransaction(); for (OutgoingSecureMediaMessage message : messages) { - long allocatedThreadId = threadDatabase.getOrCreateValidThreadId(message.getRecipient(), -1L, message.getDistributionType()); + long allocatedThreadId = threadTable.getOrCreateValidThreadId(message.getRecipient(), -1L, message.getDistributionType()); long messageId = database.insertMessageOutbox(message.stripAttachments(), allocatedThreadId, false, insertListener); messageIds.add(messageId); @@ -245,7 +245,7 @@ public class MessageSender { onMessageSent(); for (long threadId : threads) { - threadDatabase.update(threadId, true); + threadTable.update(threadId, true); } } @@ -254,14 +254,14 @@ public class MessageSender { final long threadId, final boolean forceSms, @Nullable final String metricId, - @Nullable final SmsDatabase.InsertListener insertListener) + @Nullable final SmsTable.InsertListener insertListener) { Log.i(TAG, "Sending media message to " + message.getRecipient().getId() + ", thread: " + threadId); try { - ThreadDatabase threadDatabase = SignalDatabase.threads(); - MessageDatabase database = SignalDatabase.mms(); + ThreadTable threadTable = SignalDatabase.threads(); + MessageTable database = SignalDatabase.mms(); - long allocatedThreadId = threadDatabase.getOrCreateValidThreadId(message.getRecipient(), threadId, message.getDistributionType()); + long allocatedThreadId = threadTable.getOrCreateValidThreadId(message.getRecipient(), threadId, message.getDistributionType()); Recipient recipient = message.getRecipient(); long messageId = database.insertMessageOutbox(applyUniversalExpireTimerIfNecessary(context, recipient, message, allocatedThreadId), allocatedThreadId, forceSms, insertListener); @@ -273,7 +273,7 @@ public class MessageSender { sendMediaMessage(context, recipient, forceSms, messageId, Collections.emptyList()); onMessageSent(); - threadDatabase.update(allocatedThreadId, true); + threadTable.update(allocatedThreadId, true); return allocatedThreadId; } catch (MmsException e) { @@ -286,20 +286,20 @@ public class MessageSender { final OutgoingMediaMessage message, final Collection preUploadResults, final long threadId, - final SmsDatabase.InsertListener insertListener) + final SmsTable.InsertListener insertListener) { Log.i(TAG, "Sending media message with pre-uploads to " + message.getRecipient().getId() + ", thread: " + threadId + ", pre-uploads: " + preUploadResults); Preconditions.checkArgument(message.getAttachments().isEmpty(), "If the media is pre-uploaded, there should be no attachments on the message."); try { - ThreadDatabase threadDatabase = SignalDatabase.threads(); - MessageDatabase mmsDatabase = SignalDatabase.mms(); - AttachmentDatabase attachmentDatabase = SignalDatabase.attachments(); + ThreadTable threadTable = SignalDatabase.threads(); + MessageTable mmsDatabase = SignalDatabase.mms(); + AttachmentTable attachmentDatabase = SignalDatabase.attachments(); long allocatedThreadId; if (threadId == -1) { - allocatedThreadId = threadDatabase.getOrCreateThreadIdFor(message.getRecipient(), message.getDistributionType()); + allocatedThreadId = threadTable.getOrCreateThreadIdFor(message.getRecipient(), message.getDistributionType()); } else { allocatedThreadId = threadId; } @@ -317,7 +317,7 @@ public class MessageSender { sendMediaMessage(context, recipient, false, messageId, jobIds); onMessageSent(); - threadDatabase.update(allocatedThreadId, true); + threadTable.update(allocatedThreadId, true); return allocatedThreadId; } catch (MmsException e) { @@ -335,11 +335,11 @@ public class MessageSender { Preconditions.checkArgument(messages.size() > 0, "No messages!"); Preconditions.checkArgument(Stream.of(messages).allMatch(m -> m.getAttachments().isEmpty()), "Messages can't have attachments! They should be pre-uploaded."); - JobManager jobManager = ApplicationDependencies.getJobManager(); - AttachmentDatabase attachmentDatabase = SignalDatabase.attachments(); - MessageDatabase mmsDatabase = SignalDatabase.mms(); - ThreadDatabase threadDatabase = SignalDatabase.threads(); - List preUploadAttachmentIds = Stream.of(preUploadResults).map(PreUploadResult::getAttachmentId).toList(); + JobManager jobManager = ApplicationDependencies.getJobManager(); + AttachmentTable attachmentDatabase = SignalDatabase.attachments(); + MessageTable mmsDatabase = SignalDatabase.mms(); + ThreadTable threadTable = SignalDatabase.threads(); + List preUploadAttachmentIds = Stream.of(preUploadResults).map(PreUploadResult::getAttachmentId).toList(); List preUploadJobIds = Stream.of(preUploadResults).map(PreUploadResult::getJobIds).flatMap(Stream::of).toList(); List messageIds = new ArrayList<>(messages.size()); List messageDependsOnIds = new ArrayList<>(preUploadJobIds); @@ -348,7 +348,7 @@ public class MessageSender { mmsDatabase.beginTransaction(); try { if (overwritePreUploadMessageIds) { - long primaryThreadId = threadDatabase.getOrCreateThreadIdFor(primaryMessage.getRecipient(), primaryMessage.getDistributionType()); + long primaryThreadId = threadTable.getOrCreateThreadIdFor(primaryMessage.getRecipient(), primaryMessage.getDistributionType()); long primaryMessageId = mmsDatabase.insertMessageOutbox(applyUniversalExpireTimerIfNecessary(context, primaryMessage.getRecipient(), primaryMessage, primaryThreadId), primaryThreadId, false, @@ -376,7 +376,7 @@ public class MessageSender { } for (OutgoingSecureMediaMessage secondaryMessage : secondaryMessages) { - long allocatedThreadId = threadDatabase.getOrCreateThreadIdFor(secondaryMessage.getRecipient(), secondaryMessage.getDistributionType()); + long allocatedThreadId = threadTable.getOrCreateThreadIdFor(secondaryMessage.getRecipient(), secondaryMessage.getDistributionType()); long messageId = mmsDatabase.insertMessageOutbox(applyUniversalExpireTimerIfNecessary(context, secondaryMessage.getRecipient(), secondaryMessage, allocatedThreadId), allocatedThreadId, false, @@ -454,7 +454,7 @@ public class MessageSender { Log.i(TAG, "Pre-uploading attachment for " + (recipient != null ? recipient.getId() : "null")); try { - AttachmentDatabase attachmentDatabase = SignalDatabase.attachments(); + AttachmentTable attachmentDatabase = SignalDatabase.attachments(); DatabaseAttachment databaseAttachment = attachmentDatabase.insertAttachmentForPreUpload(attachment); Job compressionJob = AttachmentCompressionJob.fromAttachment(databaseAttachment, false, -1); @@ -498,7 +498,7 @@ public class MessageSender { } public static void sendRemoteDelete(long messageId, boolean isMms) { - MessageDatabase db = isMms ? SignalDatabase.mms() : SignalDatabase.sms(); + MessageTable db = isMms ? SignalDatabase.mms() : SignalDatabase.sms(); db.markAsRemoteDelete(messageId); db.markAsSending(messageId); @@ -657,14 +657,14 @@ public class MessageSender { } private static boolean isPushDestination(Context context, Recipient destination) { - if (destination.resolve().getRegistered() == RecipientDatabase.RegisteredState.REGISTERED) { + if (destination.resolve().getRegistered() == RecipientTable.RegisteredState.REGISTERED) { return true; - } else if (destination.resolve().getRegistered() == RecipientDatabase.RegisteredState.NOT_REGISTERED) { + } else if (destination.resolve().getRegistered() == RecipientTable.RegisteredState.NOT_REGISTERED) { return false; } else { try { - RecipientDatabase.RegisteredState state = ContactDiscovery.refresh(context, destination, false); - return state == RecipientDatabase.RegisteredState.REGISTERED; + RecipientTable.RegisteredState state = ContactDiscovery.refresh(context, destination, false); + return state == RecipientTable.RegisteredState.REGISTERED; } catch (IOException e1) { Log.w(TAG, e1); return false; @@ -682,10 +682,10 @@ public class MessageSender { private static void sendLocalMediaSelf(Context context, long messageId) { try { - ExpiringMessageManager expirationManager = ApplicationDependencies.getExpiringMessageManager(); - MessageDatabase mmsDatabase = SignalDatabase.mms(); - MmsSmsDatabase mmsSmsDatabase = SignalDatabase.mmsSms(); - OutgoingMediaMessage message = mmsDatabase.getOutgoingMessage(messageId); + ExpiringMessageManager expirationManager = ApplicationDependencies.getExpiringMessageManager(); + MessageTable mmsDatabase = SignalDatabase.mms(); + MmsSmsTable mmsSmsDatabase = SignalDatabase.mmsSms(); + OutgoingMediaMessage message = mmsDatabase.getOutgoingMessage(messageId); SyncMessageId syncId = new SyncMessageId(Recipient.self().getId(), message.getSentTimeMillis()); List attachments = new LinkedList<>(); @@ -734,9 +734,9 @@ public class MessageSender { private static void sendLocalTextSelf(Context context, long messageId) { try { ExpiringMessageManager expirationManager = ApplicationDependencies.getExpiringMessageManager(); - MessageDatabase smsDatabase = SignalDatabase.sms(); - MmsSmsDatabase mmsSmsDatabase = SignalDatabase.mmsSms(); - SmsMessageRecord message = smsDatabase.getSmsMessage(messageId); + MessageTable smsDatabase = SignalDatabase.sms(); + MmsSmsTable mmsSmsDatabase = SignalDatabase.mmsSms(); + SmsMessageRecord message = smsDatabase.getSmsMessage(messageId); SyncMessageId syncId = new SyncMessageId(Recipient.self().getId(), message.getDateSent()); smsDatabase.markAsSent(messageId, true); diff --git a/app/src/main/java/org/thoughtcrime/securesms/sms/UploadDependencyGraph.kt b/app/src/main/java/org/thoughtcrime/securesms/sms/UploadDependencyGraph.kt index 6a3bfc798..921513b29 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sms/UploadDependencyGraph.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/sms/UploadDependencyGraph.kt @@ -5,7 +5,7 @@ import org.thoughtcrime.securesms.attachments.Attachment import org.thoughtcrime.securesms.attachments.AttachmentId import org.thoughtcrime.securesms.attachments.DatabaseAttachment import org.thoughtcrime.securesms.attachments.UriAttachment -import org.thoughtcrime.securesms.database.AttachmentDatabase +import org.thoughtcrime.securesms.database.AttachmentTable import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobmanager.JobManager import org.thoughtcrime.securesms.jobs.AttachmentCompressionJob @@ -44,7 +44,7 @@ class UploadDependencyGraph private constructor( */ private data class AttachmentKey( val attachment: A, - private val transformProperties: AttachmentDatabase.TransformProperties = attachment.transformProperties + private val transformProperties: AttachmentTable.TransformProperties = attachment.transformProperties ) private var hasConsumedJobQueue = false diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementRepository.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementRepository.java index c81bf3b71..e67d8745b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementRepository.java @@ -6,10 +6,10 @@ import android.database.Cursor; import androidx.annotation.NonNull; import org.signal.core.util.concurrent.SignalExecutors; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.StickerDatabase; -import org.thoughtcrime.securesms.database.StickerDatabase.StickerPackRecordReader; +import org.thoughtcrime.securesms.database.StickerTable; +import org.thoughtcrime.securesms.database.StickerTable.StickerPackRecordReader; import org.thoughtcrime.securesms.database.model.StickerPackRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.JobManager; @@ -22,9 +22,9 @@ import java.util.List; final class StickerManagementRepository { - private final Context context; - private final StickerDatabase stickerDatabase; - private final AttachmentDatabase attachmentDatabase; + private final Context context; + private final StickerTable stickerDatabase; + private final AttachmentTable attachmentDatabase; StickerManagementRepository(@NonNull Context context) { this.context = context.getApplicationContext(); @@ -42,8 +42,8 @@ final class StickerManagementRepository { try (Cursor cursor = attachmentDatabase.getUnavailableStickerPacks()) { while (cursor != null && cursor.moveToNext()) { - String packId = cursor.getString(cursor.getColumnIndexOrThrow(AttachmentDatabase.STICKER_PACK_ID)); - String packKey = cursor.getString(cursor.getColumnIndexOrThrow(AttachmentDatabase.STICKER_PACK_KEY)); + String packId = cursor.getString(cursor.getColumnIndexOrThrow(AttachmentTable.STICKER_PACK_ID)); + String packKey = cursor.getString(cursor.getColumnIndexOrThrow(AttachmentTable.STICKER_PACK_KEY)); jobManager.add(StickerPackDownloadJob.forReference(packId, packKey)); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewRepository.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewRepository.java index 8f5d8c51c..ff472e16b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewRepository.java @@ -12,7 +12,7 @@ import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.InvalidMessageException; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.StickerDatabase; +import org.thoughtcrime.securesms.database.StickerTable; import org.thoughtcrime.securesms.database.model.StickerPackRecord; import org.thoughtcrime.securesms.database.model.StickerRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; @@ -29,7 +29,7 @@ public final class StickerPackPreviewRepository { private static final String TAG = Log.tag(StickerPackPreviewRepository.class); - private final StickerDatabase stickerDatabase; + private final StickerTable stickerDatabase; private final SignalServiceMessageReceiver receiver; public StickerPackPreviewRepository(@NonNull Context context) { @@ -103,7 +103,7 @@ public final class StickerPackPreviewRepository { List stickers = new ArrayList<>(); try (Cursor cursor = stickerDatabase.getStickersForPack(packId)) { - StickerDatabase.StickerRecordReader reader = new StickerDatabase.StickerRecordReader(cursor); + StickerTable.StickerRecordReader reader = new StickerTable.StickerRecordReader(cursor); StickerRecord record; while ((record = reader.getNext()) != null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerSearchRepository.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerSearchRepository.java index f39227d45..1af51cc49 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerSearchRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerSearchRepository.java @@ -7,10 +7,10 @@ import androidx.annotation.NonNull; import org.signal.core.util.concurrent.SignalExecutors; import org.thoughtcrime.securesms.components.emoji.EmojiUtil; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.StickerDatabase; -import org.thoughtcrime.securesms.database.StickerDatabase.StickerRecordReader; +import org.thoughtcrime.securesms.database.StickerTable; +import org.thoughtcrime.securesms.database.StickerTable.StickerRecordReader; import org.thoughtcrime.securesms.database.model.StickerRecord; import java.util.ArrayList; @@ -19,8 +19,8 @@ import java.util.Set; public final class StickerSearchRepository { - private final StickerDatabase stickerDatabase; - private final AttachmentDatabase attachmentDatabase; + private final StickerTable stickerDatabase; + private final AttachmentTable attachmentDatabase; public StickerSearchRepository(@NonNull Context context) { this.stickerDatabase = SignalDatabase.stickers(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/ContactRecordProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/storage/ContactRecordProcessor.java index 4e12945da..c02c7647e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/ContactRecordProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/ContactRecordProcessor.java @@ -4,7 +4,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.RecipientRecord; import org.thoughtcrime.securesms.jobs.RetrieveProfileJob; @@ -27,7 +27,7 @@ public class ContactRecordProcessor extends DefaultStorageRecordProcessor found = recipientDatabase.getByServiceId(remote.getServiceId()); + Optional found = recipientTable.getByServiceId(remote.getServiceId()); if (!found.isPresent() && remote.getNumber().isPresent()) { - found = recipientDatabase.getByE164(remote.getNumber().get()); + found = recipientTable.getByE164(remote.getNumber().get()); } if (!found.isPresent() && remote.getPni().isPresent()) { - found = recipientDatabase.getByServiceId(remote.getPni().get()); + found = recipientTable.getByServiceId(remote.getPni().get()); } if (!found.isPresent() && remote.getPni().isPresent()) { - found = recipientDatabase.getByPni(remote.getPni().get()); + found = recipientTable.getByPni(remote.getPni().get()); } - return found.map(recipientDatabase::getRecordForSync) + return found.map(recipientTable::getRecordForSync) .map(settings -> { if (settings.getStorageId() != null) { return StorageSyncModels.localToRemoteRecord(settings); } else { Log.w(TAG, "Newly discovering a registered user via storage service. Saving a storageId for them."); - recipientDatabase.updateStorageId(settings.getId(), keyGenerator.generate()); + recipientTable.updateStorageId(settings.getId(), keyGenerator.generate()); - RecipientRecord updatedSettings = Objects.requireNonNull(recipientDatabase.getRecordForSync(settings.getId())); + RecipientRecord updatedSettings = Objects.requireNonNull(recipientTable.getRecordForSync(settings.getId())); return StorageSyncModels.localToRemoteRecord(updatedSettings); } }) @@ -230,12 +230,12 @@ public class ContactRecordProcessor extends DefaultStorageRecordProcessor update) { - recipientDatabase.applyStorageSyncContactUpdate(update); + recipientTable.applyStorageSyncContactUpdate(update); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/GroupV1RecordProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/storage/GroupV1RecordProcessor.java index 7070ce609..a0d0376b0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/GroupV1RecordProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/GroupV1RecordProcessor.java @@ -6,8 +6,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.groups.BadGroupIdException; import org.thoughtcrime.securesms.groups.GroupId; @@ -24,16 +24,16 @@ public final class GroupV1RecordProcessor extends DefaultStorageRecordProcessor< private static final String TAG = Log.tag(GroupV1RecordProcessor.class); - private final GroupDatabase groupDatabase; - private final RecipientDatabase recipientDatabase; + private final GroupTable groupDatabase; + private final RecipientTable recipientTable; public GroupV1RecordProcessor(@NonNull Context context) { this(SignalDatabase.groups(), SignalDatabase.recipients()); } - GroupV1RecordProcessor(@NonNull GroupDatabase groupDatabase, @NonNull RecipientDatabase recipientDatabase) { - this.groupDatabase = groupDatabase; - this.recipientDatabase = recipientDatabase; + GroupV1RecordProcessor(@NonNull GroupTable groupDatabase, @NonNull RecipientTable recipientTable) { + this.groupDatabase = groupDatabase; + this.recipientTable = recipientTable; } /** @@ -46,8 +46,8 @@ public final class GroupV1RecordProcessor extends DefaultStorageRecordProcessor< @Override boolean isInvalid(@NonNull SignalGroupV1Record remote) { try { - GroupId.V1 id = GroupId.v1(remote.getGroupId()); - Optional v2Record = groupDatabase.getGroup(id.deriveV2MigrationGroupId()); + GroupId.V1 id = GroupId.v1(remote.getGroupId()); + Optional v2Record = groupDatabase.getGroup(id.deriveV2MigrationGroupId()); if (v2Record.isPresent()) { Log.w(TAG, "We already have an upgraded V2 group for this V1 group -- marking as invalid."); @@ -65,9 +65,9 @@ public final class GroupV1RecordProcessor extends DefaultStorageRecordProcessor< @NonNull Optional getMatching(@NonNull SignalGroupV1Record record, @NonNull StorageKeyGenerator keyGenerator) { GroupId.V1 groupId = GroupId.v1orThrow(record.getGroupId()); - Optional recipientId = recipientDatabase.getByGroupId(groupId); + Optional recipientId = recipientTable.getByGroupId(groupId); - return recipientId.map(recipientDatabase::getRecordForSync) + return recipientId.map(recipientTable::getRecordForSync) .map(StorageSyncModels::localToRemoteRecord) .map(r -> r.getGroupV1().get()); } @@ -100,12 +100,12 @@ public final class GroupV1RecordProcessor extends DefaultStorageRecordProcessor< @Override void insertLocal(@NonNull SignalGroupV1Record record) { - recipientDatabase.applyStorageSyncGroupV1Insert(record); + recipientTable.applyStorageSyncGroupV1Insert(record); } @Override void updateLocal(@NonNull StorageRecordUpdate update) { - recipientDatabase.applyStorageSyncGroupV1Update(update); + recipientTable.applyStorageSyncGroupV1Update(update); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/GroupV2RecordProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/storage/GroupV2RecordProcessor.java index 04b339cc3..188759f5a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/GroupV2RecordProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/GroupV2RecordProcessor.java @@ -7,8 +7,8 @@ import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.signal.libsignal.zkgroup.groups.GroupMasterKey; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.groups.GroupsV1MigrationUtil; @@ -25,18 +25,18 @@ public final class GroupV2RecordProcessor extends DefaultStorageRecordProcessor< private static final String TAG = Log.tag(GroupV2RecordProcessor.class); - private final Context context; - private final RecipientDatabase recipientDatabase; - private final GroupDatabase groupDatabase; + private final Context context; + private final RecipientTable recipientTable; + private final GroupTable groupDatabase; private final Map gv1GroupsByExpectedGv2Id; public GroupV2RecordProcessor(@NonNull Context context) { this(context, SignalDatabase.recipients(), SignalDatabase.groups()); } - GroupV2RecordProcessor(@NonNull Context context, @NonNull RecipientDatabase recipientDatabase, @NonNull GroupDatabase groupDatabase) { + GroupV2RecordProcessor(@NonNull Context context, @NonNull RecipientTable recipientTable, @NonNull GroupTable groupDatabase) { this.context = context; - this.recipientDatabase = recipientDatabase; + this.recipientTable = recipientTable; this.groupDatabase = groupDatabase; this.gv1GroupsByExpectedGv2Id = groupDatabase.getAllExpectedV2Ids(); } @@ -50,9 +50,9 @@ public final class GroupV2RecordProcessor extends DefaultStorageRecordProcessor< @NonNull Optional getMatching(@NonNull SignalGroupV2Record record, @NonNull StorageKeyGenerator keyGenerator) { GroupId.V2 groupId = GroupId.v2(record.getMasterKeyOrThrow()); - Optional recipientId = recipientDatabase.getByGroupId(groupId); + Optional recipientId = recipientTable.getByGroupId(groupId); - return recipientId.map(recipientDatabase::getRecordForSync) + return recipientId.map(recipientTable::getRecordForSync) .map(settings -> { if (settings.getSyncExtras().getGroupMasterKey() != null) { return StorageSyncModels.localToRemoteRecord(settings); @@ -116,13 +116,13 @@ public final class GroupV2RecordProcessor extends DefaultStorageRecordProcessor< Log.i(TAG, "Discovered a new GV2 ID that is actually a migrated V1 group! Migrating now."); GroupsV1MigrationUtil.performLocalMigration(context, possibleV1Id); } else { - recipientDatabase.applyStorageSyncGroupV2Insert(record); + recipientTable.applyStorageSyncGroupV2Insert(record); } } @Override void updateLocal(@NonNull StorageRecordUpdate update) { - recipientDatabase.applyStorageSyncGroupV2Update(update); + recipientTable.applyStorageSyncGroupV2Update(update); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncHelper.java b/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncHelper.java index 29f3b6bde..21cf4a972 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncHelper.java @@ -11,7 +11,7 @@ import com.annimon.stream.Stream; import org.signal.core.util.SetUtil; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.RecipientRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; @@ -105,10 +105,10 @@ public final class StorageSyncHelper { } public static SignalStorageRecord buildAccountRecord(@NonNull Context context, @NonNull Recipient self) { - RecipientDatabase recipientDatabase = SignalDatabase.recipients(); - RecipientRecord record = recipientDatabase.getRecordForSync(self.getId()); + RecipientTable recipientTable = SignalDatabase.recipients(); + RecipientRecord record = recipientTable.getRecordForSync(self.getId()); List pinned = Stream.of(SignalDatabase.threads().getPinnedRecipientIds()) - .map(recipientDatabase::getRecordForSync) + .map(recipientTable::getRecordForSync) .toList(); final OptionalBool storyViewReceiptsState = SignalStore.storyValues().getViewedReceiptsEnabled() ? OptionalBool.ENABLED @@ -118,7 +118,7 @@ public final class StorageSyncHelper { Log.w(TAG, "[buildAccountRecord] No storageId for self! Generating. (Record had ID: " + (record != null && record.getStorageId() != null) + ")"); SignalDatabase.recipients().updateStorageId(self.getId(), generateKey()); self = Recipient.self().fresh(); - record = recipientDatabase.getRecordForSync(self.getId()); + record = recipientTable.getRecordForSync(self.getId()); } final boolean hasReadOnboardingStory = SignalStore.storyValues().getUserHasViewedOnboardingStory() || SignalStore.storyValues().getUserHasReadOnboardingStory(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncModels.java b/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncModels.java index 8100375ce..0ac1a407b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncModels.java +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncModels.java @@ -6,9 +6,9 @@ import androidx.annotation.Nullable; import com.annimon.stream.Stream; import org.signal.libsignal.zkgroup.groups.GroupMasterKey; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.IdentityDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.IdentityTable; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.DistributionListId; import org.thoughtcrime.securesms.database.model.DistributionListRecord; @@ -84,9 +84,9 @@ public final class StorageSyncModels { public static List localToRemotePinnedConversations(@NonNull List settings) { return Stream.of(settings) - .filter(s -> s.getGroupType() == RecipientDatabase.GroupType.SIGNAL_V1 || - s.getGroupType() == RecipientDatabase.GroupType.SIGNAL_V2 || - s.getRegistered() == RecipientDatabase.RegisteredState.REGISTERED) + .filter(s -> s.getGroupType() == RecipientTable.GroupType.SIGNAL_V1 || + s.getGroupType() == RecipientTable.GroupType.SIGNAL_V2 || + s.getRegistered() == RecipientTable.RegisteredState.REGISTERED) .map(StorageSyncModels::localToRemotePinnedConversation) .toList(); } @@ -164,9 +164,9 @@ public final class StorageSyncModels { throw new AssertionError("Group master key not on recipient record"); } - boolean hideStory = recipient.getExtras() != null && recipient.getExtras().hideStory(); - GroupDatabase.ShowAsStoryState showAsStoryState = SignalDatabase.groups().getShowAsStoryState(groupId); - GroupV2Record.StorySendMode storySendMode; + boolean hideStory = recipient.getExtras() != null && recipient.getExtras().hideStory(); + GroupTable.ShowAsStoryState showAsStoryState = SignalDatabase.groups().getShowAsStoryState(groupId); + GroupV2Record.StorySendMode storySendMode; switch (showAsStoryState) { case ALWAYS: @@ -185,7 +185,7 @@ public final class StorageSyncModels { .setArchived(recipient.getSyncExtras().isArchived()) .setForcedUnread(recipient.getSyncExtras().isForcedUnread()) .setMuteUntil(recipient.getMuteUntil()) - .setNotifyForMentionsWhenMuted(recipient.getMentionSetting() == RecipientDatabase.MentionSetting.ALWAYS_NOTIFY) + .setNotifyForMentionsWhenMuted(recipient.getMentionSetting() == RecipientTable.MentionSetting.ALWAYS_NOTIFY) .setHideStory(hideStory) .setStorySendMode(storySendMode) .build(); @@ -225,15 +225,15 @@ public final class StorageSyncModels { .build(); } - public static @NonNull IdentityDatabase.VerifiedStatus remoteToLocalIdentityStatus(@NonNull IdentityState identityState) { + public static @NonNull IdentityTable.VerifiedStatus remoteToLocalIdentityStatus(@NonNull IdentityState identityState) { switch (identityState) { - case VERIFIED: return IdentityDatabase.VerifiedStatus.VERIFIED; - case UNVERIFIED: return IdentityDatabase.VerifiedStatus.UNVERIFIED; - default: return IdentityDatabase.VerifiedStatus.DEFAULT; + case VERIFIED: return IdentityTable.VerifiedStatus.VERIFIED; + case UNVERIFIED: return IdentityTable.VerifiedStatus.UNVERIFIED; + default: return IdentityTable.VerifiedStatus.DEFAULT; } } - private static IdentityState localToRemoteIdentityState(@NonNull IdentityDatabase.VerifiedStatus local) { + private static IdentityState localToRemoteIdentityState(@NonNull IdentityTable.VerifiedStatus local) { switch (local) { case VERIFIED: return IdentityState.VERIFIED; case UNVERIFIED: return IdentityState.UNVERIFIED; diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/StoryDistributionListRecordProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/storage/StoryDistributionListRecordProcessor.java index 53f5e7bbd..9db08e934 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/StoryDistributionListRecordProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/StoryDistributionListRecordProcessor.java @@ -5,7 +5,7 @@ import androidx.annotation.Nullable; import org.signal.core.util.StringUtil; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.RecipientRecord; import org.thoughtcrime.securesms.recipients.RecipientId; @@ -84,7 +84,7 @@ public class StoryDistributionListRecordProcessor extends DefaultStorageRecordPr throw new IllegalStateException("Found matching recipient but couldn't generate record for sync."); } - if (recordForSync.getGroupType().getId() != RecipientDatabase.GroupType.DISTRIBUTION_LIST.getId()) { + if (recordForSync.getGroupType().getId() != RecipientTable.GroupType.DISTRIBUTION_LIST.getId()) { Log.d(TAG, "Record has an incorrect group type."); throw new InvalidGroupTypeException(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/Stories.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/Stories.kt index 55626520d..716fb0941 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/Stories.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/Stories.kt @@ -14,8 +14,8 @@ import org.signal.core.util.ThreadUtil import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.contacts.HeaderAction -import org.thoughtcrime.securesms.database.AttachmentDatabase -import org.thoughtcrime.securesms.database.AttachmentDatabase.TransformProperties +import org.thoughtcrime.securesms.database.AttachmentTable +import org.thoughtcrime.securesms.database.AttachmentTable.TransformProperties import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.DistributionListId import org.thoughtcrime.securesms.database.model.MmsMessageRecord @@ -337,11 +337,11 @@ object Stories { error("Illegal clip: $startTimeUs > $endTimeUs for clip $clipIndex") } - AttachmentDatabase.TransformProperties(false, true, startTimeUs, endTimeUs, SentMediaQuality.STANDARD.code) + AttachmentTable.TransformProperties(false, true, startTimeUs, endTimeUs, SentMediaQuality.STANDARD.code) }.map { transformMedia(media, it) } } - private fun transformMedia(media: Media, transformProperties: AttachmentDatabase.TransformProperties): Media { + private fun transformMedia(media: Media, transformProperties: AttachmentTable.TransformProperties): Media { Log.d(TAG, "Transforming media clip: ${transformProperties.videoTrimStartTimeUs.microseconds.inWholeSeconds}s to ${transformProperties.videoTrimEndTimeUs.microseconds.inWholeSeconds}s") return Media( media.uri, diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingRepository.kt index f365f86e1..dba2dd53e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/landing/StoriesLandingRepository.kt @@ -7,7 +7,7 @@ import io.reactivex.rxjava3.schedulers.Schedulers import org.signal.core.util.concurrent.SignalExecutors import org.thoughtcrime.securesms.conversation.ConversationMessage import org.thoughtcrime.securesms.database.DatabaseObserver -import org.thoughtcrime.securesms.database.MessageDatabase +import org.thoughtcrime.securesms.database.MessageTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.DistributionListId import org.thoughtcrime.securesms.database.model.MessageRecord @@ -170,7 +170,7 @@ class StoriesLandingRepository(context: Context) { */ fun markStoriesRead() { SignalExecutors.BOUNDED_IO.execute { - val messageInfos: List = SignalDatabase.mms.markAllIncomingStoriesRead() + val messageInfos: List = SignalDatabase.mms.markAllIncomingStoriesRead() val releaseThread: Long? = SignalStore.releaseChannelValues().releaseChannelRecipientId?.let { SignalDatabase.threads.getThreadIdIfExistsFor(it) } MultiDeviceReadUpdateJob.enqueue(messageInfos.filter { it.threadId == releaseThread }.map { it.syncMessageId }) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/group/GroupStorySettingsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/group/GroupStorySettingsRepository.kt index 99d534e06..e026c7b13 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/group/GroupStorySettingsRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/group/GroupStorySettingsRepository.kt @@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.stories.settings.group import io.reactivex.rxjava3.core.Completable import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.schedulers.Schedulers -import org.thoughtcrime.securesms.database.GroupDatabase +import org.thoughtcrime.securesms.database.GroupTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.groups.GroupId import org.thoughtcrime.securesms.recipients.Recipient @@ -12,7 +12,7 @@ import org.thoughtcrime.securesms.storage.StorageSyncHelper class GroupStorySettingsRepository { fun unmarkAsGroupStory(groupId: GroupId): Completable { return Completable.fromAction { - SignalDatabase.groups.setShowAsStoryState(groupId, GroupDatabase.ShowAsStoryState.NEVER) + SignalDatabase.groups.setShowAsStoryState(groupId, GroupTable.ShowAsStoryState.NEVER) SignalDatabase.recipients.markNeedsSync(Recipient.externalGroupExact(groupId).id) StorageSyncHelper.scheduleSyncForDataChange() }.subscribeOn(Schedulers.io()) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/select/BaseStoryRecipientSelectionRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/select/BaseStoryRecipientSelectionRepository.kt index ed52df486..a7bd7792b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/select/BaseStoryRecipientSelectionRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/select/BaseStoryRecipientSelectionRepository.kt @@ -4,7 +4,7 @@ import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.schedulers.Schedulers import org.signal.core.util.CursorUtil import org.signal.core.util.concurrent.SignalExecutors -import org.thoughtcrime.securesms.database.RecipientDatabase +import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.DistributionListId import org.thoughtcrime.securesms.database.model.DistributionListRecord @@ -42,7 +42,7 @@ class BaseStoryRecipientSelectionRepository { SignalDatabase.recipients.getSignalContacts(false)?.use { val recipientSet = mutableSetOf() while (it.moveToNext()) { - recipientSet.add(RecipientId.from(CursorUtil.requireLong(it, RecipientDatabase.ID))) + recipientSet.add(RecipientId.from(CursorUtil.requireLong(it, RecipientTable.ID))) } recipientSet diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsRepository.kt index d5a5653b0..7f6416b82 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/story/StoriesPrivacySettingsRepository.kt @@ -4,7 +4,7 @@ import io.reactivex.rxjava3.core.Completable import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.schedulers.Schedulers import org.signal.core.util.concurrent.SignalExecutors -import org.thoughtcrime.securesms.database.GroupDatabase +import org.thoughtcrime.securesms.database.GroupTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.keyvalue.SignalStore @@ -17,7 +17,7 @@ import org.thoughtcrime.securesms.stories.Stories class StoriesPrivacySettingsRepository { fun markGroupsAsStories(groups: List): Completable { return Completable.fromCallable { - SignalDatabase.groups.setShowAsStoryState(groups, GroupDatabase.ShowAsStoryState.ALWAYS) + SignalDatabase.groups.setShowAsStoryState(groups, GroupTable.ShowAsStoryState.ALWAYS) SignalDatabase.recipients.markNeedsSync(groups) StorageSyncHelper.scheduleSyncForDataChange() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerRepository.kt index b73b5927c..265bf3095 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/StoryViewerRepository.kt @@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.stories.viewer import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.schedulers.Schedulers -import org.thoughtcrime.securesms.database.MessageDatabase +import org.thoughtcrime.securesms.database.MessageTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.DistributionListId import org.thoughtcrime.securesms.database.model.MmsMessageRecord @@ -22,7 +22,7 @@ open class StoryViewerRepository { } else { Single.fromCallable { val recipient = Recipient.resolved(recipientId) - val reader: MessageDatabase.Reader = if (recipient.isMyStory || recipient.isSelf) { + val reader: MessageTable.Reader = if (recipient.isMyStory || recipient.isSelf) { SignalDatabase.mms.getAllOutgoingStories(false, 1) } else { val unread = SignalDatabase.mms.getUnreadStories(recipientId, 1) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryCache.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryCache.kt index d5dedd399..062c3549a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryCache.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryCache.kt @@ -7,7 +7,7 @@ import com.bumptech.glide.request.target.CustomTarget import com.bumptech.glide.request.transition.Transition import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.attachments.Attachment -import org.thoughtcrime.securesms.database.AttachmentDatabase +import org.thoughtcrime.securesms.database.AttachmentTable import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader import org.thoughtcrime.securesms.mms.GlideRequests import org.thoughtcrime.securesms.util.MediaUtil @@ -38,7 +38,7 @@ class StoryCache( .asSequence() .filter { it.uri != null && it.uri !in cache } .filter { MediaUtil.isImage(it) || it.blurHash != null } - .filter { it.transferState == AttachmentDatabase.TRANSFER_PROGRESS_DONE } + .filter { it.transferState == AttachmentTable.TRANSFER_PROGRESS_DONE } .toList() val newMappings: Map = prefetchableAttachments.associateWith { attachment -> diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryPost.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryPost.kt index d3358d2ff..7de533ee7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryPost.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryPost.kt @@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.stories.viewer.page import android.net.Uri import org.thoughtcrime.securesms.attachments.Attachment import org.thoughtcrime.securesms.conversation.ConversationMessage -import org.thoughtcrime.securesms.database.AttachmentDatabase +import org.thoughtcrime.securesms.database.AttachmentTable import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.util.MediaUtil import java.util.Objects @@ -33,7 +33,7 @@ data class StoryPost( override fun isText(): Boolean = false } class TextContent(uri: Uri, val recordId: Long, hasBody: Boolean, val length: Int) : Content(uri) { - override val transferState: Int = if (hasBody) AttachmentDatabase.TRANSFER_PROGRESS_DONE else AttachmentDatabase.TRANSFER_PROGRESS_FAILED + override val transferState: Int = if (hasBody) AttachmentTable.TRANSFER_PROGRESS_DONE else AttachmentTable.TRANSFER_PROGRESS_FAILED override fun isVideo(): Boolean = false diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageFragment.kt index 0f41b87ab..ca73bb7b6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageFragment.kt @@ -50,7 +50,7 @@ import org.thoughtcrime.securesms.conversation.colors.AvatarColor import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardBottomSheet import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragment import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragmentArgs -import org.thoughtcrime.securesms.database.AttachmentDatabase +import org.thoughtcrime.securesms.database.AttachmentTable import org.thoughtcrime.securesms.database.model.MediaMmsMessageRecord import org.thoughtcrime.securesms.mediapreview.MediaPreviewFragment import org.thoughtcrime.securesms.mediapreview.VideoControlsDelegate @@ -693,7 +693,7 @@ class StoryViewerPageFragment : private fun markViewedIfAble() { val post = viewModel.getPost() ?: return - if (post.content.transferState == AttachmentDatabase.TRANSFER_PROGRESS_DONE) { + if (post.content.transferState == AttachmentTable.TRANSFER_PROGRESS_DONE) { if (isResumed) { viewModel.markViewed(post) } @@ -737,27 +737,27 @@ class StoryViewerPageFragment : } when (post.content.transferState) { - AttachmentDatabase.TRANSFER_PROGRESS_DONE -> { + AttachmentTable.TRANSFER_PROGRESS_DONE -> { storySlate.moveToState(StorySlateView.State.HIDDEN, post.id) viewModel.setIsDisplayingSlate(false) markViewedIfAble() } - AttachmentDatabase.TRANSFER_PROGRESS_PENDING -> { + AttachmentTable.TRANSFER_PROGRESS_PENDING -> { storySlate.moveToState(StorySlateView.State.LOADING, post.id) sharedViewModel.setContentIsReady() viewModel.setIsDisplayingSlate(true) } - AttachmentDatabase.TRANSFER_PROGRESS_STARTED -> { + AttachmentTable.TRANSFER_PROGRESS_STARTED -> { storySlate.moveToState(StorySlateView.State.LOADING, post.id) sharedViewModel.setContentIsReady() viewModel.setIsDisplayingSlate(true) } - AttachmentDatabase.TRANSFER_PROGRESS_FAILED -> { + AttachmentTable.TRANSFER_PROGRESS_FAILED -> { storySlate.moveToState(StorySlateView.State.ERROR, post.id) sharedViewModel.setContentIsReady() viewModel.setIsDisplayingSlate(true) } - AttachmentDatabase.TRANSFER_PROGRESS_PERMANENT_FAILURE -> { + AttachmentTable.TRANSFER_PROGRESS_PERMANENT_FAILURE -> { storySlate.moveToState(StorySlateView.State.FAILED, post.id, post.sender) sharedViewModel.setContentIsReady() viewModel.setIsDisplayingSlate(true) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageViewModel.kt index eaf88e163..687a59dd1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/page/StoryViewerPageViewModel.kt @@ -13,7 +13,7 @@ import io.reactivex.rxjava3.kotlin.plusAssign import io.reactivex.rxjava3.subjects.PublishSubject import io.reactivex.rxjava3.subjects.Subject import org.thoughtcrime.securesms.attachments.Attachment -import org.thoughtcrime.securesms.database.AttachmentDatabase +import org.thoughtcrime.securesms.database.AttachmentTable import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.util.livedata.Store import org.thoughtcrime.securesms.util.rx.RxStore @@ -119,7 +119,7 @@ class StoryViewerPageViewModel( fun setSelectedPostIndex(index: Int) { val selectedPost = getPostAt(index) - if (selectedPost != null && selectedPost.content.transferState != AttachmentDatabase.TRANSFER_PROGRESS_DONE) { + if (selectedPost != null && selectedPost.content.transferState != AttachmentTable.TRANSFER_PROGRESS_DONE) { disposables += repository.forceDownload(selectedPost).subscribe() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyDataSource.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyDataSource.kt index 9ff059b29..bd1af8e86 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyDataSource.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyDataSource.kt @@ -2,8 +2,8 @@ package org.thoughtcrime.securesms.stories.viewer.reply.group import org.signal.paging.PagedDataSource import org.thoughtcrime.securesms.conversation.ConversationMessage -import org.thoughtcrime.securesms.database.MmsDatabase import org.thoughtcrime.securesms.database.MmsSmsColumns +import org.thoughtcrime.securesms.database.MmsTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.MessageId import org.thoughtcrime.securesms.database.model.MmsMessageRecord @@ -18,7 +18,7 @@ class StoryGroupReplyDataSource(private val parentStoryId: Long) : PagedDataSour val results: MutableList = ArrayList(length) SignalDatabase.mms.getStoryReplies(parentStoryId).use { cursor -> cursor.moveToPosition(start - 1) - val reader = MmsDatabase.Reader(cursor) + val reader = MmsTable.Reader(cursor) while (cursor.moveToNext() && cursor.position < start + length) { results.add(readRowFromRecord(reader.current as MmsMessageRecord)) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/views/StoryViewsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/views/StoryViewsRepository.kt index 05898c1b8..d127721c7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/views/StoryViewsRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/views/StoryViewsRepository.kt @@ -6,7 +6,7 @@ import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.schedulers.Schedulers import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.database.DatabaseObserver -import org.thoughtcrime.securesms.database.GroupReceiptDatabase +import org.thoughtcrime.securesms.database.GroupReceiptTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.MessageRecord import org.thoughtcrime.securesms.dependencies.ApplicationDependencies @@ -44,7 +44,7 @@ class StoryViewsRepository { fun refresh() { emitter.onNext( SignalDatabase.groupReceipts.getGroupReceiptInfo(storyId).filter { - it.status == GroupReceiptDatabase.STATUS_VIEWED + it.status == GroupReceiptTable.STATUS_VIEWED }.filter { filterIds.isEmpty() || it.recipientId in filterIds }.map { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/CommunicationActions.java b/app/src/main/java/org/thoughtcrime/securesms/util/CommunicationActions.java index 4a847d6dd..f5255b023 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/CommunicationActions.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/CommunicationActions.java @@ -29,7 +29,7 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.WebRtcCallActivity; import org.thoughtcrime.securesms.contacts.sync.ContactDiscovery; import org.thoughtcrime.securesms.conversation.ConversationIntents; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; @@ -237,7 +237,7 @@ public class CommunicationActions { GroupId.V2 groupId = GroupId.v2(groupInviteLinkUrl.getGroupMasterKey()); SimpleTask.run(SignalExecutors.BOUNDED, () -> { - GroupDatabase.GroupRecord group = SignalDatabase.groups().getGroup(groupId).orElse(null); + GroupTable.GroupRecord group = SignalDatabase.groups().getGroup(groupId).orElse(null); return group != null && group.isActive() ? Recipient.resolved(group.getRecipientId()) : null; diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/ConversationUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/ConversationUtil.java index ba1240bd8..ef315c312 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/ConversationUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/ConversationUtil.java @@ -17,7 +17,7 @@ import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.conversation.ConversationIntents; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.jobs.ConversationShortcutUpdateJob; @@ -241,7 +241,7 @@ public final class ConversationUtil { */ @WorkerThread private static @NonNull Person[] buildPersonsForGroup(@NonNull Context context, @NonNull GroupId groupId) { - List members = SignalDatabase.groups().getGroupMembers(groupId, GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); + List members = SignalDatabase.groups().getGroupMembers(groupId, GroupTable.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); return Stream.of(members).map(member -> buildPersonWithoutIcon(context, member.resolve())).toArray(Person[]::new); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/EarlyMessageCache.java b/app/src/main/java/org/thoughtcrime/securesms/util/EarlyMessageCache.java index 32e99cc79..822a133ac 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/EarlyMessageCache.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/EarlyMessageCache.java @@ -2,8 +2,6 @@ package org.thoughtcrime.securesms.util; import androidx.annotation.NonNull; -import org.thoughtcrime.securesms.database.MessageDatabase; -import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.database.model.ServiceMessageId; import org.thoughtcrime.securesms.recipients.RecipientId; import org.whispersystems.signalservice.api.messages.SignalServiceContent; @@ -12,7 +10,6 @@ import java.util.Collection; import java.util.HashSet; import java.util.LinkedList; import java.util.List; -import java.util.Objects; import java.util.Optional; /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/GroupUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/GroupUtil.java index 7025d3e56..37bfbb9f0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/GroupUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/GroupUtil.java @@ -12,7 +12,7 @@ import org.signal.core.util.logging.Log; import org.signal.libsignal.zkgroup.InvalidInputException; import org.signal.libsignal.zkgroup.groups.GroupMasterKey; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.database.GroupDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.mms.MessageGroupContext; @@ -93,9 +93,9 @@ public final class GroupUtil { @NonNull GroupId.Push groupId) { if (groupId.isV2()) { - GroupDatabase groupDatabase = SignalDatabase.groups(); - GroupDatabase.GroupRecord groupRecord = groupDatabase.requireGroup(groupId); - GroupDatabase.V2GroupProperties v2GroupProperties = groupRecord.requireV2GroupProperties(); + GroupTable groupDatabase = SignalDatabase.groups(); + GroupTable.GroupRecord groupRecord = groupDatabase.requireGroup(groupId); + GroupTable.V2GroupProperties v2GroupProperties = groupRecord.requireV2GroupProperties(); SignalServiceGroupV2 group = SignalServiceGroupV2.newBuilder(v2GroupProperties.getGroupMasterKey()) .withRevision(v2GroupProperties.getGroupRevision()) .build(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/IdentityUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/IdentityUtil.java index 38c0987ad..d17132581 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/IdentityUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/IdentityUtil.java @@ -15,10 +15,10 @@ import org.signal.libsignal.protocol.state.SessionStore; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.crypto.ReentrantSessionLock; import org.thoughtcrime.securesms.crypto.storage.SignalIdentityKeyStore; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.IdentityDatabase; -import org.thoughtcrime.securesms.database.MessageDatabase; -import org.thoughtcrime.securesms.database.MessageDatabase.InsertResult; +import org.thoughtcrime.securesms.database.GroupTable; +import org.thoughtcrime.securesms.database.IdentityTable; +import org.thoughtcrime.securesms.database.MessageTable; +import org.thoughtcrime.securesms.database.MessageTable.InsertResult; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.IdentityRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; @@ -62,13 +62,13 @@ public final class IdentityUtil { public static void markIdentityVerified(Context context, Recipient recipient, boolean verified, boolean remote) { - long time = System.currentTimeMillis(); - MessageDatabase smsDatabase = SignalDatabase.sms(); - GroupDatabase groupDatabase = SignalDatabase.groups(); + long time = System.currentTimeMillis(); + MessageTable smsDatabase = SignalDatabase.sms(); + GroupTable groupDatabase = SignalDatabase.groups(); - try (GroupDatabase.Reader reader = groupDatabase.getGroups()) { + try (GroupTable.Reader reader = groupDatabase.getGroups()) { - GroupDatabase.GroupRecord groupRecord; + GroupTable.GroupRecord groupRecord; while ((groupRecord = reader.getNext()) != null) { if (groupRecord.getMembers().contains(recipient.getId()) && groupRecord.isActive() && !groupRecord.isMms()) { @@ -121,12 +121,12 @@ public final class IdentityUtil { public static void markIdentityUpdate(@NonNull Context context, @NonNull RecipientId recipientId) { Log.w(TAG, "Inserting safety number change event(s) for " + recipientId, new Throwable()); - long time = System.currentTimeMillis(); - MessageDatabase smsDatabase = SignalDatabase.sms(); - GroupDatabase groupDatabase = SignalDatabase.groups(); + long time = System.currentTimeMillis(); + MessageTable smsDatabase = SignalDatabase.sms(); + GroupTable groupDatabase = SignalDatabase.groups(); - try (GroupDatabase.Reader reader = groupDatabase.getGroups()) { - GroupDatabase.GroupRecord groupRecord; + try (GroupTable.Reader reader = groupDatabase.getGroups()) { + GroupTable.GroupRecord groupRecord; while ((groupRecord = reader.getNext()) != null) { if (groupRecord.getMembers().contains(recipientId) && groupRecord.isActive()) { @@ -183,21 +183,21 @@ public final class IdentityUtil { if (verifiedMessage.getVerified() == VerifiedMessage.VerifiedState.DEFAULT && identityRecord.isPresent() && identityRecord.get().getIdentityKey().equals(verifiedMessage.getIdentityKey()) && - identityRecord.get().getVerifiedStatus() != IdentityDatabase.VerifiedStatus.DEFAULT) + identityRecord.get().getVerifiedStatus() != IdentityTable.VerifiedStatus.DEFAULT) { - Log.i(TAG, "Setting " + recipient.getId() + " verified status to " + IdentityDatabase.VerifiedStatus.DEFAULT); - identityStore.setVerified(recipient.getId(), identityRecord.get().getIdentityKey(), IdentityDatabase.VerifiedStatus.DEFAULT); + Log.i(TAG, "Setting " + recipient.getId() + " verified status to " + IdentityTable.VerifiedStatus.DEFAULT); + identityStore.setVerified(recipient.getId(), identityRecord.get().getIdentityKey(), IdentityTable.VerifiedStatus.DEFAULT); markIdentityVerified(context, recipient, false, true); } if (verifiedMessage.getVerified() == VerifiedMessage.VerifiedState.VERIFIED && (!identityRecord.isPresent() || (identityRecord.isPresent() && !identityRecord.get().getIdentityKey().equals(verifiedMessage.getIdentityKey())) || - (identityRecord.isPresent() && identityRecord.get().getVerifiedStatus() != IdentityDatabase.VerifiedStatus.VERIFIED))) + (identityRecord.isPresent() && identityRecord.get().getVerifiedStatus() != IdentityTable.VerifiedStatus.VERIFIED))) { - Log.i(TAG, "Setting " + recipient.getId() + " verified status to " + IdentityDatabase.VerifiedStatus.VERIFIED); + Log.i(TAG, "Setting " + recipient.getId() + " verified status to " + IdentityTable.VerifiedStatus.VERIFIED); saveIdentity(verifiedMessage.getDestination().getIdentifier(), verifiedMessage.getIdentityKey()); - identityStore.setVerified(recipient.getId(), verifiedMessage.getIdentityKey(), IdentityDatabase.VerifiedStatus.VERIFIED); + identityStore.setVerified(recipient.getId(), verifiedMessage.getIdentityKey(), IdentityTable.VerifiedStatus.VERIFIED); markIdentityVerified(context, recipient, true, true); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/ProfileUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/ProfileUtil.java index fce249089..1de5a2b21 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/ProfileUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/ProfileUtil.java @@ -17,7 +17,7 @@ import org.signal.libsignal.zkgroup.profiles.ProfileKey; import org.thoughtcrime.securesms.badges.models.Badge; import org.thoughtcrime.securesms.crypto.ProfileKeyUtil; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Job; @@ -378,7 +378,7 @@ public final class ProfileUtil { } private static @NonNull SignalServiceAddress toSignalServiceAddress(@NonNull Context context, @NonNull Recipient recipient) throws IOException { - if (recipient.getRegistered() == RecipientDatabase.RegisteredState.NOT_REGISTERED) { + if (recipient.getRegistered() == RecipientTable.RegisteredState.NOT_REGISTERED) { if (recipient.hasServiceId()) { return new SignalServiceAddress(recipient.requireServiceId(), recipient.getE164().orElse(null)); } else { diff --git a/app/src/main/java/org/thoughtcrime/securesms/verify/VerifyDisplayFragment.java b/app/src/main/java/org/thoughtcrime/securesms/verify/VerifyDisplayFragment.java index a3a43c7b3..d62ab30ae 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/verify/VerifyDisplayFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/verify/VerifyDisplayFragment.java @@ -50,7 +50,7 @@ import org.signal.libsignal.protocol.fingerprint.NumericFingerprintGenerator; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.crypto.IdentityKeyParcelable; import org.thoughtcrime.securesms.crypto.ReentrantSessionLock; -import org.thoughtcrime.securesms.database.IdentityDatabase; +import org.thoughtcrime.securesms.database.IdentityTable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobs.MultiDeviceVerifiedUpdateJob; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -545,19 +545,19 @@ public class VerifyDisplayFragment extends Fragment implements ViewTreeObserver. ApplicationDependencies.getProtocolStore().aci().identities() .saveIdentityWithoutSideEffects(recipientId, remoteIdentity, - IdentityDatabase.VerifiedStatus.VERIFIED, + IdentityTable.VerifiedStatus.VERIFIED, false, System.currentTimeMillis(), true); } else { - ApplicationDependencies.getProtocolStore().aci().identities().setVerified(recipientId, remoteIdentity, IdentityDatabase.VerifiedStatus.DEFAULT); + ApplicationDependencies.getProtocolStore().aci().identities().setVerified(recipientId, remoteIdentity, IdentityTable.VerifiedStatus.DEFAULT); } ApplicationDependencies.getJobManager() .add(new MultiDeviceVerifiedUpdateJob(recipientId, remoteIdentity, - verified ? IdentityDatabase.VerifiedStatus.VERIFIED - : IdentityDatabase.VerifiedStatus.DEFAULT)); + verified ? IdentityTable.VerifiedStatus.VERIFIED + : IdentityTable.VerifiedStatus.DEFAULT)); StorageSyncHelper.scheduleSyncForDataChange(); IdentityUtil.markIdentityVerified(context, recipient.get(), verified, false); diff --git a/app/src/main/java/org/thoughtcrime/securesms/verify/VerifyIdentityActivity.java b/app/src/main/java/org/thoughtcrime/securesms/verify/VerifyIdentityActivity.java index 04b9c4d17..84ef27d7c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/verify/VerifyIdentityActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/verify/VerifyIdentityActivity.java @@ -9,7 +9,7 @@ import androidx.annotation.NonNull; import org.signal.libsignal.protocol.IdentityKey; import org.thoughtcrime.securesms.PassphraseRequiredActivity; import org.thoughtcrime.securesms.crypto.IdentityKeyParcelable; -import org.thoughtcrime.securesms.database.IdentityDatabase; +import org.thoughtcrime.securesms.database.IdentityTable; import org.thoughtcrime.securesms.database.model.IdentityRecord; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme; @@ -34,7 +34,7 @@ public class VerifyIdentityActivity extends PassphraseRequiredActivity { return newIntent(context, identityRecord.getRecipientId(), identityRecord.getIdentityKey(), - identityRecord.getVerifiedStatus() == IdentityDatabase.VerifiedStatus.VERIFIED); + identityRecord.getVerifiedStatus() == IdentityTable.VerifiedStatus.VERIFIED); } public static Intent newIntent(@NonNull Context context, diff --git a/app/src/main/java/org/thoughtcrime/securesms/video/exo/PartDataSource.java b/app/src/main/java/org/thoughtcrime/securesms/video/exo/PartDataSource.java index 828627974..081c7623f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/video/exo/PartDataSource.java +++ b/app/src/main/java/org/thoughtcrime/securesms/video/exo/PartDataSource.java @@ -12,7 +12,7 @@ import com.google.android.exoplayer2.upstream.DataSpec; import com.google.android.exoplayer2.upstream.TransferListener; import org.thoughtcrime.securesms.attachments.Attachment; -import org.thoughtcrime.securesms.database.AttachmentDatabase; +import org.thoughtcrime.securesms.database.AttachmentTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.mms.PartUriParser; @@ -44,8 +44,8 @@ class PartDataSource implements DataSource { public long open(DataSpec dataSpec) throws IOException { this.uri = dataSpec.uri; - AttachmentDatabase attachmentDatabase = SignalDatabase.attachments(); - PartUriParser partUri = new PartUriParser(uri); + AttachmentTable attachmentDatabase = SignalDatabase.attachments(); + PartUriParser partUri = new PartUriParser(uri); Attachment attachment = attachmentDatabase.getAttachment(partUri.getPartId()); if (attachment == null) throw new IOException("Attachment not found"); diff --git a/app/src/spinner/java/org/thoughtcrime/securesms/database/GV2Transformer.kt b/app/src/spinner/java/org/thoughtcrime/securesms/database/GV2Transformer.kt index 2095a6eda..af1e35d19 100644 --- a/app/src/spinner/java/org/thoughtcrime/securesms/database/GV2Transformer.kt +++ b/app/src/spinner/java/org/thoughtcrime/securesms/database/GV2Transformer.kt @@ -14,16 +14,16 @@ import org.whispersystems.signalservice.api.util.UuidUtil object GV2Transformer : ColumnTransformer { override fun matches(tableName: String?, columnName: String): Boolean { - return columnName == GroupDatabase.V2_DECRYPTED_GROUP || columnName == GroupDatabase.MEMBERS + return columnName == GroupTable.V2_DECRYPTED_GROUP || columnName == GroupTable.MEMBERS } override fun transform(tableName: String?, columnName: String, cursor: Cursor): String { - return if (columnName == GroupDatabase.V2_DECRYPTED_GROUP) { - val groupBytes = cursor.requireBlob(GroupDatabase.V2_DECRYPTED_GROUP) + return if (columnName == GroupTable.V2_DECRYPTED_GROUP) { + val groupBytes = cursor.requireBlob(GroupTable.V2_DECRYPTED_GROUP) val group = DecryptedGroup.parseFrom(groupBytes) group.formatAsHtml() } else { - val members = cursor.requireString(GroupDatabase.MEMBERS) + val members = cursor.requireString(GroupTable.MEMBERS) members?.split(',')?.chunked(20)?.joinToString("
") { it.joinToString(",") } ?: "" } } diff --git a/app/src/spinner/java/org/thoughtcrime/securesms/database/GV2UpdateTransformer.kt b/app/src/spinner/java/org/thoughtcrime/securesms/database/GV2UpdateTransformer.kt index dd9a2c2d7..9becc0e1f 100644 --- a/app/src/spinner/java/org/thoughtcrime/securesms/database/GV2UpdateTransformer.kt +++ b/app/src/spinner/java/org/thoughtcrime/securesms/database/GV2UpdateTransformer.kt @@ -13,7 +13,7 @@ import org.thoughtcrime.securesms.util.Base64 object GV2UpdateTransformer : ColumnTransformer { override fun matches(tableName: String?, columnName: String): Boolean { - return columnName == MmsSmsColumns.BODY && (tableName == null || (tableName == SmsDatabase.TABLE_NAME || tableName == MmsDatabase.TABLE_NAME)) + return columnName == MmsSmsColumns.BODY && (tableName == null || (tableName == SmsTable.TABLE_NAME || tableName == MmsTable.TABLE_NAME)) } override fun transform(tableName: String?, columnName: String, cursor: Cursor): String { @@ -39,8 +39,8 @@ object GV2UpdateTransformer : ColumnTransformer { private fun Cursor.getMessageType(): Long { return when { - getColumnIndex(SmsDatabase.TYPE) != -1 -> requireLong(SmsDatabase.TYPE) - getColumnIndex(MmsDatabase.MESSAGE_BOX) != -1 -> requireLong(MmsDatabase.MESSAGE_BOX) + getColumnIndex(SmsTable.TYPE) != -1 -> requireLong(SmsTable.TYPE) + getColumnIndex(MmsTable.MESSAGE_BOX) != -1 -> requireLong(MmsTable.MESSAGE_BOX) else -> -1 } } diff --git a/app/src/spinner/java/org/thoughtcrime/securesms/database/IsStoryTransformer.kt b/app/src/spinner/java/org/thoughtcrime/securesms/database/IsStoryTransformer.kt index c6fb16a39..00f1e9139 100644 --- a/app/src/spinner/java/org/thoughtcrime/securesms/database/IsStoryTransformer.kt +++ b/app/src/spinner/java/org/thoughtcrime/securesms/database/IsStoryTransformer.kt @@ -7,11 +7,11 @@ import org.thoughtcrime.securesms.database.model.StoryType.Companion.fromCode object IsStoryTransformer : ColumnTransformer { override fun matches(tableName: String?, columnName: String): Boolean { - return columnName == MmsDatabase.STORY_TYPE && (tableName == null || tableName == MmsDatabase.TABLE_NAME) + return columnName == MmsTable.STORY_TYPE && (tableName == null || tableName == MmsTable.TABLE_NAME) } override fun transform(tableName: String?, columnName: String, cursor: Cursor): String { - val storyType = fromCode(cursor.requireInt(MmsDatabase.STORY_TYPE)) - return "${cursor.requireInt(MmsDatabase.STORY_TYPE)}

$storyType" + val storyType = fromCode(cursor.requireInt(MmsTable.STORY_TYPE)) + return "${cursor.requireInt(MmsTable.STORY_TYPE)}

$storyType" } } diff --git a/app/src/spinner/java/org/thoughtcrime/securesms/database/ProfileKeyCredentialTransformer.kt b/app/src/spinner/java/org/thoughtcrime/securesms/database/ProfileKeyCredentialTransformer.kt index 6db4ca3fb..bce0ba206 100644 --- a/app/src/spinner/java/org/thoughtcrime/securesms/database/ProfileKeyCredentialTransformer.kt +++ b/app/src/spinner/java/org/thoughtcrime/securesms/database/ProfileKeyCredentialTransformer.kt @@ -13,11 +13,11 @@ import java.security.MessageDigest object ProfileKeyCredentialTransformer : ColumnTransformer { override fun matches(tableName: String?, columnName: String): Boolean { - return columnName == RecipientDatabase.EXPIRING_PROFILE_KEY_CREDENTIAL && (tableName == null || tableName == RecipientDatabase.TABLE_NAME) + return columnName == RecipientTable.EXPIRING_PROFILE_KEY_CREDENTIAL && (tableName == null || tableName == RecipientTable.TABLE_NAME) } override fun transform(tableName: String?, columnName: String, cursor: Cursor): String { - val columnDataString = cursor.requireString(RecipientDatabase.EXPIRING_PROFILE_KEY_CREDENTIAL) ?: return DefaultColumnTransformer.transform(tableName, columnName, cursor) + val columnDataString = cursor.requireString(RecipientTable.EXPIRING_PROFILE_KEY_CREDENTIAL) ?: return DefaultColumnTransformer.transform(tableName, columnName, cursor) val columnDataBytes = Base64.decode(columnDataString) val columnData = ExpiringProfileKeyCredentialColumnData.parseFrom(columnDataBytes) val credential = ExpiringProfileKeyCredential(columnData.expiringProfileKeyCredential.toByteArray()) diff --git a/app/src/test/java/org/thoughtcrime/securesms/contacts/paged/SafetyNumberRepositoryTest.kt b/app/src/test/java/org/thoughtcrime/securesms/contacts/paged/SafetyNumberRepositoryTest.kt index 4747805a8..f8ec47e01 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/contacts/paged/SafetyNumberRepositoryTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/contacts/paged/SafetyNumberRepositoryTest.kt @@ -23,7 +23,7 @@ import org.robolectric.annotation.Config import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.crypto.IdentityKeyUtil import org.thoughtcrime.securesms.crypto.storage.SignalIdentityKeyStore -import org.thoughtcrime.securesms.database.IdentityDatabase +import org.thoughtcrime.securesms.database.IdentityTable import org.thoughtcrime.securesms.database.RecipientDatabaseTestUtils import org.thoughtcrime.securesms.database.model.IdentityRecord import org.thoughtcrime.securesms.recipients.Recipient @@ -90,7 +90,7 @@ class SafetyNumberRepositoryTest { val record = IdentityRecord( recipientId = recipient.id, identityKey = IdentityKeyUtil.generateIdentityKeyPair().publicKey, - verifiedStatus = IdentityDatabase.VerifiedStatus.DEFAULT, + verifiedStatus = IdentityTable.VerifiedStatus.DEFAULT, firstUse = false, timestamp = 0, nonblockingApproval = false diff --git a/app/src/test/java/org/thoughtcrime/securesms/conversationlist/UnarchivedConversationListDataSourceTest.java b/app/src/test/java/org/thoughtcrime/securesms/conversationlist/UnarchivedConversationListDataSourceTest.java index 4f0af9873..b7f293adf 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/conversationlist/UnarchivedConversationListDataSourceTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/conversationlist/UnarchivedConversationListDataSourceTest.java @@ -17,7 +17,7 @@ import org.thoughtcrime.securesms.conversationlist.model.ConversationFilter; import org.thoughtcrime.securesms.conversationlist.model.ConversationReader; import org.thoughtcrime.securesms.database.DatabaseObserver; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import static org.junit.Assert.assertEquals; @@ -45,13 +45,13 @@ public class UnarchivedConversationListDataSourceTest { private ConversationListDataSource.UnarchivedConversationListDataSource testSubject; - private ThreadDatabase threadDatabase; + private ThreadTable threadTable; @Before public void setUp() { - threadDatabase = mock(ThreadDatabase.class); + threadTable = mock(ThreadTable.class); - when(SignalDatabase.threads()).thenReturn(threadDatabase); + when(SignalDatabase.threads()).thenReturn(threadTable); when(ApplicationDependencies.getDatabaseObserver()).thenReturn(mock(DatabaseObserver.class)); testSubject = new ConversationListDataSource.UnarchivedConversationListDataSource(ConversationFilter.OFF); @@ -74,7 +74,7 @@ public class UnarchivedConversationListDataSourceTest { @Test public void givenArchivedConversations_whenIGetTotalCount_thenIExpectOne() { // GIVEN - when(threadDatabase.getArchivedConversationListCount(ConversationFilter.OFF)).thenReturn(12); + when(threadTable.getArchivedConversationListCount(ConversationFilter.OFF)).thenReturn(12); // WHEN int result = testSubject.getTotalCount(); @@ -91,9 +91,9 @@ public class UnarchivedConversationListDataSourceTest { @Test public void givenSinglePinnedAndArchivedConversations_whenIGetTotalCount_thenIExpectThree() { // GIVEN - when(threadDatabase.getPinnedConversationListCount(ConversationFilter.OFF)).thenReturn(1); - when(threadDatabase.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(1); - when(threadDatabase.getArchivedConversationListCount(ConversationFilter.OFF)).thenReturn(12); + when(threadTable.getPinnedConversationListCount(ConversationFilter.OFF)).thenReturn(1); + when(threadTable.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(1); + when(threadTable.getArchivedConversationListCount(ConversationFilter.OFF)).thenReturn(12); // WHEN int result = testSubject.getTotalCount(); @@ -110,8 +110,8 @@ public class UnarchivedConversationListDataSourceTest { @Test public void givenSingleUnpinnedAndArchivedConversations_whenIGetTotalCount_thenIExpectTwo() { // GIVEN - when(threadDatabase.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(1); - when(threadDatabase.getArchivedConversationListCount(ConversationFilter.OFF)).thenReturn(12); + when(threadTable.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(1); + when(threadTable.getArchivedConversationListCount(ConversationFilter.OFF)).thenReturn(12); // WHEN int result = testSubject.getTotalCount(); @@ -128,8 +128,8 @@ public class UnarchivedConversationListDataSourceTest { @Test public void givenSinglePinnedAndSingleUnpinned_whenIGetTotalCount_thenIExpectFour() { // GIVEN - when(threadDatabase.getPinnedConversationListCount(ConversationFilter.OFF)).thenReturn(1); - when(threadDatabase.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(2); + when(threadTable.getPinnedConversationListCount(ConversationFilter.OFF)).thenReturn(1); + when(threadTable.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(2); // WHEN int result = testSubject.getTotalCount(); @@ -152,8 +152,8 @@ public class UnarchivedConversationListDataSourceTest { Cursor cursor = testSubject.getCursor(0, 100); // THEN - verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, true, 0, 100); - verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, false, 0, 100); + verify(threadTable).getUnarchivedConversationList(ConversationFilter.OFF, true, 0, 100); + verify(threadTable).getUnarchivedConversationList(ConversationFilter.OFF, false, 0, 100); assertEquals(0, cursor.getCount()); } @@ -161,15 +161,15 @@ public class UnarchivedConversationListDataSourceTest { public void givenArchivedConversations_whenIGetCursor_thenIExpectOne() { // GIVEN setupThreadDatabaseCursors(0, 0); - when(threadDatabase.getArchivedConversationListCount(ConversationFilter.OFF)).thenReturn(12); + when(threadTable.getArchivedConversationListCount(ConversationFilter.OFF)).thenReturn(12); testSubject.getTotalCount(); // WHEN Cursor cursor = testSubject.getCursor(0, 100); // THEN - verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, true, 0, 100); - verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, false, 0, 100); + verify(threadTable).getUnarchivedConversationList(ConversationFilter.OFF, true, 0, 100); + verify(threadTable).getUnarchivedConversationList(ConversationFilter.OFF, false, 0, 100); assertEquals(1, cursor.getCount()); } @@ -177,17 +177,17 @@ public class UnarchivedConversationListDataSourceTest { public void givenSinglePinnedAndArchivedConversations_whenIGetCursor_thenIExpectThree() { // GIVEN setupThreadDatabaseCursors(1, 0); - when(threadDatabase.getPinnedConversationListCount(ConversationFilter.OFF)).thenReturn(1); - when(threadDatabase.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(1); - when(threadDatabase.getArchivedConversationListCount(ConversationFilter.OFF)).thenReturn(12); + when(threadTable.getPinnedConversationListCount(ConversationFilter.OFF)).thenReturn(1); + when(threadTable.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(1); + when(threadTable.getArchivedConversationListCount(ConversationFilter.OFF)).thenReturn(12); testSubject.getTotalCount(); // WHEN Cursor cursor = testSubject.getCursor(0, 100); // THEN - verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, true, 0, 99); - verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, false, 0, 98); + verify(threadTable).getUnarchivedConversationList(ConversationFilter.OFF, true, 0, 99); + verify(threadTable).getUnarchivedConversationList(ConversationFilter.OFF, false, 0, 98); assertEquals(3, cursor.getCount()); } @@ -195,16 +195,16 @@ public class UnarchivedConversationListDataSourceTest { public void givenSingleUnpinnedAndArchivedConversations_whenIGetCursor_thenIExpectTwo() { // GIVEN setupThreadDatabaseCursors(0, 1); - when(threadDatabase.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(1); - when(threadDatabase.getArchivedConversationListCount(ConversationFilter.OFF)).thenReturn(12); + when(threadTable.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(1); + when(threadTable.getArchivedConversationListCount(ConversationFilter.OFF)).thenReturn(12); testSubject.getTotalCount(); // WHEN Cursor cursor = testSubject.getCursor(0, 100); // THEN - verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, true, 0, 100); - verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, false, 0, 100); + verify(threadTable).getUnarchivedConversationList(ConversationFilter.OFF, true, 0, 100); + verify(threadTable).getUnarchivedConversationList(ConversationFilter.OFF, false, 0, 100); assertEquals(2, cursor.getCount()); } @@ -212,16 +212,16 @@ public class UnarchivedConversationListDataSourceTest { public void givenSinglePinnedAndSingleUnpinned_whenIGetCursor_thenIExpectFour() { // GIVEN setupThreadDatabaseCursors(1, 1); - when(threadDatabase.getPinnedConversationListCount(ConversationFilter.OFF)).thenReturn(1); - when(threadDatabase.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(2); + when(threadTable.getPinnedConversationListCount(ConversationFilter.OFF)).thenReturn(1); + when(threadTable.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(2); testSubject.getTotalCount(); // WHEN Cursor cursor = testSubject.getCursor(0, 100); // THEN - verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, true, 0, 99); - verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, false, 0, 97); + verify(threadTable).getUnarchivedConversationList(ConversationFilter.OFF, true, 0, 99); + verify(threadTable).getUnarchivedConversationList(ConversationFilter.OFF, false, 0, 97); assertEquals(4, cursor.getCount()); } @@ -229,16 +229,16 @@ public class UnarchivedConversationListDataSourceTest { public void givenLoadingSecondPage_whenIGetCursor_thenIExpectProperOffsetAndCursorCount() { // GIVEN setupThreadDatabaseCursors(0, 100); - when(threadDatabase.getPinnedConversationListCount(ConversationFilter.OFF)).thenReturn(4); - when(threadDatabase.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(104); + when(threadTable.getPinnedConversationListCount(ConversationFilter.OFF)).thenReturn(4); + when(threadTable.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(104); testSubject.getTotalCount(); // WHEN Cursor cursor = testSubject.getCursor(50, 100); // THEN - verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, true, 50, 100); - verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, false, 44, 100); + verify(threadTable).getUnarchivedConversationList(ConversationFilter.OFF, true, 50, 100); + verify(threadTable).getUnarchivedConversationList(ConversationFilter.OFF, false, 44, 100); assertEquals(100, cursor.getCount()); } @@ -246,17 +246,17 @@ public class UnarchivedConversationListDataSourceTest { public void givenHasArchivedAndLoadingLastPage_whenIGetCursor_thenIExpectProperOffsetAndCursorCount() { // GIVEN setupThreadDatabaseCursors(0, 99); - when(threadDatabase.getPinnedConversationListCount(ConversationFilter.OFF)).thenReturn(4); - when(threadDatabase.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(103); - when(threadDatabase.getArchivedConversationListCount(ConversationFilter.OFF)).thenReturn(12); + when(threadTable.getPinnedConversationListCount(ConversationFilter.OFF)).thenReturn(4); + when(threadTable.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(103); + when(threadTable.getArchivedConversationListCount(ConversationFilter.OFF)).thenReturn(12); testSubject.getTotalCount(); // WHEN Cursor cursor = testSubject.getCursor(50, 100); // THEN - verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, true, 50, 100); - verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, false, 44, 100); + verify(threadTable).getUnarchivedConversationList(ConversationFilter.OFF, true, 50, 100); + verify(threadTable).getUnarchivedConversationList(ConversationFilter.OFF, false, 44, 100); assertEquals(100, cursor.getCount()); cursor.moveToLast(); @@ -268,9 +268,9 @@ public class UnarchivedConversationListDataSourceTest { // GIVEN ConversationListDataSource.UnarchivedConversationListDataSource testSubject = new ConversationListDataSource.UnarchivedConversationListDataSource(ConversationFilter.UNREAD); setupThreadDatabaseCursors(0, 3); - when(threadDatabase.getPinnedConversationListCount(ConversationFilter.UNREAD)).thenReturn(0); - when(threadDatabase.getUnarchivedConversationListCount(ConversationFilter.UNREAD)).thenReturn(3); - when(threadDatabase.getArchivedConversationListCount(ConversationFilter.UNREAD)).thenReturn(0); + when(threadTable.getPinnedConversationListCount(ConversationFilter.UNREAD)).thenReturn(0); + when(threadTable.getUnarchivedConversationListCount(ConversationFilter.UNREAD)).thenReturn(3); + when(threadTable.getArchivedConversationListCount(ConversationFilter.UNREAD)).thenReturn(0); testSubject.getTotalCount(); // WHEN @@ -292,7 +292,7 @@ public class UnarchivedConversationListDataSourceTest { Cursor unpinnedCursor = mock(Cursor.class); when(unpinnedCursor.getCount()).thenReturn(unpinned); - when(threadDatabase.getUnarchivedConversationList(any(), eq(true), anyLong(), anyLong())).thenReturn(pinnedCursor); - when(threadDatabase.getUnarchivedConversationList(any(), eq(false), anyLong(), anyLong())).thenReturn(unpinnedCursor); + when(threadTable.getUnarchivedConversationList(any(), eq(true), anyLong(), anyLong())).thenReturn(pinnedCursor); + when(threadTable.getUnarchivedConversationList(any(), eq(false), anyLong(), anyLong())).thenReturn(unpinnedCursor); } } \ No newline at end of file diff --git a/app/src/test/java/org/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStoreTest.kt b/app/src/test/java/org/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStoreTest.kt index 027d7f92a..6ad39eebe 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStoreTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStoreTest.kt @@ -11,7 +11,7 @@ import org.mockito.Mockito.`when` import org.signal.libsignal.protocol.IdentityKey import org.signal.libsignal.protocol.SignalProtocolAddress import org.signal.libsignal.protocol.ecc.ECPublicKey -import org.thoughtcrime.securesms.database.IdentityDatabase +import org.thoughtcrime.securesms.database.IdentityTable import org.thoughtcrime.securesms.database.model.IdentityStoreRecord import org.whispersystems.signalservice.test.LibSignalLibraryUtil.assumeLibSignalSupportedOnOS @@ -28,7 +28,7 @@ class SignalBaseIdentityKeyStoreTest { @Test fun `getIdentity() hits disk on first retrieve but not the second`() { - val mockDb = mock(IdentityDatabase::class.java) + val mockDb = mock(IdentityTable::class.java) val subject = SignalBaseIdentityKeyStore(mock(Context::class.java), mockDb) val identityKey = IdentityKey(ECPublicKey.fromPublicKeyBytes(ByteArray(32))) val record = mockRecord(ADDRESS, identityKey) @@ -44,7 +44,7 @@ class SignalBaseIdentityKeyStoreTest { @Test fun `invalidate() evicts cache entry`() { - val mockDb = mock(IdentityDatabase::class.java) + val mockDb = mock(IdentityTable::class.java) val subject = SignalBaseIdentityKeyStore(mock(Context::class.java), mockDb) val identityKey = IdentityKey(ECPublicKey.fromPublicKeyBytes(ByteArray(32))) val record = mockRecord(ADDRESS, identityKey) @@ -64,7 +64,7 @@ class SignalBaseIdentityKeyStoreTest { return IdentityStoreRecord( addressName = addressName, identityKey = identityKey, - verifiedStatus = IdentityDatabase.VerifiedStatus.DEFAULT, + verifiedStatus = IdentityTable.VerifiedStatus.DEFAULT, firstUse = false, timestamp = 1, nonblockingApproval = true diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/AttachmentDatabaseTransformPropertiesTest.java b/app/src/test/java/org/thoughtcrime/securesms/database/AttachmentDatabaseTransformPropertiesTest.java index 8907c217a..8b80363b7 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/AttachmentDatabaseTransformPropertiesTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/database/AttachmentDatabaseTransformPropertiesTest.java @@ -9,7 +9,7 @@ public class AttachmentDatabaseTransformPropertiesTest { @Test public void transformProperties_verifyStructure() { - AttachmentDatabase.TransformProperties properties = AttachmentDatabase.TransformProperties.empty(); + AttachmentTable.TransformProperties properties = AttachmentTable.TransformProperties.empty(); assertEquals("Added transform property, need to confirm default behavior for pre-existing payloads in database", "{\"skipTransform\":false,\"videoTrim\":false,\"videoTrimStartTimeUs\":0,\"videoTrimEndTimeUs\":0,\"sentMediaQuality\":0,\"videoEdited\":false}", properties.serialize()); @@ -19,7 +19,7 @@ public class AttachmentDatabaseTransformPropertiesTest { public void transformProperties_verifyMissingSentMediaQualityDefaultBehavior() { String json = "{\"skipTransform\":false,\"videoTrim\":false,\"videoTrimStartTimeUs\":0,\"videoTrimEndTimeUs\":0,\"videoEdited\":false}"; - AttachmentDatabase.TransformProperties properties = AttachmentDatabase.TransformProperties.parse(json); + AttachmentTable.TransformProperties properties = AttachmentTable.TransformProperties.parse(json); assertEquals(0, properties.getSentMediaQuality()); assertEquals(SentMediaQuality.STANDARD, SentMediaQuality.fromCode(properties.getSentMediaQuality())); diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/ContactSearchSelectionBuilderTest.kt b/app/src/test/java/org/thoughtcrime/securesms/database/ContactSearchSelectionBuilderTest.kt index 1713831be..c3c6e1594 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/ContactSearchSelectionBuilderTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/ContactSearchSelectionBuilderTest.kt @@ -8,7 +8,7 @@ import org.thoughtcrime.securesms.recipients.RecipientId class ContactSearchSelectionBuilderTest { @Test(expected = IllegalStateException::class) fun `Given non registered and registered are false, when I build, then I expect an IllegalStateException`() { - RecipientDatabase.ContactSearchSelection.Builder() + RecipientTable.ContactSearchSelection.Builder() .withNonRegistered(false) .withRegistered(false) .build() @@ -16,44 +16,44 @@ class ContactSearchSelectionBuilderTest { @Test fun `Given registered, when I build, then I expect SIGNAL_CONTACT`() { - val result = RecipientDatabase.ContactSearchSelection.Builder() + val result = RecipientTable.ContactSearchSelection.Builder() .withRegistered(true) .build() - Assert.assertTrue(result.where.contains(RecipientDatabase.ContactSearchSelection.SIGNAL_CONTACT)) - Assert.assertTrue(result.where.contains(RecipientDatabase.ContactSearchSelection.FILTER_BLOCKED)) - Assert.assertTrue(result.where.contains(RecipientDatabase.ContactSearchSelection.FILTER_HIDDEN)) - Assert.assertArrayEquals(SqlUtil.buildArgs(RecipientDatabase.RegisteredState.REGISTERED.id, 1, 0, 0), result.args) + Assert.assertTrue(result.where.contains(RecipientTable.ContactSearchSelection.SIGNAL_CONTACT)) + Assert.assertTrue(result.where.contains(RecipientTable.ContactSearchSelection.FILTER_BLOCKED)) + Assert.assertTrue(result.where.contains(RecipientTable.ContactSearchSelection.FILTER_HIDDEN)) + Assert.assertArrayEquals(SqlUtil.buildArgs(RecipientTable.RegisteredState.REGISTERED.id, 1, 0, 0), result.args) } @Test fun `Given exclude id, when I build, then I expect FILTER_ID`() { - val result = RecipientDatabase.ContactSearchSelection.Builder() + val result = RecipientTable.ContactSearchSelection.Builder() .withRegistered(true) .excludeId(RecipientId.from(12)) .build() - Assert.assertTrue(result.where.contains(RecipientDatabase.ContactSearchSelection.FILTER_ID)) + Assert.assertTrue(result.where.contains(RecipientTable.ContactSearchSelection.FILTER_ID)) } @Test fun `Given all non group contacts, when I build, then I expect both CONTACT and FILTER_GROUP`() { - val result = RecipientDatabase.ContactSearchSelection.Builder() + val result = RecipientTable.ContactSearchSelection.Builder() .withRegistered(true) .withNonRegistered(true) .withGroups(false) .build() - Assert.assertTrue(result.where.contains(RecipientDatabase.ContactSearchSelection.SIGNAL_CONTACT)) + Assert.assertTrue(result.where.contains(RecipientTable.ContactSearchSelection.SIGNAL_CONTACT)) Assert.assertTrue(result.where.contains(") OR (")) - Assert.assertTrue(result.where.contains(RecipientDatabase.ContactSearchSelection.NON_SIGNAL_CONTACT)) - Assert.assertTrue(result.where.contains(RecipientDatabase.ContactSearchSelection.FILTER_GROUPS)) - Assert.assertTrue(result.where.contains(RecipientDatabase.ContactSearchSelection.FILTER_BLOCKED)) - Assert.assertTrue(result.where.contains(RecipientDatabase.ContactSearchSelection.FILTER_HIDDEN)) + Assert.assertTrue(result.where.contains(RecipientTable.ContactSearchSelection.NON_SIGNAL_CONTACT)) + Assert.assertTrue(result.where.contains(RecipientTable.ContactSearchSelection.FILTER_GROUPS)) + Assert.assertTrue(result.where.contains(RecipientTable.ContactSearchSelection.FILTER_BLOCKED)) + Assert.assertTrue(result.where.contains(RecipientTable.ContactSearchSelection.FILTER_HIDDEN)) Assert.assertArrayEquals( SqlUtil.buildArgs( - RecipientDatabase.RegisteredState.REGISTERED.id, 1, - RecipientDatabase.RegisteredState.REGISTERED.id, + RecipientTable.RegisteredState.REGISTERED.id, 1, + RecipientTable.RegisteredState.REGISTERED.id, 0, 0 ), @@ -63,13 +63,13 @@ class ContactSearchSelectionBuilderTest { @Test fun `Given a query, when I build, then I expect QUERY_SIGNAL_CONTACT`() { - val result = RecipientDatabase.ContactSearchSelection.Builder() + val result = RecipientTable.ContactSearchSelection.Builder() .withRegistered(true) .withGroups(false) .withSearchQuery("query") .build() - Assert.assertTrue(result.where.contains(RecipientDatabase.ContactSearchSelection.QUERY_SIGNAL_CONTACT)) + Assert.assertTrue(result.where.contains(RecipientTable.ContactSearchSelection.QUERY_SIGNAL_CONTACT)) Assert.assertTrue(result.args.contains("query")) } } diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/FakeMessageRecords.kt b/app/src/test/java/org/thoughtcrime/securesms/database/FakeMessageRecords.kt index c48121012..fbf2deb20 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/FakeMessageRecords.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/FakeMessageRecords.kt @@ -32,7 +32,7 @@ object FakeMessageRecords { hasData: Boolean = true, hasThumbnail: Boolean = true, contentType: String = MediaUtil.IMAGE_JPEG, - transferProgress: Int = AttachmentDatabase.TRANSFER_PROGRESS_DONE, + transferProgress: Int = AttachmentTable.TRANSFER_PROGRESS_DONE, size: Long = 0L, fileName: String = "", cdnNumber: Int = 1, @@ -51,7 +51,7 @@ object FakeMessageRecords { stickerLocator: StickerLocator? = null, blurHash: BlurHash? = null, audioHash: AudioHash? = null, - transformProperties: AttachmentDatabase.TransformProperties? = null, + transformProperties: AttachmentTable.TransformProperties? = null, displayOrder: Int = 0, uploadTimestamp: Long = 200 ): DatabaseAttachment { diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/GroupTestUtil.kt b/app/src/test/java/org/thoughtcrime/securesms/database/GroupTestUtil.kt index d9b06a25b..14073c8f8 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/GroupTestUtil.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/GroupTestUtil.kt @@ -99,7 +99,7 @@ class GroupChangeData(private val revision: Int, private val groupOperations: Gr class GroupStateTestData(private val masterKey: GroupMasterKey, private val groupOperations: GroupsV2Operations.GroupOperations? = null) { var localState: DecryptedGroup? = null - var groupRecord: Optional = Optional.empty() + var groupRecord: Optional = Optional.empty() var serverState: DecryptedGroup? = null var changeSet: ChangeSet? = null var groupChange: GroupChange? = null @@ -172,9 +172,9 @@ fun groupRecord( avatarDigest: ByteArray = ByteArray(0), mms: Boolean = false, distributionId: DistributionId? = null -): Optional { +): Optional { return Optional.of( - GroupDatabase.GroupRecord( + GroupTable.GroupRecord( id, recipientId, decryptedGroup.title, diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/MmsDatabaseTest.kt b/app/src/test/java/org/thoughtcrime/securesms/database/MmsDatabaseTest.kt index 877427562..197231732 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/MmsDatabaseTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/MmsDatabaseTest.kt @@ -21,16 +21,16 @@ import org.thoughtcrime.securesms.testing.TestDatabaseUtil @Config(manifest = Config.NONE, application = Application::class) class MmsDatabaseTest { private lateinit var db: SQLiteDatabase - private lateinit var mmsDatabase: MmsDatabase + private lateinit var mmsTable: MmsTable @Before fun setup() { val sqlCipher = TestDatabaseUtil.inMemoryDatabase { - execSQL(MmsDatabase.CREATE_TABLE) + execSQL(MmsTable.CREATE_TABLE) } db = sqlCipher.writableDatabase - mmsDatabase = MmsDatabase(ApplicationProvider.getApplicationContext(), sqlCipher) + mmsTable = MmsTable(ApplicationProvider.getApplicationContext(), sqlCipher) } @After @@ -41,75 +41,75 @@ class MmsDatabaseTest { @Test fun `isGroupQuitMessage when normal message, return false`() { val id = TestMms.insert(db, type = Types.BASE_SENDING_TYPE or Types.SECURE_MESSAGE_BIT or Types.PUSH_MESSAGE_BIT) - assertFalse(mmsDatabase.isGroupQuitMessage(id)) + assertFalse(mmsTable.isGroupQuitMessage(id)) } @Test fun `isGroupQuitMessage when legacy quit message, return true`() { val id = TestMms.insert(db, type = Types.BASE_SENDING_TYPE or Types.SECURE_MESSAGE_BIT or Types.PUSH_MESSAGE_BIT or Types.GROUP_LEAVE_BIT) - assertTrue(mmsDatabase.isGroupQuitMessage(id)) + assertTrue(mmsTable.isGroupQuitMessage(id)) } @Test fun `isGroupQuitMessage when GV2 leave update, return false`() { val id = TestMms.insert(db, type = Types.BASE_SENDING_TYPE or Types.SECURE_MESSAGE_BIT or Types.PUSH_MESSAGE_BIT or Types.GROUP_LEAVE_BIT or Types.GROUP_V2_BIT or Types.GROUP_UPDATE_BIT) - assertFalse(mmsDatabase.isGroupQuitMessage(id)) + assertFalse(mmsTable.isGroupQuitMessage(id)) } @Test fun `getLatestGroupQuitTimestamp when only normal message, return -1`() { TestMms.insert(db, threadId = 1, sentTimeMillis = 1, type = Types.BASE_SENDING_TYPE or Types.SECURE_MESSAGE_BIT or Types.PUSH_MESSAGE_BIT) - assertEquals(-1, mmsDatabase.getLatestGroupQuitTimestamp(1, 4)) + assertEquals(-1, mmsTable.getLatestGroupQuitTimestamp(1, 4)) } @Test fun `getLatestGroupQuitTimestamp when legacy quit, return message timestamp`() { TestMms.insert(db, threadId = 1, sentTimeMillis = 2, type = Types.BASE_SENDING_TYPE or Types.SECURE_MESSAGE_BIT or Types.PUSH_MESSAGE_BIT or Types.GROUP_LEAVE_BIT) - assertEquals(2, mmsDatabase.getLatestGroupQuitTimestamp(1, 4)) + assertEquals(2, mmsTable.getLatestGroupQuitTimestamp(1, 4)) } @Test fun `getLatestGroupQuitTimestamp when GV2 leave update message, return -1`() { TestMms.insert(db, threadId = 1, sentTimeMillis = 3, type = Types.BASE_SENDING_TYPE or Types.SECURE_MESSAGE_BIT or Types.PUSH_MESSAGE_BIT or Types.GROUP_LEAVE_BIT or Types.GROUP_V2_BIT or Types.GROUP_UPDATE_BIT) - assertEquals(-1, mmsDatabase.getLatestGroupQuitTimestamp(1, 4)) + assertEquals(-1, mmsTable.getLatestGroupQuitTimestamp(1, 4)) } @Test fun `Given no stories in database, when I getStoryViewState, then I expect NONE`() { - assertEquals(StoryViewState.NONE, mmsDatabase.getStoryViewState(1)) + assertEquals(StoryViewState.NONE, mmsTable.getStoryViewState(1)) } @Test fun `Given stories in database not in thread 1, when I getStoryViewState for thread 1, then I expect NONE`() { TestMms.insert(db, threadId = 2, storyType = StoryType.STORY_WITH_REPLIES) TestMms.insert(db, threadId = 2, storyType = StoryType.STORY_WITH_REPLIES) - assertEquals(StoryViewState.NONE, mmsDatabase.getStoryViewState(1)) + assertEquals(StoryViewState.NONE, mmsTable.getStoryViewState(1)) } @Test fun `Given viewed incoming stories in database, when I getStoryViewState, then I expect VIEWED`() { TestMms.insert(db, threadId = 1, storyType = StoryType.STORY_WITH_REPLIES, viewed = true) TestMms.insert(db, threadId = 1, storyType = StoryType.STORY_WITH_REPLIES, viewed = true) - assertEquals(StoryViewState.VIEWED, mmsDatabase.getStoryViewState(1)) + assertEquals(StoryViewState.VIEWED, mmsTable.getStoryViewState(1)) } @Test fun `Given unviewed incoming stories in database, when I getStoryViewState, then I expect UNVIEWED`() { TestMms.insert(db, threadId = 1, storyType = StoryType.STORY_WITH_REPLIES, viewed = false) TestMms.insert(db, threadId = 1, storyType = StoryType.STORY_WITH_REPLIES, viewed = false) - assertEquals(StoryViewState.UNVIEWED, mmsDatabase.getStoryViewState(1)) + assertEquals(StoryViewState.UNVIEWED, mmsTable.getStoryViewState(1)) } @Test fun `Given mix of viewed and unviewed incoming stories in database, when I getStoryViewState, then I expect UNVIEWED`() { TestMms.insert(db, threadId = 1, storyType = StoryType.STORY_WITH_REPLIES, viewed = true) TestMms.insert(db, threadId = 1, storyType = StoryType.STORY_WITH_REPLIES, viewed = false) - assertEquals(StoryViewState.UNVIEWED, mmsDatabase.getStoryViewState(1)) + assertEquals(StoryViewState.UNVIEWED, mmsTable.getStoryViewState(1)) } @Test fun `Given only outgoing story in database, when I getStoryViewState, then I expect VIEWED`() { TestMms.insert(db, threadId = 1, storyType = StoryType.STORY_WITH_REPLIES, type = Types.BASE_OUTBOX_TYPE) - assertEquals(StoryViewState.VIEWED, mmsDatabase.getStoryViewState(1)) + assertEquals(StoryViewState.VIEWED, mmsTable.getStoryViewState(1)) } } diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/MmsSmsDatabaseTest.kt b/app/src/test/java/org/thoughtcrime/securesms/database/MmsSmsDatabaseTest.kt index f52ba6966..c4140c402 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/MmsSmsDatabaseTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/MmsSmsDatabaseTest.kt @@ -19,18 +19,18 @@ import org.thoughtcrime.securesms.testing.TestDatabaseUtil @Config(manifest = Config.NONE, application = Application::class) class MmsSmsDatabaseTest { - private lateinit var mmsSmsDatabase: MmsSmsDatabase + private lateinit var mmsSmsTable: MmsSmsTable private lateinit var db: SQLiteDatabase @Before fun setup() { val sqlCipher = TestDatabaseUtil.inMemoryDatabase { - execSQL(MmsDatabase.CREATE_TABLE) - execSQL(SmsDatabase.CREATE_TABLE) + execSQL(MmsTable.CREATE_TABLE) + execSQL(SmsTable.CREATE_TABLE) } db = sqlCipher.writableDatabase - mmsSmsDatabase = MmsSmsDatabase(ApplicationProvider.getApplicationContext(), sqlCipher) + mmsSmsTable = MmsSmsTable(ApplicationProvider.getApplicationContext(), sqlCipher) } @After @@ -41,20 +41,20 @@ class MmsSmsDatabaseTest { @Test fun `getConversationSnippet when single normal SMS, return SMS message id and transport as false`() { TestSms.insert(db) - mmsSmsDatabase.getConversationSnippetCursor(1).use { cursor -> + mmsSmsTable.getConversationSnippetCursor(1).use { cursor -> cursor.moveToFirst() assertEquals(1, CursorUtil.requireLong(cursor, MmsSmsColumns.ID)) - assertFalse(CursorUtil.requireBoolean(cursor, MmsSmsDatabase.TRANSPORT)) + assertFalse(CursorUtil.requireBoolean(cursor, MmsSmsTable.TRANSPORT)) } } @Test fun `getConversationSnippet when single normal MMS, return MMS message id and transport as true`() { TestMms.insert(db) - mmsSmsDatabase.getConversationSnippetCursor(1).use { cursor -> + mmsSmsTable.getConversationSnippetCursor(1).use { cursor -> cursor.moveToFirst() assertEquals(1, CursorUtil.requireLong(cursor, MmsSmsColumns.ID)) - assertTrue(CursorUtil.requireBoolean(cursor, MmsSmsDatabase.TRANSPORT)) + assertTrue(CursorUtil.requireBoolean(cursor, MmsSmsTable.TRANSPORT)) } } @@ -63,17 +63,17 @@ class MmsSmsDatabaseTest { val timestamp = System.currentTimeMillis() TestMms.insert(db, receivedTimestampMillis = timestamp + 2) - mmsSmsDatabase.getConversationSnippetCursor(1).use { cursor -> + mmsSmsTable.getConversationSnippetCursor(1).use { cursor -> cursor.moveToFirst() assertEquals(1, CursorUtil.requireLong(cursor, MmsSmsColumns.ID)) - assertTrue(CursorUtil.requireBoolean(cursor, MmsSmsDatabase.TRANSPORT)) + assertTrue(CursorUtil.requireBoolean(cursor, MmsSmsTable.TRANSPORT)) } TestSms.insert(db, receivedTimestampMillis = timestamp + 3, type = MmsSmsColumns.Types.BASE_SENDING_TYPE or MmsSmsColumns.Types.SECURE_MESSAGE_BIT or MmsSmsColumns.Types.PUSH_MESSAGE_BIT or MmsSmsColumns.Types.GROUP_V2_LEAVE_BITS) - mmsSmsDatabase.getConversationSnippetCursor(1).use { cursor -> + mmsSmsTable.getConversationSnippetCursor(1).use { cursor -> cursor.moveToFirst() assertEquals(1, CursorUtil.requireLong(cursor, MmsSmsColumns.ID)) - assertTrue(CursorUtil.requireBoolean(cursor, MmsSmsDatabase.TRANSPORT)) + assertTrue(CursorUtil.requireBoolean(cursor, MmsSmsTable.TRANSPORT)) } } } diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/RecipientDatabaseTestUtils.kt b/app/src/test/java/org/thoughtcrime/securesms/database/RecipientDatabaseTestUtils.kt index 16ee8025e..15c409b90 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/RecipientDatabaseTestUtils.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/RecipientDatabaseTestUtils.kt @@ -37,16 +37,16 @@ object RecipientDatabaseTestUtils { e164: String? = null, email: String? = null, groupId: GroupId? = null, - groupType: RecipientDatabase.GroupType = RecipientDatabase.GroupType.NONE, + groupType: RecipientTable.GroupType = RecipientTable.GroupType.NONE, blocked: Boolean = false, muteUntil: Long = -1, - messageVibrateState: RecipientDatabase.VibrateState = RecipientDatabase.VibrateState.DEFAULT, - callVibrateState: RecipientDatabase.VibrateState = RecipientDatabase.VibrateState.DEFAULT, + messageVibrateState: RecipientTable.VibrateState = RecipientTable.VibrateState.DEFAULT, + callVibrateState: RecipientTable.VibrateState = RecipientTable.VibrateState.DEFAULT, messageRingtone: Uri = Uri.EMPTY, callRingtone: Uri = Uri.EMPTY, defaultSubscriptionId: Int = 0, expireMessages: Int = 0, - registered: RecipientDatabase.RegisteredState = RecipientDatabase.RegisteredState.REGISTERED, + registered: RecipientTable.RegisteredState = RecipientTable.RegisteredState.REGISTERED, profileKey: ByteArray = Random.nextBytes(32), expiringProfileKeyCredential: ExpiringProfileKeyCredential? = null, systemProfileName: ProfileName = ProfileName.EMPTY, @@ -60,12 +60,12 @@ object RecipientDatabaseTestUtils { profileSharing: Boolean = false, lastProfileFetch: Long = 0L, notificationChannel: String? = null, - unidentifiedAccessMode: RecipientDatabase.UnidentifiedAccessMode = RecipientDatabase.UnidentifiedAccessMode.UNKNOWN, + unidentifiedAccessMode: RecipientTable.UnidentifiedAccessMode = RecipientTable.UnidentifiedAccessMode.UNKNOWN, forceSmsSelection: Boolean = false, capabilities: Long = 0L, - insightBannerTier: RecipientDatabase.InsightsBannerTier = RecipientDatabase.InsightsBannerTier.NO_TIER, + insightBannerTier: RecipientTable.InsightsBannerTier = RecipientTable.InsightsBannerTier.NO_TIER, storageId: ByteArray? = null, - mentionSetting: RecipientDatabase.MentionSetting = RecipientDatabase.MentionSetting.ALWAYS_NOTIFY, + mentionSetting: RecipientTable.MentionSetting = RecipientTable.MentionSetting.ALWAYS_NOTIFY, wallpaper: ChatWallpaper? = null, chatColors: ChatColors? = null, avatarColor: AvatarColor = AvatarColor.A100, @@ -75,7 +75,7 @@ object RecipientDatabaseTestUtils { null, null, null, - IdentityDatabase.VerifiedStatus.DEFAULT, + IdentityTable.VerifiedStatus.DEFAULT, false, false, 0 @@ -129,13 +129,13 @@ object RecipientDatabaseTestUtils { forceSmsSelection, RecipientRecord.Capabilities( capabilities, - Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientDatabase.Capabilities.GROUPS_V1_MIGRATION, RecipientDatabase.Capabilities.BIT_LENGTH).toInt()), - Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientDatabase.Capabilities.SENDER_KEY, RecipientDatabase.Capabilities.BIT_LENGTH).toInt()), - Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientDatabase.Capabilities.ANNOUNCEMENT_GROUPS, RecipientDatabase.Capabilities.BIT_LENGTH).toInt()), - Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientDatabase.Capabilities.CHANGE_NUMBER, RecipientDatabase.Capabilities.BIT_LENGTH).toInt()), - Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientDatabase.Capabilities.STORIES, RecipientDatabase.Capabilities.BIT_LENGTH).toInt()), - Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientDatabase.Capabilities.GIFT_BADGES, RecipientDatabase.Capabilities.BIT_LENGTH).toInt()), - Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientDatabase.Capabilities.PNP, RecipientDatabase.Capabilities.BIT_LENGTH).toInt()), + Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.GROUPS_V1_MIGRATION, RecipientTable.Capabilities.BIT_LENGTH).toInt()), + Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.SENDER_KEY, RecipientTable.Capabilities.BIT_LENGTH).toInt()), + Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.ANNOUNCEMENT_GROUPS, RecipientTable.Capabilities.BIT_LENGTH).toInt()), + Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.CHANGE_NUMBER, RecipientTable.Capabilities.BIT_LENGTH).toInt()), + Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.STORIES, RecipientTable.Capabilities.BIT_LENGTH).toInt()), + Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.GIFT_BADGES, RecipientTable.Capabilities.BIT_LENGTH).toInt()), + Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.PNP, RecipientTable.Capabilities.BIT_LENGTH).toInt()), ), insightBannerTier, storageId, diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/SmsDatabaseTest.kt b/app/src/test/java/org/thoughtcrime/securesms/database/SmsDatabaseTest.kt index a7b19eb95..cf5beed89 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/SmsDatabaseTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/SmsDatabaseTest.kt @@ -20,16 +20,16 @@ import org.hamcrest.CoreMatchers.`is` as isEqual class SmsDatabaseTest { private lateinit var db: AndroidSQLiteDatabase - private lateinit var smsDatabase: SmsDatabase + private lateinit var smsTable: SmsTable @Before fun setup() { val sqlCipher = TestDatabaseUtil.inMemoryDatabase { - execSQL(SmsDatabase.CREATE_TABLE) + execSQL(SmsTable.CREATE_TABLE) } db = sqlCipher.writableDatabase - smsDatabase = SmsDatabase(ApplicationProvider.getApplicationContext(), sqlCipher) + smsTable = SmsTable(ApplicationProvider.getApplicationContext(), sqlCipher) } @After @@ -39,52 +39,52 @@ class SmsDatabaseTest { @Test fun `getThreadIdForMessage when no message absent for id, return -1`() { - assertThat(smsDatabase.getThreadIdForMessage(1), isEqual(-1)) + assertThat(smsTable.getThreadIdForMessage(1), isEqual(-1)) } @Test fun `getThreadIdForMessage when message present for id, return thread id`() { TestSms.insert(db) - assertThat(smsDatabase.getThreadIdForMessage(1), isEqual(1)) + assertThat(smsTable.getThreadIdForMessage(1), isEqual(1)) } @Test fun `hasMeaningfulMessage when no messages, return false`() { - assertFalse(smsDatabase.hasMeaningfulMessage(1)) + assertFalse(smsTable.hasMeaningfulMessage(1)) } @Test fun `hasMeaningfulMessage when normal message, return true`() { TestSms.insert(db) - assertTrue(smsDatabase.hasMeaningfulMessage(1)) + assertTrue(smsTable.hasMeaningfulMessage(1)) } @Test fun `hasMeaningfulMessage when GV2 create message only, return true`() { TestSms.insert(db, type = MmsSmsColumns.Types.BASE_INBOX_TYPE or MmsSmsColumns.Types.SECURE_MESSAGE_BIT or MmsSmsColumns.Types.GROUP_V2_BIT or MmsSmsColumns.Types.GROUP_UPDATE_BIT) - assertTrue(smsDatabase.hasMeaningfulMessage(1)) + assertTrue(smsTable.hasMeaningfulMessage(1)) } @Test fun `hasMeaningfulMessage when empty and then with ignored types, always return false`() { - assertFalse(smsDatabase.hasMeaningfulMessage(1)) + assertFalse(smsTable.hasMeaningfulMessage(1)) - TestSms.insert(db, type = SmsDatabase.IGNORABLE_TYPESMASK_WHEN_COUNTING) - assertFalse(smsDatabase.hasMeaningfulMessage(1)) + TestSms.insert(db, type = SmsTable.IGNORABLE_TYPESMASK_WHEN_COUNTING) + assertFalse(smsTable.hasMeaningfulMessage(1)) TestSms.insert(db, type = MmsSmsColumns.Types.PROFILE_CHANGE_TYPE) - assertFalse(smsDatabase.hasMeaningfulMessage(1)) + assertFalse(smsTable.hasMeaningfulMessage(1)) TestSms.insert(db, type = MmsSmsColumns.Types.CHANGE_NUMBER_TYPE) - assertFalse(smsDatabase.hasMeaningfulMessage(1)) + assertFalse(smsTable.hasMeaningfulMessage(1)) TestSms.insert(db, type = MmsSmsColumns.Types.BOOST_REQUEST_TYPE) - assertFalse(smsDatabase.hasMeaningfulMessage(1)) + assertFalse(smsTable.hasMeaningfulMessage(1)) TestSms.insert(db, type = MmsSmsColumns.Types.SMS_EXPORT_TYPE) - assertFalse(smsDatabase.hasMeaningfulMessage(1)) + assertFalse(smsTable.hasMeaningfulMessage(1)) TestSms.insert(db, type = MmsSmsColumns.Types.BASE_INBOX_TYPE or MmsSmsColumns.Types.GROUP_V2_LEAVE_BITS) - assertFalse(smsDatabase.hasMeaningfulMessage(1)) + assertFalse(smsTable.hasMeaningfulMessage(1)) } } diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/TestMms.kt b/app/src/test/java/org/thoughtcrime/securesms/database/TestMms.kt index b6a792fb8..68d11c061 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/TestMms.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/TestMms.kt @@ -23,7 +23,7 @@ object TestMms { subscriptionId: Int = -1, expiresIn: Long = 0, viewOnce: Boolean = false, - distributionType: Int = ThreadDatabase.DistributionTypes.DEFAULT, + distributionType: Int = ThreadTable.DistributionTypes.DEFAULT, type: Long = MmsSmsColumns.Types.BASE_INBOX_TYPE, unread: Boolean = false, viewed: Boolean = false, @@ -76,41 +76,41 @@ object TestMms { receivedTimestampMillis: Long = System.currentTimeMillis(), ): Long { val contentValues = ContentValues().apply { - put(MmsDatabase.DATE_SENT, message.sentTimeMillis) - put(MmsDatabase.MESSAGE_TYPE, PduHeaders.MESSAGE_TYPE_SEND_REQ) + put(MmsTable.DATE_SENT, message.sentTimeMillis) + put(MmsTable.MESSAGE_TYPE, PduHeaders.MESSAGE_TYPE_SEND_REQ) - put(MmsDatabase.MESSAGE_BOX, type) + put(MmsTable.MESSAGE_BOX, type) put(MmsSmsColumns.THREAD_ID, threadId) put(MmsSmsColumns.READ, if (unread) 0 else 1) - put(MmsDatabase.DATE_RECEIVED, receivedTimestampMillis) + put(MmsTable.DATE_RECEIVED, receivedTimestampMillis) put(MmsSmsColumns.SUBSCRIPTION_ID, message.subscriptionId) put(MmsSmsColumns.EXPIRES_IN, message.expiresIn) - put(MmsDatabase.VIEW_ONCE, message.isViewOnce) + put(MmsTable.VIEW_ONCE, message.isViewOnce) put(MmsSmsColumns.RECIPIENT_ID, recipientId.serialize()) put(MmsSmsColumns.DELIVERY_RECEIPT_COUNT, 0) put(MmsSmsColumns.RECEIPT_TIMESTAMP, 0) put(MmsSmsColumns.VIEWED_RECEIPT_COUNT, if (viewed) 1 else 0) - put(MmsDatabase.STORY_TYPE, message.storyType.code) + put(MmsTable.STORY_TYPE, message.storyType.code) put(MmsSmsColumns.BODY, body) - put(MmsDatabase.PART_COUNT, 0) - put(MmsDatabase.MENTIONS_SELF, 0) + put(MmsTable.PART_COUNT, 0) + put(MmsTable.MENTIONS_SELF, 0) } - return db.insert(MmsDatabase.TABLE_NAME, null, contentValues) + return db.insert(MmsTable.TABLE_NAME, null, contentValues) } fun markAsRemoteDelete(db: SQLiteDatabase, messageId: Long) { val values = ContentValues() values.put(MmsSmsColumns.REMOTE_DELETED, 1) values.putNull(MmsSmsColumns.BODY) - values.putNull(MmsDatabase.QUOTE_BODY) - values.putNull(MmsDatabase.QUOTE_AUTHOR) - values.putNull(MmsDatabase.QUOTE_ATTACHMENT) - values.put(MmsDatabase.QUOTE_TYPE, -1) - values.putNull(MmsDatabase.QUOTE_ID) - values.putNull(MmsDatabase.LINK_PREVIEWS) - values.putNull(MmsDatabase.SHARED_CONTACTS) - db.update(MmsDatabase.TABLE_NAME, values, Database.ID_WHERE, arrayOf(messageId.toString())) + values.putNull(MmsTable.QUOTE_BODY) + values.putNull(MmsTable.QUOTE_AUTHOR) + values.putNull(MmsTable.QUOTE_ATTACHMENT) + values.put(MmsTable.QUOTE_TYPE, -1) + values.putNull(MmsTable.QUOTE_ID) + values.putNull(MmsTable.LINK_PREVIEWS) + values.putNull(MmsTable.SHARED_CONTACTS) + db.update(MmsTable.TABLE_NAME, values, DatabaseTable.ID_WHERE, arrayOf(messageId.toString())) } } diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/TestSms.kt b/app/src/test/java/org/thoughtcrime/securesms/database/TestSms.kt index 313dbd269..fa0a470f8 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/TestSms.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/TestSms.kt @@ -62,27 +62,27 @@ object TestSms { val values = ContentValues().apply { put(MmsSmsColumns.RECIPIENT_ID, message.sender.serialize()) put(MmsSmsColumns.ADDRESS_DEVICE_ID, message.senderDeviceId) - put(SmsDatabase.DATE_RECEIVED, message.receivedTimestampMillis) - put(SmsDatabase.DATE_SENT, message.sentTimestampMillis) + put(SmsTable.DATE_RECEIVED, message.receivedTimestampMillis) + put(SmsTable.DATE_SENT, message.sentTimestampMillis) put(MmsSmsColumns.DATE_SERVER, message.serverTimestampMillis) - put(SmsDatabase.PROTOCOL, message.protocol) + put(SmsTable.PROTOCOL, message.protocol) put(MmsSmsColumns.READ, if (unread) 0 else 1) put(MmsSmsColumns.SUBSCRIPTION_ID, message.subscriptionId) put(MmsSmsColumns.EXPIRES_IN, message.expiresIn) put(MmsSmsColumns.UNIDENTIFIED, message.isUnidentified) if (!TextUtils.isEmpty(message.pseudoSubject)) { - put(SmsDatabase.SUBJECT, message.pseudoSubject) + put(SmsTable.SUBJECT, message.pseudoSubject) } - put(SmsDatabase.REPLY_PATH_PRESENT, message.isReplyPathPresent) - put(SmsDatabase.SERVICE_CENTER, message.serviceCenterAddress) + put(SmsTable.REPLY_PATH_PRESENT, message.isReplyPathPresent) + put(SmsTable.SERVICE_CENTER, message.serviceCenterAddress) put(MmsSmsColumns.BODY, message.messageBody) - put(SmsDatabase.TYPE, type) + put(SmsTable.TYPE, type) put(MmsSmsColumns.THREAD_ID, threadId) put(MmsSmsColumns.SERVER_GUID, message.serverGuid) } - return db.insert(SmsDatabase.TABLE_NAME, null, values) + return db.insert(SmsTable.TABLE_NAME, null, values) } } diff --git a/app/src/test/java/org/thoughtcrime/securesms/groups/GroupManagerV2Test_edit.kt b/app/src/test/java/org/thoughtcrime/securesms/groups/GroupManagerV2Test_edit.kt index 2424a776a..79d1fbb67 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/groups/GroupManagerV2Test_edit.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/groups/GroupManagerV2Test_edit.kt @@ -27,8 +27,8 @@ import org.signal.storageservice.protos.groups.local.DecryptedGroup import org.signal.storageservice.protos.groups.local.DecryptedMember import org.thoughtcrime.securesms.SignalStoreRule import org.thoughtcrime.securesms.TestZkGroupServer -import org.thoughtcrime.securesms.database.GroupDatabase import org.thoughtcrime.securesms.database.GroupStateTestData +import org.thoughtcrime.securesms.database.GroupTable import org.thoughtcrime.securesms.database.model.databaseprotos.member import org.thoughtcrime.securesms.groups.v2.GroupCandidateHelper import org.thoughtcrime.securesms.groups.v2.processing.GroupsV2StateProcessor @@ -62,7 +62,7 @@ class GroupManagerV2Test_edit { val others: List = listOf(member(otherSid)) } - private lateinit var groupDatabase: GroupDatabase + private lateinit var groupTable: GroupTable private lateinit var groupsV2API: GroupsV2Api private lateinit var groupsV2Operations: GroupsV2Operations private lateinit var groupsV2Authorization: GroupsV2Authorization @@ -87,7 +87,7 @@ class GroupManagerV2Test_edit { val clientZkOperations = ClientZkOperations(server.getServerPublicParams()) - groupDatabase = mock(GroupDatabase::class.java) + groupTable = mock(GroupTable::class.java) groupsV2API = mock(GroupsV2Api::class.java) groupsV2Operations = GroupsV2Operations(clientZkOperations, 1000) groupsV2Authorization = mock(GroupsV2Authorization::class.java) @@ -100,7 +100,7 @@ class GroupManagerV2Test_edit { manager = GroupManagerV2( ApplicationProvider.getApplicationContext(), - groupDatabase, + groupTable, groupsV2API, groupsV2Operations, groupsV2Authorization, @@ -115,8 +115,8 @@ class GroupManagerV2Test_edit { val data = GroupStateTestData(masterKey, groupOperations) data.init() - Mockito.doReturn(data.groupRecord).`when`(groupDatabase).getGroup(groupId) - Mockito.doReturn(data.groupRecord.get()).`when`(groupDatabase).requireGroup(groupId) + Mockito.doReturn(data.groupRecord).`when`(groupTable).getGroup(groupId) + Mockito.doReturn(data.groupRecord.get()).`when`(groupTable).requireGroup(groupId) Mockito.doReturn(GroupManagerV2.RecipientAndThread(Recipient.UNKNOWN, 1)).`when`(sendGroupUpdateHelper).sendGroupUpdate(Mockito.eq(masterKey), Mockito.any(), Mockito.any(), Mockito.anyBoolean()) @@ -128,7 +128,7 @@ class GroupManagerV2Test_edit { } private fun then(then: (DecryptedGroup) -> Unit) { - Mockito.verify(groupDatabase).update(Mockito.eq(groupId), patchedDecryptedGroup.capture()) + Mockito.verify(groupTable).update(Mockito.eq(groupId), patchedDecryptedGroup.capture()) then(patchedDecryptedGroup.value) } diff --git a/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessorTest.kt b/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessorTest.kt index f28e5a252..02913f3cd 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessorTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessorTest.kt @@ -37,9 +37,9 @@ import org.signal.storageservice.protos.groups.local.DecryptedMember import org.signal.storageservice.protos.groups.local.DecryptedString import org.signal.storageservice.protos.groups.local.DecryptedTimer import org.thoughtcrime.securesms.SignalStoreRule -import org.thoughtcrime.securesms.database.GroupDatabase import org.thoughtcrime.securesms.database.GroupStateTestData -import org.thoughtcrime.securesms.database.RecipientDatabase +import org.thoughtcrime.securesms.database.GroupTable +import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context import org.thoughtcrime.securesms.database.model.databaseprotos.member import org.thoughtcrime.securesms.database.model.databaseprotos.requestingMember @@ -72,8 +72,8 @@ class GroupsV2StateProcessorTest { private val others: List = listOf(member(otherSid)) } - private lateinit var groupDatabase: GroupDatabase - private lateinit var recipientDatabase: RecipientDatabase + private lateinit var groupTable: GroupTable + private lateinit var recipientTable: RecipientTable private lateinit var groupsV2API: GroupsV2Api private lateinit var groupsV2Authorization: GroupsV2Authorization private lateinit var profileAndMessageHelper: GroupsV2StateProcessor.ProfileAndMessageHelper @@ -88,13 +88,13 @@ class GroupsV2StateProcessorTest { Log.initialize(SystemOutLogger()) SignalProtocolLoggerProvider.setProvider(CustomSignalProtocolLogger()) - groupDatabase = mock(GroupDatabase::class.java) - recipientDatabase = mock(RecipientDatabase::class.java) + groupTable = mock(GroupTable::class.java) + recipientTable = mock(RecipientTable::class.java) groupsV2API = mock(GroupsV2Api::class.java) groupsV2Authorization = mock(GroupsV2Authorization::class.java) profileAndMessageHelper = mock(GroupsV2StateProcessor.ProfileAndMessageHelper::class.java) - processor = GroupsV2StateProcessor.StateProcessorForGroup(serviceIds, ApplicationProvider.getApplicationContext(), groupDatabase, groupsV2API, groupsV2Authorization, masterKey, profileAndMessageHelper) + processor = GroupsV2StateProcessor.StateProcessorForGroup(serviceIds, ApplicationProvider.getApplicationContext(), groupTable, groupsV2API, groupsV2Authorization, masterKey, profileAndMessageHelper) } @After @@ -105,8 +105,8 @@ class GroupsV2StateProcessorTest { private fun given(init: GroupStateTestData.() -> Unit) { val data = givenData(init) - doReturn(data.groupRecord).`when`(groupDatabase).getGroup(any(GroupId.V2::class.java)) - doReturn(!data.groupRecord.isPresent).`when`(groupDatabase).isUnknownGroup(any()) + doReturn(data.groupRecord).`when`(groupTable).getGroup(any(GroupId.V2::class.java)) + doReturn(!data.groupRecord.isPresent).`when`(groupTable).isUnknownGroup(any()) data.serverState?.let { serverState -> val testPartial = object : PartialDecryptedGroup(null, serverState, null, null) { @@ -306,7 +306,7 @@ class GroupsV2StateProcessorTest { apiCallParameters(2, true) } - doReturn(true).`when`(groupDatabase).isUnknownGroup(any()) + doReturn(true).`when`(groupTable).isUnknownGroup(any()) val result = processor.updateLocalGroupToRevision(2, 0, DecryptedGroupChange.getDefaultInstance()) diff --git a/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/SendReadReceiptsJobMigrationTest.java b/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/SendReadReceiptsJobMigrationTest.java index 6a9642367..ee24ddbe4 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/SendReadReceiptsJobMigrationTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/SendReadReceiptsJobMigrationTest.java @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.jobmanager.migrations; import org.junit.Test; -import org.thoughtcrime.securesms.database.MmsSmsDatabase; +import org.thoughtcrime.securesms.database.MmsSmsTable; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.JobMigration; import org.thoughtcrime.securesms.jobs.SendReadReceiptJob; @@ -17,7 +17,7 @@ import static org.mockito.Mockito.when; public class SendReadReceiptsJobMigrationTest { - private final MmsSmsDatabase mockDatabase = mock(MmsSmsDatabase.class); + private final MmsSmsTable mockDatabase = mock(MmsSmsTable.class); private final SendReadReceiptsJobMigration testSubject = new SendReadReceiptsJobMigration(mockDatabase); @Test diff --git a/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/SenderKeyDistributionSendJobRecipientMigrationTest.java b/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/SenderKeyDistributionSendJobRecipientMigrationTest.java index bfe073835..92a05d934 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/SenderKeyDistributionSendJobRecipientMigrationTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/SenderKeyDistributionSendJobRecipientMigrationTest.java @@ -1,29 +1,25 @@ package org.thoughtcrime.securesms.jobmanager.migrations; import org.junit.Test; -import org.thoughtcrime.securesms.database.GroupDatabase; -import org.thoughtcrime.securesms.database.MmsSmsDatabase; +import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.JobMigration; import org.thoughtcrime.securesms.jobs.FailingJob; -import org.thoughtcrime.securesms.jobs.SendReadReceiptJob; import org.thoughtcrime.securesms.jobs.SenderKeyDistributionSendJob; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.Util; -import java.util.ArrayList; import java.util.Optional; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class SenderKeyDistributionSendJobRecipientMigrationTest { - private final GroupDatabase mockDatabase = mock(GroupDatabase.class); + private final GroupTable mockDatabase = mock(GroupTable.class); private final SenderKeyDistributionSendJobRecipientMigration testSubject = new SenderKeyDistributionSendJobRecipientMigration(mockDatabase); private static final GroupId GROUP_ID = GroupId.pushOrThrow(Util.getSecretBytes(32)); @@ -38,7 +34,7 @@ public class SenderKeyDistributionSendJobRecipientMigrationTest { .putBlobAsString("group_id", GROUP_ID.getDecodedId()) .build()); - GroupDatabase.GroupRecord mockGroup = mock(GroupDatabase.GroupRecord.class); + GroupTable.GroupRecord mockGroup = mock(GroupTable.GroupRecord.class); when(mockGroup.getRecipientId()).thenReturn(RecipientId.from(2)); when(mockDatabase.getGroup(GROUP_ID)).thenReturn(Optional.of(mockGroup)); diff --git a/app/src/test/java/org/thoughtcrime/securesms/mediasend/MediaRepositoryTest.kt b/app/src/test/java/org/thoughtcrime/securesms/mediasend/MediaRepositoryTest.kt index fe0b2ea40..70e59177e 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/mediasend/MediaRepositoryTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/mediasend/MediaRepositoryTest.kt @@ -18,7 +18,7 @@ import org.mockito.junit.MockitoRule import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config import org.signal.core.util.logging.Log -import org.thoughtcrime.securesms.database.AttachmentDatabase.TransformProperties +import org.thoughtcrime.securesms.database.AttachmentTable.TransformProperties import org.thoughtcrime.securesms.testutil.EmptyLogger import org.thoughtcrime.securesms.util.MediaUtil import java.util.Optional diff --git a/app/src/test/java/org/thoughtcrime/securesms/megaphone/RemoteMegaphoneRepositoryTest.kt b/app/src/test/java/org/thoughtcrime/securesms/megaphone/RemoteMegaphoneRepositoryTest.kt index d7c77a147..897659c83 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/megaphone/RemoteMegaphoneRepositoryTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/megaphone/RemoteMegaphoneRepositoryTest.kt @@ -21,7 +21,7 @@ import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config import org.thoughtcrime.securesms.SignalStoreRule -import org.thoughtcrime.securesms.database.RemoteMegaphoneDatabase +import org.thoughtcrime.securesms.database.RemoteMegaphoneTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.RemoteMegaphoneRecord import org.thoughtcrime.securesms.util.toMillis @@ -45,14 +45,14 @@ class RemoteMegaphoneRepositoryTest { @After fun tearDown() { - clearMocks(remoteMegaphoneDatabase) + clearMocks(remoteMegaphoneTable) } /** Should return null if no megaphones in database. */ @Test fun getRemoteMegaphoneToShow_noMegaphones() { // GIVEN - every { remoteMegaphoneDatabase.getPotentialMegaphonesAndClearOld(any()) } returns emptyList() + every { remoteMegaphoneTable.getPotentialMegaphonesAndClearOld(any()) } returns emptyList() // WHEN val record = RemoteMegaphoneRepository.getRemoteMegaphoneToShow(0) @@ -64,7 +64,7 @@ class RemoteMegaphoneRepositoryTest { @Test fun getRemoteMegaphoneToShow_oneMegaphone() { // GIVEN - every { remoteMegaphoneDatabase.getPotentialMegaphonesAndClearOld(any()) } returns listOf(megaphone(1)) + every { remoteMegaphoneTable.getPotentialMegaphonesAndClearOld(any()) } returns listOf(megaphone(1)) // WHEN val record = RemoteMegaphoneRepository.getRemoteMegaphoneToShow(0) @@ -84,7 +84,7 @@ class RemoteMegaphoneRepositoryTest { secondaryActionData = JSONObject("{\"snoozeDurationDays\":[3]}") ) - every { remoteMegaphoneDatabase.getPotentialMegaphonesAndClearOld(now.toMillis()) } returns listOf(snoozed) + every { remoteMegaphoneTable.getPotentialMegaphonesAndClearOld(now.toMillis()) } returns listOf(snoozed) // WHEN val record = RemoteMegaphoneRepository.getRemoteMegaphoneToShow(now.toMillis()) @@ -104,7 +104,7 @@ class RemoteMegaphoneRepositoryTest { secondaryActionData = JSONObject("{\"snoozeDurationDays\":[3]}") ) - every { remoteMegaphoneDatabase.getPotentialMegaphonesAndClearOld(now.toMillis()) } returns listOf(snoozed) + every { remoteMegaphoneTable.getPotentialMegaphonesAndClearOld(now.toMillis()) } returns listOf(snoozed) // WHEN val record = RemoteMegaphoneRepository.getRemoteMegaphoneToShow(now.toMillis()) @@ -124,7 +124,7 @@ class RemoteMegaphoneRepositoryTest { secondaryActionData = JSONObject("{\"snoozeDurationDays\":[3, 5, 7]}") ) - every { remoteMegaphoneDatabase.getPotentialMegaphonesAndClearOld(now.toMillis()) } returns listOf(snoozed) + every { remoteMegaphoneTable.getPotentialMegaphonesAndClearOld(now.toMillis()) } returns listOf(snoozed) // WHEN val record = RemoteMegaphoneRepository.getRemoteMegaphoneToShow(now.toMillis()) @@ -136,13 +136,13 @@ class RemoteMegaphoneRepositoryTest { companion object { private val now = LocalDateTime.of(2021, 11, 5, 12, 0) - private val remoteMegaphoneDatabase: RemoteMegaphoneDatabase = mockk() + private val remoteMegaphoneTable: RemoteMegaphoneTable = mockk() @BeforeClass @JvmStatic fun classSetup() { mockkObject(SignalDatabase.Companion) - every { SignalDatabase.remoteMegaphones } returns remoteMegaphoneDatabase + every { SignalDatabase.remoteMegaphones } returns remoteMegaphoneTable } @AfterClass diff --git a/app/src/test/java/org/thoughtcrime/securesms/notifications/MarkReadReceiverTest.java b/app/src/test/java/org/thoughtcrime/securesms/notifications/MarkReadReceiverTest.java index 8077b6871..03dd5f726 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/notifications/MarkReadReceiverTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/notifications/MarkReadReceiverTest.java @@ -15,7 +15,7 @@ import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.mockito.stubbing.Answer; import org.signal.libsignal.protocol.util.Pair; -import org.thoughtcrime.securesms.database.MessageDatabase; +import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; @@ -72,12 +72,12 @@ public class MarkReadReceiverTest { List threads = Stream.range(4L, 7L).toList(); int expected = recipients.size() * threads.size() + 1; - List infoList = Stream.of(threads) - .flatMap(threadId -> Stream.of(recipients) + List infoList = Stream.of(threads) + .flatMap(threadId -> Stream.of(recipients) .map(recipientId -> createMarkedMessageInfo(threadId, recipientId))) - .toList(); + .toList(); - List duplicatedList = Util.concatenatedList(infoList, infoList); + List duplicatedList = Util.concatenatedList(infoList, infoList); // WHEN MarkReadReceiver.process(mockContext, duplicatedList); @@ -104,10 +104,10 @@ public class MarkReadReceiverTest { assertEquals("Should have 9 total combinations.", 9, threadRecipientPairs.size()); } - private MessageDatabase.MarkedMessageInfo createMarkedMessageInfo(long threadId, @NonNull RecipientId recipientId) { - return new MessageDatabase.MarkedMessageInfo(threadId, - new MessageDatabase.SyncMessageId(recipientId, 0), - new MessageId(1, true), - new MessageDatabase.ExpirationInfo(0, 0, 0, false)); + private MessageTable.MarkedMessageInfo createMarkedMessageInfo(long threadId, @NonNull RecipientId recipientId) { + return new MessageTable.MarkedMessageInfo(threadId, + new MessageTable.SyncMessageId(recipientId, 0), + new MessageId(1, true), + new MessageTable.ExpirationInfo(0, 0, 0, false)); } } \ No newline at end of file diff --git a/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientUtilTest.java b/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientUtilTest.java index 5a1155f32..fd1927273 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientUtilTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientUtilTest.java @@ -10,10 +10,10 @@ import org.mockito.Mock; import org.mockito.MockedStatic; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; -import org.thoughtcrime.securesms.database.MmsSmsDatabase; -import org.thoughtcrime.securesms.database.RecipientDatabase; +import org.thoughtcrime.securesms.database.MmsSmsTable; +import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.thoughtcrime.securesms.database.ThreadDatabase; +import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.util.FeatureFlags; import static org.junit.Assert.assertFalse; @@ -30,10 +30,10 @@ public class RecipientUtilTest { public MockitoRule rule = MockitoJUnit.rule(); private Context context = mock(Context.class); - private Recipient recipient = mock(Recipient.class); - private ThreadDatabase mockThreadDatabase = mock(ThreadDatabase.class); - private MmsSmsDatabase mockMmsSmsDatabase = mock(MmsSmsDatabase.class); - private RecipientDatabase mockRecipientDatabase = mock(RecipientDatabase.class); + private Recipient recipient = mock(Recipient.class); + private ThreadTable mockThreadTable = mock(ThreadTable.class); + private MmsSmsTable mockMmsSmsDatabase = mock(MmsSmsTable.class); + private RecipientTable mockRecipientTable = mock(RecipientTable.class); @Mock private MockedStatic signalDatabaseMockedStatic; @@ -43,9 +43,9 @@ public class RecipientUtilTest { @Before public void setUp() { - signalDatabaseMockedStatic.when(SignalDatabase::threads).thenReturn(mockThreadDatabase); + signalDatabaseMockedStatic.when(SignalDatabase::threads).thenReturn(mockThreadTable); signalDatabaseMockedStatic.when(SignalDatabase::mmsSms).thenReturn(mockMmsSmsDatabase); - signalDatabaseMockedStatic.when(SignalDatabase::recipients).thenReturn(mockRecipientDatabase); + signalDatabaseMockedStatic.when(SignalDatabase::recipients).thenReturn(mockRecipientTable); when(recipient.getId()).thenReturn(RecipientId.from(5)); when(recipient.resolve()).thenReturn(recipient); @@ -72,7 +72,7 @@ public class RecipientUtilTest { @Test public void givenIHaveSentASecureMessageInThisThread_whenIsThreadMessageRequestAccepted_thenIExpectTrue() { // GIVEN - when(mockThreadDatabase.getRecipientForThreadId(anyLong())).thenReturn(recipient); + when(mockThreadTable.getRecipientForThreadId(anyLong())).thenReturn(recipient); when(mockMmsSmsDatabase.getOutgoingSecureConversationCount(1L)).thenReturn(5); // WHEN @@ -86,7 +86,7 @@ public class RecipientUtilTest { public void givenIHaveNotSentASecureMessageInThisThreadAndIAmProfileSharing_whenIsThreadMessageRequestAccepted_thenIExpectTrue() { // GIVEN when(recipient.isProfileSharing()).thenReturn(true); - when(mockThreadDatabase.getRecipientForThreadId(anyLong())).thenReturn(recipient); + when(mockThreadTable.getRecipientForThreadId(anyLong())).thenReturn(recipient); when(mockMmsSmsDatabase.getOutgoingSecureConversationCount(1L)).thenReturn(0); // WHEN @@ -100,7 +100,7 @@ public class RecipientUtilTest { public void givenIHaveNotSentASecureMessageInThisThreadAndRecipientIsSystemContact_whenIsThreadMessageRequestAccepted_thenIExpectTrue() { // GIVEN when(recipient.isSystemContact()).thenReturn(true); - when(mockThreadDatabase.getRecipientForThreadId(anyLong())).thenReturn(recipient); + when(mockThreadTable.getRecipientForThreadId(anyLong())).thenReturn(recipient); when(mockMmsSmsDatabase.getOutgoingSecureConversationCount(1L)).thenReturn(0); // WHEN @@ -114,7 +114,7 @@ public class RecipientUtilTest { @Test public void givenIHaveReceivedASecureMessageIHaveNotSentASecureMessageAndRecipientIsNotSystemContactAndNotProfileSharing_whenIsThreadMessageRequestAccepted_thenIExpectFalse() { // GIVEN - when(mockThreadDatabase.getRecipientForThreadId(anyLong())).thenReturn(recipient); + when(mockThreadTable.getRecipientForThreadId(anyLong())).thenReturn(recipient); when(mockMmsSmsDatabase.getOutgoingSecureConversationCount(1L)).thenReturn(0); when(mockMmsSmsDatabase.getSecureConversationCount(1L)).thenReturn(5); @@ -128,7 +128,7 @@ public class RecipientUtilTest { @Test public void givenIHaveNotReceivedASecureMessageIHaveNotSentASecureMessageAndRecipientIsNotSystemContactAndNotProfileSharing_whenIsThreadMessageRequestAccepted_thenIExpectTrue() { // GIVEN - when(mockThreadDatabase.getRecipientForThreadId(anyLong())).thenReturn(recipient); + when(mockThreadTable.getRecipientForThreadId(anyLong())).thenReturn(recipient); when(mockMmsSmsDatabase.getOutgoingSecureConversationCount(1L)).thenReturn(0); when(mockMmsSmsDatabase.getSecureConversationCount(1L)).thenReturn(0); @@ -220,7 +220,7 @@ public class RecipientUtilTest { RecipientUtil.shareProfileIfFirstSecureMessage(recipient); // THEN - verify(mockRecipientDatabase).setProfileSharing(recipient.getId(), true); + verify(mockRecipientTable).setProfileSharing(recipient.getId(), true); } @Ignore @@ -233,6 +233,6 @@ public class RecipientUtilTest { RecipientUtil.shareProfileIfFirstSecureMessage(recipient); // THEN - verify(mockRecipientDatabase, never()).setProfileSharing(recipient.getId(), true); + verify(mockRecipientTable, never()).setProfileSharing(recipient.getId(), true); } } \ No newline at end of file diff --git a/app/src/test/java/org/thoughtcrime/securesms/sms/UploadDependencyGraphTest.kt b/app/src/test/java/org/thoughtcrime/securesms/sms/UploadDependencyGraphTest.kt index 8056eb5a7..39f0530fe 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/sms/UploadDependencyGraphTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/sms/UploadDependencyGraphTest.kt @@ -14,7 +14,7 @@ import org.robolectric.annotation.Config import org.thoughtcrime.securesms.attachments.Attachment import org.thoughtcrime.securesms.attachments.AttachmentId import org.thoughtcrime.securesms.attachments.DatabaseAttachment -import org.thoughtcrime.securesms.database.AttachmentDatabase +import org.thoughtcrime.securesms.database.AttachmentTable import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobmanager.JobManager import org.thoughtcrime.securesms.jobs.AttachmentCompressionJob @@ -84,7 +84,7 @@ class UploadDependencyGraphTest { UriAttachmentBuilder.build( id = 10, contentType = MediaUtil.IMAGE_JPEG, - transformProperties = AttachmentDatabase.TransformProperties(false, true, increment, increment + 1, SentMediaQuality.STANDARD.code) + transformProperties = AttachmentTable.TransformProperties(false, true, increment, increment + 1, SentMediaQuality.STANDARD.code) ) } @@ -126,7 +126,7 @@ class UploadDependencyGraphTest { UriAttachmentBuilder.build( id = 10, contentType = MediaUtil.IMAGE_JPEG, - transformProperties = if (it != 1) AttachmentDatabase.TransformProperties(false, true, 1, 2, SentMediaQuality.STANDARD.code) else null + transformProperties = if (it != 1) AttachmentTable.TransformProperties(false, true, 1, 2, SentMediaQuality.STANDARD.code) else null ) } @@ -186,7 +186,7 @@ class UploadDependencyGraphTest { UriAttachmentBuilder.build( 1L, contentType = MediaUtil.IMAGE_JPEG, - transformProperties = AttachmentDatabase.TransformProperties.forVideoTrim(it.toLong(), it.toLong() + 1) + transformProperties = AttachmentTable.TransformProperties.forVideoTrim(it.toLong(), it.toLong() + 1) ) } @@ -229,11 +229,11 @@ class UploadDependencyGraphTest { private fun getAttachmentForPreUpload(id: Long, attachment: Attachment): DatabaseAttachment { return DatabaseAttachment( AttachmentId(id, id), - AttachmentDatabase.PREUPLOAD_MESSAGE_ID, + AttachmentTable.PREUPLOAD_MESSAGE_ID, false, false, attachment.contentType, - AttachmentDatabase.TRANSFER_PROGRESS_PENDING, + AttachmentTable.TRANSFER_PROGRESS_PENDING, attachment.size, attachment.fileName, attachment.cdnNumber, diff --git a/app/src/test/java/org/thoughtcrime/securesms/storage/ContactRecordProcessorTest.kt b/app/src/test/java/org/thoughtcrime/securesms/storage/ContactRecordProcessorTest.kt index 471a1918d..9f6988038 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/storage/ContactRecordProcessorTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/storage/ContactRecordProcessorTest.kt @@ -11,13 +11,12 @@ import org.mockito.Mock import org.mockito.MockedStatic import org.mockito.Mockito import org.mockito.Mockito.mock -import org.mockito.Mockito.`when` import org.mockito.internal.configuration.plugins.Plugins import org.mockito.internal.junit.JUnitRule import org.mockito.junit.MockitoRule import org.mockito.quality.Strictness import org.signal.core.util.logging.Log -import org.thoughtcrime.securesms.database.RecipientDatabase +import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.keyvalue.AccountValues import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.testutil.EmptyLogger @@ -36,7 +35,7 @@ class ContactRecordProcessorTest { val mockitoRule: MockitoRule = JUnitRule(Plugins.getMockitoLogger(), Strictness.STRICT_STUBS) @Mock - lateinit var recipientDatabase: RecipientDatabase + lateinit var recipientTable: RecipientTable @Mock lateinit var featureFlags: MockedStatic @@ -54,7 +53,7 @@ class ContactRecordProcessorTest { @Test fun `isInvalid, normal, false`() { // GIVEN - val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientDatabase) + val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientTable) val record = buildRecord { setServiceId(ACI_B.toString()) @@ -72,7 +71,7 @@ class ContactRecordProcessorTest { @Test fun `isInvalid, missing serviceId, true`() { // GIVEN - val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientDatabase) + val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientTable) val record = buildRecord { setServiceE164(E164_B) @@ -88,7 +87,7 @@ class ContactRecordProcessorTest { @Test fun `isInvalid, e164 matches self, true`() { // GIVEN - val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientDatabase) + val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientTable) val record = buildRecord { setServiceId(ACI_B.toString()) @@ -105,7 +104,7 @@ class ContactRecordProcessorTest { @Test fun `isInvalid, aci matches self, true`() { // GIVEN - val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientDatabase) + val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientTable) val record = buildRecord { setServiceId(ACI_A.toString()) @@ -121,7 +120,7 @@ class ContactRecordProcessorTest { @Test fun `isInvalid, pni matches self as serviceId, true`() { // GIVEN - val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientDatabase) + val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientTable) val record = buildRecord { setServiceId(PNI_A.toString()) @@ -137,7 +136,7 @@ class ContactRecordProcessorTest { @Test fun `isInvalid, pni matches self as pni, true`() { // GIVEN - val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientDatabase) + val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientTable) val record = buildRecord { setServiceId(ACI_B.toString()) @@ -154,7 +153,7 @@ class ContactRecordProcessorTest { @Test fun `isInvalid, pniOnly pnpDisabled, true`() { // GIVEN - val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientDatabase) + val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientTable) featureFlags.`when` { FeatureFlags.phoneNumberPrivacy() }.thenReturn(false) @@ -173,7 +172,7 @@ class ContactRecordProcessorTest { @Test fun `isInvalid, pniOnly pnpEnabled, false`() { // GIVEN - val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientDatabase) + val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientTable) featureFlags.`when` { FeatureFlags.phoneNumberPrivacy() }.thenReturn(true) @@ -192,7 +191,7 @@ class ContactRecordProcessorTest { @Test fun `merge, e164MatchesButPnisDont pnpEnabled, keepLocal`() { // GIVEN - val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientDatabase) + val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientTable) featureFlags.`when` { FeatureFlags.phoneNumberPrivacy() }.thenReturn(true) @@ -220,7 +219,7 @@ class ContactRecordProcessorTest { @Test fun `merge, pnisMatchButE164sDont pnpEnabled, keepLocal`() { // GIVEN - val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientDatabase) + val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientTable) featureFlags.`when` { FeatureFlags.phoneNumberPrivacy() }.thenReturn(true) @@ -248,7 +247,7 @@ class ContactRecordProcessorTest { @Test fun `merge, e164AndPniChange pnpEnabled, useRemote`() { // GIVEN - val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientDatabase) + val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientTable) featureFlags.`when` { FeatureFlags.phoneNumberPrivacy() }.thenReturn(true) @@ -276,7 +275,7 @@ class ContactRecordProcessorTest { @Test fun `merge, pnpDisabled, pniDropped`() { // GIVEN - val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientDatabase) + val subject = ContactRecordProcessor(ACI_A, PNI_A, E164_A, recipientTable) featureFlags.`when` { FeatureFlags.phoneNumberPrivacy() }.thenReturn(false) diff --git a/app/src/test/java/org/thoughtcrime/securesms/stories/StoriesTest.kt b/app/src/test/java/org/thoughtcrime/securesms/stories/StoriesTest.kt index f96a2ef83..b2118cef6 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/stories/StoriesTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/stories/StoriesTest.kt @@ -16,7 +16,7 @@ import org.mockito.kotlin.never import org.mockito.kotlin.verify import org.mockito.kotlin.whenever import org.thoughtcrime.securesms.attachments.AttachmentId -import org.thoughtcrime.securesms.database.AttachmentDatabase +import org.thoughtcrime.securesms.database.AttachmentTable import org.thoughtcrime.securesms.database.FakeMessageRecords import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.dependencies.ApplicationDependencies @@ -30,7 +30,7 @@ class StoriesTest { val mockitoRule: MockitoRule = MockitoJUnit.rule() @Mock - private lateinit var mockAttachmentDatabase: AttachmentDatabase + private lateinit var mockAttachmentTable: AttachmentTable @Mock private lateinit var mockJobManager: JobManager @@ -52,9 +52,9 @@ class StoriesTest { RxJavaPlugins.setIoSchedulerHandler { testScheduler } SignalDatabase.setSignalDatabaseInstanceForTesting(mockSignalDatabase) - whenever(SignalDatabase.attachments).thenReturn(mockAttachmentDatabase) + whenever(SignalDatabase.attachments).thenReturn(mockAttachmentTable) whenever(ApplicationDependencies.getJobManager()).thenReturn(mockJobManager) - whenever(mockAttachmentDatabase.getAttachmentsForMessage(any())).thenReturn(emptyList()) + whenever(mockAttachmentTable.getAttachmentsForMessage(any())).thenReturn(emptyList()) } @After @@ -103,7 +103,7 @@ class StoriesTest { // GIVEN val attachment = FakeMessageRecords.buildDatabaseAttachment() val messageRecord = FakeMessageRecords.buildMediaMmsMessageRecord() - whenever(mockAttachmentDatabase.getAttachmentsForMessage(any())).thenReturn(listOf(attachment)) + whenever(mockAttachmentTable.getAttachmentsForMessage(any())).thenReturn(listOf(attachment)) // WHEN val testObserver = Stories.enqueueAttachmentsFromStoryForDownload(messageRecord, true).test() diff --git a/app/src/test/java/org/thoughtcrime/securesms/testutil/OutgoingMediaMessageBuilder.kt b/app/src/test/java/org/thoughtcrime/securesms/testutil/OutgoingMediaMessageBuilder.kt index afe201e4a..af00b14cf 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/testutil/OutgoingMediaMessageBuilder.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/testutil/OutgoingMediaMessageBuilder.kt @@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.testutil import org.thoughtcrime.securesms.attachments.Attachment import org.thoughtcrime.securesms.contactshare.Contact -import org.thoughtcrime.securesms.database.ThreadDatabase +import org.thoughtcrime.securesms.database.ThreadTable import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch import org.thoughtcrime.securesms.database.documents.NetworkFailure import org.thoughtcrime.securesms.database.model.Mention @@ -24,7 +24,7 @@ object OutgoingMediaMessageBuilder { subscriptionId: Int = -1, expiresIn: Long = -1, viewOnce: Boolean = false, - distributionType: Int = ThreadDatabase.DistributionTypes.DEFAULT, + distributionType: Int = ThreadTable.DistributionTypes.DEFAULT, storyType: StoryType = StoryType.NONE, parentStoryId: ParentStoryId? = null, isStoryReaction: Boolean = false, diff --git a/app/src/test/java/org/thoughtcrime/securesms/testutil/UriAttachmentBuilder.kt b/app/src/test/java/org/thoughtcrime/securesms/testutil/UriAttachmentBuilder.kt index 304abab30..39b7c6830 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/testutil/UriAttachmentBuilder.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/testutil/UriAttachmentBuilder.kt @@ -4,7 +4,7 @@ import android.net.Uri import org.thoughtcrime.securesms.attachments.UriAttachment import org.thoughtcrime.securesms.audio.AudioHash import org.thoughtcrime.securesms.blurhash.BlurHash -import org.thoughtcrime.securesms.database.AttachmentDatabase +import org.thoughtcrime.securesms.database.AttachmentTable import org.thoughtcrime.securesms.stickers.StickerLocator object UriAttachmentBuilder { @@ -12,7 +12,7 @@ object UriAttachmentBuilder { id: Long, uri: Uri = Uri.parse("content://$id"), contentType: String, - transferState: Int = AttachmentDatabase.TRANSFER_PROGRESS_PENDING, + transferState: Int = AttachmentTable.TRANSFER_PROGRESS_PENDING, size: Long = 0L, fileName: String = "file$id", voiceNote: Boolean = false, @@ -23,7 +23,7 @@ object UriAttachmentBuilder { stickerLocator: StickerLocator? = null, blurHash: BlurHash? = null, audioHash: AudioHash? = null, - transformProperties: AttachmentDatabase.TransformProperties? = null + transformProperties: AttachmentTable.TransformProperties? = null ): UriAttachment { return UriAttachment( uri,