From 5d1de4f4eab83e61cfc1c4aaee74179afcb9431f Mon Sep 17 00:00:00 2001 From: badawoll <129878899+badawoll@users.noreply.github.com> Date: Tue, 16 May 2023 03:39:19 +0000 Subject: [PATCH] feat(messenger): add `disable-typing-indicator` patch (#2115) Co-authored-by: oSumAtrIX --- .../SendTypingIndicatorFingerprint.kt | 15 ++++++++++ .../patch/DisableTypingIndicator.kt | 29 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/messenger/inputfield/fingerprints/SendTypingIndicatorFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/messenger/inputfield/patch/DisableTypingIndicator.kt diff --git a/src/main/kotlin/app/revanced/patches/messenger/inputfield/fingerprints/SendTypingIndicatorFingerprint.kt b/src/main/kotlin/app/revanced/patches/messenger/inputfield/fingerprints/SendTypingIndicatorFingerprint.kt new file mode 100644 index 000000000..cff25ae29 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/messenger/inputfield/fingerprints/SendTypingIndicatorFingerprint.kt @@ -0,0 +1,15 @@ +package app.revanced.patches.messenger.inputfield.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import org.jf.dexlib2.dexbacked.value.DexBackedStringEncodedValue + +object SendTypingIndicatorFingerprint : MethodFingerprint( + returnType = "V", + parameters = listOf(), + customFingerprint = { methodDef, classDef -> + methodDef.name == "run" && classDef.fields.any { + it.name == "__redex_internal_original_name" + && (it.initialValue as? DexBackedStringEncodedValue)?.value == "ConversationTypingContext\$sendActiveStateRunnable\$1" + } + } +) diff --git a/src/main/kotlin/app/revanced/patches/messenger/inputfield/patch/DisableTypingIndicator.kt b/src/main/kotlin/app/revanced/patches/messenger/inputfield/patch/DisableTypingIndicator.kt new file mode 100644 index 000000000..d25d46ed9 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/messenger/inputfield/patch/DisableTypingIndicator.kt @@ -0,0 +1,29 @@ +package app.revanced.patches.messenger.inputfield.patch + +import app.revanced.extensions.toErrorResult +import app.revanced.patcher.annotation.Compatibility +import app.revanced.patcher.annotation.Description +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.annotation.Package +import app.revanced.patcher.annotation.Version +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.replaceInstruction +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.PatchResult +import app.revanced.patcher.patch.PatchResultSuccess +import app.revanced.patcher.patch.annotations.Patch +import app.revanced.patches.messenger.inputfield.fingerprints.SendTypingIndicatorFingerprint + +@Patch +@Name("disable-typing-indicator") +@Description("Disables the indicator while typing a message") +@Compatibility([Package("com.facebook.orca")]) +@Version("0.0.1") +class DisableTypingIndicator : BytecodePatch(listOf(SendTypingIndicatorFingerprint)) { + override fun execute(context: BytecodeContext): PatchResult { + SendTypingIndicatorFingerprint.result?.mutableMethod?.replaceInstruction(0, "return-void") + ?: throw SendTypingIndicatorFingerprint.toErrorResult() + + return PatchResultSuccess() + } +}