diff --git a/patches/api/patches.api b/patches/api/patches.api index 326e3f9e8..3dfaa8a8e 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -284,8 +284,8 @@ public final class app/revanced/patches/kakaotalk/chatlog/Remove99ClampPatchKt { public static final fun getRemove99ClampPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } -public final class app/revanced/patches/kakaotalk/chatlog/ShowDeletedMessagePatchKt { - public static final fun getShowDeletedMessagePatch ()Lapp/revanced/patcher/patch/BytecodePatch; +public final class app/revanced/patches/kakaotalk/chatlog/ShowDeletedOrHiddenMessagePatchKt { + public static final fun getShowDeletedOrHiddenMessagePatch ()Lapp/revanced/patcher/patch/BytecodePatch; } public final class app/revanced/patches/kakaotalk/chatroom/Remove300PlusLimitPatchKt { diff --git a/patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/ShowDeletedMessagePatch.kt b/patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/ShowDeletedMessagePatch.kt deleted file mode 100644 index aa3a1b70f..000000000 --- a/patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/ShowDeletedMessagePatch.kt +++ /dev/null @@ -1,16 +0,0 @@ -package app.revanced.patches.kakaotalk.chatlog - -import app.revanced.patcher.patch.bytecodePatch - -val showDeletedMessagePatch = bytecodePatch( - name = "Show deleted message", - description = "Shows deleted messages in chat logs", -) { - compatibleWith("com.kakao.talk"("25.4.2")) - - dependsOn(addRealDeletedOrHiddenFlagPatch) - - execute { - // TODO: Implement the patch to show deleted messages - } -} \ No newline at end of file diff --git a/patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/ShowDeletedOrHiddenMessagePatch.kt b/patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/ShowDeletedOrHiddenMessagePatch.kt new file mode 100644 index 000000000..ee3a2c038 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/ShowDeletedOrHiddenMessagePatch.kt @@ -0,0 +1,51 @@ +package app.revanced.patches.kakaotalk.chatlog + +import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.extensions.InstructionExtensions.instructions +import app.revanced.patcher.patch.bytecodePatch +import app.revanced.patches.kakaotalk.chatlog.fingerprints.createChatLogViewHolderFromRealFingerprint +import app.revanced.util.getReference +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction35c +import com.android.tools.smali.dexlib2.iface.reference.MethodReference + +val showDeletedOrHiddenMessagePatch = bytecodePatch( + name = "Show deleted or hidden message", + description = "Shows deleted & hidden messages in chat logs", +) { + compatibleWith("com.kakao.talk"("25.4.2")) + + dependsOn(addRealDeletedOrHiddenFlagPatch) + + execute { + val method = createChatLogViewHolderFromRealFingerprint.method + val insns = method.instructions + + val modifyInst = insns + .filterIsInstance() + .filter { it.opcode == Opcode.INVOKE_VIRTUAL } + .find { + it.getReference()?.name == "setModify" + } + val modifyIndex = insns.indexOf(modifyInst ?: return@execute) + + println("Modify index: $modifyIndex") + + method.addInstructions( + modifyIndex, + """ + const/4 v12, 0x0 + if-eqz v14, :skip_get_deleted_flag + iget-boolean v12, v14, LXo/c;->isRealDeleted:Z + :skip_get_deleted_flag + invoke-virtual {v4, v12}, Lcom/kakao/talk/widget/chatlog/ChatInfoView;->setDeleted(Z)V + + const/4 v12, 0x0 + if-eqz v14, :skip_get_hidden_flag + iget-boolean v12, v14, LXo/c;->isHidden:Z + :skip_get_hidden_flag + invoke-virtual {v4, v12}, Lcom/kakao/talk/widget/chatlog/ChatInfoView;->setHidden(Z)V + """.trimIndent() + ) + } +} \ No newline at end of file