diff --git a/lib/widgets/aves_app.dart b/lib/widgets/aves_app.dart index 3a2c4fded..474e7db8b 100644 --- a/lib/widgets/aves_app.dart +++ b/lib/widgets/aves_app.dart @@ -354,6 +354,7 @@ class _AvesAppState extends State with WidgetsBindingObserver { @override void didChangeAppLifecycleState(AppLifecycleState state) { debugPrint('$runtimeType lifecycle ${state.name}'); + reportService.log('Lifecycle ${state.name}'); switch (state) { case AppLifecycleState.inactive: switch (_appModeNotifier.value) { @@ -557,7 +558,7 @@ class _AvesAppState extends State with WidgetsBindingObserver { // do not reset when relaunching the app if (_appModeNotifier.value == AppMode.main && (intentData == null || intentData.isEmpty == true)) return; - reportService.log('New intent'); + reportService.log('New intent data=$intentData'); AvesApp.navigatorKey.currentState!.pushReplacement(DirectMaterialPageRoute( settings: const RouteSettings(name: HomePage.routeName), builder: (_) => _getFirstPage(intentData: intentData), diff --git a/lib/widgets/collection/app_bar.dart b/lib/widgets/collection/app_bar.dart index 398fb017b..6991d4ed9 100644 --- a/lib/widgets/collection/app_bar.dart +++ b/lib/widgets/collection/app_bar.dart @@ -666,6 +666,7 @@ class _CollectionAppBarState extends State with SingleTickerPr tileExtentController: extentController, ); }, + routeSettings: const RouteSettings(name: TileViewDialog.routeName), ); // wait for the dialog to hide as applying the change may block the UI await Future.delayed(Durations.dialogTransitionAnimation * timeDilation); diff --git a/lib/widgets/collection/entry_set_action_delegate.dart b/lib/widgets/collection/entry_set_action_delegate.dart index 284bfa8cf..c115cf3a8 100644 --- a/lib/widgets/collection/entry_set_action_delegate.dart +++ b/lib/widgets/collection/entry_set_action_delegate.dart @@ -160,6 +160,7 @@ class EntrySetActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAware } void onActionSelected(BuildContext context, EntrySetAction action) { + reportService.log('$action'); switch (action) { // general case EntrySetAction.configureView: @@ -266,6 +267,7 @@ class EntrySetActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAware content: Text(context.l10n.tooManyItemsErrorDialogMessage), actions: const [OkButton()], ), + routeSettings: const RouteSettings(name: AvesDialog.warningRouteName), ); } } @@ -471,6 +473,7 @@ class EntrySetActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAware ), ], ), + routeSettings: const RouteSettings(name: AvesDialog.warningRouteName), ); if (confirmed == null || !confirmed) return null; @@ -550,6 +553,7 @@ class EntrySetActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAware ), ], ), + routeSettings: const RouteSettings(name: AvesDialog.warningRouteName), ); if (confirmed == null || !confirmed) return; @@ -694,6 +698,7 @@ class EntrySetActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAware defaultName: defaultName ?? '', collection: collection, ), + routeSettings: const RouteSettings(name: AddShortcutDialog.routeName), ); if (result == null) return; diff --git a/lib/widgets/common/action_mixins/entry_editor.dart b/lib/widgets/common/action_mixins/entry_editor.dart index 12e2cbe66..40471bbde 100644 --- a/lib/widgets/common/action_mixins/entry_editor.dart +++ b/lib/widgets/common/action_mixins/entry_editor.dart @@ -30,6 +30,7 @@ mixin EntryEditorMixin { entry: entries.first, collection: collection, ), + routeSettings: const RouteSettings(name: EditEntryDateDialog.routeName), ); } @@ -44,6 +45,7 @@ mixin EntryEditorMixin { entry: entry, collection: collection, ), + routeSettings: const RouteSettings(name: EditEntryLocationDialog.routeName), ); } @@ -60,6 +62,7 @@ mixin EntryEditorMixin { initialTitle: initialTitle, initialDescription: initialDescription, ), + routeSettings: const RouteSettings(name: EditEntryTitleDescriptionDialog.routeName), ); } @@ -71,6 +74,7 @@ mixin EntryEditorMixin { builder: (context) => EditEntryRatingDialog( entry: entries.first, ), + routeSettings: const RouteSettings(name: EditEntryRatingDialog.routeName), ); } @@ -116,6 +120,7 @@ mixin EntryEditorMixin { builder: (context) => RemoveEntryMetadataDialog( showJpegTypes: entries.any((entry) => entry.mimeType == MimeTypes.jpeg), ), + routeSettings: const RouteSettings(name: RemoveEntryMetadataDialog.routeName), ); if (types == null || types.isEmpty) return null; @@ -132,6 +137,7 @@ mixin EntryEditorMixin { ), ], ), + routeSettings: const RouteSettings(name: AvesDialog.warningRouteName), ); if (confirmed == null || !confirmed) return null; } diff --git a/lib/widgets/common/action_mixins/entry_storage.dart b/lib/widgets/common/action_mixins/entry_storage.dart index ab4b5c834..0967d6e03 100644 --- a/lib/widgets/common/action_mixins/entry_storage.dart +++ b/lib/widgets/common/action_mixins/entry_storage.dart @@ -80,6 +80,7 @@ mixin EntryStorageMixin on FeedbackMixin, PermissionAwareMixin, SizeAwareMixin { message: originAlbums.length == 1 ? l10n.nameConflictDialogSingleSourceMessage : l10n.nameConflictDialogMultipleSourceMessage, confirmationButtonLabel: l10n.continueButtonLabel, ), + routeSettings: const RouteSettings(name: AvesSelectionDialog.routeName), ); if (value == null) return; nameConflictStrategy = value; diff --git a/lib/widgets/common/action_mixins/feedback.dart b/lib/widgets/common/action_mixins/feedback.dart index 465121404..5949bb096 100644 --- a/lib/widgets/common/action_mixins/feedback.dart +++ b/lib/widgets/common/action_mixins/feedback.dart @@ -149,10 +149,13 @@ mixin FeedbackMixin { onDone?.call(processed); }, ), + routeSettings: const RouteSettings(name: ReportOverlay.routeName), ); } class ReportOverlay extends StatefulWidget { + static const routeName = '/dialog/report_overlay'; + final Stream opStream; final int? itemCount; final VoidCallback? onCancel; diff --git a/lib/widgets/common/action_mixins/permission_aware.dart b/lib/widgets/common/action_mixins/permission_aware.dart index 803bc9f3e..f773db505 100644 --- a/lib/widgets/common/action_mixins/permission_aware.dart +++ b/lib/widgets/common/action_mixins/permission_aware.dart @@ -62,6 +62,7 @@ mixin PermissionAwareMixin { ], ); }, + routeSettings: const RouteSettings(name: AvesDialog.warningRouteName), ); // abort if the user cancels in Flutter if (confirmed == null || !confirmed) return false; @@ -73,6 +74,7 @@ mixin PermissionAwareMixin { content: Text(context.l10n.missingSystemFilePickerDialogMessage), actions: const [OkButton()], ), + routeSettings: const RouteSettings(name: AvesDialog.warningRouteName), ); return false; } @@ -96,6 +98,7 @@ mixin PermissionAwareMixin { actions: const [OkButton()], ); }, + routeSettings: const RouteSettings(name: AvesDialog.warningRouteName), ); } } diff --git a/lib/widgets/common/action_mixins/size_aware.dart b/lib/widgets/common/action_mixins/size_aware.dart index 5e57bb021..cfcb39df0 100644 --- a/lib/widgets/common/action_mixins/size_aware.dart +++ b/lib/widgets/common/action_mixins/size_aware.dart @@ -88,6 +88,7 @@ mixin SizeAwareMixin { actions: const [OkButton()], ); }, + routeSettings: const RouteSettings(name: AvesDialog.warningRouteName), ); } } diff --git a/lib/widgets/common/basic/color_list_tile.dart b/lib/widgets/common/basic/color_list_tile.dart index 301ce6474..b33196a67 100644 --- a/lib/widgets/common/basic/color_list_tile.dart +++ b/lib/widgets/common/basic/color_list_tile.dart @@ -40,6 +40,7 @@ class ColorListTile extends StatelessWidget { builder: (context) => ColorPickerDialog( initialValue: value, ), + routeSettings: const RouteSettings(name: ColorPickerDialog.routeName), ); if (color != null) { onChanged(color); @@ -50,6 +51,8 @@ class ColorListTile extends StatelessWidget { } class ColorPickerDialog extends StatefulWidget { + static const routeName = '/dialog/pick_color'; + final Color initialValue; const ColorPickerDialog({ diff --git a/lib/widgets/common/behaviour/route_tracker.dart b/lib/widgets/common/behaviour/route_tracker.dart index e86f45559..274e08a74 100644 --- a/lib/widgets/common/behaviour/route_tracker.dart +++ b/lib/widgets/common/behaviour/route_tracker.dart @@ -3,16 +3,16 @@ import 'package:flutter/material.dart'; class ReportingRouteTracker extends NavigatorObserver { @override - void didPush(Route route, Route? previousRoute) => reportService.log('Nav didPush to ${_name(route)}'); + void didPush(Route route, Route? previousRoute) => reportService.log('Nav push to ${_name(route)}'); @override - void didPop(Route route, Route? previousRoute) => reportService.log('Nav didPop to ${_name(previousRoute)}'); + void didPop(Route route, Route? previousRoute) => reportService.log('Nav pop to ${_name(previousRoute)}'); @override - void didRemove(Route route, Route? previousRoute) => reportService.log('Nav didRemove to ${_name(previousRoute)}'); + void didRemove(Route route, Route? previousRoute) => reportService.log('Nav remove to ${_name(previousRoute)}'); @override - void didReplace({Route? newRoute, Route? oldRoute}) => reportService.log('Nav didReplace to ${_name(newRoute)}'); + void didReplace({Route? newRoute, Route? oldRoute}) => reportService.log('Nav replace to ${_name(newRoute)}'); String _name(Route? route) => route?.settings.name ?? 'unnamed ${route?.runtimeType}'; } diff --git a/lib/widgets/common/search/page.dart b/lib/widgets/common/search/page.dart index 3ef96f5ec..31bfca47d 100644 --- a/lib/widgets/common/search/page.dart +++ b/lib/widgets/common/search/page.dart @@ -13,11 +13,11 @@ import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; class SearchPage extends StatefulWidget { + static const routeName = '/search'; + final AvesSearchDelegate delegate; final Animation animation; - static const routeName = '/search'; - const SearchPage({ super.key, required this.delegate, diff --git a/lib/widgets/dialogs/add_shortcut_dialog.dart b/lib/widgets/dialogs/add_shortcut_dialog.dart index e2c906de4..f25fc4108 100644 --- a/lib/widgets/dialogs/add_shortcut_dialog.dart +++ b/lib/widgets/dialogs/add_shortcut_dialog.dart @@ -14,6 +14,8 @@ import 'package:tuple/tuple.dart'; import 'aves_dialog.dart'; class AddShortcutDialog extends StatefulWidget { + static const routeName = '/dialog/add_shortcut'; + final CollectionLens? collection; final String defaultName; diff --git a/lib/widgets/dialogs/aves_confirmation_dialog.dart b/lib/widgets/dialogs/aves_confirmation_dialog.dart index e72b80cf3..f0cd3ff53 100644 --- a/lib/widgets/dialogs/aves_confirmation_dialog.dart +++ b/lib/widgets/dialogs/aves_confirmation_dialog.dart @@ -43,6 +43,7 @@ Future showConfirmationDialog({ delegate: effectiveDelegate, confirmationButtonLabel: confirmationButtonLabel, ), + routeSettings: const RouteSettings(name: _AvesConfirmationDialog.routeName), ); if (confirmed == null) return false; @@ -78,6 +79,8 @@ void _skipConfirmation(ConfirmationDialog type) { } class _AvesConfirmationDialog extends StatefulWidget { + static const routeName = '/dialog/confirmation'; + final ConfirmationDialog type; final ConfirmationDialogDelegate delegate; final String confirmationButtonLabel; diff --git a/lib/widgets/dialogs/aves_dialog.dart b/lib/widgets/dialogs/aves_dialog.dart index 27a9fa83e..2233e8349 100644 --- a/lib/widgets/dialogs/aves_dialog.dart +++ b/lib/widgets/dialogs/aves_dialog.dart @@ -5,6 +5,9 @@ import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:flutter/material.dart'; class AvesDialog extends StatelessWidget { + static const confirmationRouteName = '/dialog/confirmation'; + static const warningRouteName = '/dialog/warning'; + final String? title; final ScrollController scrollController; final List? scrollableContent; @@ -157,6 +160,7 @@ Future showNoMatchingAppDialog(BuildContext context) => showDialog( content: Text(context.l10n.noMatchingAppDialogMessage), actions: const [OkButton()], ), + routeSettings: const RouteSettings(name: AvesDialog.warningRouteName), ); class CancelButton extends StatelessWidget { diff --git a/lib/widgets/dialogs/aves_selection_dialog.dart b/lib/widgets/dialogs/aves_selection_dialog.dart index c361c0e64..bede0ca1c 100644 --- a/lib/widgets/dialogs/aves_selection_dialog.dart +++ b/lib/widgets/dialogs/aves_selection_dialog.dart @@ -13,6 +13,7 @@ Future showSelectionDialog({ final value = await showDialog( context: context, builder: builder, + routeSettings: const RouteSettings(name: AvesSelectionDialog.routeName), ); // wait for the dialog to hide as applying the change may block the UI await Future.delayed(Durations.dialogTransitionAnimation * timeDilation); @@ -24,6 +25,8 @@ Future showSelectionDialog({ typedef TextBuilder = String Function(T value); class AvesSelectionDialog extends StatefulWidget { + static const routeName = '/dialog/selection'; + final T initialValue; final Map options; final TextBuilder? optionSubtitleBuilder; diff --git a/lib/widgets/dialogs/entry_editors/edit_date_dialog.dart b/lib/widgets/dialogs/entry_editors/edit_date_dialog.dart index c113fd6f9..56bf224cf 100644 --- a/lib/widgets/dialogs/entry_editors/edit_date_dialog.dart +++ b/lib/widgets/dialogs/entry_editors/edit_date_dialog.dart @@ -21,6 +21,8 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class EditEntryDateDialog extends StatefulWidget { + static const routeName = '/dialog/edit_entry_date'; + final AvesEntry entry; final CollectionLens? collection; diff --git a/lib/widgets/dialogs/entry_editors/edit_description_dialog.dart b/lib/widgets/dialogs/entry_editors/edit_description_dialog.dart index 778ff992d..4478de495 100644 --- a/lib/widgets/dialogs/entry_editors/edit_description_dialog.dart +++ b/lib/widgets/dialogs/entry_editors/edit_description_dialog.dart @@ -6,6 +6,8 @@ import 'package:aves/widgets/dialogs/aves_dialog.dart'; import 'package:flutter/material.dart'; class EditEntryTitleDescriptionDialog extends StatefulWidget { + static const routeName = '/dialog/edit_entry_title_description'; + final String initialTitle, initialDescription; const EditEntryTitleDescriptionDialog({ diff --git a/lib/widgets/dialogs/entry_editors/edit_location_dialog.dart b/lib/widgets/dialogs/entry_editors/edit_location_dialog.dart index eaa17ad93..b55533e9b 100644 --- a/lib/widgets/dialogs/entry_editors/edit_location_dialog.dart +++ b/lib/widgets/dialogs/entry_editors/edit_location_dialog.dart @@ -22,6 +22,8 @@ import 'package:latlong2/latlong.dart'; import 'package:provider/provider.dart'; class EditEntryLocationDialog extends StatefulWidget { + static const routeName = '/dialog/edit_entry_location'; + final AvesEntry entry; final CollectionLens? collection; diff --git a/lib/widgets/dialogs/entry_editors/edit_rating_dialog.dart b/lib/widgets/dialogs/entry_editors/edit_rating_dialog.dart index 2cab9a9c9..e1dab151a 100644 --- a/lib/widgets/dialogs/entry_editors/edit_rating_dialog.dart +++ b/lib/widgets/dialogs/entry_editors/edit_rating_dialog.dart @@ -6,6 +6,8 @@ import 'package:aves/widgets/dialogs/aves_dialog.dart'; import 'package:flutter/material.dart'; class EditEntryRatingDialog extends StatefulWidget { + static const routeName = '/dialog/edit_entry_rating'; + final AvesEntry entry; const EditEntryRatingDialog({ diff --git a/lib/widgets/dialogs/entry_editors/remove_metadata_dialog.dart b/lib/widgets/dialogs/entry_editors/remove_metadata_dialog.dart index 53cf52d91..baba84206 100644 --- a/lib/widgets/dialogs/entry_editors/remove_metadata_dialog.dart +++ b/lib/widgets/dialogs/entry_editors/remove_metadata_dialog.dart @@ -16,6 +16,8 @@ import 'package:provider/provider.dart'; import '../aves_dialog.dart'; class RemoveEntryMetadataDialog extends StatefulWidget { + static const routeName = '/dialog/remove_entry_metadata'; + final bool showJpegTypes; const RemoveEntryMetadataDialog({ diff --git a/lib/widgets/dialogs/entry_editors/rename_entry_dialog.dart b/lib/widgets/dialogs/entry_editors/rename_entry_dialog.dart index a20b95466..36f4fb0d8 100644 --- a/lib/widgets/dialogs/entry_editors/rename_entry_dialog.dart +++ b/lib/widgets/dialogs/entry_editors/rename_entry_dialog.dart @@ -9,6 +9,8 @@ import 'package:flutter/material.dart'; import '../aves_dialog.dart'; class RenameEntryDialog extends StatefulWidget { + static const routeName = '/dialog/rename_entry'; + final AvesEntry entry; const RenameEntryDialog({ diff --git a/lib/widgets/dialogs/export_entry_dialog.dart b/lib/widgets/dialogs/export_entry_dialog.dart index cd69c5901..6cce70cde 100644 --- a/lib/widgets/dialogs/export_entry_dialog.dart +++ b/lib/widgets/dialogs/export_entry_dialog.dart @@ -9,6 +9,8 @@ import 'package:flutter/material.dart'; import 'aves_dialog.dart'; class ExportEntryDialog extends StatefulWidget { + static const routeName = '/dialog/export_entry'; + final AvesEntry entry; const ExportEntryDialog({ diff --git a/lib/widgets/dialogs/filter_editors/cover_selection_dialog.dart b/lib/widgets/dialogs/filter_editors/cover_selection_dialog.dart index 267cbcd25..3dde93755 100644 --- a/lib/widgets/dialogs/filter_editors/cover_selection_dialog.dart +++ b/lib/widgets/dialogs/filter_editors/cover_selection_dialog.dart @@ -23,6 +23,8 @@ import 'package:provider/provider.dart'; import 'package:tuple/tuple.dart'; class CoverSelectionDialog extends StatefulWidget { + static const routeName = '/dialog/select_cover'; + final CollectionFilter filter; final AvesEntry? customEntry; final String? customPackage; @@ -384,6 +386,7 @@ class _CoverSelectionDialogState extends State { // picker controls are not on edge and palette panel is more stable initialValue: _customColor ?? const Color(0xff3f51b5), ), + routeSettings: const RouteSettings(name: ColorPickerDialog.routeName), ); if (color != null) { _customColor = color; diff --git a/lib/widgets/dialogs/filter_editors/create_album_dialog.dart b/lib/widgets/dialogs/filter_editors/create_album_dialog.dart index 42af44988..579c5de88 100644 --- a/lib/widgets/dialogs/filter_editors/create_album_dialog.dart +++ b/lib/widgets/dialogs/filter_editors/create_album_dialog.dart @@ -10,6 +10,8 @@ import 'package:flutter/material.dart'; import '../aves_dialog.dart'; class CreateAlbumDialog extends StatefulWidget { + static const routeName = '/dialog/create_album'; + const CreateAlbumDialog({super.key}); @override diff --git a/lib/widgets/dialogs/filter_editors/rename_album_dialog.dart b/lib/widgets/dialogs/filter_editors/rename_album_dialog.dart index 0ea04ce65..0d254a30b 100644 --- a/lib/widgets/dialogs/filter_editors/rename_album_dialog.dart +++ b/lib/widgets/dialogs/filter_editors/rename_album_dialog.dart @@ -6,6 +6,8 @@ import 'package:aves/widgets/dialogs/aves_dialog.dart'; import 'package:flutter/material.dart'; class RenameAlbumDialog extends StatefulWidget { + static const routeName = '/dialog/rename_album'; + final String album; const RenameAlbumDialog({ diff --git a/lib/widgets/dialogs/pick_dialogs/album_pick_page.dart b/lib/widgets/dialogs/pick_dialogs/album_pick_page.dart index 093035a41..d2cabd10b 100644 --- a/lib/widgets/dialogs/pick_dialogs/album_pick_page.dart +++ b/lib/widgets/dialogs/pick_dialogs/album_pick_page.dart @@ -183,6 +183,7 @@ class _AlbumPickPageState extends State<_AlbumPickPage> { final newAlbum = await showDialog( context: context, builder: (context) => const CreateAlbumDialog(), + routeSettings: const RouteSettings(name: CreateAlbumDialog.routeName), ); // wait for the dialog to hide as applying the change may block the UI await Future.delayed(Durations.dialogTransitionAnimation * timeDilation); diff --git a/lib/widgets/dialogs/tile_view_dialog.dart b/lib/widgets/dialogs/tile_view_dialog.dart index e8bc31513..09d3e2b65 100644 --- a/lib/widgets/dialogs/tile_view_dialog.dart +++ b/lib/widgets/dialogs/tile_view_dialog.dart @@ -14,6 +14,8 @@ import 'package:tuple/tuple.dart'; import 'aves_dialog.dart'; class TileViewDialog extends StatefulWidget { + static const routeName = '/dialog/tile_view'; + final Tuple4 initialValue; final List> sortOptions; final List> groupOptions; diff --git a/lib/widgets/dialogs/video_speed_dialog.dart b/lib/widgets/dialogs/video_speed_dialog.dart index 51e2129ca..b38073f9d 100644 --- a/lib/widgets/dialogs/video_speed_dialog.dart +++ b/lib/widgets/dialogs/video_speed_dialog.dart @@ -4,6 +4,8 @@ import 'package:flutter/material.dart'; import 'aves_dialog.dart'; class VideoSpeedDialog extends StatefulWidget { + static const routeName = '/dialog/select_video_speed'; + final double current, min, max; const VideoSpeedDialog({ diff --git a/lib/widgets/dialogs/video_stream_selection_dialog.dart b/lib/widgets/dialogs/video_stream_selection_dialog.dart index 331c33191..eb0e65350 100644 --- a/lib/widgets/dialogs/video_stream_selection_dialog.dart +++ b/lib/widgets/dialogs/video_stream_selection_dialog.dart @@ -11,6 +11,8 @@ import 'package:flutter/material.dart'; import 'aves_dialog.dart'; class VideoStreamSelectionDialog extends StatefulWidget { + static const routeName = '/dialog/select_video_stream'; + final Map streams; const VideoStreamSelectionDialog({ diff --git a/lib/widgets/dialogs/wallpaper_settings_dialog.dart b/lib/widgets/dialogs/wallpaper_settings_dialog.dart index 864cee848..0e6d46fad 100644 --- a/lib/widgets/dialogs/wallpaper_settings_dialog.dart +++ b/lib/widgets/dialogs/wallpaper_settings_dialog.dart @@ -8,6 +8,8 @@ import 'package:tuple/tuple.dart'; import 'aves_dialog.dart'; class WallpaperSettingsDialog extends StatefulWidget { + static const routeName = '/dialog/wallpaper_settings'; + const WallpaperSettingsDialog({super.key}); @override diff --git a/lib/widgets/filter_grids/common/action_delegates/album_set.dart b/lib/widgets/filter_grids/common/action_delegates/album_set.dart index 2ed6369fb..390631ffa 100644 --- a/lib/widgets/filter_grids/common/action_delegates/album_set.dart +++ b/lib/widgets/filter_grids/common/action_delegates/album_set.dart @@ -117,6 +117,7 @@ class AlbumChipSetActionDelegate extends ChipSetActionDelegate with @override void onActionSelected(BuildContext context, Set filters, ChipSetAction action) { + reportService.log('$action'); switch (action) { // general case ChipSetAction.createAlbum: @@ -159,6 +160,7 @@ class AlbumChipSetActionDelegate extends ChipSetActionDelegate with tileExtentController: extentController, ); }, + routeSettings: const RouteSettings(name: TileViewDialog.routeName), ); // wait for the dialog to hide as applying the change may block the UI await Future.delayed(Durations.dialogTransitionAnimation * timeDilation); @@ -174,6 +176,7 @@ class AlbumChipSetActionDelegate extends ChipSetActionDelegate with final newAlbum = await showDialog( context: context, builder: (context) => const CreateAlbumDialog(), + routeSettings: const RouteSettings(name: CreateAlbumDialog.routeName), ); if (newAlbum != null && newAlbum.isNotEmpty) { final source = context.read(); @@ -243,6 +246,7 @@ class AlbumChipSetActionDelegate extends ChipSetActionDelegate with ), ], ), + routeSettings: const RouteSettings(name: AvesDialog.confirmationRouteName), ); if (confirmed == null || !confirmed) return; @@ -301,6 +305,7 @@ class AlbumChipSetActionDelegate extends ChipSetActionDelegate with final newName = await showDialog( context: context, builder: (context) => RenameAlbumDialog(album: album), + routeSettings: const RouteSettings(name: RenameAlbumDialog.routeName), ); if (newName == null || newName.isEmpty) return; diff --git a/lib/widgets/filter_grids/common/action_delegates/chip.dart b/lib/widgets/filter_grids/common/action_delegates/chip.dart index 083bbb283..dab96165f 100644 --- a/lib/widgets/filter_grids/common/action_delegates/chip.dart +++ b/lib/widgets/filter_grids/common/action_delegates/chip.dart @@ -2,6 +2,7 @@ import 'package:aves/model/actions/chip_actions.dart'; import 'package:aves/model/filters/filters.dart'; import 'package:aves/model/highlight.dart'; import 'package:aves/model/settings/settings.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/dialogs/aves_dialog.dart'; import 'package:aves/widgets/filter_grids/albums_page.dart'; @@ -12,6 +13,7 @@ import 'package:provider/provider.dart'; class ChipActionDelegate { void onActionSelected(BuildContext context, CollectionFilter filter, ChipAction action) { + reportService.log('$action'); switch (action) { case ChipAction.goToAlbumPage: _goTo(context, filter, AlbumListPage.routeName, (context) => const AlbumListPage()); @@ -62,6 +64,7 @@ class ChipActionDelegate { ), ], ), + routeSettings: const RouteSettings(name: AvesDialog.confirmationRouteName), ); if (confirmed == null || !confirmed) return; diff --git a/lib/widgets/filter_grids/common/action_delegates/chip_set.dart b/lib/widgets/filter_grids/common/action_delegates/chip_set.dart index 4030fc862..b6a909325 100644 --- a/lib/widgets/filter_grids/common/action_delegates/chip_set.dart +++ b/lib/widgets/filter_grids/common/action_delegates/chip_set.dart @@ -11,6 +11,7 @@ import 'package:aves/model/source/collection_lens.dart'; import 'package:aves/model/source/collection_source.dart'; import 'package:aves/model/source/enums/enums.dart'; import 'package:aves/model/source/enums/view.dart'; +import 'package:aves/services/common/services.dart'; import 'package:aves/theme/colors.dart'; import 'package:aves/theme/durations.dart'; import 'package:aves/widgets/common/action_mixins/feedback.dart'; @@ -150,6 +151,7 @@ abstract class ChipSetActionDelegate with FeedbackMi } void onActionSelected(BuildContext context, Set filters, ChipSetAction action) { + reportService.log('$action'); switch (action) { // general case ChipSetAction.configureView: @@ -235,6 +237,7 @@ abstract class ChipSetActionDelegate with FeedbackMi tileExtentController: extentController, ); }, + routeSettings: const RouteSettings(name: TileViewDialog.routeName), ); // wait for the dialog to hide as applying the change may block the UI await Future.delayed(Durations.dialogTransitionAnimation * timeDilation); @@ -313,6 +316,7 @@ abstract class ChipSetActionDelegate with FeedbackMi ), ], ), + routeSettings: const RouteSettings(name: AvesDialog.confirmationRouteName), ); if (confirmed == null || !confirmed) return; @@ -333,6 +337,7 @@ abstract class ChipSetActionDelegate with FeedbackMi customPackage: existingCover?.item2, customColor: existingCover?.item3, ), + routeSettings: const RouteSettings(name: CoverSelectionDialog.routeName), ); if (selectedCover == null) return; diff --git a/lib/widgets/viewer/action/entry_action_delegate.dart b/lib/widgets/viewer/action/entry_action_delegate.dart index d70063b92..6ae0035f1 100644 --- a/lib/widgets/viewer/action/entry_action_delegate.dart +++ b/lib/widgets/viewer/action/entry_action_delegate.dart @@ -173,6 +173,7 @@ class EntryActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAwareMix } void onActionSelected(BuildContext context, EntryAction action) { + reportService.log('$action'); final targetEntry = _getTargetEntry(context, action); switch (action) { @@ -345,6 +346,7 @@ class EntryActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAwareMix builder: (context) => AddShortcutDialog( defaultName: targetEntry.bestTitle ?? '', ), + routeSettings: const RouteSettings(name: AddShortcutDialog.routeName), ); if (result == null) return; @@ -407,6 +409,7 @@ class EntryActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAwareMix final options = await showDialog( context: context, builder: (context) => ExportEntryDialog(entry: targetEntry), + routeSettings: const RouteSettings(name: ExportEntryDialog.routeName), ); if (options == null) return; @@ -504,6 +507,7 @@ class EntryActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAwareMix final newName = await showDialog( context: context, builder: (context) => RenameEntryDialog(entry: targetEntry), + routeSettings: const RouteSettings(name: RenameEntryDialog.routeName), ); if (newName == null || newName.isEmpty || newName == targetEntry.filenameWithoutExtension) return; diff --git a/lib/widgets/viewer/action/entry_info_action_delegate.dart b/lib/widgets/viewer/action/entry_info_action_delegate.dart index c24feb64b..59d1cbb74 100644 --- a/lib/widgets/viewer/action/entry_info_action_delegate.dart +++ b/lib/widgets/viewer/action/entry_info_action_delegate.dart @@ -85,6 +85,7 @@ class EntryInfoActionDelegate with FeedbackMixin, PermissionAwareMixin, EntryEdi } void onActionSelected(BuildContext context, AvesEntry targetEntry, CollectionLens? collection, EntryAction action) async { + await reportService.log('$action'); _eventStreamController.add(ActionStartedEvent(action)); switch (action) { // general @@ -239,6 +240,7 @@ class EntryInfoActionDelegate with FeedbackMixin, PermissionAwareMixin, EntryEdi ), ], ), + routeSettings: const RouteSettings(name: AvesDialog.warningRouteName), ); if (confirmed == null || !confirmed) return; diff --git a/lib/widgets/viewer/overlay/wallpaper_buttons.dart b/lib/widgets/viewer/overlay/wallpaper_buttons.dart index b11b84b77..ba894d6e1 100644 --- a/lib/widgets/viewer/overlay/wallpaper_buttons.dart +++ b/lib/widgets/viewer/overlay/wallpaper_buttons.dart @@ -59,6 +59,7 @@ class WallpaperButtons extends StatelessWidget with FeedbackMixin { final value = await showDialog>( context: context, builder: (context) => const WallpaperSettingsDialog(), + routeSettings: const RouteSettings(name: WallpaperSettingsDialog.routeName), ); if (value == null) return; diff --git a/lib/widgets/viewer/video/controller.dart b/lib/widgets/viewer/video/controller.dart index f57c50fdb..f450388e2 100644 --- a/lib/widgets/viewer/video/controller.dart +++ b/lib/widgets/viewer/video/controller.dart @@ -70,7 +70,7 @@ abstract class AvesVideoController { content: Text(context.l10n.videoResumeDialogMessage(formatFriendlyDuration(Duration(milliseconds: resumeTime)))), actions: [ TextButton( - onPressed: () => Navigator.maybeOf(context)?.pop(), + onPressed: () => Navigator.maybeOf(context)?.pop(false), child: Text(context.l10n.videoStartOverButtonLabel), ), TextButton( @@ -79,6 +79,7 @@ abstract class AvesVideoController { ), ], ), + routeSettings: const RouteSettings(name: AvesDialog.confirmationRouteName), ); if (resume == null || !resume) return 0; return resumeTime; diff --git a/lib/widgets/viewer/video_action_delegate.dart b/lib/widgets/viewer/video_action_delegate.dart index 52398d8f4..e58571471 100644 --- a/lib/widgets/viewer/video_action_delegate.dart +++ b/lib/widgets/viewer/video_action_delegate.dart @@ -151,6 +151,7 @@ class VideoActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAwareMix builder: (context) => VideoStreamSelectionDialog( streams: Map.fromEntries(streams.map((stream) => MapEntry(stream, currentSelectedIndices.contains(stream.index)))), ), + routeSettings: const RouteSettings(name: VideoStreamSelectionDialog.routeName), ); if (userSelectedStreams == null || userSelectedStreams.isEmpty) return; @@ -168,6 +169,7 @@ class VideoActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAwareMix min: controller.minSpeed, max: controller.maxSpeed, ), + routeSettings: const RouteSettings(name: VideoSpeedDialog.routeName), ); if (newSpeed == null) return;