Initial commit
This commit is contained in:
89
lib/utils/call_kit_params.dart
Normal file
89
lib/utils/call_kit_params.dart
Normal file
@@ -0,0 +1,89 @@
|
||||
// SPDX-FileCopyrightText: 2019-Present Christian Kußowski
|
||||
// SPDX-FileCopyrightText: 2019-Present Contributors to FluffyChat
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:tatchat/config/setting_keys.dart';
|
||||
import 'package:tatchat/l10n/l10n.dart';
|
||||
import 'package:tatchat/utils/matrix_live_kit_calls/matrix_live_kit_call.dart';
|
||||
import 'package:tatchat/utils/notification_avatar_extension.dart';
|
||||
import 'package:flutter_callkit_incoming/entities/entities.dart';
|
||||
import 'package:matrix/matrix.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
Future<CallKitParams> buildFluffyChatCallKitParams(
|
||||
Room room, {
|
||||
L10n? l10n,
|
||||
MatrixRtcCallIntent intent = .video,
|
||||
Duration timeout = RtcNotificationContent.defaultLifetime,
|
||||
}) async {
|
||||
l10n ??= await lookupL10n(PlatformDispatcher.instance.locale);
|
||||
final avatarUrl = await room.avatar?.getThumbnailUri(
|
||||
room.client,
|
||||
width: notificationAvatarDimension,
|
||||
height: notificationAvatarDimension,
|
||||
method: ThumbnailMethod.crop,
|
||||
);
|
||||
|
||||
return CallKitParams(
|
||||
id: Uuid().v4(),
|
||||
extra: {
|
||||
'roomId': room.id,
|
||||
'clientName': room.client.clientName,
|
||||
'intent': intent.name,
|
||||
},
|
||||
appName: AppSettings.applicationName.value,
|
||||
nameCaller: room.getLocalizedDisplayname(),
|
||||
avatar: avatarUrl?.toString(),
|
||||
handle: switch (intent) {
|
||||
MatrixRtcCallIntent.voice => l10n.voiceCall,
|
||||
MatrixRtcCallIntent.video => l10n.videoCall,
|
||||
},
|
||||
type: intent.callKitType,
|
||||
duration: timeout.inMilliseconds,
|
||||
headers: avatarUrl == null
|
||||
? null
|
||||
: {'authorization': 'Bearer ${room.client.accessToken}'},
|
||||
missedCallNotification: NotificationParams(
|
||||
showNotification: true,
|
||||
isShowCallback: true,
|
||||
subtitle: l10n.missedCall,
|
||||
callbackText: l10n.callBack,
|
||||
),
|
||||
callingNotification: NotificationParams(
|
||||
showNotification: true,
|
||||
isShowCallback: true,
|
||||
subtitle: l10n.waitingForParticipant,
|
||||
callbackText: l10n.hangUp,
|
||||
),
|
||||
android: AndroidParams(
|
||||
textAccept: l10n.accept,
|
||||
textDecline: l10n.decline,
|
||||
ringtonePath: 'system_ringtone_default',
|
||||
incomingCallNotificationChannelName: l10n.incomingCall,
|
||||
missedCallNotificationChannelName: l10n.missedCall,
|
||||
),
|
||||
ios: IOSParams(
|
||||
iconName: 'LaunchImage',
|
||||
handleType: 'generic',
|
||||
supportsVideo: intent == .video,
|
||||
maximumCallGroups: 1,
|
||||
maximumCallsPerCallGroup: 1,
|
||||
supportsDTMF: false,
|
||||
supportsHolding: false,
|
||||
supportsGrouping: false,
|
||||
supportsUngrouping: false,
|
||||
includesCallsInRecents: true,
|
||||
ringtonePath: 'system_ringtone_default',
|
||||
audioSessionMode: switch (intent) {
|
||||
.video => 'videoChat',
|
||||
.voice => 'voiceChat',
|
||||
},
|
||||
audioSessionActive: true,
|
||||
audioSessionPreferredSampleRate: 44100.0,
|
||||
audioSessionPreferredIOBufferDuration: 0.005,
|
||||
),
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user