From 0af0ee92c48bb2ffc332197e05439e20c5c05d83 Mon Sep 17 00:00:00 2001 From: Swakshan <56347042+Swakshan@users.noreply.github.com> Date: Mon, 24 Nov 2025 17:26:55 +0530 Subject: [PATCH] feat(Letterboxd): Add `Hide ads` patch (#6309) Co-authored-by: oSumAtrIX --- patches/api/patches.api | 4 +++ .../patches/letterboxd/ads/Fingerprints.kt | 29 +++++++++++++++++++ .../patches/letterboxd/ads/HideAdsPatch.kt | 20 +++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 patches/src/main/kotlin/app/revanced/patches/letterboxd/ads/Fingerprints.kt create mode 100644 patches/src/main/kotlin/app/revanced/patches/letterboxd/ads/HideAdsPatch.kt diff --git a/patches/api/patches.api b/patches/api/patches.api index ca5994402..5eec2abe3 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -328,6 +328,10 @@ public final class app/revanced/patches/irplus/ad/RemoveAdsPatchKt { public static final fun getRemoveAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } +public final class app/revanced/patches/letterboxd/ads/HideAdsPatchKt { + public static final fun getHideAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch; +} + public final class app/revanced/patches/lightroom/misc/login/DisableMandatoryLoginPatchKt { public static final fun getDisableMandatoryLoginPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } diff --git a/patches/src/main/kotlin/app/revanced/patches/letterboxd/ads/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/letterboxd/ads/Fingerprints.kt new file mode 100644 index 000000000..423c26284 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/letterboxd/ads/Fingerprints.kt @@ -0,0 +1,29 @@ +package app.revanced.patches.letterboxd.ads + +import app.revanced.patcher.fingerprint + +internal const val admobHelperClassName = "Lcom/letterboxd/letterboxd/helpers/AdmobHelper;" + +internal val admobHelperSetShowAdsFingerprint = fingerprint { + custom { method, classDef -> + method.name == "setShowAds" && classDef.type == admobHelperClassName + } +} + +internal val admobHelperShouldShowAdsFingerprint = fingerprint { + custom { method, classDef -> + method.name == "shouldShowAds" && classDef.type == admobHelperClassName + } +} + +internal val filmFragmentShowAdsFingerprint = fingerprint { + custom { method, classDef -> + method.name == "showAds" && classDef.type.endsWith("/FilmFragment;") + } +} + +internal val memberExtensionShowAdsFingerprint = fingerprint { + custom { method, classDef -> + method.name == "showAds" && classDef.type.endsWith("/AMemberExtensionKt;") + } +} \ No newline at end of file diff --git a/patches/src/main/kotlin/app/revanced/patches/letterboxd/ads/HideAdsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/letterboxd/ads/HideAdsPatch.kt new file mode 100644 index 000000000..4de06ff32 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/letterboxd/ads/HideAdsPatch.kt @@ -0,0 +1,20 @@ + +package app.revanced.patches.letterboxd.ads + +import app.revanced.patcher.extensions.InstructionExtensions.addInstruction +import app.revanced.patcher.patch.bytecodePatch +import app.revanced.util.returnEarly + +@Suppress("unused") +val hideAdsPatch = bytecodePatch( + name = "Hide ads", +) { + compatibleWith("com.letterboxd.letterboxd") + + execute { + admobHelperSetShowAdsFingerprint.method.addInstruction(0, "const p1, 0x0") + listOf(admobHelperShouldShowAdsFingerprint, filmFragmentShowAdsFingerprint, memberExtensionShowAdsFingerprint).forEach { + it.method.returnEarly(false) + } + } +}