Update more libraries.

This commit is contained in:
Greyson Parrelli 2024-12-20 21:24:45 -05:00
parent 71d7238f3b
commit 31897b4c4b
21 changed files with 926 additions and 108 deletions

View file

@ -291,7 +291,7 @@ class RemoteBackupsSettingsFragment : ComposeFragment() {
private inner class AuthListener : BiometricPrompt.AuthenticationCallback() { private inner class AuthListener : BiometricPrompt.AuthenticationCallback() {
override fun onAuthenticationFailed() { override fun onAuthenticationFailed() {
Log.w(TAG, "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) { override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {

View file

@ -455,7 +455,7 @@ class CallLinkTable(context: Context, databaseHelper: SignalDatabase) : Database
$limitOffset $limitOffset
""".trimIndent() """.trimIndent()
return readableDatabase.query(statement, searchFilter?.whereArgs) return readableDatabase.query(statement, searchFilter?.whereArgs ?: arrayOf())
} }
private object CallLinkSerializer : Serializer<CallLink, ContentValues> { private object CallLinkSerializer : Serializer<CallLink, ContentValues> {

View file

@ -190,28 +190,26 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data
Log.i(TAG, "Upgrade complete. Took " + (System.currentTimeMillis() - startTime) + " ms.") Log.i(TAG, "Upgrade complete. Took " + (System.currentTimeMillis() - startTime) + " ms.")
} }
override fun getReadableDatabase(): net.zetetic.database.sqlcipher.SQLiteDatabase { override val readableDatabase: net.zetetic.database.sqlcipher.SQLiteDatabase
throw UnsupportedOperationException("Call getSignalReadableDatabase() instead!") get() = throw UnsupportedOperationException("Call getSignalReadableDatabase() instead!")
}
override fun getWritableDatabase(): net.zetetic.database.sqlcipher.SQLiteDatabase { override val writableDatabase: net.zetetic.database.sqlcipher.SQLiteDatabase
throw UnsupportedOperationException("Call getSignalWritableDatabase() instead!") get() = throw UnsupportedOperationException("Call getSignalWritableDatabase() instead!")
}
open val rawReadableDatabase: net.zetetic.database.sqlcipher.SQLiteDatabase open val rawReadableDatabase: net.zetetic.database.sqlcipher.SQLiteDatabase
get() = super.getReadableDatabase() get() = super.readableDatabase
open val rawWritableDatabase: net.zetetic.database.sqlcipher.SQLiteDatabase open val rawWritableDatabase: net.zetetic.database.sqlcipher.SQLiteDatabase
get() = super.getWritableDatabase() get() = super.writableDatabase
open val signalReadableDatabase: SQLiteDatabase open val signalReadableDatabase: SQLiteDatabase
get() = SQLiteDatabase(super.getReadableDatabase()) get() = SQLiteDatabase(super.readableDatabase)
open val signalWritableDatabase: SQLiteDatabase open val signalWritableDatabase: SQLiteDatabase
get() = SQLiteDatabase(super.getWritableDatabase()) get() = SQLiteDatabase(super.writableDatabase)
override fun getSqlCipherDatabase(): net.zetetic.database.sqlcipher.SQLiteDatabase { override fun getSqlCipherDatabase(): net.zetetic.database.sqlcipher.SQLiteDatabase {
return super.getWritableDatabase() return super.writableDatabase
} }
open fun markCurrent(db: net.zetetic.database.sqlcipher.SQLiteDatabase) { 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.setForeignKeyConstraintsEnabled(false)
database.beginTransaction() database.beginTransaction()
try { try {
instance!!.onUpgrade(database, database.getVersion(), -1) instance!!.onUpgrade(database, database.version, -1)
instance!!.markCurrent(database) instance!!.markCurrent(database)
instance!!.messageTable.deleteAbandonedMessages() instance!!.messageTable.deleteAbandonedMessages()
instance!!.messageTable.trimEntriesForExpiredMessages() instance!!.messageTable.trimEntriesForExpiredMessages()

View file

@ -8,5 +8,4 @@ import net.zetetic.database.sqlcipher.SQLiteDatabase;
*/ */
public interface SignalDatabaseOpenHelper { public interface SignalDatabaseOpenHelper {
SQLiteDatabase getSqlCipherDatabase(); SQLiteDatabase getSqlCipherDatabase();
String getDatabaseName();
} }

View file

@ -22,7 +22,7 @@ object V162_ThreadUnreadSelfMentionCountFixup : SignalDatabaseMigration {
@Suppress("SameParameterValue") @Suppress("SameParameterValue")
private fun columnMissing(db: SupportSQLiteDatabase, table: String, column: String): Boolean { 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") val nameColumnIndex = cursor.getColumnIndexOrThrow("name")
while (cursor.moveToNext()) { while (cursor.moveToNext()) {
val name = cursor.getString(nameColumnIndex) val name = cursor.getString(nameColumnIndex)

View file

@ -28,7 +28,7 @@ object V163_RemoteMegaphoneSnoozeSupportMigration : SignalDatabaseMigration {
} }
private fun columnMissing(db: SupportSQLiteDatabase, column: String): Boolean { 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") val nameColumnIndex = cursor.getColumnIndexOrThrow("name")
while (cursor.moveToNext()) { while (cursor.moveToNext()) {
val name = cursor.getString(nameColumnIndex) val name = cursor.getString(nameColumnIndex)

View file

@ -63,7 +63,7 @@ object V186_ForeignKeyIndicesMigration : SignalDatabaseMigration {
} }
private fun columnExists(db: SQLiteDatabase, table: String, column: String): Boolean { 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") } .readToList { it.requireNonNullString("name") }
.any { it == column } .any { it == column }
} }

View file

@ -342,7 +342,7 @@ object V188_FixMessageRecipientsAndEditMessageMigration : SignalDatabaseMigratio
} }
private fun columnExists(db: SQLiteDatabase, table: String, column: String): Boolean { 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") } .readToList { it.requireNonNullString("name") }
.any { it == column } .any { it == column }
} }

View file

@ -26,7 +26,7 @@ object V203_PreKeyStaleTimestamp : SignalDatabaseMigration {
} }
private fun columnExists(db: SupportSQLiteDatabase, table: String, column: String): Boolean { 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") val nameColumnIndex = cursor.getColumnIndexOrThrow("name")
while (cursor.moveToNext()) { while (cursor.moveToNext()) {
val name = cursor.getString(nameColumnIndex) val name = cursor.getString(nameColumnIndex)

View file

@ -7663,6 +7663,8 @@
<!-- RemoteBackupsSettingsFragment --> <!-- RemoteBackupsSettingsFragment -->
<!-- Displayed on the title bar --> <!-- Displayed on the title bar -->
<string name="RemoteBackupsSettingsFragment__signal_backups">Signal Backups</string> <string name="RemoteBackupsSettingsFragment__signal_backups">Signal Backups</string>
<!-- Text shown in a popup indicating that the user needs to enter their screen lock -->
<string name="RemoteBackupsSettingsFragment__authenticatino_required">Authentication required</string>
<!-- Row label to launch payment history screen --> <!-- Row label to launch payment history screen -->
<string name="RemoteBackupsSettingsFragment__payment_history">Payment history</string> <string name="RemoteBackupsSettingsFragment__payment_history">Payment history</string>
<!-- Section header for backup information --> <!-- Section header for backup information -->

View file

@ -28,7 +28,7 @@ class MmsDatabaseTest {
execSQL(MessageTable.CREATE_TABLE) execSQL(MessageTable.CREATE_TABLE)
} }
db = sqlCipher.writableDatabase db = sqlCipher.myWritableDatabase
messageTable = MessageTable(ApplicationProvider.getApplicationContext(), sqlCipher) messageTable = MessageTable(ApplicationProvider.getApplicationContext(), sqlCipher)
} }

View file

@ -27,7 +27,7 @@ class MmsSmsDatabaseTest {
MessageTable.CREATE_INDEXS.forEach { execSQL(it) } MessageTable.CREATE_INDEXS.forEach { execSQL(it) }
} }
db = sqlCipher.writableDatabase db = sqlCipher.myWritableDatabase
messageTable = MessageTable(ApplicationProvider.getApplicationContext(), sqlCipher) messageTable = MessageTable(ApplicationProvider.getApplicationContext(), sqlCipher)
} }

View file

@ -45,7 +45,7 @@ class NotificationProfileTablesTest {
} }
} }
db = sqlCipher.writableDatabase db = sqlCipher.myWritableDatabase
database = NotificationProfileTables(ApplicationProvider.getApplicationContext(), sqlCipher) database = NotificationProfileTables(ApplicationProvider.getApplicationContext(), sqlCipher)
} }

