fix(YouTube - Navigation bar hook): Handle if search is active but hidden behind a maximized player

This commit is contained in:
LisoUseInAIKyrios 2024-04-04 00:21:51 +04:00
parent eaa2e1139c
commit cbccb46e63
4 changed files with 36 additions and 21 deletions

View File

@ -163,12 +163,14 @@ public final class AlternativeThumbnailsPatch {
} }
private static EnumSetting<ThumbnailOption> optionSettingForCurrentNavigation() { private static EnumSetting<ThumbnailOption> optionSettingForCurrentNavigation() {
if (NavigationBar.isSearchBarActive()) { // Must check search first. // Must check player type first, as search bar can be active behind the player.
return ALT_THUMBNAIL_SEARCH;
}
if (PlayerType.getCurrent().isMaximizedOrFullscreen()) { if (PlayerType.getCurrent().isMaximizedOrFullscreen()) {
return ALT_THUMBNAIL_PLAYER; 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()) { if (NavigationButton.HOME.isSelected()) {
return ALT_THUMBNAIL_HOME; return ALT_THUMBNAIL_HOME;
} }

View File

@ -122,24 +122,27 @@ final class KeywordContentFilter extends Filter {
} }
private static boolean hideKeywordSettingIsActive() { private static boolean hideKeywordSettingIsActive() {
if (NavigationBar.isSearchBarActive()) { // Must check player type first, as search bar can be active behind the player.
// Must check first. Search bar can be active with almost any tab. if (PlayerType.getCurrent().isMaximizedOrFullscreen()) {
logNavigationState("Search");
return Settings.HIDE_KEYWORD_CONTENT_SEARCH.get();
} else if (PlayerType.getCurrent().isMaximizedOrFullscreen()) {
// For now, consider the under video results the same as the home feed. // For now, consider the under video results the same as the home feed.
logNavigationState("Player active"); logNavigationState("Player active");
return Settings.HIDE_KEYWORD_CONTENT_HOME.get(); 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"); logNavigationState("Home tab");
return Settings.HIDE_KEYWORD_CONTENT_HOME.get(); return Settings.HIDE_KEYWORD_CONTENT_HOME.get();
} else if (NavigationButton.SUBSCRIPTIONS.isSelected()) { }
if (NavigationButton.SUBSCRIPTIONS.isSelected()) {
logNavigationState("Subscription tab"); logNavigationState("Subscription tab");
return Settings.HIDE_SUBSCRIPTIONS_BUTTON.get(); 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; return false;
} }
@ -195,6 +198,7 @@ final class KeywordContentFilter extends Filter {
private synchronized void parseKeywords() { // Must be synchronized since Litho is multi-threaded. private synchronized void parseKeywords() { // Must be synchronized since Litho is multi-threaded.
String rawKeywords = Settings.HIDE_KEYWORD_CONTENT_PHRASES.get(); String rawKeywords = Settings.HIDE_KEYWORD_CONTENT_PHRASES.get();
//noinspection StringEquality
if (rawKeywords == lastKeywordPhrasesParsed) { if (rawKeywords == lastKeywordPhrasesParsed) {
Logger.printDebug(() -> "Using previously initialized search"); Logger.printDebug(() -> "Using previously initialized search");
return; // Another thread won the race, and search is already initialized. return; // Another thread won the race, and search is already initialized.
@ -265,6 +269,7 @@ final class KeywordContentFilter extends Filter {
if (!hideKeywordSettingIsActive()) return false; if (!hideKeywordSettingIsActive()) return false;
// Field is intentionally compared using reference equality. // Field is intentionally compared using reference equality.
//noinspection StringEquality
if (Settings.HIDE_KEYWORD_CONTENT_PHRASES.get() != lastKeywordPhrasesParsed) { if (Settings.HIDE_KEYWORD_CONTENT_PHRASES.get() != lastKeywordPhrasesParsed) {
// User changed the keywords. // User changed the keywords.
parseKeywords(); parseKeywords();

View File

@ -219,12 +219,19 @@ public final class ShortsFilter extends Filter {
} }
private static boolean shouldHideShortsFeedItems() { 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.
return Settings.HIDE_SHORTS_SEARCH.get(); if (PlayerType.getCurrent().isMaximizedOrFullscreen()) {
} else if (PlayerType.getCurrent().isMaximizedOrFullscreen() // For now, consider the under video results the same as the home feed.
|| NavigationBar.NavigationButton.HOME.isSelected()) {
return Settings.HIDE_SHORTS_HOME.get(); return Settings.HIDE_SHORTS_HOME.get();
} else if (NavigationBar.NavigationButton.SUBSCRIPTIONS.isSelected()) { }
// Must check second, as search can be from any tab.
if (NavigationBar.isSearchBarActive()) {
return Settings.HIDE_SHORTS_SEARCH.get();
}
if (NavigationBar.NavigationButton.HOME.isSelected()) {
return Settings.HIDE_SHORTS_HOME.get();
}
if (NavigationBar.NavigationButton.SUBSCRIPTIONS.isSelected()) {
return Settings.HIDE_SHORTS_SUBSCRIPTIONS.get(); return Settings.HIDE_SHORTS_SUBSCRIPTIONS.get();
} }
return false; return false;

View File

@ -27,14 +27,15 @@ public final class NavigationBar {
} }
/** /**
* @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() { public static boolean isSearchBarActive() {
View searchbarResults = searchBarResultsRef.get(); View searchbarResults = searchBarResultsRef.get();
return searchbarResults != null && searchbarResults.getParent() != null; return searchbarResults != null && searchbarResults.getParent() != null;
} }
/** /**
* Last YT navigation enum loaded. Not necessarily the active navigation tab. * Last YT navigation enum loaded. Not necessarily the active navigation tab.
*/ */
@ -44,7 +45,7 @@ public final class NavigationBar {
/** /**
* Injection point. * Injection point.
*/ */
public static void setLastAppNavigationEnum(@Nullable Enum ytNavigationEnumName) { public static void setLastAppNavigationEnum(@Nullable Enum<?> ytNavigationEnumName) {
if (ytNavigationEnumName != null) { if (ytNavigationEnumName != null) {
lastYTNavigationEnumName = ytNavigationEnumName.name(); lastYTNavigationEnumName = ytNavigationEnumName.name();
} }