diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 5f6e111..9b5279a 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -23,8 +23,8 @@ val gitShortSha = safeGitOutput("rev-parse", "--short", "HEAD") ?: "unknown" // ═══════════════════════════════════════════════════════════ // Rosetta versioning — bump here on each release // ═══════════════════════════════════════════════════════════ -val rosettaVersionName = "1.4.3" -val rosettaVersionCode = 45 // Increment on each release +val rosettaVersionName = "1.4.4" +val rosettaVersionCode = 46 // Increment on each release val customWebRtcAar = file("libs/libwebrtc-custom.aar") android { diff --git a/app/src/main/java/com/rosetta/messenger/data/ReleaseNotes.kt b/app/src/main/java/com/rosetta/messenger/data/ReleaseNotes.kt index 3c6a07d..3767654 100644 --- a/app/src/main/java/com/rosetta/messenger/data/ReleaseNotes.kt +++ b/app/src/main/java/com/rosetta/messenger/data/ReleaseNotes.kt @@ -18,15 +18,15 @@ object ReleaseNotes { Update v$VERSION_PLACEHOLDER Звонки - - Полноэкранный входящий звонок с Accept/Decline даже когда приложение свёрнуто или убито - - Исправлен сброс PeerConnection — больше нет зависания ~30 сек между звонками - - Защита от фантомных звонков при принятии на другом устройстве + - Обновлён протокол WebRTC: publicKey и deviceId в каждом пакете + - Полноэкранный входящий звонок на экране блокировки + - Фикс бесконечного "Exchanging keys" при принятии звонка + - Фикс краша ForegroundService при исходящем звонке + - Кастомный WebRTC с E2EE теперь работает в CI-сборках - E2EE - - Улучшена диагностика шифрования звонков - - Push-уведомления - - Поддержка tokenType и deviceId для новых серверов + Уведомления + - Аватарки и имена в уведомлениях + - Настройка отключения аватарок в уведомлениях """.trimIndent() fun getNotice(version: String): String = diff --git a/app/src/main/java/com/rosetta/messenger/network/PacketWebRTC.kt b/app/src/main/java/com/rosetta/messenger/network/PacketWebRTC.kt index 6589fc1..a26c7bb 100644 --- a/app/src/main/java/com/rosetta/messenger/network/PacketWebRTC.kt +++ b/app/src/main/java/com/rosetta/messenger/network/PacketWebRTC.kt @@ -19,12 +19,16 @@ enum class WebRTCSignalType(val value: Int) { class PacketWebRTC : Packet() { var signalType: WebRTCSignalType = WebRTCSignalType.OFFER var sdpOrCandidate: String = "" + var publicKey: String = "" + var deviceId: String = "" override fun getPacketId(): Int = 0x1B override fun receive(stream: Stream) { signalType = WebRTCSignalType.fromValue(stream.readInt8()) sdpOrCandidate = stream.readString() + publicKey = stream.readString() + deviceId = stream.readString() } override fun send(): Stream { @@ -32,6 +36,8 @@ class PacketWebRTC : Packet() { stream.writeInt16(getPacketId()) stream.writeInt8(signalType.value) stream.writeString(sdpOrCandidate) + stream.writeString(publicKey) + stream.writeString(deviceId) return stream } } 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 ab4fdcb..7e2de9f 100644 --- a/app/src/main/java/com/rosetta/messenger/network/ProtocolManager.kt +++ b/app/src/main/java/com/rosetta/messenger/network/ProtocolManager.kt @@ -1343,10 +1343,14 @@ object ProtocolManager { * Send WebRTC signaling packet (0x1B). */ fun sendWebRtcSignal(signalType: WebRTCSignalType, sdpOrCandidate: String) { + val pk = try { getProtocol().getPublicKey().orEmpty() } catch (_: Exception) { "" } + val did = appContext?.let { getOrCreateDeviceId(it) } ?: "" send( PacketWebRTC().apply { this.signalType = signalType this.sdpOrCandidate = sdpOrCandidate + this.publicKey = pk + this.deviceId = did } ) }