feat: implement device verification flow with new UI components and protocol handling

This commit is contained in:
2026-02-18 04:40:22 +05:00
parent edff3b32c3
commit cacd6dc029
24 changed files with 1645 additions and 195 deletions

View File

@@ -14,8 +14,9 @@ import androidx.sqlite.db.SupportSQLiteDatabase
MessageEntity::class,
DialogEntity::class,
BlacklistEntity::class,
AvatarCacheEntity::class],
version = 11,
AvatarCacheEntity::class,
AccountSyncTimeEntity::class],
version = 12,
exportSchema = false
)
abstract class RosettaDatabase : RoomDatabase() {
@@ -24,6 +25,7 @@ abstract class RosettaDatabase : RoomDatabase() {
abstract fun dialogDao(): DialogDao
abstract fun blacklistDao(): BlacklistDao
abstract fun avatarDao(): AvatarDao
abstract fun syncTimeDao(): SyncTimeDao
companion object {
@Volatile private var INSTANCE: RosettaDatabase? = null
@@ -132,6 +134,20 @@ abstract class RosettaDatabase : RoomDatabase() {
}
}
private val MIGRATION_11_12 =
object : Migration(11, 12) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL(
"""
CREATE TABLE IF NOT EXISTS accounts_sync_times (
account TEXT NOT NULL PRIMARY KEY,
last_sync INTEGER NOT NULL
)
"""
)
}
}
fun getDatabase(context: Context): RosettaDatabase {
return INSTANCE
?: synchronized(this) {
@@ -151,7 +167,8 @@ abstract class RosettaDatabase : RoomDatabase() {
MIGRATION_7_8,
MIGRATION_8_9,
MIGRATION_9_10,
MIGRATION_10_11
MIGRATION_10_11,
MIGRATION_11_12
)
.fallbackToDestructiveMigration() // Для разработки - только
// если миграция не

View File

@@ -0,0 +1,24 @@
package com.rosetta.messenger.database
import androidx.room.ColumnInfo
import androidx.room.Dao
import androidx.room.Entity
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.PrimaryKey
import androidx.room.Query
@Entity(tableName = "accounts_sync_times")
data class AccountSyncTimeEntity(
@PrimaryKey @ColumnInfo(name = "account") val account: String,
@ColumnInfo(name = "last_sync") val lastSync: Long
)
@Dao
interface SyncTimeDao {
@Query("SELECT last_sync FROM accounts_sync_times WHERE account = :account LIMIT 1")
suspend fun getLastSync(account: String): Long?
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun upsert(entity: AccountSyncTimeEntity)
}