feat(YouTube - Hide layout components): Add Hide channel links preview and Hide 'Visit Community' button in channel page (#5320)

This commit is contained in:
ILoveOpenSourceApplications 2025-07-04 14:02:48 +05:30 committed by GitHub
parent 90a3262f68
commit 3eac215e13
7 changed files with 142 additions and 124 deletions

View file

@ -34,10 +34,6 @@ public final class AdsFilter extends Filter {
private final StringFilterGroup playerShoppingShelf;
private final ByteArrayFilterGroup playerShoppingShelfBuffer;
private final StringFilterGroup channelProfile;
private final ByteArrayFilterGroup visitStoreButton;
private final StringFilterGroup shoppingLinks;
public AdsFilter() {
exceptions.addPatterns(
@ -113,18 +109,13 @@ public final class AdsFilter extends Filter {
"shopping_overlay.eml" // Video player overlay shopping links.
);
shoppingLinks = new StringFilterGroup(
Settings.HIDE_TAGGED_PRODUCTS,
"expandable_list"
);
final var storeProductsShelf = new StringFilterGroup(
Settings.HIDE_CREATOR_STORE_SHELVES,
final var shoppingLinks = new StringFilterGroup(
Settings.HIDE_SHOPPING_LINKS,
"shopping_description_shelf.eml"
);
playerShoppingShelf = new StringFilterGroup(
Settings.HIDE_CREATOR_STORE_SHELVES,
Settings.HIDE_CREATOR_STORE_SHELF,
"horizontal_shelf.eml"
);
@ -133,17 +124,6 @@ public final class AdsFilter extends Filter {
"shopping_item_card_list"
);
channelProfile = new StringFilterGroup(
Settings.HIDE_VISIT_STORE_BUTTON,
"channel_profile.eml",
"page_header.eml"
);
visitStoreButton = new ByteArrayFilterGroup(
null,
"header_store_button"
);
final var webLinkPanel = new StringFilterGroup(
Settings.HIDE_WEB_SEARCH_RESULTS,
"web_link_panel"
@ -161,7 +141,6 @@ public final class AdsFilter extends Filter {
);
addPathCallbacks(
channelProfile,
fullscreenAd,
generalAds,
merchandise,
@ -169,7 +148,6 @@ public final class AdsFilter extends Filter {
playerShoppingShelf,
selfSponsor,
shoppingLinks,
storeProductsShelf,
viewProducts,
webLinkPanel
);
@ -182,11 +160,6 @@ public final class AdsFilter extends Filter {
return contentIndex == 0 && playerShoppingShelfBuffer.check(protobufBufferArray).isFiltered();
}
// Check for the index because of likelihood of false positives.
if (contentIndex != 0 && matchedGroup == shoppingLinks) {
return false;
}
if (exceptions.matches(path)) {
return false;
}
@ -198,10 +171,6 @@ public final class AdsFilter extends Filter {
return false;
}
if (matchedGroup == channelProfile) {
return visitStoreButton.check(protobufBufferArray).isFiltered();
}
return true;
}

View file

@ -7,7 +7,7 @@ import app.revanced.extension.youtube.settings.Settings;
@SuppressWarnings("unused")
final class CommentsFilter extends Filter {
private final StringFilterGroup filterChipBar;
private final StringFilterGroup chipBar;
private final ByteArrayFilterGroup aiCommentsSummary;
public CommentsFilter() {
@ -16,6 +16,21 @@ final class CommentsFilter extends Filter {
"live_chat_summary_banner.eml"
);
chipBar = new StringFilterGroup(
Settings.HIDE_COMMENTS_AI_SUMMARY,
"chip_bar.eml"
);
aiCommentsSummary = new ByteArrayFilterGroup(
null,
"yt_fill_spark_"
);
var channelGuidelines = new StringFilterGroup(
Settings.HIDE_COMMENTS_CHANNEL_GUIDELINES,
"channel_guidelines_entry_banner"
);
var commentsByMembers = new StringFilterGroup(
Settings.HIDE_COMMENTS_BY_MEMBERS_HEADER,
"sponsorships_comments_header.eml",
@ -28,6 +43,11 @@ final class CommentsFilter extends Filter {
"_comments"
);
var communityGuidelines = new StringFilterGroup(
Settings.HIDE_COMMENTS_COMMUNITY_GUIDELINES,
"community_guidelines"
);
var createAShort = new StringFilterGroup(
Settings.HIDE_COMMENTS_CREATE_A_SHORT_BUTTON,
"composer_short_creation_button.eml"
@ -50,32 +70,25 @@ final class CommentsFilter extends Filter {
"composer_timestamp_button.eml"
);
filterChipBar = new StringFilterGroup(
Settings.HIDE_COMMENTS_AI_SUMMARY,
"chip_bar.eml"
);
aiCommentsSummary = new ByteArrayFilterGroup(
null,
"yt_fill_spark_"
);
addPathCallbacks(
channelGuidelines,
chatSummary,
chipBar,
commentsByMembers,
comments,
communityGuidelines,
createAShort,
previewComment,
thanksButton,
timestampButton,
filterChipBar
timestampButton
);
}
@Override
boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
StringFilterGroup matchedGroup, FilterContentType contentType, int contentIndex) {
if (matchedGroup == filterChipBar) {
if (matchedGroup == chipBar) {
return aiCommentsSummary.check(protobufBufferArray).isFiltered();
}

View file

@ -40,6 +40,8 @@ public final class LayoutComponentsFilter extends Filter {
private final StringFilterGroup horizontalShelves;
private final ByteArrayFilterGroup ticketShelf;
private final StringFilterGroup chipBar;
private final StringFilterGroup channelProfile;
private final ByteArrayFilterGroupList channelProfileBuffer;
public LayoutComponentsFilter() {
exceptions.addPatterns(
@ -81,18 +83,13 @@ public final class LayoutComponentsFilter extends Filter {
"poll_post_responsive_root.eml"
);
final var communityGuidelines = new StringFilterGroup(
Settings.HIDE_COMMUNITY_GUIDELINES,
"community_guidelines"
);
final var subscribersCommunityGuidelines = new StringFilterGroup(
Settings.HIDE_SUBSCRIBERS_COMMUNITY_GUIDELINES,
"sponsorships_comments_upsell"
);
final var channelMemberShelf = new StringFilterGroup(
Settings.HIDE_CHANNEL_MEMBER_SHELF,
final var channelMembersShelf = new StringFilterGroup(
Settings.HIDE_MEMBERS_SHELF,
"member_recognition_shelf"
);
@ -139,13 +136,13 @@ public final class LayoutComponentsFilter extends Filter {
);
final var latestPosts = new StringFilterGroup(
Settings.HIDE_HIDE_LATEST_POSTS,
Settings.HIDE_LATEST_POSTS,
"post_shelf"
);
final var channelGuidelines = new StringFilterGroup(
Settings.HIDE_HIDE_CHANNEL_GUIDELINES,
"channel_guidelines_entry_banner"
final var channelLinksPreview = new StringFilterGroup(
Settings.HIDE_LINKS_PREVIEW,
"attribution.eml"
);
final var emergencyBox = new StringFilterGroup(
@ -200,7 +197,6 @@ public final class LayoutComponentsFilter extends Filter {
"image_shelf"
);
final var timedReactions = new StringFilterGroup(
Settings.HIDE_TIMED_REACTIONS,
"emoji_control_panel",
@ -227,7 +223,6 @@ public final class LayoutComponentsFilter extends Filter {
"sponsorships"
);
final var channelWatermark = new StringFilterGroup(
Settings.HIDE_VIDEO_CHANNEL_WATERMARK,
"featured_channel_watermark_overlay"
@ -243,6 +238,22 @@ public final class LayoutComponentsFilter extends Filter {
"endorsement_header_footer.eml"
);
channelProfile = new StringFilterGroup(
null,
"channel_profile.eml",
"page_header.eml"
);
channelProfileBuffer = new ByteArrayFilterGroupList();
channelProfileBuffer.addAll(new ByteArrayFilterGroup(
Settings.HIDE_VISIT_STORE_BUTTON,
"header_store_button"
),
new ByteArrayFilterGroup(
Settings.HIDE_VISIT_COMMUNITY_BUTTON,
"community_button"
)
);
horizontalShelves = new StringFilterGroup(
Settings.HIDE_HORIZONTAL_SHELVES,
"horizontal_video_shelf.eml",
@ -266,7 +277,6 @@ public final class LayoutComponentsFilter extends Filter {
searchResultRecommendationLabels,
latestPosts,
channelWatermark,
communityGuidelines,
playables,
quickActions,
relatedVideos,
@ -279,12 +289,13 @@ public final class LayoutComponentsFilter extends Filter {
subscribersCommunityGuidelines,
subscriptionsChipBar,
chipBar,
channelGuidelines,
channelLinksPreview,
channelProfile,
audioTrackButton,
artistCard,
timedReactions,
imageShelf,
channelMemberShelf,
channelMembersShelf,
forYouShelf,
horizontalShelves
);
@ -308,6 +319,10 @@ public final class LayoutComponentsFilter extends Filter {
return true;
}
if (matchedGroup == channelProfile) {
return channelProfileBuffer.check(protobufBufferArray).isFiltered();
}
if (exceptions.matches(path)) return false; // Exceptions are not filtered.
if (matchedGroup == compactChannelBarInner) {
@ -332,7 +347,7 @@ public final class LayoutComponentsFilter extends Filter {
* Injection point.
* Called from a different place then the other filters.
*/
public static boolean filterMixPlaylists(final Object conversionContext, @Nullable final byte[] bytes) {
public static boolean filterMixPlaylists(Object conversionContext, @Nullable final byte[] bytes) {
try {
if (!Settings.HIDE_MIX_PLAYLISTS.get()) {
return false;

View file

@ -74,19 +74,18 @@ public class Settings extends BaseSettings {
public static final BooleanSetting FORCE_ORIGINAL_AUDIO = new BooleanSetting("revanced_force_original_audio", FALSE, new ForceOriginalAudioAvailability());
// Ads
public static final BooleanSetting HIDE_CREATOR_STORE_SHELVES = new BooleanSetting("revanced_hide_creator_store_shelves", TRUE);
public static final BooleanSetting HIDE_CREATOR_STORE_SHELF = new BooleanSetting("revanced_hide_creator_store_shelf", TRUE);
public static final BooleanSetting HIDE_END_SCREEN_STORE_BANNER = new BooleanSetting("revanced_hide_end_screen_store_banner", TRUE, true);
public static final BooleanSetting HIDE_FULLSCREEN_ADS = new BooleanSetting("revanced_hide_fullscreen_ads", TRUE);
public static final BooleanSetting HIDE_GENERAL_ADS = new BooleanSetting("revanced_hide_general_ads", TRUE);
public static final BooleanSetting HIDE_GET_PREMIUM = new BooleanSetting("revanced_hide_get_premium", TRUE);
public static final BooleanSetting HIDE_HIDE_LATEST_POSTS = new BooleanSetting("revanced_hide_latest_posts_ads", TRUE);
public static final BooleanSetting HIDE_LATEST_POSTS = new BooleanSetting("revanced_hide_latest_posts", TRUE);
public static final BooleanSetting HIDE_MERCHANDISE_BANNERS = new BooleanSetting("revanced_hide_merchandise_banners", TRUE);
public static final BooleanSetting HIDE_PAID_PROMOTION_LABEL = new BooleanSetting("revanced_hide_paid_promotion_label", TRUE);
public static final BooleanSetting HIDE_SELF_SPONSOR = new BooleanSetting("revanced_hide_self_sponsor_ads", TRUE);
public static final BooleanSetting HIDE_TAGGED_PRODUCTS = new BooleanSetting("revanced_hide_tagged_products", TRUE);
public static final BooleanSetting HIDE_SHOPPING_LINKS = new BooleanSetting("revanced_hide_shopping_links", TRUE);
public static final BooleanSetting HIDE_VIDEO_ADS = new BooleanSetting("revanced_hide_video_ads", TRUE, true);
public static final BooleanSetting HIDE_VIEW_PRODUCTS_BANNER = new BooleanSetting("revanced_hide_view_products_banner", TRUE);
public static final BooleanSetting HIDE_VISIT_STORE_BUTTON = new BooleanSetting("revanced_hide_visit_store_button", TRUE);
public static final BooleanSetting HIDE_WEB_SEARCH_RESULTS = new BooleanSetting("revanced_hide_web_search_results", TRUE);
// Feed
@ -104,7 +103,6 @@ public class Settings extends BaseSettings {
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_RELATED_VIDEOS = new BooleanSetting("revanced_hide_filter_bar_feed_in_related_videos", FALSE, true);
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_SEARCH = new BooleanSetting("revanced_hide_filter_bar_feed_in_search", FALSE, true);
public static final BooleanSetting HIDE_FLOATING_MICROPHONE_BUTTON = new BooleanSetting("revanced_hide_floating_microphone_button", TRUE, true);
public static final BooleanSetting HIDE_FOR_YOU_SHELF = new BooleanSetting("revanced_hide_for_you_shelf", TRUE);
public static final BooleanSetting HIDE_HORIZONTAL_SHELVES = new BooleanSetting("revanced_hide_horizontal_shelves", TRUE);
public static final BooleanSetting HIDE_IMAGE_SHELF = new BooleanSetting("revanced_hide_image_shelf", TRUE);
public static final BooleanSetting HIDE_MIX_PLAYLISTS = new BooleanSetting("revanced_hide_mix_playlists", TRUE);
@ -131,6 +129,12 @@ public class Settings extends BaseSettings {
public static final BooleanSetting HIDE_KEYWORD_CONTENT_SEARCH = new BooleanSetting("revanced_hide_keyword_content_search", FALSE);
public static final StringSetting HIDE_KEYWORD_CONTENT_PHRASES = new StringSetting("revanced_hide_keyword_content_phrases", "",
parentsAny(HIDE_KEYWORD_CONTENT_HOME, HIDE_KEYWORD_CONTENT_SUBSCRIPTIONS, HIDE_KEYWORD_CONTENT_SEARCH));
// Channel page
public static final BooleanSetting HIDE_FOR_YOU_SHELF = new BooleanSetting("revanced_hide_for_you_shelf", FALSE);
public static final BooleanSetting HIDE_LINKS_PREVIEW = new BooleanSetting("revanced_hide_links_preview", TRUE);
public static final BooleanSetting HIDE_MEMBERS_SHELF = new BooleanSetting("revanced_hide_members_shelf", TRUE);
public static final BooleanSetting HIDE_VISIT_COMMUNITY_BUTTON = new BooleanSetting("revanced_hide_visit_community_button", TRUE);
public static final BooleanSetting HIDE_VISIT_STORE_BUTTON = new BooleanSetting("revanced_hide_visit_store_button", TRUE);
// Player
public static final BooleanSetting COPY_VIDEO_URL = new BooleanSetting("revanced_copy_video_url", FALSE);
@ -144,13 +148,10 @@ public class Settings extends BaseSettings {
public static final BooleanSetting HIDE_CAST_BUTTON = new BooleanSetting("revanced_hide_cast_button", TRUE, true);
public static final BooleanSetting HIDE_PLAYER_CONTROL_BUTTONS_BACKGROUND = new BooleanSetting("revanced_hide_player_control_buttons_background", FALSE, true);
public static final BooleanSetting HIDE_CHANNEL_BAR = new BooleanSetting("revanced_hide_channel_bar", FALSE);
public static final BooleanSetting HIDE_CHANNEL_MEMBER_SHELF = new BooleanSetting("revanced_hide_channel_member_shelf", TRUE);
public static final BooleanSetting HIDE_COMMUNITY_GUIDELINES = new BooleanSetting("revanced_hide_community_guidelines", TRUE);
public static final BooleanSetting HIDE_EMERGENCY_BOX = new BooleanSetting("revanced_hide_emergency_box", TRUE);
public static final BooleanSetting HIDE_ENDSCREEN_CARDS = new BooleanSetting("revanced_hide_endscreen_cards", FALSE);
public static final BooleanSetting HIDE_END_SCREEN_SUGGESTED_VIDEO = new BooleanSetting("revanced_end_screen_suggested_video", FALSE, true);
public static final BooleanSetting HIDE_RELATED_VIDEO_OVERLAY = new BooleanSetting("revanced_hide_related_video_overlay", FALSE, true);
public static final BooleanSetting HIDE_HIDE_CHANNEL_GUIDELINES = new BooleanSetting("revanced_hide_channel_guidelines", TRUE);
public static final BooleanSetting HIDE_INFO_PANELS = new BooleanSetting("revanced_hide_info_panels", TRUE);
public static final BooleanSetting HIDE_INFO_CARDS = new BooleanSetting("revanced_hide_info_cards", FALSE);
public static final BooleanSetting HIDE_JOIN_MEMBERSHIP_BUTTON = new BooleanSetting("revanced_hide_join_membership_button", TRUE);
@ -185,7 +186,9 @@ public class Settings extends BaseSettings {
// Comments
public static final BooleanSetting HIDE_COMMENTS_AI_CHAT_SUMMARY = new BooleanSetting("revanced_hide_comments_ai_chat_summary", FALSE);
public static final BooleanSetting HIDE_COMMENTS_AI_SUMMARY = new BooleanSetting("revanced_hide_comments_ai_summary", FALSE);
public static final BooleanSetting HIDE_COMMENTS_CHANNEL_GUIDELINES = new BooleanSetting("revanced_hide_comments_channel_guidelines", TRUE);
public static final BooleanSetting HIDE_COMMENTS_BY_MEMBERS_HEADER = new BooleanSetting("revanced_hide_comments_by_members_header", FALSE);
public static final BooleanSetting HIDE_COMMENTS_COMMUNITY_GUIDELINES = new BooleanSetting("revanced_hide_comments_community_guidelines", TRUE);
public static final BooleanSetting HIDE_COMMENTS_CREATE_A_SHORT_BUTTON = new BooleanSetting("revanced_hide_comments_create_a_short_button", TRUE);
public static final BooleanSetting HIDE_COMMENTS_PREVIEW_COMMENT = new BooleanSetting("revanced_hide_comments_preview_comment", FALSE);
public static final BooleanSetting HIDE_COMMENTS_SECTION = new BooleanSetting("revanced_hide_comments_section", FALSE);