From 68ed65314773e6502522c0988cac0d0671b555d2 Mon Sep 17 00:00:00 2001 From: Christian Pauly Date: Sat, 30 Jul 2022 11:34:01 +0200 Subject: [PATCH] feat: Display timeline of messages in android notification --- lib/utils/push_helper.dart | 50 +++++++++++++++++++++++--------------- pubspec.lock | 4 +-- pubspec.yaml | 2 +- 3 files changed, 34 insertions(+), 22 deletions(-) diff --git a/lib/utils/push_helper.dart b/lib/utils/push_helper.dart index 1b60c891..52eb2a30 100644 --- a/lib/utils/push_helper.dart +++ b/lib/utils/push_helper.dart @@ -11,6 +11,7 @@ import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions.dart/matrix_locals.dart'; +import 'package:fluffychat/utils/platform_infos.dart'; Future pushHelper( PushNotification notification, { @@ -68,7 +69,7 @@ Future pushHelper( final body = await event.calcLocalizedBody( matrixLocals, plaintextBody: true, - withSenderNamePrefix: !event.room.isDirectChat, + withSenderNamePrefix: false, hideReply: true, hideEdit: true, removeMarkdown: true, @@ -85,28 +86,38 @@ Future pushHelper( final avatarFile = avatar == null ? null : await DefaultCacheManager().getSingleFile(avatar); + final id = await mapRoomIdToInt(event.room.id); + // Show notification + final newMessage = Message( + body, + event.originServerTs, + Person( + name: event.senderFromMemoryOrFallback.calcDisplayname(), + icon: avatarFile == null + ? null + : BitmapFilePathAndroidIcon(avatarFile.path), + ), + ); + + final messagingStyleInformation = PlatformInfos.isAndroid + ? await AndroidFlutterLocalNotificationsPlugin() + .getActiveNotificationMessagingStyle(id) + : null; + messagingStyleInformation?.messages?.add(newMessage); + final androidPlatformChannelSpecifics = AndroidNotificationDetails( AppConfig.pushNotificationsChannelId, AppConfig.pushNotificationsChannelName, channelDescription: AppConfig.pushNotificationsChannelDescription, - styleInformation: MessagingStyleInformation( - Person(name: event.room.client.userID), - conversationTitle: event.room.displayname, - groupConversation: !event.room.isDirectChat, - messages: [ - Message( - body, - event.originServerTs, - Person( - name: event.room.displayname, - icon: avatarFile == null - ? null - : BitmapFilePathAndroidIcon(avatarFile.path), - ), - ) - ], - ), + number: notification.counts?.unread, + styleInformation: messagingStyleInformation ?? + MessagingStyleInformation( + Person(name: event.room.client.userID), + conversationTitle: event.room.displayname, + groupConversation: !event.room.isDirectChat, + messages: [newMessage], + ), ticker: l10n.unreadChats(notification.counts?.unread ?? 1), importance: Importance.max, priority: Priority.high, @@ -117,8 +128,9 @@ Future pushHelper( android: androidPlatformChannelSpecifics, iOS: iOSPlatformChannelSpecifics, ); + await _flutterLocalNotificationsPlugin.show( - await mapRoomIdToInt(event.room.id), + id, event.room.displayname, body, platformChannelSpecifics, diff --git a/pubspec.lock b/pubspec.lock index 97816db2..35053e28 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -572,14 +572,14 @@ packages: name: flutter_local_notifications url: "https://pub.dartlang.org" source: hosted - version: "9.4.1" + version: "9.7.0" flutter_local_notifications_linux: dependency: transitive description: name: flutter_local_notifications_linux url: "https://pub.dartlang.org" source: hosted - version: "0.4.2" + version: "0.5.0+1" flutter_local_notifications_platform_interface: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 9fbc7b2f..881536c0 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -35,7 +35,7 @@ dependencies: flutter_app_lock: ^2.0.0 flutter_blurhash: ^0.7.0 flutter_cache_manager: ^3.3.0 - flutter_local_notifications: ^9.4.0 + flutter_local_notifications: ^9.7.0 flutter_localizations: sdk: flutter flutter_map: ^1.1.0