diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/AppDialogPresenter.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/AppDialogPresenter.java index 0631ba1bd3..1c5c362f38 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/AppDialogPresenter.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/AppDialogPresenter.java @@ -164,6 +164,10 @@ public boolean isCommentsDialogShown() { return isDialogShown() && isTypeComments(); } + public List getCategories() { + return mCategories; + } + public void appendCategory(OptionCategory category) { mCategories.add(category); } diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/AutoFrameRateSettingsPresenter.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/AutoFrameRateSettingsPresenter.java index b1a76bba5a..f3669d5d8b 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/AutoFrameRateSettingsPresenter.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/AutoFrameRateSettingsPresenter.java @@ -27,11 +27,15 @@ public void show() { public void show(Runnable onFinish) { AppDialogPresenter settingsPresenter = AppDialogPresenter.instance(getContext()); + appendCategories(settingsPresenter); + + settingsPresenter.showDialog(getContext().getString(R.string.auto_frame_rate), onFinish); + } + + public void appendCategories(AppDialogPresenter settingsPresenter) { appendAutoFrameRateCategory(settingsPresenter); appendAutoFrameRatePauseCategory(settingsPresenter); appendAutoFrameRateModesCategory(settingsPresenter); - - settingsPresenter.showDialog(getContext().getString(R.string.auto_frame_rate), onFinish); } private void appendAutoFrameRateCategory(AppDialogPresenter settingsPresenter) { diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/BackupSettingsPresenter.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/BackupSettingsPresenter.java index 988edea00a..e9e28515f3 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/BackupSettingsPresenter.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/BackupSettingsPresenter.java @@ -64,13 +64,17 @@ public void showLocalRestoreDialogApi30() { private void createAndShowDialog() { AppDialogPresenter settingsPresenter = AppDialogPresenter.instance(getContext()); + appendCategories(settingsPresenter); + + settingsPresenter.showDialog(getContext().getString(R.string.app_backup_restore), this::unhold); + } + + public void appendCategories(AppDialogPresenter settingsPresenter) { appendLocalBackupCategory(settingsPresenter); appendDriveBackupCategory(settingsPresenter); appendSubscriptionsBackupButton(settingsPresenter); - - settingsPresenter.showDialog(getContext().getString(R.string.app_backup_restore), this::unhold); } private void appendDriveBackupCategory(AppDialogPresenter settingsPresenter) { diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/DeArrowSettingsPresenter.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/DeArrowSettingsPresenter.java index a0b03c0f81..e2790fd327 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/DeArrowSettingsPresenter.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/DeArrowSettingsPresenter.java @@ -32,11 +32,15 @@ public static DeArrowSettingsPresenter instance(Context context) { public void show(Runnable onFinish) { AppDialogPresenter settingsPresenter = AppDialogPresenter.instance(getContext()); + appendCategories(settingsPresenter); + + settingsPresenter.showDialog(getContext().getString(R.string.dearrow_provider), onFinish); + } + + public void appendCategories(AppDialogPresenter settingsPresenter) { appendSwitches(settingsPresenter); appendThumbQuality(settingsPresenter); appendLinks(settingsPresenter); - - settingsPresenter.showDialog(getContext().getString(R.string.dearrow_provider), onFinish); } public void show() { diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/GeneralSettingsPresenter.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/GeneralSettingsPresenter.java index d17c5196f8..87ca657016 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/GeneralSettingsPresenter.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/GeneralSettingsPresenter.java @@ -71,6 +71,12 @@ public static GeneralSettingsPresenter instance(Context context) { public void show() { AppDialogPresenter settingsPresenter = AppDialogPresenter.instance(getContext()); + appendCategories(settingsPresenter); + + settingsPresenter.showDialog(getContext().getString(R.string.settings_general), mOnFinish); + } + + public void appendCategories(AppDialogPresenter settingsPresenter) { appendBootToSection(settingsPresenter); appendEnabledSections(settingsPresenter); appendContextMenuItemsCategory(settingsPresenter); @@ -82,8 +88,6 @@ public void show() { appendInternetCensorship(settingsPresenter); appendHistoryCategory(settingsPresenter); appendMiscCategory(settingsPresenter); - - settingsPresenter.showDialog(getContext().getString(R.string.settings_general), mOnFinish); } private void appendEnabledSections(AppDialogPresenter settingsPresenter) { diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/LanguageSettingsPresenter.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/LanguageSettingsPresenter.java index 8dd3453e82..75f5b54dc9 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/LanguageSettingsPresenter.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/LanguageSettingsPresenter.java @@ -39,12 +39,16 @@ public static LanguageSettingsPresenter instance(Context context) { public void show() { AppDialogPresenter settingsPresenter = AppDialogPresenter.instance(getContext()); - appendLanguageCategory(settingsPresenter); - appendCountryCategory(settingsPresenter); + appendCategories(settingsPresenter); settingsPresenter.showDialog(getContext().getString(R.string.settings_language_country), mOnFinish); } + public void appendCategories(AppDialogPresenter settingsPresenter) { + appendLanguageCategory(settingsPresenter); + appendCountryCategory(settingsPresenter); + } + private void appendLanguageCategory(AppDialogPresenter settingsPresenter) { Map languages = getSupportedLanguages(); String language = mLangUpdater.getPreferredLanguage(); diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/MainUISettingsPresenter.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/MainUISettingsPresenter.java index 6ef806f3cd..234ef6fab7 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/MainUISettingsPresenter.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/MainUISettingsPresenter.java @@ -48,6 +48,12 @@ public static MainUISettingsPresenter instance(Context context) { public void show() { AppDialogPresenter settingsPresenter = AppDialogPresenter.instance(getContext()); + appendCategories(settingsPresenter); + + settingsPresenter.showDialog(getContext().getString(R.string.dialog_main_ui), mOnFinish); + } + + public void appendCategories(AppDialogPresenter settingsPresenter) { appendTopButtonsCategory(settingsPresenter); appendColorScheme(settingsPresenter); if (Build.VERSION.SDK_INT > 19) { @@ -65,8 +71,6 @@ public void show() { } //appendTimeFormatCategory(settingsPresenter); appendMiscCategory(settingsPresenter); - - settingsPresenter.showDialog(getContext().getString(R.string.dialog_main_ui), mOnFinish); } private void appendTopButtonsCategory(AppDialogPresenter settingsPresenter) { diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/PlayerSettingsPresenter.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/PlayerSettingsPresenter.java index 25a529be65..bc0a1a2484 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/PlayerSettingsPresenter.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/PlayerSettingsPresenter.java @@ -56,6 +56,12 @@ public static PlayerSettingsPresenter instance(Context context) { public void show() { AppDialogPresenter settingsPresenter = AppDialogPresenter.instance(getContext()); + appendCategories(settingsPresenter); + + settingsPresenter.showDialog(getContext().getString(R.string.settings_player), mOnFinish); + } + + public void appendCategories(AppDialogPresenter settingsPresenter) { appendPlaybackModeCategory(settingsPresenter); appendVideoPresetsCategory(settingsPresenter); appendPlayerButtonsCategory(settingsPresenter); @@ -78,8 +84,6 @@ public void show() { //appendPlayerExitCategory(settingsPresenter); appendMiscCategory(settingsPresenter); appendDeveloperCategory(settingsPresenter); - - settingsPresenter.showDialog(getContext().getString(R.string.settings_player), mOnFinish); } private void appendOKButtonCategory(AppDialogPresenter settingsPresenter) { diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/RemoteControlSettingsPresenter.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/RemoteControlSettingsPresenter.java index 16bd1f1e41..97e9d44e57 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/RemoteControlSettingsPresenter.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/RemoteControlSettingsPresenter.java @@ -56,12 +56,16 @@ public void show() { private void createAndShowDialog() { AppDialogPresenter settingsPresenter = AppDialogPresenter.instance(getContext()); + appendCategories(settingsPresenter); + + settingsPresenter.showDialog(getContext().getString(R.string.settings_remote_control), this::unhold); + } + + public void appendCategories(AppDialogPresenter settingsPresenter) { appendDeviceLinkSwitch(settingsPresenter); appendAddDeviceButton(settingsPresenter); appendRemoveAllDevicesButton(settingsPresenter); appendMiscCategory(settingsPresenter); - - settingsPresenter.showDialog(getContext().getString(R.string.settings_remote_control), this::unhold); } private void appendDeviceLinkSwitch(AppDialogPresenter settingsPresenter) { diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/SearchSettingsPresenter.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/SearchSettingsPresenter.java index dfc11821a9..21a41d5da2 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/SearchSettingsPresenter.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/SearchSettingsPresenter.java @@ -30,8 +30,7 @@ public static SearchSettingsPresenter instance(Context context) { public void show() { AppDialogPresenter settingsPresenter = AppDialogPresenter.instance(getContext()); - appendSpeechRecognizerCategory(settingsPresenter); - appendMiscCategory(settingsPresenter); + appendCategories(settingsPresenter); settingsPresenter.showDialog(getContext().getString(R.string.dialog_search), () -> { if (mSearchData.isSearchHistoryDisabled()) { @@ -40,6 +39,11 @@ public void show() { }); } + public void appendCategories(AppDialogPresenter settingsPresenter) { + appendSpeechRecognizerCategory(settingsPresenter); + appendMiscCategory(settingsPresenter); + } + private void appendSpeechRecognizerCategory(AppDialogPresenter settingsPresenter) { List options = new ArrayList<>(); diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/SettingsSearchPresenter.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/SettingsSearchPresenter.java new file mode 100644 index 0000000000..101d2a603a --- /dev/null +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/SettingsSearchPresenter.java @@ -0,0 +1,211 @@ +package com.liskovsoft.smartyoutubetv2.common.app.presenters.settings; + +import android.content.Context; + +import com.liskovsoft.smartyoutubetv2.common.R; +import com.liskovsoft.smartyoutubetv2.common.app.models.data.SettingsItem; +import com.liskovsoft.smartyoutubetv2.common.app.models.playback.ui.OptionCategory; +import com.liskovsoft.smartyoutubetv2.common.app.models.playback.ui.OptionItem; +import com.liskovsoft.smartyoutubetv2.common.app.models.playback.ui.UiOptionItem; +import com.liskovsoft.smartyoutubetv2.common.app.presenters.AppDialogPresenter; +import com.liskovsoft.smartyoutubetv2.common.app.presenters.base.BasePresenter; +import com.liskovsoft.smartyoutubetv2.common.misc.AppDataSourceManager; +import com.liskovsoft.smartyoutubetv2.common.utils.SimpleEditDialog; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * Provides a search feature for the Settings page. + * Dynamically harvests all categories and option items from each settings presenter + * to build a searchable index. Search results show breadcrumbs: + * "Option → Section › Category" so the user knows exactly where to find the matched setting. + */ +public class SettingsSearchPresenter extends BasePresenter { + + private SettingsSearchPresenter(Context context) { + super(context); + } + + public static SettingsSearchPresenter instance(Context context) { + return new SettingsSearchPresenter(context); + } + + public void show() { + SimpleEditDialog.show( + getContext(), + getContext().getString(R.string.search_in_settings), + getContext().getString(R.string.search_in_settings_hint), + null, + newValue -> { + performSearch(newValue); + return true; + } + ); + } + + private void performSearch(String query) { + if (query == null || query.trim().isEmpty()) { + return; + } + + String lowerQuery = query.toLowerCase().trim(); + List results = new ArrayList<>(); + Context context = getContext(); + + if (context == null) { + return; + } + + // Build the dynamic search index from all settings presenters + Map> searchIndex = buildDynamicSearchIndex(context); + + for (Map.Entry> entry : searchIndex.entrySet()) { + SettingsItem settingsItem = entry.getKey(); + List categories = entry.getValue(); + String settingsTitle = settingsItem.title; + + // Check if the top-level settings title matches + if (settingsTitle != null && settingsTitle.toLowerCase().contains(lowerQuery)) { + final Runnable onClick = settingsItem.onClick; + results.add(UiOptionItem.from( + settingsTitle, + optionItem -> onClick.run() + )); + } + + // Check each category and its option items + for (OptionCategory category : categories) { + String categoryTitle = category.title; + + // Check if the category title matches + if (categoryTitle != null && categoryTitle.toLowerCase().contains(lowerQuery)) { + final Runnable onClick = settingsItem.onClick; + String resultLabel = categoryTitle + " \u2192 " + settingsTitle; + results.add(UiOptionItem.from( + resultLabel, + optionItem -> onClick.run() + )); + } + + // Check individual option items within this category + if (category.options != null) { + for (OptionItem option : category.options) { + CharSequence optionTitle = option.getTitle(); + if (optionTitle != null && optionTitle.toString().toLowerCase().contains(lowerQuery)) { + final Runnable onClick = settingsItem.onClick; + // Show breadcrumb: "Option → Section › Category" + String breadcrumb; + if (categoryTitle != null) { + breadcrumb = optionTitle + " \u2192 " + settingsTitle + " \u203A " + categoryTitle; + } else { + breadcrumb = optionTitle + " \u2192 " + settingsTitle; + } + results.add(UiOptionItem.from( + breadcrumb, + optionItem -> onClick.run() + )); + } + } + } + } + } + + showResults(results, query); + } + + /** + * Dynamically builds the search index by calling each settings presenter's + * appendCategories() method on a temporary AppDialogPresenter, then harvesting + * the categories. This ensures the index is always in sync with the actual settings. + */ + private Map> buildDynamicSearchIndex(Context context) { + Map> index = new LinkedHashMap<>(); + List settingItems = AppDataSourceManager.instance().getSettingItems(context); + + // Map section title -> presenter class that can populate categories + // We use a map of title -> Runnable that populates a given AppDialogPresenter + Map providers = new LinkedHashMap<>(); + + providers.put(context.getString(R.string.settings_general), dialogPresenter -> + GeneralSettingsPresenter.instance(context).appendCategories(dialogPresenter)); + providers.put(context.getString(R.string.settings_player), dialogPresenter -> + PlayerSettingsPresenter.instance(context).appendCategories(dialogPresenter)); + providers.put(context.getString(R.string.dialog_main_ui), dialogPresenter -> + MainUISettingsPresenter.instance(context).appendCategories(dialogPresenter)); + providers.put(context.getString(R.string.settings_language_country), dialogPresenter -> + LanguageSettingsPresenter.instance(context).appendCategories(dialogPresenter)); + providers.put(context.getString(R.string.subtitle_category_title), dialogPresenter -> + SubtitleSettingsPresenter.instance(context).appendCategories(dialogPresenter)); + providers.put(context.getString(R.string.settings_search), dialogPresenter -> + SearchSettingsPresenter.instance(context).appendCategories(dialogPresenter)); + providers.put(context.getString(R.string.content_block_provider), dialogPresenter -> + SponsorBlockSettingsPresenter.instance(context).appendCategories(dialogPresenter)); + providers.put(context.getString(R.string.dearrow_provider), dialogPresenter -> + DeArrowSettingsPresenter.instance(context).appendCategories(dialogPresenter)); + providers.put(context.getString(R.string.auto_frame_rate), dialogPresenter -> + AutoFrameRateSettingsPresenter.instance(context).appendCategories(dialogPresenter)); + providers.put(context.getString(R.string.app_backup_restore), dialogPresenter -> + BackupSettingsPresenter.instance(context).appendCategories(dialogPresenter)); + providers.put(context.getString(R.string.settings_remote_control), dialogPresenter -> + RemoteControlSettingsPresenter.instance(context).appendCategories(dialogPresenter)); + + for (SettingsItem item : settingItems) { + if (item.title == null) continue; + // Skip the search card itself + if (item.title.equals(context.getString(R.string.search_in_settings))) continue; + + PresenterCategoryProvider provider = providers.get(item.title); + if (provider != null) { + // Create a temporary non-singleton AppDialogPresenter to harvest categories + AppDialogPresenter tempPresenter = new AppDialogPresenter(context); + try { + provider.appendCategories(tempPresenter); + } catch (Exception e) { + // If there's any error populating categories, skip this section + } + index.put(item, new ArrayList<>(tempPresenter.getCategories())); + } else { + index.put(item, new ArrayList<>()); + } + } + + return index; + } + + /** + * Functional interface for providing categories to a dialog presenter. + */ + private interface PresenterCategoryProvider { + void appendCategories(AppDialogPresenter dialogPresenter); + } + + private void showResults(List results, String query) { + Context context = getContext(); + if (context == null) { + return; + } + + AppDialogPresenter presenter = AppDialogPresenter.instance(context); + + if (results.isEmpty()) { + List emptyList = new ArrayList<>(); + emptyList.add(UiOptionItem.from( + context.getString(R.string.nothing_found) + ": \"" + query + "\"" + )); + presenter.appendStringsCategory( + context.getString(R.string.search_in_settings), + emptyList + ); + } else { + presenter.appendStringsCategory( + context.getString(R.string.search_in_settings) + " (" + results.size() + ")", + results + ); + } + + presenter.showDialog(context.getString(R.string.search_in_settings)); + } +} diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/SponsorBlockSettingsPresenter.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/SponsorBlockSettingsPresenter.java index 2632fa0769..bd5b3de8bd 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/SponsorBlockSettingsPresenter.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/SponsorBlockSettingsPresenter.java @@ -36,14 +36,18 @@ public static SponsorBlockSettingsPresenter instance(Context context) { public void show(Runnable onFinish) { AppDialogPresenter settingsPresenter = AppDialogPresenter.instance(getContext()); + appendCategories(settingsPresenter); + + settingsPresenter.showDialog(getContext().getString(R.string.content_block_provider), onFinish); + } + + public void appendCategories(AppDialogPresenter settingsPresenter) { appendSponsorBlockSwitch(settingsPresenter); appendExcludeChannelButton(settingsPresenter); appendActionsSection(settingsPresenter); appendColorMarkersSection(settingsPresenter); appendMiscSection(settingsPresenter); appendLinks(settingsPresenter); - - settingsPresenter.showDialog(getContext().getString(R.string.content_block_provider), onFinish); } public void show() { diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/SubtitleSettingsPresenter.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/SubtitleSettingsPresenter.java index 09f0028f01..4b0023988d 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/SubtitleSettingsPresenter.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/app/presenters/settings/SubtitleSettingsPresenter.java @@ -25,6 +25,12 @@ public static SubtitleSettingsPresenter instance(Context context) { public void show() { AppDialogPresenter settingsPresenter = AppDialogPresenter.instance(getContext()); + appendCategories(settingsPresenter); + + settingsPresenter.showDialog(getContext().getString(R.string.subtitle_category_title)); + } + + public void appendCategories(AppDialogPresenter settingsPresenter) { settingsPresenter.appendSingleSwitch(AppDialogUtil.createSubtitleChannelOption(getContext())); // Can't work properly. There is no robust language detection. //appendSubtitleLanguageCategory(settingsPresenter); @@ -32,8 +38,6 @@ public void show() { appendSubtitleStyleCategory(settingsPresenter); appendSubtitleSizeCategory(settingsPresenter); appendSubtitlePositionCategory(settingsPresenter); - - settingsPresenter.showDialog(getContext().getString(R.string.subtitle_category_title)); } //private void appendSubtitleLanguageCategory(AppSettingsPresenter settingsPresenter) { diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/misc/AppDataSourceManager.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/misc/AppDataSourceManager.java index d9b4cf9f58..fef096d122 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/misc/AppDataSourceManager.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/misc/AppDataSourceManager.java @@ -17,6 +17,7 @@ import com.liskovsoft.smartyoutubetv2.common.app.presenters.settings.PlayerSettingsPresenter; import com.liskovsoft.smartyoutubetv2.common.app.presenters.settings.RemoteControlSettingsPresenter; import com.liskovsoft.smartyoutubetv2.common.app.presenters.settings.SearchSettingsPresenter; +import com.liskovsoft.smartyoutubetv2.common.app.presenters.settings.SettingsSearchPresenter; import com.liskovsoft.smartyoutubetv2.common.app.presenters.settings.SubtitleSettingsPresenter; import com.liskovsoft.smartyoutubetv2.common.exoplayer.selector.FormatItem.VideoPreset; import com.liskovsoft.smartyoutubetv2.common.utils.Utils; @@ -41,6 +42,8 @@ public static AppDataSourceManager instance() { public List getSettingItems(Context context) { List settingItems = new ArrayList<>(); + settingItems.add(new SettingsItem( + context.getString(R.string.search_in_settings), () -> SettingsSearchPresenter.instance(context).show(), R.drawable.settings_search)); settingItems.add(new SettingsItem( context.getString(R.string.settings_accounts), () -> AccountSettingsPresenter.instance(context).show(), R.drawable.settings_account)); settingItems.add(new SettingsItem( diff --git a/common/src/main/res/values-ar/strings.xml b/common/src/main/res/values-ar/strings.xml index 61b9e6efbe..62c6c4764d 100644 --- a/common/src/main/res/values-ar/strings.xml +++ b/common/src/main/res/values-ar/strings.xml @@ -717,4 +717,7 @@ مرة واحدة يوميًا مرة واحدة أسبوعيًا مرة واحدة شهريًا + البحث في الإعدادات + أدخل اسم الإعداد... + diff --git a/common/src/main/res/values-az/strings.xml b/common/src/main/res/values-az/strings.xml index a761d122f7..7fb5991cde 100644 --- a/common/src/main/res/values-az/strings.xml +++ b/common/src/main/res/values-az/strings.xml @@ -721,4 +721,7 @@ Bloklanmış kanal yoxdur Audio vaxtını uzatmaq Sürəti dəyişdirərkən səsi təbii saxlayır. Bəzi cihazlarda məhsuldarlığı əhəmiyyətli dərəcədə azalda bilər. + Ayarlarda axtar + Ayar adını yazın... + diff --git a/common/src/main/res/values-bg/strings.xml b/common/src/main/res/values-bg/strings.xml index eb7509502f..ac919e7269 100644 --- a/common/src/main/res/values-bg/strings.xml +++ b/common/src/main/res/values-bg/strings.xml @@ -594,4 +594,7 @@ Деактивиране на историята на търсенето Отключване на формати с висок битрейт 1080p vp9 Отключване на формати mp4a с висок битрейт + Търсене в настройките + Въведете име на настройка... + diff --git a/common/src/main/res/values-ca/strings.xml b/common/src/main/res/values-ca/strings.xml index 0c69998fc9..620c421e0b 100644 --- a/common/src/main/res/values-ca/strings.xml +++ b/common/src/main/res/values-ca/strings.xml @@ -505,4 +505,7 @@ Amaga els curts de la tendència Desactiva l\'historial Activeu l\'historial + Cerca a la configuració + Escriviu el nom de la configuració... + diff --git a/common/src/main/res/values-cs/strings.xml b/common/src/main/res/values-cs/strings.xml index 112627eb92..f9ee9d3eb4 100644 --- a/common/src/main/res/values-cs/strings.xml +++ b/common/src/main/res/values-cs/strings.xml @@ -732,6 +732,9 @@ Protahování času zvuku Zachovává přirozený hlas i při změně rychlosti. Na některých zařízeních může výrazně snížit výkon. Fronta respektuje režim přehrávání + Hledat v nastavení + Zadejte název nastavení... + diff --git a/common/src/main/res/values-da/strings.xml b/common/src/main/res/values-da/strings.xml index d00d5aa981..38df092a80 100644 --- a/common/src/main/res/values-da/strings.xml +++ b/common/src/main/res/values-da/strings.xml @@ -710,4 +710,7 @@ Ikke-lokaliserede videotitler Skaler ikke video til at passe dialog Deaktiver autokorrektion under indtastning + Søg i indstillinger + Skriv indstillingsnavn... + diff --git a/common/src/main/res/values-de/strings.xml b/common/src/main/res/values-de/strings.xml index 78112f1c47..74e813ffd7 100644 --- a/common/src/main/res/values-de/strings.xml +++ b/common/src/main/res/values-de/strings.xml @@ -729,4 +729,7 @@ Blockierung aufgehoben Blockierte Kanäle Keine blockierten Kanäle + In Einstellungen suchen + Einstellungsname eingeben... + diff --git a/common/src/main/res/values-el/strings.xml b/common/src/main/res/values-el/strings.xml index 4e7beb856e..59c72b5821 100644 --- a/common/src/main/res/values-el/strings.xml +++ b/common/src/main/res/values-el/strings.xml @@ -721,4 +721,7 @@ Μη μεταφρασμένοι τίτλοι Διάλογος \"μη γίνεται προασαρμογή βίντεο για ταίριασμα\" Απενεργοποίηση αυτόματης διόρθωσης κατά την πληκτρολόγηση κειμένου + Αναζήτηση στις ρυθμίσεις + Πληκτρολογήστε όνομα ρύθμισης... + diff --git a/common/src/main/res/values-es/strings.xml b/common/src/main/res/values-es/strings.xml index a37d9819df..75e7af4cd0 100644 --- a/common/src/main/res/values-es/strings.xml +++ b/common/src/main/res/values-es/strings.xml @@ -717,4 +717,7 @@ Canal desbloqueado Canales bloqueados No hay canales bloqueados + Buscar en ajustes + Escriba el nombre del ajuste... + diff --git a/common/src/main/res/values-et/strings.xml b/common/src/main/res/values-et/strings.xml index 393f095760..0a0eca62b1 100644 --- a/common/src/main/res/values-et/strings.xml +++ b/common/src/main/res/values-et/strings.xml @@ -618,4 +618,7 @@ Keela ajalugu kaugjuhtimise kasutamisel Klaviatuuri kuvamise parandamine klahvivajutusega OK (G20s ja teised) Midagi ei leitud + Otsi seadetest + Sisesta seade nimi... + diff --git a/common/src/main/res/values-fa-rIR/strings.xml b/common/src/main/res/values-fa-rIR/strings.xml index 074d5121fe..d44e38afa2 100644 --- a/common/src/main/res/values-fa-rIR/strings.xml +++ b/common/src/main/res/values-fa-rIR/strings.xml @@ -694,4 +694,7 @@ مرتب‌سازی منوی زمینه تمرکز صوتی (مکث در صورت شناسایی سایر پخش‌کننده‌ها) اعلان محتوای پولی + جستجو در تنظیمات + نام تنظیم را تایپ کنید... + diff --git a/common/src/main/res/values-fi/strings.xml b/common/src/main/res/values-fi/strings.xml index a92f5559fb..cc56836c0b 100644 --- a/common/src/main/res/values-fi/strings.xml +++ b/common/src/main/res/values-fi/strings.xml @@ -725,4 +725,7 @@ Pitää äänen luonnollisena nopeutta vaihdettaessa. Saattaa heikentää suorituskykyä merkittävästi joillakin laitteilla. Toistojono noudattaa toistotilaa Toista alusta + Etsi asetuksista + Kirjoita asetuksen nimi... + diff --git a/common/src/main/res/values-fr/strings.xml b/common/src/main/res/values-fr/strings.xml index 3a03edcde3..2c522252c2 100644 --- a/common/src/main/res/values-fr/strings.xml +++ b/common/src/main/res/values-fr/strings.xml @@ -731,4 +731,7 @@ Informations de débogage Étirement temporel audio Conserve une voix naturelle lors du changement de vitesse. Peut réduire significativement les performances sur certains appareils. + Rechercher dans les paramètres + Entrez le nom du paramètre... + diff --git a/common/src/main/res/values-gl-rES/strings.xml b/common/src/main/res/values-gl-rES/strings.xml index 29e2e81f82..7a2fbaf8fd 100644 --- a/common/src/main/res/values-gl-rES/strings.xml +++ b/common/src/main/res/values-gl-rES/strings.xml @@ -710,4 +710,7 @@ Non redimensionar o vídeo para axustalo ao diálogo Desactivar a autocorrección ao escribir texto Suxestións desprazables horizontalmente + Buscar na configuración + Escriba o nome do axuste... + diff --git a/common/src/main/res/values-he/strings.xml b/common/src/main/res/values-he/strings.xml index 6e99fc62b3..fec9e53107 100644 --- a/common/src/main/res/values-he/strings.xml +++ b/common/src/main/res/values-he/strings.xml @@ -698,4 +698,7 @@ So, make a copy of values-he and name it values-iw. Keep both in your structure. הסרטונים שלי מיקוד שמע (השהה אם זוהו נגנים אחרים) התראת תוכן בתשלום + חפש בהגדרות + הקלד שם הגדרה... + diff --git a/common/src/main/res/values-hi/strings.xml b/common/src/main/res/values-hi/strings.xml index d2cdf86d4e..d656dd139f 100644 --- a/common/src/main/res/values-hi/strings.xml +++ b/common/src/main/res/values-hi/strings.xml @@ -570,4 +570,7 @@ शॉर्ट्स उच्च बिटरेट 1080p VP9 प्रारूप अनलॉक करें उच्च बिटरेट mp4a प्रारूप अनलॉक करें + सेटिंग्स में खोजें + सेटिंग का नाम टाइप करें... + diff --git a/common/src/main/res/values-hr/strings.xml b/common/src/main/res/values-hr/strings.xml index afe616d7d0..3d02b89f75 100644 --- a/common/src/main/res/values-hr/strings.xml +++ b/common/src/main/res/values-hr/strings.xml @@ -495,4 +495,7 @@ Podržani načini Učitavanje… Sakrij strujanja iz Pretplata + Pretraži u postavkama + Upišite naziv postavke... + diff --git a/common/src/main/res/values-hu/strings.xml b/common/src/main/res/values-hu/strings.xml index 5bcec5b517..bd979672ec 100644 --- a/common/src/main/res/values-hu/strings.xml +++ b/common/src/main/res/values-hu/strings.xml @@ -712,4 +712,7 @@ Az automatikus javítás letiltása szöveg beírása közben Vízszintesen görgetett Javaslatok Minden beállítás törlése! + Keresés a beállításokban + Gépelje be a beállítás nevét... + diff --git a/common/src/main/res/values-hy/strings.xml b/common/src/main/res/values-hy/strings.xml index da9154a957..cef456fda9 100644 --- a/common/src/main/res/values-hy/strings.xml +++ b/common/src/main/res/values-hy/strings.xml @@ -145,4 +145,7 @@ Կարուսել (դանդաղ) Կարուսել (արագ) Ապաբաժանորդագրվել ալիքից + Որոնել կարգավորումներում + Մուտքագրեք կարգավորման անունը... + \ No newline at end of file diff --git a/common/src/main/res/values-in/strings.xml b/common/src/main/res/values-in/strings.xml index 82d00f610d..82349f229b 100644 --- a/common/src/main/res/values-in/strings.xml +++ b/common/src/main/res/values-in/strings.xml @@ -683,4 +683,7 @@ Vidio tanpa suara Vidio dengan suara Pratinjau kartu + Cari di pengaturan + Ketik nama pengaturan... + diff --git a/common/src/main/res/values-it/strings.xml b/common/src/main/res/values-it/strings.xml index b46b3600a3..6decf8909e 100644 --- a/common/src/main/res/values-it/strings.xml +++ b/common/src/main/res/values-it/strings.xml @@ -731,4 +731,7 @@ Nessun canale bloccato Dilatazione del tempo audio Mantiene la voce naturale quando si cambia velocità. Potrebbe ridurre significativamente le prestazioni su alcuni dispositivi. + Cerca nelle impostazioni + Digita il nome dell'impostazione... + diff --git a/common/src/main/res/values-iw/strings.xml b/common/src/main/res/values-iw/strings.xml index 6e99fc62b3..fec9e53107 100644 --- a/common/src/main/res/values-iw/strings.xml +++ b/common/src/main/res/values-iw/strings.xml @@ -698,4 +698,7 @@ So, make a copy of values-he and name it values-iw. Keep both in your structure. הסרטונים שלי מיקוד שמע (השהה אם זוהו נגנים אחרים) התראת תוכן בתשלום + חפש בהגדרות + הקלד שם הגדרה... + diff --git a/common/src/main/res/values-ja/strings.xml b/common/src/main/res/values-ja/strings.xml index b1520d1c80..7167cc1042 100644 --- a/common/src/main/res/values-ja/strings.xml +++ b/common/src/main/res/values-ja/strings.xml @@ -719,4 +719,7 @@ ブロックを解除しました ブロックしたチャンネル ブロックしたチャンネルはありません + 設定を検索 + 設定名を入力... + diff --git a/common/src/main/res/values-ko/strings.xml b/common/src/main/res/values-ko/strings.xml index 9d2530b768..8ff3d31e4e 100644 --- a/common/src/main/res/values-ko/strings.xml +++ b/common/src/main/res/values-ko/strings.xml @@ -714,4 +714,7 @@ 차단 해제됨 차단된 채널 차단된 채널 없음 + 설정에서 검색 + 설정 이름 입력... + diff --git a/common/src/main/res/values-lt/strings.xml b/common/src/main/res/values-lt/strings.xml index fdb47a218c..e1128efeec 100644 --- a/common/src/main/res/values-lt/strings.xml +++ b/common/src/main/res/values-lt/strings.xml @@ -411,4 +411,7 @@ Pradedant leisti vaizdo įrašą netikrinti, ar kodekas yra palaikomas. Gali padėti, jei programinėje įrangoje yra klaidų. Naudoti programinį vaizdo dekoderį Gali atkurti beveik bet kurį vaizdo įrašą, bet atkūrimo sparta yra labai maža. + Ieškoti nustatymuose + Įveskite nustatymo pavadinimą... + diff --git a/common/src/main/res/values-lv/strings.xml b/common/src/main/res/values-lv/strings.xml index d8472a0cb0..962c085082 100644 --- a/common/src/main/res/values-lv/strings.xml +++ b/common/src/main/res/values-lv/strings.xml @@ -119,4 +119,7 @@ Jauns saturs Alfabētiski Pēdējais skatītais + Meklēt iestatījumos + Ierakstiet iestatījuma nosaukumu... + \ No newline at end of file diff --git a/common/src/main/res/values-mo/strings.xml b/common/src/main/res/values-mo/strings.xml index ffc44e7dec..a7add11d7c 100644 --- a/common/src/main/res/values-mo/strings.xml +++ b/common/src/main/res/values-mo/strings.xml @@ -127,4 +127,7 @@ Show clock Show remaining time Open channel videos + Caută în setări + Introduceți numele setării... + \ No newline at end of file diff --git a/common/src/main/res/values-nb/strings.xml b/common/src/main/res/values-nb/strings.xml index a9967a4517..f521cf2352 100644 --- a/common/src/main/res/values-nb/strings.xml +++ b/common/src/main/res/values-nb/strings.xml @@ -707,4 +707,7 @@ Forhåndsvisning av kort Ikke-lokaliserte videotitler Ikke endre størrelsen på videoen for å passe i dialogboksen + Søk i innstillinger + Skriv innstillingsnavn... + \ No newline at end of file diff --git a/common/src/main/res/values-nl/strings.xml b/common/src/main/res/values-nl/strings.xml index e08c677829..03d26b0332 100644 --- a/common/src/main/res/values-nl/strings.xml +++ b/common/src/main/res/values-nl/strings.xml @@ -717,4 +717,7 @@ Foutopsporingsinformatie Audio-tijdverlenging Behoudt de natuurlijke stem bij het veranderen van de snelheid. Kan de prestaties op sommige apparaten aanzienlijk verminderen. + Zoeken in instellingen + Typ instellingsnaam... + diff --git a/common/src/main/res/values-pl/strings.xml b/common/src/main/res/values-pl/strings.xml index dac8631fec..cf03bff991 100644 --- a/common/src/main/res/values-pl/strings.xml +++ b/common/src/main/res/values-pl/strings.xml @@ -729,4 +729,7 @@ Kanał odblokowany Zablokowane kanały Brak zablokowanych kanałów + Szukaj w ustawieniach + Wpisz nazwę ustawienia... + diff --git a/common/src/main/res/values-pt-rBR/strings.xml b/common/src/main/res/values-pt-rBR/strings.xml index 46a1d8bb31..2c2c68aa8a 100644 --- a/common/src/main/res/values-pt-rBR/strings.xml +++ b/common/src/main/res/values-pt-rBR/strings.xml @@ -728,4 +728,7 @@ Canal desbloqueado Canais bloqueados Nenhum canal bloqueado + Pesquisar nas configurações + Digite o nome da configuração... + diff --git a/common/src/main/res/values-pt-rPT/strings.xml b/common/src/main/res/values-pt-rPT/strings.xml index 1bbd589f92..ceda8a6991 100644 --- a/common/src/main/res/values-pt-rPT/strings.xml +++ b/common/src/main/res/values-pt-rPT/strings.xml @@ -728,4 +728,7 @@ Canal desbloqueado Canais bloqueados Nenhum canal bloqueado + Pesquisar nas definições + Escreva o nome da definição... + diff --git a/common/src/main/res/values-ro/strings.xml b/common/src/main/res/values-ro/strings.xml index 66d6e9cb7f..1eff4773b5 100644 --- a/common/src/main/res/values-ro/strings.xml +++ b/common/src/main/res/values-ro/strings.xml @@ -665,4 +665,7 @@ Copie de rezervă locală Copie de rezervă automată (o dată pe zi) Redă lista de redare sau videoclipurile canalului în ordine inversă + Caută în setări + Introduceți numele setării... + diff --git a/common/src/main/res/values-ru/strings.xml b/common/src/main/res/values-ru/strings.xml index 7d9d9fabd4..99184b42d2 100644 --- a/common/src/main/res/values-ru/strings.xml +++ b/common/src/main/res/values-ru/strings.xml @@ -722,4 +722,7 @@ Растяжение аудио во времени Сохраняет естественное звучание голоса при изменении скорости. Может значительно снизить производительность на некоторых устройствах. Очередь учитывает режим воспроизведения + Поиск в настройках + Введите название настройки... + diff --git a/common/src/main/res/values-sk/strings.xml b/common/src/main/res/values-sk/strings.xml index f5cbe82472..fefdf82caf 100644 --- a/common/src/main/res/values-sk/strings.xml +++ b/common/src/main/res/values-sk/strings.xml @@ -729,4 +729,7 @@ Kanál odblokovaný Zablokované kanály Žiadne zablokované kanály + Hľadať v nastaveniach + Zadajte názov nastavenia... + diff --git a/common/src/main/res/values-sl/strings.xml b/common/src/main/res/values-sl/strings.xml index 63dac045aa..98037cd99b 100644 --- a/common/src/main/res/values-sl/strings.xml +++ b/common/src/main/res/values-sl/strings.xml @@ -296,4 +296,7 @@ Dodaj na seznam predvajanja Samodejno prikaži tipkovnico + Iskanje v nastavitvah + Vnesite ime nastavitve... + diff --git a/common/src/main/res/values-sq/strings.xml b/common/src/main/res/values-sq/strings.xml index 6db896ffc3..12cfafdef8 100644 --- a/common/src/main/res/values-sq/strings.xml +++ b/common/src/main/res/values-sq/strings.xml @@ -710,4 +710,7 @@ Do ta fshish %s përgjithmonë? Kalo te kapitulli tjetër duke klikuar mbi njoftimin Sugjerime të lëvizura horizontalisht + Kërko në cilësimet + Shkruani emrin e cilësimit... + diff --git a/common/src/main/res/values-sr/strings.xml b/common/src/main/res/values-sr/strings.xml index 61b8eb6ffb..63d01864b4 100644 --- a/common/src/main/res/values-sr/strings.xml +++ b/common/src/main/res/values-sr/strings.xml @@ -711,4 +711,7 @@ Не мењај величину видеа да би се уклопио у дијалог Онемогући аутоматско исправљање приликом куцања текста Хоризонтално померани предлози + Претражи у подешавањима + Унесите назив подешавања... + diff --git a/common/src/main/res/values-sv/strings.xml b/common/src/main/res/values-sv/strings.xml index c8f9c8fbea..e444679dfa 100644 --- a/common/src/main/res/values-sv/strings.xml +++ b/common/src/main/res/values-sv/strings.xml @@ -721,4 +721,7 @@ En gång om dagen En gång i veckan En gång i månaden + Sök i inställningar + Skriv inställningsnamn... + diff --git a/common/src/main/res/values-te/strings.xml b/common/src/main/res/values-te/strings.xml index 46938deb5a..e9ca6be9cb 100644 --- a/common/src/main/res/values-te/strings.xml +++ b/common/src/main/res/values-te/strings.xml @@ -214,4 +214,7 @@ ఇష్టపడే నవీకరణ మూలం + సెట్టింగ్స్ లో వెతకండి + సెట్టింగ్ పేరు టైప్ చేయండి... + \ No newline at end of file diff --git a/common/src/main/res/values-th/strings.xml b/common/src/main/res/values-th/strings.xml index f491d4bc05..835e084f93 100644 --- a/common/src/main/res/values-th/strings.xml +++ b/common/src/main/res/values-th/strings.xml @@ -323,4 +323,7 @@ อัปเดตข้อผิดพลาด ซ่อน shorts จากประวัติการเข้าชม Disable screensaver + ค้นหาในการตั้งค่า + พิมพ์ชื่อการตั้งค่า... + diff --git a/common/src/main/res/values-tr/strings.xml b/common/src/main/res/values-tr/strings.xml index 9168cad4e5..d5757fa27c 100644 --- a/common/src/main/res/values-tr/strings.xml +++ b/common/src/main/res/values-tr/strings.xml @@ -732,4 +732,7 @@ Ses zaman esnetme Hız değiştirildiğinde sesi doğal tutar. Bazı cihazlarda performansı önemli ölçüde düşürebilir. Kuyruk oynatma modunu dikkate alır + Ayarlarda ara + Ayar adını yazın... + diff --git a/common/src/main/res/values-uk/strings.xml b/common/src/main/res/values-uk/strings.xml index 9ed94b906d..879b817063 100644 --- a/common/src/main/res/values-uk/strings.xml +++ b/common/src/main/res/values-uk/strings.xml @@ -720,4 +720,7 @@ Розтягування аудіо в часі Зберігає природний голос при зміні швидкості. Може суттєво знизити продуктивність на деяких пристроях. Черга враховує режим відтворення + Пошук у налаштуваннях + Введіть назву налаштування... + diff --git a/common/src/main/res/values-vi/strings.xml b/common/src/main/res/values-vi/strings.xml index 3aa0517bde..0d5c90ba00 100644 --- a/common/src/main/res/values-vi/strings.xml +++ b/common/src/main/res/values-vi/strings.xml @@ -720,4 +720,7 @@ Đã bỏ chặn kênh Kênh đã chặn Không có kênh nào bị chặn + Tìm kiếm trong cài đặt + Nhập tên cài đặt... + diff --git a/common/src/main/res/values-zh-rTW/strings.xml b/common/src/main/res/values-zh-rTW/strings.xml index a07d7e29b0..25c19ddddb 100644 --- a/common/src/main/res/values-zh-rTW/strings.xml +++ b/common/src/main/res/values-zh-rTW/strings.xml @@ -729,4 +729,7 @@ 已解除封鎖 封鎖的頻道 沒有封鎖的頻道 + 在設定中搜尋 + 輸入設定名稱... + \ No newline at end of file diff --git a/common/src/main/res/values-zh/strings.xml b/common/src/main/res/values-zh/strings.xml index 6e4dff701a..a8981c2c27 100644 --- a/common/src/main/res/values-zh/strings.xml +++ b/common/src/main/res/values-zh/strings.xml @@ -732,4 +732,7 @@ 音频时间拉伸 变速时保持语音自然。可能会显著降低某些设备的性能。 队列遵循播放模式 + 在设置中搜索 + 输入设置名称... + diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index b877f7b267..7c7509a20c 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -732,4 +732,7 @@ Audio time stretching Keeps voice natural when changing speed. May significantly reduce performance on some devices. Queue respects playback mode + Search in settings + Type to search… +