Доработки звонков и чатов: typing, UI и стабильность
This commit is contained in:
@@ -81,22 +81,29 @@ class IncomingCallActivity : ComponentActivity() {
|
||||
LaunchedEffect(callState.phase) {
|
||||
callLog("phase changed: ${callState.phase}")
|
||||
if (callState.phase == CallPhase.INCOMING) wasIncoming = true
|
||||
// Закрываем только если звонок реально начался и потом завершился
|
||||
// Закрываем только когда звонок завершился
|
||||
if (callState.phase == CallPhase.IDLE && wasIncoming) {
|
||||
callLog("IDLE after INCOMING → finish()")
|
||||
finish()
|
||||
} else if (callState.phase == CallPhase.CONNECTING ||
|
||||
callState.phase == CallPhase.ACTIVE) {
|
||||
callLog("${callState.phase} → openMainActivity + finish")
|
||||
openMainActivity()
|
||||
finish()
|
||||
}
|
||||
// НЕ закрываемся при CONNECTING/ACTIVE — остаёмся на экране звонка
|
||||
// IncomingCallActivity показывает полный CallOverlay, не нужно переходить в MainActivity
|
||||
}
|
||||
|
||||
// Показываем INCOMING даже если CallManager ещё в IDLE (push раньше WebSocket)
|
||||
val displayState = if (callState.phase == CallPhase.IDLE) {
|
||||
// Показываем INCOMING в IDLE только до первого реального входящего состояния.
|
||||
// Иначе после Decline/END на мгновение мелькает "Unknown".
|
||||
val shouldShowProvisionalIncoming =
|
||||
callState.phase == CallPhase.IDLE &&
|
||||
!wasIncoming &&
|
||||
(callState.peerPublicKey.isNotBlank() ||
|
||||
callState.peerTitle.isNotBlank() ||
|
||||
callState.peerUsername.isNotBlank())
|
||||
|
||||
val displayState = if (shouldShowProvisionalIncoming) {
|
||||
callState.copy(phase = CallPhase.INCOMING, statusText = "Incoming call...")
|
||||
} else callState
|
||||
} else {
|
||||
callState
|
||||
}
|
||||
|
||||
RosettaAndroidTheme(darkTheme = true) {
|
||||
CallOverlay(
|
||||
@@ -108,16 +115,10 @@ class IncomingCallActivity : ComponentActivity() {
|
||||
if (callState.phase == CallPhase.INCOMING) {
|
||||
val result = CallManager.acceptIncomingCall()
|
||||
callLog("acceptIncomingCall result=$result")
|
||||
if (result == CallActionResult.STARTED) {
|
||||
openMainActivity()
|
||||
finish()
|
||||
}
|
||||
// Остаёмся на IncomingCallActivity — она покажет CONNECTING → ACTIVE
|
||||
} else {
|
||||
callLog("onAccept: phase not INCOMING yet, waiting...")
|
||||
// WebSocket ещё не доставил CALL — открываем MainActivity,
|
||||
// она подождёт и примет звонок
|
||||
openMainActivity()
|
||||
finish()
|
||||
callLog("onAccept: phase=${callState.phase}, trying accept anyway")
|
||||
CallManager.acceptIncomingCall()
|
||||
}
|
||||
},
|
||||
onDecline = {
|
||||
|
||||
Reference in New Issue
Block a user