@@ -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