#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 - 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 ## <a id="v1.11.18"></a>[v1.11.18] - 2024-11-18
### Changed ### 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()); 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 { } else {
debugPrint('failed to import key=$key, value=$newValue is not a string'); 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 { } else {
switch (key) { switch (key) {
case SettingKeys.subtitleTextColorKey: case SettingKeys.subtitleTextColorKey:
@ -404,7 +410,6 @@ class Settings with ChangeNotifier, SettingsAccess, AppSettings, DisplaySettings
case SettingKeys.stateSortReverseKey: case SettingKeys.stateSortReverseKey:
case SettingKeys.placeSortReverseKey: case SettingKeys.placeSortReverseKey:
case SettingKeys.tagSortReverseKey: case SettingKeys.tagSortReverseKey:
case SettingKeys.showAlbumPickQueryKey:
case SettingKeys.showOverlayOnOpeningKey: case SettingKeys.showOverlayOnOpeningKey:
case SettingKeys.showOverlayMinimapKey: case SettingKeys.showOverlayMinimapKey:
case SettingKeys.showOverlayInfoKey: case SettingKeys.showOverlayInfoKey:

View file

@ -91,6 +91,7 @@ class _CollectionPageState extends State<CollectionPage> {
selector: (context, selection) => selection.selectedItems.isNotEmpty, selector: (context, selection) => selection.selectedItems.isNotEmpty,
builder: (context, hasSelection, child) { builder: (context, hasSelection, child) {
final body = QueryProvider( final body = QueryProvider(
startEnabled: settings.getShowTitleQuery(context.currentRouteName!),
initialQuery: liveFilter?.query, initialQuery: liveFilter?.query,
child: Builder( child: Builder(
builder: (context) { builder: (context) {

View file

@ -181,6 +181,8 @@ class EntrySetActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAware
case EntrySetAction.searchCollection: case EntrySetAction.searchCollection:
_goToSearch(context); _goToSearch(context);
case EntrySetAction.toggleTitleSearch: case EntrySetAction.toggleTitleSearch:
final routeName = context.currentRouteName!;
settings.setShowTitleQuery(routeName, !settings.getShowTitleQuery(routeName));
context.read<Query>().toggle(); context.read<Query>().toggle();
case EntrySetAction.addShortcut: case EntrySetAction.addShortcut:
_addShortcut(context); _addShortcut(context);

View file

@ -3,13 +3,13 @@ import 'package:flutter/widgets.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class QueryProvider extends StatelessWidget { class QueryProvider extends StatelessWidget {
final bool enabled; final bool startEnabled;
final String? initialQuery; final String? initialQuery;
final Widget child; final Widget child;
const QueryProvider({ const QueryProvider({
super.key, super.key,
this.enabled = false, this.startEnabled = false,
this.initialQuery, this.initialQuery,
required this.child, required this.child,
}); });
@ -18,7 +18,7 @@ class QueryProvider extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return ChangeNotifierProvider<Query>( return ChangeNotifierProvider<Query>(
create: (context) => Query( create: (context) => Query(
enabled: enabled, enabled: startEnabled,
initialValue: initialQuery, initialValue: initialQuery,
), ),
child: child, child: child,

View file

@ -114,13 +114,13 @@ class _AlbumPickPageState extends State<_AlbumPickPage> {
final gridItems = AlbumListPage.getAlbumGridItems(context, source); final gridItems = AlbumListPage.getAlbumGridItems(context, source);
return SelectionProvider<FilterGridItem<AlbumFilter>>( return SelectionProvider<FilterGridItem<AlbumFilter>>(
child: QueryProvider( child: QueryProvider(
enabled: settings.showAlbumPickQuery, startEnabled: settings.getShowTitleQuery(context.currentRouteName!),
child: FilterGridPage<AlbumFilter>( child: FilterGridPage<AlbumFilter>(
settingsRouteKey: AlbumListPage.routeName, settingsRouteKey: AlbumListPage.routeName,
appBar: FilterGridAppBar( appBar: FilterGridAppBar(
source: source, source: source,
title: title, title: title,
actionDelegate: _AlbumChipSetPickActionDelegate(gridItems), actionDelegate: AlbumChipSetActionDelegate(gridItems),
actionsBuilder: _buildActions, actionsBuilder: _buildActions,
isEmpty: false, isEmpty: false,
appBarHeightNotifier: _appBarHeightNotifier, appBarHeightNotifier: _appBarHeightNotifier,
@ -287,15 +287,3 @@ class _AlbumPickPageState extends State<_AlbumPickPage> {
Navigator.maybeOf(context)?.pop<AlbumFilter>(filter); 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/app_mode.dart';
import 'package:aves/model/entry/entry.dart'; import 'package:aves/model/entry/entry.dart';
import 'package:aves/model/filters/query.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/model/source/collection_lens.dart';
import 'package:aves/widgets/collection/collection_grid.dart'; import 'package:aves/widgets/collection/collection_grid.dart';
import 'package:aves/widgets/collection/collection_page.dart'; import 'package:aves/widgets/collection/collection_page.dart';
import 'package:aves/widgets/common/basic/insets.dart'; import 'package:aves/widgets/common/basic/insets.dart';
import 'package:aves/widgets/common/basic/scaffold.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/query_provider.dart';
import 'package:aves/widgets/common/providers/selection_provider.dart'; import 'package:aves/widgets/common/providers/selection_provider.dart';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
@ -49,6 +51,7 @@ class _ItemPickPageState extends State<ItemPickPage> {
child: AvesScaffold( child: AvesScaffold(
body: SelectionProvider<AvesEntry>( body: SelectionProvider<AvesEntry>(
child: QueryProvider( child: QueryProvider(
startEnabled: settings.getShowTitleQuery(context.currentRouteName!),
initialQuery: liveFilter?.query, initialQuery: liveFilter?.query,
child: GestureAreaProtectorStack( child: GestureAreaProtectorStack(
child: SafeArea( child: SafeArea(

View file

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

View file

@ -1,6 +1,8 @@
import 'package:aves/model/filters/filters.dart'; 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/model/source/collection_source.dart';
import 'package:aves/utils/time_utils.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/identity/aves_filter_chip.dart';
import 'package:aves/widgets/common/providers/query_provider.dart'; import 'package:aves/widgets/common/providers/query_provider.dart';
import 'package:aves/widgets/common/providers/selection_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>>( return SelectionProvider<FilterGridItem<T>>(
child: Builder( child: Builder(
builder: (context) => QueryProvider( builder: (context) => QueryProvider(
startEnabled: settings.getShowTitleQuery(context.currentRouteName!),
child: FilterGridPage<T>( child: FilterGridPage<T>(
appBar: FilterGridAppBar<T, CSAD>( appBar: FilterGridAppBar<T, CSAD>(
source: widget.source, source: widget.source,

View file

@ -86,7 +86,7 @@ class SettingKeys {
static const pinnedFiltersKey = 'pinned_filters'; static const pinnedFiltersKey = 'pinned_filters';
static const hiddenFiltersKey = 'hidden_filters'; static const hiddenFiltersKey = 'hidden_filters';
static const deactivatedHiddenFiltersKey = 'deactivated_hidden_filters'; static const deactivatedHiddenFiltersKey = 'deactivated_hidden_filters';
static const showAlbumPickQueryKey = 'show_album_pick_query'; static const showTitleQueryPrefixKey = 'show_title_query_';
// viewer // viewer
static const viewerQuickActionsKey = 'viewer_quick_actions'; static const viewerQuickActionsKey = 'viewer_quick_actions';