diff --git a/assets/l10n/intl_en.arb b/assets/l10n/intl_en.arb index da7d6cf1..e243d35b 100644 --- a/assets/l10n/intl_en.arb +++ b/assets/l10n/intl_en.arb @@ -2529,5 +2529,6 @@ }, "jumpToLastReadMessage": "Jump to last read message", "readUpToHere": "Read up to here", - "jump": "Jump" + "jump": "Jump", + "openLinkInBrowser": "Open link in browser" } diff --git a/lib/pages/chat/events/html_message.dart b/lib/pages/chat/events/html_message.dart index fe9b274a..06f27a6d 100644 --- a/lib/pages/chat/events/html_message.dart +++ b/lib/pages/chat/events/html_message.dart @@ -7,7 +7,6 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/widgets/matrix.dart'; import '../../../config/app_config.dart'; import '../../../config/setting_keys.dart'; -import '../../../pages/image_viewer/image_viewer.dart'; import '../../../utils/matrix_sdk_extensions/matrix_locals.dart'; import '../../../utils/url_launcher.dart'; @@ -83,24 +82,7 @@ class HtmlMessage extends StatelessWidget { ) .toString(); }, - onImageTap: (String mxc) => showDialog( - context: Matrix.of(context).navigatorContext, - useRootNavigator: false, - builder: (_) => ImageViewer( - Event( - type: EventTypes.Message, - content: { - 'body': mxc, - 'url': mxc, - 'msgtype': MessageTypes.Image, - }, - senderId: room.client.userID!, - originServerTs: DateTime.now(), - eventId: 'fake_event', - room: room, - ), - ), - ), + onImageTap: (url) => UrlLauncher(context, url).launchUrl(), setCodeLanguage: (String key, String value) async { await matrix.store.setItem('${SettingKeys.codeLanguage}.$key', value); }, diff --git a/lib/utils/url_launcher.dart b/lib/utils/url_launcher.dart index 5329d32f..f02cbf7d 100644 --- a/lib/utils/url_launcher.dart +++ b/lib/utils/url_launcher.dart @@ -22,7 +22,7 @@ class UrlLauncher { const UrlLauncher(this.context, this.url); - void launchUrl() { + void launchUrl() async { if (url!.toLowerCase().startsWith(AppConfig.deepLinkPrefix) || url!.toLowerCase().startsWith(AppConfig.inviteLinkPrefix) || {'#', '@', '!', '+', '\$'}.contains(url![0]) || @@ -37,6 +37,15 @@ class UrlLauncher { ); return; } + final consent = await showOkCancelAlertDialog( + context: context, + title: L10n.of(context)!.openLinkInBrowser, + message: url, + okLabel: L10n.of(context)!.ok, + cancelLabel: L10n.of(context)!.cancel, + ); + if (consent != OkCancelResult.ok) return; + if (!{'https', 'http'}.contains(uri.scheme)) { // just launch non-https / non-http uris directly