From 58e12d147d7b3d3d7cf2d52e7ec3430da8b0262d Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Sun, 7 Jan 2024 01:04:59 +0100 Subject: [PATCH] #763 allow setting any filtered collection as home page --- CHANGELOG.md | 1 + lib/l10n/app_en.arb | 2 + lib/model/settings/modules/navigation.dart | 5 ++ lib/model/settings/settings.dart | 1 + lib/view/src/actions/entry_set.dart | 2 + lib/widgets/collection/app_bar.dart | 1 + .../collection/entry_set_action_delegate.dart | 13 ++- .../selection_dialogs/single_selection.dart | 2 + lib/widgets/home_page.dart | 4 +- .../settings/navigation/navigation.dart | 41 +++++++++- .../aves_model/lib/src/actions/entry_set.dart | 5 +- plugins/aves_model/lib/src/settings/keys.dart | 1 + test_driver/driver_screenshots.dart | 1 + test_driver/driver_shaders.dart | 1 + untranslated.json | 82 +++++++++++++++++++ 15 files changed, 152 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed263b223..4a1a6e6e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ All notable changes to this project will be documented in this file. ### Added - Collection: allow hiding thumbnail overlay HDR icon +- Collection: allow setting any filtered collection as home page ### Changed diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 10c2c673c..620c607b2 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -570,6 +570,7 @@ "collectionActionShowTitleSearch": "Show title filter", "collectionActionHideTitleSearch": "Hide title filter", "collectionActionAddShortcut": "Add shortcut", + "collectionActionSetHome": "Set as home", "collectionActionEmptyBin": "Empty bin", "collectionActionCopy": "Copy to album", "collectionActionMove": "Move to album", @@ -757,6 +758,7 @@ "settingsNavigationSectionTitle": "Navigation", "settingsHomeTile": "Home", "settingsHomeDialogTitle": "Home", + "setHomeCustomCollection": "Custom collection", "settingsShowBottomNavigationBar": "Show bottom navigation bar", "settingsKeepScreenOnTile": "Keep screen on", "settingsKeepScreenOnDialogTitle": "Keep Screen On", diff --git a/lib/model/settings/modules/navigation.dart b/lib/model/settings/modules/navigation.dart index a18610077..c11c97968 100644 --- a/lib/model/settings/modules/navigation.dart +++ b/lib/model/settings/modules/navigation.dart @@ -1,6 +1,7 @@ import 'package:aves/model/filters/filters.dart'; import 'package:aves/model/settings/defaults.dart'; import 'package:aves_model/aves_model.dart'; +import 'package:collection/collection.dart'; mixin NavigationSettings on SettingsAccess { bool get mustBackTwiceToExit => getBool(SettingKeys.mustBackTwiceToExitKey) ?? SettingsDefaults.mustBackTwiceToExit; @@ -15,6 +16,10 @@ mixin NavigationSettings on SettingsAccess { set homePage(HomePageSetting newValue) => set(SettingKeys.homePageKey, newValue.toString()); + Set get homeCustomCollection => (getStringList(SettingKeys.homeCustomCollectionKey) ?? []).map(CollectionFilter.fromJson).whereNotNull().toSet(); + + set homeCustomCollection(Set newValue) => set(SettingKeys.homeCustomCollectionKey, newValue.map((filter) => filter.toJson()).toList()); + bool get enableBottomNavigationBar => getBool(SettingKeys.enableBottomNavigationBarKey) ?? SettingsDefaults.enableBottomNavigationBar; set enableBottomNavigationBar(bool newValue) => set(SettingKeys.enableBottomNavigationBarKey, newValue); diff --git a/lib/model/settings/settings.dart b/lib/model/settings/settings.dart index 82ca8b7bf..693f8d9e7 100644 --- a/lib/model/settings/settings.dart +++ b/lib/model/settings/settings.dart @@ -472,6 +472,7 @@ class Settings with ChangeNotifier, SettingsAccess, AppSettings, DisplaySettings } else { debugPrint('failed to import key=$key, value=$newValue is not a string'); } + case SettingKeys.homeCustomCollectionKey: case SettingKeys.drawerTypeBookmarksKey: case SettingKeys.drawerAlbumBookmarksKey: case SettingKeys.drawerPageBookmarksKey: diff --git a/lib/view/src/actions/entry_set.dart b/lib/view/src/actions/entry_set.dart index 9fb163be7..06313a94e 100644 --- a/lib/view/src/actions/entry_set.dart +++ b/lib/view/src/actions/entry_set.dart @@ -17,6 +17,7 @@ extension ExtraEntrySetActionView on EntrySetAction { // different data depending on toggle state context.l10n.collectionActionShowTitleSearch, EntrySetAction.addShortcut => context.l10n.collectionActionAddShortcut, + EntrySetAction.setHome => context.l10n.collectionActionSetHome, EntrySetAction.emptyBin => context.l10n.collectionActionEmptyBin, // browsing or selecting EntrySetAction.map => context.l10n.menuActionMap, @@ -61,6 +62,7 @@ extension ExtraEntrySetActionView on EntrySetAction { // different data depending on toggle state AIcons.filter, EntrySetAction.addShortcut => AIcons.addShortcut, + EntrySetAction.setHome => AIcons.home, EntrySetAction.emptyBin => AIcons.emptyBin, // browsing or selecting EntrySetAction.map => AIcons.map, diff --git a/lib/widgets/collection/app_bar.dart b/lib/widgets/collection/app_bar.dart index ede4129d6..abe5553f9 100644 --- a/lib/widgets/collection/app_bar.dart +++ b/lib/widgets/collection/app_bar.dart @@ -618,6 +618,7 @@ class _CollectionAppBarState extends State with SingleTickerPr case EntrySetAction.searchCollection: case EntrySetAction.toggleTitleSearch: case EntrySetAction.addShortcut: + case EntrySetAction.setHome: // browsing or selecting case EntrySetAction.map: case EntrySetAction.slideshow: diff --git a/lib/widgets/collection/entry_set_action_delegate.dart b/lib/widgets/collection/entry_set_action_delegate.dart index 262424abf..4a1be7347 100644 --- a/lib/widgets/collection/entry_set_action_delegate.dart +++ b/lib/widgets/collection/entry_set_action_delegate.dart @@ -75,7 +75,9 @@ class EntrySetActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAware case EntrySetAction.toggleTitleSearch: return !useTvLayout && !isSelecting; case EntrySetAction.addShortcut: - return isMain && !isSelecting && device.canPinShortcut && !isTrash; + return isMain && !isSelecting && !isTrash && device.canPinShortcut; + case EntrySetAction.setHome: + return isMain && !isSelecting && !isTrash && !useTvLayout; case EntrySetAction.emptyBin: return canWrite && isMain && isTrash; // browsing or selecting @@ -131,6 +133,7 @@ class EntrySetActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAware case EntrySetAction.searchCollection: case EntrySetAction.toggleTitleSearch: case EntrySetAction.addShortcut: + case EntrySetAction.setHome: return true; case EntrySetAction.emptyBin: return !isSelecting && hasItems; @@ -177,6 +180,8 @@ class EntrySetActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAware context.read().toggle(); case EntrySetAction.addShortcut: _addShortcut(context); + case EntrySetAction.setHome: + _setHome(context); // browsing or selecting case EntrySetAction.map: _goToMap(context); @@ -727,4 +732,10 @@ class EntrySetActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAware showFeedback(context, FeedbackType.info, context.l10n.genericSuccessFeedback); } } + + void _setHome(BuildContext context) async { + settings.homeCustomCollection = context.read().filters; + settings.homePage = HomePageSetting.collection; + showFeedback(context, FeedbackType.info, context.l10n.genericSuccessFeedback); + } } diff --git a/lib/widgets/dialogs/selection_dialogs/single_selection.dart b/lib/widgets/dialogs/selection_dialogs/single_selection.dart index b9970cda4..a39b03003 100644 --- a/lib/widgets/dialogs/selection_dialogs/single_selection.dart +++ b/lib/widgets/dialogs/selection_dialogs/single_selection.dart @@ -3,6 +3,8 @@ import 'package:aves/widgets/dialogs/selection_dialogs/common.dart'; import 'package:aves/widgets/dialogs/selection_dialogs/radio_list_tile.dart'; import 'package:flutter/material.dart'; +// do not use as `T` a record containing a collection +// because radio value comparison will fail without deep equality class AvesSingleSelectionDialog extends StatefulWidget { static const routeName = '/dialog/selection'; diff --git a/lib/widgets/home_page.dart b/lib/widgets/home_page.dart index 34bbc477c..3b7df0c1e 100644 --- a/lib/widgets/home_page.dart +++ b/lib/widgets/home_page.dart @@ -196,7 +196,7 @@ class _HomePageState extends State { unawaited(AnalysisService.registerCallback()); final source = context.read(); await source.init( - loadTopEntriesFirst: settings.homePage == HomePageSetting.collection, + loadTopEntriesFirst: settings.homePage == HomePageSetting.collection && settings.homeCustomCollection.isEmpty, canAnalyze: !safeMode, ); case AppMode.screenSaver: @@ -338,7 +338,7 @@ class _HomePageState extends State { case AppMode.screenSaver: case AppMode.slideshow: routeName = _initialRouteName ?? settings.homePage.routeName; - filters = _initialFilters ?? {}; + filters = _initialFilters ?? (settings.homePage == HomePageSetting.collection ? settings.homeCustomCollection : {}); } Route buildRoute(WidgetBuilder builder) => DirectMaterialPageRoute( settings: RouteSettings(name: routeName), diff --git a/lib/widgets/settings/navigation/navigation.dart b/lib/widgets/settings/navigation/navigation.dart index e81cbd76a..606079dd7 100644 --- a/lib/widgets/settings/navigation/navigation.dart +++ b/lib/widgets/settings/navigation/navigation.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'package:aves/model/filters/filters.dart'; import 'package:aves/model/settings/settings.dart'; import 'package:aves/theme/colors.dart'; import 'package:aves/theme/icons.dart'; @@ -11,6 +12,7 @@ import 'package:aves/widgets/settings/navigation/confirmation_dialogs.dart'; import 'package:aves/widgets/settings/navigation/drawer.dart'; import 'package:aves/widgets/settings/settings_definition.dart'; import 'package:aves_model/aves_model.dart'; +import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -38,16 +40,47 @@ class NavigationSection extends SettingsSection { ]; } +class _HomeOption { + final HomePageSetting page; + final Set customCollection; + + const _HomeOption( + this.page, { + this.customCollection = const {}, + }); + + String getName(BuildContext context) { + if (page == HomePageSetting.collection && customCollection.isNotEmpty) { + return context.l10n.setHomeCustomCollection; + } + return page.getName(context); + } + + @override + bool operator ==(Object other) => identical(this, other) || other is _HomeOption && runtimeType == other.runtimeType && page == other.page && const DeepCollectionEquality().equals(customCollection, other.customCollection); + + @override + int get hashCode => page.hashCode ^ customCollection.hashCode; +} + class SettingsTileNavigationHomePage extends SettingsTile { @override String title(BuildContext context) => context.l10n.settingsHomeTile; @override - Widget build(BuildContext context) => SettingsSelectionListTile( - values: HomePageSetting.values, + Widget build(BuildContext context) => SettingsSelectionListTile<_HomeOption>( + values: [ + const _HomeOption(HomePageSetting.collection), + const _HomeOption(HomePageSetting.albums), + const _HomeOption(HomePageSetting.tags), + if (settings.homeCustomCollection.isNotEmpty) _HomeOption(HomePageSetting.collection, customCollection: settings.homeCustomCollection), + ], getName: (context, v) => v.getName(context), - selector: (context, s) => s.homePage, - onSelection: (v) => settings.homePage = v, + selector: (context, s) => _HomeOption(s.homePage, customCollection: s.homeCustomCollection), + onSelection: (v) { + settings.homePage = v.page; + settings.homeCustomCollection = v.customCollection; + }, tileTitle: title(context), dialogTitle: context.l10n.settingsHomeDialogTitle, ); diff --git a/plugins/aves_model/lib/src/actions/entry_set.dart b/plugins/aves_model/lib/src/actions/entry_set.dart index a13697756..0cf289223 100644 --- a/plugins/aves_model/lib/src/actions/entry_set.dart +++ b/plugins/aves_model/lib/src/actions/entry_set.dart @@ -8,6 +8,7 @@ enum EntrySetAction { searchCollection, toggleTitleSearch, addShortcut, + setHome, emptyBin, // browsing or selecting map, @@ -47,6 +48,7 @@ class EntrySetActions { EntrySetAction.searchCollection, EntrySetAction.toggleTitleSearch, EntrySetAction.addShortcut, + EntrySetAction.setHome, null, EntrySetAction.map, EntrySetAction.slideshow, @@ -60,11 +62,9 @@ class EntrySetActions { static const collectionEditorBrowsing = [ EntrySetAction.searchCollection, EntrySetAction.toggleTitleSearch, - EntrySetAction.addShortcut, EntrySetAction.map, EntrySetAction.slideshow, EntrySetAction.stats, - EntrySetAction.rescan, ]; // `null` items are converted to dividers @@ -98,7 +98,6 @@ class EntrySetActions { EntrySetAction.map, EntrySetAction.slideshow, EntrySetAction.stats, - EntrySetAction.rescan, // editing actions are in their subsection ]; diff --git a/plugins/aves_model/lib/src/settings/keys.dart b/plugins/aves_model/lib/src/settings/keys.dart index 9dd8791f1..071a017a1 100644 --- a/plugins/aves_model/lib/src/settings/keys.dart +++ b/plugins/aves_model/lib/src/settings/keys.dart @@ -41,6 +41,7 @@ class SettingKeys { static const mustBackTwiceToExitKey = 'must_back_twice_to_exit'; static const keepScreenOnKey = 'keep_screen_on'; static const homePageKey = 'home_page'; + static const homeCustomCollectionKey = 'home_custom_collection'; static const enableBottomNavigationBarKey = 'show_bottom_navigation_bar'; static const confirmCreateVaultKey = 'confirm_create_vault'; static const confirmDeleteForeverKey = 'confirm_delete_forever'; diff --git a/test_driver/driver_screenshots.dart b/test_driver/driver_screenshots.dart index dd2dd22bf..2013db5a3 100644 --- a/test_driver/driver_screenshots.dart +++ b/test_driver/driver_screenshots.dart @@ -31,6 +31,7 @@ Future configureAndLaunch() async { // navigation ..keepScreenOn = KeepScreenOn.always ..homePage = HomePageSetting.collection + ..homeCustomCollection = {} ..enableBottomNavigationBar = true ..drawerTypeBookmarks = [null, FavouriteFilter.instance] // collection diff --git a/test_driver/driver_shaders.dart b/test_driver/driver_shaders.dart index 6c26d1986..0d8382fc6 100644 --- a/test_driver/driver_shaders.dart +++ b/test_driver/driver_shaders.dart @@ -27,6 +27,7 @@ Future configureAndLaunch() async { // navigation ..keepScreenOn = KeepScreenOn.always ..homePage = HomePageSetting.collection + ..homeCustomCollection = {} ..enableBottomNavigationBar = true // collection ..collectionSectionFactor = EntryGroupFactor.album diff --git a/untranslated.json b/untranslated.json index 836d305ab..24cd6e81c 100644 --- a/untranslated.json +++ b/untranslated.json @@ -1,9 +1,13 @@ { "ar": [ + "collectionActionSetHome", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon" ], "be": [ + "collectionActionSetHome", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon" ], @@ -333,6 +337,7 @@ "collectionActionShowTitleSearch", "collectionActionHideTitleSearch", "collectionActionAddShortcut", + "collectionActionSetHome", "collectionActionEmptyBin", "collectionActionCopy", "collectionActionMove", @@ -447,6 +452,7 @@ "settingsNavigationSectionTitle", "settingsHomeTile", "settingsHomeDialogTitle", + "setHomeCustomCollection", "settingsShowBottomNavigationBar", "settingsKeepScreenOnTile", "settingsKeepScreenOnDialogTitle", @@ -870,6 +876,7 @@ "collectionActionShowTitleSearch", "collectionActionHideTitleSearch", "collectionActionAddShortcut", + "collectionActionSetHome", "collectionActionEmptyBin", "collectionActionCopy", "collectionActionMove", @@ -984,6 +991,7 @@ "settingsNavigationSectionTitle", "settingsHomeTile", "settingsHomeDialogTitle", + "setHomeCustomCollection", "settingsShowBottomNavigationBar", "settingsKeepScreenOnTile", "settingsKeepScreenOnDialogTitle", @@ -1203,6 +1211,8 @@ ], "cs": [ + "collectionActionSetHome", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon" ], @@ -1210,6 +1220,8 @@ "entryActionCast", "overlayHistogramNone", "castDialogTitle", + "collectionActionSetHome", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon" ], @@ -1227,15 +1239,21 @@ "aboutDataUsageInternal", "aboutDataUsageExternal", "aboutDataUsageClearCache", + "collectionActionSetHome", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon", "settingsViewerShowHistogram" ], "es": [ + "collectionActionSetHome", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon" ], "eu": [ + "collectionActionSetHome", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon" ], @@ -1370,6 +1388,7 @@ "collectionActionShowTitleSearch", "collectionActionHideTitleSearch", "collectionActionAddShortcut", + "collectionActionSetHome", "collectionActionEmptyBin", "collectionActionCopy", "collectionActionMove", @@ -1476,6 +1495,7 @@ "settingsNavigationSectionTitle", "settingsHomeTile", "settingsHomeDialogTitle", + "setHomeCustomCollection", "settingsShowBottomNavigationBar", "settingsKeepScreenOnTile", "settingsKeepScreenOnDialogTitle", @@ -1902,6 +1922,7 @@ "collectionActionShowTitleSearch", "collectionActionHideTitleSearch", "collectionActionAddShortcut", + "collectionActionSetHome", "collectionActionEmptyBin", "collectionActionCopy", "collectionActionMove", @@ -2016,6 +2037,7 @@ "settingsNavigationSectionTitle", "settingsHomeTile", "settingsHomeDialogTitle", + "setHomeCustomCollection", "settingsShowBottomNavigationBar", "settingsKeepScreenOnTile", "settingsKeepScreenOnDialogTitle", @@ -2235,6 +2257,8 @@ ], "fr": [ + "collectionActionSetHome", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon" ], @@ -2457,6 +2481,7 @@ "collectionActionShowTitleSearch", "collectionActionHideTitleSearch", "collectionActionAddShortcut", + "collectionActionSetHome", "collectionActionEmptyBin", "collectionActionCopy", "collectionActionMove", @@ -2571,6 +2596,7 @@ "settingsNavigationSectionTitle", "settingsHomeTile", "settingsHomeDialogTitle", + "setHomeCustomCollection", "settingsShowBottomNavigationBar", "settingsKeepScreenOnTile", "settingsKeepScreenOnDialogTitle", @@ -3136,6 +3162,7 @@ "collectionActionShowTitleSearch", "collectionActionHideTitleSearch", "collectionActionAddShortcut", + "collectionActionSetHome", "collectionActionEmptyBin", "collectionActionCopy", "collectionActionMove", @@ -3250,6 +3277,7 @@ "settingsNavigationSectionTitle", "settingsHomeTile", "settingsHomeDialogTitle", + "setHomeCustomCollection", "settingsShowBottomNavigationBar", "settingsKeepScreenOnTile", "settingsKeepScreenOnDialogTitle", @@ -3795,6 +3823,7 @@ "collectionActionShowTitleSearch", "collectionActionHideTitleSearch", "collectionActionAddShortcut", + "collectionActionSetHome", "collectionActionEmptyBin", "collectionActionCopy", "collectionActionMove", @@ -3909,6 +3938,7 @@ "settingsNavigationSectionTitle", "settingsHomeTile", "settingsHomeDialogTitle", + "setHomeCustomCollection", "settingsShowBottomNavigationBar", "settingsKeepScreenOnTile", "settingsKeepScreenOnDialogTitle", @@ -4128,20 +4158,28 @@ ], "hu": [ + "collectionActionSetHome", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon" ], "id": [ "entryActionCast", "castDialogTitle", + "collectionActionSetHome", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon" ], "is": [ + "collectionActionSetHome", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon" ], "it": [ + "collectionActionSetHome", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon" ], @@ -4185,11 +4223,13 @@ "aboutDataUsageInternal", "aboutDataUsageExternal", "aboutDataUsageClearCache", + "collectionActionSetHome", "stateEmpty", "placeEmpty", "searchStatesSectionTitle", "settingsAskEverytime", "settingsModificationWarningDialogMessage", + "setHomeCustomCollection", "settingsConfirmationVaultDataLoss", "settingsThumbnailShowHdrIcon", "settingsCollectionBurstPatternsTile", @@ -4531,6 +4571,7 @@ "collectionActionShowTitleSearch", "collectionActionHideTitleSearch", "collectionActionAddShortcut", + "collectionActionSetHome", "collectionActionEmptyBin", "collectionActionCopy", "collectionActionMove", @@ -4645,6 +4686,7 @@ "settingsNavigationSectionTitle", "settingsHomeTile", "settingsHomeDialogTitle", + "setHomeCustomCollection", "settingsShowBottomNavigationBar", "settingsKeepScreenOnTile", "settingsKeepScreenOnDialogTitle", @@ -4864,6 +4906,8 @@ ], "ko": [ + "collectionActionSetHome", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon" ], @@ -4929,6 +4973,7 @@ "aboutDataUsageInternal", "aboutDataUsageExternal", "aboutDataUsageClearCache", + "collectionActionSetHome", "drawerPlacePage", "statePageTitle", "stateEmpty", @@ -4937,6 +4982,7 @@ "searchStatesSectionTitle", "settingsAskEverytime", "settingsModificationWarningDialogMessage", + "setHomeCustomCollection", "settingsConfirmationVaultDataLoss", "settingsThumbnailShowHdrIcon", "settingsCollectionBurstPatternsTile", @@ -5309,6 +5355,7 @@ "collectionActionShowTitleSearch", "collectionActionHideTitleSearch", "collectionActionAddShortcut", + "collectionActionSetHome", "collectionActionEmptyBin", "collectionActionCopy", "collectionActionMove", @@ -5423,6 +5470,7 @@ "settingsNavigationSectionTitle", "settingsHomeTile", "settingsHomeDialogTitle", + "setHomeCustomCollection", "settingsShowBottomNavigationBar", "settingsKeepScreenOnTile", "settingsKeepScreenOnDialogTitle", @@ -5652,8 +5700,10 @@ "menuActionConfigureView", "castDialogTitle", "aboutDataUsageClearCache", + "collectionActionSetHome", "newFilterBanner", "settingsDefault", + "setHomeCustomCollection", "settingsNavigationDrawerTile", "settingsNavigationDrawerEditorPageTitle", "settingsThumbnailSectionTitle", @@ -5771,6 +5821,8 @@ "aboutDataUsageInternal", "aboutDataUsageExternal", "aboutDataUsageClearCache", + "collectionActionSetHome", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon", "settingsCollectionBurstPatternsTile", "settingsCollectionBurstPatternsNone", @@ -5833,6 +5885,7 @@ "aboutDataUsageInternal", "aboutDataUsageExternal", "aboutDataUsageClearCache", + "collectionActionSetHome", "drawerPlacePage", "statePageTitle", "stateEmpty", @@ -5841,6 +5894,7 @@ "searchStatesSectionTitle", "settingsAskEverytime", "settingsModificationWarningDialogMessage", + "setHomeCustomCollection", "settingsConfirmationVaultDataLoss", "settingsThumbnailShowHdrIcon", "settingsCollectionBurstPatternsTile", @@ -5892,7 +5946,9 @@ "aboutLicensesAndroidLibrariesSectionTitle", "collectionActionShowTitleSearch", "collectionActionHideTitleSearch", + "collectionActionSetHome", "drawerCollectionAnimated", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon", "settingsViewerShowHistogram", "settingsSlideshowAnimatedZoomEffect", @@ -6210,6 +6266,7 @@ "collectionActionShowTitleSearch", "collectionActionHideTitleSearch", "collectionActionAddShortcut", + "collectionActionSetHome", "collectionActionEmptyBin", "collectionActionCopy", "collectionActionMove", @@ -6301,6 +6358,7 @@ "appExportCovers", "appExportFavourites", "settingsNavigationSectionTitle", + "setHomeCustomCollection", "settingsShowBottomNavigationBar", "settingsKeepScreenOnTile", "settingsKeepScreenOnDialogTitle", @@ -6517,10 +6575,14 @@ ], "pl": [ + "collectionActionSetHome", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon" ], "pt": [ + "collectionActionSetHome", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon" ], @@ -6552,7 +6614,9 @@ "aboutDataUsageInternal", "aboutDataUsageExternal", "aboutDataUsageClearCache", + "collectionActionSetHome", "settingsAskEverytime", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon", "settingsViewerShowHistogram", "settingsVideoPlaybackTile", @@ -6563,10 +6627,14 @@ ], "ru": [ + "collectionActionSetHome", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon" ], "sk": [ + "collectionActionSetHome", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon" ], @@ -6917,6 +6985,7 @@ "collectionActionShowTitleSearch", "collectionActionHideTitleSearch", "collectionActionAddShortcut", + "collectionActionSetHome", "collectionActionEmptyBin", "collectionActionCopy", "collectionActionMove", @@ -7031,6 +7100,7 @@ "settingsNavigationSectionTitle", "settingsHomeTile", "settingsHomeDialogTitle", + "setHomeCustomCollection", "settingsShowBottomNavigationBar", "settingsKeepScreenOnTile", "settingsKeepScreenOnDialogTitle", @@ -7320,6 +7390,7 @@ "collectionActionShowTitleSearch", "collectionActionHideTitleSearch", "collectionActionAddShortcut", + "collectionActionSetHome", "collectionActionEmptyBin", "collectionActionCopy", "collectionActionMove", @@ -7434,6 +7505,7 @@ "settingsNavigationSectionTitle", "settingsHomeTile", "settingsHomeDialogTitle", + "setHomeCustomCollection", "settingsShowBottomNavigationBar", "settingsKeepScreenOnTile", "settingsKeepScreenOnDialogTitle", @@ -7709,6 +7781,7 @@ "aboutDataUsageInternal", "aboutDataUsageExternal", "aboutDataUsageClearCache", + "collectionActionSetHome", "drawerPlacePage", "statePageTitle", "stateEmpty", @@ -7716,6 +7789,7 @@ "placeEmpty", "searchStatesSectionTitle", "settingsAskEverytime", + "setHomeCustomCollection", "settingsConfirmationVaultDataLoss", "settingsThumbnailShowHdrIcon", "settingsCollectionBurstPatternsTile", @@ -7734,14 +7808,20 @@ ], "uk": [ + "collectionActionSetHome", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon" ], "vi": [ + "collectionActionSetHome", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon" ], "zh": [ + "collectionActionSetHome", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon" ], @@ -7758,6 +7838,8 @@ "aboutDataUsageInternal", "aboutDataUsageExternal", "aboutDataUsageClearCache", + "collectionActionSetHome", + "setHomeCustomCollection", "settingsThumbnailShowHdrIcon", "settingsViewerShowHistogram" ]