#340 widget: tap action setting

This commit is contained in:
Thibault Deckers 2022-09-24 19:47:34 +02:00
parent 3261e79c78
commit 12420ded61
11 changed files with 104 additions and 17 deletions

View file

@ -7,7 +7,8 @@ All notable changes to this project will be documented in this file.
### Added ### Added
- mosaic layout - mosaic layout
- slideshow: option for no transition - Slideshow: option for no transition
- Widget: tap action setting
## <a id="v1.7.0"></a>[v1.7.0] - 2022-09-19 ## <a id="v1.7.0"></a>[v1.7.0] - 2022-09-19

View file

@ -198,6 +198,5 @@ class HomeWidgetProvider : AppWidgetProvider() {
StreamsChannel(messenger, ImageByteStreamHandler.CHANNEL).setStreamHandlerFactory { args -> ImageByteStreamHandler(context, args) } StreamsChannel(messenger, ImageByteStreamHandler.CHANNEL).setStreamHandlerFactory { args -> ImageByteStreamHandler(context, args) }
StreamsChannel(messenger, MediaStoreStreamHandler.CHANNEL).setStreamHandlerFactory { args -> MediaStoreStreamHandler(context, args) } StreamsChannel(messenger, MediaStoreStreamHandler.CHANNEL).setStreamHandlerFactory { args -> MediaStoreStreamHandler(context, args) }
} }
} }
} }

View file

@ -213,6 +213,9 @@
"wallpaperTargetLock": "Lock screen", "wallpaperTargetLock": "Lock screen",
"wallpaperTargetHomeLock": "Home and lock screens", "wallpaperTargetHomeLock": "Home and lock screens",
"widgetOpenPageHome": "Open home",
"widgetOpenPageViewer": "Open viewer",
"albumTierNew": "New", "albumTierNew": "New",
"albumTierPinned": "Pinned", "albumTierPinned": "Pinned",
"albumTierSpecial": "Common", "albumTierSpecial": "Common",
@ -794,6 +797,7 @@
"settingsWidgetPageTitle": "Photo Frame", "settingsWidgetPageTitle": "Photo Frame",
"settingsWidgetShowOutline": "Outline", "settingsWidgetShowOutline": "Outline",
"settingsWidgetOpenPage": "When tapping on the widget",
"settingsCollectionTile": "Collection", "settingsCollectionTile": "Collection",

View file

@ -136,6 +136,7 @@ class SettingsDefaults {
// widget // widget
static const widgetOutline = false; static const widgetOutline = false;
static const widgetShape = WidgetShape.rrect; static const widgetShape = WidgetShape.rrect;
static const widgetOpenPage = WidgetOpenPage.viewer;
// platform settings // platform settings
static const isRotationLocked = false; static const isRotationLocked = false;

View file

@ -30,4 +30,6 @@ enum VideoLoopMode { never, shortOnly, always }
enum ViewerTransition { slide, parallax, fade, zoomIn, none } enum ViewerTransition { slide, parallax, fade, zoomIn, none }
enum WidgetShape { rrect, circle, heart } enum WidgetOpenPage { home, viewer }
enum WidgetShape { rrect, circle, heart }

View file

@ -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;
}
}
}

View file

