feat: Implement floating input bar in ChatDetailScreen and ensure transparent backgrounds in AppleEmojiEditText

This commit is contained in:
k1ngsterr1
2026-01-12 03:52:17 +05:00
parent ec299bb415
commit 8237c72c17
5 changed files with 697 additions and 154 deletions

View File

@@ -30,8 +30,8 @@ class Protocol(
) {
companion object {
private const val TAG = "RosettaProtocol"
private const val RECONNECT_INTERVAL = 10000L // 10 seconds
private const val MAX_RECONNECT_ATTEMPTS = 5
private const val RECONNECT_INTERVAL = 5000L // 5 seconds (как в Архиве)
private const val MAX_RECONNECT_ATTEMPTS = 10 // Увеличил лимит
private const val HANDSHAKE_TIMEOUT = 10000L // 10 seconds
}
@@ -296,22 +296,42 @@ class Protocol(
}
private fun handleDisconnect() {
val previousState = _state.value
_state.value = ProtocolState.DISCONNECTED
handshakeComplete = false
handshakeJob?.cancel()
heartbeatJob?.cancel()
if (!isManuallyClosed && reconnectAttempts < MAX_RECONNECT_ATTEMPTS) {
reconnectAttempts++
log("🔄 Reconnecting in ${RECONNECT_INTERVAL}ms (attempt $reconnectAttempts/$MAX_RECONNECT_ATTEMPTS)")
scope.launch {
delay(RECONNECT_INTERVAL)
connect()
// Автоматический reconnect (как в Архиве)
if (!isManuallyClosed) {
// Сбрасываем счетчик если до этого были подключены
if (previousState == ProtocolState.AUTHENTICATED || previousState == ProtocolState.CONNECTED) {
log("🔄 Connection lost, will reconnect...")
}
if (reconnectAttempts < MAX_RECONNECT_ATTEMPTS) {
reconnectAttempts++
val delay = RECONNECT_INTERVAL * minOf(reconnectAttempts, 3) // Exponential backoff до 15 секунд
log("🔄 Reconnecting in ${delay}ms (attempt $reconnectAttempts/$MAX_RECONNECT_ATTEMPTS)")
scope.launch {
delay(delay)
if (!isManuallyClosed) {
connect()
}
}
} else {
log("❌ Max reconnect attempts reached, resetting counter...")
// Сбрасываем счетчик и пробуем снова через большой интервал
reconnectAttempts = 0
scope.launch {
delay(30000) // 30 секунд перед следующей серией попыток
if (!isManuallyClosed) {
log("🔄 Restarting reconnection attempts...")
connect()
}
}
}
} else if (reconnectAttempts >= MAX_RECONNECT_ATTEMPTS) {
log("❌ Max reconnect attempts reached")
_lastError.value = "Unable to connect to server"
}
}