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"
]
}