#1292 remember title filter visibility by page

This commit is contained in:
Thibault Deckers 2024-11-24 01:15:36 +01:00
parent a3024fdf4e
commit 1a78fdfd0b
11 changed files with 29 additions and 21 deletions

View file

@ -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
## <a id="v1.11.18"></a>[v1.11.18] - 2024-11-18
### Changed

View file

@ -51,7 +51,7 @@ mixin FilterGridsSettings on SettingsAccess {
set pinnedFilters(Set<CollectionFilter> 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);
}

View file

@ -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:

View file

@ -91,6 +91,7 @@ class _CollectionPageState extends State<CollectionPage> {
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) {

View file

@ -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<Query>().toggle();
case EntrySetAction.addShortcut:
_addShortcut(context);

View file

@ -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<Query>(
create: (context) => Query(
enabled: enabled,
enabled: startEnabled,
initialValue: initialQuery,
),
child: child,

View file

@ -114,13 +114,13 @@ class _AlbumPickPageState extends State<_AlbumPickPage> {
final gridItems = AlbumListPage.getAlbumGridItems(context, source);
return SelectionProvider<FilterGridItem<AlbumFilter>>(
child: QueryProvider(
enabled: settings.showAlbumPickQuery,
startEnabled: settings.getShowTitleQuery(context.currentRouteName!),
child: FilterGridPage<AlbumFilter>(
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<AlbumFilter>(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);
}
}

View file

@ -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<ItemPickPage> {
child: AvesScaffold(
body: SelectionProvider<AvesEntry>(
child: QueryProvider(
startEnabled: settings.getShowTitleQuery(context.currentRouteName!),
initialQuery: liveFilter?.query,
child: GestureAreaProtectorStack(
child: SafeArea(

View file

@ -179,6 +179,8 @@ abstract class ChipSetActionDelegate<T extends CollectionFilter> with FeedbackMi
case ChipSetAction.search:
_goToSearch(context);
case ChipSetAction.toggleTitleSearch:
final routeName = context.currentRouteName!;
settings.setShowTitleQuery(routeName, !settings.getShowTitleQuery(routeName));
context.read<Query>().toggle();
case ChipSetAction.createAlbum:
case ChipSetAction.createVault:

View file

@ -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<T extends CollectionFilter, CSAD extends ChipSe
return SelectionProvider<FilterGridItem<T>>(
child: Builder(
builder: (context) => QueryProvider(
startEnabled: settings.getShowTitleQuery(context.currentRouteName!),
child: FilterGridPage<T>(
appBar: FilterGridAppBar<T, CSAD>(
source: widget.source,

View file

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