Skip to content

Commit

Permalink
Add ability to search for top-level settings pages (#1668)
Browse files Browse the repository at this point in the history
  • Loading branch information
micahmo authored Feb 18, 2025
1 parent ef79c09 commit b549268
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 3 deletions.
37 changes: 36 additions & 1 deletion lib/core/enums/local_settings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ enum LocalSettingsCategories {
about('About'),
debug('Debug'),
theming('Theming'),
videoPlayer('Video Player');
videoPlayer('Video Player'),
appearance('Appearance');

final String value;

Expand Down Expand Up @@ -69,6 +70,25 @@ enum LocalSettingsSubCategories {
}

enum LocalSettings {
/// -------------------------- Setting entries which allow searching for top-level settings pages --------------------------
settingsPageGeneral(name: 'settings_page_general', key: 'settingsPageGeneral', category: LocalSettingsCategories.general, subCategory: LocalSettingsSubCategories.general, isPage: true),
settingsPageFilters(name: 'settings_page_filters', key: 'settingsPageFilters', category: LocalSettingsCategories.filters, subCategory: LocalSettingsSubCategories.general, isPage: true),
settingsPageAppearance(name: 'settings_page_appearance', key: 'settingsPageAppearance', category: LocalSettingsCategories.appearance, subCategory: LocalSettingsSubCategories.general, isPage: true),
settingsPageGestures(name: 'settings_page_gestures', key: 'settingsPageGestures', category: LocalSettingsCategories.gestures, subCategory: LocalSettingsSubCategories.general, isPage: true),
settingsPageVideo(name: 'settings_page_video', key: 'settingsPageVideo', category: LocalSettingsCategories.videoPlayer, subCategory: LocalSettingsSubCategories.general, isPage: true),
settingsPageFloatingActionButton(
name: 'settings_page_floating_action_button',
key: 'settingsPageFloatingActionButton',
category: LocalSettingsCategories.floatingActionButton,
subCategory: LocalSettingsSubCategories.general,
isPage: true),
settingsPageAccessibility(
name: 'settings_page_accessibility', key: 'settingsPageAccessibility', category: LocalSettingsCategories.accessibility, subCategory: LocalSettingsSubCategories.general, isPage: true),
settingsPageAccount(name: 'settings_page_account', key: 'settingsPageAccount', category: LocalSettingsCategories.account, subCategory: LocalSettingsSubCategories.general, isPage: true),
settingsPageUserLabels(name: 'settings_page_user_labels', key: 'settingsPageUserLabels', category: LocalSettingsCategories.userLabels, subCategory: LocalSettingsSubCategories.general, isPage: true),
settingsPageAbout(name: 'settings_page_about', key: 'settingsPageAbout', category: LocalSettingsCategories.about, subCategory: LocalSettingsSubCategories.general, isPage: true),
settingsPageDebug(name: 'settings_page_debug', key: 'settingsPageDebug', category: LocalSettingsCategories.debug, subCategory: LocalSettingsSubCategories.general, isPage: true),

/// -------------------------- Account Settings --------------------------
// Discussion Languages
discussionLanguages(name: 'account_discussion_languages', key: 'discussionLanguages', category: LocalSettingsCategories.account, subCategory: LocalSettingsSubCategories.contentManagement),
Expand Down Expand Up @@ -379,6 +399,7 @@ enum LocalSettings {
required this.subCategory,
required this.key,
this.searchable = true,
this.isPage = false,
});

/// The name of the setting as stored in local preferences
Expand All @@ -398,6 +419,9 @@ enum LocalSettings {
/// Whether this setting should appear as a search result
final bool searchable;

/// Whether this settings entry represents a whole page of settings
final bool isPage;

/// Defines the settings that are excluded from import/export
static List<LocalSettings> importExportExcludedSettings = [
LocalSettings.currentAnonymousInstance,
Expand All @@ -408,6 +432,17 @@ enum LocalSettings {
extension LocalizationExt on AppLocalizations {
String getLocalSettingLocalization(String key) {
Map<String, String> localizationMap = {
'settingsPageDebug': settingsPageDebug,
'settingsPageAbout': settingsPageAbout,
'settingsPageUserLabels': settingsPageUserLabels,
'settingsPageAccount': settingsPageAccount,
'settingsPageAccessibility': settingsPageAccessibility,
'settingsPageFloatingActionButton': settingsPageFloatingActionButton,
'settingsPageVideo': settingsPageVideo,
'settingsPageGestures': settingsPageGestures,
'settingsPageAppearance': settingsPageAppearance,
'settingsPageFilters': settingsPageFilters,
'settingsPageGeneral': settingsPageGeneral,
'defaultFeedType': defaultFeedType,
'defaultFeedSortType': defaultFeedSortType,
'hideNsfwPostsFromFeed': hideNsfwPostsFromFeed,
Expand Down
48 changes: 48 additions & 0 deletions lib/l10n/app_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -2137,6 +2137,54 @@
"@settingsNotImportedSuccessfully": {
"description": "Message shown to the user when the settings were imported unsuccessfully"
},
"settingsPage": "Settings Page",
"@settingsPage": {
"description": "Settings page subtitle for search results"
},
"settingsPageAbout": "About",
"@settingsPageAbout": {
"description": "About settings page"
},
"settingsPageAccessibility": "Accessibility",
"@settingsPageAccessibility": {
"description": "Accessibility settings page"
},
"settingsPageAccount": "Account",
"@settingsPageAccount": {
"description": "Account settings page"
},
"settingsPageAppearance": "Appearance",
"@settingsPageAppearance": {
"description": "Appearance settings page"
},
"settingsPageDebug": "Debug",
"@settingsPageDebug": {
"description": "Debug settings page"
},
"settingsPageFilters": "Filters",
"@settingsPageFilters": {
"description": "Filters settings page"
},
"settingsPageFloatingActionButton": "Floating Action Button",
"@settingsPageFloatingActionButton": {
"description": "Floating action button settings page"
},
"settingsPageGeneral": "General",
"@settingsPageGeneral": {
"description": "General settings page"
},
"settingsPageGestures": "Gestures",
"@settingsPageGestures": {
"description": "Gestures settings page"
},
"settingsPageUserLabels": "User Labels",
"@settingsPageUserLabels": {
"description": "User labels settings page"
},
"settingsPageVideo": "Video",
"@settingsPageVideo": {
"description": "Video settings page"
},
"share": "Share",
"@share": {},
"shareComment": "Share Comment Link",
Expand Down
5 changes: 3 additions & 2 deletions lib/settings/pages/settings_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,9 @@ class _SettingsPageState extends State<SettingsPage> {
return List<ListTile>.generate(
localSettings.length,
(index) => ListTile(
subtitle: Text(
"${l10n.getLocalSettingLocalization(localSettings[index].category.toString())}${' > ${l10n.getLocalSettingLocalization(localSettings[index].subCategory.toString())}'}"),
subtitle: Text(localSettings[index].isPage
? l10n.settingsPage
: "${l10n.getLocalSettingLocalization(localSettings[index].category.toString())}${' > ${l10n.getLocalSettingLocalization(localSettings[index].subCategory.toString())}'}"),
onTap: () {
controller.closeView(null);
controller.clear();
Expand Down
7 changes: 7 additions & 0 deletions lib/utils/settings_utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,16 @@ import 'package:thunder/account/bloc/account_bloc.dart';
import 'package:thunder/core/auth/bloc/auth_bloc.dart';
import 'package:thunder/core/enums/local_settings.dart';
import 'package:thunder/settings/pages/about_settings_page.dart';
import 'package:thunder/settings/pages/accessibility_settings_page.dart';
import 'package:thunder/settings/pages/appearance_settings_page.dart';
import 'package:thunder/settings/pages/comment_appearance_settings_page.dart';
import 'package:thunder/settings/pages/debug_settings_page.dart';
import 'package:thunder/settings/pages/filter_settings_page.dart';
import 'package:thunder/settings/pages/general_settings_page.dart';
import 'package:thunder/settings/pages/gesture_settings_page.dart';
import 'package:thunder/settings/pages/post_appearance_settings_page.dart';
import 'package:thunder/settings/pages/theme_settings_page.dart';
import 'package:thunder/settings/pages/user_labels_settings_page.dart';
import 'package:thunder/settings/pages/video_player_settings.dart';
import 'package:thunder/shared/snackbar.dart';
import 'package:thunder/thunder/bloc/thunder_bloc.dart';
Expand All @@ -38,6 +41,7 @@ void navigateToSetting(BuildContext context, LocalSettings setting) {
LocalSettingsCategories.debug: SETTINGS_DEBUG_PAGE,
LocalSettingsCategories.about: SETTINGS_ABOUT_PAGE,
LocalSettingsCategories.videoPlayer: SETTINGS_VIDEO_PAGE,
LocalSettingsCategories.appearance: SETTINGS_APPEARANCE_PAGE,
}[setting.category] ??
SETTINGS_GENERAL_PAGE;

Expand Down Expand Up @@ -86,6 +90,9 @@ void navigateToSetting(BuildContext context, LocalSettings setting) {
SETTINGS_APPEARANCE_THEMES_PAGE => ThemeSettingsPage(settingToHighlight: setting),
SETTINGS_DEBUG_PAGE => DebugSettingsPage(settingToHighlight: setting),
SETTINGS_VIDEO_PAGE => VideoPlayerSettingsPage(settingToHighlight: setting),
SETTINGS_USER_LABELS_PAGE => UserLabelSettingsPage(settingToHighlight: setting),
SETTINGS_ACCESSIBILITY_PAGE => AccessibilitySettingsPage(settingToHighlight: setting),
SETTINGS_APPEARANCE_PAGE => AppearanceSettingsPage(settingToHighlight: setting),
_ => Container(),
},
),
Expand Down

0 comments on commit b549268

Please sign in to comment.