From bcf97a4273d4b6248ac04db27b3875070e7b1cf7 Mon Sep 17 00:00:00 2001 From: Zixuan James Li Date: Thu, 19 Dec 2024 14:26:44 -0500 Subject: [PATCH] Browser preference Signed-off-by: Zixuan James Li --- lib/widgets/content.dart | 10 +++++++--- test/example_data.dart | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/widgets/content.dart b/lib/widgets/content.dart index f3b369e876f..f15694d4b95 100644 --- a/lib/widgets/content.dart +++ b/lib/widgets/content.dart @@ -15,6 +15,7 @@ import '../model/avatar_url.dart'; import '../model/binding.dart'; import '../model/content.dart'; import '../model/internal_link.dart'; +import '../model/settings.dart'; import 'code_block.dart'; import 'dialog.dart'; import 'icons.dart'; @@ -1342,17 +1343,20 @@ void _launchUrl(BuildContext context, String urlString) async { return; } + final globalSettings = GlobalStoreWidget.of(context).globalSettings; bool launched = false; String? errorMessage; try { launched = await ZulipBinding.instance.launchUrl(url, - mode: switch (defaultTargetPlatform) { + mode: switch ((globalSettings.browserPreference, defaultTargetPlatform)) { + (BrowserPreference.embedded, _) => UrlLaunchMode.inAppBrowserView, + (BrowserPreference.external, _) => UrlLaunchMode.externalApplication, // On iOS we prefer LaunchMode.externalApplication because (for // HTTP URLs) LaunchMode.platformDefault uses SFSafariViewController, // which gives an awkward UX as described here: // https://chat.zulip.org/#narrow/stream/48-mobile/topic/in-app.20browser/near/1169118 - TargetPlatform.iOS => UrlLaunchMode.externalApplication, - _ => UrlLaunchMode.platformDefault, + (BrowserPreference.unset, TargetPlatform.iOS) => UrlLaunchMode.externalApplication, + (BrowserPreference.unset, _) => UrlLaunchMode.platformDefault, }); } on PlatformException catch (e) { errorMessage = e.message; diff --git a/test/example_data.dart b/test/example_data.dart index 1490ebecb6f..f63721e07f1 100644 --- a/test/example_data.dart +++ b/test/example_data.dart @@ -809,6 +809,7 @@ ChannelUpdateEvent channelUpdateEvent( const defaultGlobalSettings = GlobalSettingsData( themeSetting: ThemeSetting.unset, + browserPreference: BrowserPreference.unset, ); TestGlobalStore globalStore({