From 6739e7b94c18200bb3afbc9a8465d97bd18d1945 Mon Sep 17 00:00:00 2001 From: Technikte <49494924+Technikte@users.noreply.github.com> Date: Mon, 29 Aug 2022 18:19:15 +0200 Subject: [PATCH] feat: `premium-icon-reddit` patch (#333) --- .../annotations/PremiumIconCompatibility.kt | 13 ++++++++ .../fingerprints/PremiumIconFingerprint.kt | 24 ++++++++++++++ .../premiumicon/patch/PremiumIconPatch.kt | 32 +++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/reddit/layout/premiumicon/annotations/PremiumIconCompatibility.kt create mode 100644 src/main/kotlin/app/revanced/patches/reddit/layout/premiumicon/fingerprints/PremiumIconFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/reddit/layout/premiumicon/patch/PremiumIconPatch.kt diff --git a/src/main/kotlin/app/revanced/patches/reddit/layout/premiumicon/annotations/PremiumIconCompatibility.kt b/src/main/kotlin/app/revanced/patches/reddit/layout/premiumicon/annotations/PremiumIconCompatibility.kt new file mode 100644 index 000000000..97fe282a1 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/reddit/layout/premiumicon/annotations/PremiumIconCompatibility.kt @@ -0,0 +1,13 @@ +package app.revanced.patches.reddit.layout.premiumicon.annotations + +import app.revanced.patcher.annotation.Compatibility +import app.revanced.patcher.annotation.Package + +@Compatibility( + [Package( + "com.reddit.frontpage", arrayOf() + )] +) +@Target(AnnotationTarget.CLASS) +@Retention(AnnotationRetention.RUNTIME) +internal annotation class PremiumIconCompatibility diff --git a/src/main/kotlin/app/revanced/patches/reddit/layout/premiumicon/fingerprints/PremiumIconFingerprint.kt b/src/main/kotlin/app/revanced/patches/reddit/layout/premiumicon/fingerprints/PremiumIconFingerprint.kt new file mode 100644 index 000000000..83273a61f --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/reddit/layout/premiumicon/fingerprints/PremiumIconFingerprint.kt @@ -0,0 +1,24 @@ +package app.revanced.patches.reddit.layout.premiumicon.fingerprints + +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.annotation.Version +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod +import app.revanced.patches.reddit.layout.premiumicon.annotations.PremiumIconCompatibility + +@Name("premium-icon-fingerprint") +@MatchingMethod( + "Lcom/reddit/domain/model/MyAccount;", "isPremiumSubscriber" +) +@PremiumIconCompatibility +@Version("0.0.1") +object PremiumIconFingerprint : MethodFingerprint( + "Z", + null, + null, + null, + null, + { methodDef -> + methodDef.definingClass.endsWith("MyAccount;") && methodDef.name == "isPremiumSubscriber" + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/reddit/layout/premiumicon/patch/PremiumIconPatch.kt b/src/main/kotlin/app/revanced/patches/reddit/layout/premiumicon/patch/PremiumIconPatch.kt new file mode 100644 index 000000000..663ba3839 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/reddit/layout/premiumicon/patch/PremiumIconPatch.kt @@ -0,0 +1,32 @@ +package app.revanced.patches.reddit.layout.premiumicon.patch + +import app.revanced.patcher.annotation.Description +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.annotation.Version +import app.revanced.patcher.data.impl.BytecodeData +import app.revanced.patcher.extensions.addInstructions +import app.revanced.patcher.patch.annotations.Patch +import app.revanced.patcher.patch.impl.BytecodePatch +import app.revanced.patcher.patch.PatchResult +import app.revanced.patcher.patch.PatchResultSuccess +import app.revanced.patches.reddit.layout.premiumicon.annotations.PremiumIconCompatibility +import app.revanced.patches.reddit.layout.premiumicon.fingerprints.PremiumIconFingerprint + +@Patch +@Name("premium-icon-reddit") +@Description("Unlocking Premium Icons in reddit app.") +@PremiumIconCompatibility +@Version("0.0.1") +class PremiumIconPatch : BytecodePatch() { + override fun execute(data: BytecodeData): PatchResult { + val method = PremiumIconFingerprint.result!!.mutableMethod + method.addInstructions( + 0, + """ + const/4 v0, 0x1 + return v0 + """ + ) + return PatchResultSuccess() + } +}