#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
|
### 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
|
||||||
|
|
||||||
|
|
|
@ -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) }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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",
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -30,4 +30,6 @@ enum VideoLoopMode { never, shortOnly, always }
|
||||||
|
|
||||||
enum ViewerTransition { slide, parallax, fade, zoomIn, none }
|
enum ViewerTransition { slide, parallax, fade, zoomIn, none }
|
||||||
|
|
||||||
|
enum WidgetOpenPage { home, viewer }
|
||||||
|
|
||||||
enum WidgetShape { rrect, circle, heart }
|
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 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);
|
||||||
|
|
|
@ -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) {
|
||||||
|
final page = settings.getWidgetOpenPage(widgetId);
|
||||||
|
if (page == WidgetOpenPage.viewer) {
|
||||||
uri = settings.getWidgetUri(widgetId);
|
uri = settings.getWidgetUri(widgetId);
|
||||||
|
}
|
||||||
unawaited(WidgetService.update(widgetId));
|
unawaited(WidgetService.update(widgetId));
|
||||||
} else {
|
} else {
|
||||||
uri = intentData[intentDataKeyUri];
|
uri = intentData[intentDataKeyUri];
|
||||||
|
|
|
@ -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,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue