Релиз 1.4.7: фиксы lockscreen, звонков и стабильности
This commit is contained in:
@@ -21,6 +21,7 @@ class AccountManager(private val context: Context) {
|
||||
private val IS_LOGGED_IN = booleanPreferencesKey("is_logged_in")
|
||||
private const val PREFS_NAME = "rosetta_account_prefs"
|
||||
private const val KEY_LAST_LOGGED = "last_logged_public_key"
|
||||
private const val KEY_LAST_LOGGED_PRIVATE_HASH = "last_logged_private_hash"
|
||||
}
|
||||
|
||||
// Use SharedPreferences for last logged account - more reliable for immediate reads
|
||||
@@ -43,13 +44,19 @@ class AccountManager(private val context: Context) {
|
||||
val publicKey = sharedPrefs.getString(KEY_LAST_LOGGED, null)
|
||||
return publicKey
|
||||
}
|
||||
|
||||
fun getLastLoggedPrivateKeyHash(): String? {
|
||||
return sharedPrefs.getString(KEY_LAST_LOGGED_PRIVATE_HASH, null)
|
||||
}
|
||||
|
||||
// Synchronous write to SharedPreferences
|
||||
fun setLastLoggedPublicKey(publicKey: String) {
|
||||
val success = sharedPrefs.edit().putString(KEY_LAST_LOGGED, publicKey).commit() // commit() is synchronous
|
||||
|
||||
// Verify immediately
|
||||
val saved = sharedPrefs.getString(KEY_LAST_LOGGED, null)
|
||||
sharedPrefs.edit().putString(KEY_LAST_LOGGED, publicKey).commit() // commit() is synchronous
|
||||
}
|
||||
|
||||
fun setLastLoggedPrivateKeyHash(privateKeyHash: String) {
|
||||
if (privateKeyHash.isBlank()) return
|
||||
sharedPrefs.edit().putString(KEY_LAST_LOGGED_PRIVATE_HASH, privateKeyHash).apply()
|
||||
}
|
||||
|
||||
suspend fun saveAccount(account: EncryptedAccount) {
|
||||
@@ -98,6 +105,7 @@ class AccountManager(private val context: Context) {
|
||||
context.accountDataStore.edit { preferences ->
|
||||
preferences[IS_LOGGED_IN] = false
|
||||
}
|
||||
sharedPrefs.edit().remove(KEY_LAST_LOGGED_PRIVATE_HASH).apply()
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -140,12 +148,21 @@ class AccountManager(private val context: Context) {
|
||||
// Clear SharedPreferences if this was the last logged account
|
||||
val lastLogged = sharedPrefs.getString(KEY_LAST_LOGGED, null)
|
||||
if (lastLogged == publicKey) {
|
||||
sharedPrefs.edit().remove(KEY_LAST_LOGGED).commit()
|
||||
sharedPrefs
|
||||
.edit()
|
||||
.remove(KEY_LAST_LOGGED)
|
||||
.remove(KEY_LAST_LOGGED_PRIVATE_HASH)
|
||||
.commit()
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun clearAll() {
|
||||
context.accountDataStore.edit { it.clear() }
|
||||
sharedPrefs
|
||||
.edit()
|
||||
.remove(KEY_LAST_LOGGED)
|
||||
.remove(KEY_LAST_LOGGED_PRIVATE_HASH)
|
||||
.apply()
|
||||
}
|
||||
|
||||
private fun serializeAccounts(accounts: List<EncryptedAccount>): String {
|
||||
|
||||
@@ -17,16 +17,20 @@ object ReleaseNotes {
|
||||
val RELEASE_NOTICE = """
|
||||
Update v$VERSION_PLACEHOLDER
|
||||
|
||||
Звонки
|
||||
- Android переведён на новый серверный сигналинг звонков: CALL -> ACCEPT -> KEY_EXCHANGE -> ACTIVE
|
||||
- Для звонков добавлена полная поддержка callId/joinToken (в CALL/ACCEPT/END_CALL)
|
||||
- Добавлена обработка RINGING_TIMEOUT с корректным завершением звонка
|
||||
- WebRTC пакет 0x1B обновлён под новый формат сервера (без лишних полей в payload)
|
||||
- Push звонка теперь пробрасывает callId/joinToken в CallManager для стабильного принятия до WebSocket
|
||||
Звонки и lockscreen
|
||||
- MainActivity больше не открывается поверх экрана блокировки: чаты не раскрываются без разблокировки устройства
|
||||
- Во входящем полноэкранном звонке отключено автоматическое снятие keyguard
|
||||
- Исправлено краткое появление "Unknown" при завершении полноэкранного звонка
|
||||
- При принятии звонка из push добавлено восстановление auth из локального кеша и ускорена отправка ACCEPT
|
||||
|
||||
Стабильность
|
||||
- Улучшены диагностические логи звонков (callId/joinToken в state/log)
|
||||
- Обновлена совместимость Android с актуальными версиями desktop и rosetta-wss
|
||||
Сеть и протокол
|
||||
- Добавлено ожидание активной сети перед reconnect (ConnectivityManager callback + timeout fallback)
|
||||
- Разрешена pre-auth отправка call/WebRTC/ICE пакетов после открытия сокета
|
||||
- Очередь исходящих пакетов теперь сбрасывается сразу в onOpen и отправляется state-aware
|
||||
|
||||
Стабильность UI
|
||||
- Crash Details защищён от очень больших логов (без падений при открытии тяжёлых отчётов)
|
||||
- SharedMedia fast-scroll overlay стабилизирован от NaN/Infinity координат
|
||||
""".trimIndent()
|
||||
|
||||
fun getNotice(version: String): String =
|
||||
|
||||
Reference in New Issue
Block a user