From 31897b4c4ba9e0bc916522a2d5e6cfa029144765 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Fri, 20 Dec 2024 21:24:45 -0500 Subject: [PATCH] Update more libraries. --- .../remote/RemoteBackupsSettingsFragment.kt | 2 +- .../securesms/database/CallLinkTable.kt | 2 +- .../securesms/database/SignalDatabase.kt | 22 +- .../database/SignalDatabaseOpenHelper.java | 1 - .../V162_ThreadUnreadSelfMentionCountFixup.kt | 2 +- ...3_RemoteMegaphoneSnoozeSupportMigration.kt | 2 +- .../V186_ForeignKeyIndicesMigration.kt | 2 +- ...essageRecipientsAndEditMessageMigration.kt | 2 +- .../migration/V203_PreKeyStaleTimestamp.kt | 2 +- app/src/main/res/values/strings.xml | 2 + .../securesms/database/MmsDatabaseTest.kt | 2 +- .../securesms/database/MmsSmsDatabaseTest.kt | 2 +- .../database/NotificationProfileTablesTest.kt | 2 +- .../securesms/database/SmsDatabaseTest.kt | 2 +- .../testing/ProxySQLCipherOpenHelper.kt | 23 +- .../testing/ProxySignalSQLiteDatabase.kt | 59 +- .../core/util/SQLiteDatabaseExtensions.kt | 4 +- .../main/java/org/signal/core/util/SqlUtil.kt | 6 +- .../core/util/SupportSQLiteQueryExtensions.kt | 4 +- gradle/libs.versions.toml | 60 +- gradle/verification-metadata.xml | 831 ++++++++++++++++++ 21 files changed, 926 insertions(+), 108 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/RemoteBackupsSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/RemoteBackupsSettingsFragment.kt index e684a415b5..7f95ecca66 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/RemoteBackupsSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/backups/remote/RemoteBackupsSettingsFragment.kt @@ -291,7 +291,7 @@ class RemoteBackupsSettingsFragment : ComposeFragment() { private inner class AuthListener : BiometricPrompt.AuthenticationCallback() { override fun onAuthenticationFailed() { Log.w(TAG, "onAuthenticationFailed") - Toast.makeText(requireContext(), androidx.media3.session.R.string.authentication_required, Toast.LENGTH_SHORT).show() + Toast.makeText(requireContext(), R.string.RemoteBackupsSettingsFragment__authenticatino_required, Toast.LENGTH_SHORT).show() } override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/CallLinkTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/CallLinkTable.kt index fb23cd3810..ce9225f525 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/CallLinkTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/CallLinkTable.kt @@ -455,7 +455,7 @@ class CallLinkTable(context: Context, databaseHelper: SignalDatabase) : Database $limitOffset """.trimIndent() - return readableDatabase.query(statement, searchFilter?.whereArgs) + return readableDatabase.query(statement, searchFilter?.whereArgs ?: arrayOf()) } private object CallLinkSerializer : Serializer { 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 eeb03a6809..3efb7ba9fc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.kt @@ -190,28 +190,26 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data Log.i(TAG, "Upgrade complete. Took " + (System.currentTimeMillis() - startTime) + " ms.") } - override fun getReadableDatabase(): net.zetetic.database.sqlcipher.SQLiteDatabase { - throw UnsupportedOperationException("Call getSignalReadableDatabase() instead!") - } + override val readableDatabase: net.zetetic.database.sqlcipher.SQLiteDatabase + get() = throw UnsupportedOperationException("Call getSignalReadableDatabase() instead!") - override fun getWritableDatabase(): net.zetetic.database.sqlcipher.SQLiteDatabase { - throw UnsupportedOperationException("Call getSignalWritableDatabase() instead!") - } + override val writableDatabase: net.zetetic.database.sqlcipher.SQLiteDatabase + get() = throw UnsupportedOperationException("Call getSignalWritableDatabase() instead!") open val rawReadableDatabase: net.zetetic.database.sqlcipher.SQLiteDatabase - get() = super.getReadableDatabase() + get() = super.readableDatabase open val rawWritableDatabase: net.zetetic.database.sqlcipher.SQLiteDatabase - get() = super.getWritableDatabase() + get() = super.writableDatabase open val signalReadableDatabase: SQLiteDatabase - get() = SQLiteDatabase(super.getReadableDatabase()) + get() = SQLiteDatabase(super.readableDatabase) open val signalWritableDatabase: SQLiteDatabase - get() = SQLiteDatabase(super.getWritableDatabase()) + get() = SQLiteDatabase(super.writableDatabase) override fun getSqlCipherDatabase(): net.zetetic.database.sqlcipher.SQLiteDatabase { - return super.getWritableDatabase() + return super.writableDatabase } open fun markCurrent(db: net.zetetic.database.sqlcipher.SQLiteDatabase) { @@ -299,7 +297,7 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data database.setForeignKeyConstraintsEnabled(false) database.beginTransaction() try { - instance!!.onUpgrade(database, database.getVersion(), -1) + instance!!.onUpgrade(database, database.version, -1) instance!!.markCurrent(database) instance!!.messageTable.deleteAbandonedMessages() instance!!.messageTable.trimEntriesForExpiredMessages() diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabaseOpenHelper.java b/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabaseOpenHelper.java index 8b7fa77116..43e5ac3b15 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabaseOpenHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabaseOpenHelper.java @@ -8,5 +8,4 @@ import net.zetetic.database.sqlcipher.SQLiteDatabase; */ public interface SignalDatabaseOpenHelper { SQLiteDatabase getSqlCipherDatabase(); - String getDatabaseName(); } 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 301cea626c..0c49e6eb04 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 @@ -22,7 +22,7 @@ object V162_ThreadUnreadSelfMentionCountFixup : SignalDatabaseMigration { @Suppress("SameParameterValue") private fun columnMissing(db: SupportSQLiteDatabase, table: String, column: String): Boolean { - db.query("PRAGMA table_info($table)", null).use { cursor -> + db.query("PRAGMA table_info($table)", arrayOf()).use { cursor -> val nameColumnIndex = cursor.getColumnIndexOrThrow("name") while (cursor.moveToNext()) { val name = cursor.getString(nameColumnIndex) 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 2da677575f..7da0943029 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 @@ -28,7 +28,7 @@ object V163_RemoteMegaphoneSnoozeSupportMigration : SignalDatabaseMigration { } private fun columnMissing(db: SupportSQLiteDatabase, column: String): Boolean { - db.query("PRAGMA table_info(remote_megaphone)", null).use { cursor -> + db.query("PRAGMA table_info(remote_megaphone)", arrayOf()).use { cursor -> val nameColumnIndex = cursor.getColumnIndexOrThrow("name") while (cursor.moveToNext()) { val name = cursor.getString(nameColumnIndex) 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 bcdc570c62..6eaff10551 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 @@ -63,7 +63,7 @@ object V186_ForeignKeyIndicesMigration : SignalDatabaseMigration { } private fun columnExists(db: SQLiteDatabase, table: String, column: String): Boolean { - return db.query("PRAGMA table_info($table)", null) + return db.query("PRAGMA table_info($table)", arrayOf()) .readToList { it.requireNonNullString("name") } .any { it == column } } 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 c5cd6b4335..16af07b176 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 @@ -342,7 +342,7 @@ object V188_FixMessageRecipientsAndEditMessageMigration : SignalDatabaseMigratio } private fun columnExists(db: SQLiteDatabase, table: String, column: String): Boolean { - return db.query("PRAGMA table_info($table)", null) + return db.query("PRAGMA table_info($table)", arrayOf()) .readToList { it.requireNonNullString("name") } .any { it == column } } 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 f5d240a2e8..516877eee2 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 @@ -26,7 +26,7 @@ object V203_PreKeyStaleTimestamp : SignalDatabaseMigration { } private fun columnExists(db: SupportSQLiteDatabase, table: String, column: String): Boolean { - db.query("PRAGMA table_info($table)", null).use { cursor -> + db.query("PRAGMA table_info($table)", arrayOf()).use { cursor -> val nameColumnIndex = cursor.getColumnIndexOrThrow("name") while (cursor.moveToNext()) { val name = cursor.getString(nameColumnIndex) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index eaa51c5366..3eabb2f839 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -7663,6 +7663,8 @@ Signal Backups + + Authentication required Payment history 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 96bd22cea3..8b742cc7da 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/MmsDatabaseTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/MmsDatabaseTest.kt @@ -28,7 +28,7 @@ class MmsDatabaseTest { execSQL(MessageTable.CREATE_TABLE) } - db = sqlCipher.writableDatabase + db = sqlCipher.myWritableDatabase messageTable = MessageTable(ApplicationProvider.getApplicationContext(), sqlCipher) } 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 6a027bedfb..f89568d7e4 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/MmsSmsDatabaseTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/MmsSmsDatabaseTest.kt @@ -27,7 +27,7 @@ class MmsSmsDatabaseTest { MessageTable.CREATE_INDEXS.forEach { execSQL(it) } } - db = sqlCipher.writableDatabase + db = sqlCipher.myWritableDatabase messageTable = MessageTable(ApplicationProvider.getApplicationContext(), sqlCipher) } 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 d915f920aa..81b20cb44e 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/NotificationProfileTablesTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/NotificationProfileTablesTest.kt @@ -45,7 +45,7 @@ class NotificationProfileTablesTest { } } - db = sqlCipher.writableDatabase + db = sqlCipher.myWritableDatabase database = NotificationProfileTables(ApplicationProvider.getApplicationContext(), sqlCipher) } 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 a239d3e31c..383eff1e84 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/SmsDatabaseTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/SmsDatabaseTest.kt @@ -31,7 +31,7 @@ class SmsDatabaseTest { } } - db = sqlCipher.writableDatabase + db = sqlCipher.myWritableDatabase messageTable = MessageTable(ApplicationProvider.getApplicationContext(), sqlCipher) } diff --git a/app/src/test/java/org/thoughtcrime/securesms/testing/ProxySQLCipherOpenHelper.kt b/app/src/test/java/org/thoughtcrime/securesms/testing/ProxySQLCipherOpenHelper.kt index bc87d76bad..7fb2d5d11a 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/testing/ProxySQLCipherOpenHelper.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/testing/ProxySQLCipherOpenHelper.kt @@ -13,8 +13,8 @@ import net.zetetic.database.sqlcipher.SQLiteDatabase as SQLCipherSQLiteDatabase */ class ProxySQLCipherOpenHelper( context: Application, - val readableDatabase: AndroidSQLiteDatabase, - val writableDatabase: AndroidSQLiteDatabase + val myReadableDatabase: AndroidSQLiteDatabase, + val myWritableDatabase: AndroidSQLiteDatabase ) : SignalDatabase(context, DatabaseSecret(ByteArray(32).apply { SecureRandom().nextBytes(this) }), AttachmentSecret()) { constructor(context: Application, testOpenHelper: TestSQLiteOpenHelper) : this(context, testOpenHelper.readableDatabase, testOpenHelper.writableDatabase) @@ -23,9 +23,8 @@ class ProxySQLCipherOpenHelper( throw UnsupportedOperationException() } - override fun getDatabaseName(): String { - throw UnsupportedOperationException() - } + override val databaseName: String + get() = throw UnsupportedOperationException() override fun setWriteAheadLoggingEnabled(enabled: Boolean) { throw UnsupportedOperationException() @@ -55,13 +54,11 @@ class ProxySQLCipherOpenHelper( throw UnsupportedOperationException() } - override fun getReadableDatabase(): SQLCipherSQLiteDatabase { - throw UnsupportedOperationException() - } + override val readableDatabase: SQLCipherSQLiteDatabase + get() = throw UnsupportedOperationException() - override fun getWritableDatabase(): SQLCipherSQLiteDatabase { - throw UnsupportedOperationException() - } + override val writableDatabase: SQLCipherSQLiteDatabase + get() = throw UnsupportedOperationException() override val rawReadableDatabase: net.zetetic.database.sqlcipher.SQLiteDatabase get() = throw UnsupportedOperationException() @@ -70,10 +67,10 @@ class ProxySQLCipherOpenHelper( get() = throw UnsupportedOperationException() override val signalReadableDatabase: org.thoughtcrime.securesms.database.SQLiteDatabase - get() = ProxySignalSQLiteDatabase(readableDatabase) + get() = ProxySignalSQLiteDatabase(myReadableDatabase) override val signalWritableDatabase: org.thoughtcrime.securesms.database.SQLiteDatabase - get() = ProxySignalSQLiteDatabase(writableDatabase) + get() = ProxySignalSQLiteDatabase(myWritableDatabase) 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/ProxySignalSQLiteDatabase.kt index 5c6cbceb3f..63800cf9f9 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/testing/ProxySignalSQLiteDatabase.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/testing/ProxySignalSQLiteDatabase.kt @@ -51,7 +51,7 @@ class ProxySignalSQLiteDatabase(private val database: AndroidSQLiteDatabase) : S return database.queryWithFactory(null, distinct, table, columns, selection, selectionArgs, groupBy, having, orderBy, limit) } - override fun query(query: SupportSQLiteQuery): Cursor? { + override fun query(query: SupportSQLiteQuery): Cursor { val converted = query.toAndroidQuery() return database.rawQuery(converted.where, converted.whereArgs) } @@ -112,7 +112,7 @@ class ProxySignalSQLiteDatabase(private val database: AndroidSQLiteDatabase) : S return database.updateWithOnConflict(table, values, whereClause, whereArgs, conflictAlgorithm) } - override fun execSQL(sql: String?) { + override fun execSQL(sql: String) { database.execSQL(sql) } @@ -120,7 +120,7 @@ class ProxySignalSQLiteDatabase(private val database: AndroidSQLiteDatabase) : S database.execSQL(sql) } - override fun execSQL(sql: String, bindArgs: Array) { + override fun execSQL(sql: String, bindArgs: Array) { database.execSQL(sql, bindArgs) } @@ -132,9 +132,8 @@ class ProxySignalSQLiteDatabase(private val database: AndroidSQLiteDatabase) : S throw UnsupportedOperationException() } - override fun isWriteAheadLoggingEnabled(): Boolean { - throw UnsupportedOperationException() - } + override val isWriteAheadLoggingEnabled: Boolean + get() = throw UnsupportedOperationException() override fun setForeignKeyConstraintsEnabled(enable: Boolean) { database.setForeignKeyConstraintsEnabled(enable) @@ -180,9 +179,8 @@ class ProxySignalSQLiteDatabase(private val database: AndroidSQLiteDatabase) : S return database.inTransaction() } - override fun isDbLockedByCurrentThread(): Boolean { - return database.isDbLockedByCurrentThread - } + override val isDbLockedByCurrentThread: Boolean + get() = database.isDbLockedByCurrentThread @Suppress("DEPRECATION") override fun isDbLockedByOtherThreads(): Boolean { @@ -197,47 +195,40 @@ class ProxySignalSQLiteDatabase(private val database: AndroidSQLiteDatabase) : S return database.yieldIfContendedSafely(sleepAfterYieldDelay) } - override fun getVersion(): Int { - return database.version - } + override var version: Int + get() = database.version + set(value) { + database.version = version + } - override fun setVersion(version: Int) { - database.version = version - } - - override fun getMaximumSize(): Long { - return database.maximumSize - } + override val maximumSize: Long + get() = database.maximumSize override fun setMaximumSize(numBytes: Long): Long { return database.setMaximumSize(numBytes) } - override fun getPageSize(): Long { - return database.pageSize - } + override var pageSize: Long + get() = database.pageSize + set(value) { + database.pageSize = value + } - override fun setPageSize(numBytes: Long) { - database.pageSize = numBytes - } - - override fun compileStatement(sql: String?): SQLCipherSQLiteStatement { + override fun compileStatement(sql: String): SQLCipherSQLiteStatement { throw UnsupportedOperationException() } - override fun isReadOnly(): Boolean { - return database.isReadOnly - } + override val isReadOnly: Boolean + get() = database.isReadOnly - override fun isOpen(): Boolean { - return database.isOpen - } + override val isOpen: Boolean + get() = database.isOpen override fun needUpgrade(newVersion: Int): Boolean { return database.needUpgrade(newVersion) } - override fun setLocale(locale: Locale?) { + override fun setLocale(locale: Locale) { database.setLocale(locale) } } diff --git a/core-util/src/main/java/org/signal/core/util/SQLiteDatabaseExtensions.kt b/core-util/src/main/java/org/signal/core/util/SQLiteDatabaseExtensions.kt index a68afc5d12..37428ee90b 100644 --- a/core-util/src/main/java/org/signal/core/util/SQLiteDatabaseExtensions.kt +++ b/core-util/src/main/java/org/signal/core/util/SQLiteDatabaseExtensions.kt @@ -120,7 +120,7 @@ fun SupportSQLiteDatabase.getForeignKeys(): List { } fun SupportSQLiteDatabase.areForeignKeyConstraintsEnabled(): Boolean { - return this.query("PRAGMA foreign_keys", null).use { cursor -> + return this.query("PRAGMA foreign_keys", arrayOf()).use { cursor -> cursor.moveToFirst() && cursor.getInt(0) != 0 } } @@ -508,7 +508,7 @@ class ExistsBuilderPart1( } fun run(): Boolean { - return db.query("SELECT EXISTS(SELECT 1 FROM $tableName)", null).use { cursor -> + return db.query("SELECT EXISTS(SELECT 1 FROM $tableName)", arrayOf()).use { cursor -> cursor.moveToFirst() && cursor.getInt(0) == 1 } } diff --git a/core-util/src/main/java/org/signal/core/util/SqlUtil.kt b/core-util/src/main/java/org/signal/core/util/SqlUtil.kt index 8b7d9ab101..626bd14c02 100644 --- a/core-util/src/main/java/org/signal/core/util/SqlUtil.kt +++ b/core-util/src/main/java/org/signal/core/util/SqlUtil.kt @@ -43,7 +43,7 @@ object SqlUtil { * IMPORTANT: Due to how connection pooling is handled in the app, the only way to have this return useful numbers is to call it within a transaction. */ fun getTotalChanges(db: SupportSQLiteDatabase): Long { - return db.query("SELECT total_changes()", null).readToSingleLong() + return db.query("SELECT total_changes()", arrayOf()).readToSingleLong() } @JvmStatic @@ -120,7 +120,7 @@ object SqlUtil { @JvmStatic fun isEmpty(db: SupportSQLiteDatabase, table: String): Boolean { - db.query("SELECT COUNT(*) FROM $table", null).use { cursor -> + db.query("SELECT COUNT(*) FROM $table", arrayOf()).use { cursor -> return if (cursor.moveToFirst()) { cursor.getInt(0) == 0 } else { @@ -131,7 +131,7 @@ object SqlUtil { @JvmStatic fun columnExists(db: SupportSQLiteDatabase, table: String, column: String): Boolean { - db.query("PRAGMA table_info($table)", null).use { cursor -> + db.query("PRAGMA table_info($table)", arrayOf()).use { cursor -> val nameColumnIndex = cursor.getColumnIndexOrThrow("name") while (cursor.moveToNext()) { val name = cursor.getString(nameColumnIndex) diff --git a/core-util/src/main/java/org/signal/core/util/SupportSQLiteQueryExtensions.kt b/core-util/src/main/java/org/signal/core/util/SupportSQLiteQueryExtensions.kt index 62b0a78ec5..0150493d90 100644 --- a/core-util/src/main/java/org/signal/core/util/SupportSQLiteQueryExtensions.kt +++ b/core-util/src/main/java/org/signal/core/util/SupportSQLiteQueryExtensions.kt @@ -31,11 +31,11 @@ private class CapturingSqliteProgram(count: Int) : SupportSQLiteProgram { args[index - 1] = value.toString() } - override fun bindString(index: Int, value: String?) { + override fun bindString(index: Int, value: String) { args[index - 1] = value } - override fun bindBlob(index: Int, value: ByteArray?) { + override fun bindBlob(index: Int, value: ByteArray) { throw UnsupportedOperationException() } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e6747d7749..da32401bdb 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,7 +7,7 @@ androidx-activity = "1.9.3" androidx-camera = "1.4.1" androidx-fragment = "1.8.5" androidx-lifecycle = "2.8.7" -androidx-media3 = "1.3.1" +androidx-media3 = "1.5.1" androidx-navigation = "2.8.5" androidx-window = "1.3.0" glide = "4.15.1" @@ -36,23 +36,23 @@ compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = " gradle = { module = "com.android.tools.build:gradle", version.ref = "gradle" } android-library = { module = "com.android.library:com.android.library.gradle.plugin", version.ref = "android-gradle-plugin" } android-application = { module = "com.android.application:com.android.application.gradle.plugin", version.ref = "android-gradle-plugin" } -androidx-benchmark-gradle-plugin = "androidx.benchmark:benchmark-gradle-plugin:1.1.0-beta04" +androidx-benchmark-gradle-plugin = "androidx.benchmark:benchmark-gradle-plugin:1.3.3" # Compose -androidx-compose-bom = "androidx.compose:compose-bom:2024.09.00" +androidx-compose-bom = "androidx.compose:compose-bom:2024.12.01" androidx-compose-material3 = { module = "androidx.compose.material3:material3" } androidx-compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" } androidx-compose-ui-tooling-core = { module = "androidx.compose.ui:ui-tooling" } androidx-compose-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest" } androidx-compose-runtime-livedata = { module = "androidx.compose.runtime:runtime-livedata" } -androidx-compose-rxjava3 = "androidx.compose.runtime:runtime-rxjava3:1.4.2" +androidx-compose-rxjava3 = "androidx.compose.runtime:runtime-rxjava3:1.7.6" # Accompanist accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist" } accompanist-drawablepainter = "com.google.accompanist:accompanist-drawablepainter:0.36.0" # Desugaring -android-tools-desugar = "com.android.tools:desugar_jdk_libs:1.1.6" +android-tools-desugar = "com.android.tools:desugar_jdk_libs:2.1.3" # Kotlin kotlin-stdlib-jdk8 = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" } @@ -60,27 +60,27 @@ kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlinx-coroutines-core = "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0" kotlinx-coroutines-core-jvm = "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.9.0" -kotlinx-coroutines-play-services = "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.8.1" -kotlinx-coroutines-rx3 = "org.jetbrains.kotlinx:kotlinx-coroutines-rx3:1.3.9" +kotlinx-coroutines-play-services = "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.9.0" +kotlinx-coroutines-rx3 = "org.jetbrains.kotlinx:kotlinx-coroutines-rx3:1.9.0" ktlint = { module = "org.jlleitschuh.gradle:ktlint-gradle", version.ref = "ktlint" } ktlint-twitter-compose = "com.twitter.compose.rules:ktlint:0.0.26" # Android X androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity" } androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat" } -androidx-core-ktx = "androidx.core:core-ktx:1.12.0" +androidx-core-ktx = "androidx.core:core-ktx:1.15.0" androidx-fragment-ktx = { module = "androidx.fragment:fragment-ktx", version.ref = "androidx-fragment" } androidx-fragment-testing = { module = "androidx.fragment:fragment-testing", version.ref = "androidx-fragment" } -androidx-annotation = "androidx.annotation:annotation:1.4.0" -androidx-constraintlayout = "androidx.constraintlayout:constraintlayout:2.1.4" +androidx-annotation = "androidx.annotation:annotation:1.9.1" +androidx-constraintlayout = "androidx.constraintlayout:constraintlayout:2.2.0" androidx-window-window = { module = "androidx.window:window", version.ref = "androidx-window" } androidx-window-java = { module = "androidx.window:window-java", version.ref = "androidx-window" } -androidx-recyclerview = "androidx.recyclerview:recyclerview:1.3.1" +androidx-recyclerview = "androidx.recyclerview:recyclerview:1.3.2" androidx-legacy-support = "androidx.legacy:legacy-support-v13:1.0.0" androidx-legacy-preference = "androidx.legacy:legacy-preference-v14:1.0.0" -androidx-preference = "androidx.preference:preference:1.0.0" +androidx-preference = "androidx.preference:preference:1.2.1" androidx-gridlayout = "androidx.gridlayout:gridlayout:1.0.0" -androidx-exifinterface = "androidx.exifinterface:exifinterface:1.3.3" +androidx-exifinterface = "androidx.exifinterface:exifinterface:1.3.7" androidx-media3-exoplayer = { module = "androidx.media3:media3-exoplayer", version.ref = "androidx-media3" } androidx-media3-session = { module = "androidx.media3:media3-session", version.ref = "androidx-media3" } androidx-media3-ui = { module = "androidx.media3:media3-ui", version.ref = "androidx-media3" } @@ -101,36 +101,36 @@ androidx-camera-camera2 = { module = "androidx.camera:camera-camera2", version.r androidx-camera-extensions = { module = "androidx.camera:camera-extensions", version.ref = "androidx-camera" } androidx-camera-lifecycle = { module = "androidx.camera:camera-lifecycle", version.ref = "androidx-camera" } androidx-camera-view = { module = "androidx.camera:camera-view", version.ref = "androidx-camera" } -androidx-concurrent-futures = "androidx.concurrent:concurrent-futures:1.0.0" -androidx-autofill = "androidx.autofill:autofill:1.0.0" +androidx-concurrent-futures = "androidx.concurrent:concurrent-futures:1.2.0" +androidx-autofill = "androidx.autofill:autofill:1.1.0" androidx-biometric = "androidx.biometric:biometric:1.1.0" -androidx-sharetarget = "androidx.sharetarget:sharetarget:1.2.0-rc02" -androidx-sqlite = "androidx.sqlite:sqlite:2.1.0" -androidx-profileinstaller = "androidx.profileinstaller:profileinstaller:1.2.2" +androidx-sharetarget = "androidx.sharetarget:sharetarget:1.2.0" +androidx-sqlite = "androidx.sqlite:sqlite: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" -androidx-emoji2 = "androidx.emoji2:emoji2:1.4.0" -androidx-documentfile = "androidx.documentfile:documentfile:1.0.0" -android-billing = "com.android.billingclient:billing-ktx:7.0.0" +androidx-emoji2 = "androidx.emoji2:emoji2:1.5.0" +androidx-documentfile = "androidx.documentfile:documentfile:1.0.1" +android-billing = "com.android.billingclient:billing-ktx:7.1.1" # Billing -material-material = "com.google.android.material:material:1.8.0" +material-material = "com.google.android.material:material:1.12.0" # Google google-libphonenumber = "com.googlecode.libphonenumber:libphonenumber:8.13.50" -google-play-services-maps = "com.google.android.gms:play-services-maps:18.2.0" -google-play-services-auth = "com.google.android.gms:play-services-auth:21.0.0" -google-play-services-wallet = "com.google.android.gms:play-services-wallet:19.2.1" +google-play-services-maps = "com.google.android.gms:play-services-maps:19.0.0" +google-play-services-auth = "com.google.android.gms:play-services-auth:21.3.0" +google-play-services-wallet = "com.google.android.gms:play-services-wallet:19.4.0" google-zxing-android-integration = "com.google.zxing:android-integration:3.3.0" google-zxing-core = "com.google.zxing:core:3.4.1" google-ez-vcard = "com.googlecode.ez-vcard:ez-vcard:0.9.11" google-jsr305 = "com.google.code.findbugs:jsr305:3.0.2" -google-guava-android = "com.google.guava:guava:30.0-android" +google-guava-android = "com.google.guava:guava:33.3.1-android" google-flexbox = "com.google.android.flexbox:flexbox:3.0.0" com-google-devtools-ksp-gradle-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.1.0-1.0.29" # Firebase -firebase-messaging = "com.google.firebase:firebase-messaging:23.1.2" +firebase-messaging = "com.google.firebase:firebase-messaging:24.1.0" # 1st Party libsignal-client = { module = "org.signal:libsignal-client", version.ref = "libsignal-client" } @@ -142,10 +142,10 @@ signal-android-database-sqlcipher = "org.signal:sqlcipher-android:4.6.0-S1" # Third Party greenrobot-eventbus = "org.greenrobot:eventbus:3.0.0" -jackson-core = "com.fasterxml.jackson.core:jackson-databind:2.9.9.2" +jackson-core = "com.fasterxml.jackson.core:jackson-databind:2.12.0" jackson-module-kotlin = "com.fasterxml.jackson.module:jackson-module-kotlin:2.12.0" square-okhttp3 = "com.squareup.okhttp3:okhttp:4.12.0" -square-okio = "com.squareup.okio:okio:3.6.0" +square-okio = "com.squareup.okio:okio:3.9.0" square-leakcanary = "com.squareup.leakcanary:leakcanary-android:2.7" rxjava3-rxjava = "io.reactivex.rxjava3:rxjava:3.0.13" rxjava3-rxandroid = "io.reactivex.rxjava3:rxandroid:3.0.0" @@ -162,7 +162,7 @@ materialish-progress = "com.pnikosis:materialish-progress:1.7" subsampling-scale-image-view = "com.davemorrissey.labs:subsampling-scale-image-view-androidx:3.10.0" android-tooltips = "com.tomergoldst.android:tooltips:1.0.6" stream = "com.annimon:stream:1.1.8" -lottie = "com.airbnb.android:lottie:5.2.0" +lottie = "com.airbnb.android:lottie:6.4.0" lottie-compose = "com.airbnb.android:lottie-compose:6.4.0" dnsjava = "dnsjava:dnsjava:2.1.9" nanohttpd-webserver = { module = "org.nanohttpd:nanohttpd-webserver", version.ref = "nanohttpd" } diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 15f9464f77..9e2d0486ab 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -23,6 +23,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -33,6 +38,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -181,6 +191,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -249,6 +267,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -286,6 +312,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -338,6 +369,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -362,6 +401,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -557,6 +604,16 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + @@ -597,6 +654,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -613,6 +678,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -629,6 +702,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -645,6 +726,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -661,6 +750,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -677,6 +774,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -703,6 +808,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -719,6 +832,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -735,6 +856,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -759,6 +888,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -775,6 +912,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -791,11 +936,24 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + @@ -804,6 +962,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -812,6 +978,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -820,6 +994,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -828,6 +1010,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -836,6 +1026,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -844,6 +1042,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -852,6 +1058,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -860,6 +1074,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -868,6 +1090,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -876,6 +1106,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -907,6 +1145,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -931,6 +1177,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -947,6 +1201,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -968,6 +1230,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -989,6 +1259,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1020,6 +1298,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1044,6 +1330,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1060,6 +1354,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1081,6 +1383,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1097,6 +1407,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1121,6 +1439,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1137,6 +1463,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1153,6 +1487,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1169,6 +1511,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1185,6 +1535,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1201,6 +1559,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1209,6 +1575,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1217,6 +1591,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1233,6 +1615,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1249,6 +1639,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1265,6 +1663,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1278,6 +1684,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1294,6 +1708,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1307,6 +1729,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1323,6 +1753,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1339,6 +1777,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1355,6 +1801,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1368,6 +1822,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1384,6 +1846,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1400,6 +1870,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1416,6 +1894,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1432,6 +1918,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1448,6 +1942,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1464,6 +1966,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1480,6 +1990,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1496,6 +2014,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1504,6 +2030,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1512,6 +2046,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1520,6 +2062,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1528,6 +2078,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1562,6 +2120,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1599,6 +2165,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1699,6 +2273,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1738,6 +2317,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1762,6 +2349,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1786,11 +2381,24 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + @@ -1903,6 +2511,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -2285,6 +2898,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -2552,6 +3170,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -3185,6 +3808,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -3214,6 +3845,22 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + + + + @@ -3243,6 +3890,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -3275,6 +3930,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -3296,6 +3956,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -3330,6 +3998,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -3338,6 +4014,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -3535,6 +4219,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -3733,11 +4425,21 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + @@ -3803,11 +4505,21 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + @@ -5204,16 +5916,31 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + + + @@ -5227,6 +5954,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -5247,6 +5979,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -5262,11 +5999,21 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + @@ -5277,6 +6024,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -5292,6 +6044,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -5317,11 +6074,29 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + + + + + + @@ -5511,16 +6286,36 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + + + + + + + + @@ -5546,16 +6341,31 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + + + @@ -6158,6 +6968,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -6179,6 +6997,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -7625,6 +8451,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + +