feat(video_calls): ios repeated call fix

This commit is contained in:
misha
2026-10-16 15:41:13 +03:00
parent 86e9d0cc31
commit 5a8f8aee3e
5 changed files with 49 additions and 5 deletions

View File

@@ -363,7 +363,7 @@ class VideoCallCallKitCoordinator {
);
return;
}
await _handleDecline(id);
await _handleDecline(id, eventExtra: _callKitEventParams(event)?.extra);
}
Future<void> _handleEndedEvent(CallEvent event) async {
@@ -855,7 +855,10 @@ class VideoCallCallKitCoordinator {
);
}
Future<void> _handleDecline(String callKitId) async {
Future<void> _handleDecline(
String callKitId, {
Map<String, dynamic>? eventExtra,
}) async {
if (_suppressedEndCallKitIds.contains(callKitId)) {
log(
'VideoCallCallKitCoordinator: ignore spurious end/decline during accept, callKitId=$callKitId',
@@ -865,12 +868,15 @@ class VideoCallCallKitCoordinator {
}
final params = _paramsForCallId(callKitId);
final extra = params?.extra ?? <String, dynamic>{};
final extra = params?.extra ?? eventExtra ?? <String, dynamic>{};
final conversationUuid = _parseConversationUuid(
extra,
handle: params?.handle ?? callKitId,
);
final endedPushDismissal = callKitExtraMarksEndedPush(extra);
final endedPushDismissal = callKitDeclineIsEndedPush(
cachedExtra: params?.extra,
eventExtra: eventExtra,
);
_suppressedEndCallKitIds.add(callKitId);
try {

View File

@@ -71,6 +71,17 @@ bool callKitExtraMarksEndedPush(Map<String, dynamic>? extra) {
return false;
}
/// Either the cached incoming payload or the decline event itself can carry
/// the marker. The decline often arrives with the push payload, while the
/// cache still holds the original ringing call.
bool callKitDeclineIsEndedPush({
Map<String, dynamic>? cachedExtra,
Map<String, dynamic>? eventExtra,
}) {
return callKitExtraMarksEndedPush(cachedExtra) ||
callKitExtraMarksEndedPush(eventExtra);
}
bool shouldForceEndCallAfterRoomDisconnect({
required bool callStageEntered,
required bool sessionConnected,