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() { public static boolean spoofingToClientWithNoMultiAudioStreams() {
return isPatchIncluded() return isPatchIncluded()
&& SPOOF_STREAMING_DATA && SPOOF_STREAMING_DATA
&& preferredClient != ClientType.IPADOS; && !preferredClient.supportsMultiAudioTracks;
} }
/** /**

View File

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

View File

@@ -12,13 +12,9 @@ import java.util.List;
public class PlayerFlyoutMenuItemsFilter extends Filter { public class PlayerFlyoutMenuItemsFilter extends Filter {
public static final class HideAudioFlyoutMenuAvailability implements Setting.Availability { public static final class HideAudioFlyoutMenuAvailability implements Setting.Availability {
private static final boolean AVAILABLE_ON_LAUNCH = !SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams();
@Override @Override
public boolean isAvailable() { public boolean isAvailable() {
// Check conditions of launch and now. Otherwise if spoofing is changed return !SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams();
// without a restart the setting will show as available when it's not.
return AVAILABLE_ON_LAUNCH && !SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams();
} }
@Override @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_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_on">Audio track menu is hidden</string>
<string name="revanced_hide_player_flyout_audio_track_summary_off">Audio track menu is shown</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 <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. --> <!-- '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_title">Hide Watch in VR</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Watch in VR menu is hidden</string> <string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Watch in VR menu is hidden</string>