Skip to content

Commit 195ff7f

Browse files
committed
settings: Add browser preference setting ui
Signed-off-by: Zixuan James Li <zixuan@zulip.com>
1 parent eaf6a88 commit 195ff7f

12 files changed

+98
-0
lines changed

assets/l10n/app_en.arb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@
2323
"@settingsPageTitle": {
2424
"description": "Title for the settings page."
2525
},
26+
"settingsUseExternalBrowser": "Use external browser",
27+
"@settingsUseExternalBrowser": {
28+
"description": "Whether to open links with external browser or not"
29+
},
2630
"switchAccountButton": "Switch account",
2731
"@switchAccountButton": {
2832
"description": "Label for main-menu button leading to the choose-account page."

lib/generated/l10n/zulip_localizations.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,12 @@ abstract class ZulipLocalizations {
141141
/// **'Settings'**
142142
String get settingsPageTitle;
143143

144+
/// Whether to open links with external browser or not
145+
///
146+
/// In en, this message translates to:
147+
/// **'Use external browser'**
148+
String get settingsUseExternalBrowser;
149+
144150
/// Label for main-menu button leading to the choose-account page.
145151
///
146152
/// In en, this message translates to:

lib/generated/l10n/zulip_localizations_ar.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ class ZulipLocalizationsAr extends ZulipLocalizations {
2626
@override
2727
String get settingsPageTitle => 'Settings';
2828

29+
@override
30+
String get settingsUseExternalBrowser => 'Use external browser';
31+
2932
@override
3033
String get switchAccountButton => 'Switch account';
3134

lib/generated/l10n/zulip_localizations_en.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ class ZulipLocalizationsEn extends ZulipLocalizations {
2626
@override
2727
String get settingsPageTitle => 'Settings';
2828

29+
@override
30+
String get settingsUseExternalBrowser => 'Use external browser';
31+
2932
@override
3033
String get switchAccountButton => 'Switch account';
3134

lib/generated/l10n/zulip_localizations_ja.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ class ZulipLocalizationsJa extends ZulipLocalizations {
2626
@override
2727
String get settingsPageTitle => 'Settings';
2828

29+
@override
30+
String get settingsUseExternalBrowser => 'Use external browser';
31+
2932
@override
3033
String get switchAccountButton => 'Switch account';
3134

lib/generated/l10n/zulip_localizations_nb.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ class ZulipLocalizationsNb extends ZulipLocalizations {
2626
@override
2727
String get settingsPageTitle => 'Settings';
2828

29+
@override
30+
String get settingsUseExternalBrowser => 'Use external browser';
31+
2932
@override
3033
String get switchAccountButton => 'Switch account';
3134

lib/generated/l10n/zulip_localizations_pl.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ class ZulipLocalizationsPl extends ZulipLocalizations {
2626
@override
2727
String get settingsPageTitle => 'Settings';
2828

29+
@override
30+
String get settingsUseExternalBrowser => 'Use external browser';
31+
2932
@override
3033
String get switchAccountButton => 'Przełącz konto';
3134

lib/generated/l10n/zulip_localizations_ru.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ class ZulipLocalizationsRu extends ZulipLocalizations {
2626
@override
2727
String get settingsPageTitle => 'Settings';
2828

29+
@override
30+
String get settingsUseExternalBrowser => 'Use external browser';
31+
2932
@override
3033
String get switchAccountButton => 'Сменить учетную запись';
3134

lib/generated/l10n/zulip_localizations_sk.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ class ZulipLocalizationsSk extends ZulipLocalizations {
2626
@override
2727
String get settingsPageTitle => 'Settings';
2828

29+
@override
30+
String get settingsUseExternalBrowser => 'Use external browser';
31+
2932
@override
3033
String get switchAccountButton => 'Zmeniť účet';
3134

lib/widgets/settings.dart

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,50 @@ class SettingsPage extends StatelessWidget {
2424
appBar: ZulipAppBar(
2525
title: Text(zulipLocalizations.settingsPageTitle)),
2626
body: Column(children: [
27+
_BrowserPreferenceSetting(),
2728
_ThemeSetting(),
2829
]));
2930
}
3031
}
3132

33+
class _BrowserPreferenceSetting extends StatefulWidget {
34+
const _BrowserPreferenceSetting();
35+
36+
@override
37+
State<_BrowserPreferenceSetting> createState() => _BrowserPreferenceSettingState();
38+
}
39+
40+
class _BrowserPreferenceSettingState extends State<_BrowserPreferenceSetting> {
41+
late bool useExternalBrowser;
42+
43+
@override
44+
void didChangeDependencies() {
45+
super.didChangeDependencies();
46+
useExternalBrowser =
47+
GlobalStoreWidget.of(context).globalSettings.effectiveBrowserPreference
48+
== BrowserPreference.external;
49+
}
50+
51+
void _handleChange(bool useExternalBrowser) {
52+
GlobalStoreWidget.of(context).updateGlobalSettings(
53+
GlobalSettingsCompanion(browserPreference: Value(
54+
useExternalBrowser ? BrowserPreference.external
55+
: BrowserPreference.embedded)));
56+
setState(() {
57+
this.useExternalBrowser = useExternalBrowser;
58+
});
59+
}
60+
61+
@override
62+
Widget build(BuildContext context) {
63+
final zulipLocalizations = ZulipLocalizations.of(context);
64+
return SwitchListTile.adaptive(
65+
title: Text(zulipLocalizations.settingsUseExternalBrowser),
66+
value: useExternalBrowser,
67+
onChanged: _handleChange);
68+
}
69+
}
70+
3271
class _ThemeSetting extends StatefulWidget {
3372
const _ThemeSetting();
3473

0 commit comments

Comments
 (0)