From 5f30100fd59c1e61c0236bc54cfcd03212994cab Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Sun, 12 Nov 2023 16:23:56 +0100 Subject: [PATCH] fix(YouTube - Hide layout components): Reduce false positives when hiding mix playlists Implementation references taken from github.com/inotia00/revanced-integrations/commit/cfaf3d6356f316623ad32b10719b1b5ef0ba25b9 --- .../components/LayoutComponentsFilter.java | 31 ++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/app/revanced/integrations/patches/components/LayoutComponentsFilter.java b/app/src/main/java/app/revanced/integrations/patches/components/LayoutComponentsFilter.java index 21134ae7..6589976a 100644 --- a/app/src/main/java/app/revanced/integrations/patches/components/LayoutComponentsFilter.java +++ b/app/src/main/java/app/revanced/integrations/patches/components/LayoutComponentsFilter.java @@ -2,10 +2,8 @@ package app.revanced.integrations.patches.components; import android.os.Build; - import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; - import app.revanced.integrations.settings.SettingsEnum; import app.revanced.integrations.utils.LogHelper; import app.revanced.integrations.utils.StringTrieSearch; @@ -13,6 +11,9 @@ import app.revanced.integrations.utils.StringTrieSearch; @RequiresApi(api = Build.VERSION_CODES.N) public final class LayoutComponentsFilter extends Filter { private final StringTrieSearch exceptions = new StringTrieSearch(); + private static final StringTrieSearch mixPlaylistsExceptions = new StringTrieSearch(); + private static ByteArrayAsStringFilterGroup mixPlaylistsExceptions2; + private final CustomFilterGroup custom; private static final ByteArrayAsStringFilterGroup mixPlaylists = new ByteArrayAsStringFilterGroup( @@ -34,6 +35,16 @@ public final class LayoutComponentsFilter extends Filter { "library_recent_shelf" ); + mixPlaylistsExceptions.addPatterns( + "V.ED", // Playlist browse id. + "java.lang.ref.WeakReference" + ); + + mixPlaylistsExceptions2 = new ByteArrayAsStringFilterGroup( + null, + "cell_description_body" + ); + custom = new CustomFilterGroup( SettingsEnum.CUSTOM_FILTER, SettingsEnum.CUSTOM_FILTER_STRINGS @@ -243,13 +254,19 @@ public final class LayoutComponentsFilter extends Filter { * Injection point. * Called from a different place then the other filters. */ - public static boolean filterMixPlaylists(final byte[] bytes) { - final boolean isMixPlaylistFiltered = mixPlaylists.check(bytes).isFiltered(); + public static boolean filterMixPlaylists(final Object conversionContext, final byte[] bytes) { + // Prevent playlist items being hidden, if a mix playlist is present in it. + if (mixPlaylistsExceptions.matches(conversionContext.toString())) + return false; - if (isMixPlaylistFiltered) - LogHelper.printDebug(() -> "Filtered mix playlist"); + if (!mixPlaylists.check(bytes).isFiltered()) return false; + + // Prevent hiding the description of some videos accidentally. + if (mixPlaylistsExceptions2.check(bytes).isFiltered()) return false; + + LogHelper.printDebug(() -> "Filtered mix playlist"); + return true; - return isMixPlaylistFiltered; } public static boolean showWatermark() {