View file

@ -31,7 +31,7 @@ class SmsDatabaseTest {
} }
} }
db = sqlCipher.writableDatabase db = sqlCipher.myWritableDatabase
messageTable = MessageTable(ApplicationProvider.getApplicationContext(), sqlCipher) messageTable = MessageTable(ApplicationProvider.getApplicationContext(), sqlCipher)
} }

View file

@ -13,8 +13,8 @@ import net.zetetic.database.sqlcipher.SQLiteDatabase as SQLCipherSQLiteDatabase
*/ */
class ProxySQLCipherOpenHelper( class ProxySQLCipherOpenHelper(
context: Application, context: Application,
val readableDatabase: AndroidSQLiteDatabase, val myReadableDatabase: AndroidSQLiteDatabase,
val writableDatabase: AndroidSQLiteDatabase val myWritableDatabase: AndroidSQLiteDatabase
) : SignalDatabase(context, DatabaseSecret(ByteArray(32).apply { SecureRandom().nextBytes(this) }), AttachmentSecret()) { ) : 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: TestSQLiteOpenHelper) : this(context, testOpenHelper.readableDatabase, testOpenHelper.writableDatabase)
@ -23,9 +23,8 @@ class ProxySQLCipherOpenHelper(
throw UnsupportedOperationException() throw UnsupportedOperationException()
} }
override fun getDatabaseName(): String { override val databaseName: String
throw UnsupportedOperationException() get() = throw UnsupportedOperationException()
}
override fun setWriteAheadLoggingEnabled(enabled: Boolean) { override fun setWriteAheadLoggingEnabled(enabled: Boolean) {
throw UnsupportedOperationException() throw UnsupportedOperationException()
@ -55,13 +54,11 @@ class ProxySQLCipherOpenHelper(
throw UnsupportedOperationException() throw UnsupportedOperationException()
} }
override fun getReadableDatabase(): SQLCipherSQLiteDatabase { override val readableDatabase: SQLCipherSQLiteDatabase
throw UnsupportedOperationException() get() = throw UnsupportedOperationException()
}
override fun getWritableDatabase(): SQLCipherSQLiteDatabase { override val writableDatabase: SQLCipherSQLiteDatabase
throw UnsupportedOperationException() get() = throw UnsupportedOperationException()
}
override val rawReadableDatabase: net.zetetic.database.sqlcipher.SQLiteDatabase override val rawReadableDatabase: net.zetetic.database.sqlcipher.SQLiteDatabase
get() = throw UnsupportedOperationException() get() = throw UnsupportedOperationException()
@ -70,10 +67,10 @@ class ProxySQLCipherOpenHelper(
get() = throw UnsupportedOperationException() get() = throw UnsupportedOperationException()
override val signalReadableDatabase: org.thoughtcrime.securesms.database.SQLiteDatabase override val signalReadableDatabase: org.thoughtcrime.securesms.database.SQLiteDatabase
get() = ProxySignalSQLiteDatabase(readableDatabase) get() = ProxySignalSQLiteDatabase(myReadableDatabase)
override val signalWritableDatabase: org.thoughtcrime.securesms.database.SQLiteDatabase override val signalWritableDatabase: org.thoughtcrime.securesms.database.SQLiteDatabase
get() = ProxySignalSQLiteDatabase(writableDatabase) get() = ProxySignalSQLiteDatabase(myWritableDatabase)
override fun getSqlCipherDatabase(): SQLCipherSQLiteDatabase { override fun getSqlCipherDatabase(): SQLCipherSQLiteDatabase {
throw UnsupportedOperationException() throw UnsupportedOperationException()

View file

@ -51,7 +51,7 @@ class ProxySignalSQLiteDatabase(private val database: AndroidSQLiteDatabase) : S
return database.queryWithFactory(null, distinct, table, columns, selection, selectionArgs, groupBy, having, orderBy, limit) 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() val converted = query.toAndroidQuery()
return database.rawQuery(converted.where, converted.whereArgs) 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) return database.updateWithOnConflict(table, values, whereClause, whereArgs, conflictAlgorithm)
} }
override fun execSQL(sql: String?) { override fun execSQL(sql: String) {
database.execSQL(sql) database.execSQL(sql)
} }
@ -120,7 +120,7 @@ class ProxySignalSQLiteDatabase(private val database: AndroidSQLiteDatabase) : S
database.execSQL(sql) database.execSQL(sql)
} }
override fun execSQL(sql: String, bindArgs: Array<out Any>) { override fun execSQL(sql: String, bindArgs: Array<out Any?>) {
database.execSQL(sql, bindArgs) database.execSQL(sql, bindArgs)
} }
@ -132,9 +132,8 @@ class ProxySignalSQLiteDatabase(private val database: AndroidSQLiteDatabase) : S
throw UnsupportedOperationException() throw UnsupportedOperationException()
} }
override fun isWriteAheadLoggingEnabled(): Boolean { override val isWriteAheadLoggingEnabled: Boolean
throw UnsupportedOperationException() get() = throw UnsupportedOperationException()
}
override fun setForeignKeyConstraintsEnabled(enable: Boolean) { override fun setForeignKeyConstraintsEnabled(enable: Boolean) {
database.setForeignKeyConstraintsEnabled(enable) database.setForeignKeyConstraintsEnabled(enable)
@ -180,9 +179,8 @@ class ProxySignalSQLiteDatabase(private val database: AndroidSQLiteDatabase) : S
return database.inTransaction() return database.inTransaction()
} }
override fun isDbLockedByCurrentThread(): Boolean { override val isDbLockedByCurrentThread: Boolean
return database.isDbLockedByCurrentThread get() = database.isDbLockedByCurrentThread
}
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
override fun isDbLockedByOtherThreads(): Boolean { override fun isDbLockedByOtherThreads(): Boolean {
@ -197,47 +195,40 @@ class ProxySignalSQLiteDatabase(private val database: AndroidSQLiteDatabase) : S
return database.yieldIfContendedSafely(sleepAfterYieldDelay) return database.yieldIfContendedSafely(sleepAfterYieldDelay)
} }
override fun getVersion(): Int { override var version: Int
return database.version get() = database.version
} set(value) {
database.version = version
}
override fun setVersion(version: Int) { override val maximumSize: Long
database.version = version get() = database.maximumSize
}
override fun getMaximumSize(): Long {
return database.maximumSize
}
override fun setMaximumSize(numBytes: Long): Long { override fun setMaximumSize(numBytes: Long): Long {
return database.setMaximumSize(numBytes) return database.setMaximumSize(numBytes)
} }
override fun getPageSize(): Long { override var pageSize: Long
return database.pageSize get() = database.pageSize
} set(value) {
database.pageSize = value
}
override fun setPageSize(numBytes: Long) { override fun compileStatement(sql: String): SQLCipherSQLiteStatement {
database.pageSize = numBytes
}
override fun compileStatement(sql: String?): SQLCipherSQLiteStatement {
throw UnsupportedOperationException() throw UnsupportedOperationException()
} }
override fun isReadOnly(): Boolean { override val isReadOnly: Boolean
return database.isReadOnly get() = database.isReadOnly
}
override fun isOpen(): Boolean { override val isOpen: Boolean
return database.isOpen get() = database.isOpen
}
override fun needUpgrade(newVersion: Int): Boolean { override fun needUpgrade(newVersion: Int): Boolean {
return database.needUpgrade(newVersion) return database.needUpgrade(newVersion)
} }
override fun setLocale(locale: Locale?) { override fun setLocale(locale: Locale) {
database.setLocale(locale) database.setLocale(locale)
} }
} }

