refactor(hide-video-ads): match with the official ReVanced's source code

This commit is contained in:
inotia00 2023-03-23 22:43:16 +09:00
parent bf4f5f8206
commit f324e59ddd
3 changed files with 10 additions and 35 deletions

View File

@ -1,17 +1,8 @@
package app.revanced.patches.shared.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.Opcode
object MainstreamVideoAdsFingerprint : MethodFingerprint(
returnType = "V",
parameters = listOf("L","Z"),
opcodes = listOf(
Opcode.IGET_OBJECT,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT_OBJECT,
Opcode.CONST_4,
Opcode.IPUT_BOOLEAN,
Opcode.IF_NEZ
)
strings = listOf("markFillRequested", "requestEnterSlot")
)

View File

@ -1,7 +0,0 @@
package app.revanced.patches.shared.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
object MainstreamVideoAdsParentFingerprint : MethodFingerprint(
strings = listOf("exitSlot")
)

View File

@ -7,8 +7,6 @@ import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.data.toMethodWalker
import app.revanced.patcher.extensions.addInstructions
import app.revanced.patcher.extensions.instruction
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint.Companion.resolve
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprintResult
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.PatchResult
import app.revanced.patcher.patch.PatchResultSuccess
@ -16,36 +14,32 @@ import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
import app.revanced.patcher.util.smali.ExternalLabel
import app.revanced.patches.shared.fingerprints.LegacyVideoAdsFingerprint
import app.revanced.patches.shared.fingerprints.MainstreamVideoAdsFingerprint
import app.revanced.patches.shared.fingerprints.MainstreamVideoAdsParentFingerprint
@Name("general-video-ads-patch")
@Version("0.0.1")
class GeneralVideoAdsPatch : BytecodePatch(
listOf(
LegacyVideoAdsFingerprint,
MainstreamVideoAdsParentFingerprint,
MainstreamVideoAdsFingerprint,
)
) {
override fun execute(context: BytecodeContext): PatchResult {
val legacyVideoAdsResult = LegacyVideoAdsFingerprint.result ?: return LegacyVideoAdsFingerprint.toErrorResult()
val mainstreamVideoAdsResult = MainstreamVideoAdsFingerprint.result ?: return MainstreamVideoAdsFingerprint.toErrorResult()
legacyVideoAdsMethod =
context.toMethodWalker(legacyVideoAdsResult.method)
.nextMethod(13, true)
.getMethod() as MutableMethod
MainstreamVideoAdsParentFingerprint.result?.let { parentResult ->
MainstreamVideoAdsFingerprint.also { it.resolve(context, parentResult.classDef) }.result?.let {
mainstreamVideoAdsResult = it
} ?: return MainstreamVideoAdsFingerprint.toErrorResult()
} ?: return MainstreamVideoAdsParentFingerprint.toErrorResult()
mainstreamVideoAdsMethod = mainstreamVideoAdsResult.mutableMethod
return PatchResultSuccess()
}
internal companion object {
lateinit var legacyVideoAdsMethod: MutableMethod
lateinit var mainstreamVideoAdsResult: MethodFingerprintResult
lateinit var mainstreamVideoAdsMethod: MutableMethod
fun injectLegacyAds(
descriptor: String
@ -61,16 +55,13 @@ class GeneralVideoAdsPatch : BytecodePatch(
fun injectMainstreamAds(
descriptor: String
) {
val mainstreamVideoAdsMethod = mainstreamVideoAdsResult.mutableMethod
val insertIndex = mainstreamVideoAdsResult.scanResult.patternScanResult!!.endIndex
mainstreamVideoAdsMethod.addInstructions(
insertIndex, """
0, """
invoke-static {}, $descriptor
move-result v1
if-nez v1, :show_video_ads
move-result v0
if-nez v0, :show_video_ads
return-void
""", listOf(ExternalLabel("show_video_ads", mainstreamVideoAdsMethod.instruction(insertIndex)))
""", listOf(ExternalLabel("show_video_ads", mainstreamVideoAdsMethod.instruction(0)))
)
}