fix(YouTube - Hide player flyout menu items): Allow hiding audio menu with 'Android No SDK' client type

This commit is contained in:
LisoUseInAIKyrios
2025-11-13 09:40:28 +02:00
parent 15675b5164
commit 9495cf49ef
4 changed files with 18 additions and 22 deletions

View File

@@ -72,7 +72,7 @@ public class SpoofVideoStreamsPatch {
public static boolean spoofingToClientWithNoMultiAudioStreams() {
return isPatchIncluded()
&& SPOOF_STREAMING_DATA
&& preferredClient != ClientType.IPADOS;
&& !preferredClient.supportsMultiAudioTracks;
}
/**

View File

@@ -21,13 +21,14 @@ import app.revanced.extension.youtube.shared.PlayerType;
@SuppressWarnings("unused")
public final class LayoutComponentsFilter extends Filter {
private static final StringTrieSearch mixPlaylistsExceptions = new StringTrieSearch(
private static final StringTrieSearch mixPlaylistsContextExceptions = new StringTrieSearch(
"V.ED", // Playlist browse id.
"java.lang.ref.WeakReference"
);
private static final ByteArrayFilterGroup mixPlaylistsExceptions2 = new ByteArrayFilterGroup(
private static final ByteArrayFilterGroup mixPlaylistsBufferExceptions = new ByteArrayFilterGroup(
null,
"cell_description_body"
"cell_description_body",
"channel_profile"
);
private static final ByteArrayFilterGroup mixPlaylists = new ByteArrayFilterGroup(
null,
@@ -380,17 +381,15 @@ public final class LayoutComponentsFilter extends Filter {
return false;
}
// Prevent playlist items being hidden, if a mix playlist is present in it.
if (mixPlaylistsExceptions.matches(conversionContext.toString())) {
return false;
}
// Prevent hiding the description of some videos accidentally.
if (mixPlaylistsExceptions2.check(bytes).isFiltered()) {
return false;
}
if (mixPlaylists.check(bytes).isFiltered()) {
if (mixPlaylists.check(bytes).isFiltered()
// Prevent hiding the description of some videos accidentally.
&& !mixPlaylistsBufferExceptions.check(bytes).isFiltered()
// Prevent playlist items being hidden, if a mix playlist is present in it.
// Check last since it requires creating a context string.
//
// FIXME: The conversion context passed in does not always generate a valid toString.
// This string check may no longer be needed, or the patch may be broken.
&& !mixPlaylistsContextExceptions.matches(conversionContext.toString())) {
Logger.printDebug(() -> "Filtered mix playlist");
return true;
}

View File

@@ -12,13 +12,9 @@ import java.util.List;
public class PlayerFlyoutMenuItemsFilter extends Filter {
public static final class HideAudioFlyoutMenuAvailability implements Setting.Availability {
private static final boolean AVAILABLE_ON_LAUNCH = !SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams();
@Override
public boolean isAvailable() {
// Check conditions of launch and now. Otherwise if spoofing is changed
// without a restart the setting will show as available when it's not.
return AVAILABLE_ON_LAUNCH && !SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams();
return !SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams();
}
@Override

View File

@@ -807,10 +807,11 @@ If changing this setting does not take effect, try switching to Incognito mode."
<string name="revanced_hide_player_flyout_audio_track_title">Hide Audio track</string>
<string name="revanced_hide_player_flyout_audio_track_summary_on">Audio track menu is hidden</string>
<string name="revanced_hide_player_flyout_audio_track_summary_off">Audio track menu is shown</string>
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
'Android No SDK' must be kept untranslated. -->
<string name="revanced_hide_player_flyout_audio_track_not_available">"Audio track menu is hidden
To show the Audio track menu, change \'Spoof video streams\' to iPadOS"</string>
To show the Audio track menu, change \'Spoof video streams\' to \'Android No SDK\'"</string>
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_watch_in_vr_title">Hide Watch in VR</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Watch in VR menu is hidden</string>