From a4869bf41adbb3e6f325126e62789cb5a47eca1a Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Mon, 1 May 2023 11:45:33 +0200 Subject: [PATCH] #625 option to set the Tags page as home --- CHANGELOG.md | 4 ++ lib/model/settings/enums/home_page.dart | 3 ++ lib/view/src/settings/enums.dart | 2 + .../common/behaviour/pop/tv_navigation.dart | 25 ++++++------ lib/widgets/home_page.dart | 40 ++++++------------- lib/widgets/navigation/tv_rail.dart | 19 +++++---- .../aves_model/lib/src/settings/enums.dart | 2 +- 7 files changed, 47 insertions(+), 48 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 11ac2cb77..fb35625fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Added + +- option to set the Tags page as home + ## [v1.8.6] - 2023-04-30 ### Added diff --git a/lib/model/settings/enums/home_page.dart b/lib/model/settings/enums/home_page.dart index 5adb6788b..cf33a0fc4 100644 --- a/lib/model/settings/enums/home_page.dart +++ b/lib/model/settings/enums/home_page.dart @@ -1,5 +1,6 @@ import 'package:aves/widgets/collection/collection_page.dart'; import 'package:aves/widgets/filter_grids/albums_page.dart'; +import 'package:aves/widgets/filter_grids/tags_page.dart'; import 'package:aves_model/aves_model.dart'; extension ExtraHomePageSetting on HomePageSetting { @@ -9,6 +10,8 @@ extension ExtraHomePageSetting on HomePageSetting { return CollectionPage.routeName; case HomePageSetting.albums: return AlbumListPage.routeName; + case HomePageSetting.tags: + return TagListPage.routeName; } } } diff --git a/lib/view/src/settings/enums.dart b/lib/view/src/settings/enums.dart index 642d1c305..3ac2afdf4 100644 --- a/lib/view/src/settings/enums.dart +++ b/lib/view/src/settings/enums.dart @@ -104,6 +104,8 @@ extension ExtraHomePageSettingView on HomePageSetting { return context.l10n.drawerCollectionAll; case HomePageSetting.albums: return context.l10n.drawerAlbumPage; + case HomePageSetting.tags: + return context.l10n.drawerTagPage; } } } diff --git a/lib/widgets/common/behaviour/pop/tv_navigation.dart b/lib/widgets/common/behaviour/pop/tv_navigation.dart index 8af4081ff..e51367139 100644 --- a/lib/widgets/common/behaviour/pop/tv_navigation.dart +++ b/lib/widgets/common/behaviour/pop/tv_navigation.dart @@ -5,6 +5,7 @@ import 'package:aves/model/source/collection_source.dart'; import 'package:aves/widgets/collection/collection_page.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/filter_grids/albums_page.dart'; +import 'package:aves/widgets/filter_grids/tags_page.dart'; import 'package:aves_model/aves_model.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -33,25 +34,25 @@ class TvNavigationPopHandler { case HomePageSetting.collection: return context.read().filters.isEmpty; case HomePageSetting.albums: + case HomePageSetting.tags: return true; } } static Route _getHomeRoute() { - switch (settings.homePage) { + final homePage = settings.homePage; + Route buildRoute(WidgetBuilder builder) => MaterialPageRoute( + settings: RouteSettings(name: homePage.routeName), + builder: builder, + ); + + switch (homePage) { case HomePageSetting.collection: - return MaterialPageRoute( - settings: const RouteSettings(name: CollectionPage.routeName), - builder: (context) => CollectionPage( - source: context.read(), - filters: null, - ), - ); + return buildRoute((context) => CollectionPage(source: context.read(), filters: null)); case HomePageSetting.albums: - return MaterialPageRoute( - settings: const RouteSettings(name: AlbumListPage.routeName), - builder: (context) => const AlbumListPage(), - ); + return buildRoute((context) => const AlbumListPage()); + case HomePageSetting.tags: + return buildRoute((context) => const TagListPage()); } } } diff --git a/lib/widgets/home_page.dart b/lib/widgets/home_page.dart index ff4defde4..f2ea00c12 100644 --- a/lib/widgets/home_page.dart +++ b/lib/widgets/home_page.dart @@ -24,6 +24,7 @@ import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/search/page.dart'; import 'package:aves/widgets/common/search/route.dart'; import 'package:aves/widgets/filter_grids/albums_page.dart'; +import 'package:aves/widgets/filter_grids/tags_page.dart'; import 'package:aves/widgets/search/search_delegate.dart'; import 'package:aves/widgets/settings/home_widget_settings_page.dart'; import 'package:aves/widgets/settings/screen_saver_settings_page.dart'; @@ -345,32 +346,23 @@ class _HomePageState extends State { filters = _initialFilters ?? {}; break; } + Route buildRoute(WidgetBuilder builder) => DirectMaterialPageRoute( + settings: RouteSettings(name: routeName), + builder: builder, + ); + final source = context.read(); switch (routeName) { case AlbumListPage.routeName: - return DirectMaterialPageRoute( - settings: RouteSettings(name: routeName), - builder: (context) => const AlbumListPage(), - ); + return buildRoute((context) => const AlbumListPage()); + case TagListPage.routeName: + return buildRoute((context) => const TagListPage()); case ScreenSaverPage.routeName: - return DirectMaterialPageRoute( - settings: RouteSettings(name: routeName), - builder: (context) => ScreenSaverPage( - source: source, - ), - ); + return buildRoute((context) => ScreenSaverPage(source: source)); case ScreenSaverSettingsPage.routeName: - return DirectMaterialPageRoute( - settings: RouteSettings(name: routeName), - builder: (context) => const ScreenSaverSettingsPage(), - ); + return buildRoute((context) => const ScreenSaverSettingsPage()); case HomeWidgetSettingsPage.routeName: - return DirectMaterialPageRoute( - settings: RouteSettings(name: routeName), - builder: (context) => HomeWidgetSettingsPage( - widgetId: _widgetId!, - ), - ); + return buildRoute((context) => HomeWidgetSettingsPage(widgetId: _widgetId!)); case SearchPage.routeName: return SearchPageRoute( delegate: CollectionSearchDelegate( @@ -382,13 +374,7 @@ class _HomePageState extends State { ); case CollectionPage.routeName: default: - return DirectMaterialPageRoute( - settings: RouteSettings(name: routeName), - builder: (context) => CollectionPage( - source: source, - filters: filters, - ), - ); + return buildRoute((context) => CollectionPage(source: source, filters: filters)); } } } diff --git a/lib/widgets/navigation/tv_rail.dart b/lib/widgets/navigation/tv_rail.dart index a408e2a50..e1ef726d5 100644 --- a/lib/widgets/navigation/tv_rail.dart +++ b/lib/widgets/navigation/tv_rail.dart @@ -3,6 +3,7 @@ import 'dart:ui'; import 'package:aves/model/filters/album.dart'; import 'package:aves/model/filters/filters.dart'; +import 'package:aves/model/settings/enums/home_page.dart'; import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/source/collection_lens.dart'; import 'package:aves/model/source/collection_source.dart'; @@ -12,7 +13,6 @@ import 'package:aves/widgets/common/basic/insets.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/identity/aves_logo.dart'; import 'package:aves/widgets/debug/app_debug_page.dart'; -import 'package:aves/widgets/filter_grids/albums_page.dart'; import 'package:aves/widgets/navigation/drawer/app_drawer.dart'; import 'package:aves/widgets/navigation/drawer/page_nav_tile.dart'; import 'package:aves/widgets/navigation/drawer/tile.dart'; @@ -240,13 +240,16 @@ class _TvRailState extends State { return pageBookmarks.map(_routeNavEntry).toList(); } - _NavEntry _routeNavEntry(String routeName) => _NavEntry( - icon: DrawerPageIcon(route: routeName), - label: DrawerPageTitle(route: routeName), - isHome: settings.homePage == HomePageSetting.albums && routeName == AlbumListPage.routeName, - isSelected: context.currentRouteName == routeName, - onSelection: () => _goTo(routeName), - ); + _NavEntry _routeNavEntry(String routeName) { + final homePage = settings.homePage; + return _NavEntry( + icon: DrawerPageIcon(route: routeName), + label: DrawerPageTitle(route: routeName), + isHome: homePage != HomePageSetting.collection && routeName == homePage.routeName, + isSelected: context.currentRouteName == routeName, + onSelection: () => _goTo(routeName), + ); + } void _goTo(String routeName) { Navigator.maybeOf(context)?.pushAndRemoveUntil( diff --git a/plugins/aves_model/lib/src/settings/enums.dart b/plugins/aves_model/lib/src/settings/enums.dart index f12c6ce7b..1c868f99d 100644 --- a/plugins/aves_model/lib/src/settings/enums.dart +++ b/plugins/aves_model/lib/src/settings/enums.dart @@ -14,7 +14,7 @@ enum DisplayRefreshRateMode { auto, highest, lowest } enum EntryBackground { black, white, checkered } -enum HomePageSetting { collection, albums } +enum HomePageSetting { collection, albums, tags } enum KeepScreenOn { never, videoPlayback, viewerOnly, always }