From 12420ded6150a1579cb119feee8d53c858080cff Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Sat, 24 Sep 2022 19:47:34 +0200 Subject: [PATCH] #340 widget: tap action setting --- CHANGELOG.md | 3 +- .../thibault/aves/HomeWidgetProvider.kt | 1 - lib/l10n/app_en.arb | 4 ++ lib/model/settings/defaults.dart | 1 + lib/model/settings/enums/enums.dart | 4 +- .../settings/enums/widget_open_action.dart | 14 +++++ lib/model/settings/settings.dart | 5 ++ lib/widgets/home_page.dart | 5 +- lib/widgets/settings/common/tiles.dart | 5 +- .../settings/home_widget_settings_page.dart | 18 +++++- untranslated.json | 61 ++++++++++++++++--- 11 files changed, 104 insertions(+), 17 deletions(-) create mode 100644 lib/model/settings/enums/widget_open_action.dart diff --git a/CHANGELOG.md b/CHANGELOG.md index a2ac82288..f69b2590e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,8 @@ All notable changes to this project will be documented in this file. ### Added - mosaic layout -- slideshow: option for no transition +- Slideshow: option for no transition +- Widget: tap action setting ## [v1.7.0] - 2022-09-19 diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/HomeWidgetProvider.kt b/android/app/src/main/kotlin/deckers/thibault/aves/HomeWidgetProvider.kt index 4da0d671c..dca1c04a9 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/HomeWidgetProvider.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/HomeWidgetProvider.kt @@ -198,6 +198,5 @@ class HomeWidgetProvider : AppWidgetProvider() { StreamsChannel(messenger, ImageByteStreamHandler.CHANNEL).setStreamHandlerFactory { args -> ImageByteStreamHandler(context, args) } StreamsChannel(messenger, MediaStoreStreamHandler.CHANNEL).setStreamHandlerFactory { args -> MediaStoreStreamHandler(context, args) } } - } } diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index f7d0ec753..5c397e410 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -213,6 +213,9 @@ "wallpaperTargetLock": "Lock screen", "wallpaperTargetHomeLock": "Home and lock screens", + "widgetOpenPageHome": "Open home", + "widgetOpenPageViewer": "Open viewer", + "albumTierNew": "New", "albumTierPinned": "Pinned", "albumTierSpecial": "Common", @@ -794,6 +797,7 @@ "settingsWidgetPageTitle": "Photo Frame", "settingsWidgetShowOutline": "Outline", + "settingsWidgetOpenPage": "When tapping on the widget", "settingsCollectionTile": "Collection", diff --git a/lib/model/settings/defaults.dart b/lib/model/settings/defaults.dart index 6ea5e5a22..602a067b8 100644 --- a/lib/model/settings/defaults.dart +++ b/lib/model/settings/defaults.dart @@ -136,6 +136,7 @@ class SettingsDefaults { // widget static const widgetOutline = false; static const widgetShape = WidgetShape.rrect; + static const widgetOpenPage = WidgetOpenPage.viewer; // platform settings static const isRotationLocked = false; diff --git a/lib/model/settings/enums/enums.dart b/lib/model/settings/enums/enums.dart index 2dd1a3bc5..926bbdb11 100644 --- a/lib/model/settings/enums/enums.dart +++ b/lib/model/settings/enums/enums.dart @@ -30,4 +30,6 @@ enum VideoLoopMode { never, shortOnly, always } enum ViewerTransition { slide, parallax, fade, zoomIn, none } -enum WidgetShape { rrect, circle, heart } \ No newline at end of file +enum WidgetOpenPage { home, viewer } + +enum WidgetShape { rrect, circle, heart } diff --git a/lib/model/settings/enums/widget_open_action.dart b/lib/model/settings/enums/widget_open_action.dart new file mode 100644 index 000000000..804b99b46 --- /dev/null +++ b/lib/model/settings/enums/widget_open_action.dart @@ -0,0 +1,14 @@ +import 'package:aves/model/settings/enums/enums.dart'; +import 'package:aves/widgets/common/extensions/build_context.dart'; +import 'package:flutter/widgets.dart'; + +extension ExtraWidgetOpenPage on WidgetOpenPage { + String getName(BuildContext context) { + switch (this) { + case WidgetOpenPage.home: + return context.l10n.widgetOpenPageHome; + case WidgetOpenPage.viewer: + return context.l10n.widgetOpenPageViewer; + } + } +} diff --git a/lib/model/settings/settings.dart b/lib/model/settings/settings.dart index fd21a2409..e5f8c873a 100644 --- a/lib/model/settings/settings.dart +++ b/lib/model/settings/settings.dart @@ -168,6 +168,7 @@ class Settings extends ChangeNotifier { static const widgetOutlinePrefixKey = '${_widgetKeyPrefix}outline_'; static const widgetShapePrefixKey = '${_widgetKeyPrefix}shape_'; static const widgetCollectionFiltersPrefixKey = '${_widgetKeyPrefix}collection_filters_'; + static const widgetOpenPagePrefixKey = '${_widgetKeyPrefix}open_page_'; static const widgetUriPrefixKey = '${_widgetKeyPrefix}uri_'; // platform settings @@ -707,6 +708,10 @@ class Settings extends ChangeNotifier { void setWidgetCollectionFilters(int widgetId, Set newValue) => setAndNotify('$widgetCollectionFiltersPrefixKey$widgetId', newValue.map((filter) => filter.toJson()).toList()); + WidgetOpenPage getWidgetOpenPage(int widgetId) => getEnumOrDefault('$widgetOpenPagePrefixKey$widgetId', SettingsDefaults.widgetOpenPage, WidgetOpenPage.values); + + void setWidgetOpenPage(int widgetId, WidgetOpenPage newValue) => setAndNotify('$widgetOpenPagePrefixKey$widgetId', newValue.toString()); + String? getWidgetUri(int widgetId) => getString('$widgetUriPrefixKey$widgetId'); void setWidgetUri(int widgetId, String? newValue) => setAndNotify('$widgetUriPrefixKey$widgetId', newValue); diff --git a/lib/widgets/home_page.dart b/lib/widgets/home_page.dart index 61b363e7f..d4217cbc9 100644 --- a/lib/widgets/home_page.dart +++ b/lib/widgets/home_page.dart @@ -117,7 +117,10 @@ class _HomePageState extends State { String? uri, mimeType; final widgetId = intentData[intentDataKeyWidgetId]; if (widgetId != null) { - uri = settings.getWidgetUri(widgetId); + final page = settings.getWidgetOpenPage(widgetId); + if (page == WidgetOpenPage.viewer) { + uri = settings.getWidgetUri(widgetId); + } unawaited(WidgetService.update(widgetId)); } else { uri = intentData[intentDataKeyUri]; diff --git a/lib/widgets/settings/common/tiles.dart b/lib/widgets/settings/common/tiles.dart index d12564118..13b3d606b 100644 --- a/lib/widgets/settings/common/tiles.dart +++ b/lib/widgets/settings/common/tiles.dart @@ -82,7 +82,8 @@ class SettingsSelectionListTile extends StatelessWidget { final String Function(BuildContext, T) getName; final T Function(BuildContext, Settings) selector; final ValueChanged onSelection; - final String tileTitle, dialogTitle; + final String tileTitle; + final String? dialogTitle; final TextBuilder? optionSubtitleBuilder; const SettingsSelectionListTile({ @@ -92,7 +93,7 @@ class SettingsSelectionListTile extends StatelessWidget { required this.selector, required this.onSelection, required this.tileTitle, - required this.dialogTitle, + this.dialogTitle, this.optionSubtitleBuilder, }); diff --git a/lib/widgets/settings/home_widget_settings_page.dart b/lib/widgets/settings/home_widget_settings_page.dart index 409c95878..3a91a15f3 100644 --- a/lib/widgets/settings/home_widget_settings_page.dart +++ b/lib/widgets/settings/home_widget_settings_page.dart @@ -1,5 +1,6 @@ import 'package:aves/model/filters/filters.dart'; import 'package:aves/model/settings/enums/enums.dart'; +import 'package:aves/model/settings/enums/widget_open_action.dart'; import 'package:aves/model/settings/enums/widget_shape.dart'; import 'package:aves/model/settings/settings.dart'; import 'package:aves/services/widget_service.dart'; @@ -12,6 +13,7 @@ import 'package:aves/widgets/common/identity/buttons.dart'; import 'package:aves/widgets/common/providers/media_query_data_provider.dart'; import 'package:aves/widgets/home_widget.dart'; import 'package:aves/widgets/settings/common/collection_tile.dart'; +import 'package:aves/widgets/settings/common/tiles.dart'; import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -31,8 +33,9 @@ class HomeWidgetSettingsPage extends StatefulWidget { } class _HomeWidgetSettingsPageState extends State { - late Color? _outline; late WidgetShape _shape; + late Color? _outline; + late WidgetOpenPage _openPage; late Set _collectionFilters; int get widgetId => widget.widgetId; @@ -53,8 +56,9 @@ class _HomeWidgetSettingsPageState extends State { @override void initState() { super.initState(); - _outline = settings.getWidgetOutline(widgetId); _shape = settings.getWidgetShape(widgetId); + _outline = settings.getWidgetOutline(widgetId); + _openPage = settings.getWidgetOpenPage(widgetId); _collectionFilters = settings.getWidgetCollectionFilters(widgetId); } @@ -80,6 +84,13 @@ class _HomeWidgetSettingsPageState extends State { setter: (v) => setState(() => _outline = v), ), ), + SettingsSelectionListTile( + values: WidgetOpenPage.values, + getName: (context, v) => v.getName(context), + selector: (context, s) => _openPage, + onSelection: (v) => setState(() => _openPage = v), + tileTitle: l10n.settingsWidgetOpenPage, + ), SettingsCollectionTile( filters: _collectionFilters, onSelection: (v) => setState(() => _collectionFilters = v), @@ -137,8 +148,9 @@ class _HomeWidgetSettingsPageState extends State { } void _saveSettings() { - settings.setWidgetOutline(widgetId, _outline); settings.setWidgetShape(widgetId, _shape); + settings.setWidgetOutline(widgetId, _outline); + settings.setWidgetOpenPage(widgetId, _openPage); if (!const SetEquality().equals(_collectionFilters, settings.getWidgetCollectionFilters(widgetId))) { settings.setWidgetCollectionFilters(widgetId, _collectionFilters); settings.setWidgetUri(widgetId, null); diff --git a/untranslated.json b/untranslated.json index 0e10d7809..ac86be89e 100644 --- a/untranslated.json +++ b/untranslated.json @@ -1,12 +1,18 @@ { "de": [ "viewerTransitionNone", - "tileLayoutMosaic" + "widgetOpenPageHome", + "widgetOpenPageViewer", + "tileLayoutMosaic", + "settingsWidgetOpenPage" ], "el": [ "viewerTransitionNone", - "tileLayoutMosaic" + "widgetOpenPageHome", + "widgetOpenPageViewer", + "tileLayoutMosaic", + "settingsWidgetOpenPage" ], "es": [ @@ -15,6 +21,8 @@ "filterNoTitleLabel", "filterRecentlyAddedLabel", "viewerTransitionNone", + "widgetOpenPageHome", + "widgetOpenPageViewer", "viewDialogReverseSortOrder", "tileLayoutMosaic", "sortOrderNewestFirst", @@ -27,17 +35,30 @@ "sortOrderSmallestFirst", "searchMetadataSectionTitle", "settingsConfirmationAfterMoveToBinItems", + "settingsWidgetOpenPage", "viewerInfoLabelDescription" ], + "fr": [ + "widgetOpenPageHome", + "widgetOpenPageViewer", + "settingsWidgetOpenPage" + ], + "id": [ "viewerTransitionNone", - "tileLayoutMosaic" + "widgetOpenPageHome", + "widgetOpenPageViewer", + "tileLayoutMosaic", + "settingsWidgetOpenPage" ], "it": [ "viewerTransitionNone", - "tileLayoutMosaic" + "widgetOpenPageHome", + "widgetOpenPageViewer", + "tileLayoutMosaic", + "settingsWidgetOpenPage" ], "ja": [ @@ -46,6 +67,8 @@ "filterNoTitleLabel", "filterRecentlyAddedLabel", "viewerTransitionNone", + "widgetOpenPageHome", + "widgetOpenPageViewer", "viewDialogReverseSortOrder", "tileLayoutMosaic", "sortOrderNewestFirst", @@ -59,12 +82,22 @@ "searchMetadataSectionTitle", "settingsConfirmationAfterMoveToBinItems", "settingsViewerGestureSideTapNext", + "settingsWidgetOpenPage", "viewerInfoLabelDescription" ], + "ko": [ + "widgetOpenPageHome", + "widgetOpenPageViewer", + "settingsWidgetOpenPage" + ], + "nl": [ "viewerTransitionNone", - "tileLayoutMosaic" + "widgetOpenPageHome", + "widgetOpenPageViewer", + "tileLayoutMosaic", + "settingsWidgetOpenPage" ], "pt": [ @@ -72,6 +105,8 @@ "filterNoDateLabel", "filterNoTitleLabel", "viewerTransitionNone", + "widgetOpenPageHome", + "widgetOpenPageViewer", "viewDialogReverseSortOrder", "tileLayoutMosaic", "sortOrderNewestFirst", @@ -82,12 +117,16 @@ "sortOrderLowestFirst", "sortOrderLargestFirst", "sortOrderSmallestFirst", - "searchMetadataSectionTitle" + "searchMetadataSectionTitle", + "settingsWidgetOpenPage" ], "ru": [ "viewerTransitionNone", - "tileLayoutMosaic" + "widgetOpenPageHome", + "widgetOpenPageViewer", + "tileLayoutMosaic", + "settingsWidgetOpenPage" ], "tr": [ @@ -109,6 +148,8 @@ "wallpaperTargetHome", "wallpaperTargetLock", "wallpaperTargetHomeLock", + "widgetOpenPageHome", + "widgetOpenPageViewer", "menuActionSlideshow", "viewDialogReverseSortOrder", "tileLayoutMosaic", @@ -136,12 +177,16 @@ "settingsSlideshowVideoPlaybackDialogTitle", "settingsScreenSaverPageTitle", "settingsWidgetShowOutline", + "settingsWidgetOpenPage", "viewerSetWallpaperButtonLabel", "viewerInfoLabelDescription" ], "zh": [ "viewerTransitionNone", - "tileLayoutMosaic" + "widgetOpenPageHome", + "widgetOpenPageViewer", + "tileLayoutMosaic", + "settingsWidgetOpenPage" ] }