#340 widget: tap action setting
This commit is contained in:
parent
3261e79c78
commit
12420ded61
11 changed files with 104 additions and 17 deletions
|
@ -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
|
||||
|
||||
## <a id="v1.7.0"></a>[v1.7.0] - 2022-09-19
|
||||
|
||||
|
|
|
@ -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) }
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -30,4 +30,6 @@ enum VideoLoopMode { never, shortOnly, always }
|
|||
|
||||
enum ViewerTransition { slide, parallax, fade, zoomIn, none }
|
||||
|
||||
enum WidgetShape { rrect, circle, heart }
|
||||
enum WidgetOpenPage { home, viewer }
|
||||
|
||||
enum WidgetShape { rrect, circle, heart }
|
||||
|
|
14
lib/model/settings/enums/widget_open_action.dart
Normal file
14
lib/model/settings/enums/widget_open_action.dart
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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<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');
|
||||
|
||||
void setWidgetUri(int widgetId, String? newValue) => setAndNotify('$widgetUriPrefixKey$widgetId', newValue);
|
||||
|
|
|
@ -117,7 +117,10 @@ class _HomePageState extends State<HomePage> {
|
|||
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];
|
||||
|
|
|
@ -82,7 +82,8 @@ class SettingsSelectionListTile<T extends Enum> extends StatelessWidget {
|
|||
final String Function(BuildContext, T) getName;
|
||||
final T Function(BuildContext, Settings) selector;
|
||||
final ValueChanged<T> onSelection;
|
||||
final String tileTitle, dialogTitle;
|
||||
final String tileTitle;
|
||||
final String? dialogTitle;
|
||||
final TextBuilder<T>? optionSubtitleBuilder;
|
||||
|
||||
const SettingsSelectionListTile({
|
||||
|
@ -92,7 +93,7 @@ class SettingsSelectionListTile<T extends Enum> extends StatelessWidget {
|
|||
required this.selector,
|
||||
required this.onSelection,
|
||||
required this.tileTitle,
|
||||
required this.dialogTitle,
|
||||
this.dialogTitle,
|
||||
this.optionSubtitleBuilder,
|
||||
});
|
||||
|
||||
|
|
|
@ -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<HomeWidgetSettingsPage> {
|
||||
late Color? _outline;
|
||||
late WidgetShape _shape;
|
||||
late Color? _outline;
|
||||
late WidgetOpenPage _openPage;
|
||||
late Set<CollectionFilter> _collectionFilters;
|
||||
|
||||
int get widgetId => widget.widgetId;
|
||||
|
@ -53,8 +56,9 @@ class _HomeWidgetSettingsPageState extends State<HomeWidgetSettingsPage> {
|
|||
@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<HomeWidgetSettingsPage> {
|
|||
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(
|
||||
filters: _collectionFilters,
|
||||
onSelection: (v) => setState(() => _collectionFilters = v),
|
||||
|
@ -137,8 +148,9 @@ class _HomeWidgetSettingsPageState extends State<HomeWidgetSettingsPage> {
|
|||
}
|
||||
|
||||
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);
|
||||
|
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue