diff --git a/app/src/main/java/app/revanced/integrations/youtube/patches/AlternativeThumbnailsPatch.java b/app/src/main/java/app/revanced/integrations/youtube/patches/AlternativeThumbnailsPatch.java index 1e0d2e1eeb..888649f6f4 100644 --- a/app/src/main/java/app/revanced/integrations/youtube/patches/AlternativeThumbnailsPatch.java +++ b/app/src/main/java/app/revanced/integrations/youtube/patches/AlternativeThumbnailsPatch.java @@ -163,12 +163,14 @@ private static Uri validateSettings() { } private static EnumSetting optionSettingForCurrentNavigation() { - if (NavigationBar.isSearchBarActive()) { // Must check search first. - return ALT_THUMBNAIL_SEARCH; - } + // Must check player type first, as search bar can be active behind the player. if (PlayerType.getCurrent().isMaximizedOrFullscreen()) { return ALT_THUMBNAIL_PLAYER; } + // Must check second, as search can be from any tab. + if (NavigationBar.isSearchBarActive()) { + return ALT_THUMBNAIL_SEARCH; + } if (NavigationButton.HOME.isSelected()) { return ALT_THUMBNAIL_HOME; } diff --git a/app/src/main/java/app/revanced/integrations/youtube/patches/components/KeywordContentFilter.java b/app/src/main/java/app/revanced/integrations/youtube/patches/components/KeywordContentFilter.java index 7858bb7477..ed6e63f07f 100644 --- a/app/src/main/java/app/revanced/integrations/youtube/patches/components/KeywordContentFilter.java +++ b/app/src/main/java/app/revanced/integrations/youtube/patches/components/KeywordContentFilter.java @@ -122,24 +122,27 @@ private static void logNavigationState(String state) { } private static boolean hideKeywordSettingIsActive() { - if (NavigationBar.isSearchBarActive()) { - // Must check first. Search bar can be active with almost any tab. - logNavigationState("Search"); - return Settings.HIDE_KEYWORD_CONTENT_SEARCH.get(); - } else if (PlayerType.getCurrent().isMaximizedOrFullscreen()) { + // Must check player type first, as search bar can be active behind the player. + if (PlayerType.getCurrent().isMaximizedOrFullscreen()) { // For now, consider the under video results the same as the home feed. logNavigationState("Player active"); return Settings.HIDE_KEYWORD_CONTENT_HOME.get(); - } else if (NavigationButton.HOME.isSelected()) { + } + // Must check second, as search can be from any tab. + if (NavigationBar.isSearchBarActive()) { + logNavigationState("Search"); + return Settings.HIDE_KEYWORD_CONTENT_SEARCH.get(); + } + if (NavigationButton.HOME.isSelected()) { logNavigationState("Home tab"); return Settings.HIDE_KEYWORD_CONTENT_HOME.get(); - } else if (NavigationButton.SUBSCRIPTIONS.isSelected()) { + } + if (NavigationButton.SUBSCRIPTIONS.isSelected()) { logNavigationState("Subscription tab"); return Settings.HIDE_SUBSCRIPTIONS_BUTTON.get(); - } else { - // User is in the Library or Notifications tab. - logNavigationState("Ignored tab"); } + // User is in the Library or Notifications tab. + logNavigationState("Ignored tab"); return false; } @@ -195,6 +198,7 @@ private static boolean phrasesWillHideAllVideos(@NonNull String[] phrases) { private synchronized void parseKeywords() { // Must be synchronized since Litho is multi-threaded. String rawKeywords = Settings.HIDE_KEYWORD_CONTENT_PHRASES.get(); + //noinspection StringEquality if (rawKeywords == lastKeywordPhrasesParsed) { Logger.printDebug(() -> "Using previously initialized search"); return; // Another thread won the race, and search is already initialized. @@ -265,6 +269,7 @@ boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBuff if (!hideKeywordSettingIsActive()) return false; // Field is intentionally compared using reference equality. + //noinspection StringEquality if (Settings.HIDE_KEYWORD_CONTENT_PHRASES.get() != lastKeywordPhrasesParsed) { // User changed the keywords. parseKeywords(); diff --git a/app/src/main/java/app/revanced/integrations/youtube/patches/components/ShortsFilter.java b/app/src/main/java/app/revanced/integrations/youtube/patches/components/ShortsFilter.java index 8c3dbf26be..5b32d7a1f6 100644 --- a/app/src/main/java/app/revanced/integrations/youtube/patches/components/ShortsFilter.java +++ b/app/src/main/java/app/revanced/integrations/youtube/patches/components/ShortsFilter.java @@ -219,12 +219,19 @@ boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBuff } private static boolean shouldHideShortsFeedItems() { - if (NavigationBar.isSearchBarActive()) { // Must check search first. + // Must check player type first, as search bar can be active behind the player. + if (PlayerType.getCurrent().isMaximizedOrFullscreen()) { + // For now, consider the under video results the same as the home feed. + return Settings.HIDE_SHORTS_HOME.get(); + } + // Must check second, as search can be from any tab. + if (NavigationBar.isSearchBarActive()) { return Settings.HIDE_SHORTS_SEARCH.get(); - } else if (PlayerType.getCurrent().isMaximizedOrFullscreen() - || NavigationBar.NavigationButton.HOME.isSelected()) { + } + if (NavigationBar.NavigationButton.HOME.isSelected()) { return Settings.HIDE_SHORTS_HOME.get(); - } else if (NavigationBar.NavigationButton.SUBSCRIPTIONS.isSelected()) { + } + if (NavigationBar.NavigationButton.SUBSCRIPTIONS.isSelected()) { return Settings.HIDE_SHORTS_SUBSCRIPTIONS.get(); } return false; diff --git a/app/src/main/java/app/revanced/integrations/youtube/shared/NavigationBar.java b/app/src/main/java/app/revanced/integrations/youtube/shared/NavigationBar.java index 4cec2680af..2655a60d4e 100644 --- a/app/src/main/java/app/revanced/integrations/youtube/shared/NavigationBar.java +++ b/app/src/main/java/app/revanced/integrations/youtube/shared/NavigationBar.java @@ -27,14 +27,15 @@ public static void searchBarResultsViewLoaded(View searchbarResults) { } /** - * @return If the search bar is on screen. + * @return If the search bar is on screen. This includes if the player + * is on screen and the search results are behind the player (and not visible). + * Detecting the search is covered by the player can be done by checking {@link PlayerType#isMaximizedOrFullscreen()}. */ public static boolean isSearchBarActive() { View searchbarResults = searchBarResultsRef.get(); return searchbarResults != null && searchbarResults.getParent() != null; } - /** * Last YT navigation enum loaded. Not necessarily the active navigation tab. */ @@ -44,7 +45,7 @@ public static boolean isSearchBarActive() { /** * Injection point. */ - public static void setLastAppNavigationEnum(@Nullable Enum ytNavigationEnumName) { + public static void setLastAppNavigationEnum(@Nullable Enum ytNavigationEnumName) { if (ytNavigationEnumName != null) { lastYTNavigationEnumName = ytNavigationEnumName.name(); }