updateCallStatus method

  1. @override
Future<CKCall?> updateCallStatus(
  1. String uuid, {
  2. required CKCallState callStatus,
})
override

Update the call status of a call in the callkit UI.

Implementation

@override
Future<CKCall?> updateCallStatus(
  String uuid, {
  required CKCallState callStatus,
}) async {
  final call = _callManager.getCall(uuid);
  if (call == null) {
    printDebug("Call with uuid: $uuid not found.", tag: tag);
    return null;
  }

  // final oldStatus = call.state;
  // if (callStatus == CKCKCallState.hold) {
  //   if (oldStatus == CKCKCallState.initiated) {
  //     return call;
  //   } else if (oldStatus == CKCKCallState.dialing) {
  //     if (!call.hasCapabilitySupportsHold) {
  //       printDebug("Hold not supported in dialing state. Please enable it with CKCapability.supportHold.", tag: tag);
  //     }
  //   } else if (oldStatus == CKCKCallState.ringing) {
  //     printDebug("Cannot hold incoming call.", tag: tag);
  //   } else if (oldStatus == CKCKCallState.disconnecting) {
  //     printDebug("Cannot hold call in disconnecting state.", tag: tag);
  //     return call;
  //   }
  //
  //   switch (oldStatus) {
  //     case CKCKCallState.initiated:
  //       // TODO: Handle this case.
  //       break;
  //     case CKCKCallState.ringing:
  //       printDebug("Cannot hold incoming call.", tag: tag);
  //       break;
  //     case CKCKCallState.dialing:
  //       if (!call.hasCapabilitySupportsHold) {
  //         printDebug("Hold not supported in dialing state. Please enable it with CKCapability.supportHold.", tag: tag);
  //       }
  //       break;
  //     case CKCKCallState.active:
  //       // TODO: Handle this case.
  //       break;
  //     case CKCKCallState.hold:
  //       // TODO: Handle this case.
  //       break;
  //     default:
  //       printDebug("Cannot hold call in ${oldStatus.name} state.", tag: tag);
  //       return call;
  //   }
  // }

  final update = call.copyWith(state: callStatus);
  _callManager.updateCall(update);
  final metadata = _notificationManager.getNotification(uuid)?.metadata;
  final ckCapabilities = update.capabilities;

  final notification = _generateNotification(call: update, capabilities: ckCapabilities, metadata: metadata);
  await _notificationManager.add(notification, flags: _defaultFlags);

  return update;
}