Merge remote-tracking branch 'upstream/dev' into feat/patcher_instruction_filters
# Conflicts: # extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/ShortsFilter.java
This commit is contained in:
commit
2d207fccbc
158 changed files with 920 additions and 727 deletions
|
|
@ -8,7 +8,7 @@ public class ForceOriginalAudioPatch {
|
|||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static void setPreferredLanguage() {
|
||||
public static void setEnabled() {
|
||||
app.revanced.extension.shared.patches.ForceOriginalAudioPatch.setEnabled(
|
||||
Settings.FORCE_ORIGINAL_AUDIO.get(),
|
||||
Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get()
|
||||
|
|
|
|||
|
|
@ -10,14 +10,12 @@ public class ForceOriginalAudioPatch {
|
|||
|
||||
private static final String DEFAULT_AUDIO_TRACKS_SUFFIX = ".4";
|
||||
|
||||
private static volatile boolean enabled = false;
|
||||
private static volatile boolean enabled;
|
||||
|
||||
public static void setEnabled(boolean isEnabled, ClientType client) {
|
||||
enabled = isEnabled;
|
||||
|
||||
if (isEnabled
|
||||
&& SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams()
|
||||
&& !client.useAuth) {
|
||||
if (isEnabled && !client.useAuth && !client.supportsMultiAudioTracks) {
|
||||
// If client spoofing does not use authentication and lacks multi-audio streams,
|
||||
// then can use any language code for the request and if that requested language is
|
||||
// not available YT uses the original audio language. Authenticated requests ignore
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ public enum ClientType {
|
|||
"132.0.6808.3",
|
||||
"1.61.48",
|
||||
false,
|
||||
false,
|
||||
"Android VR 1.61"
|
||||
),
|
||||
/**
|
||||
|
|
@ -50,6 +51,7 @@ public enum ClientType {
|
|||
"107.0.5284.2",
|
||||
"1.43.32",
|
||||
ANDROID_VR_1_61_48.useAuth,
|
||||
ANDROID_VR_1_61_48.supportsMultiAudioTracks,
|
||||
"Android VR 1.43"
|
||||
),
|
||||
/**
|
||||
|
|
@ -69,6 +71,7 @@ public enum ClientType {
|
|||
"132.0.6779.0",
|
||||
"23.47.101",
|
||||
true,
|
||||
false,
|
||||
"Android Studio"
|
||||
),
|
||||
/**
|
||||
|
|
@ -83,6 +86,7 @@ public enum ClientType {
|
|||
"0.1",
|
||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Safari/605.1.15",
|
||||
false,
|
||||
false,
|
||||
"visionOS"
|
||||
),
|
||||
/**
|
||||
|
|
@ -107,6 +111,7 @@ public enum ClientType {
|
|||
"19.22.3",
|
||||
"com.google.ios.youtube/19.22.3 (iPad7,6; U; CPU iPadOS 17_7_10 like Mac OS X; " + Locale.getDefault() + ")",
|
||||
false,
|
||||
true,
|
||||
"iPadOS"
|
||||
);
|
||||
|
||||
|
|
@ -180,6 +185,11 @@ public enum ClientType {
|
|||
*/
|
||||
public final boolean useAuth;
|
||||
|
||||
/**
|
||||
* If the client supports multiple audio tracks.
|
||||
*/
|
||||
public final boolean supportsMultiAudioTracks;
|
||||
|
||||
/**
|
||||
* Friendly name displayed in stats for nerds.
|
||||
*/
|
||||
|
|
@ -200,6 +210,7 @@ public enum ClientType {
|
|||
@NonNull String cronetVersion,
|
||||
String clientVersion,
|
||||
boolean useAuth,
|
||||
boolean supportsMultiAudioTracks,
|
||||
String friendlyName) {
|
||||
this.id = id;
|
||||
this.clientName = clientName;
|
||||
|
|
@ -213,6 +224,7 @@ public enum ClientType {
|
|||
this.cronetVersion = cronetVersion;
|
||||
this.clientVersion = clientVersion;
|
||||
this.useAuth = useAuth;
|
||||
this.supportsMultiAudioTracks = supportsMultiAudioTracks;
|
||||
this.friendlyName = friendlyName;
|
||||
|
||||
Locale defaultLocale = Locale.getDefault();
|
||||
|
|
@ -238,6 +250,7 @@ public enum ClientType {
|
|||
String clientVersion,
|
||||
String userAgent,
|
||||
boolean useAuth,
|
||||
boolean supportsMultiAudioTracks,
|
||||
String friendlyName) {
|
||||
this.id = id;
|
||||
this.clientName = clientName;
|
||||
|
|
@ -248,6 +261,7 @@ public enum ClientType {
|
|||
this.clientVersion = clientVersion;
|
||||
this.userAgent = userAgent;
|
||||
this.useAuth = useAuth;
|
||||
this.supportsMultiAudioTracks = supportsMultiAudioTracks;
|
||||
this.friendlyName = friendlyName;
|
||||
this.packageName = null;
|
||||
this.androidSdkVersion = null;
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ public class SpoofVideoStreamsPatch {
|
|||
@Nullable
|
||||
private static volatile AppLanguage languageOverride;
|
||||
|
||||
private static volatile ClientType preferredClient = ClientType.ANDROID_VR_1_61_48;
|
||||
private static volatile ClientType preferredClient = ClientType.ANDROID_VR_1_43_32;
|
||||
|
||||
/**
|
||||
* @return If this patch was included during patching.
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ public class ForceOriginalAudioPatch {
|
|||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static void setPreferredLanguage() {
|
||||
public static void setEnabled() {
|
||||
app.revanced.extension.shared.patches.ForceOriginalAudioPatch.setEnabled(
|
||||
Settings.FORCE_ORIGINAL_AUDIO.get(),
|
||||
Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get()
|
||||
|
|
|
|||
|
|
@ -131,11 +131,11 @@ public class ReturnYouTubeDislikePatch {
|
|||
|
||||
String conversionContextString = conversionContext.toString();
|
||||
|
||||
if (isRollingNumber && !conversionContextString.contains("video_action_bar.eml")) {
|
||||
if (isRollingNumber && !conversionContextString.contains("video_action_bar.e")) {
|
||||
return original;
|
||||
}
|
||||
|
||||
if (conversionContextString.contains("segmented_like_dislike_button.eml")) {
|
||||
if (conversionContextString.contains("segmented_like_dislike_button.e")) {
|
||||
// Regular video.
|
||||
ReturnYouTubeDislike videoData = currentVideoData;
|
||||
if (videoData == null) {
|
||||
|
|
@ -153,12 +153,12 @@ public class ReturnYouTubeDislikePatch {
|
|||
}
|
||||
|
||||
if (Utils.containsAny(conversionContextString,
|
||||
"|shorts_dislike_button.eml", "|reel_dislike_button.eml")) {
|
||||
"|shorts_dislike_button.e", "|reel_dislike_button.e")) {
|
||||
return getShortsSpan(original, true);
|
||||
}
|
||||
|
||||
if (Utils.containsAny(conversionContextString,
|
||||
"|shorts_like_button.eml", "|reel_like_button.eml")) {
|
||||
"|shorts_like_button.e", "|reel_like_button.e")) {
|
||||
if (!Utils.containsNumber(original)) {
|
||||
Logger.printDebug(() -> "Replacing hidden likes count");
|
||||
return getShortsSpan(original, false);
|
||||
|
|
|
|||
|
|
@ -105,17 +105,17 @@ public final class AdsFilter extends Filter {
|
|||
Settings.HIDE_VIEW_PRODUCTS_BANNER,
|
||||
"product_item",
|
||||
"products_in_video",
|
||||
"shopping_overlay.eml" // Video player overlay shopping links.
|
||||
"shopping_overlay.e" // Video player overlay shopping links.
|
||||
);
|
||||
|
||||
final var shoppingLinks = new StringFilterGroup(
|
||||
Settings.HIDE_SHOPPING_LINKS,
|
||||
"shopping_description_shelf.eml"
|
||||
"shopping_description_shelf.e"
|
||||
);
|
||||
|
||||
playerShoppingShelf = new StringFilterGroup(
|
||||
Settings.HIDE_CREATOR_STORE_SHELF,
|
||||
"horizontal_shelf.eml"
|
||||
"horizontal_shelf.e"
|
||||
);
|
||||
|
||||
playerShoppingShelfBuffer = new ByteArrayFilterGroup(
|
||||
|
|
@ -131,7 +131,7 @@ public final class AdsFilter extends Filter {
|
|||
final var merchandise = new StringFilterGroup(
|
||||
Settings.HIDE_MERCHANDISE_BANNERS,
|
||||
"product_carousel",
|
||||
"shopping_carousel.eml" // Channel profile shopping shelf.
|
||||
"shopping_carousel.e" // Channel profile shopping shelf.
|
||||
);
|
||||
|
||||
final var selfSponsor = new StringFilterGroup(
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ public final class AdvancedVideoQualityMenuFilter extends Filter {
|
|||
public AdvancedVideoQualityMenuFilter() {
|
||||
addPathCallbacks(new StringFilterGroup(
|
||||
Settings.ADVANCED_VIDEO_QUALITY_MENU,
|
||||
"quick_quality_sheet_content.eml-js"
|
||||
"quick_quality_sheet_content.e"
|
||||
));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@ import app.revanced.extension.youtube.settings.Settings;
|
|||
|
||||
@SuppressWarnings("unused")
|
||||
final class ButtonsFilter extends Filter {
|
||||
private static final String COMPACT_CHANNEL_BAR_PATH_PREFIX = "compact_channel_bar.eml";
|
||||
private static final String VIDEO_ACTION_BAR_PATH_PREFIX = "video_action_bar.eml";
|
||||
private static final String VIDEO_ACTION_BAR_PATH = "video_action_bar.eml";
|
||||
private static final String COMPACT_CHANNEL_BAR_PATH_PREFIX = "compact_channel_bar.e";
|
||||
private static final String VIDEO_ACTION_BAR_PATH_PREFIX = "video_action_bar.e";
|
||||
private static final String VIDEO_ACTION_BAR_PATH = "video_action_bar.e";
|
||||
/**
|
||||
* Video bar path when the video information is collapsed. Seems to shown only with 20.14+
|
||||
*/
|
||||
private static final String COMPACTIFY_VIDEO_ACTION_BAR_PATH = "compactify_video_action_bar.eml";
|
||||
private static final String COMPACTIFY_VIDEO_ACTION_BAR_PATH = "compactify_video_action_bar.e";
|
||||
private static final String ANIMATED_VECTOR_TYPE_PATH = "AnimatedVectorType";
|
||||
|
||||
private final StringFilterGroup likeSubscribeGlow;
|
||||
|
|
@ -29,12 +29,12 @@ final class ButtonsFilter extends Filter {
|
|||
|
||||
likeSubscribeGlow = new StringFilterGroup(
|
||||
Settings.DISABLE_LIKE_SUBSCRIBE_GLOW,
|
||||
"animated_button_border.eml"
|
||||
"animated_button_border.e"
|
||||
);
|
||||
|
||||
bufferFilterPathGroup = new StringFilterGroup(
|
||||
null,
|
||||
"|ContainerType|button.eml"
|
||||
"|ContainerType|button.e"
|
||||
);
|
||||
|
||||
addPathCallbacks(
|
||||
|
|
@ -45,7 +45,7 @@ final class ButtonsFilter extends Filter {
|
|||
),
|
||||
new StringFilterGroup(
|
||||
Settings.HIDE_DOWNLOAD_BUTTON,
|
||||
"|download_button.eml"
|
||||
"|download_button.e"
|
||||
),
|
||||
new StringFilterGroup(
|
||||
Settings.HIDE_SAVE_BUTTON,
|
||||
|
|
@ -53,7 +53,7 @@ final class ButtonsFilter extends Filter {
|
|||
),
|
||||
new StringFilterGroup(
|
||||
Settings.HIDE_CLIP_BUTTON,
|
||||
"|clip_button.eml"
|
||||
"|clip_button.e"
|
||||
)
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import app.revanced.extension.youtube.shared.PlayerType;
|
|||
@SuppressWarnings("unused")
|
||||
final class CommentsFilter extends Filter {
|
||||
|
||||
private static final String COMMENT_COMPOSER_PATH = "comment_composer.eml";
|
||||
private static final String COMMENT_COMPOSER_PATH = "comment_composer.e";
|
||||
|
||||
private final StringFilterGroup chipBar;
|
||||
private final ByteArrayFilterGroup aiCommentsSummary;
|
||||
|
|
@ -15,12 +15,12 @@ final class CommentsFilter extends Filter {
|
|||
public CommentsFilter() {
|
||||
var chatSummary = new StringFilterGroup(
|
||||
Settings.HIDE_COMMENTS_AI_CHAT_SUMMARY,
|
||||
"live_chat_summary_banner.eml"
|
||||
"live_chat_summary_banner.e"
|
||||
);
|
||||
|
||||
chipBar = new StringFilterGroup(
|
||||
Settings.HIDE_COMMENTS_AI_SUMMARY,
|
||||
"chip_bar.eml"
|
||||
"chip_bar.e"
|
||||
);
|
||||
|
||||
aiCommentsSummary = new ByteArrayFilterGroup(
|
||||
|
|
@ -35,8 +35,8 @@ final class CommentsFilter extends Filter {
|
|||
|
||||
var commentsByMembers = new StringFilterGroup(
|
||||
Settings.HIDE_COMMENTS_BY_MEMBERS_HEADER,
|
||||
"sponsorships_comments_header.eml",
|
||||
"sponsorships_comments_footer.eml"
|
||||
"sponsorships_comments_header.e",
|
||||
"sponsorships_comments_footer.e"
|
||||
);
|
||||
|
||||
var comments = new StringFilterGroup(
|
||||
|
|
@ -52,7 +52,7 @@ final class CommentsFilter extends Filter {
|
|||
|
||||
var createAShort = new StringFilterGroup(
|
||||
Settings.HIDE_COMMENTS_CREATE_A_SHORT_BUTTON,
|
||||
"composer_short_creation_button.eml"
|
||||
"composer_short_creation_button.e"
|
||||
);
|
||||
|
||||
emojiAndTimestampButtons = new StringFilterGroup(
|
||||
|
|
@ -69,7 +69,7 @@ final class CommentsFilter extends Filter {
|
|||
|
||||
var thanksButton = new StringFilterGroup(
|
||||
Settings.HIDE_COMMENTS_THANKS_BUTTON,
|
||||
"super_thanks_button.eml"
|
||||
"super_thanks_button.e"
|
||||
);
|
||||
|
||||
addPathCallbacks(
|
||||
|
|
|
|||
|
|
@ -29,12 +29,12 @@ final class DescriptionComponentsFilter extends Filter {
|
|||
|
||||
aiGeneratedVideoSummarySection = new StringFilterGroup(
|
||||
Settings.HIDE_AI_GENERATED_VIDEO_SUMMARY_SECTION,
|
||||
"cell_expandable_metadata.eml"
|
||||
"cell_expandable_metadata.e"
|
||||
);
|
||||
|
||||
final StringFilterGroup askSection = new StringFilterGroup(
|
||||
Settings.HIDE_ASK_SECTION,
|
||||
"youchat_entrypoint.eml"
|
||||
"youchat_entrypoint.e"
|
||||
);
|
||||
|
||||
final StringFilterGroup attributesSection = new StringFilterGroup(
|
||||
|
|
@ -65,7 +65,7 @@ final class DescriptionComponentsFilter extends Filter {
|
|||
|
||||
macroMarkersCarousel = new StringFilterGroup(
|
||||
null,
|
||||
"macro_markers_carousel.eml"
|
||||
"macro_markers_carousel.e"
|
||||
);
|
||||
|
||||
macroMarkersCarouselGroupList.addAll(
|
||||
|
|
@ -81,7 +81,7 @@ final class DescriptionComponentsFilter extends Filter {
|
|||
|
||||
horizontalShelf = new StringFilterGroup(
|
||||
Settings.HIDE_ATTRIBUTES_SECTION,
|
||||
"horizontal_shelf.eml"
|
||||
"horizontal_shelf.e"
|
||||
);
|
||||
|
||||
cellVideoAttribute = new ByteArrayFilterGroup(
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ public final class HideInfoCardsFilter extends Filter {
|
|||
addIdentifierCallbacks(
|
||||
new StringFilterGroup(
|
||||
Settings.HIDE_INFO_CARDS,
|
||||
"info_card_teaser_overlay.eml"
|
||||
"info_card_teaser_overlay.e"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,10 +79,10 @@ final class KeywordContentFilter extends Filter {
|
|||
"search_vwc_description_transition_key",
|
||||
"g-high-recZ",
|
||||
// Text and litho components found in the buffer that belong to path filters.
|
||||
"expandable_metadata.eml",
|
||||
"thumbnail.eml",
|
||||
"avatar.eml",
|
||||
"overflow_button.eml",
|
||||
"expandable_metadata.e",
|
||||
"thumbnail.e",
|
||||
"avatar.e",
|
||||
"overflow_button.e",
|
||||
"shorts-lockup-image",
|
||||
"shorts-lockup.overlay-metadata.secondary-text",
|
||||
"YouTubeSans-SemiBold",
|
||||
|
|
@ -94,16 +94,16 @@ final class KeywordContentFilter extends Filter {
|
|||
*/
|
||||
private final StringFilterGroup startsWithFilter = new StringFilterGroup(
|
||||
null, // Multiple settings are used and must be individually checked if active.
|
||||
"home_video_with_context.eml",
|
||||
"search_video_with_context.eml",
|
||||
"video_with_context.eml", // Subscription tab videos.
|
||||
"related_video_with_context.eml",
|
||||
"home_video_with_context.e",
|
||||
"search_video_with_context.e",
|
||||
"video_with_context.e", // Subscription tab videos.
|
||||
"related_video_with_context.e",
|
||||
// A/B test for subscribed video, and sometimes when tablet layout is enabled.
|
||||
"video_lockup_with_attachment.eml",
|
||||
"compact_video.eml",
|
||||
"video_lockup_with_attachment.e",
|
||||
"compact_video.e",
|
||||
"inline_shorts",
|
||||
"shorts_video_cell",
|
||||
"shorts_pivot_item.eml"
|
||||
"shorts_pivot_item.e"
|
||||
);
|
||||
|
||||
/**
|
||||
|
|
@ -112,9 +112,9 @@ final class KeywordContentFilter extends Filter {
|
|||
@SuppressWarnings("FieldCanBeLocal")
|
||||
private final StringFilterGroup containsFilter = new StringFilterGroup(
|
||||
null,
|
||||
"modern_type_shelf_header_content.eml",
|
||||
"shorts_lockup_cell.eml", // Part of 'shorts_shelf_carousel.eml'
|
||||
"video_card.eml" // Shorts that appear in a horizontal shelf.
|
||||
"modern_type_shelf_header_content.e",
|
||||
"shorts_lockup_cell.e", // Part of 'shorts_shelf_carousel.e'
|
||||
"video_card.e" // Shorts that appear in a horizontal shelf.
|
||||
);
|
||||
|
||||
/**
|
||||
|
|
@ -125,10 +125,10 @@ final class KeywordContentFilter extends Filter {
|
|||
* the buffer of the parent component was already searched and passed.
|
||||
*/
|
||||
private final StringTrieSearch exceptions = new StringTrieSearch(
|
||||
"metadata.eml",
|
||||
"thumbnail.eml",
|
||||
"avatar.eml",
|
||||
"overflow_button.eml"
|
||||
"metadata.e",
|
||||
"thumbnail.e",
|
||||
"avatar.e",
|
||||
"overflow_button.e"
|
||||
);
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -77,18 +77,18 @@ public final class LayoutComponentsFilter extends Filter {
|
|||
communityPosts = new StringFilterGroup(
|
||||
Settings.HIDE_COMMUNITY_POSTS,
|
||||
"post_base_wrapper", // may be obsolete and no longer needed.
|
||||
"text_post_root.eml",
|
||||
"images_post_root.eml",
|
||||
"images_post_slim.eml", // may be obsolete and no longer needed.
|
||||
"images_post_root_slim.eml",
|
||||
"text_post_root_slim.eml",
|
||||
"post_base_wrapper_slim.eml",
|
||||
"poll_post_root.eml",
|
||||
"videos_post_root.eml",
|
||||
"post_shelf_slim.eml",
|
||||
"videos_post_responsive_root.eml",
|
||||
"text_post_responsive_root.eml",
|
||||
"poll_post_responsive_root.eml"
|
||||
"text_post_root.e",
|
||||
"images_post_root.e",
|
||||
"images_post_slim.e", // may be obsolete and no longer needed.
|
||||
"images_post_root_slim.e",
|
||||
"text_post_root_slim.e",
|
||||
"post_base_wrapper_slim.e",
|
||||
"poll_post_root.e",
|
||||
"videos_post_root.e",
|
||||
"post_shelf_slim.e",
|
||||
"videos_post_responsive_root.e",
|
||||
"text_post_responsive_root.e",
|
||||
"poll_post_responsive_root.e"
|
||||
);
|
||||
|
||||
final var subscribersCommunityGuidelines = new StringFilterGroup(
|
||||
|
|
@ -150,7 +150,7 @@ public final class LayoutComponentsFilter extends Filter {
|
|||
|
||||
final var channelLinksPreview = new StringFilterGroup(
|
||||
Settings.HIDE_LINKS_PREVIEW,
|
||||
"attribution.eml"
|
||||
"attribution.e"
|
||||
);
|
||||
|
||||
final var emergencyBox = new StringFilterGroup(
|
||||
|
|
@ -191,8 +191,8 @@ public final class LayoutComponentsFilter extends Filter {
|
|||
|
||||
final var playables = new StringFilterGroup(
|
||||
Settings.HIDE_PLAYABLES,
|
||||
"horizontal_gaming_shelf.eml",
|
||||
"mini_game_card.eml"
|
||||
"horizontal_gaming_shelf.e",
|
||||
"mini_game_card.e"
|
||||
);
|
||||
|
||||
// Playable horizontal shelf header.
|
||||
|
|
@ -229,7 +229,7 @@ public final class LayoutComponentsFilter extends Filter {
|
|||
|
||||
compactChannelBarInnerButton = new StringFilterGroup(
|
||||
null,
|
||||
"|button.eml"
|
||||
"|button.e"
|
||||
);
|
||||
|
||||
joinMembershipButton = new ByteArrayFilterGroup(
|
||||
|
|
@ -249,13 +249,13 @@ public final class LayoutComponentsFilter extends Filter {
|
|||
|
||||
final var videoRecommendationLabels = new StringFilterGroup(
|
||||
Settings.HIDE_VIDEO_RECOMMENDATION_LABELS,
|
||||
"endorsement_header_footer.eml"
|
||||
"endorsement_header_footer.e"
|
||||
);
|
||||
|
||||
channelProfile = new StringFilterGroup(
|
||||
null,
|
||||
"channel_profile.eml",
|
||||
"page_header.eml"
|
||||
"channel_profile.e",
|
||||
"page_header.e"
|
||||
);
|
||||
channelProfileBuffer = new ByteArrayFilterGroupList();
|
||||
channelProfileBuffer.addAll(new ByteArrayFilterGroup(
|
||||
|
|
@ -270,15 +270,15 @@ public final class LayoutComponentsFilter extends Filter {
|
|||
|
||||
horizontalShelves = new StringFilterGroup(
|
||||
Settings.HIDE_HORIZONTAL_SHELVES,
|
||||
"horizontal_video_shelf.eml",
|
||||
"horizontal_shelf.eml",
|
||||
"horizontal_shelf_inline.eml",
|
||||
"horizontal_tile_shelf.eml"
|
||||
"horizontal_video_shelf.e",
|
||||
"horizontal_shelf.e",
|
||||
"horizontal_shelf_inline.e",
|
||||
"horizontal_tile_shelf.e"
|
||||
);
|
||||
|
||||
ticketShelf = new ByteArrayFilterGroup(
|
||||
Settings.HIDE_TICKET_SHELF,
|
||||
"ticket_item.eml"
|
||||
"ticket_item.e"
|
||||
);
|
||||
|
||||
addPathCallbacks(
|
||||
|
|
|
|||
|
|
@ -24,13 +24,13 @@ public final class PlaybackSpeedMenuFilter extends Filter {
|
|||
// 0.05x litho speed menu.
|
||||
var playbackRateSelectorGroup = new StringFilterGroup(
|
||||
Settings.CUSTOM_SPEED_MENU,
|
||||
"playback_rate_selector_menu_sheet.eml-js"
|
||||
"playback_rate_selector_menu_sheet.e"
|
||||
);
|
||||
|
||||
// Old litho based speed menu.
|
||||
oldPlaybackMenuGroup = new StringFilterGroup(
|
||||
Settings.CUSTOM_SPEED_MENU,
|
||||
"playback_speed_sheet_content.eml-js");
|
||||
"playback_speed_sheet_content.e");
|
||||
|
||||
addPathCallbacks(playbackRateSelectorGroup, oldPlaybackMenuGroup);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ public class PlayerFlyoutMenuItemsFilter extends Filter {
|
|||
|
||||
addPathCallbacks(
|
||||
videoQualityMenuFooter,
|
||||
new StringFilterGroup(null, "overflow_menu_item.eml")
|
||||
new StringFilterGroup(null, "overflow_menu_item.e")
|
||||
);
|
||||
|
||||
flyoutFilterGroupList.addAll(
|
||||
|
|
|
|||
|
|
@ -61,8 +61,8 @@ public final class ReturnYouTubeDislikeFilter extends Filter {
|
|||
// But if swiping back to a previous video and liking/disliking, then only that single button reloads.
|
||||
// So must check for both buttons.
|
||||
addPathCallbacks(
|
||||
new StringFilterGroup(null, "|shorts_like_button.eml"),
|
||||
new StringFilterGroup(null, "|shorts_dislike_button.eml")
|
||||
new StringFilterGroup(null, "|shorts_like_button.e"),
|
||||
new StringFilterGroup(null, "|shorts_dislike_button.e")
|
||||
);
|
||||
|
||||
// After the button identifiers is binary data and then the video id for that specific short.
|
||||
|
|
|
|||
|
|
@ -19,12 +19,12 @@ import app.revanced.extension.youtube.shared.PlayerType;
|
|||
@SuppressWarnings("unused")
|
||||
public final class ShortsFilter extends Filter {
|
||||
private static final boolean HIDE_SHORTS_NAVIGATION_BAR = Settings.HIDE_SHORTS_NAVIGATION_BAR.get();
|
||||
private static final String REEL_CHANNEL_BAR_PATH = "reel_channel_bar.eml";
|
||||
private static final String REEL_CHANNEL_BAR_PATH = "reel_channel_bar.e";
|
||||
|
||||
/**
|
||||
* For paid promotion label and subscribe button that appears in the channel bar.
|
||||
*/
|
||||
private static final String REEL_METAPANEL_PATH = "reel_metapanel.eml";
|
||||
private static final String REEL_METAPANEL_PATH = "reel_metapanel.e";
|
||||
|
||||
/**
|
||||
* Tags that appears when opening the Shorts player.
|
||||
|
|
@ -75,7 +75,7 @@ public final class ShortsFilter extends Filter {
|
|||
// Use a different filter group for this pattern, as it requires an additional check after matching.
|
||||
shelfHeader = new StringFilterGroup(
|
||||
null,
|
||||
"shelf_header.eml"
|
||||
"shelf_header.e"
|
||||
);
|
||||
|
||||
addIdentifierCallbacks(shortsIdentifiers, shelfHeader);
|
||||
|
|
@ -86,11 +86,11 @@ public final class ShortsFilter extends Filter {
|
|||
|
||||
shortsCompactFeedVideo = new StringFilterGroup(null,
|
||||
// Shorts that appear in the feed/search when the device is using tablet layout.
|
||||
"compact_video.eml",
|
||||
// 'video_lockup_with_attachment.eml' is shown instead of 'compact_video.eml' for some users
|
||||
"video_lockup_with_attachment.eml",
|
||||
"compact_video.e",
|
||||
// 'video_lockup_with_attachment.e' is shown instead of 'compact_video.e' for some users
|
||||
"video_lockup_with_attachment.e",
|
||||
// Search results that appear in a horizontal shelf.
|
||||
"video_card.eml");
|
||||
"video_card.e");
|
||||
|
||||
// Filter out items that use the 'frame0' thumbnail.
|
||||
// This is a valid thumbnail for both regular videos and Shorts,
|
||||
|
|
@ -135,31 +135,31 @@ public final class ShortsFilter extends Filter {
|
|||
|
||||
StringFilterGroup stickers = new StringFilterGroup(
|
||||
Settings.HIDE_SHORTS_STICKERS,
|
||||
"stickers_layer.eml"
|
||||
"stickers_layer.e"
|
||||
);
|
||||
|
||||
StringFilterGroup likeFountain = new StringFilterGroup(
|
||||
Settings.HIDE_SHORTS_LIKE_FOUNTAIN,
|
||||
"like_fountain.eml"
|
||||
"like_fountain.e"
|
||||
);
|
||||
|
||||
StringFilterGroup likeButton = new StringFilterGroup(
|
||||
Settings.HIDE_SHORTS_LIKE_BUTTON,
|
||||
"shorts_like_button.eml",
|
||||
"reel_like_button.eml"
|
||||
"shorts_like_button.e",
|
||||
"reel_like_button.e"
|
||||
);
|
||||
|
||||
StringFilterGroup dislikeButton = new StringFilterGroup(
|
||||
Settings.HIDE_SHORTS_DISLIKE_BUTTON,
|
||||
"shorts_dislike_button.eml",
|
||||
"reel_dislike_button.eml"
|
||||
"shorts_dislike_button.e",
|
||||
"reel_dislike_button.e"
|
||||
);
|
||||
|
||||
StringFilterGroup previewComment = new StringFilterGroup(
|
||||
Settings.HIDE_SHORTS_PREVIEW_COMMENT,
|
||||
// Preview comment that can popup while a Short is playing.
|
||||
// Uses no bundled icons, and instead the users profile photo is shown.
|
||||
"participation_bar.eml"
|
||||
"participation_bar.e"
|
||||
);
|
||||
|
||||
joinButton = new StringFilterGroup(
|
||||
|
|
@ -174,20 +174,20 @@ public final class ShortsFilter extends Filter {
|
|||
|
||||
paidPromotionButton = new StringFilterGroup(
|
||||
Settings.HIDE_PAID_PROMOTION_LABEL,
|
||||
"reel_player_disclosure.eml"
|
||||
"reel_player_disclosure.e"
|
||||
);
|
||||
|
||||
shortsActionBar = new StringFilterGroup(
|
||||
null,
|
||||
"shorts_action_bar.eml",
|
||||
"reel_action_bar.eml"
|
||||
"shorts_action_bar.e",
|
||||
"reel_action_bar.e"
|
||||
);
|
||||
|
||||
useSoundButton = new StringFilterGroup(
|
||||
Settings.HIDE_SHORTS_USE_SOUND_BUTTON,
|
||||
// First filter needed for "Use this sound" that can appear when viewing Shorts
|
||||
// through the "Short remixing this video" section.
|
||||
"floating_action_button.eml",
|
||||
"floating_action_button.e",
|
||||
// Second filter needed for "Use this sound" that can appear below the video title.
|
||||
REEL_METAPANEL_PATH
|
||||
);
|
||||
|
|
@ -215,12 +215,12 @@ public final class ShortsFilter extends Filter {
|
|||
// shorts_video_action_button.eml
|
||||
// reel_action_button.eml
|
||||
// reel_pivot_button.eml
|
||||
"button.eml"
|
||||
"button.e"
|
||||
);
|
||||
|
||||
suggestedAction = new StringFilterGroup(
|
||||
null,
|
||||
"suggested_action.eml"
|
||||
"suggested_action.e"
|
||||
);
|
||||
|
||||
addPathCallbacks(
|
||||
|
|
|
|||
|
|
@ -18,28 +18,20 @@ public class SpoofVideoStreamsPatch {
|
|||
* Injection point.
|
||||
*/
|
||||
public static void setClientOrderToUse() {
|
||||
final boolean forceAVC = Settings.FORCE_AVC_CODEC.get();
|
||||
|
||||
// VR 1.61 uses VP9/AV1, and cannot force AVC.
|
||||
ClientType client = Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get();
|
||||
if (forceAVC && client == ANDROID_VR_1_61_48) {
|
||||
client = ANDROID_VR_1_43_32; // Use VR 1.43 instead.
|
||||
|
||||
|
||||
if (Settings.FORCE_AVC_CODEC.get() && client == ANDROID_VR_1_61_48) {
|
||||
// VR 1.61 uses VP9/AV1, and cannot force AVC. Use 1.43 instead.
|
||||
client = ANDROID_VR_1_43_32;
|
||||
}
|
||||
|
||||
List<ClientType> availableClients = forceAVC
|
||||
? List.of(
|
||||
List<ClientType> availableClients = List.of(
|
||||
ANDROID_VR_1_43_32,
|
||||
VISIONOS,
|
||||
ANDROID_CREATOR,
|
||||
ANDROID_VR_1_61_48,
|
||||
IPADOS)
|
||||
: List.of(
|
||||
ANDROID_VR_1_61_48,
|
||||
VISIONOS,
|
||||
ANDROID_CREATOR,
|
||||
ANDROID_VR_1_43_32,
|
||||
IPADOS
|
||||
);
|
||||
IPADOS);
|
||||
|
||||
app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.setClientsToUse(
|
||||
availableClients, client);
|
||||
|
|
|
|||
|
|
@ -359,7 +359,7 @@ public class Settings extends BaseSettings {
|
|||
public static final BooleanSetting EXTERNAL_BROWSER = new BooleanSetting("revanced_external_browser", TRUE, true);
|
||||
public static final BooleanSetting SPOOF_DEVICE_DIMENSIONS = new BooleanSetting("revanced_spoof_device_dimensions", FALSE, true,
|
||||
"revanced_spoof_device_dimensions_user_dialog_message");
|
||||
public static final EnumSetting<ClientType> SPOOF_VIDEO_STREAMS_CLIENT_TYPE = new EnumSetting<>("revanced_spoof_video_streams_client_type", ClientType.ANDROID_VR_1_61_48, true, parent(SPOOF_VIDEO_STREAMS));
|
||||
public static final EnumSetting<ClientType> SPOOF_VIDEO_STREAMS_CLIENT_TYPE = new EnumSetting<>("revanced_spoof_video_streams_client_type", ClientType.ANDROID_VR_1_43_32, true, parent(SPOOF_VIDEO_STREAMS));
|
||||
public static final BooleanSetting DEBUG_PROTOBUFFER = new BooleanSetting("revanced_debug_protobuffer", FALSE, false,
|
||||
"revanced_debug_protobuffer_user_dialog_message", parent(BaseSettings.DEBUG));
|
||||
|
||||
|
|
|
|||
|
|
@ -83,12 +83,17 @@ public class SpoofStreamingDataSideEffectsPreference extends Preference {
|
|||
String summary = str("revanced_spoof_video_streams_about_no_audio_tracks");
|
||||
|
||||
switch (clientType) {
|
||||
case ANDROID_VR_1_61_48 ->
|
||||
summary += '\n' + str("revanced_spoof_video_streams_about_no_stable_volume");
|
||||
case ANDROID_CREATOR ->
|
||||
summary += '\n' + str("revanced_spoof_video_streams_about_no_av1")
|
||||
+ '\n' + str("revanced_spoof_video_streams_about_no_stable_volume")
|
||||
+ '\n' + str("revanced_spoof_video_streams_about_no_force_original_audio");
|
||||
summary += '\n' + str("revanced_spoof_video_streams_about_no_stable_volume")
|
||||
+ '\n' + str("revanced_spoof_video_streams_about_no_av1")
|
||||
+ '\n' + str("revanced_spoof_video_streams_about_no_force_original_audio");
|
||||
case ANDROID_VR_1_43_32 ->
|
||||
summary += '\n' + str("revanced_spoof_video_streams_about_no_stable_volume")
|
||||
+ '\n' + str("revanced_spoof_video_streams_about_no_av1");
|
||||
case ANDROID_VR_1_61_48 ->
|
||||
summary = str("revanced_spoof_video_streams_about_dropped_frames")
|
||||
+ '\n' + summary
|
||||
+ '\n' + str("revanced_spoof_video_streams_about_no_stable_volume");
|
||||
case IPADOS ->
|
||||
summary = str("revanced_spoof_video_streams_about_playback_failure")
|
||||
+ '\n' + str("revanced_spoof_video_streams_about_no_av1");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue