From f5b9f9a19da292e5d5b7558ceda907f3976e09a6 Mon Sep 17 00:00:00 2001 From: Demizo Date: Mon, 3 Mar 2025 19:08:02 -0600 Subject: [PATCH] feat: allow setting default camera direction --- lib/config_manager.dart | 1 + lib/l10n/intl_en.arb | 2 ++ lib/pages/settings_page.dart | 11 +++++++ lib/widgets/entry_image_picker.dart | 47 +++++++++++++++-------------- 4 files changed, 38 insertions(+), 23 deletions(-) diff --git a/lib/config_manager.dart b/lib/config_manager.dart index 347473e8..94582dcd 100644 --- a/lib/config_manager.dart +++ b/lib/config_manager.dart @@ -45,6 +45,7 @@ class ConfigManager { 'reminderEndMinute': 0, 'defaultTemplate': -1, 'imageQuality': 90, + 'useFrontCamera': false, }; static final moodValueFieldMapping = { diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 3d9faf9e..a65057b3 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -99,6 +99,8 @@ "@settingsCustomAccentColor": {}, "settingsShowMarkdownToolbar": "Show Markdown Toolbar", "@settingsShowMarkdownToolbar": {}, + "settingsPreferFrontCamera": "Prefer front camera", + "@settingsPreferFrontCamera": {}, "settingsChangeMoodIcons": "Change Mood Icons", "@settingsChangeMoodIcons": {}, "moodIconPrompt": "Enter an icon", diff --git a/lib/pages/settings_page.dart b/lib/pages/settings_page.dart index 0e8bfe69..1409817c 100644 --- a/lib/pages/settings_page.dart +++ b/lib/pages/settings_page.dart @@ -693,6 +693,17 @@ class _SettingsPageState extends State { .setField("useMarkdownToolbar", value); }); }), + if (Platform.isAndroid) + SettingsToggle( + title: AppLocalizations.of(context)! + .settingsPreferFrontCamera, + settingsKey: "useFrontCamera", + onChanged: (value) { + setState(() { + ConfigManager.instance + .setField("useFrontCamera", value); + }); + }), Padding( padding: const EdgeInsets.only(top: 8.0), child: Text( diff --git a/lib/widgets/entry_image_picker.dart b/lib/widgets/entry_image_picker.dart index cc06f6b9..a9838773 100644 --- a/lib/widgets/entry_image_picker.dart +++ b/lib/widgets/entry_image_picker.dart @@ -30,23 +30,22 @@ class _EntryImagePickerState extends State { builder: (BuildContext context) { return AlertDialog( title: Text(AppLocalizations.of(context)!.deletePhotoTitle), - actions: [ - TextButton( - child: Text(MaterialLocalizations.of(context).deleteButtonTooltip), - onPressed: () async { - widget.onChangedImage(null); - Navigator.pop(context); - }, - - ), - TextButton( - child: Text(MaterialLocalizations.of(context).cancelButtonLabel), - onPressed: () async { - Navigator.pop(context); - }, - - ) - ], + actions: [ + TextButton( + child: + Text(MaterialLocalizations.of(context).deleteButtonTooltip), + onPressed: () async { + widget.onChangedImage(null); + Navigator.pop(context); + }, + ), + TextButton( + child: Text(MaterialLocalizations.of(context).cancelButtonLabel), + onPressed: () async { + Navigator.pop(context); + }, + ) + ], content: Text(AppLocalizations.of(context)!.deletePhotoDescription), ); }, @@ -63,10 +62,13 @@ class _EntryImagePickerState extends State { Future _takePicture() async { final picker = ImagePicker(); + final cameraDirection = ConfigManager.instance.getField('useFrontCamera') + ? CameraDevice.front + : CameraDevice.rear; final pickedFile = await picker.pickImage( - source: ImageSource.camera, - imageQuality: ConfigManager.instance.getField('imageQuality') - ); + source: ImageSource.camera, + preferredCameraDevice: cameraDirection, + imageQuality: ConfigManager.instance.getField('imageQuality')); if (pickedFile != null) { await saveImage(pickedFile); @@ -76,9 +78,8 @@ class _EntryImagePickerState extends State { Future _choosePicture() async { final picker = ImagePicker(); final pickedFile = await picker.pickImage( - source: ImageSource.gallery, - imageQuality: ConfigManager.instance.getField('imageQuality') - ); + source: ImageSource.gallery, + imageQuality: ConfigManager.instance.getField('imageQuality')); if (pickedFile != null) { await saveImage(pickedFile);