forked from eatvio/eatvio_app
feat(video_calls): fixed navigation from voip push
This commit is contained in:
@@ -49,8 +49,11 @@ class VideoCallCallKitCoordinator {
|
||||
|
||||
if (Platform.isIOS) {
|
||||
_voipDiagnosticsChannel.setMethodCallHandler((call) async {
|
||||
if (call.method == 'voipDiagnosticsUpdated') {
|
||||
_scheduleNativeVoipDiagnosticsDrain();
|
||||
switch (call.method) {
|
||||
case 'voipDiagnosticsUpdated':
|
||||
_scheduleNativeVoipDiagnosticsDrain();
|
||||
case 'acceptedVoipCall':
|
||||
await _handleNativeAcceptedVoipCall(call.arguments);
|
||||
}
|
||||
});
|
||||
await _firebaseApi.registerPushToken();
|
||||
@@ -245,6 +248,57 @@ class VideoCallCallKitCoordinator {
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> _handleNativeAcceptedVoipCall(Object? arguments) async {
|
||||
if (!Platform.isIOS) return;
|
||||
|
||||
final data = _stringKeyedMap(arguments);
|
||||
final extra = _stringKeyedMap(data['extra']);
|
||||
final callKitId = _parseString(data, const ['id', 'uuid']);
|
||||
if (callKitId == null) {
|
||||
log(
|
||||
'VideoCallCallKitCoordinator: native acceptedVoipCall without callKitId, data=$data',
|
||||
name: 'VideoCallCallKit',
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
final conversationUuid = _parseConversationUuid(
|
||||
extra,
|
||||
handle: _parseString(data, const ['handle']),
|
||||
);
|
||||
if (conversationUuid.isEmpty) {
|
||||
log(
|
||||
'VideoCallCallKitCoordinator: native acceptedVoipCall without conversationUuid, data=$data',
|
||||
name: 'VideoCallCallKit',
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
await _deliverIncomingAccept(
|
||||
callKitId: callKitId,
|
||||
conversationUuid: conversationUuid,
|
||||
counterpartName:
|
||||
_parseString(extra, const [
|
||||
'counterpartName',
|
||||
'caller_name',
|
||||
'callerName',
|
||||
]) ??
|
||||
_parseString(data, const ['nameCaller']),
|
||||
counterpartAvatarUrl:
|
||||
_parseString(extra, const [
|
||||
'counterpartAvatarUrl',
|
||||
'avatar',
|
||||
'avatarUrl',
|
||||
'caller_avatar',
|
||||
]) ??
|
||||
_parseString(data, const ['avatar']),
|
||||
localParticipantName: _parseString(extra, const [
|
||||
'localParticipantName',
|
||||
'local_participant_name',
|
||||
]),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> _handleAccept(String callKitId) async {
|
||||
if (_acceptHandledCallKitIds.contains(callKitId)) return;
|
||||
|
||||
@@ -384,7 +438,7 @@ class VideoCallCallKitCoordinator {
|
||||
}
|
||||
|
||||
static String _parseConversationUuid(
|
||||
Map<String, dynamic> extra, {
|
||||
Map<String, Object?> extra, {
|
||||
String? handle,
|
||||
}) {
|
||||
final fromExtra = _parseString(extra, const [
|
||||
@@ -401,7 +455,7 @@ class VideoCallCallKitCoordinator {
|
||||
return '';
|
||||
}
|
||||
|
||||
static String? _parseString(Map<String, dynamic> map, List<String> keys) {
|
||||
static String? _parseString(Map<String, Object?> map, List<String> keys) {
|
||||
for (final key in keys) {
|
||||
final value = map[key];
|
||||
if (value is String && value.trim().isNotEmpty) {
|
||||
|
||||
Reference in New Issue
Block a user