From def138f17390121fad9ffb6f445115cd8232f7a7 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Mon, 6 Dec 2021 13:20:32 +0200 Subject: [PATCH] Change UI font size #359 --- lib/redux/app/app_actions.dart | 2 ++ lib/redux/ui/pref_reducer.dart | 7 +++++++ lib/redux/ui/pref_state.dart | 3 +-- lib/ui/settings/device_settings.dart | 25 +++++++++++++++++++++++++ lib/ui/settings/device_settings_vm.dart | 5 +++++ lib/utils/i18n.dart | 15 +++++++++++++++ 6 files changed, 55 insertions(+), 2 deletions(-) diff --git a/lib/redux/app/app_actions.dart b/lib/redux/app/app_actions.dart index 58dda9379..1694d648f 100644 --- a/lib/redux/app/app_actions.dart +++ b/lib/redux/app/app_actions.dart @@ -136,6 +136,7 @@ class UpdateUserPreferences implements PersistPrefs { this.enableDarkMode, this.requireAuthentication, this.longPressSelectionIsDefault, + this.textScaleFactor, this.isPreviewVisible, this.accentColor, this.menuMode, @@ -168,6 +169,7 @@ class UpdateUserPreferences implements PersistPrefs { final bool persistData; final bool persistUi; final bool tapSelectedToEdit; + final double textScaleFactor; final bool showPdfPreview; final BuiltMap customColors; } diff --git a/lib/redux/ui/pref_reducer.dart b/lib/redux/ui/pref_reducer.dart index 02e070841..64cff4de7 100644 --- a/lib/redux/ui/pref_reducer.dart +++ b/lib/redux/ui/pref_reducer.dart @@ -57,6 +57,7 @@ PrefState prefReducer( historySidebarReducer(state.historySidebarMode, action) ..hideDesktopWarning = hideDesktopWarningReducer(state.hideDesktopWarning, action) + ..textScaleFactor = textScaleFactorReducer(state.textScaleFactor, action) ..isMenuVisible = menuVisibleReducer(state.isMenuVisible, action) ..isHistoryVisible = historyVisibleReducer(state.isHistoryVisible, action) ..enableDarkMode = darkModeReducer(state.enableDarkMode, action) @@ -181,6 +182,12 @@ Reducer menuVisibleReducer = combineReducers([ }), ]); +Reducer textScaleFactorReducer = combineReducers([ + TypedReducer((value, action) { + return action.textScaleFactor ?? value; + }), +]); + Reducer historyVisibleReducer = combineReducers([ TypedReducer((value, action) { return action.sidebar == AppSidebar.history ? !value : value; diff --git a/lib/redux/ui/pref_state.dart b/lib/redux/ui/pref_state.dart index be1f9a2d3..7e3245538 100644 --- a/lib/redux/ui/pref_state.dart +++ b/lib/redux/ui/pref_state.dart @@ -47,8 +47,7 @@ abstract class PrefState implements Built { static const TEXT_SCALING_NORMAL = 1.0; static const TEXT_SCALING_LARGE = 1.2; - static const TEXT_SCALING_LARGER = 1.4; - static const TEXT_SCALING_LARGEST = 1.6; + static const TEXT_SCALING_EXTRA_LARGE = 1.4; static const THEME_SIDEBAR_ACTIVE_BACKGROUND_COLOR = 'sidebar_active_background_color'; diff --git a/lib/ui/settings/device_settings.dart b/lib/ui/settings/device_settings.dart index 4ab0861a6..b6a8a90ab 100644 --- a/lib/ui/settings/device_settings.dart +++ b/lib/ui/settings/device_settings.dart @@ -6,6 +6,7 @@ import 'package:flutter/services.dart'; // Package imports: import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_styled_toast/flutter_styled_toast.dart'; +import 'package:invoiceninja_flutter/ui/app/app_builder.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; import 'package:timeago/timeago.dart' as timeago; @@ -174,6 +175,30 @@ class _DeviceSettingsState extends State ), FormCard( children: [ + Padding( + padding: const EdgeInsets.only(bottom: 10), + child: AppDropdownButton( + labelText: localization.fontSize, + value: prefState.textScaleFactor, + onChanged: (dynamic value) { + viewModel.onTextScaleFactorChanged(context, value); + AppBuilder.of(context).rebuild(); + }, + items: [ + DropdownMenuItem( + child: Text(localization.normal), + value: PrefState.TEXT_SCALING_NORMAL, + ), + DropdownMenuItem( + child: Text(localization.large), + value: PrefState.TEXT_SCALING_LARGE, + ), + DropdownMenuItem( + child: Text(localization.extraLarge), + value: PrefState.TEXT_SCALING_EXTRA_LARGE, + ), + ]), + ), FutureBuilder( future: viewModel.authenticationSupported, builder: (BuildContext context, AsyncSnapshot snapshot) { diff --git a/lib/ui/settings/device_settings_vm.dart b/lib/ui/settings/device_settings_vm.dart index f2703b9fb..68cdc1f69 100644 --- a/lib/ui/settings/device_settings_vm.dart +++ b/lib/ui/settings/device_settings_vm.dart @@ -56,6 +56,7 @@ class DeviceSettingsVM { @required this.onPersistUiChanged, @required this.onShowPdfChanged, @required this.onTapSelectedChanged, + @required this.onTextScaleFactorChanged, }); static DeviceSettingsVM fromStore(Store store) { @@ -102,6 +103,9 @@ class DeviceSettingsVM { onShowPdfChanged: (context, value) { store.dispatch(UpdateUserPreferences(showPdfPreview: value)); }, + onTextScaleFactorChanged: (context, value) { + store.dispatch(UpdateUserPreferences(textScaleFactor: value)); + }, onColorThemeChanged: (context, value) async { if (store.state.prefState.colorTheme != value) { store.dispatch(UpdateUserPreferences(colorTheme: value)); @@ -187,5 +191,6 @@ class DeviceSettingsVM { final Function(BuildContext, bool) onPersistDataChanged; final Function(BuildContext, bool) onPersistUiChanged; final Function(BuildContext, bool) onShowPdfChanged; + final Function(BuildContext, double) onTextScaleFactorChanged; final Future authenticationSupported; } diff --git a/lib/utils/i18n.dart b/lib/utils/i18n.dart index b10ade441..599a5ae8a 100644 --- a/lib/utils/i18n.dart +++ b/lib/utils/i18n.dart @@ -16,6 +16,9 @@ mixin LocalizationsProvider on LocaleCodeAware { static final Map> _localizedValues = { 'en': { // STARTER: lang key - do not remove comment + 'normal': 'Normal', + 'large': 'Large', + 'extra_large': 'Extra Large', 'show_pdf_preview': 'Show PDF Preview', 'show_pdf_preview_help': 'Display PDF preview while editing invoices', 'print_pdf': 'Print PDF', @@ -62854,6 +62857,18 @@ mixin LocalizationsProvider on LocaleCodeAware { _localizedValues[localeCode]['show_pdf_preview_help'] ?? _localizedValues['en']['show_pdf_preview_help']; + String get normal => + _localizedValues[localeCode]['normal'] ?? + _localizedValues['en']['normal']; + + String get large => + _localizedValues[localeCode]['large'] ?? + _localizedValues['en']['large']; + + String get extraLarge => + _localizedValues[localeCode]['extra_large'] ?? + _localizedValues['en']['extra_large']; + // STARTER: lang field - do not remove comment String lookup(String key) {