From f5a8070aa9f543f73d15190f61986f5fc4a6d0ed Mon Sep 17 00:00:00 2001 From: k1ngsterr1 Date: Thu, 5 Feb 2026 03:45:24 +0500 Subject: [PATCH] refactor: remove excessive logging and improve code clarity in various components --- .../messenger/data/MessageRepository.kt | 14 ++------- .../messenger/network/ProtocolManager.kt | 4 +-- .../rosetta/messenger/ui/auth/UnlockScreen.kt | 27 ++-------------- .../messenger/ui/chats/ChatViewModel.kt | 4 +-- .../messenger/ui/chats/ChatsListScreen.kt | 9 ++---- .../messenger/ui/chats/ChatsListViewModel.kt | 13 ++------ .../ui/chats/ForwardChatPickerBottomSheet.kt | 31 +++++++++++++++++++ .../ui/chats/components/InAppCameraScreen.kt | 2 -- 8 files changed, 42 insertions(+), 62 deletions(-) diff --git a/app/src/main/java/com/rosetta/messenger/data/MessageRepository.kt b/app/src/main/java/com/rosetta/messenger/data/MessageRepository.kt index fcd0757..60cff14 100644 --- a/app/src/main/java/com/rosetta/messenger/data/MessageRepository.kt +++ b/app/src/main/java/com/rosetta/messenger/data/MessageRepository.kt @@ -107,24 +107,16 @@ class MessageRepository private constructor(private val context: Context) { */ fun initialize(publicKey: String, privateKey: String) { val start = System.currentTimeMillis() - android.util.Log.d("MessageRepository", "🔧 initialize started for ${publicKey.take(8)}...") - - // 🔥 Очищаем кэш запрошенных user info при смене аккаунта +// 🔥 Очищаем кэш запрошенных user info при смене аккаунта if (currentAccount != publicKey) { requestedUserInfoKeys.clear() - android.util.Log.d("MessageRepository", "🔧 Cleared user info cache (account changed)") - } +} currentAccount = publicKey currentPrivateKey = privateKey - - android.util.Log.d("MessageRepository", "🔧 initialize completed in ${System.currentTimeMillis() - start}ms (launching dialogs flow in background)") - - // Загрузка диалогов +// Загрузка диалогов scope.launch { - android.util.Log.d("MessageRepository", "📂 Starting dialogs flow collection...") dialogDao.getDialogsFlow(publicKey).collect { entities -> - android.util.Log.d("MessageRepository", "📂 Got ${entities.size} dialogs from DB") _dialogs.value = entities.map { it.toDialog() } // 🔥 Запрашиваем информацию о пользователях, у которых нет имени diff --git a/app/src/main/java/com/rosetta/messenger/network/ProtocolManager.kt b/app/src/main/java/com/rosetta/messenger/network/ProtocolManager.kt index 6f2cadd..101ad14 100644 --- a/app/src/main/java/com/rosetta/messenger/network/ProtocolManager.kt +++ b/app/src/main/java/com/rosetta/messenger/network/ProtocolManager.kt @@ -81,10 +81,8 @@ object ProtocolManager { */ fun initializeAccount(publicKey: String, privateKey: String) { val start = System.currentTimeMillis() - android.util.Log.d("ProtocolManager", "🔧 initializeAccount started") messageRepository?.initialize(publicKey, privateKey) - android.util.Log.d("ProtocolManager", "🔧 initializeAccount completed in ${System.currentTimeMillis() - start}ms") - } +} /** * Настройка обработчиков пакетов diff --git a/app/src/main/java/com/rosetta/messenger/ui/auth/UnlockScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/auth/UnlockScreen.kt index 1ddec01..addab26 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/auth/UnlockScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/auth/UnlockScreen.kt @@ -82,23 +82,17 @@ private suspend fun performUnlock( } onUnlocking(true) - android.util.Log.d(TAG, "🔓 Starting unlock for account: ${selectedAccount.name}") - try { val account = selectedAccount.encryptedAccount // Try to decrypt private key val decryptStart = System.currentTimeMillis() - android.util.Log.d(TAG, "🔐 Decrypting private key (PBKDF2)...") - val decryptedPrivateKey = CryptoManager.decryptWithPassword( +val decryptedPrivateKey = CryptoManager.decryptWithPassword( account.encryptedPrivateKey, password ) val decryptPrivateKeyTime = System.currentTimeMillis() - decryptStart - android.util.Log.d(TAG, "🔐 Private key decrypted in ${decryptPrivateKeyTime}ms") - if (decryptedPrivateKey == null) { - android.util.Log.w(TAG, "❌ Decryption failed - incorrect password") onError("Incorrect password") onUnlocking(false) return @@ -106,21 +100,15 @@ private suspend fun performUnlock( // Decrypt seed phrase val seedStart = System.currentTimeMillis() - android.util.Log.d(TAG, "🌱 Decrypting seed phrase...") val decryptedSeedPhrase = CryptoManager.decryptWithPassword( account.encryptedSeedPhrase, password )?.split(" ") ?: emptyList() val seedTime = System.currentTimeMillis() - seedStart - android.util.Log.d(TAG, "🌱 Seed phrase decrypted in ${seedTime}ms") - // Generate private key hash val hashStart = System.currentTimeMillis() - android.util.Log.d(TAG, "🔑 Generating private key hash...") val privateKeyHash = CryptoManager.generatePrivateKeyHash(decryptedPrivateKey) val hashTime = System.currentTimeMillis() - hashStart - android.util.Log.d(TAG, "🔑 Hash generated in ${hashTime}ms") - val decryptedAccount = DecryptedAccount( publicKey = account.publicKey, privateKey = decryptedPrivateKey, @@ -131,7 +119,6 @@ private suspend fun performUnlock( // Connect to server val connectStart = System.currentTimeMillis() - android.util.Log.d(TAG, "🌐 Connecting to server...") ProtocolManager.connect() // Wait for websocket connection @@ -141,10 +128,7 @@ private suspend fun performUnlock( waitAttempts++ } val connectTime = System.currentTimeMillis() - connectStart - android.util.Log.d(TAG, "🌐 Connected in ${connectTime}ms (attempts: $waitAttempts)") - - if (ProtocolManager.state.value == ProtocolState.DISCONNECTED) { - android.util.Log.e(TAG, "❌ Connection failed after $waitAttempts attempts") +if (ProtocolManager.state.value == ProtocolState.DISCONNECTED) { onError("Failed to connect to server") onUnlocking(false) return @@ -154,20 +138,13 @@ private suspend fun performUnlock( // Authenticate val authStart = System.currentTimeMillis() - android.util.Log.d(TAG, "🔒 Authenticating...") ProtocolManager.authenticate(account.publicKey, privateKeyHash) val authTime = System.currentTimeMillis() - authStart - android.util.Log.d(TAG, "🔒 Auth request sent in ${authTime}ms") - accountManager.setCurrentAccount(account.publicKey) val totalTime = System.currentTimeMillis() - totalStart - android.util.Log.d(TAG, "✅ UNLOCK COMPLETE in ${totalTime}ms") - android.util.Log.d(TAG, " 📊 Breakdown: privateKey=${decryptPrivateKeyTime}ms, seed=${seedTime}ms, hash=${hashTime}ms, connect=${connectTime}ms, auth=${authTime}ms") - onSuccess(decryptedAccount) } catch (e: Exception) { - android.util.Log.e(TAG, "❌ Unlock failed: ${e.message}", e) onError("Failed to unlock: ${e.message}") onUnlocking(false) } diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt index ef08bea..446195f 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatViewModel.kt @@ -630,9 +630,7 @@ if (message.id in currentIds) { withContext(Dispatchers.Main.immediate) { val dbIds = messages.map { it.id }.toSet() val currentMsgs = _messages.value -android.util.Log.d("ChatViewModel", " Current ids: ${currentMsgs.map { it.id }.take(5)}...") - - val optimisticMessages = currentMsgs.filter { msg -> +val optimisticMessages = currentMsgs.filter { msg -> msg.status == MessageStatus.SENDING && msg.id !in dbIds } val newList = messages + optimisticMessages diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt index e52b8f2..a691be3 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt @@ -253,20 +253,15 @@ fun ChatsListScreen( LaunchedEffect(accountPublicKey, accountPrivateKey) { if (accountPublicKey.isNotEmpty() && accountPrivateKey.isNotEmpty()) { val launchStart = System.currentTimeMillis() - android.util.Log.d("ChatsListScreen", "🚀 LaunchedEffect started") - chatsViewModel.setAccount(accountPublicKey, accountPrivateKey) - android.util.Log.d("ChatsListScreen", "📋 setAccount took ${System.currentTimeMillis() - launchStart}ms") - - // Устанавливаем аккаунт для RecentSearchesManager +// Устанавливаем аккаунт для RecentSearchesManager RecentSearchesManager.setAccount(accountPublicKey) // 🔥 КРИТИЧНО: Инициализируем MessageRepository для обработки входящих // сообщений val initStart = System.currentTimeMillis() ProtocolManager.initializeAccount(accountPublicKey, accountPrivateKey) - android.util.Log.d("ChatsListScreen", "🌐 initializeAccount took ${System.currentTimeMillis() - initStart}ms") - android.util.Log.d("ChatsListScreen", "✅ Total LaunchedEffect: ${System.currentTimeMillis() - launchStart}ms") +android.util.Log.d("ChatsListScreen", "✅ Total LaunchedEffect: ${System.currentTimeMillis() - launchStart}ms") } } diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListViewModel.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListViewModel.kt index 32f2d02..994cd9c 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListViewModel.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListViewModel.kt @@ -112,10 +112,7 @@ class ChatsListViewModel(application: Application) : AndroidViewModel(applicatio */ fun setAccount(publicKey: String, privateKey: String) { val setAccountStart = System.currentTimeMillis() - android.util.Log.d(TAG, "📋 setAccount called for: ${publicKey.take(8)}...") - - if (currentAccount == publicKey) { - android.util.Log.d(TAG, "📋 Account already set, skipping") +if (currentAccount == publicKey) { return } @@ -124,16 +121,12 @@ class ChatsListViewModel(application: Application) : AndroidViewModel(applicatio currentAccount = publicKey currentPrivateKey = privateKey - - android.util.Log.d(TAG, "📋 Starting dialogs subscription...") - // Подписываемся на обычные диалоги viewModelScope.launch { dialogDao.getDialogsFlow(publicKey) .flowOn(Dispatchers.IO) // 🚀 Flow работает на IO .map { dialogsList -> val mapStart = System.currentTimeMillis() - android.util.Log.d(TAG, "🔄 Processing ${dialogsList.size} dialogs...") // � ОПТИМИЗАЦИЯ: Параллельная расшифровка всех сообщений withContext(Dispatchers.Default) { dialogsList.map { dialog -> @@ -207,12 +200,10 @@ class ChatsListViewModel(application: Application) : AndroidViewModel(applicatio }.awaitAll() }.also { val mapTime = System.currentTimeMillis() - mapStart - android.util.Log.d(TAG, "🔄 Dialogs processed in ${mapTime}ms (${dialogsList.size} items)") - } +} } .distinctUntilChanged() // 🔥 ИСПРАВЛЕНИЕ: Игнорируем дублирующиеся списки .collect { decryptedDialogs -> - android.util.Log.d(TAG, "✅ Dialogs collected: ${decryptedDialogs.size} items") _dialogs.value = decryptedDialogs // 🟢 Подписываемся на онлайн-статусы всех собеседников diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/ForwardChatPickerBottomSheet.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/ForwardChatPickerBottomSheet.kt index b2116bc..0289aca 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/ForwardChatPickerBottomSheet.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/ForwardChatPickerBottomSheet.kt @@ -66,6 +66,37 @@ fun ForwardChatPickerBottomSheet( view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS) } + // 🎨 Плавное затемнение статус бара когда bottom sheet открыт + DisposableEffect(Unit) { + if (!view.isInEditMode) { + val window = (view.context as? android.app.Activity)?.window + val originalStatusBarColor = window?.statusBarColor ?: 0 + val scrimColor = android.graphics.Color.argb(153, 0, 0, 0) // 60% черный + + // Плавное затемнение + val fadeInAnimator = android.animation.ValueAnimator.ofArgb(originalStatusBarColor, scrimColor).apply { + duration = 200 + addUpdateListener { animator -> + window?.statusBarColor = animator.animatedValue as Int + } + } + fadeInAnimator.start() + + onDispose { + // Плавное восстановление + val fadeOutAnimator = android.animation.ValueAnimator.ofArgb(scrimColor, originalStatusBarColor).apply { + duration = 150 + addUpdateListener { animator -> + window?.statusBarColor = animator.animatedValue as Int + } + } + fadeOutAnimator.start() + } + } else { + onDispose { } + } + } + // 🔥 Функция для красивого закрытия с анимацией fun dismissWithAnimation() { scope.launch { diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/components/InAppCameraScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/components/InAppCameraScreen.kt index 58f2d16..a4c1d3e 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/components/InAppCameraScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/components/InAppCameraScreen.kt @@ -183,7 +183,6 @@ fun InAppCameraScreen( } override fun onError(exc: ImageCaptureException) { - Log.e("InAppCamera", "Photo capture failed: ${exc.message}", exc) isCapturing = false } } @@ -227,7 +226,6 @@ fun InAppCameraScreen( capture ) } catch (e: Exception) { - Log.e("InAppCamera", "Use case binding failed", e) } }