diff --git a/src/main/kotlin/crimera/patches/twitter/interaction/downloads/changedirectory/ChangeDownloadDirPatch.kt b/src/main/kotlin/crimera/patches/twitter/interaction/downloads/changedirectory/ChangeDownloadDirPatch.kt new file mode 100644 index 00000000..7d4e4260 --- /dev/null +++ b/src/main/kotlin/crimera/patches/twitter/interaction/downloads/changedirectory/ChangeDownloadDirPatch.kt @@ -0,0 +1,48 @@ +package crimera.patches.twitter.interaction.downloads.changedirectory + +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.extensions.InstructionExtensions.getInstructions +import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.PatchException +import app.revanced.patcher.patch.annotation.CompatiblePackage +import app.revanced.patcher.patch.annotation.Patch +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import crimera.patches.twitter.interaction.downloads.changedirectory.fingerprints.SetDownloadDestinationFingerprint +import crimera.patches.twitter.misc.settings.SettingsPatch.UTILS_DESCRIPTOR + +@Patch( + name = "Custom download folder", + description = "Change the download directory for video downloads", + requiresIntegrations = true, + compatiblePackages = [CompatiblePackage("com.twitter.android")] +) +@Suppress("unused") +object ChangeDownloadDirPatch: BytecodePatch( + setOf(SetDownloadDestinationFingerprint) +) { + private const val GETFOLDER_DESCRIPTOR = + "invoke-static {p1}, $UTILS_DESCRIPTOR;->getVideoFolder(Ljava/lang/String;)Ljava/lang/String;" + override fun execute(context: BytecodeContext) { + val result = SetDownloadDestinationFingerprint.result + ?: throw PatchException("Could not find fingerprint") + + val method = result.mutableMethod + + val insertAt = method.getInstructions() + .first { it.opcode == Opcode.INVOKE_VIRTUAL }.location.index + + val publicFolderRegister = method.getInstruction(insertAt-1).registerA + method.replaceInstruction(insertAt-1, """ + sget-object v$publicFolderRegister, Landroid/os/Environment;->DIRECTORY_MOVIES:Ljava/lang/String; + """.trimIndent()) + + method.addInstructions(insertAt, """ + $GETFOLDER_DESCRIPTOR + move-result-object p1 + """.trimIndent()) + } +} \ No newline at end of file diff --git a/src/main/kotlin/crimera/patches/twitter/interaction/downloads/changedirectory/fingerprints/SetDownloadDestinationFingerprint.kt b/src/main/kotlin/crimera/patches/twitter/interaction/downloads/changedirectory/fingerprints/SetDownloadDestinationFingerprint.kt new file mode 100644 index 00000000..79ced90d --- /dev/null +++ b/src/main/kotlin/crimera/patches/twitter/interaction/downloads/changedirectory/fingerprints/SetDownloadDestinationFingerprint.kt @@ -0,0 +1,10 @@ +package crimera.patches.twitter.interaction.downloads.changedirectory.fingerprints + +import app.revanced.patcher.fingerprint.MethodFingerprint + +object SetDownloadDestinationFingerprint: MethodFingerprint( + returnType = "V", + strings = listOf( + "parse(downloadData.url)" + ) +) diff --git a/src/main/kotlin/crimera/patches/twitter/interaction/downloads/DownloadPatch.kt b/src/main/kotlin/crimera/patches/twitter/interaction/downloads/unlockdownloads/DownloadPatch.kt similarity index 87% rename from src/main/kotlin/crimera/patches/twitter/interaction/downloads/DownloadPatch.kt rename to src/main/kotlin/crimera/patches/twitter/interaction/downloads/unlockdownloads/DownloadPatch.kt index 5069b89f..0bb1a0a8 100644 --- a/src/main/kotlin/crimera/patches/twitter/interaction/downloads/DownloadPatch.kt +++ b/src/main/kotlin/crimera/patches/twitter/interaction/downloads/unlockdownloads/DownloadPatch.kt @@ -1,4 +1,4 @@ -package crimera.patches.twitter.interaction.downloads +package crimera.patches.twitter.interaction.downloads.unlockdownloads import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.extensions.InstructionExtensions.addInstructions @@ -11,8 +11,8 @@ import app.revanced.patcher.patch.annotation.CompatiblePackage import app.revanced.patcher.patch.annotation.Patch import app.revanced.patcher.util.smali.ExternalLabel import com.android.tools.smali.dexlib2.Opcode -import crimera.patches.twitter.interaction.downloads.fingerprints.DownloadPatchFingerprint -import crimera.patches.twitter.interaction.downloads.fingerprints.FIleDownloaderFingerprint +import crimera.patches.twitter.interaction.downloads.unlockdownloads.fingerprints.DownloadPatchFingerprint +import crimera.patches.twitter.interaction.downloads.unlockdownloads.fingerprints.FIleDownloaderFingerprint // Credits to @iKirby @Patch( @@ -38,7 +38,7 @@ object DownloadPatch : BytecodePatch( """ const/4 v5, 0x2 - if-eq v4, v5, :cond_0 + if-eq v4, v5, :cond_0 """, ExternalLabel("cond_0", method.getInstructions().first { it.opcode == Opcode.NEW_INSTANCE }) ) diff --git a/src/main/kotlin/crimera/patches/twitter/interaction/downloads/fingerprints/DownloadPatchFingerprint.kt b/src/main/kotlin/crimera/patches/twitter/interaction/downloads/unlockdownloads/fingerprints/DownloadPatchFingerprint.kt similarity index 78% rename from src/main/kotlin/crimera/patches/twitter/interaction/downloads/fingerprints/DownloadPatchFingerprint.kt rename to src/main/kotlin/crimera/patches/twitter/interaction/downloads/unlockdownloads/fingerprints/DownloadPatchFingerprint.kt index dda26c7d..1aa58afe 100644 --- a/src/main/kotlin/crimera/patches/twitter/interaction/downloads/fingerprints/DownloadPatchFingerprint.kt +++ b/src/main/kotlin/crimera/patches/twitter/interaction/downloads/unlockdownloads/fingerprints/DownloadPatchFingerprint.kt @@ -1,4 +1,4 @@ -package crimera.patches.twitter.interaction.downloads.fingerprints +package crimera.patches.twitter.interaction.downloads.unlockdownloads.fingerprints import app.revanced.patcher.fingerprint.MethodFingerprint diff --git a/src/main/kotlin/crimera/patches/twitter/interaction/downloads/fingerprints/FIleDownloaderFingerprint.kt b/src/main/kotlin/crimera/patches/twitter/interaction/downloads/unlockdownloads/fingerprints/FIleDownloaderFingerprint.kt similarity index 71% rename from src/main/kotlin/crimera/patches/twitter/interaction/downloads/fingerprints/FIleDownloaderFingerprint.kt rename to src/main/kotlin/crimera/patches/twitter/interaction/downloads/unlockdownloads/fingerprints/FIleDownloaderFingerprint.kt index ec54f1b6..f4b879e6 100644 --- a/src/main/kotlin/crimera/patches/twitter/interaction/downloads/fingerprints/FIleDownloaderFingerprint.kt +++ b/src/main/kotlin/crimera/patches/twitter/interaction/downloads/unlockdownloads/fingerprints/FIleDownloaderFingerprint.kt @@ -1,4 +1,4 @@ -package crimera.patches.twitter.interaction.downloads.fingerprints +package crimera.patches.twitter.interaction.downloads.unlockdownloads.fingerprints import app.revanced.patcher.fingerprint.MethodFingerprint diff --git a/src/main/kotlin/crimera/patches/twitter/misc/settings/SettingsPatch.kt b/src/main/kotlin/crimera/patches/twitter/misc/settings/SettingsPatch.kt index b28e26d2..50e72b64 100644 --- a/src/main/kotlin/crimera/patches/twitter/misc/settings/SettingsPatch.kt +++ b/src/main/kotlin/crimera/patches/twitter/misc/settings/SettingsPatch.kt @@ -27,7 +27,7 @@ object SettingsPatch : BytecodePatch( setOf(SettingsFingerprint) ) { private const val INTEGRATIONS_PACKAGE = "Lapp/revanced/integrations/twitter" - private const val UTILS_DESCRIPTOR = "$INTEGRATIONS_PACKAGE/Utils" + const val UTILS_DESCRIPTOR = "$INTEGRATIONS_PACKAGE/Utils" private const val ADD_PREF_DESCRIPTOR = "$UTILS_DESCRIPTOR;->addPref([Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;" private const val START_ACTIVITY_DESCRIPTOR = "invoke-static {}, $UTILS_DESCRIPTOR;->startActivity()V"