Skip to content

Commit 9495cf4

Browse files
fix(YouTube - Hide player flyout menu items): Allow hiding audio menu with 'Android No SDK' client type
1 parent 15675b5 commit 9495cf4

File tree

4 files changed

+18
-22
lines changed

4 files changed

+18
-22
lines changed

extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/SpoofVideoStreamsPatch.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public static ClientType getPreferredClient() {
7272
public static boolean spoofingToClientWithNoMultiAudioStreams() {
7373
return isPatchIncluded()
7474
&& SPOOF_STREAMING_DATA
75-
&& preferredClient != ClientType.IPADOS;
75+
&& !preferredClient.supportsMultiAudioTracks;
7676
}
7777

7878
/**

extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/LayoutComponentsFilter.java

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,14 @@
2121

2222
@SuppressWarnings("unused")
2323
public final class LayoutComponentsFilter extends Filter {
24-
private static final StringTrieSearch mixPlaylistsExceptions = new StringTrieSearch(
24+
private static final StringTrieSearch mixPlaylistsContextExceptions = new StringTrieSearch(
2525
"V.ED", // Playlist browse id.
2626
"java.lang.ref.WeakReference"
2727
);
28-
private static final ByteArrayFilterGroup mixPlaylistsExceptions2 = new ByteArrayFilterGroup(
28+
private static final ByteArrayFilterGroup mixPlaylistsBufferExceptions = new ByteArrayFilterGroup(
2929
null,
30-
"cell_description_body"
30+
"cell_description_body",
31+
"channel_profile"
3132
);
3233
private static final ByteArrayFilterGroup mixPlaylists = new ByteArrayFilterGroup(
3334
null,
@@ -380,17 +381,15 @@ public static boolean filterMixPlaylists(Object conversionContext, @Nullable fin
380381
return false;
381382
}
382383

383-
// Prevent playlist items being hidden, if a mix playlist is present in it.
384-
if (mixPlaylistsExceptions.matches(conversionContext.toString())) {
385-
return false;
386-
}
387-
388-
// Prevent hiding the description of some videos accidentally.
389-
if (mixPlaylistsExceptions2.check(bytes).isFiltered()) {
390-
return false;
391-
}
392-
393-
if (mixPlaylists.check(bytes).isFiltered()) {
384+
if (mixPlaylists.check(bytes).isFiltered()
385+
// Prevent hiding the description of some videos accidentally.
386+
&& !mixPlaylistsBufferExceptions.check(bytes).isFiltered()
387+
// Prevent playlist items being hidden, if a mix playlist is present in it.
388+
// Check last since it requires creating a context string.
389+
//
390+
// FIXME: The conversion context passed in does not always generate a valid toString.
391+
// This string check may no longer be needed, or the patch may be broken.
392+
&& !mixPlaylistsContextExceptions.matches(conversionContext.toString())) {
394393
Logger.printDebug(() -> "Filtered mix playlist");
395394
return true;
396395
}

extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/PlayerFlyoutMenuItemsFilter.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,9 @@
1212
public class PlayerFlyoutMenuItemsFilter extends Filter {
1313

1414
public static final class HideAudioFlyoutMenuAvailability implements Setting.Availability {
15-
private static final boolean AVAILABLE_ON_LAUNCH = !SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams();
16-
1715
@Override
1816
public boolean isAvailable() {
19-
// Check conditions of launch and now. Otherwise if spoofing is changed
20-
// without a restart the setting will show as available when it's not.
21-
return AVAILABLE_ON_LAUNCH && !SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams();
17+
return !SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams();
2218
}
2319

2420
@Override

patches/src/main/resources/addresources/values/strings.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -807,10 +807,11 @@ If changing this setting does not take effect, try switching to Incognito mode."
807807
<string name="revanced_hide_player_flyout_audio_track_title">Hide Audio track</string>
808808
<string name="revanced_hide_player_flyout_audio_track_summary_on">Audio track menu is hidden</string>
809809
<string name="revanced_hide_player_flyout_audio_track_summary_off">Audio track menu is shown</string>
810-
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
810+
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
811+
'Android No SDK' must be kept untranslated. -->
811812
<string name="revanced_hide_player_flyout_audio_track_not_available">"Audio track menu is hidden
812813

813-
To show the Audio track menu, change \'Spoof video streams\' to iPadOS"</string>
814+
To show the Audio track menu, change \'Spoof video streams\' to \'Android No SDK\'"</string>
814815
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
815816
<string name="revanced_hide_player_flyout_watch_in_vr_title">Hide Watch in VR</string>
816817
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Watch in VR menu is hidden</string>

0 commit comments

Comments
 (0)