updateCallStatus method
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;
}