diff --git a/patches/api/patches.api b/patches/api/patches.api index f35624a96..326e3f9e8 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -272,6 +272,10 @@ public final class app/revanced/patches/kakaotalk/changemodel/ChangeModelPatchKt public static final fun getChangeModelPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } +public final class app/revanced/patches/kakaotalk/chatlog/AddDeletedOrHiddenLayoutPatchKt { + public static final fun getAddDeletedOrHiddenLayoutPatch ()Lapp/revanced/patcher/patch/BytecodePatch; +} + public final class app/revanced/patches/kakaotalk/chatlog/AddRealDeletedOrHiddenFlagPatchKt { public static final fun getAddRealDeletedOrHiddenFlagPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } @@ -280,6 +284,10 @@ 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/chatroom/Remove300PlusLimitPatchKt { public static final fun getRemove300PlusLimitBaseChatRoomPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun getRemove300PlusLimitOpenChatRoomPatch ()Lapp/revanced/patcher/patch/BytecodePatch; diff --git a/patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/AddDeletedOrHiddenLayoutPatch.kt b/patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/AddDeletedOrHiddenLayoutPatch.kt new file mode 100644 index 000000000..c9ccee135 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/AddDeletedOrHiddenLayoutPatch.kt @@ -0,0 +1,174 @@ +package app.revanced.patches.kakaotalk.chatlog + +import app.revanced.patcher.patch.bytecodePatch +import app.revanced.patcher.util.proxy.mutableTypes.MutableField.Companion.toMutable +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.immutable.ImmutableField +import com.android.tools.smali.dexlib2.immutable.value.ImmutableBooleanEncodedValue + +val addDeletedOrHiddenLayoutPatch = bytecodePatch( + name = "Add deleted or hidden layout", + description = "Adds a layout for deleted or hidden messages in chat logs", +) { + compatibleWith("com.kakao.talk"("25.4.2")) + + execute { + val chatInfoViewClass = proxy(classes.first { + it.type == "Lcom/kakao/talk/widget/chatlog/ChatInfoView;" + }).mutableClass + val makeLayoutMethod = chatInfoViewClass.methods.firstOrNull { + it.name == "makeLayout" + } ?: error("makeLayout method not found in ChatInfoView class") + + println("ChatInfoView class: $chatInfoViewClass") + println("makeLayout method: $makeLayoutMethod") + + chatInfoViewClass.apply { + fields.add( + ImmutableField( + type, + "isDeleted", + "Z", + AccessFlags.PUBLIC.value, + ImmutableBooleanEncodedValue.FALSE_VALUE, + null, + null + ).toMutable(), + ) + + fields.add( + ImmutableField( + type, + "deletedLayout", + "Landroid/text/Layout;", + AccessFlags.PUBLIC.value, + null, + null, + null + ).toMutable() + ) + + fields.add( + ImmutableField( + type, + "deletedPaint", + "Landroid/text/TextPaint;", + AccessFlags.PUBLIC.value, + null, + null, + null + ).toMutable() + ) + + fields.add( + ImmutableField( + type, + "deletedRect", + "Landroid/graphics/Rect;", + AccessFlags.PUBLIC.value, + null, + null, + null + ).toMutable() + ) + + fields.add( + ImmutableField( + type, + "deletedTextColor", + "I", + AccessFlags.PUBLIC.value, + null, + null, + null + ).toMutable() + ) + + fields.add( + ImmutableField( + type, + "deletedTextSize", + "I", + AccessFlags.PUBLIC.value, + null, + null, + null + ).toMutable() + ) + + fields.add( + ImmutableField( + type, + "isHidden", + "Z", + AccessFlags.PUBLIC.value, + ImmutableBooleanEncodedValue.FALSE_VALUE, + null, + null + ).toMutable(), + ) + + fields.add( + ImmutableField( + type, + "hiddenLayout", + "Landroid/text/Layout;", + AccessFlags.PUBLIC.value, + null, + null, + null + ).toMutable() + ) + + fields.add( + ImmutableField( + type, + "hiddenPaint", + "Landroid/text/TextPaint;", + AccessFlags.PUBLIC.value, + null, + null, + null + ).toMutable() + ) + + fields.add( + ImmutableField( + type, + "hiddenRect", + "Landroid/graphics/Rect;", + AccessFlags.PUBLIC.value, + null, + null, + null + ).toMutable() + ) + + fields.add( + ImmutableField( + type, + "hiddenTextColor", + "I", + AccessFlags.PUBLIC.value, + null, + null, + null + ).toMutable() + ) + + fields.add( + ImmutableField( + type, + "hiddenTextSize", + "I", + AccessFlags.PUBLIC.value, + null, + null, + null + ).toMutable() + ) + + // TODO: Add logic to initialize these fields in the makeLayout method + } + } +} \ No newline at end of file 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 new file mode 100644 index 000000000..aa3a1b70f --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/ShowDeletedMessagePatch.kt @@ -0,0 +1,16 @@ +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/fingerprints/ChatInfoViewFingerprint.kt b/patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/fingerprints/ChatInfoViewFingerprint.kt new file mode 100644 index 000000000..5b3d5209c --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/fingerprints/ChatInfoViewFingerprint.kt @@ -0,0 +1,2 @@ +package app.revanced.patches.kakaotalk.chatlog.fingerprints + diff --git a/patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/fingerprints/ChatLogsManagerFingerprint.kt b/patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/fingerprints/ChatLogsManagerFingerprint.kt new file mode 100644 index 000000000..d7f6f4d9a --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/kakaotalk/chatlog/fingerprints/ChatLogsManagerFingerprint.kt @@ -0,0 +1,20 @@ +package app.revanced.patches.kakaotalk.chatlog.fingerprints + +import app.revanced.patcher.fingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +internal val replaceToFeedFingerprint = fingerprint { + accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC) + returns("V") + strings( + "feedType", + "{}", + "safeBot", + "getString(...)", + "hidden", + "byHost", + "previous_message", + "previous_enc", + "enc : %s, %s", + ) +} \ No newline at end of file