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';