Refactor and optimize various components
- Updated RosettaFirebaseMessagingService to use IO dispatcher for blocking calls. - Enhanced AvatarRepository with LRU caching and improved coroutine handling for avatar loading. - Implemented timeout for websocket connection in UnlockScreen. - Added selection mode functionality in ChatsListScreen with haptic feedback and improved UI for chat actions. - Improved animated dots in AttachmentComponents for a smoother visual effect. - Refactored image downloading and caching logic in ChatDetailComponents to streamline the process. - Optimized SwipeBackContainer to simplify gesture handling. - Adjusted swipe back behavior in OtherProfileScreen based on image viewer state.
This commit is contained in:
@@ -57,8 +57,11 @@ import com.rosetta.messenger.ui.theme.RosettaAndroidTheme
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Date
|
||||
import java.util.Locale
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.first
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withTimeoutOrNull
|
||||
|
||||
class MainActivity : FragmentActivity() {
|
||||
private lateinit var preferencesManager: PreferencesManager
|
||||
@@ -386,37 +389,39 @@ class MainActivity : FragmentActivity() {
|
||||
|
||||
/** 🔔 Инициализация Firebase Cloud Messaging */
|
||||
private fun initializeFirebase() {
|
||||
try {
|
||||
addFcmLog("🔔 Инициализация Firebase...")
|
||||
// Инициализируем Firebase
|
||||
FirebaseApp.initializeApp(this)
|
||||
addFcmLog("✅ Firebase инициализирован")
|
||||
lifecycleScope.launch(Dispatchers.Default) {
|
||||
try {
|
||||
addFcmLog("🔔 Инициализация Firebase...")
|
||||
// Инициализируем Firebase (тяжёлая операция — не на Main)
|
||||
FirebaseApp.initializeApp(this@MainActivity)
|
||||
addFcmLog("✅ Firebase инициализирован")
|
||||
|
||||
// Получаем FCM токен
|
||||
addFcmLog("📲 Запрос FCM токена...")
|
||||
FirebaseMessaging.getInstance().token.addOnCompleteListener { task ->
|
||||
if (!task.isSuccessful) {
|
||||
addFcmLog("❌ Ошибка получения токена: ${task.exception?.message}")
|
||||
return@addOnCompleteListener
|
||||
// Получаем FCM токен
|
||||
addFcmLog("📲 Запрос FCM токена...")
|
||||
FirebaseMessaging.getInstance().token.addOnCompleteListener { task ->
|
||||
if (!task.isSuccessful) {
|
||||
addFcmLog("❌ Ошибка получения токена: ${task.exception?.message}")
|
||||
return@addOnCompleteListener
|
||||
}
|
||||
|
||||
val token = task.result
|
||||
|
||||
if (token != null) {
|
||||
val shortToken = "${token.take(12)}...${token.takeLast(8)}"
|
||||
addFcmLog("✅ FCM токен получен: $shortToken")
|
||||
// Сохраняем токен локально
|
||||
saveFcmToken(token)
|
||||
addFcmLog("💾 Токен сохранен локально")
|
||||
} else {
|
||||
addFcmLog("⚠️ Токен пустой")
|
||||
}
|
||||
|
||||
// Токен будет отправлен на сервер после успешной аутентификации
|
||||
// (см. вызов sendFcmTokenToServer в onAccountLogin)
|
||||
}
|
||||
|
||||
val token = task.result
|
||||
|
||||
if (token != null) {
|
||||
val shortToken = "${token.take(12)}...${token.takeLast(8)}"
|
||||
addFcmLog("✅ FCM токен получен: $shortToken")
|
||||
// Сохраняем токен локально
|
||||
saveFcmToken(token)
|
||||
addFcmLog("💾 Токен сохранен локально")
|
||||
} else {
|
||||
addFcmLog("⚠️ Токен пустой")
|
||||
}
|
||||
|
||||
// Токен будет отправлен на сервер после успешной аутентификации
|
||||
// (см. вызов sendFcmTokenToServer в onAccountLogin)
|
||||
} catch (e: Exception) {
|
||||
addFcmLog("❌ Ошибка Firebase: ${e.message}")
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
addFcmLog("❌ Ошибка Firebase: ${e.message}")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -446,15 +451,12 @@ class MainActivity : FragmentActivity() {
|
||||
addFcmLog("⏳ Ожидание аутентификации...")
|
||||
|
||||
// 🔥 КРИТИЧНО: Ждем пока протокол станет AUTHENTICATED
|
||||
var waitAttempts = 0
|
||||
while (ProtocolManager.state.value != ProtocolState.AUTHENTICATED &&
|
||||
waitAttempts < 50) {
|
||||
delay(100) // Ждем 100ms
|
||||
waitAttempts++
|
||||
val authenticated = withTimeoutOrNull(5000) {
|
||||
ProtocolManager.state.first { it == ProtocolState.AUTHENTICATED }
|
||||
}
|
||||
|
||||
if (ProtocolManager.state.value != ProtocolState.AUTHENTICATED) {
|
||||
addFcmLog("❌ Таймаут аутентификации (${waitAttempts * 100}ms)")
|
||||
if (authenticated == null) {
|
||||
addFcmLog("❌ Таймаут аутентификации (5000ms)")
|
||||
return@launch
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user