Skip to content

Commit f07d890

Browse files
committed
feat: add _onCallAction response
1 parent 17d8ea5 commit f07d890

File tree

1 file changed

+118
-89
lines changed

1 file changed

+118
-89
lines changed

lib/src/method_channel/web_callkit_method_channel.dart

Lines changed: 118 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -420,95 +420,124 @@ class MethodChannelWebCallkit extends WebCallkitPlatform {
420420
}
421421

422422
Future<void> _onCallAction(CKCallResult result, ActionSource source) async {
423-
final call = _callManager.getCall(result.uuid);
424-
final callState = call?.state;
425-
switch (result.action) {
426-
case CKCallAction.none:
427-
// do nothing
428-
break;
429-
430-
case CKCallAction.answer:
431-
if (callState != CallState.ringing) {
432-
printDebug("Call not in ringing state. Ignoring answer action.", tag: tag);
433-
return;
434-
}
435-
printDebug("Call answered: ${result.uuid}", tag: tag);
436-
_onCallActionListener?.call(result.uuid, CKCallAction.answer, source);
437-
break;
438-
439-
case CKCallAction.decline:
440-
if (callState != CallState.ringing) {
441-
printDebug("Call not in ringing state. Ignoring decline action.", tag: tag);
442-
return;
443-
}
444-
printDebug("Call declined: ${result.uuid}", tag: tag);
445-
_onCallActionListener?.call(result.uuid, CKCallAction.decline, source);
446-
break;
447-
448-
case CKCallAction.hangUp:
449-
switch (call?.state) {
450-
case CallState.initiated:
451-
case CallState.dialing:
452-
_onDisconnectListener?.call(result.uuid, DisconnectResponse.canceled, source);
453-
break;
454-
case CallState.active:
455-
case CallState.reconnecting:
456-
_onDisconnectListener?.call(result.uuid, DisconnectResponse.local, source);
457-
break;
458-
case CallState.disconnecting:
459-
_onDisconnectListener?.call(result.uuid, DisconnectResponse.local, source);
460-
break;
461-
case CallState.disconnected:
462-
default:
463-
printDebug("Call not in valid state. Ignoring hangup action. State: $callState", tag: tag);
464-
break;
465-
}
466-
break;
467-
468-
case CKCallAction.callback:
469-
printDebug("Call callback: ${result.uuid}", tag: tag);
470-
_onCallActionListener?.call(result.uuid, CKCallAction.callback, source);
471-
break;
472-
473-
case CKCallAction.switchVideo:
474-
_onCallTypeChange(result, callType: CallType.video, source: source);
475-
break;
476-
477-
case CKCallAction.switchAudio:
478-
_onCallTypeChange(result, callType: CallType.audio, source: source);
479-
break;
480-
481-
case CKCallAction.switchScreenShare:
482-
_onCallTypeChange(result, callType: CallType.screenShare, source: source);
483-
break;
484-
485-
case CKCallAction.mute:
486-
printDebug("Call mute state: ${result.uuid}", tag: tag);
487-
_onCallActionListener?.call(result.uuid, result.action, source);
488-
break;
489-
490-
case CKCallAction.unmute:
491-
printDebug("Call unmute state: ${result.uuid}", tag: tag);
492-
_onCallActionListener?.call(result.uuid, result.action, source);
493-
break;
494-
495-
case CKCallAction.hold:
496-
printDebug("Call hold state: ${result.uuid}", tag: tag);
497-
_onCallActionListener?.call(result.uuid, result.action, source);
498-
break;
499-
500-
case CKCallAction.unhold:
501-
printDebug("Call unhold state: ${result.uuid}", tag: tag);
502-
_onCallActionListener?.call(result.uuid, result.action, source);
503-
break;
504-
505-
case CKCallAction.dismiss:
506-
_dismissNotification(result.uuid);
507-
break;
508-
509-
// default:
510-
// printDebug("Unknown action: ${result.action}", tag: tag);
511-
// break;
423+
if (result.uuid != null) {
424+
final uuid = result.uuid!;
425+
final call = _callManager.getCall(uuid);
426+
final callState = call?.state;
427+
switch (result.action) {
428+
case CKCallAction.none:
429+
printDebug("Call Action: none: $uuid", tag: tag);
430+
// do nothing
431+
break;
432+
433+
case CKCallAction.answer:
434+
printDebug("Call Action: answered: $uuid", tag: tag);
435+
if (callState != CallState.ringing) {
436+
printDebug("Call not in ringing state. Ignoring answer action.", tag: tag);
437+
return;
438+
}
439+
printDebug("Call answered: $uuid", tag: tag);
440+
_onCallActionListener?.call(uuid, CKCallAction.answer, source);
441+
break;
442+
443+
case CKCallAction.decline:
444+
printDebug("Call Action: declined: $uuid", tag: tag);
445+
if (callState != CallState.ringing) {
446+
printDebug("Call not in ringing state. Ignoring decline action.", tag: tag);
447+
return;
448+
}
449+
printDebug("Call declined: $uuid", tag: tag);
450+
_onCallActionListener?.call(uuid, CKCallAction.decline, source);
451+
break;
452+
453+
case CKCallAction.hangUp:
454+
printDebug("Call Action: hangup: $uuid", tag: tag);
455+
switch (call?.state) {
456+
case CallState.initiated:
457+
case CallState.dialing:
458+
_onDisconnectListener?.call(uuid, DisconnectResponse.canceled, source);
459+
break;
460+
case CallState.active:
461+
case CallState.reconnecting:
462+
_onDisconnectListener?.call(uuid, DisconnectResponse.local, source);
463+
break;
464+
case CallState.disconnecting:
465+
_onDisconnectListener?.call(uuid, DisconnectResponse.local, source);
466+
break;
467+
case CallState.disconnected:
468+
default:
469+
printDebug("Call not in valid state. Ignoring hangup action. State: $callState", tag: tag);
470+
break;
471+
}
472+
break;
473+
474+
case CKCallAction.callback:
475+
printDebug("Call Action: callback: $uuid", tag: tag);
476+
_onCallActionListener?.call(uuid, CKCallAction.callback, source);
477+
break;
478+
479+
case CKCallAction.switchVideo:
480+
printDebug("Call Action: switch video: $uuid", tag: tag);
481+
_onCallTypeChange(result, callType: CallType.video, source: source);
482+
break;
483+
484+
case CKCallAction.switchAudio:
485+
printDebug("Call Action: switch audio: $uuid", tag: tag);
486+
_onCallTypeChange(result, callType: CallType.audio, source: source);
487+
break;
488+
489+
case CKCallAction.switchScreenShare:
490+
printDebug("Call Action: switch screen share: $uuid", tag: tag);
491+
_onCallTypeChange(result, callType: CallType.screenShare, source: source);
492+
break;
493+
494+
case CKCallAction.mute:
495+
printDebug("Call Action: mute: $uuid", tag: tag);
496+
_onCallActionListener?.call(uuid, result.action, source);
497+
break;
498+
499+
case CKCallAction.unmute:
500+
printDebug("Call Action: unmute: $uuid", tag: tag);
501+
_onCallActionListener?.call(uuid, result.action, source);
502+
break;
503+
504+
case CKCallAction.hold:
505+
printDebug("Call Action; hold: $uuid", tag: tag);
506+
_onCallActionListener?.call(uuid, result.action, source);
507+
break;
508+
509+
case CKCallAction.unhold:
510+
printDebug("Call Action: unhold: $uuid", tag: tag);
511+
_onCallActionListener?.call(uuid, result.action, source);
512+
break;
513+
514+
case CKCallAction.dismiss:
515+
printDebug("Call Action: dismiss: $uuid", tag: tag);
516+
_dismissNotification(uuid);
517+
break;
518+
519+
case CKCallAction.silence:
520+
printDebug("Call Action: silence: $uuid", tag: tag);
521+
if (callState != CallState.ringing) {
522+
printDebug("Call not in ringing state. Ignoring silence action.", tag: tag);
523+
return;
524+
}
525+
renotify(uuid, silent: true);
526+
_onCallActionListener?.call(uuid, CKCallAction.silence, source);
527+
break;
528+
529+
case CKCallAction.disableVideo:
530+
printDebug("Call Action: disable video: $uuid", tag: tag);
531+
_onCallActionListener?.call(uuid, CKCallAction.disableVideo, source);
532+
break;
533+
534+
case CKCallAction.enableVideo:
535+
printDebug("Call Action: enable video: $uuid", tag: tag);
536+
_onCallActionListener?.call(uuid, CKCallAction.enableVideo, source);
537+
break;
538+
}
539+
} else {
540+
printDebug("Call Action: uuid is null", tag: tag);
512541
}
513542
}
514543

0 commit comments

Comments
 (0)