View file

@ -120,7 +120,7 @@ fun SupportSQLiteDatabase.getForeignKeys(): List<ForeignKeyConstraint> {
} }
fun SupportSQLiteDatabase.areForeignKeyConstraintsEnabled(): Boolean { 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 cursor.moveToFirst() && cursor.getInt(0) != 0
} }
} }
@ -508,7 +508,7 @@ class ExistsBuilderPart1(
} }
fun run(): Boolean { 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 cursor.moveToFirst() && cursor.getInt(0) == 1
} }
} }

View file

@ -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. * 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 { fun getTotalChanges(db: SupportSQLiteDatabase): Long {
return db.query("SELECT total_changes()", null).readToSingleLong() return db.query("SELECT total_changes()", arrayOf()).readToSingleLong()
} }
@JvmStatic @JvmStatic
@ -120,7 +120,7 @@ object SqlUtil {
@JvmStatic @JvmStatic
fun isEmpty(db: SupportSQLiteDatabase, table: String): Boolean { 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()) { return if (cursor.moveToFirst()) {
cursor.getInt(0) == 0 cursor.getInt(0) == 0
} else { } else {
@ -131,7 +131,7 @@ object SqlUtil {
@JvmStatic @JvmStatic
fun columnExists(db: SupportSQLiteDatabase, table: String, column: String): Boolean { 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") val nameColumnIndex = cursor.getColumnIndexOrThrow("name")
while (cursor.moveToNext()) { while (cursor.moveToNext()) {
val name = cursor.getString(nameColumnIndex) val name = cursor.getString(nameColumnIndex)

View file

@ -31,11 +31,11 @@ private class CapturingSqliteProgram(count: Int) : SupportSQLiteProgram {
args[index - 1] = value.toString() args[index - 1] = value.toString()
} }
override fun bindString(index: Int, value: String?) { override fun bindString(index: Int, value: String) {
args[index - 1] = value args[index - 1] = value
} }
override fun bindBlob(index: Int, value: ByteArray?) { override fun bindBlob(index: Int, value: ByteArray) {
throw UnsupportedOperationException() throw UnsupportedOperationException()
} }

View file

@ -7,7 +7,7 @@ androidx-activity = "1.9.3"
androidx-camera = "1.4.1" androidx-camera = "1.4.1"
androidx-fragment = "1.8.5" androidx-fragment = "1.8.5"
androidx-lifecycle = "2.8.7" androidx-lifecycle = "2.8.7"
androidx-media3 = "1.3.1" androidx-media3 = "1.5.1"
androidx-navigation = "2.8.5" androidx-navigation = "2.8.5"
androidx-window = "1.3.0" androidx-window = "1.3.0"
glide = "4.15.1" 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" } 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-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" } 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 # 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-material3 = { module = "androidx.compose.material3:material3" }
androidx-compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" } 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-tooling-core = { module = "androidx.compose.ui:ui-tooling" }
androidx-compose-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest" } androidx-compose-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest" }
androidx-compose-runtime-livedata = { module = "androidx.compose.runtime:runtime-livedata" } 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
accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist" } accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist" }
accompanist-drawablepainter = "com.google.accompanist:accompanist-drawablepainter:0.36.0" accompanist-drawablepainter = "com.google.accompanist:accompanist-drawablepainter:0.36.0"
# Desugaring # 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
kotlin-stdlib-jdk8 = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "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" } 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 = "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-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-play-services = "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.9.0"
kotlinx-coroutines-rx3 = "org.jetbrains.kotlinx:kotlinx-coroutines-rx3:1.3.9" kotlinx-coroutines-rx3 = "org.jetbrains.kotlinx:kotlinx-coroutines-rx3:1.9.0"
ktlint = { module = "org.jlleitschuh.gradle:ktlint-gradle", version.ref = "ktlint" } ktlint = { module = "org.jlleitschuh.gradle:ktlint-gradle", version.ref = "ktlint" }
ktlint-twitter-compose = "com.twitter.compose.rules:ktlint:0.0.26" ktlint-twitter-compose = "com.twitter.compose.rules:ktlint:0.0.26"
# Android X # Android X
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity" }
androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat" } 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-ktx = { module = "androidx.fragment:fragment-ktx", version.ref = "androidx-fragment" }
androidx-fragment-testing = { module = "androidx.fragment:fragment-testing", 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-annotation = "androidx.annotation:annotation:1.9.1"
androidx-constraintlayout = "androidx.constraintlayout:constraintlayout:2.1.4" androidx-constraintlayout = "androidx.constraintlayout:constraintlayout:2.2.0"
androidx-window-window = { module = "androidx.window:window", version.ref = "androidx-window" } androidx-window-window = { module = "androidx.window:window", version.ref = "androidx-window" }
androidx-window-java = { module = "androidx.window:window-java", 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-support = "androidx.legacy:legacy-support-v13:1.0.0"
androidx-legacy-preference = "androidx.legacy:legacy-preference-v14: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-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-exoplayer = { module = "androidx.media3:media3-exoplayer", version.ref = "androidx-media3" }
androidx-media3-session = { module = "androidx.media3:media3-session", 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" } 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-extensions = { module = "androidx.camera:camera-extensions", version.ref = "androidx-camera" }
androidx-camera-lifecycle = { module = "androidx.camera:camera-lifecycle", 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-camera-view = { module = "androidx.camera:camera-view", version.ref = "androidx-camera" }
androidx-concurrent-futures = "androidx.concurrent:concurrent-futures:1.0.0" androidx-concurrent-futures = "androidx.concurrent:concurrent-futures:1.2.0"
androidx-autofill = "androidx.autofill:autofill:1.0.0" androidx-autofill = "androidx.autofill:autofill:1.1.0"
androidx-biometric = "androidx.biometric:biometric:1.1.0" androidx-biometric = "androidx.biometric:biometric:1.1.0"
androidx-sharetarget = "androidx.sharetarget:sharetarget:1.2.0-rc02" androidx-sharetarget = "androidx.sharetarget:sharetarget:1.2.0"
androidx-sqlite = "androidx.sqlite:sqlite:2.1.0" androidx-sqlite = "androidx.sqlite:sqlite:2.4.0"
androidx-profileinstaller = "androidx.profileinstaller:profileinstaller:1.2.2" androidx-profileinstaller = "androidx.profileinstaller:profileinstaller:1.4.1"
androidx-asynclayoutinflater = "androidx.asynclayoutinflater:asynclayoutinflater:1.1.0-alpha01" androidx-asynclayoutinflater = "androidx.asynclayoutinflater:asynclayoutinflater:1.1.0-alpha01"
androidx-asynclayoutinflater-appcompat = "androidx.asynclayoutinflater:asynclayoutinflater-appcompat:1.1.0-alpha01" androidx-asynclayoutinflater-appcompat = "androidx.asynclayoutinflater:asynclayoutinflater-appcompat:1.1.0-alpha01"
androidx-emoji2 = "androidx.emoji2:emoji2:1.4.0" androidx-emoji2 = "androidx.emoji2:emoji2:1.5.0"
androidx-documentfile = "androidx.documentfile:documentfile:1.0.0" androidx-documentfile = "androidx.documentfile:documentfile:1.0.1"
android-billing = "com.android.billingclient:billing-ktx:7.0.0" android-billing = "com.android.billingclient:billing-ktx:7.1.1"
# Billing # Billing
material-material = "com.google.android.material:material:1.8.0" material-material = "com.google.android.material:material:1.12.0"
# Google # Google
google-libphonenumber = "com.googlecode.libphonenumber:libphonenumber:8.13.50" 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-maps = "com.google.android.gms:play-services-maps:19.0.0"
google-play-services-auth = "com.google.android.gms:play-services-auth:21.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.2.1" 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-android-integration = "com.google.zxing:android-integration:3.3.0"
google-zxing-core = "com.google.zxing:core:3.4.1" google-zxing-core = "com.google.zxing:core:3.4.1"
google-ez-vcard = "com.googlecode.ez-vcard:ez-vcard:0.9.11" google-ez-vcard = "com.googlecode.ez-vcard:ez-vcard:0.9.11"
google-jsr305 = "com.google.code.findbugs:jsr305:3.0.2" 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" 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" com-google-devtools-ksp-gradle-plugin = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin:2.1.0-1.0.29"
# Firebase # Firebase
firebase-messaging = "com.google.firebase:firebase-messaging:23.1.2" firebase-messaging = "com.google.firebase:firebase-messaging:24.1.0"
# 1st Party # 1st Party
libsignal-client = { module = "org.signal:libsignal-client", version.ref = "libsignal-client" } 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 # Third Party
greenrobot-eventbus = "org.greenrobot:eventbus:3.0.0" 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" jackson-module-kotlin = "com.fasterxml.jackson.module:jackson-module-kotlin:2.12.0"
square-okhttp3 = "com.squareup.okhttp3:okhttp:4.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" square-leakcanary = "com.squareup.leakcanary:leakcanary-android:2.7"
rxjava3-rxjava = "io.reactivex.rxjava3:rxjava:3.0.13" rxjava3-rxjava = "io.reactivex.rxjava3:rxjava:3.0.13"
rxjava3-rxandroid = "io.reactivex.rxjava3:rxandroid:3.0.0" 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" subsampling-scale-image-view = "com.davemorrissey.labs:subsampling-scale-image-view-androidx:3.10.0"
android-tooltips = "com.tomergoldst.android:tooltips:1.0.6" android-tooltips = "com.tomergoldst.android:tooltips:1.0.6"
stream = "com.annimon:stream:1.1.8" 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" lottie-compose = "com.airbnb.android:lottie-compose:6.4.0"
dnsjava = "dnsjava:dnsjava:2.1.9" dnsjava = "dnsjava:dnsjava:2.1.9"
nanohttpd-webserver = { module = "org.nanohttpd:nanohttpd-webserver", version.ref = "nanohttpd" } nanohttpd-webserver = { module = "org.nanohttpd:nanohttpd-webserver", version.ref = "nanohttpd" }

File diff suppressed because it is too large Load diff