From cc165f41db4392d9dcc554ee8800333e87dc8cdf Mon Sep 17 00:00:00 2001 From: dic1911 Date: Thu, 25 Apr 2024 17:53:41 +0800 Subject: [PATCH] feat: use browser chooser when opening links --- .../browserchooser/BrowserChooserPatch.kt | 40 +++++++++++++++++++ .../fingerprints/OpenLinkFingerprint.kt | 8 ++++ 2 files changed, 48 insertions(+) create mode 100644 src/main/kotlin/crimera/patches/twitter/link/browserchooser/BrowserChooserPatch.kt create mode 100644 src/main/kotlin/crimera/patches/twitter/link/browserchooser/fingerprints/OpenLinkFingerprint.kt diff --git a/src/main/kotlin/crimera/patches/twitter/link/browserchooser/BrowserChooserPatch.kt b/src/main/kotlin/crimera/patches/twitter/link/browserchooser/BrowserChooserPatch.kt new file mode 100644 index 00000000..2ecaa2e5 --- /dev/null +++ b/src/main/kotlin/crimera/patches/twitter/link/browserchooser/BrowserChooserPatch.kt @@ -0,0 +1,40 @@ +package crimera.patches.twitter.link.browserchooser + +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.annotation.CompatiblePackage +import app.revanced.patcher.patch.annotation.Patch +import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation +import com.android.tools.smali.dexlib2.immutable.ImmutableMethod +import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter +import com.android.tools.smali.dexlib2.Opcode +import crimera.patches.twitter.link.browserchooser.fingerprints.OpenLinkFingerprint +import crimera.patches.twitter.misc.settings.SettingsPatch +import java.lang.IllegalStateException + +@Patch( + name = "Open browser chooser on opening links", + description = "Instead of open the link directly in one of the installed browsers", + compatiblePackages = [CompatiblePackage("com.twitter.android")] +) +@Suppress("unused") +object BrowserChooserPatch : BytecodePatch( + setOf(OpenLinkFingerprint) +) { + override fun execute(context: BytecodeContext) { + + val result = OpenLinkFingerprint.result + ?: throw IllegalStateException("Fingerprint not found") + + val inject = """ + invoke-static {p0, p1, p2}, ${SettingsPatch.PATCHES_DESCRIPTOR}/links/OpenLinksWithAppChooserPatch;->openWithChooser(Landroid/content/Context;Landroid/content/Intent;Landroid/os/Bundle;)V + return-void + """.trimIndent() + + result.mutableMethod.addInstructions(0, inject) + + } +} \ No newline at end of file diff --git a/src/main/kotlin/crimera/patches/twitter/link/browserchooser/fingerprints/OpenLinkFingerprint.kt b/src/main/kotlin/crimera/patches/twitter/link/browserchooser/fingerprints/OpenLinkFingerprint.kt new file mode 100644 index 00000000..aa76991b --- /dev/null +++ b/src/main/kotlin/crimera/patches/twitter/link/browserchooser/fingerprints/OpenLinkFingerprint.kt @@ -0,0 +1,8 @@ +package crimera.patches.twitter.link.browserchooser.fingerprints + +import app.revanced.patcher.fingerprint.MethodFingerprint + +object OpenLinkFingerprint : MethodFingerprint( + returnType = "V", + parameters = listOf("Landroid/content/Context;", "Landroid/content/Intent;", "Landroid/os/Bundle;") +) \ No newline at end of file