Initial commit
Some checks failed
Main Deploy Workflow / deploy_web (push) Has been cancelled
Main Deploy Workflow / deploy_playstore_internal (push) Has been cancelled
Close stale issues and PRs / stale (push) Has been cancelled

This commit is contained in:
2026-09-11 15:59:56 -03:00
commit 0037b0b9cf
651 changed files with 199705 additions and 0 deletions

View 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,
),
);
}