@ -168,6 +168,7 @@ class Settings extends ChangeNotifier {
static const widgetOutlinePrefixKey = '${_widgetKeyPrefix}outline_'; static const widgetOutlinePrefixKey = '${_widgetKeyPrefix}outline_';
static const widgetShapePrefixKey = '${_widgetKeyPrefix}shape_'; static const widgetShapePrefixKey = '${_widgetKeyPrefix}shape_';
static const widgetCollectionFiltersPrefixKey = '${_widgetKeyPrefix}collection_filters_'; static const widgetCollectionFiltersPrefixKey = '${_widgetKeyPrefix}collection_filters_';
static const widgetOpenPagePrefixKey = '${_widgetKeyPrefix}open_page_';
static const widgetUriPrefixKey = '${_widgetKeyPrefix}uri_'; static const widgetUriPrefixKey = '${_widgetKeyPrefix}uri_';
// platform settings // platform settings
@ -707,6 +708,10 @@ class Settings extends ChangeNotifier {
void setWidgetCollectionFilters(int widgetId, Set<CollectionFilter> newValue) => setAndNotify('$widgetCollectionFiltersPrefixKey$widgetId', newValue.map((filter) => filter.toJson()).toList()); void setWidgetCollectionFilters(int widgetId, Set<CollectionFilter> 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'); String? getWidgetUri(int widgetId) => getString('$widgetUriPrefixKey$widgetId');
void setWidgetUri(int widgetId, String? newValue) => setAndNotify('$widgetUriPrefixKey$widgetId', newValue); void setWidgetUri(int widgetId, String? newValue) => setAndNotify('$widgetUriPrefixKey$widgetId', newValue);

View file

@ -117,7 +117,10 @@ class _HomePageState extends State<HomePage> {
String? uri, mimeType; String? uri, mimeType;
final widgetId = intentData[intentDataKeyWidgetId]; final widgetId = intentData[intentDataKeyWidgetId];
if (widgetId != null) { if (widgetId != null) {
uri = settings.getWidgetUri(widgetId); final page = settings.getWidgetOpenPage(widgetId);
if (page == WidgetOpenPage.viewer) {
uri = settings.getWidgetUri(widgetId);
}
unawaited(WidgetService.update(widgetId)); unawaited(WidgetService.update(widgetId));
} else { } else {
uri = intentData[intentDataKeyUri]; uri = intentData[intentDataKeyUri];

View file

@ -82,7 +82,8 @@ class SettingsSelectionListTile<T extends Enum> extends StatelessWidget {
final String Function(BuildContext, T) getName; final String Function(BuildContext, T) getName;
final T Function(BuildContext, Settings) selector; final T Function(BuildContext, Settings) selector;
final ValueChanged<T> onSelection; final ValueChanged<T> onSelection;
final String tileTitle, dialogTitle; final String tileTitle;
final String? dialogTitle;
final TextBuilder<T>? optionSubtitleBuilder; final TextBuilder<T>? optionSubtitleBuilder;
const SettingsSelectionListTile({ const SettingsSelectionListTile({
@ -92,7 +93,7 @@ class SettingsSelectionListTile<T extends Enum> extends StatelessWidget {
required this.selector, required this.selector,
required this.onSelection, required this.onSelection,
required this.tileTitle, required this.tileTitle,
required this.dialogTitle, this.dialogTitle,
this.optionSubtitleBuilder, this.optionSubtitleBuilder,
}); });

View file

@ -1,5 +1,6 @@
import 'package:aves/model/filters/filters.dart'; import 'package:aves/model/filters/filters.dart';
import 'package:aves/model/settings/enums/enums.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/enums/widget_shape.dart';
import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/settings/settings.dart';
import 'package:aves/services/widget_service.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/common/providers/media_query_data_provider.dart';
import 'package:aves/widgets/home_widget.dart'; import 'package:aves/widgets/home_widget.dart';
import 'package:aves/widgets/settings/common/collection_tile.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:collection/collection.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -31,8 +33,9 @@ class HomeWidgetSettingsPage extends StatefulWidget {
} }
class _HomeWidgetSettingsPageState extends State<HomeWidgetSettingsPage> { class _HomeWidgetSettingsPageState extends State<HomeWidgetSettingsPage> {
late Color? _outline;
late WidgetShape _shape; late WidgetShape _shape;
late Color? _outline;
late WidgetOpenPage _openPage;
late Set<CollectionFilter> _collectionFilters; late Set<CollectionFilter> _collectionFilters;
int get widgetId => widget.widgetId; int get widgetId => widget.widgetId;
@ -53,8 +56,9 @@ class _HomeWidgetSettingsPageState extends State<HomeWidgetSettingsPage> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_outline = settings.getWidgetOutline(widgetId);
_shape = settings.getWidgetShape(widgetId); _shape = settings.getWidgetShape(widgetId);
_outline = settings.getWidgetOutline(widgetId);
_openPage = settings.getWidgetOpenPage(widgetId);
_collectionFilters = settings.getWidgetCollectionFilters(widgetId); _collectionFilters = settings.getWidgetCollectionFilters(widgetId);
} }
@ -80,6 +84,13 @@ class _HomeWidgetSettingsPageState extends State<HomeWidgetSettingsPage> {
setter: (v) => setState(() => _outline = v), setter: (v) => setState(() => _outline = v),
), ),
), ),
SettingsSelectionListTile<WidgetOpenPage>(
values: WidgetOpenPage.values,
getName: (context, v) => v.getName(context),
selector: (context, s) => _openPage,
onSelection: (v) => setState(() => _openPage = v),
tileTitle: l10n.settingsWidgetOpenPage,
),
SettingsCollectionTile( SettingsCollectionTile(
filters: _collectionFilters, filters: _collectionFilters,
onSelection: (v) => setState(() => _collectionFilters = v), onSelection: (v) => setState(() => _collectionFilters = v),
@ -137,8 +148,9 @@ class _HomeWidgetSettingsPageState extends State<HomeWidgetSettingsPage> {
} }
void _saveSettings() { void _saveSettings() {
settings.setWidgetOutline(widgetId, _outline);
settings.setWidgetShape(widgetId, _shape); settings.setWidgetShape(widgetId, _shape);
settings.setWidgetOutline(widgetId, _outline);
settings.setWidgetOpenPage(widgetId, _openPage);
if (!const SetEquality().equals(_collectionFilters, settings.getWidgetCollectionFilters(widgetId))) { if (!const SetEquality().equals(_collectionFilters, settings.getWidgetCollectionFilters(widgetId))) {
settings.setWidgetCollectionFilters(widgetId, _collectionFilters); settings.setWidgetCollectionFilters(widgetId, _collectionFilters);
settings.setWidgetUri(widgetId, null); settings.setWidgetUri(widgetId, null);

View file

@ -1,12 +1,18 @@
{ {
"de": [ "de": [
"viewerTransitionNone", "viewerTransitionNone",
"tileLayoutMosaic" "widgetOpenPageHome",
"widgetOpenPageViewer",
"tileLayoutMosaic",
"settingsWidgetOpenPage"
], ],
"el": [ "el": [
"viewerTransitionNone", "viewerTransitionNone",
"tileLayoutMosaic" "widgetOpenPageHome",
"widgetOpenPageViewer",
"tileLayoutMosaic",
"settingsWidgetOpenPage"
], ],
"es": [ "es": [
@ -15,6 +21,8 @@
"filterNoTitleLabel", "filterNoTitleLabel",
"filterRecentlyAddedLabel", "filterRecentlyAddedLabel",
"viewerTransitionNone", "viewerTransitionNone",
"widgetOpenPageHome",
"widgetOpenPageViewer",
"viewDialogReverseSortOrder", "viewDialogReverseSortOrder",
"tileLayoutMosaic", "tileLayoutMosaic",
"sortOrderNewestFirst", "sortOrderNewestFirst",
@ -27,17 +35,30 @@
"sortOrderSmallestFirst", "sortOrderSmallestFirst",
"searchMetadataSectionTitle", "searchMetadataSectionTitle",
"settingsConfirmationAfterMoveToBinItems", "settingsConfirmationAfterMoveToBinItems",
"settingsWidgetOpenPage",
"viewerInfoLabelDescription" "viewerInfoLabelDescription"
], ],
"fr": [
"widgetOpenPageHome",
"widgetOpenPageViewer",
"settingsWidgetOpenPage"
],
"id": [ "id": [
"viewerTransitionNone", "viewerTransitionNone",
"tileLayoutMosaic" "widgetOpenPageHome",
"widgetOpenPageViewer",
"tileLayoutMosaic",
"settingsWidgetOpenPage"
], ],
"it": [ "it": [
"viewerTransitionNone", "viewerTransitionNone",
"tileLayoutMosaic" "widgetOpenPageHome",
"widgetOpenPageViewer",
"tileLayoutMosaic",
"settingsWidgetOpenPage"
], ],
"ja": [ "ja": [
@ -46,6 +67,8 @@
"filterNoTitleLabel", "filterNoTitleLabel",
"filterRecentlyAddedLabel", "filterRecentlyAddedLabel",
"viewerTransitionNone", "viewerTransitionNone",
"widgetOpenPageHome",
"widgetOpenPageViewer",
"viewDialogReverseSortOrder", "viewDialogReverseSortOrder",
"tileLayoutMosaic", "tileLayoutMosaic",
"sortOrderNewestFirst", "sortOrderNewestFirst",
@ -59,12 +82,22 @@
"searchMetadataSectionTitle", "searchMetadataSectionTitle",
"settingsConfirmationAfterMoveToBinItems", "settingsConfirmationAfterMoveToBinItems",
"settingsViewerGestureSideTapNext", "settingsViewerGestureSideTapNext",
"settingsWidgetOpenPage",
"viewerInfoLabelDescription" "viewerInfoLabelDescription"
], ],
"ko": [
"widgetOpenPageHome",
"widgetOpenPageViewer",
"settingsWidgetOpenPage"
],
"nl": [ "nl": [
"viewerTransitionNone", "viewerTransitionNone",
"tileLayoutMosaic" "widgetOpenPageHome",
"widgetOpenPageViewer",
"tileLayoutMosaic",
"settingsWidgetOpenPage"
], ],
"pt": [ "pt": [
@ -72,6 +105,8 @@
"filterNoDateLabel", "filterNoDateLabel",
"filterNoTitleLabel", "filterNoTitleLabel",
"viewerTransitionNone", "viewerTransitionNone",
"widgetOpenPageHome",
"widgetOpenPageViewer",
"viewDialogReverseSortOrder", "viewDialogReverseSortOrder",
"tileLayoutMosaic", "tileLayoutMosaic",
"sortOrderNewestFirst", "sortOrderNewestFirst",
@ -82,12 +117,16 @@
"sortOrderLowestFirst", "sortOrderLowestFirst",
"sortOrderLargestFirst", "sortOrderLargestFirst",
"sortOrderSmallestFirst", "sortOrderSmallestFirst",
"searchMetadataSectionTitle" "searchMetadataSectionTitle",
"settingsWidgetOpenPage"
], ],
"ru": [ "ru": [
"viewerTransitionNone", "viewerTransitionNone",
"tileLayoutMosaic" "widgetOpenPageHome",
"widgetOpenPageViewer",
"tileLayoutMosaic",
"settingsWidgetOpenPage"
], ],
"tr": [ "tr": [
@ -109,6 +148,8 @@
"wallpaperTargetHome", "wallpaperTargetHome",
"wallpaperTargetLock", "wallpaperTargetLock",
"wallpaperTargetHomeLock", "wallpaperTargetHomeLock",
"widgetOpenPageHome",
"widgetOpenPageViewer",
"menuActionSlideshow", "menuActionSlideshow",
"viewDialogReverseSortOrder", "viewDialogReverseSortOrder",
"tileLayoutMosaic", "tileLayoutMosaic",
@ -136,12 +177,16 @@
"settingsSlideshowVideoPlaybackDialogTitle", "settingsSlideshowVideoPlaybackDialogTitle",
"settingsScreenSaverPageTitle", "settingsScreenSaverPageTitle",
"settingsWidgetShowOutline", "settingsWidgetShowOutline",
"settingsWidgetOpenPage",
"viewerSetWallpaperButtonLabel", "viewerSetWallpaperButtonLabel",
"viewerInfoLabelDescription" "viewerInfoLabelDescription"
], ],
"zh": [ "zh": [
"viewerTransitionNone", "viewerTransitionNone",
"tileLayoutMosaic" "widgetOpenPageHome",
"widgetOpenPageViewer",
"tileLayoutMosaic",
"settingsWidgetOpenPage"
] ]
} }