From 0a59598188d7a96dae0993311b4fb2dd84b3b358 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Ku=C3=9Fowski?= Date: Sat, 28 Mar 2026 15:45:47 +0100 Subject: [PATCH] refactor: Bring back notification web sound but make configurable --- lib/config/setting_keys.dart | 3 ++- lib/l10n/intl_en.arb | 3 ++- .../settings_notifications_view.dart | 8 ++++++++ lib/widgets/local_notifications_extension.dart | 6 ++++++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/config/setting_keys.dart b/lib/config/setting_keys.dart index ea4d66f5..4caf8aa0 100644 --- a/lib/config/setting_keys.dart +++ b/lib/config/setting_keys.dart @@ -68,7 +68,8 @@ enum AppSettings { tos('chat.fluffy.tos_url', 'https://fluffychat.im/en/tos'), sendTimelineEventTimeout('chat.fluffy.send_timeline_event_timeout', 15), lastSeenSupportBanner('chat.fluffy.last_seen_support_banner', 0), - supportBannerOptOut('chat.fluffy.support_banner_opt_out', false); + supportBannerOptOut('chat.fluffy.support_banner_opt_out', false), + webNotificationSound('chat.fluffy.web_notification_sound', true); final String key; final T defaultValue; diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index dfc8570f..159750d1 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -2797,5 +2797,6 @@ "startVideoCall": "Start video call", "joinVoiceCall": "Join voice call", "joinVideoCall": "Join video call", - "live": "Live" + "live": "Live", + "playSoundOnNotification": "Play sound on notification" } \ No newline at end of file diff --git a/lib/pages/settings_notifications/settings_notifications_view.dart b/lib/pages/settings_notifications/settings_notifications_view.dart index 5464b724..5911306f 100644 --- a/lib/pages/settings_notifications/settings_notifications_view.dart +++ b/lib/pages/settings_notifications/settings_notifications_view.dart @@ -1,7 +1,10 @@ +import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/settings_notifications/push_rule_extensions.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; +import 'package:fluffychat/widgets/settings_switch_list_tile.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:matrix/matrix.dart'; @@ -47,6 +50,11 @@ class SettingsNotificationsView extends StatelessWidget { return SelectionArea( child: Column( children: [ + if (kIsWeb) + SettingsSwitchListTile.adaptive( + title: L10n.of(context).playSoundOnNotification, + setting: AppSettings.webNotificationSound, + ), if (pushRules != null) for (final category in pushCategories) ...[ ListTile( diff --git a/lib/widgets/local_notifications_extension.dart b/lib/widgets/local_notifications_extension.dart index cf97ad50..b6e50eef 100644 --- a/lib/widgets/local_notifications_extension.dart +++ b/lib/widgets/local_notifications_extension.dart @@ -16,6 +16,10 @@ import 'package:matrix/matrix.dart'; import 'package:universal_html/html.dart' as html; extension LocalNotificationsExtension on MatrixState { + static final html.AudioElement _audioPlayer = html.AudioElement() + ..src = 'assets/assets/sounds/notification.ogg' + ..load(); + Future showLocalNotification(Event event) async { final l10n = L10n.of(context); final roomId = event.room.id; @@ -69,6 +73,8 @@ extension LocalNotificationsExtension on MatrixState { ); } + if (AppSettings.webNotificationSound.value) _audioPlayer.play(); + html.Notification( title, body: body,