diff --git a/CHANGELOG.md b/CHANGELOG.md index 32a801e41..2ac3b01ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ All notable changes to this project will be documented in this file. - integrate with OS app language settings on Android >=14 +### Changed + +- remember title filter visibility by page + ## [v1.11.18] - 2024-11-18 ### Changed diff --git a/lib/model/settings/modules/filter_grids.dart b/lib/model/settings/modules/filter_grids.dart index d2a7064f7..fc5a52275 100644 --- a/lib/model/settings/modules/filter_grids.dart +++ b/lib/model/settings/modules/filter_grids.dart @@ -51,7 +51,7 @@ mixin FilterGridsSettings on SettingsAccess { set pinnedFilters(Set newValue) => set(SettingKeys.pinnedFiltersKey, newValue.map((filter) => filter.toJson()).toList()); - bool get showAlbumPickQuery => getBool(SettingKeys.showAlbumPickQueryKey) ?? false; + bool getShowTitleQuery(String routeName) => getBool(SettingKeys.showTitleQueryPrefixKey + routeName) ?? false; - set showAlbumPickQuery(bool newValue) => set(SettingKeys.showAlbumPickQueryKey, newValue); + void setShowTitleQuery(String routeName, bool newValue) => set(SettingKeys.showTitleQueryPrefixKey + routeName, newValue); } diff --git a/lib/model/settings/settings.dart b/lib/model/settings/settings.dart index 40804ec4f..e1a52c276 100644 --- a/lib/model/settings/settings.dart +++ b/lib/model/settings/settings.dart @@ -360,6 +360,12 @@ class Settings with ChangeNotifier, SettingsAccess, AppSettings, DisplaySettings } else { debugPrint('failed to import key=$key, value=$newValue is not a string'); } + } else if (key.startsWith(SettingKeys.showTitleQueryPrefixKey)) { + if (newValue is bool) { + store.setBool(key, newValue); + } else { + debugPrint('failed to import key=$key, value=$newValue is not a bool'); + } } else { switch (key) { case SettingKeys.subtitleTextColorKey: @@ -404,7 +410,6 @@ class Settings with ChangeNotifier, SettingsAccess, AppSettings, DisplaySettings case SettingKeys.stateSortReverseKey: case SettingKeys.placeSortReverseKey: case SettingKeys.tagSortReverseKey: - case SettingKeys.showAlbumPickQueryKey: case SettingKeys.showOverlayOnOpeningKey: case SettingKeys.showOverlayMinimapKey: case SettingKeys.showOverlayInfoKey: diff --git a/lib/widgets/collection/collection_page.dart b/lib/widgets/collection/collection_page.dart index 777a4f262..e2631b6bd 100644 --- a/lib/widgets/collection/collection_page.dart +++ b/lib/widgets/collection/collection_page.dart @@ -91,6 +91,7 @@ class _CollectionPageState extends State { selector: (context, selection) => selection.selectedItems.isNotEmpty, builder: (context, hasSelection, child) { final body = QueryProvider( + startEnabled: settings.getShowTitleQuery(context.currentRouteName!), initialQuery: liveFilter?.query, child: Builder( builder: (context) { diff --git a/lib/widgets/collection/entry_set_action_delegate.dart b/lib/widgets/collection/entry_set_action_delegate.dart index fd9956bc4..93f1c5618 100644 --- a/lib/widgets/collection/entry_set_action_delegate.dart +++ b/lib/widgets/collection/entry_set_action_delegate.dart @@ -181,6 +181,8 @@ class EntrySetActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAware case EntrySetAction.searchCollection: _goToSearch(context); case EntrySetAction.toggleTitleSearch: + final routeName = context.currentRouteName!; + settings.setShowTitleQuery(routeName, !settings.getShowTitleQuery(routeName)); context.read().toggle(); case EntrySetAction.addShortcut: _addShortcut(context); diff --git a/lib/widgets/common/providers/query_provider.dart b/lib/widgets/common/providers/query_provider.dart index e811e92ad..8c0506112 100644 --- a/lib/widgets/common/providers/query_provider.dart +++ b/lib/widgets/common/providers/query_provider.dart @@ -3,13 +3,13 @@ import 'package:flutter/widgets.dart'; import 'package:provider/provider.dart'; class QueryProvider extends StatelessWidget { - final bool enabled; + final bool startEnabled; final String? initialQuery; final Widget child; const QueryProvider({ super.key, - this.enabled = false, + this.startEnabled = false, this.initialQuery, required this.child, }); @@ -18,7 +18,7 @@ class QueryProvider extends StatelessWidget { Widget build(BuildContext context) { return ChangeNotifierProvider( create: (context) => Query( - enabled: enabled, + enabled: startEnabled, initialValue: initialQuery, ), child: child, diff --git a/lib/widgets/dialogs/pick_dialogs/album_pick_page.dart b/lib/widgets/dialogs/pick_dialogs/album_pick_page.dart index 12ca7aff4..107383a5d 100644 --- a/lib/widgets/dialogs/pick_dialogs/album_pick_page.dart +++ b/lib/widgets/dialogs/pick_dialogs/album_pick_page.dart @@ -114,13 +114,13 @@ class _AlbumPickPageState extends State<_AlbumPickPage> { final gridItems = AlbumListPage.getAlbumGridItems(context, source); return SelectionProvider>( child: QueryProvider( - enabled: settings.showAlbumPickQuery, + startEnabled: settings.getShowTitleQuery(context.currentRouteName!), child: FilterGridPage( settingsRouteKey: AlbumListPage.routeName, appBar: FilterGridAppBar( source: source, title: title, - actionDelegate: _AlbumChipSetPickActionDelegate(gridItems), + actionDelegate: AlbumChipSetActionDelegate(gridItems), actionsBuilder: _buildActions, isEmpty: false, appBarHeightNotifier: _appBarHeightNotifier, @@ -287,15 +287,3 @@ class _AlbumPickPageState extends State<_AlbumPickPage> { Navigator.maybeOf(context)?.pop(filter); } } - -class _AlbumChipSetPickActionDelegate extends AlbumChipSetActionDelegate { - _AlbumChipSetPickActionDelegate(super.items); - - @override - void onActionSelected(BuildContext context, ChipSetAction action) { - if (action == ChipSetAction.toggleTitleSearch) { - settings.showAlbumPickQuery = !settings.showAlbumPickQuery; - } - super.onActionSelected(context, action); - } -} diff --git a/lib/widgets/dialogs/pick_dialogs/item_pick_page.dart b/lib/widgets/dialogs/pick_dialogs/item_pick_page.dart index 49fe4266a..f7abf4b8d 100644 --- a/lib/widgets/dialogs/pick_dialogs/item_pick_page.dart +++ b/lib/widgets/dialogs/pick_dialogs/item_pick_page.dart @@ -1,11 +1,13 @@ import 'package:aves/app_mode.dart'; import 'package:aves/model/entry/entry.dart'; import 'package:aves/model/filters/query.dart'; +import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/source/collection_lens.dart'; import 'package:aves/widgets/collection/collection_grid.dart'; import 'package:aves/widgets/collection/collection_page.dart'; import 'package:aves/widgets/common/basic/insets.dart'; import 'package:aves/widgets/common/basic/scaffold.dart'; +import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/providers/query_provider.dart'; import 'package:aves/widgets/common/providers/selection_provider.dart'; import 'package:collection/collection.dart'; @@ -49,6 +51,7 @@ class _ItemPickPageState extends State { child: AvesScaffold( body: SelectionProvider( child: QueryProvider( + startEnabled: settings.getShowTitleQuery(context.currentRouteName!), initialQuery: liveFilter?.query, child: GestureAreaProtectorStack( child: SafeArea( 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 a6a6cb814..b6b5537d7 100644 --- a/lib/widgets/filter_grids/common/action_delegates/chip_set.dart +++ b/lib/widgets/filter_grids/common/action_delegates/chip_set.dart @@ -179,6 +179,8 @@ abstract class ChipSetActionDelegate with FeedbackMi case ChipSetAction.search: _goToSearch(context); case ChipSetAction.toggleTitleSearch: + final routeName = context.currentRouteName!; + settings.setShowTitleQuery(routeName, !settings.getShowTitleQuery(routeName)); context.read().toggle(); case ChipSetAction.createAlbum: case ChipSetAction.createVault: diff --git a/lib/widgets/filter_grids/common/filter_nav_page.dart b/lib/widgets/filter_grids/common/filter_nav_page.dart index 92463e2d2..4b4f95a09 100644 --- a/lib/widgets/filter_grids/common/filter_nav_page.dart +++ b/lib/widgets/filter_grids/common/filter_nav_page.dart @@ -1,6 +1,8 @@ import 'package:aves/model/filters/filters.dart'; +import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/source/collection_source.dart'; import 'package:aves/utils/time_utils.dart'; +import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/identity/aves_filter_chip.dart'; import 'package:aves/widgets/common/providers/query_provider.dart'; import 'package:aves/widgets/common/providers/selection_provider.dart'; @@ -110,6 +112,7 @@ class _FilterNavigationPageState>( child: Builder( builder: (context) => QueryProvider( + startEnabled: settings.getShowTitleQuery(context.currentRouteName!), child: FilterGridPage( appBar: FilterGridAppBar( source: widget.source, diff --git a/plugins/aves_model/lib/src/settings/keys.dart b/plugins/aves_model/lib/src/settings/keys.dart index 6efba4aa1..0f44d3b58 100644 --- a/plugins/aves_model/lib/src/settings/keys.dart +++ b/plugins/aves_model/lib/src/settings/keys.dart @@ -86,7 +86,7 @@ class SettingKeys { static const pinnedFiltersKey = 'pinned_filters'; static const hiddenFiltersKey = 'hidden_filters'; static const deactivatedHiddenFiltersKey = 'deactivated_hidden_filters'; - static const showAlbumPickQueryKey = 'show_album_pick_query'; + static const showTitleQueryPrefixKey = 'show_title_query_'; // viewer static const viewerQuickActionsKey = 'viewer_quick_actions';