From ac41cbd99f6a06b1793419fd881211c63171ae4d Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sat, 25 Jan 2025 01:36:11 +0800 Subject: [PATCH] :sparkles: Toggleable preview link --- assets/translations/en-US.json | 4 ++++ assets/translations/zh-CN.json | 4 ++++ lib/providers/config.dart | 2 ++ lib/screens/settings.dart | 24 ++++++++++++++++++++++++ lib/widgets/chat/chat_message.dart | 8 +++++++- lib/widgets/post/post_item.dart | 4 +++- 6 files changed, 44 insertions(+), 2 deletions(-) diff --git a/assets/translations/en-US.json b/assets/translations/en-US.json index 1ba01f2..2145b68 100644 --- a/assets/translations/en-US.json +++ b/assets/translations/en-US.json @@ -196,6 +196,10 @@ "settingsFeatures": "Features", "settingsNotifyWithHaptic": "Haptic when Notified", "settingsNotifyWithHapticDescription": "Vibrate lightly when a new notification appears in the foreground.", + "settingsExpandPostLink": "Expand Post Link", + "settingsExpandPostLinkDescription": "Expand the post link in the post list.", + "settingsExpandChatLink": "Expand Chat Link", + "settingsExpandChatLinkDescription": "Expand the chat link in the chat list.", "settingsNetwork": "Network", "settingsNetworkServer": "HyperNet Server", "settingsNetworkServerDescription": "Set the HyperNet server address, choose ours or build your own.", diff --git a/assets/translations/zh-CN.json b/assets/translations/zh-CN.json index 814187b..3723bfc 100644 --- a/assets/translations/zh-CN.json +++ b/assets/translations/zh-CN.json @@ -194,6 +194,10 @@ "settingsFeatures": "功能", "settingsNotifyWithHaptic": "新通知时振动", "settingsNotifyWithHapticDescription": "在应用在前台时收到新通知出现时出发轻量的振动。", + "settingsExpandPostLink": "展开帖子链接", + "settingsExpandPostLinkDescription": "在帖子列表中展开显示帖子中的链接。", + "settingsExpandChatLink": "展开聊天链接", + "settingsExpandChatLinkDescription": "在聊天信息中展开显示内容中的链接。", "settingsNetwork": "网络", "settingsNetworkServer": "HyperNet 服务器", "settingsNetworkServerDescription": "设置 HyperNet 服务器地址,选择我们提供的,或者自己搭建。", diff --git a/lib/providers/config.dart b/lib/providers/config.dart index c48384a..0a888b2 100644 --- a/lib/providers/config.dart +++ b/lib/providers/config.dart @@ -15,6 +15,8 @@ const kAppBackgroundStoreKey = 'app_has_background'; const kAppColorSchemeStoreKey = 'app_color_scheme'; const kAppDrawerPreferCollapse = 'app_drawer_prefer_collapse'; const kAppNotifyWithHaptic = 'app_notify_with_haptic'; +const kAppExpandPostLink = 'app_expand_post_link'; +const kAppExpandChatLink = 'app_expand_chat_link'; const Map kImageQualityLevel = { 'settingsImageQualityLowest': FilterQuality.none, diff --git a/lib/screens/settings.dart b/lib/screens/settings.dart index 064e3ee..360c789 100644 --- a/lib/screens/settings.dart +++ b/lib/screens/settings.dart @@ -276,6 +276,30 @@ class _SettingsScreenState extends State { }); }, ), + CheckboxListTile( + secondary: const Icon(Symbols.link), + title: Text('settingsExpandPostLink').tr(), + subtitle: Text('settingsExpandPostLinkDescription').tr(), + contentPadding: const EdgeInsets.only(left: 24, right: 17), + value: _prefs.getBool(kAppExpandPostLink) ?? true, + onChanged: (value) { + setState(() { + _prefs.setBool(kAppExpandPostLink, value ?? false); + }); + }, + ), + CheckboxListTile( + secondary: const Icon(Symbols.chat), + title: Text('settingsExpandChatLink').tr(), + subtitle: Text('settingsExpandChatLinkDescription').tr(), + contentPadding: const EdgeInsets.only(left: 24, right: 17), + value: _prefs.getBool(kAppExpandChatLink) ?? true, + onChanged: (value) { + setState(() { + _prefs.setBool(kAppExpandChatLink, value ?? false); + }); + }, + ), ], ), Column( diff --git a/lib/widgets/chat/chat_message.dart b/lib/widgets/chat/chat_message.dart index 07e31d2..a846fe3 100644 --- a/lib/widgets/chat/chat_message.dart +++ b/lib/widgets/chat/chat_message.dart @@ -8,6 +8,7 @@ import 'package:material_symbols_icons/symbols.dart'; import 'package:popover/popover.dart'; import 'package:provider/provider.dart'; import 'package:styled_widget/styled_widget.dart'; +import 'package:surface/providers/config.dart'; import 'package:surface/providers/user_directory.dart'; import 'package:surface/providers/userinfo.dart'; import 'package:surface/types/chat.dart'; @@ -53,6 +54,8 @@ class ChatMessage extends StatelessWidget { final dateFormatter = DateFormat('MM/dd HH:mm'); + final cfg = context.read(); + return SwipeTo( key: Key('chat-message-${data.id}'), iconOnLeftSwipe: Symbols.reply, @@ -192,7 +195,10 @@ class ChatMessage extends StatelessWidget { ], ).opacity(isPending ? 0.5 : 1), ), - if (data.body['text'] != null && data.type == 'messages.new' && (data.body['text']?.isNotEmpty ?? false)) + if (data.body['text'] != null && + data.type == 'messages.new' && + (data.body['text']?.isNotEmpty ?? false) && + (cfg.prefs.getBool(kAppExpandChatLink) ?? true)) LinkPreviewWidget(text: data.body['text']!), if (data.preload?.attachments?.isNotEmpty ?? false) AttachmentList( diff --git a/lib/widgets/post/post_item.dart b/lib/widgets/post/post_item.dart index 47c6098..7295d98 100644 --- a/lib/widgets/post/post_item.dart +++ b/lib/widgets/post/post_item.dart @@ -203,6 +203,8 @@ class PostItem extends StatelessWidget { ?.where((ele) => ele?.mediaType != SnMediaType.image || data.type != 'article') .toList(); + final cfg = context.read(); + return Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ @@ -261,7 +263,7 @@ class PostItem extends StatelessWidget { fit: showFullPost ? BoxFit.cover : BoxFit.contain, padding: const EdgeInsets.symmetric(horizontal: 12), ), - if (data.body['content'] != null) + if (data.body['content'] != null && (cfg.prefs.getBool(kAppExpandPostLink) ?? true)) LinkPreviewWidget( text: data.body['content'], ).padding(horizontal: 4),