From d0b6d6fdebcf0743a23ce40b82d62e22df22b289 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Fri, 28 Feb 2025 09:31:19 -0500 Subject: [PATCH] Migrate to shared class hierarchy for unit based database tests. --- app/build.gradle.kts | 1 + .../database/DatabaseConsistencyTest.kt | 3 +- .../helpers/migration/MyStoryMigrationTest.kt | 3 +- .../securesms/database/ChatFolderTables.kt | 2 +- .../database/DistributionListTables.kt | 2 +- .../securesms/database/SQLiteDatabase.java | 3 +- .../securesms/database/SearchTable.kt | 3 +- .../securesms/database/SignalDatabase.kt | 58 +++++++------ .../helpers/RecipientIdCleanupHelper.java | 3 +- .../helpers/SignalDatabaseMigrations.kt | 4 +- .../migration/SignalDatabaseMigration.kt | 2 +- .../migration/V149_LegacyMigrations.kt | 8 +- .../migration/V150_UrgentMslFlagMigration.kt | 2 +- .../migration/V151_MyStoryMigration.kt | 2 +- .../V152_StoryGroupTypesMigration.kt | 2 +- .../migration/V153_MyStoryMigration.kt | 2 +- .../migration/V154_PniSignaturesMigration.kt | 2 +- .../migration/V155_SmsExporterMigration.kt | 2 +- ...RecipientUnregisteredTimestampMigration.kt | 2 +- .../V157_RecipeintHiddenMigration.kt | 2 +- ...GroupsLastForceUpdateTimestampMigration.kt | 2 +- .../V159_ThreadUnreadSelfMentionCount.kt | 2 +- .../V160_SmsMmsExportedIndexMigration.kt | 2 +- .../migration/V161_StorySendMessageIdIndex.kt | 2 +- .../V162_ThreadUnreadSelfMentionCountFixup.kt | 2 +- ...3_RemoteMegaphoneSnoozeSupportMigration.kt | 2 +- .../V164_ThreadDatabaseReadIndexMigration.kt | 2 +- ...sageBoxPaymentTransactionIndexMigration.kt | 2 +- .../V166_ThreadAndMessageForeignKeys.kt | 2 +- .../V167_RecreateReactionTriggers.kt | 2 +- .../V168_SingleMessageTableMigration.kt | 2 +- .../migration/V169_EmojiSearchIndexRank.kt | 2 +- .../migration/V170_CallTableMigration.kt | 2 +- .../migration/V171_ThreadForeignKeyFix.kt | 2 +- .../V172_GroupMembershipMigration.kt | 2 +- .../V173_ScheduledMessagesMigration.kt | 2 +- .../V174_ReactionForeignKeyMigration.kt | 2 +- .../migration/V175_FixFullTextSearchLink.kt | 2 +- .../V176_AddScheduledDateToQuoteIndex.kt | 2 +- ...177_MessageSendLogTableCleanupMigration.kt | 2 +- .../V178_ReportingTokenColumnMigration.kt | 2 +- ..._CleanupDanglingMessageSendLogMigration.kt | 2 +- .../V180_RecipientNicknameMigration.kt | 2 +- .../V181_ThreadTableForeignKeyCleanup.kt | 2 +- .../migration/V182_CallTableMigration.kt | 2 +- .../migration/V183_CallLinkTableMigration.kt | 2 +- .../V184_CallLinkReplaceIndexMigration.kt | 2 +- ...essageRecipientsAndEditMessageMigration.kt | 2 +- .../V186_ForeignKeyIndicesMigration.kt | 2 +- .../V187_MoreForeignKeyIndexesMigration.kt | 2 +- ...essageRecipientsAndEditMessageMigration.kt | 2 +- ...llLinkTableColumnsAndRebuildFKReference.kt | 2 +- .../migration/V190_UniqueMessageMigration.kt | 2 +- .../V191_UniqueMessageMigrationV2.kt | 2 +- .../V192_CallLinkTableNullableRootKeys.kt | 2 +- .../V193_BackCallLinksWithRecipient.kt | 2 +- .../migration/V194_KyberPreKeyMigration.kt | 2 +- .../V195_GroupMemberForeignKeyMigration.kt | 2 +- .../V196_BackCallLinksWithRecipientV2.kt | 2 +- .../V197_DropAvatarColorFromCallLinks.kt | 2 +- .../migration/V198_AddMacDigestColumn.kt | 2 +- .../migration/V199_AddThreadActiveColumn.kt | 2 +- .../helpers/migration/V200_ResetPniColumn.kt | 2 +- .../V201_RecipientTableValidations.kt | 2 +- .../V202_DropMessageTableThreadDateIndex.kt | 2 +- .../migration/V203_PreKeyStaleTimestamp.kt | 2 +- .../V204_GroupForeignKeyMigration.kt | 2 +- .../helpers/migration/V205_DropPushTable.kt | 2 +- .../V206_AddConversationCountIndex.kt | 2 +- .../migration/V207_AddChunkSizeColumn.kt | 2 +- .../V209_ClearRecipientPniFromAciColumn.kt | 2 +- .../migration/V210_FixPniPossibleColumns.kt | 2 +- .../migration/V211_ReceiptColumnRenames.kt | 2 +- ..._RemoveDistributionListUniqueConstraint.kt | 2 +- .../migration/V213_FixUsernameInE164Column.kt | 2 +- .../V214_PhoneNumberSharingColumn.kt | 2 +- .../V215_RemoveAttachmentUniqueId.kt | 2 +- .../migration/V216_PhoneNumberDiscoverable.kt | 2 +- .../V217_MessageTableExtrasColumn.kt | 2 +- .../V218_RecipientPniSignatureVerified.kt | 2 +- .../helpers/migration/V219_PniPreKeyStores.kt | 2 +- .../migration/V220_PreKeyConstraints.kt | 2 +- .../V221_AddReadColumnToCallEventsTable.kt | 2 +- .../migration/V222_DataHashRefactor.kt | 2 +- ...ddNicknameAndNoteFieldsToRecipientTable.kt | 2 +- .../V224_AddAttachmentArchiveColumns.kt | 2 +- ...lUserJoinedStateAndGroupCallActiveState.kt | 2 +- .../V226_AddAttachmentMediaIdIndex.kt | 2 +- .../V227_AddAttachmentArchiveTransferState.kt | 2 +- .../migration/V228_AddNameCollisionTables.kt | 2 +- .../V229_MarkMissedCallEventsNotified.kt | 2 +- .../migration/V230_UnreadCountIndices.kt | 2 +- .../migration/V231_ArchiveThumbnailColumns.kt | 2 +- .../migration/V232_CreateInAppPaymentTable.kt | 2 +- ...ixInAppPaymentTableDefaultNotifiedValue.kt | 2 +- .../V234_ThumbnailRestoreStateColumn.kt | 2 +- .../migration/V235_AttachmentUuidColumn.kt | 2 +- .../V236_FixInAppSubscriberCurrencyIfAble.kt | 2 +- .../V237_ResetGroupForceUpdateTimestamps.kt | 2 +- .../V238_AddGroupSendEndorsementsColumns.kt | 2 +- .../V239_MessageFullTextSearchEmojiSupport.kt | 2 +- .../V240_MessageFullTextSearchSecureDelete.kt | 2 +- .../migration/V241_ExpireTimerVersion.kt | 2 +- ...242_MessageFullTextSearchEmojiSupportV2.kt | 2 +- ...essageFullTextSearchDisableSecureDelete.kt | 2 +- .../migration/V244_AttachmentRemoteIv.kt | 2 +- .../V245_DeletionTimestampOnCallLinks.kt | 2 +- .../V246_DropThumbnailCdnFromAttachments.kt | 2 +- .../migration/V247_ClearUploadTimestamp.kt | 2 +- .../migration/V250_ClearUploadTimestampV2.kt | 2 +- .../V251_ArchiveTransferStateIndex.kt | 2 +- .../V252_AttachmentOffloadRestoredAtColumn.kt | 2 +- .../migration/V253_CreateChatFolderTables.kt | 2 +- .../migration/V254_AddChatFolderConstraint.kt | 2 +- .../migration/V255_AddCallTableLogIndex.kt | 2 +- .../V256_FixIncrementalDigestColumns.kt | 2 +- .../V257_CreateBackupMediaSyncTable.kt | 2 +- .../V258_FixGroupRevokedInviteeUpdate.kt | 2 +- ...justNotificationProfileMidnightEndTimes.kt | 2 +- .../migration/V260_RemapQuoteAuthors.kt | 2 +- .../migration/V261_RemapCallRingers.kt | 2 +- ...263_InAppPaymentsSubscriberTableRebuild.kt | 2 +- .../migration/V264_FixGroupAddMemberUpdate.kt | 2 +- .../helpers/migration/V265_FixFtsTriggers.kt | 2 +- .../migration/V266_UniqueThreadPinOrder.kt | 2 +- .../V267_FixGroupInvitationDeclinedUpdate.kt | 2 +- .../securesms/database/MmsDatabaseTest.kt | 80 +++++++----------- .../securesms/database/MmsSmsDatabaseTest.kt | 43 +++------- .../database/NotificationProfileTablesTest.kt | 64 +++++---------- .../securesms/database/SmsDatabaseTest.kt | 71 ++++++---------- .../securesms/database/TestMms.kt | 11 ++- .../securesms/database/TestSms.kt | 12 +-- .../securesms/testing/TestDatabaseUtil.kt | 30 ------- .../securesms/testing/TestSQLiteOpenHelper.kt | 25 ------ ...herOpenHelper.kt => TestSignalDatabase.kt} | 26 +++--- ...atabase.kt => TestSignalSQLiteDatabase.kt} | 81 ++++++++++--------- .../securesms/testutil/SignalDatabaseRule.kt | 66 +++++++++++++++ gradle/libs.versions.toml | 1 + 138 files changed, 394 insertions(+), 436 deletions(-) delete mode 100644 app/src/test/java/org/thoughtcrime/securesms/testing/TestDatabaseUtil.kt delete mode 100644 app/src/test/java/org/thoughtcrime/securesms/testing/TestSQLiteOpenHelper.kt rename app/src/test/java/org/thoughtcrime/securesms/testing/{ProxySQLCipherOpenHelper.kt => TestSignalDatabase.kt} (77%) rename app/src/test/java/org/thoughtcrime/securesms/testing/{ProxySignalSQLiteDatabase.kt => TestSignalSQLiteDatabase.kt} (72%) create mode 100644 app/src/test/java/org/thoughtcrime/securesms/testutil/SignalDatabaseRule.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 243c381a9c..af37fa6f04 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -559,6 +559,7 @@ dependencies { implementation(libs.lottie.compose) implementation(libs.signal.android.database.sqlcipher) implementation(libs.androidx.sqlite) + testImplementation(libs.androidx.sqlite.framework) implementation(libs.google.ez.vcard) { exclude(group = "com.fasterxml.jackson.core") exclude(group = "org.freemarker") diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/DatabaseConsistencyTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/DatabaseConsistencyTest.kt index 5ecee030b4..1ae012515f 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/DatabaseConsistencyTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/DatabaseConsistencyTest.kt @@ -17,6 +17,7 @@ import org.signal.core.util.requireNonNullString import org.thoughtcrime.securesms.database.helpers.SignalDatabaseMigrations import org.thoughtcrime.securesms.dependencies.AppDependencies import org.thoughtcrime.securesms.testing.SignalActivityRule +import org.thoughtcrime.securesms.database.SQLiteDatabase as SignalSQLiteDatabase /** * A test that guarantees that a freshly-created database looks the same as one that went through the upgrade path. @@ -128,7 +129,7 @@ class DatabaseConsistencyTest { } override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { - SignalDatabaseMigrations.migrate(application, db, 181, SignalDatabaseMigrations.DATABASE_VERSION) + SignalDatabaseMigrations.migrate(application, SignalSQLiteDatabase(db), 181, SignalDatabaseMigrations.DATABASE_VERSION) } /** diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/helpers/migration/MyStoryMigrationTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/helpers/migration/MyStoryMigrationTest.kt index fe6f4b7787..989478440e 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/helpers/migration/MyStoryMigrationTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/helpers/migration/MyStoryMigrationTest.kt @@ -16,6 +16,7 @@ import org.thoughtcrime.securesms.database.model.DistributionListId import org.thoughtcrime.securesms.testing.SignalDatabaseRule import org.whispersystems.signalservice.api.push.DistributionId import java.util.UUID +import org.thoughtcrime.securesms.database.SQLiteDatabase as SignalSQLiteDatabase @RunWith(AndroidJUnit4::class) class MyStoryMigrationTest { @@ -111,7 +112,7 @@ class MyStoryMigrationTest { private fun runMigration() { V151_MyStoryMigration.migrate( InstrumentationRegistry.getInstrumentation().targetContext.applicationContext as Application, - SignalDatabase.rawDatabase, + SignalSQLiteDatabase(SignalDatabase.rawDatabase), 0, 1 ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ChatFolderTables.kt b/app/src/main/java/org/thoughtcrime/securesms/database/ChatFolderTables.kt index 6028387235..536a6678e6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ChatFolderTables.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ChatFolderTables.kt @@ -33,7 +33,7 @@ class ChatFolderTables(context: Context?, databaseHelper: SignalDatabase?) : Dat @JvmField val CREATE_INDEXES: Array = ChatFolderTable.CREATE_INDEX + ChatFolderMembershipTable.CREATE_INDEXES - fun insertInitialChatFoldersAtCreationTime(db: net.zetetic.database.sqlcipher.SQLiteDatabase) { + fun insertInitialChatFoldersAtCreationTime(db: SQLiteDatabase) { db.insert(ChatFolderTable.TABLE_NAME, null, getAllChatsFolderContentValues()) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/DistributionListTables.kt b/app/src/main/java/org/thoughtcrime/securesms/database/DistributionListTables.kt index 2d8694002c..4f8cdd79b0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/DistributionListTables.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/DistributionListTables.kt @@ -50,7 +50,7 @@ class DistributionListTables constructor(context: Context?, databaseHelper: Sign const val LIST_TABLE_NAME = ListTable.TABLE_NAME const val PRIVACY_MODE = ListTable.PRIVACY_MODE - fun insertInitialDistributionListAtCreationTime(db: net.zetetic.database.sqlcipher.SQLiteDatabase) { + fun insertInitialDistributionListAtCreationTime(db: SQLiteDatabase) { val recipientId = db.insert( RecipientTable.TABLE_NAME, null, diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SQLiteDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/SQLiteDatabase.java index 37ea3a7159..e5ffdfef40 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SQLiteDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SQLiteDatabase.java @@ -14,7 +14,6 @@ import androidx.sqlite.db.SupportSQLiteQuery; import net.zetetic.database.sqlcipher.SQLiteStatement; import net.zetetic.database.sqlcipher.SQLiteTransactionListener; -import org.signal.core.util.logging.Log; import org.signal.core.util.tracing.Tracer; import java.io.IOException; @@ -354,7 +353,7 @@ public class SQLiteDatabase implements SupportSQLiteDatabase { return traceSql("rawQuery(2a)", sql, false, () -> wrapped.rawQuery(sql, selectionArgs)); } - public Cursor rawQuery(String sql, Object[] args) { + public Cursor rawQuery(String sql, Object... args) { DatabaseMonitor.onSql(sql, args); return traceSql("rawQuery(2b)", sql, false,() -> wrapped.rawQuery(sql, args)); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SearchTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/SearchTable.kt index e699a4f7e2..186c7ac269 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SearchTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SearchTable.kt @@ -6,6 +6,7 @@ import android.content.Context import android.database.Cursor import android.database.sqlite.SQLiteException import android.text.TextUtils +import androidx.sqlite.db.SupportSQLiteDatabase import net.zetetic.database.sqlcipher.SQLiteDatabase import org.intellij.lang.annotations.Language import org.signal.core.util.SqlUtil @@ -270,7 +271,7 @@ class SearchTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTa * Drops all tables and recreates them. */ @JvmOverloads - fun fullyResetTables(db: SQLiteDatabase = writableDatabase.sqlCipherDatabase, useTransaction: Boolean = true) { + fun fullyResetTables(db: SupportSQLiteDatabase = writableDatabase.sqlCipherDatabase, useTransaction: Boolean = true) { if (useTransaction) { db.beginTransaction() } 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 db7070b74c..e1939a1df7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.kt @@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.database import android.app.Application import android.content.Context import androidx.annotation.VisibleForTesting +import androidx.sqlite.db.SupportSQLiteDatabase import net.zetetic.database.sqlcipher.SQLiteOpenHelper import org.signal.core.util.SqlUtil import org.signal.core.util.logging.Log @@ -22,6 +23,7 @@ import org.thoughtcrime.securesms.migrations.LegacyMigrationJob.DatabaseUpgradeL import org.thoughtcrime.securesms.service.KeyCachingService import org.thoughtcrime.securesms.util.TextSecurePreferences import java.io.File +import org.thoughtcrime.securesms.database.SQLiteDatabase as SignalSQLiteDatabase open class SignalDatabase(private val context: Application, databaseSecret: DatabaseSecret, attachmentSecret: AttachmentSecret, name: String = DATABASE_NAME) : SQLiteOpenHelper( @@ -84,6 +86,29 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data } override fun onCreate(db: net.zetetic.database.sqlcipher.SQLiteDatabase) { + val signalDb = SignalSQLiteDatabase(db) + onCreateTablesIndexesAndTriggers(signalDb) + + // Requires FTS5 + executeStatements(signalDb, SearchTable.CREATE_TABLE) + executeStatements(signalDb, SearchTable.CREATE_TRIGGERS) + + if (context.getDatabasePath(ClassicOpenHelper.NAME).exists()) { + val legacyHelper = ClassicOpenHelper(context) + val legacyDb = legacyHelper.writableDatabase + SQLCipherMigrationHelper.migratePlaintext(context, legacyDb, db) + val masterSecret = KeyCachingService.getMasterSecret(context) + if (masterSecret != null) SQLCipherMigrationHelper.migrateCiphertext(context, masterSecret, legacyDb, db, null) else TextSecurePreferences.setNeedsSqlCipherMigration(context, true) + if (!PreKeyMigrationHelper.migratePreKeys(context, db)) { + PreKeysSyncJob.enqueue() + } + SessionStoreMigrationHelper.migrateSessions(context, db) + PreKeyMigrationHelper.cleanUpPreKeys(context) + } + } + + @VisibleForTesting + fun onCreateTablesIndexesAndTriggers(db: SignalSQLiteDatabase) { db.execSQL(MessageTable.CREATE_TABLE) db.execSQL(AttachmentTable.CREATE_TABLE) db.execSQL(ThreadTable.CREATE_TABLE) @@ -117,7 +142,6 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data executeStatements(db, NameCollisionTables.CREATE_TABLE) db.execSQL(InAppPaymentTable.CREATE_TABLE) db.execSQL(InAppPaymentSubscriberTable.CREATE_TABLE) - executeStatements(db, SearchTable.CREATE_TABLE) executeStatements(db, RemappedRecordTables.CREATE_TABLE) executeStatements(db, MessageSendLogTables.CREATE_TABLE) executeStatements(db, NotificationProfileTables.CREATE_TABLE) @@ -148,24 +172,10 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data executeStatements(db, ChatFolderTables.CREATE_INDEXES) executeStatements(db, NameCollisionTables.CREATE_INDEXES) - executeStatements(db, SearchTable.CREATE_TRIGGERS) executeStatements(db, MessageSendLogTables.CREATE_TRIGGERS) DistributionListTables.insertInitialDistributionListAtCreationTime(db) ChatFolderTables.insertInitialChatFoldersAtCreationTime(db) - - if (context.getDatabasePath(ClassicOpenHelper.NAME).exists()) { - val legacyHelper = ClassicOpenHelper(context) - val legacyDb = legacyHelper.writableDatabase - SQLCipherMigrationHelper.migratePlaintext(context, legacyDb, db) - val masterSecret = KeyCachingService.getMasterSecret(context) - if (masterSecret != null) SQLCipherMigrationHelper.migrateCiphertext(context, masterSecret, legacyDb, db, null) else TextSecurePreferences.setNeedsSqlCipherMigration(context, true) - if (!PreKeyMigrationHelper.migratePreKeys(context, db)) { - PreKeysSyncJob.enqueue() - } - SessionStoreMigrationHelper.migrateSessions(context, db) - PreKeyMigrationHelper.cleanUpPreKeys(context) - } } override fun onUpgrade(db: net.zetetic.database.sqlcipher.SQLiteDatabase, oldVersion: Int, newVersion: Int) { @@ -178,7 +188,7 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data db.setForeignKeyConstraintsEnabled(false) try { // Transactions and version bumps are handled in the migrate method - SignalDatabaseMigrations.migrate(context, db, oldVersion, newVersion) + SignalDatabaseMigrations.migrate(context, SignalSQLiteDatabase(db), oldVersion, newVersion) } finally { db.setForeignKeyConstraintsEnabled(true) @@ -202,11 +212,11 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data open val rawWritableDatabase: net.zetetic.database.sqlcipher.SQLiteDatabase get() = super.writableDatabase - open val signalReadableDatabase: SQLiteDatabase - get() = SQLiteDatabase(super.readableDatabase) + open val signalReadableDatabase: SignalSQLiteDatabase + get() = SignalSQLiteDatabase(super.readableDatabase) - open val signalWritableDatabase: SQLiteDatabase - get() = SQLiteDatabase(super.writableDatabase) + open val signalWritableDatabase: SignalSQLiteDatabase + get() = SignalSQLiteDatabase(super.writableDatabase) override fun getSqlCipherDatabase(): net.zetetic.database.sqlcipher.SQLiteDatabase { return super.writableDatabase @@ -216,7 +226,7 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data db.version = SignalDatabaseMigrations.DATABASE_VERSION } - private fun executeStatements(db: net.zetetic.database.sqlcipher.SQLiteDatabase, statements: Array) { + private fun executeStatements(db: SupportSQLiteDatabase, statements: Array) { for (statement in statements) db.execSQL(statement) } @@ -251,11 +261,11 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data get() = instance!!.rawWritableDatabase @JvmStatic - val readableDatabase: SQLiteDatabase + val readableDatabase: SignalSQLiteDatabase get() = instance!!.signalReadableDatabase @JvmStatic - val writableDatabase: SQLiteDatabase + val writableDatabase: SignalSQLiteDatabase get() = instance!!.signalWritableDatabase @JvmStatic @@ -361,7 +371,7 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data } @JvmStatic - fun runInTransaction(block: (SQLiteDatabase) -> T): T { + fun runInTransaction(block: (SignalSQLiteDatabase) -> T): T { return instance!!.signalWritableDatabase.withinTransaction { block(it) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/RecipientIdCleanupHelper.java b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/RecipientIdCleanupHelper.java index f70c41879e..9a9d902d78 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/RecipientIdCleanupHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/RecipientIdCleanupHelper.java @@ -5,9 +5,8 @@ import android.text.TextUtils; import androidx.annotation.NonNull; -import net.zetetic.database.sqlcipher.SQLiteDatabase; - import org.signal.core.util.logging.Log; +import org.thoughtcrime.securesms.database.SQLiteDatabase; import org.thoughtcrime.securesms.util.DelimiterUtil; import java.util.HashSet; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt index d775769d3e..a9fd8da32c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt @@ -3,7 +3,6 @@ package org.thoughtcrime.securesms.database.helpers import android.app.Application import android.content.Context import android.database.sqlite.SQLiteException -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.areForeignKeyConstraintsEnabled import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.database.SignalDatabase @@ -123,6 +122,7 @@ import org.thoughtcrime.securesms.database.helpers.migration.V264_FixGroupAddMem import org.thoughtcrime.securesms.database.helpers.migration.V265_FixFtsTriggers import org.thoughtcrime.securesms.database.helpers.migration.V266_UniqueThreadPinOrder import org.thoughtcrime.securesms.database.helpers.migration.V267_FixGroupInvitationDeclinedUpdate +import org.thoughtcrime.securesms.database.SQLiteDatabase as SignalSqliteDatabase /** * Contains all of the database migrations for [SignalDatabase]. Broken into a separate file for cleanliness. @@ -255,7 +255,7 @@ object SignalDatabaseMigrations { const val DATABASE_VERSION = 267 @JvmStatic - fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { + fun migrate(context: Application, db: SignalSqliteDatabase, oldVersion: Int, newVersion: Int) { val initialForeignKeyState = db.areForeignKeyConstraintsEnabled() for (migrationData in migrations) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/SignalDatabaseMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/SignalDatabaseMigration.kt index ef190da45c..940ff20728 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/SignalDatabaseMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/SignalDatabaseMigration.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Simple interface for allowing database migrations to live outside of [org.thoughtcrime.securesms.database.helpers.SignalDatabaseMigrations]. 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 7fc359af1f..b57616ece9 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 @@ -14,7 +14,6 @@ import android.preference.PreferenceManager import android.text.TextUtils import androidx.core.content.contentValuesOf import com.annimon.stream.Stream -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.Base64 import org.signal.core.util.CursorUtil import org.signal.core.util.Hex @@ -29,6 +28,7 @@ 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.RecipientTable +import org.thoughtcrime.securesms.database.SQLiteDatabase import org.thoughtcrime.securesms.database.helpers.PreKeyMigrationHelper import org.thoughtcrime.securesms.database.helpers.RecipientIdCleanupHelper import org.thoughtcrime.securesms.database.helpers.RecipientIdMigrationHelper @@ -222,14 +222,14 @@ object V149_LegacyMigrations : SignalDatabaseMigration { db.execSQL("CREATE TABLE signed_prekeys (_id INTEGER PRIMARY KEY, key_id INTEGER UNIQUE, public_key TEXT NOT NULL, private_key TEXT NOT NULL, signature TEXT NOT NULL, timestamp INTEGER DEFAULT 0)") db.execSQL("CREATE TABLE one_time_prekeys (_id INTEGER PRIMARY KEY, key_id INTEGER UNIQUE, public_key TEXT NOT NULL, private_key TEXT NOT NULL)") - if (!PreKeyMigrationHelper.migratePreKeys(context, db)) { + if (!PreKeyMigrationHelper.migratePreKeys(context, db.sqlCipherDatabase)) { PreKeysSyncJob.enqueue() } } if (oldVersion < MIGRATE_SESSIONS_VERSION) { db.execSQL("CREATE TABLE sessions (_id INTEGER PRIMARY KEY, address TEXT NOT NULL, device INTEGER NOT NULL, record BLOB NOT NULL, UNIQUE(address, device) ON CONFLICT REPLACE)") - SessionStoreMigrationHelper.migrateSessions(context, db) + SessionStoreMigrationHelper.migrateSessions(context, db.sqlCipherDatabase) } if (oldVersion < NO_MORE_IMAGE_THUMBNAILS_VERSION) { @@ -616,7 +616,7 @@ object V149_LegacyMigrations : SignalDatabaseMigration { } if (oldVersion < RECIPIENT_IDS) { - RecipientIdMigrationHelper.execute(db) + RecipientIdMigrationHelper.execute(db.sqlCipherDatabase) } if (oldVersion < RECIPIENT_SEARCH) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V150_UrgentMslFlagMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V150_UrgentMslFlagMigration.kt index 94e61be153..e2d1fc0eba 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V150_UrgentMslFlagMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V150_UrgentMslFlagMigration.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adding an urgent flag to message envelopes to help with notifications. Need to track flag in diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V151_MyStoryMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V151_MyStoryMigration.kt index ab2b83114b..0aa15c5066 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V151_MyStoryMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V151_MyStoryMigration.kt @@ -3,11 +3,11 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application import android.database.Cursor import androidx.core.content.contentValuesOf -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.Base64 import org.signal.core.util.CursorUtil import org.signal.core.util.SqlUtil import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.database.SQLiteDatabase import org.thoughtcrime.securesms.storage.StorageSyncHelper /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V152_StoryGroupTypesMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V152_StoryGroupTypesMigration.kt index 2e976166d4..25532afcf3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V152_StoryGroupTypesMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V152_StoryGroupTypesMigration.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Marks story recipients with a new group type constant. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V153_MyStoryMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V153_MyStoryMigration.kt index 59de4a9e5e..d28ced5cc5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V153_MyStoryMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V153_MyStoryMigration.kt @@ -3,11 +3,11 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application import android.database.Cursor import androidx.core.content.contentValuesOf -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.Base64 import org.signal.core.util.CursorUtil import org.signal.core.util.SqlUtil import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.database.SQLiteDatabase import org.thoughtcrime.securesms.storage.StorageSyncHelper /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V154_PniSignaturesMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V154_PniSignaturesMigration.kt index 23998c6b21..753d60a146 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V154_PniSignaturesMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V154_PniSignaturesMigration.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Introduces the tables and fields required to keep track of whether we need to send a PNI signature message and if the ones we've sent out have been received. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V155_SmsExporterMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V155_SmsExporterMigration.kt index e6e0831914..8b9181e1ca 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V155_SmsExporterMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V155_SmsExporterMigration.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds necessary book-keeping columns to SMS and MMS tables for SMS export. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V156_RecipientUnregisteredTimestampMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V156_RecipientUnregisteredTimestampMigration.kt index a84a466d8d..6cf33c67e9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V156_RecipientUnregisteredTimestampMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V156_RecipientUnregisteredTimestampMigration.kt @@ -1,8 +1,8 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.update +import org.thoughtcrime.securesms.database.SQLiteDatabase import java.util.concurrent.TimeUnit /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V157_RecipeintHiddenMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V157_RecipeintHiddenMigration.kt index a1e4ffc1b5..4c917e3f46 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V157_RecipeintHiddenMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V157_RecipeintHiddenMigration.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase @Suppress("ClassName") object V157_RecipeintHiddenMigration : SignalDatabaseMigration { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V158_GroupsLastForceUpdateTimestampMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V158_GroupsLastForceUpdateTimestampMigration.kt index c89f41b6a5..7203beed94 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V158_GroupsLastForceUpdateTimestampMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V158_GroupsLastForceUpdateTimestampMigration.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Track last time we did a forced sanity check for this group with the server. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V159_ThreadUnreadSelfMentionCount.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V159_ThreadUnreadSelfMentionCount.kt index f7dc51d0c4..bd5c6c5fdb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V159_ThreadUnreadSelfMentionCount.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V159_ThreadUnreadSelfMentionCount.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase @Suppress("ClassName") object V159_ThreadUnreadSelfMentionCount : SignalDatabaseMigration { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V160_SmsMmsExportedIndexMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V160_SmsMmsExportedIndexMigration.kt index 7fd0a530ab..c83edba3e8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V160_SmsMmsExportedIndexMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V160_SmsMmsExportedIndexMigration.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase @Suppress("ClassName") object V160_SmsMmsExportedIndexMigration : SignalDatabaseMigration { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V161_StorySendMessageIdIndex.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V161_StorySendMessageIdIndex.kt index 27d414e0b4..18babef7aa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V161_StorySendMessageIdIndex.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V161_StorySendMessageIdIndex.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds an index to the story sends table to help with a new common query. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V162_ThreadUnreadSelfMentionCountFixup.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V162_ThreadUnreadSelfMentionCountFixup.kt index 0c49e6eb04..3face44ef2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V162_ThreadUnreadSelfMentionCountFixup.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V162_ThreadUnreadSelfMentionCountFixup.kt @@ -2,8 +2,8 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application import androidx.sqlite.db.SupportSQLiteDatabase -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.database.SQLiteDatabase import org.thoughtcrime.securesms.database.helpers.SignalDatabaseMigrations /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V163_RemoteMegaphoneSnoozeSupportMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V163_RemoteMegaphoneSnoozeSupportMigration.kt index 7da0943029..0580c4e526 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V163_RemoteMegaphoneSnoozeSupportMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V163_RemoteMegaphoneSnoozeSupportMigration.kt @@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application import androidx.sqlite.db.SupportSQLiteDatabase -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Add columns needed to track remote megaphone specific snooze rates. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V164_ThreadDatabaseReadIndexMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V164_ThreadDatabaseReadIndexMigration.kt index 4ef7378082..c5b9fdedcf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V164_ThreadDatabaseReadIndexMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V164_ThreadDatabaseReadIndexMigration.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase @Suppress("ClassName") object V164_ThreadDatabaseReadIndexMigration : SignalDatabaseMigration { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V165_MmsMessageBoxPaymentTransactionIndexMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V165_MmsMessageBoxPaymentTransactionIndexMigration.kt index e4709d0cb4..c185beb402 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V165_MmsMessageBoxPaymentTransactionIndexMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V165_MmsMessageBoxPaymentTransactionIndexMigration.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds an index to MMS table that only covers id and messages with the type of payment notification to diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V166_ThreadAndMessageForeignKeys.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V166_ThreadAndMessageForeignKeys.kt index 81b45533b7..e5ad689fd5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V166_ThreadAndMessageForeignKeys.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V166_ThreadAndMessageForeignKeys.kt @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.SqlUtil import org.signal.core.util.Stopwatch import org.signal.core.util.delete @@ -9,6 +8,7 @@ import org.signal.core.util.logging.Log import org.signal.core.util.readToList import org.signal.core.util.requireLong import org.signal.core.util.update +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * This one's a doozy. We want to add additional foreign key constraints between the thread, recipient, and message tables. This will let us know for sure diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V167_RecreateReactionTriggers.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V167_RecreateReactionTriggers.kt index 5253879b83..3515c0c68d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V167_RecreateReactionTriggers.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V167_RecreateReactionTriggers.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Forgot to recreate the triggers for the reactions table in [V166_ThreadAndMessageForeignKeys]. So we gotta fix stuff up and do it here. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V168_SingleMessageTableMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V168_SingleMessageTableMigration.kt index d944328a62..c970b3fc9a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V168_SingleMessageTableMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V168_SingleMessageTableMigration.kt @@ -1,10 +1,10 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.SqlUtil import org.signal.core.util.Stopwatch import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.database.SQLiteDatabase import org.thoughtcrime.securesms.keyvalue.SignalStore @Suppress("ClassName") diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V169_EmojiSearchIndexRank.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V169_EmojiSearchIndexRank.kt index fc980d54b6..a4246324ad 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V169_EmojiSearchIndexRank.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V169_EmojiSearchIndexRank.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * We want to add a new `rank` column to the emoji_search table, and we no longer use it as an FTS diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V170_CallTableMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V170_CallTableMigration.kt index bf3d44e961..9cf8c9987e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V170_CallTableMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V170_CallTableMigration.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase @Suppress("ClassName") object V170_CallTableMigration : SignalDatabaseMigration { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V171_ThreadForeignKeyFix.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V171_ThreadForeignKeyFix.kt index 27af1faf50..e168eea06f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V171_ThreadForeignKeyFix.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V171_ThreadForeignKeyFix.kt @@ -1,13 +1,13 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.Stopwatch import org.signal.core.util.delete import org.signal.core.util.logging.Log import org.signal.core.util.readToList import org.signal.core.util.requireLong import org.signal.core.util.update +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * When we ran [V166_ThreadAndMessageForeignKeys], we forgot to update the actual table definition in [ThreadTable]. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V172_GroupMembershipMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V172_GroupMembershipMigration.kt index b0299d3be0..0655ce6353 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V172_GroupMembershipMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V172_GroupMembershipMigration.kt @@ -2,10 +2,10 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application import androidx.core.content.contentValuesOf -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.SqlUtil import org.signal.core.util.readToList import org.signal.core.util.requireNonNullString +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Migrates all IDs from the GroupTable into the GroupMembershipTable diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V173_ScheduledMessagesMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V173_ScheduledMessagesMigration.kt index ba95e1c814..b0cd70b3b2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V173_ScheduledMessagesMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V173_ScheduledMessagesMigration.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * In order to support scheduled sending, we need to add another column to keep track of when to send the message. We also use this diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V174_ReactionForeignKeyMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V174_ReactionForeignKeyMigration.kt index 9976289ad8..4e1ea381e5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V174_ReactionForeignKeyMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V174_ReactionForeignKeyMigration.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds a foreign key dependency between reactions and messages so we can remove the trigger. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V175_FixFullTextSearchLink.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V175_FixFullTextSearchLink.kt index 394d0a9c2f..be97591b48 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V175_FixFullTextSearchLink.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V175_FixFullTextSearchLink.kt @@ -1,8 +1,8 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.SqlUtil +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Turns out renaming a table will automatically update all of your indexes, foreign keys, triggers, basically everything... except full-text search tables. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V176_AddScheduledDateToQuoteIndex.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V176_AddScheduledDateToQuoteIndex.kt index 41c218616a..1ff5e1dece 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V176_AddScheduledDateToQuoteIndex.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V176_AddScheduledDateToQuoteIndex.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Expand quote index to included scheduled date so they can be excluded. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V177_MessageSendLogTableCleanupMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V177_MessageSendLogTableCleanupMigration.kt index ff29c7c0e0..5688376b6f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V177_MessageSendLogTableCleanupMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V177_MessageSendLogTableCleanupMigration.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Removes the is_mms column from the MSL tables and fixes the triggers. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V178_ReportingTokenColumnMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V178_ReportingTokenColumnMigration.kt index 25995337fc..abcef20102 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V178_ReportingTokenColumnMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V178_ReportingTokenColumnMigration.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * This adds a column to the Recipients table to store a spam reporting token. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V179_CleanupDanglingMessageSendLogMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V179_CleanupDanglingMessageSendLogMigration.kt index 8ab7ad455e..9bf2ce1be3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V179_CleanupDanglingMessageSendLogMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V179_CleanupDanglingMessageSendLogMigration.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * This cleans up some MSL entries that we left behind during a bad past migration. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V180_RecipientNicknameMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V180_RecipientNicknameMigration.kt index 4aa1dfd584..cd235dd0d7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V180_RecipientNicknameMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V180_RecipientNicknameMigration.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds support for storing the systemNickname from storage service. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V181_ThreadTableForeignKeyCleanup.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V181_ThreadTableForeignKeyCleanup.kt index 197603add9..504d8fb50d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V181_ThreadTableForeignKeyCleanup.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V181_ThreadTableForeignKeyCleanup.kt @@ -1,9 +1,9 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.Stopwatch import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * We saw evidence (via failed backup restores) that some people have recipients in their thread table that do not exist in the recipient table. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V182_CallTableMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V182_CallTableMigration.kt index 7033d66cec..b6757e7004 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V182_CallTableMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V182_CallTableMigration.kt @@ -1,9 +1,9 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.thoughtcrime.securesms.database.MessageTable import org.thoughtcrime.securesms.database.RecipientTable +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds a new 'timestamp' column to CallTable and copies in the date_sent column data from diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V183_CallLinkTableMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V183_CallLinkTableMigration.kt index 2fc303bc64..2f2267fa62 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V183_CallLinkTableMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V183_CallLinkTableMigration.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds the CallLinkTable and modifies the CallTable to include an FK into it. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V184_CallLinkReplaceIndexMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V184_CallLinkReplaceIndexMigration.kt index d1cafce082..5c7ddb39a3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V184_CallLinkReplaceIndexMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V184_CallLinkReplaceIndexMigration.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * [V183_CallLinkTableMigration] accidentally setup a unique constraint incorrectly and missed an index. This fixes it. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V185_MessageRecipientsAndEditMessageMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V185_MessageRecipientsAndEditMessageMigration.kt index dcd8259942..7d58c6b5a2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V185_MessageRecipientsAndEditMessageMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V185_MessageRecipientsAndEditMessageMigration.kt @@ -3,7 +3,6 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application import android.preference.PreferenceManager import androidx.core.content.contentValuesOf -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.SqlUtil import org.signal.core.util.Stopwatch import org.signal.core.util.logging.Log @@ -14,6 +13,7 @@ import org.signal.core.util.requireLong import org.signal.core.util.requireNonNullString import org.signal.core.util.requireString import org.thoughtcrime.securesms.database.KeyValueDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase import org.thoughtcrime.securesms.dependencies.AppDependencies import org.thoughtcrime.securesms.recipients.RecipientId import org.whispersystems.signalservice.api.push.ServiceId.ACI diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V186_ForeignKeyIndicesMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V186_ForeignKeyIndicesMigration.kt index 6eaff10551..ff9d410b71 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V186_ForeignKeyIndicesMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V186_ForeignKeyIndicesMigration.kt @@ -1,11 +1,11 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.Stopwatch import org.signal.core.util.logging.Log import org.signal.core.util.readToList import org.signal.core.util.requireNonNullString +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * We added some foreign keys to the message table (particularly on original_message_id and latest_revision_id) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V187_MoreForeignKeyIndexesMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V187_MoreForeignKeyIndexesMigration.kt index fbaadc2f57..4b2789fe52 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V187_MoreForeignKeyIndexesMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V187_MoreForeignKeyIndexesMigration.kt @@ -1,9 +1,9 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.Stopwatch import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * I found some other tables that didn't have the proper indexes setup to correspond with their foreign keys. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V188_FixMessageRecipientsAndEditMessageMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V188_FixMessageRecipientsAndEditMessageMigration.kt index 16af07b176..fe998a146b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V188_FixMessageRecipientsAndEditMessageMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V188_FixMessageRecipientsAndEditMessageMigration.kt @@ -3,7 +3,6 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application import android.preference.PreferenceManager import androidx.core.content.contentValuesOf -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.SqlUtil import org.signal.core.util.Stopwatch import org.signal.core.util.logging.Log @@ -14,6 +13,7 @@ import org.signal.core.util.requireLong import org.signal.core.util.requireNonNullString import org.signal.core.util.requireString import org.thoughtcrime.securesms.database.KeyValueDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase import org.thoughtcrime.securesms.dependencies.AppDependencies import org.thoughtcrime.securesms.recipients.RecipientId import org.whispersystems.signalservice.api.push.ServiceId.ACI diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V189_CreateCallLinkTableColumnsAndRebuildFKReference.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V189_CreateCallLinkTableColumnsAndRebuildFKReference.kt index 122fc2325e..92a8a674ef 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V189_CreateCallLinkTableColumnsAndRebuildFKReference.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V189_CreateCallLinkTableColumnsAndRebuildFKReference.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Fleshes out the call link table and rebuilds the call event table. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V190_UniqueMessageMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V190_UniqueMessageMigration.kt index d472edfebd..14049fb0bb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V190_UniqueMessageMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V190_UniqueMessageMigration.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * This migration used to do what [V191_UniqueMessageMigrationV2] does. However, due to bugs, the migration was abandoned. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V191_UniqueMessageMigrationV2.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V191_UniqueMessageMigrationV2.kt index d40c4f8407..758102c769 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V191_UniqueMessageMigrationV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V191_UniqueMessageMigrationV2.kt @@ -1,13 +1,13 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.SqlUtil import org.signal.core.util.Stopwatch import org.signal.core.util.logging.Log import org.signal.core.util.readToList import org.signal.core.util.readToSingleBoolean import org.signal.core.util.requireLong +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * We want to have a unique constraint on message (author, timestamp, thread). Unfortunately, because we haven't had one for all this time, some dupes diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V192_CallLinkTableNullableRootKeys.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V192_CallLinkTableNullableRootKeys.kt index 31c10b3518..f78cedf161 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V192_CallLinkTableNullableRootKeys.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V192_CallLinkTableNullableRootKeys.kt @@ -6,9 +6,9 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.SqlUtil import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Allow ROOT_KEY in CallLinkTable to be null. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V193_BackCallLinksWithRecipient.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V193_BackCallLinksWithRecipient.kt index 5d6ff79ba0..e1902ed1e8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V193_BackCallLinksWithRecipient.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V193_BackCallLinksWithRecipient.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Due to a bug, this has been replaced by [V196_BackCallLinksWithRecipientV2] diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V194_KyberPreKeyMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V194_KyberPreKeyMigration.kt index 7894774fb6..cecdfb801d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V194_KyberPreKeyMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V194_KyberPreKeyMigration.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Introduces [org.thoughtcrime.securesms.database.KyberPreKeyTable]. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V195_GroupMemberForeignKeyMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V195_GroupMemberForeignKeyMigration.kt index 036836e097..b4ea60f000 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V195_GroupMemberForeignKeyMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V195_GroupMemberForeignKeyMigration.kt @@ -6,12 +6,12 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.SqlUtil import org.signal.core.util.Stopwatch import org.signal.core.util.logging.Log import org.signal.core.util.readToList import org.signal.core.util.requireLong +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Back CallLinks with a Recipient to ease integration and ensure we can support diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V196_BackCallLinksWithRecipientV2.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V196_BackCallLinksWithRecipientV2.kt index 52aa1d2888..8eb63162f4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V196_BackCallLinksWithRecipientV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V196_BackCallLinksWithRecipientV2.kt @@ -6,9 +6,9 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.SqlUtil import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Cleans up the call events table and restricts peer to non-null. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V197_DropAvatarColorFromCallLinks.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V197_DropAvatarColorFromCallLinks.kt index 72d7bf39aa..ce7ccfdd3f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V197_DropAvatarColorFromCallLinks.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V197_DropAvatarColorFromCallLinks.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Because getting the color is a simple modulo operation, there is no need to store it in the database. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V198_AddMacDigestColumn.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V198_AddMacDigestColumn.kt index ff9de352d7..acea482ac8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V198_AddMacDigestColumn.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V198_AddMacDigestColumn.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * New field migration. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V199_AddThreadActiveColumn.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V199_AddThreadActiveColumn.kt index f40cf50b6e..014062913b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V199_AddThreadActiveColumn.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V199_AddThreadActiveColumn.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds the ACTIVE column to the THREAD table, and mark all current threads active. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V200_ResetPniColumn.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V200_ResetPniColumn.kt index aa4d5ed736..0ff81dc143 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V200_ResetPniColumn.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V200_ResetPniColumn.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * This updates the PNI column to have the proper serialized format. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V201_RecipientTableValidations.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V201_RecipientTableValidations.kt index f70bc4ef91..5f0c483fec 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V201_RecipientTableValidations.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V201_RecipientTableValidations.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * This migration rebuilds the recipient table to drop some deprecated columns, rename others to match their intended name, and some new constraints. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V202_DropMessageTableThreadDateIndex.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V202_DropMessageTableThreadDateIndex.kt index 53903dd95d..1f7e7c3b34 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V202_DropMessageTableThreadDateIndex.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V202_DropMessageTableThreadDateIndex.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Drop the unnecessary thread-date index. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V203_PreKeyStaleTimestamp.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V203_PreKeyStaleTimestamp.kt index 516877eee2..7437cd19ab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V203_PreKeyStaleTimestamp.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V203_PreKeyStaleTimestamp.kt @@ -7,7 +7,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application import androidx.sqlite.db.SupportSQLiteDatabase -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Keep track of a "stale timestamp" for one-time prekeys so that we can know when it's safe to delete them. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V204_GroupForeignKeyMigration.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V204_GroupForeignKeyMigration.kt index 0125bf55cb..4eee1cf3a5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V204_GroupForeignKeyMigration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V204_GroupForeignKeyMigration.kt @@ -6,10 +6,10 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.SqlUtil import org.signal.core.util.Stopwatch import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Back CallLinks with a Recipient to ease integration and ensure we can support diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V205_DropPushTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V205_DropPushTable.kt index 2c42b59f30..c0644a0082 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V205_DropPushTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V205_DropPushTable.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Drop the no longer used push table. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V206_AddConversationCountIndex.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V206_AddConversationCountIndex.kt index 83a155b5cf..dbe8f5a8e4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V206_AddConversationCountIndex.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V206_AddConversationCountIndex.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Add an index to speed up thread counts. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V207_AddChunkSizeColumn.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V207_AddChunkSizeColumn.kt index bfe1e25104..44da1cddff 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V207_AddChunkSizeColumn.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V207_AddChunkSizeColumn.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * New field migration. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V209_ClearRecipientPniFromAciColumn.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V209_ClearRecipientPniFromAciColumn.kt index 622a714900..9c3911d8cd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V209_ClearRecipientPniFromAciColumn.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V209_ClearRecipientPniFromAciColumn.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * PNIs were incorrectly being set to ACI column, clear them if present. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V210_FixPniPossibleColumns.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V210_FixPniPossibleColumns.kt index 2a67c8ea98..a878ba7179 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V210_FixPniPossibleColumns.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V210_FixPniPossibleColumns.kt @@ -6,11 +6,11 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.SqlUtil import org.signal.core.util.logging.Log import org.signal.core.util.requireString import org.thoughtcrime.securesms.database.KeyValueDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase import org.whispersystems.signalservice.api.push.ServiceId /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V211_ReceiptColumnRenames.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V211_ReceiptColumnRenames.kt index da42267046..f16a0d509e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V211_ReceiptColumnRenames.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V211_ReceiptColumnRenames.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** */ diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V212_RemoveDistributionListUniqueConstraint.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V212_RemoveDistributionListUniqueConstraint.kt index ccff4d1af2..bb4b33e302 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V212_RemoveDistributionListUniqueConstraint.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V212_RemoveDistributionListUniqueConstraint.kt @@ -6,10 +6,10 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.SqlUtil import org.signal.core.util.Stopwatch import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * The android app was the only one enforcing unique story names. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V213_FixUsernameInE164Column.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V213_FixUsernameInE164Column.kt index 260f34ea58..137439c167 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V213_FixUsernameInE164Column.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V213_FixUsernameInE164Column.kt @@ -6,8 +6,8 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * There was a bug where adding a member to a group by username could put that username in the e164 column. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V214_PhoneNumberSharingColumn.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V214_PhoneNumberSharingColumn.kt index fcc18257d5..f03acd725b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V214_PhoneNumberSharingColumn.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V214_PhoneNumberSharingColumn.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds a phone_number_sharing column to the recipient table. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V215_RemoveAttachmentUniqueId.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V215_RemoveAttachmentUniqueId.kt index 298d39f8a7..51d5e98818 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V215_RemoveAttachmentUniqueId.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V215_RemoveAttachmentUniqueId.kt @@ -6,9 +6,9 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.Stopwatch import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.database.SQLiteDatabase object V215_RemoveAttachmentUniqueId : SignalDatabaseMigration { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V216_PhoneNumberDiscoverable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V216_PhoneNumberDiscoverable.kt index 92e4ea03a7..568344fab4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V216_PhoneNumberDiscoverable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V216_PhoneNumberDiscoverable.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase object V216_PhoneNumberDiscoverable : SignalDatabaseMigration { override fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V217_MessageTableExtrasColumn.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V217_MessageTableExtrasColumn.kt index a8a24d2bd2..7f13855749 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V217_MessageTableExtrasColumn.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V217_MessageTableExtrasColumn.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds a message_extras column to the messages table. This allows us to diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V218_RecipientPniSignatureVerified.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V218_RecipientPniSignatureVerified.kt index 23b17a92e9..6a9336885c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V218_RecipientPniSignatureVerified.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V218_RecipientPniSignatureVerified.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds a pni_signature_verified column to the recipient table, letting us track whether the ACI/PNI association is verified and sync that to storage service. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V219_PniPreKeyStores.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V219_PniPreKeyStores.kt index 6fe2802e8e..70e1f112fe 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V219_PniPreKeyStores.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V219_PniPreKeyStores.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Changes our PNI prekey stores to use a constant indicating it's for a PNI rather than the specific PNI. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V220_PreKeyConstraints.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V220_PreKeyConstraints.kt index aa66037b05..16261e9e35 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V220_PreKeyConstraints.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V220_PreKeyConstraints.kt @@ -6,9 +6,9 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.Stopwatch import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * A while back we added an accountId to the prekey tables to support a mix of ACI and PNI identities. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V221_AddReadColumnToCallEventsTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V221_AddReadColumnToCallEventsTable.kt index 3cdca4412c..fbf9f77b2f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V221_AddReadColumnToCallEventsTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V221_AddReadColumnToCallEventsTable.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds read state to call events to separately track from the primary messages table. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V222_DataHashRefactor.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V222_DataHashRefactor.kt index 02e39ceec0..4831538253 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V222_DataHashRefactor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V222_DataHashRefactor.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds the new data hash columns and indexes. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V223_AddNicknameAndNoteFieldsToRecipientTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V223_AddNicknameAndNoteFieldsToRecipientTable.kt index 4dbfea54c9..ceaa170e09 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V223_AddNicknameAndNoteFieldsToRecipientTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V223_AddNicknameAndNoteFieldsToRecipientTable.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds necessary fields to the recipeints table for the nickname & notes feature. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V224_AddAttachmentArchiveColumns.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V224_AddAttachmentArchiveColumns.kt index 5c3018a402..fda6e09ae6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V224_AddAttachmentArchiveColumns.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V224_AddAttachmentArchiveColumns.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds archive_cdn and archive_media to attachment. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V225_AddLocalUserJoinedStateAndGroupCallActiveState.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V225_AddLocalUserJoinedStateAndGroupCallActiveState.kt index ec1703e0da..b57d0f0f5d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V225_AddLocalUserJoinedStateAndGroupCallActiveState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V225_AddLocalUserJoinedStateAndGroupCallActiveState.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds local user joined state and group call active state to the diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V226_AddAttachmentMediaIdIndex.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V226_AddAttachmentMediaIdIndex.kt index fd89b97879..75c6eabc5f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V226_AddAttachmentMediaIdIndex.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V226_AddAttachmentMediaIdIndex.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds index to archive_media_id diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V227_AddAttachmentArchiveTransferState.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V227_AddAttachmentArchiveTransferState.kt index db664232e0..ba6d076777 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V227_AddAttachmentArchiveTransferState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V227_AddAttachmentArchiveTransferState.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds a new column to track the status of transferring attachments to the archive service. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V228_AddNameCollisionTables.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V228_AddNameCollisionTables.kt index c2bc02dc10..2e9ec78019 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V228_AddNameCollisionTables.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V228_AddNameCollisionTables.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds the tables for managing name collisions diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V229_MarkMissedCallEventsNotified.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V229_MarkMissedCallEventsNotified.kt index 16469407cb..5370395985 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V229_MarkMissedCallEventsNotified.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V229_MarkMissedCallEventsNotified.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * In order to both correct how we display missed calls and not spam users, diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V230_UnreadCountIndices.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V230_UnreadCountIndices.kt index 6200d28b71..d814bb492d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V230_UnreadCountIndices.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V230_UnreadCountIndices.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds a partial index for some performance-critical queries around unread counts. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V231_ArchiveThumbnailColumns.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V231_ArchiveThumbnailColumns.kt index 68d1776f83..8675e510bb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V231_ArchiveThumbnailColumns.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V231_ArchiveThumbnailColumns.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase object V231_ArchiveThumbnailColumns : SignalDatabaseMigration { override fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V232_CreateInAppPaymentTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V232_CreateInAppPaymentTable.kt index 294b7137dc..dbf2358ed4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V232_CreateInAppPaymentTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V232_CreateInAppPaymentTable.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Create the table and migrate necessary data. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V233_FixInAppPaymentTableDefaultNotifiedValue.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V233_FixInAppPaymentTableDefaultNotifiedValue.kt index 217cfb03b1..80f9e9d3cb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V233_FixInAppPaymentTableDefaultNotifiedValue.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V233_FixInAppPaymentTableDefaultNotifiedValue.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Updates notified default value from 0 to 1 diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V234_ThumbnailRestoreStateColumn.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V234_ThumbnailRestoreStateColumn.kt index 2a4951aeb2..830081fcf8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V234_ThumbnailRestoreStateColumn.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V234_ThumbnailRestoreStateColumn.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Add a separate column to track thumbnail restore state diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V235_AttachmentUuidColumn.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V235_AttachmentUuidColumn.kt index fad43460f8..dbe9cb47b1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V235_AttachmentUuidColumn.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V235_AttachmentUuidColumn.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Add a column for attachment uuids diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V236_FixInAppSubscriberCurrencyIfAble.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V236_FixInAppSubscriberCurrencyIfAble.kt index 3f33e9b865..72a5758127 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V236_FixInAppSubscriberCurrencyIfAble.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V236_FixInAppSubscriberCurrencyIfAble.kt @@ -7,9 +7,9 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application import androidx.core.content.contentValuesOf -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.logging.Log import org.signal.core.util.update +import org.thoughtcrime.securesms.database.SQLiteDatabase import org.thoughtcrime.securesms.database.model.databaseprotos.InAppPaymentData /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V237_ResetGroupForceUpdateTimestamps.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V237_ResetGroupForceUpdateTimestamps.kt index 45f8209b87..46e0df8cf7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V237_ResetGroupForceUpdateTimestamps.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V237_ResetGroupForceUpdateTimestamps.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Reset last forced update timestamp for groups to fix a local group state bug. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V238_AddGroupSendEndorsementsColumns.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V238_AddGroupSendEndorsementsColumns.kt index 1214560604..e55aa07e8a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V238_AddGroupSendEndorsementsColumns.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V238_AddGroupSendEndorsementsColumns.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Add columns to group and group membership tables needed for group send endorsements. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V239_MessageFullTextSearchEmojiSupport.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V239_MessageFullTextSearchEmojiSupport.kt index d76ea9c211..3fb2bac0eb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V239_MessageFullTextSearchEmojiSupport.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V239_MessageFullTextSearchEmojiSupport.kt @@ -6,8 +6,8 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Recreates the message FTS stuff, but with a tokenizer property that lets us search for emoji. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V240_MessageFullTextSearchSecureDelete.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V240_MessageFullTextSearchSecureDelete.kt index 62904e167e..538203d916 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V240_MessageFullTextSearchSecureDelete.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V240_MessageFullTextSearchSecureDelete.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Sets the 'secure-delete' flag on the message_fts table. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V241_ExpireTimerVersion.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V241_ExpireTimerVersion.kt index a94517c069..ee1e4e4c4b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V241_ExpireTimerVersion.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V241_ExpireTimerVersion.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Migration for new field tracking expiration timer version. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V242_MessageFullTextSearchEmojiSupportV2.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V242_MessageFullTextSearchEmojiSupportV2.kt index 57a2183646..9f43711ecf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V242_MessageFullTextSearchEmojiSupportV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V242_MessageFullTextSearchEmojiSupportV2.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Recreates the message FTS stuff, but with a tokenizer property that lets us search for emoji. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V243_MessageFullTextSearchDisableSecureDelete.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V243_MessageFullTextSearchDisableSecureDelete.kt index cbcf7fc0a2..bd77be3d84 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V243_MessageFullTextSearchDisableSecureDelete.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V243_MessageFullTextSearchDisableSecureDelete.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase import org.thoughtcrime.securesms.database.helpers.migration.V240_MessageFullTextSearchSecureDelete.FTS_TABLE_NAME /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V244_AttachmentRemoteIv.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V244_AttachmentRemoteIv.kt index 153bd7e883..915261c526 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V244_AttachmentRemoteIv.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V244_AttachmentRemoteIv.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds the remoteIv column to attachments. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V245_DeletionTimestampOnCallLinks.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V245_DeletionTimestampOnCallLinks.kt index cd8e6cae5b..cd2b172d47 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V245_DeletionTimestampOnCallLinks.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V245_DeletionTimestampOnCallLinks.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds a deletion timestamp to the call links table, which is required for storage service syncing. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V246_DropThumbnailCdnFromAttachments.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V246_DropThumbnailCdnFromAttachments.kt index 20d5f9451c..4d2baac0ec 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V246_DropThumbnailCdnFromAttachments.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V246_DropThumbnailCdnFromAttachments.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Thumbnails are best effort and assumed to have the same CDN as the full attachment, there is no need to store it in the database. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V247_ClearUploadTimestamp.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V247_ClearUploadTimestamp.kt index 1c68f482d4..434b943995 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V247_ClearUploadTimestamp.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V247_ClearUploadTimestamp.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * There was a bad interaction with the digest backfill job, where digests could be changed, and then already-uploaded attachments could be re-used diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V250_ClearUploadTimestampV2.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V250_ClearUploadTimestampV2.kt index 1225d5a87c..9e9aabdd6f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V250_ClearUploadTimestampV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V250_ClearUploadTimestampV2.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Turns out we need to run [V247_ClearUploadTimestamp] again, because there was another situation where we had mismatching transit data across duplicates. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V251_ArchiveTransferStateIndex.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V251_ArchiveTransferStateIndex.kt index ec4e9f52c4..68c0c63c88 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V251_ArchiveTransferStateIndex.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V251_ArchiveTransferStateIndex.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds an index to improve the perf of counting and filtering attachment rows by their transfer state. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V252_AttachmentOffloadRestoredAtColumn.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V252_AttachmentOffloadRestoredAtColumn.kt index c16e0c1c76..a12a712abb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V252_AttachmentOffloadRestoredAtColumn.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V252_AttachmentOffloadRestoredAtColumn.kt @@ -6,9 +6,9 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.SqlUtil import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds the offload_restored_at column to attachments. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V253_CreateChatFolderTables.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V253_CreateChatFolderTables.kt index c89e14ef91..fd500af369 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V253_CreateChatFolderTables.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V253_CreateChatFolderTables.kt @@ -1,8 +1,8 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.thoughtcrime.securesms.database.ChatFolderTables +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds the tables for managing chat folders diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V254_AddChatFolderConstraint.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V254_AddChatFolderConstraint.kt index 7ecd7d2609..d149c81eb4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V254_AddChatFolderConstraint.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V254_AddChatFolderConstraint.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds a unique constraint to chat folder membership diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V255_AddCallTableLogIndex.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V255_AddCallTableLogIndex.kt index 1bc29ec603..bb4a2351ec 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V255_AddCallTableLogIndex.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V255_AddCallTableLogIndex.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds timestamp index to call table to speed up queries. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V256_FixIncrementalDigestColumns.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V256_FixIncrementalDigestColumns.kt index f4e16779c6..4c3d15bbb2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V256_FixIncrementalDigestColumns.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V256_FixIncrementalDigestColumns.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Fixes a bug where sometimes incremental chunk size would be set when the attachment was not actually incremental diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V257_CreateBackupMediaSyncTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V257_CreateBackupMediaSyncTable.kt index c502a0300e..fe489c80f1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V257_CreateBackupMediaSyncTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V257_CreateBackupMediaSyncTable.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase @Suppress("ClassName") object V257_CreateBackupMediaSyncTable : SignalDatabaseMigration { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V258_FixGroupRevokedInviteeUpdate.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V258_FixGroupRevokedInviteeUpdate.kt index 105b372a00..491ecb35e4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V258_FixGroupRevokedInviteeUpdate.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V258_FixGroupRevokedInviteeUpdate.kt @@ -7,13 +7,13 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application import androidx.core.content.contentValuesOf -import net.zetetic.database.sqlcipher.SQLiteDatabase import okio.IOException import org.signal.core.util.forEach import org.signal.core.util.logging.Log import org.signal.core.util.requireBlob import org.signal.core.util.requireLong import org.thoughtcrime.securesms.backup.v2.proto.GroupInvitationRevokedUpdate +import org.thoughtcrime.securesms.database.SQLiteDatabase import org.thoughtcrime.securesms.database.model.databaseprotos.MessageExtras import org.whispersystems.signalservice.api.push.ServiceId diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V259_AdjustNotificationProfileMidnightEndTimes.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V259_AdjustNotificationProfileMidnightEndTimes.kt index 3e18bb9afb..a2effd8d35 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V259_AdjustNotificationProfileMidnightEndTimes.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V259_AdjustNotificationProfileMidnightEndTimes.kt @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adjust notification profile schedules with end times between midnight at 1am. These were originally diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V260_RemapQuoteAuthors.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V260_RemapQuoteAuthors.kt index 2d967a9f54..f0a6c61b92 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V260_RemapQuoteAuthors.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V260_RemapQuoteAuthors.kt @@ -1,10 +1,10 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.logging.Log import org.signal.core.util.readToSingleLong import org.signal.core.util.select +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Previously, we weren't properly remapping quote authors when recipients were remapped. This repairs those scenarios the best we can. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V261_RemapCallRingers.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V261_RemapCallRingers.kt index 428b56eb87..054c0e9e00 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V261_RemapCallRingers.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V261_RemapCallRingers.kt @@ -1,10 +1,10 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.logging.Log import org.signal.core.util.readToSingleLong import org.signal.core.util.select +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Previously, we weren't properly remapping call ringers when recipients were remapped. This repairs those scenarios the best we can. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V263_InAppPaymentsSubscriberTableRebuild.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V263_InAppPaymentsSubscriberTableRebuild.kt index 3afe873f44..41a46d708b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V263_InAppPaymentsSubscriberTableRebuild.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V263_InAppPaymentsSubscriberTableRebuild.kt @@ -6,7 +6,7 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Adds IAP fields and updates constraints. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V264_FixGroupAddMemberUpdate.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V264_FixGroupAddMemberUpdate.kt index 14d61d01c8..d648b146f7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V264_FixGroupAddMemberUpdate.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V264_FixGroupAddMemberUpdate.kt @@ -7,13 +7,13 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application import androidx.core.content.contentValuesOf -import net.zetetic.database.sqlcipher.SQLiteDatabase import okio.IOException import org.signal.core.util.forEach import org.signal.core.util.logging.Log import org.signal.core.util.requireBlob import org.signal.core.util.requireLong import org.thoughtcrime.securesms.backup.v2.proto.GroupMemberAddedUpdate +import org.thoughtcrime.securesms.database.SQLiteDatabase import org.thoughtcrime.securesms.database.model.databaseprotos.MessageExtras import org.whispersystems.signalservice.api.push.ServiceId diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V265_FixFtsTriggers.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V265_FixFtsTriggers.kt index 6cedfe0b38..6ad234429a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V265_FixFtsTriggers.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V265_FixFtsTriggers.kt @@ -1,10 +1,10 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.SqlUtil import org.signal.core.util.Stopwatch import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * We've seen evidence of some users missing certain triggers. This migration checks for that, and if so, will completely tear down and rebuild the FTS. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V266_UniqueThreadPinOrder.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V266_UniqueThreadPinOrder.kt index 0baab7667c..ac328a6d65 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V266_UniqueThreadPinOrder.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V266_UniqueThreadPinOrder.kt @@ -7,12 +7,12 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application import androidx.core.content.contentValuesOf -import net.zetetic.database.sqlcipher.SQLiteDatabase import org.signal.core.util.Stopwatch import org.signal.core.util.logging.Log import org.signal.core.util.readToList import org.signal.core.util.requireInt import org.signal.core.util.requireLong +import org.thoughtcrime.securesms.database.SQLiteDatabase /** * Somehow we have a bug where pinned orders aren't always unique. Could be from some old bug, not clear. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V267_FixGroupInvitationDeclinedUpdate.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V267_FixGroupInvitationDeclinedUpdate.kt index 585899565b..e2d77dbf64 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V267_FixGroupInvitationDeclinedUpdate.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V267_FixGroupInvitationDeclinedUpdate.kt @@ -7,13 +7,13 @@ package org.thoughtcrime.securesms.database.helpers.migration import android.app.Application import androidx.core.content.contentValuesOf -import net.zetetic.database.sqlcipher.SQLiteDatabase import okio.IOException import org.signal.core.util.forEach import org.signal.core.util.logging.Log import org.signal.core.util.requireBlob import org.signal.core.util.requireLong import org.thoughtcrime.securesms.backup.v2.proto.GroupInvitationDeclinedUpdate +import org.thoughtcrime.securesms.database.SQLiteDatabase import org.thoughtcrime.securesms.database.model.databaseprotos.MessageExtras import org.whispersystems.signalservice.api.push.ServiceId 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 8b742cc7da..d070adb4bd 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/MmsDatabaseTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/MmsDatabaseTest.kt @@ -1,114 +1,96 @@ package org.thoughtcrime.securesms.database import android.app.Application -import android.database.sqlite.SQLiteDatabase -import androidx.test.core.app.ApplicationProvider -import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue -import org.junit.Before +import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config import org.thoughtcrime.securesms.database.model.StoryType import org.thoughtcrime.securesms.database.model.StoryViewState -import org.thoughtcrime.securesms.testing.TestDatabaseUtil +import org.thoughtcrime.securesms.testutil.SignalDatabaseRule @RunWith(RobolectricTestRunner::class) @Config(manifest = Config.NONE, application = Application::class) class MmsDatabaseTest { - private lateinit var db: SQLiteDatabase - private lateinit var messageTable: MessageTable - - @Before - fun setup() { - val sqlCipher = TestDatabaseUtil.inMemoryDatabase { - execSQL(MessageTable.CREATE_TABLE) - } - - db = sqlCipher.myWritableDatabase - messageTable = MessageTable(ApplicationProvider.getApplicationContext(), sqlCipher) - } - - @After - fun tearDown() { - db.close() - } + @get:Rule + val signalDatabaseRule = SignalDatabaseRule() @Test fun `isGroupQuitMessage when normal message, return false`() { - val id = TestMms.insert(db, type = MessageTypes.BASE_SENDING_TYPE or MessageTypes.SECURE_MESSAGE_BIT or MessageTypes.PUSH_MESSAGE_BIT) - assertFalse(messageTable.isGroupQuitMessage(id)) + val id = TestMms.insert(signalDatabaseRule.writeableDatabase, type = MessageTypes.BASE_SENDING_TYPE or MessageTypes.SECURE_MESSAGE_BIT or MessageTypes.PUSH_MESSAGE_BIT) + assertFalse(SignalDatabase.messages.isGroupQuitMessage(id)) } @Test fun `isGroupQuitMessage when legacy quit message, return true`() { - val id = TestMms.insert(db, type = MessageTypes.BASE_SENDING_TYPE or MessageTypes.SECURE_MESSAGE_BIT or MessageTypes.PUSH_MESSAGE_BIT or MessageTypes.GROUP_LEAVE_BIT) - assertTrue(messageTable.isGroupQuitMessage(id)) + val id = TestMms.insert(signalDatabaseRule.writeableDatabase, type = MessageTypes.BASE_SENDING_TYPE or MessageTypes.SECURE_MESSAGE_BIT or MessageTypes.PUSH_MESSAGE_BIT or MessageTypes.GROUP_LEAVE_BIT) + assertTrue(SignalDatabase.messages.isGroupQuitMessage(id)) } @Test fun `isGroupQuitMessage when GV2 leave update, return false`() { - val id = TestMms.insert(db, type = MessageTypes.BASE_SENDING_TYPE or MessageTypes.SECURE_MESSAGE_BIT or MessageTypes.PUSH_MESSAGE_BIT or MessageTypes.GROUP_LEAVE_BIT or MessageTypes.GROUP_V2_BIT or MessageTypes.GROUP_UPDATE_BIT) - assertFalse(messageTable.isGroupQuitMessage(id)) + val id = TestMms.insert(signalDatabaseRule.writeableDatabase, type = MessageTypes.BASE_SENDING_TYPE or MessageTypes.SECURE_MESSAGE_BIT or MessageTypes.PUSH_MESSAGE_BIT or MessageTypes.GROUP_LEAVE_BIT or MessageTypes.GROUP_V2_BIT or MessageTypes.GROUP_UPDATE_BIT) + assertFalse(SignalDatabase.messages.isGroupQuitMessage(id)) } @Test fun `getLatestGroupQuitTimestamp when only normal message, return -1`() { - TestMms.insert(db, threadId = 1, sentTimeMillis = 1, type = MessageTypes.BASE_SENDING_TYPE or MessageTypes.SECURE_MESSAGE_BIT or MessageTypes.PUSH_MESSAGE_BIT) - assertEquals(-1, messageTable.getLatestGroupQuitTimestamp(1, 4)) + TestMms.insert(signalDatabaseRule.writeableDatabase, threadId = 1, sentTimeMillis = 1, type = MessageTypes.BASE_SENDING_TYPE or MessageTypes.SECURE_MESSAGE_BIT or MessageTypes.PUSH_MESSAGE_BIT) + assertEquals(-1, SignalDatabase.messages.getLatestGroupQuitTimestamp(1, 4)) } @Test fun `getLatestGroupQuitTimestamp when legacy quit, return message timestamp`() { - TestMms.insert(db, threadId = 1, sentTimeMillis = 2, type = MessageTypes.BASE_SENDING_TYPE or MessageTypes.SECURE_MESSAGE_BIT or MessageTypes.PUSH_MESSAGE_BIT or MessageTypes.GROUP_LEAVE_BIT) - assertEquals(2, messageTable.getLatestGroupQuitTimestamp(1, 4)) + TestMms.insert(signalDatabaseRule.writeableDatabase, threadId = 1, sentTimeMillis = 2, type = MessageTypes.BASE_SENDING_TYPE or MessageTypes.SECURE_MESSAGE_BIT or MessageTypes.PUSH_MESSAGE_BIT or MessageTypes.GROUP_LEAVE_BIT) + assertEquals(2, SignalDatabase.messages.getLatestGroupQuitTimestamp(1, 4)) } @Test fun `getLatestGroupQuitTimestamp when GV2 leave update message, return -1`() { - TestMms.insert(db, threadId = 1, sentTimeMillis = 3, type = MessageTypes.BASE_SENDING_TYPE or MessageTypes.SECURE_MESSAGE_BIT or MessageTypes.PUSH_MESSAGE_BIT or MessageTypes.GROUP_LEAVE_BIT or MessageTypes.GROUP_V2_BIT or MessageTypes.GROUP_UPDATE_BIT) - assertEquals(-1, messageTable.getLatestGroupQuitTimestamp(1, 4)) + TestMms.insert(signalDatabaseRule.writeableDatabase, threadId = 1, sentTimeMillis = 3, type = MessageTypes.BASE_SENDING_TYPE or MessageTypes.SECURE_MESSAGE_BIT or MessageTypes.PUSH_MESSAGE_BIT or MessageTypes.GROUP_LEAVE_BIT or MessageTypes.GROUP_V2_BIT or MessageTypes.GROUP_UPDATE_BIT) + assertEquals(-1, SignalDatabase.messages.getLatestGroupQuitTimestamp(1, 4)) } @Test fun `Given no stories in database, when I getStoryViewState, then I expect NONE`() { - assertEquals(StoryViewState.NONE, messageTable.getStoryViewState(1)) + assertEquals(StoryViewState.NONE, SignalDatabase.messages.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, messageTable.getStoryViewState(1)) + TestMms.insert(signalDatabaseRule.writeableDatabase, threadId = 2, storyType = StoryType.STORY_WITH_REPLIES) + TestMms.insert(signalDatabaseRule.writeableDatabase, threadId = 2, storyType = StoryType.STORY_WITH_REPLIES) + assertEquals(StoryViewState.NONE, SignalDatabase.messages.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, messageTable.getStoryViewState(1)) + TestMms.insert(signalDatabaseRule.writeableDatabase, threadId = 1, storyType = StoryType.STORY_WITH_REPLIES, viewed = true) + TestMms.insert(signalDatabaseRule.writeableDatabase, threadId = 1, storyType = StoryType.STORY_WITH_REPLIES, viewed = true) + assertEquals(StoryViewState.VIEWED, SignalDatabase.messages.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, messageTable.getStoryViewState(1)) + TestMms.insert(signalDatabaseRule.writeableDatabase, threadId = 1, storyType = StoryType.STORY_WITH_REPLIES, viewed = false) + TestMms.insert(signalDatabaseRule.writeableDatabase, threadId = 1, storyType = StoryType.STORY_WITH_REPLIES, viewed = false) + assertEquals(StoryViewState.UNVIEWED, SignalDatabase.messages.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, messageTable.getStoryViewState(1)) + TestMms.insert(signalDatabaseRule.writeableDatabase, threadId = 1, storyType = StoryType.STORY_WITH_REPLIES, viewed = true) + TestMms.insert(signalDatabaseRule.writeableDatabase, threadId = 1, storyType = StoryType.STORY_WITH_REPLIES, viewed = false) + assertEquals(StoryViewState.UNVIEWED, SignalDatabase.messages.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 = MessageTypes.BASE_OUTBOX_TYPE) - assertEquals(StoryViewState.VIEWED, messageTable.getStoryViewState(1)) + TestMms.insert(signalDatabaseRule.writeableDatabase, threadId = 1, storyType = StoryType.STORY_WITH_REPLIES, type = MessageTypes.BASE_OUTBOX_TYPE) + assertEquals(StoryViewState.VIEWED, SignalDatabase.messages.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 f89568d7e4..fd4cc1bbd6 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/MmsSmsDatabaseTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/MmsSmsDatabaseTest.kt @@ -1,45 +1,26 @@ package org.thoughtcrime.securesms.database import android.app.Application -import android.database.sqlite.SQLiteDatabase -import androidx.test.core.app.ApplicationProvider -import org.junit.After import org.junit.Assert.assertEquals -import org.junit.Before +import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config import org.signal.core.util.CursorUtil -import org.thoughtcrime.securesms.testing.TestDatabaseUtil +import org.thoughtcrime.securesms.testutil.SignalDatabaseRule @RunWith(RobolectricTestRunner::class) @Config(manifest = Config.NONE, application = Application::class) class MmsSmsDatabaseTest { - private lateinit var messageTable: MessageTable - private lateinit var db: SQLiteDatabase - - @Before - fun setup() { - val sqlCipher = TestDatabaseUtil.inMemoryDatabase { - execSQL(MessageTable.CREATE_TABLE) - MessageTable.CREATE_INDEXS.forEach { execSQL(it) } - } - - db = sqlCipher.myWritableDatabase - messageTable = MessageTable(ApplicationProvider.getApplicationContext(), sqlCipher) - } - - @After - fun tearDown() { - db.close() - } + @get:Rule + val signalDatabaseRule = SignalDatabaseRule() @Test fun `getConversationSnippet when single normal SMS, return SMS message id and transport as false`() { - TestSms.insert(db) - messageTable.getConversationSnippetCursor(1).use { cursor -> + TestSms.insert(signalDatabaseRule.writeableDatabase) + SignalDatabase.messages.getConversationSnippetCursor(1).use { cursor -> cursor.moveToFirst() assertEquals(1, CursorUtil.requireLong(cursor, MessageTable.ID)) } @@ -47,8 +28,8 @@ class MmsSmsDatabaseTest { @Test fun `getConversationSnippet when single normal MMS, return MMS message id and transport as true`() { - TestMms.insert(db) - messageTable.getConversationSnippetCursor(1).use { cursor -> + TestMms.insert(signalDatabaseRule.writeableDatabase) + SignalDatabase.messages.getConversationSnippetCursor(1).use { cursor -> cursor.moveToFirst() assertEquals(1, CursorUtil.requireLong(cursor, MessageTable.ID)) } @@ -58,14 +39,14 @@ class MmsSmsDatabaseTest { fun `getConversationSnippet when single normal MMS then GV2 leave update message, return MMS message id and transport as true both times`() { val timestamp = System.currentTimeMillis() - TestMms.insert(db, receivedTimestampMillis = timestamp + 2) - messageTable.getConversationSnippetCursor(1).use { cursor -> + TestMms.insert(signalDatabaseRule.writeableDatabase, receivedTimestampMillis = timestamp + 2) + SignalDatabase.messages.getConversationSnippetCursor(1).use { cursor -> cursor.moveToFirst() assertEquals(1, CursorUtil.requireLong(cursor, MessageTable.ID)) } - TestSms.insert(db, receivedTimestampMillis = timestamp + 3, type = MessageTypes.BASE_SENDING_TYPE or MessageTypes.SECURE_MESSAGE_BIT or MessageTypes.PUSH_MESSAGE_BIT or MessageTypes.GROUP_V2_LEAVE_BITS) - messageTable.getConversationSnippetCursor(1).use { cursor -> + TestSms.insert(signalDatabaseRule.writeableDatabase, receivedTimestampMillis = timestamp + 3, type = MessageTypes.BASE_SENDING_TYPE or MessageTypes.SECURE_MESSAGE_BIT or MessageTypes.PUSH_MESSAGE_BIT or MessageTypes.GROUP_V2_LEAVE_BITS) + SignalDatabase.messages.getConversationSnippetCursor(1).use { cursor -> cursor.moveToFirst() assertEquals(1, CursorUtil.requireLong(cursor, MessageTable.ID)) } diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/NotificationProfileTablesTest.kt b/app/src/test/java/org/thoughtcrime/securesms/database/NotificationProfileTablesTest.kt index e6d13f75c9..3031cd1117 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/NotificationProfileTablesTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/NotificationProfileTablesTest.kt @@ -1,16 +1,12 @@ package org.thoughtcrime.securesms.database import android.app.Application -import android.database.sqlite.SQLiteDatabase -import androidx.test.core.app.ApplicationProvider import assertk.assertThat import assertk.assertions.containsExactlyInAnyOrder import assertk.assertions.isEqualTo import assertk.assertions.isFalse import assertk.assertions.isTrue import assertk.assertions.single -import org.junit.After -import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @@ -19,8 +15,8 @@ import org.robolectric.annotation.Config import org.thoughtcrime.securesms.conversation.colors.AvatarColor import org.thoughtcrime.securesms.notifications.profiles.NotificationProfile import org.thoughtcrime.securesms.recipients.RecipientId -import org.thoughtcrime.securesms.testing.TestDatabaseUtil import org.thoughtcrime.securesms.testutil.MockAppDependenciesRule +import org.thoughtcrime.securesms.testutil.SignalDatabaseRule import java.time.DayOfWeek @RunWith(RobolectricTestRunner::class) @@ -29,34 +25,12 @@ class NotificationProfileTablesTest { @get:Rule val appDependencies = MockAppDependenciesRule() - private lateinit var db: SQLiteDatabase - private lateinit var database: NotificationProfileTables - - @Before - fun setup() { - val sqlCipher = TestDatabaseUtil.inMemoryDatabase { - NotificationProfileTables.CREATE_TABLE.forEach { - println(it) - this.execSQL(it) - } - NotificationProfileTables.CREATE_INDEXES.forEach { - println(it) - this.execSQL(it) - } - } - - db = sqlCipher.myWritableDatabase - database = NotificationProfileTables(ApplicationProvider.getApplicationContext(), sqlCipher) - } - - @After - fun tearDown() { - db.close() - } + @get:Rule + val signalDatabaseRule = SignalDatabaseRule() @Test fun `addProfile for profile with empty schedule and members`() { - val profile: NotificationProfile = database.createProfile( + val profile: NotificationProfile = SignalDatabase.notificationProfiles.createProfile( name = "Profile", emoji = "avatar", color = AvatarColor.A210, @@ -69,7 +43,7 @@ class NotificationProfileTablesTest { assertThat(profile.createdAt).isEqualTo(1000L) assertThat(profile.schedule.id).isEqualTo(1) - val profiles = database.getProfiles() + val profiles = SignalDatabase.notificationProfiles.getProfiles() assertThat(profiles) .single() @@ -84,14 +58,14 @@ class NotificationProfileTablesTest { @Test fun `updateProfile changes all updateable fields`() { - val profile: NotificationProfile = database.createProfile( + val profile: NotificationProfile = SignalDatabase.notificationProfiles.createProfile( name = "Profile", emoji = "avatar", color = AvatarColor.A210, createdAt = 1000L ).profile - val updatedProfile = database.updateProfile( + val updatedProfile = SignalDatabase.notificationProfiles.updateProfile( profile.copy( name = "Profile 2", emoji = "avatar 2", @@ -109,7 +83,7 @@ class NotificationProfileTablesTest { @Test fun `when allowed recipients change profile changes`() { - val profile: NotificationProfile = database.createProfile( + val profile: NotificationProfile = SignalDatabase.notificationProfiles.createProfile( name = "Profile", emoji = "avatar", color = AvatarColor.A210, @@ -117,22 +91,22 @@ class NotificationProfileTablesTest { ).profile assertThat(profile.isRecipientAllowed(RecipientId.from(1))).isFalse() - var updated = database.addAllowedRecipient(profile.id, RecipientId.from(1)) + var updated = SignalDatabase.notificationProfiles.addAllowedRecipient(profile.id, RecipientId.from(1)) assertThat(updated.isRecipientAllowed(RecipientId.from(1))).isTrue() - updated = database.removeAllowedRecipient(profile.id, RecipientId.from(1)) + updated = SignalDatabase.notificationProfiles.removeAllowedRecipient(profile.id, RecipientId.from(1)) assertThat(updated.isRecipientAllowed(RecipientId.from(1))).isFalse() - updated = database.updateProfile(updated.copy(allowedMembers = setOf(RecipientId.from(1)))).profile + updated = SignalDatabase.notificationProfiles.updateProfile(updated.copy(allowedMembers = setOf(RecipientId.from(1)))).profile assertThat(updated.isRecipientAllowed(RecipientId.from(1))).isTrue() - updated = database.updateProfile(updated.copy(allowedMembers = emptySet())).profile + updated = SignalDatabase.notificationProfiles.updateProfile(updated.copy(allowedMembers = emptySet())).profile assertThat(updated.isRecipientAllowed(RecipientId.from(1))).isFalse() } @Test fun `when schedule change profile changes`() { - val profile: NotificationProfile = database.createProfile( + val profile: NotificationProfile = SignalDatabase.notificationProfiles.createProfile( name = "Profile", emoji = "avatar", color = AvatarColor.A210, @@ -144,7 +118,7 @@ class NotificationProfileTablesTest { assertThat(profile.schedule.daysEnabled, "Contains correct default days") .containsExactlyInAnyOrder(DayOfWeek.MONDAY, DayOfWeek.TUESDAY, DayOfWeek.WEDNESDAY, DayOfWeek.THURSDAY, DayOfWeek.FRIDAY) - database.updateSchedule( + SignalDatabase.notificationProfiles.updateSchedule( profile.schedule.copy( enabled = true, start = 800, @@ -152,22 +126,22 @@ class NotificationProfileTablesTest { daysEnabled = setOf(DayOfWeek.SUNDAY, DayOfWeek.FRIDAY) ) ) - var updated = database.getProfile(profile.id)!! + var updated = SignalDatabase.notificationProfiles.getProfile(profile.id)!! assertThat(updated.schedule.enabled).isTrue() assertThat(updated.schedule.start).isEqualTo(800) assertThat(updated.schedule.end).isEqualTo(1800) assertThat(updated.schedule.daysEnabled, "Contains updated days days") .containsExactlyInAnyOrder(DayOfWeek.SUNDAY, DayOfWeek.FRIDAY) - database.updateSchedule(profile.schedule) - updated = database.getProfile(profile.id)!! + SignalDatabase.notificationProfiles.updateSchedule(profile.schedule) + updated = SignalDatabase.notificationProfiles.getProfile(profile.id)!! assertThat(updated.schedule.enabled).isFalse() assertThat(updated.schedule.start).isEqualTo(900) assertThat(updated.schedule.end).isEqualTo(1700) assertThat(updated.schedule.daysEnabled, "Contains correct default days") .containsExactlyInAnyOrder(DayOfWeek.MONDAY, DayOfWeek.TUESDAY, DayOfWeek.WEDNESDAY, DayOfWeek.THURSDAY, DayOfWeek.FRIDAY) - updated = database.updateProfile( + updated = SignalDatabase.notificationProfiles.updateProfile( profile.copy( schedule = profile.schedule.copy( enabled = true, @@ -183,7 +157,7 @@ class NotificationProfileTablesTest { assertThat(updated.schedule.daysEnabled, "Contains updated days days") .containsExactlyInAnyOrder(DayOfWeek.SUNDAY, DayOfWeek.FRIDAY) - updated = database.updateProfile(profile).profile + updated = SignalDatabase.notificationProfiles.updateProfile(profile).profile assertThat(updated.schedule.enabled).isFalse() assertThat(updated.schedule.start).isEqualTo(900) assertThat(updated.schedule.end).isEqualTo(1700) 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 e7dde7afce..c04c574037 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/SmsDatabaseTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/SmsDatabaseTest.kt @@ -1,92 +1,71 @@ package org.thoughtcrime.securesms.database import android.app.Application -import androidx.test.core.app.ApplicationProvider import assertk.assertThat import assertk.assertions.isEqualTo import assertk.assertions.isFalse import assertk.assertions.isTrue -import org.junit.After -import org.junit.Before +import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config -import org.thoughtcrime.securesms.testing.TestDatabaseUtil -import android.database.sqlite.SQLiteDatabase as AndroidSQLiteDatabase +import org.thoughtcrime.securesms.testutil.SignalDatabaseRule @RunWith(RobolectricTestRunner::class) @Config(manifest = Config.NONE, application = Application::class) class SmsDatabaseTest { - private lateinit var db: AndroidSQLiteDatabase - private lateinit var messageTable: MessageTable - - @Before - fun setup() { - val sqlCipher = TestDatabaseUtil.inMemoryDatabase { - execSQL(MessageTable.CREATE_TABLE) - MessageTable.CREATE_INDEXS.forEach { - execSQL(it) - } - } - - db = sqlCipher.myWritableDatabase - messageTable = MessageTable(ApplicationProvider.getApplicationContext(), sqlCipher) - } - - @After - fun tearDown() { - db.close() - } + @get:Rule + val signalDatabaseRule = SignalDatabaseRule() @Test fun `getThreadIdForMessage when no message absent for id, return -1`() { - assertThat(messageTable.getThreadIdForMessage(1)).isEqualTo(-1) + assertThat(SignalDatabase.messages.getThreadIdForMessage(1)).isEqualTo(-1) } @Test fun `getThreadIdForMessage when message present for id, return thread id`() { - TestSms.insert(db) - assertThat(messageTable.getThreadIdForMessage(1)).isEqualTo(1) + TestSms.insert(signalDatabaseRule.writeableDatabase) + assertThat(SignalDatabase.messages.getThreadIdForMessage(1)).isEqualTo(1) } @Test fun `hasMeaningfulMessage when no messages, return false`() { - assertThat(messageTable.hasMeaningfulMessage(1)).isFalse() + assertThat(SignalDatabase.messages.hasMeaningfulMessage(1)).isFalse() } @Test fun `hasMeaningfulMessage when normal message, return true`() { - TestSms.insert(db) - assertThat(messageTable.hasMeaningfulMessage(1)).isTrue() + TestSms.insert(signalDatabaseRule.writeableDatabase) + assertThat(SignalDatabase.messages.hasMeaningfulMessage(1)).isTrue() } @Test fun `hasMeaningfulMessage when GV2 create message only, return true`() { - TestSms.insert(db, type = MessageTypes.BASE_INBOX_TYPE or MessageTypes.SECURE_MESSAGE_BIT or MessageTypes.GROUP_V2_BIT or MessageTypes.GROUP_UPDATE_BIT) - assertThat(messageTable.hasMeaningfulMessage(1)).isTrue() + TestSms.insert(signalDatabaseRule.writeableDatabase, type = MessageTypes.BASE_INBOX_TYPE or MessageTypes.SECURE_MESSAGE_BIT or MessageTypes.GROUP_V2_BIT or MessageTypes.GROUP_UPDATE_BIT) + assertThat(SignalDatabase.messages.hasMeaningfulMessage(1)).isTrue() } @Test fun `hasMeaningfulMessage when empty and then with ignored types, always return false`() { - assertThat(messageTable.hasMeaningfulMessage(1)).isFalse() + assertThat(SignalDatabase.messages.hasMeaningfulMessage(1)).isFalse() - TestSms.insert(db, type = MessageTypes.IGNORABLE_TYPESMASK_WHEN_COUNTING) - assertThat(messageTable.hasMeaningfulMessage(1)).isFalse() + TestSms.insert(signalDatabaseRule.writeableDatabase, type = MessageTypes.IGNORABLE_TYPESMASK_WHEN_COUNTING) + assertThat(SignalDatabase.messages.hasMeaningfulMessage(1)).isFalse() - TestSms.insert(db, type = MessageTypes.PROFILE_CHANGE_TYPE) - assertThat(messageTable.hasMeaningfulMessage(1)).isFalse() + TestSms.insert(signalDatabaseRule.writeableDatabase, type = MessageTypes.PROFILE_CHANGE_TYPE) + assertThat(SignalDatabase.messages.hasMeaningfulMessage(1)).isFalse() - TestSms.insert(db, type = MessageTypes.CHANGE_NUMBER_TYPE) - assertThat(messageTable.hasMeaningfulMessage(1)).isFalse() + TestSms.insert(signalDatabaseRule.writeableDatabase, type = MessageTypes.CHANGE_NUMBER_TYPE) + assertThat(SignalDatabase.messages.hasMeaningfulMessage(1)).isFalse() - TestSms.insert(db, type = MessageTypes.RELEASE_CHANNEL_DONATION_REQUEST_TYPE) - assertThat(messageTable.hasMeaningfulMessage(1)).isFalse() + TestSms.insert(signalDatabaseRule.writeableDatabase, type = MessageTypes.RELEASE_CHANNEL_DONATION_REQUEST_TYPE) + assertThat(SignalDatabase.messages.hasMeaningfulMessage(1)).isFalse() - TestSms.insert(db, type = MessageTypes.SMS_EXPORT_TYPE) - assertThat(messageTable.hasMeaningfulMessage(1)).isFalse() + TestSms.insert(signalDatabaseRule.writeableDatabase, type = MessageTypes.SMS_EXPORT_TYPE) + assertThat(SignalDatabase.messages.hasMeaningfulMessage(1)).isFalse() - TestSms.insert(db, type = MessageTypes.BASE_INBOX_TYPE or MessageTypes.GROUP_V2_LEAVE_BITS) - assertThat(messageTable.hasMeaningfulMessage(1)).isFalse() + TestSms.insert(signalDatabaseRule.writeableDatabase, type = MessageTypes.BASE_INBOX_TYPE or MessageTypes.GROUP_V2_LEAVE_BITS) + assertThat(SignalDatabase.messages.hasMeaningfulMessage(1)).isFalse() } } 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 ac4090d60f..126bdfba39 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/TestMms.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/TestMms.kt @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.database import android.content.ContentValues import android.database.sqlite.SQLiteDatabase +import androidx.sqlite.db.SupportSQLiteDatabase import org.thoughtcrime.securesms.database.model.StoryType import org.thoughtcrime.securesms.mms.OutgoingMessage import org.thoughtcrime.securesms.recipients.Recipient @@ -12,12 +13,14 @@ import org.thoughtcrime.securesms.recipients.RecipientId */ object TestMms { + private var startSendTimestamp = System.currentTimeMillis() + fun insert( - db: SQLiteDatabase, + db: SupportSQLiteDatabase, recipient: Recipient = Recipient.UNKNOWN, recipientId: RecipientId = Recipient.UNKNOWN.id, body: String = "body", - sentTimeMillis: Long = System.currentTimeMillis(), + sentTimeMillis: Long = startSendTimestamp++, receivedTimestampMillis: Long = System.currentTimeMillis(), expiresIn: Long = 0, expireTimerVersion: Int = 1, @@ -64,7 +67,7 @@ object TestMms { } private fun insert( - db: SQLiteDatabase, + db: SupportSQLiteDatabase, message: OutgoingMessage, recipientId: RecipientId = message.threadRecipient.id, body: String = message.body, @@ -96,7 +99,7 @@ object TestMms { put(MessageTable.MENTIONS_SELF, 0) } - return db.insert(MessageTable.TABLE_NAME, null, contentValues) + return db.insert(MessageTable.TABLE_NAME, 0, contentValues) } fun markAsRemoteDelete(db: SQLiteDatabase, messageId: Long) { 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 9abf6a62f3..74fde51bf8 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/TestSms.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/TestSms.kt @@ -1,24 +1,26 @@ package org.thoughtcrime.securesms.database import android.content.ContentValues +import androidx.sqlite.db.SupportSQLiteDatabase import org.signal.core.util.orNull import org.thoughtcrime.securesms.groups.GroupId import org.thoughtcrime.securesms.mms.IncomingMessage import org.thoughtcrime.securesms.recipients.RecipientId import java.util.Optional import java.util.UUID -import android.database.sqlite.SQLiteDatabase as AndroidSQLiteDatabase /** * Helper methods for inserting SMS messages into the SMS table. */ object TestSms { + private var startSentTimestamp = System.currentTimeMillis() + fun insert( - db: AndroidSQLiteDatabase, + db: SupportSQLiteDatabase, sender: RecipientId = RecipientId.from(1), senderDeviceId: Int = 1, - sentTimestampMillis: Long = System.currentTimeMillis(), + sentTimestampMillis: Long = startSentTimestamp++, serverTimestampMillis: Long = System.currentTimeMillis(), receivedTimestampMillis: Long = System.currentTimeMillis(), encodedBody: String = "encodedBody", @@ -53,7 +55,7 @@ object TestSms { } fun insert( - db: AndroidSQLiteDatabase, + db: SupportSQLiteDatabase, message: IncomingMessage, type: Long = MessageTypes.BASE_INBOX_TYPE, unread: Boolean = false, @@ -75,6 +77,6 @@ object TestSms { put(MessageTable.SERVER_GUID, message.serverGuid) } - return db.insert(MessageTable.TABLE_NAME, null, values) + return db.insert(MessageTable.TABLE_NAME, 0, values) } } diff --git a/app/src/test/java/org/thoughtcrime/securesms/testing/TestDatabaseUtil.kt b/app/src/test/java/org/thoughtcrime/securesms/testing/TestDatabaseUtil.kt deleted file mode 100644 index 6a0391649e..0000000000 --- a/app/src/test/java/org/thoughtcrime/securesms/testing/TestDatabaseUtil.kt +++ /dev/null @@ -1,30 +0,0 @@ -package org.thoughtcrime.securesms.testing - -import android.database.sqlite.SQLiteDatabase -import androidx.test.core.app.ApplicationProvider -import java.io.File - -/** - * Helper for creating/reading a database for unit tests. - */ -object TestDatabaseUtil { - - /** - * Create an in-memory only database that is empty. Can pass [onCreate] to do similar operations - * one would do in a open helper's onCreate. - */ - fun inMemoryDatabase(onCreate: OnCreate): ProxySQLCipherOpenHelper { - val testSQLiteOpenHelper = TestSQLiteOpenHelper(ApplicationProvider.getApplicationContext(), onCreate) - return ProxySQLCipherOpenHelper(ApplicationProvider.getApplicationContext(), testSQLiteOpenHelper) - } - - /** - * Open a database file located in app/src/test/resources/db. Currently only reads - * are allowed due to weird caching of the file resulting in non-deterministic tests. - */ - fun fromFileDatabase(name: String): ProxySQLCipherOpenHelper { - val databaseFile = File(javaClass.getResource("/db/$name")!!.file) - val sqliteDatabase = SQLiteDatabase.openDatabase(databaseFile.absolutePath, null, SQLiteDatabase.OPEN_READONLY) - return ProxySQLCipherOpenHelper(ApplicationProvider.getApplicationContext(), sqliteDatabase, sqliteDatabase) - } -} diff --git a/app/src/test/java/org/thoughtcrime/securesms/testing/TestSQLiteOpenHelper.kt b/app/src/test/java/org/thoughtcrime/securesms/testing/TestSQLiteOpenHelper.kt deleted file mode 100644 index 14074bd923..0000000000 --- a/app/src/test/java/org/thoughtcrime/securesms/testing/TestSQLiteOpenHelper.kt +++ /dev/null @@ -1,25 +0,0 @@ -package org.thoughtcrime.securesms.testing - -import android.content.Context -import android.database.sqlite.SQLiteDatabase as AndroidSQLiteDatabase -import android.database.sqlite.SQLiteOpenHelper as AndroidSQLiteOpenHelper - -typealias OnCreate = AndroidSQLiteDatabase.() -> Unit - -/** - * [AndroidSQLiteOpenHelper] for use in unit tests. - */ -class TestSQLiteOpenHelper(context: Context, private val onCreate: OnCreate) : AndroidSQLiteOpenHelper(context, "test", null, 1) { - - fun setup() { - onCreate(writableDatabase) - } - - override fun onCreate(db: AndroidSQLiteDatabase) { - onCreate.invoke(db) - } - - override fun onUpgrade(db: AndroidSQLiteDatabase, oldVersion: Int, newVersion: Int) { - // no upgrade - } -} diff --git a/app/src/test/java/org/thoughtcrime/securesms/testing/ProxySQLCipherOpenHelper.kt b/app/src/test/java/org/thoughtcrime/securesms/testing/TestSignalDatabase.kt similarity index 77% rename from app/src/test/java/org/thoughtcrime/securesms/testing/ProxySQLCipherOpenHelper.kt rename to app/src/test/java/org/thoughtcrime/securesms/testing/TestSignalDatabase.kt index 7fb2d5d11a..f072e55eef 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/testing/ProxySQLCipherOpenHelper.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/testing/TestSignalDatabase.kt @@ -1,26 +1,28 @@ package org.thoughtcrime.securesms.testing import android.app.Application +import androidx.sqlite.db.SupportSQLiteDatabase +import androidx.sqlite.db.SupportSQLiteOpenHelper import org.thoughtcrime.securesms.crypto.AttachmentSecret import org.thoughtcrime.securesms.crypto.DatabaseSecret import org.thoughtcrime.securesms.database.SignalDatabase import java.security.SecureRandom -import android.database.sqlite.SQLiteDatabase as AndroidSQLiteDatabase import net.zetetic.database.sqlcipher.SQLiteDatabase as SQLCipherSQLiteDatabase /** - * Proxy [SignalDatabase] to the [TestSQLiteOpenHelper] interface. + * Test flavor of [SignalDatabase]. */ -class ProxySQLCipherOpenHelper( +class TestSignalDatabase( context: Application, - val myReadableDatabase: AndroidSQLiteDatabase, - val myWritableDatabase: AndroidSQLiteDatabase + val supportReadableDatabase: SupportSQLiteDatabase, + val supportWritableDatabase: SupportSQLiteDatabase ) : SignalDatabase(context, DatabaseSecret(ByteArray(32).apply { SecureRandom().nextBytes(this) }), AttachmentSecret()) { - constructor(context: Application, testOpenHelper: TestSQLiteOpenHelper) : this(context, testOpenHelper.readableDatabase, testOpenHelper.writableDatabase) + constructor(context: Application, testOpenHelper: SupportSQLiteOpenHelper) : this(context, testOpenHelper.readableDatabase, testOpenHelper.writableDatabase) override fun close() { - throw UnsupportedOperationException() + supportReadableDatabase.close() + supportWritableDatabase.close() } override val databaseName: String @@ -66,11 +68,13 @@ class ProxySQLCipherOpenHelper( override val rawWritableDatabase: net.zetetic.database.sqlcipher.SQLiteDatabase get() = throw UnsupportedOperationException() - override val signalReadableDatabase: org.thoughtcrime.securesms.database.SQLiteDatabase - get() = ProxySignalSQLiteDatabase(myReadableDatabase) + override val signalReadableDatabase: org.thoughtcrime.securesms.database.SQLiteDatabase by lazy { + TestSignalSQLiteDatabase(supportReadableDatabase) + } - override val signalWritableDatabase: org.thoughtcrime.securesms.database.SQLiteDatabase - get() = ProxySignalSQLiteDatabase(myWritableDatabase) + override val signalWritableDatabase: org.thoughtcrime.securesms.database.SQLiteDatabase by lazy { + TestSignalSQLiteDatabase(supportWritableDatabase) + } override fun getSqlCipherDatabase(): SQLCipherSQLiteDatabase { throw UnsupportedOperationException() diff --git a/app/src/test/java/org/thoughtcrime/securesms/testing/ProxySignalSQLiteDatabase.kt b/app/src/test/java/org/thoughtcrime/securesms/testing/TestSignalSQLiteDatabase.kt similarity index 72% rename from app/src/test/java/org/thoughtcrime/securesms/testing/ProxySignalSQLiteDatabase.kt rename to app/src/test/java/org/thoughtcrime/securesms/testing/TestSignalSQLiteDatabase.kt index 63800cf9f9..3e19c5875f 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/testing/ProxySignalSQLiteDatabase.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/testing/TestSignalSQLiteDatabase.kt @@ -2,8 +2,10 @@ package org.thoughtcrime.securesms.testing import android.content.ContentValues import android.database.Cursor +import android.database.SQLException +import androidx.sqlite.db.SupportSQLiteDatabase import androidx.sqlite.db.SupportSQLiteQuery -import org.signal.core.util.toAndroidQuery +import net.zetetic.database.sqlcipher.SQLiteQueryBuilder import java.util.Locale import android.database.sqlite.SQLiteDatabase as AndroidSQLiteDatabase import android.database.sqlite.SQLiteTransactionListener as AndroidSQLiteTransactionListener @@ -15,7 +17,7 @@ import org.thoughtcrime.securesms.database.SQLiteDatabase as SignalSQLiteDatabas * Partial implementation of [SignalSQLiteDatabase] using an instance of [AndroidSQLiteDatabase] instead * of SQLCipher. */ -class ProxySignalSQLiteDatabase(private val database: AndroidSQLiteDatabase) : SignalSQLiteDatabase(null) { +class TestSignalSQLiteDatabase(private val database: SupportSQLiteDatabase) : SignalSQLiteDatabase(null) { override fun getSqlCipherDatabase(): net.zetetic.database.sqlcipher.SQLiteDatabase { throw UnsupportedOperationException() } @@ -33,7 +35,7 @@ class ProxySignalSQLiteDatabase(private val database: AndroidSQLiteDatabase) : S } override fun query(distinct: Boolean, table: String, columns: Array?, selection: String?, selectionArgs: Array?, groupBy: String?, having: String?, orderBy: String?, limit: String?): Cursor { - return database.query(distinct, table, columns, selection, selectionArgs, groupBy, having, orderBy, limit) + throw UnsupportedOperationException() } override fun queryWithFactory( @@ -48,75 +50,83 @@ class ProxySignalSQLiteDatabase(private val database: AndroidSQLiteDatabase) : S orderBy: String?, limit: String? ): Cursor { - return database.queryWithFactory(null, distinct, table, columns, selection, selectionArgs, groupBy, having, orderBy, limit) + throw UnsupportedOperationException() } override fun query(query: SupportSQLiteQuery): Cursor { - val converted = query.toAndroidQuery() - return database.rawQuery(converted.where, converted.whereArgs) - } - - override fun query(table: String, columns: Array?, selection: String?, selectionArgs: Array?, groupBy: String?, having: String?, orderBy: String?): Cursor { - return database.query(table, columns, selection, selectionArgs, groupBy, having, orderBy) + return database.query(query) } override fun query(table: String, columns: Array?, selection: String?, selectionArgs: Array?, groupBy: String?, having: String?, orderBy: String?, limit: String?): Cursor { - return database.query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit) + val query: String = SQLiteQueryBuilder.buildQueryString(false, table, columns, selection, groupBy, having, orderBy, limit) + return database.query(query, selectionArgs ?: emptyArray()) + } + + override fun query(table: String, columns: Array?, selection: String?, selectionArgs: Array?, groupBy: String?, having: String?, orderBy: String?): Cursor { + return query(table, columns, selection, selectionArgs, groupBy, having, orderBy, null) } override fun rawQuery(sql: String, selectionArgs: Array?): Cursor { - return database.rawQuery(sql, selectionArgs) + return database.query(sql, selectionArgs ?: emptyArray()) } override fun rawQuery(sql: String, args: Array?): Cursor { - return database.rawQuery(sql, args?.map(Any::toString)?.toTypedArray()) + return database.query(sql, args ?: emptyArray()) } override fun rawQueryWithFactory(cursorFactory: net.zetetic.database.sqlcipher.SQLiteDatabase.CursorFactory?, sql: String, selectionArgs: Array?, editTable: String): Cursor { - return database.rawQueryWithFactory(null, sql, selectionArgs, editTable) + throw UnsupportedOperationException() } override fun rawQuery(sql: String, selectionArgs: Array?, initialRead: Int, maxRead: Int): Cursor { throw UnsupportedOperationException() } - override fun insert(table: String, nullColumnHack: String?, values: ContentValues?): Long { - return database.insert(table, nullColumnHack, values) + override fun insert(table: String, nullColumnHack: String?, values: ContentValues): Long { + return database.insert(table, 0, values) } - override fun insertOrThrow(table: String, nullColumnHack: String?, values: ContentValues?): Long { - return database.insertOrThrow(table, nullColumnHack, values) + override fun insertOrThrow(table: String, nullColumnHack: String?, values: ContentValues): Long { + val result = database.insert(table, 0, values) + if (result < 0) { + throw SQLException() + } + return result } - override fun replace(table: String, nullColumnHack: String?, initialValues: ContentValues?): Long { - return database.replace(table, nullColumnHack, initialValues) + override fun replace(table: String, nullColumnHack: String?, initialValues: ContentValues): Long { + return database.insert(table, 5, initialValues) } - override fun replaceOrThrow(table: String, nullColumnHack: String?, initialValues: ContentValues?): Long { - return database.replaceOrThrow(table, nullColumnHack, initialValues) + override fun replaceOrThrow(table: String, nullColumnHack: String?, initialValues: ContentValues): Long { + val result = replace(table, nullColumnHack, initialValues) + if (result < 0) { + throw SQLException() + } + return result } - override fun insertWithOnConflict(table: String, nullColumnHack: String?, initialValues: ContentValues?, conflictAlgorithm: Int): Long { - return database.insertWithOnConflict(table, nullColumnHack, initialValues, conflictAlgorithm) + override fun insertWithOnConflict(table: String, nullColumnHack: String?, initialValues: ContentValues, conflictAlgorithm: Int): Long { + return database.insert(table, conflictAlgorithm, initialValues) } override fun delete(table: String, whereClause: String?, whereArgs: Array?): Int { return database.delete(table, whereClause, whereArgs) } - override fun update(table: String, values: ContentValues?, whereClause: String?, whereArgs: Array?): Int { - return database.update(table, values, whereClause, whereArgs) + override fun update(table: String, values: ContentValues, whereClause: String?, whereArgs: Array?): Int { + return database.update(table, 0, values, whereClause, whereArgs) } - override fun updateWithOnConflict(table: String, values: ContentValues?, whereClause: String?, whereArgs: Array?, conflictAlgorithm: Int): Int { - return database.updateWithOnConflict(table, values, whereClause, whereArgs, conflictAlgorithm) + override fun updateWithOnConflict(table: String, values: ContentValues, whereClause: String?, whereArgs: Array?, conflictAlgorithm: Int): Int { + return database.update(table, conflictAlgorithm, values, whereClause, whereArgs) } override fun execSQL(sql: String) { database.execSQL(sql) } - override fun rawExecSQL(sql: String?) { + override fun rawExecSQL(sql: String) { database.execSQL(sql) } @@ -135,8 +145,8 @@ class ProxySignalSQLiteDatabase(private val database: AndroidSQLiteDatabase) : S override val isWriteAheadLoggingEnabled: Boolean get() = throw UnsupportedOperationException() - override fun setForeignKeyConstraintsEnabled(enable: Boolean) { - database.setForeignKeyConstraintsEnabled(enable) + override fun setForeignKeyConstraintsEnabled(enabled: Boolean) { + database.setForeignKeyConstraintsEnabled(enabled) } override fun beginTransactionWithListener(transactionListener: SQLCipherSQLiteTransactionListener?) { @@ -182,23 +192,22 @@ class ProxySignalSQLiteDatabase(private val database: AndroidSQLiteDatabase) : S override val isDbLockedByCurrentThread: Boolean get() = database.isDbLockedByCurrentThread - @Suppress("DEPRECATION") override fun isDbLockedByOtherThreads(): Boolean { - return database.isDbLockedByOtherThreads + return false } override fun yieldIfContendedSafely(): Boolean { return database.yieldIfContendedSafely() } - override fun yieldIfContendedSafely(sleepAfterYieldDelay: Long): Boolean { - return database.yieldIfContendedSafely(sleepAfterYieldDelay) + override fun yieldIfContendedSafely(sleepAfterYieldDelayMillis: Long): Boolean { + return database.yieldIfContendedSafely(sleepAfterYieldDelayMillis) } override var version: Int get() = database.version set(value) { - database.version = version + database.version = value } override val maximumSize: Long diff --git a/app/src/test/java/org/thoughtcrime/securesms/testutil/SignalDatabaseRule.kt b/app/src/test/java/org/thoughtcrime/securesms/testutil/SignalDatabaseRule.kt new file mode 100644 index 0000000000..797f7f4180 --- /dev/null +++ b/app/src/test/java/org/thoughtcrime/securesms/testutil/SignalDatabaseRule.kt @@ -0,0 +1,66 @@ +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.testutil + +import androidx.sqlite.db.SupportSQLiteDatabase +import androidx.sqlite.db.SupportSQLiteOpenHelper +import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory +import androidx.test.core.app.ApplicationProvider +import io.mockk.every +import io.mockk.mockkObject +import io.mockk.unmockkObject +import org.junit.rules.ExternalResource +import org.thoughtcrime.securesms.database.SQLiteDatabase +import org.thoughtcrime.securesms.database.SignalDatabase +import org.thoughtcrime.securesms.testing.TestSignalDatabase + +class SignalDatabaseRule : ExternalResource() { + + lateinit var signalDatabase: TestSignalDatabase + + val readableDatabase: SQLiteDatabase + get() = signalDatabase.signalReadableDatabase + + val writeableDatabase: SQLiteDatabase + get() = signalDatabase.signalWritableDatabase + + override fun before() { + signalDatabase = inMemorySignalDatabase() + + mockkObject(SignalDatabase) + every { SignalDatabase.instance } returns signalDatabase + } + + override fun after() { + unmockkObject(SignalDatabase) + signalDatabase.close() + } + + companion object { + /** + * Create an in-memory only database mimicking one created fresh for Signal. This includes + * all non-FTS tables, indexes, and triggers. + */ + private fun inMemorySignalDatabase(): TestSignalDatabase { + val configuration = SupportSQLiteOpenHelper.Configuration( + context = ApplicationProvider.getApplicationContext(), + name = "test", + callback = object : SupportSQLiteOpenHelper.Callback(1) { + override fun onCreate(db: SupportSQLiteDatabase) = Unit + override fun onUpgrade(db: SupportSQLiteDatabase, oldVersion: Int, newVersion: Int) = Unit + }, + useNoBackupDirectory = false, + allowDataLossOnRecovery = true + ) + + val helper = FrameworkSQLiteOpenHelperFactory().create(configuration) + val signalDatabase = TestSignalDatabase(ApplicationProvider.getApplicationContext(), helper) + signalDatabase.onCreateTablesIndexesAndTriggers(signalDatabase.signalWritableDatabase) + + return signalDatabase + } + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d45f264567..302c885a0c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -108,6 +108,7 @@ androidx-autofill = "androidx.autofill:autofill:1.1.0" androidx-biometric = "androidx.biometric:biometric:1.1.0" androidx-sharetarget = "androidx.sharetarget:sharetarget:1.2.0" androidx-sqlite = "androidx.sqlite:sqlite:2.4.0" +androidx-sqlite-framework = "androidx.sqlite:sqlite-framework:2.4.0" androidx-profileinstaller = "androidx.profileinstaller:profileinstaller:1.4.1" androidx-asynclayoutinflater = "androidx.asynclayoutinflater:asynclayoutinflater:1.1.0-alpha01" androidx-asynclayoutinflater-appcompat = "androidx.asynclayoutinflater:asynclayoutinflater-appcompat:1.1.0-alpha01"