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 }