From beb65a8d51ea46f48cb0a8b49e6f352acf27df72 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Fri, 10 Mar 2023 11:46:36 +0100 Subject: [PATCH] minor --- android/app/src/main/AndroidManifest.xml | 2 +- lib/model/source/media_store_source.dart | 4 +++- lib/widgets/common/map/leaflet/map.dart | 5 ++++- lib/widgets/viewer/embedded/embedded_data_opener.dart | 9 +++++++-- lib/widgets/viewer/info/info_app_bar.dart | 3 +++ lib/widgets/viewer/info/info_page.dart | 3 +++ lib/widgets/viewer/info/info_search.dart | 3 +++ 7 files changed, 24 insertions(+), 5 deletions(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index f7b14d5d6..c7eebea8b 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -284,7 +284,7 @@ This change eventually prevents building the app with Flutter v3.3.3. - + diff --git a/lib/model/source/media_store_source.dart b/lib/model/source/media_store_source.dart index 7744ca664..546180916 100644 --- a/lib/model/source/media_store_source.dart +++ b/lib/model/source/media_store_source.dart @@ -11,6 +11,7 @@ import 'package:aves/model/source/enums/enums.dart'; import 'package:aves/model/vaults/vaults.dart'; import 'package:aves/services/common/services.dart'; import 'package:aves/utils/android_file_utils.dart'; +import 'package:aves/utils/file_utils.dart'; import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; @@ -201,7 +202,8 @@ class MediaStoreSource extends CollectionSource { // so we manually notify change for potential home screen filters notifyAlbumsChanged(); - debugPrint('$runtimeType refresh ${stopwatch.elapsed} done for ${knownEntries.length} known, ${allNewEntries.length} new, ${removedEntries.length} removed'); + debugPrint('$runtimeType refresh ${stopwatch.elapsed} done'); + unawaited(reportService.log('Source refresh complete in ${stopwatch.elapsed.inSeconds}s for ${knownEntries.length} known, ${allNewEntries.length} new, ${removedEntries.length} removed')); }, onError: (error) => debugPrint('$runtimeType stream error=$error'), ); diff --git a/lib/widgets/common/map/leaflet/map.dart b/lib/widgets/common/map/leaflet/map.dart index 1e3f39ca9..ec9a5b0a7 100644 --- a/lib/widgets/common/map/leaflet/map.dart +++ b/lib/widgets/common/map/leaflet/map.dart @@ -256,7 +256,10 @@ class _EntryLeafletMapState extends State> with TickerProv } Future _resetRotation() async { - final rotationTween = Tween(begin: _leafletMapController.rotation, end: 0); + final rotation = _leafletMapController.rotation; + // prevent multiple turns + final begin = (rotation.abs() % 360) * rotation.sign; + final rotationTween = Tween(begin: begin, end: 0); await _animateCamera((animation) => _leafletMapController.rotate(rotationTween.evaluate(animation))); } diff --git a/lib/widgets/viewer/embedded/embedded_data_opener.dart b/lib/widgets/viewer/embedded/embedded_data_opener.dart index 2c92fd6ce..40e85db37 100644 --- a/lib/widgets/viewer/embedded/embedded_data_opener.dart +++ b/lib/widgets/viewer/embedded/embedded_data_opener.dart @@ -12,11 +12,13 @@ import 'package:aves/widgets/viewer/entry_viewer_page.dart'; import 'package:flutter/material.dart'; class EmbeddedDataOpener extends StatelessWidget with FeedbackMixin { + final bool enabled; final AvesEntry entry; final Widget child; const EmbeddedDataOpener({ super.key, + required this.enabled, required this.entry, required this.child, }); @@ -25,8 +27,11 @@ class EmbeddedDataOpener extends StatelessWidget with FeedbackMixin { Widget build(BuildContext context) { return NotificationListener( onNotification: (notification) { - _openEmbeddedData(context, notification); - return true; + if (enabled) { + _openEmbeddedData(context, notification); + return true; + } + return false; }, child: child, ); diff --git a/lib/widgets/viewer/info/info_app_bar.dart b/lib/widgets/viewer/info/info_app_bar.dart index c306074ee..4e05c0c86 100644 --- a/lib/widgets/viewer/info/info_app_bar.dart +++ b/lib/widgets/viewer/info/info_app_bar.dart @@ -1,6 +1,7 @@ import 'package:aves/app_mode.dart'; import 'package:aves/model/actions/entry_actions.dart'; import 'package:aves/model/entry.dart'; +import 'package:aves/model/selection.dart'; import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/source/collection_lens.dart'; import 'package:aves/theme/durations.dart'; @@ -104,12 +105,14 @@ class InfoAppBar extends StatelessWidget { } void _goToSearch(BuildContext context) { + final isSelecting = context.read?>()?.isSelecting ?? false; showSearch( context: context, delegate: InfoSearchDelegate( searchFieldLabel: context.l10n.viewerInfoSearchFieldLabel, entry: entry, metadataNotifier: metadataNotifier, + isSelecting: isSelecting, ), ); } diff --git a/lib/widgets/viewer/info/info_page.dart b/lib/widgets/viewer/info/info_page.dart index 48519c873..9c9541d6c 100644 --- a/lib/widgets/viewer/info/info_page.dart +++ b/lib/widgets/viewer/info/info_page.dart @@ -4,6 +4,7 @@ import 'package:aves/model/actions/entry_actions.dart'; import 'package:aves/model/actions/events.dart'; import 'package:aves/model/entry.dart'; import 'package:aves/model/filters/filters.dart'; +import 'package:aves/model/selection.dart'; import 'package:aves/model/source/collection_lens.dart'; import 'package:aves/theme/durations.dart'; import 'package:aves/widgets/common/basic/insets.dart'; @@ -67,9 +68,11 @@ class _InfoPageState extends State { builder: (context, mainEntry, child) { if (mainEntry == null) return const SizedBox(); + final isSelecting = context.select?, bool>((v) => v?.isSelecting ?? false); Widget _buildContent({AvesEntry? pageEntry}) { final targetEntry = pageEntry ?? mainEntry; return EmbeddedDataOpener( + enabled: !isSelecting, entry: targetEntry, child: _InfoPageContent( collection: widget.collection, diff --git a/lib/widgets/viewer/info/info_search.dart b/lib/widgets/viewer/info/info_search.dart index 3bdba7745..1ed477589 100644 --- a/lib/widgets/viewer/info/info_search.dart +++ b/lib/widgets/viewer/info/info_search.dart @@ -12,6 +12,7 @@ import 'package:flutter/material.dart'; class InfoSearchDelegate extends SearchDelegate { final AvesEntry entry; final ValueNotifier> metadataNotifier; + final bool isSelecting; Map get metadata => metadataNotifier.value; @@ -19,6 +20,7 @@ class InfoSearchDelegate extends SearchDelegate { required String searchFieldLabel, required this.entry, required this.metadataNotifier, + required this.isSelecting, }) : super( searchFieldLabel: searchFieldLabel, ); @@ -113,6 +115,7 @@ class InfoSearchDelegate extends SearchDelegate { text: context.l10n.viewerInfoSearchEmpty, ) : EmbeddedDataOpener( + enabled: !isSelecting, entry: entry, child: ListView.builder( padding: const EdgeInsets.all(8),