diff --git a/patches/src/main/kotlin/app/revanced/patches/reddit/ad/AdsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/reddit/ad/AdsPatch.kt index 51c8c7e54..74a75cc5e 100644 --- a/patches/src/main/kotlin/app/revanced/patches/reddit/ad/AdsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/reddit/ad/AdsPatch.kt @@ -27,14 +27,6 @@ import com.android.tools.smali.dexlib2.iface.reference.FieldReference private const val EXTENSION_CLASS_DESCRIPTOR = "$PATCHES_PATH/GeneralAdsPatch;" -private val isCommentAdsMethod: Method.() -> Boolean = { - parameterTypes.size == 1 && - parameterTypes.first().startsWith("Lcom/reddit/ads/conversation/") && - accessFlags == AccessFlags.PUBLIC or AccessFlags.FINAL && - returnType == "V" && - indexOfFirstStringInstruction("ad") >= 0 -} - @Suppress("unused") val adsPatch = bytecodePatch( HIDE_ADS.title, @@ -94,11 +86,20 @@ val adsPatch = bytecodePatch( if (is_2025_06_or_greater) { listOf( commentAdCommentScreenAdViewFingerprint, - commentAdDetailListHeaderViewFingerprint + commentAdDetailListHeaderViewFingerprint, + commentsViewModelFingerprint ).forEach { fingerprint -> fingerprint.methodOrThrow().hook() } } else { + val isCommentAdsMethod: Method.() -> Boolean = { + parameterTypes.size == 1 && + parameterTypes.first().startsWith("Lcom/reddit/ads/conversation/") && + accessFlags == AccessFlags.PUBLIC or AccessFlags.FINAL && + returnType == "V" && + indexOfFirstStringInstruction("ad") >= 0 + } + classes.forEach { classDef -> classDef.methods.forEach { method -> if (method.isCommentAdsMethod()) { diff --git a/patches/src/main/kotlin/app/revanced/patches/reddit/ad/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/reddit/ad/Fingerprints.kt index 70df18225..9d434fbd5 100644 --- a/patches/src/main/kotlin/app/revanced/patches/reddit/ad/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/reddit/ad/Fingerprints.kt @@ -8,6 +8,7 @@ import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.Method import com.android.tools.smali.dexlib2.iface.reference.MethodReference +import com.android.tools.smali.dexlib2.iface.reference.TypeReference internal val adPostFingerprint = legacyFingerprint( name = "adPostFingerprint", @@ -49,6 +50,20 @@ internal val commentAdDetailListHeaderViewFingerprint = legacyFingerprint( }, ) +internal val commentsViewModelFingerprint = legacyFingerprint( + name = "commentsViewModelFingerprint", + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = listOf("L", "Z", "L", "I"), + customFingerprint = { method, classDef -> + classDef.superclass == "Lcom/reddit/screen/presentation/CompositionViewModel;" && + method.indexOfFirstInstruction { + opcode == Opcode.NEW_INSTANCE && + getReference()?.type?.startsWith("Lcom/reddit/postdetail/comment/refactor/CommentsViewModel\$LoadAdsSeparately\$") == true + } >= 0 + }, +) + internal val newAdPostFingerprint = legacyFingerprint( name = "newAdPostFingerprint", returnType = "L",