refactor: Hide paid promotion setting now removes includes paid promotion banner in Shorts player

This commit is contained in:
inotia00 2023-02-07 05:21:14 +09:00
parent 0203354a1a
commit c3ae530021

View File

@ -3,14 +3,18 @@ package app.revanced.patches.youtube.ads.general.bytecode.patch
import app.revanced.patcher.annotation.Name import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.addInstructions
import app.revanced.patcher.extensions.instruction
import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResult
import app.revanced.patcher.util.smali.ExternalLabel
import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.patch.annotations.DependsOn
import app.revanced.shared.annotation.YouTubeCompatibility import app.revanced.shared.annotation.YouTubeCompatibility
import app.revanced.shared.extensions.findMutableMethodOf import app.revanced.shared.extensions.findMutableMethodOf
import app.revanced.shared.extensions.injectHideCall import app.revanced.shared.extensions.injectHideCall
import app.revanced.shared.extensions.toResult import app.revanced.shared.extensions.toResult
import app.revanced.shared.patches.mapping.ResourceMappingPatch import app.revanced.shared.patches.mapping.ResourceMappingPatch
import app.revanced.shared.util.integrations.Constants.ADS_PATH
import org.jf.dexlib2.Opcode import org.jf.dexlib2.Opcode
import org.jf.dexlib2.iface.instruction.formats.* import org.jf.dexlib2.iface.instruction.formats.*
@ -20,11 +24,15 @@ import org.jf.dexlib2.iface.instruction.formats.*
@Version("0.0.1") @Version("0.0.1")
class GeneralAdsSecondaryBytecodePatch : BytecodePatch() { class GeneralAdsSecondaryBytecodePatch : BytecodePatch() {
private val resourceIds = arrayOf( private val resourceIds = arrayOf(
"ad_attribution", "id" to "ad_attribution",
"horizontal_card_list", "layout" to "horizontal_card_list",
"album_card" "layout" to "album_card",
).map { name -> "id" to "reel_player_badge",
ResourceMappingPatch.resourceMappings.single { it.name == name }.id "id" to "reel_player_badge2"
).map { (type, name) ->
ResourceMappingPatch
.resourceMappings
.single { it.type == type && it.name == name }.id
} }
private var patchSuccessArray = Array(resourceIds.size) {false} private var patchSuccessArray = Array(resourceIds.size) {false}
@ -71,6 +79,28 @@ class GeneralAdsSecondaryBytecodePatch : BytecodePatch() {
mutableMethod.implementation!!.injectHideCall(insertIndex, viewRegister, "ads/GeneralAdsPatch", "hideAlbumCards") mutableMethod.implementation!!.injectHideCall(insertIndex, viewRegister, "ads/GeneralAdsPatch", "hideAlbumCards")
patchSuccessArray[2] = true; patchSuccessArray[2] = true;
} }
resourceIds[3], resourceIds[4] -> { // paid content banner
val insertIndex = index + 3
val invokeInstruction = instructions.elementAt(insertIndex)
if (invokeInstruction.opcode != Opcode.CHECK_CAST) return@forEachIndexed
val mutableMethod = context.proxy(classDef).mutableClass.findMutableMethodOf(method)
val dummyRegister = (instructions.elementAt(index) as Instruction31i).registerA
val viewRegister = (invokeInstruction as Instruction21c).registerA
mutableMethod.addInstructions(
insertIndex + 1, """
invoke-static {}, $ADS_PATH/GeneralAdsPatch;->hidePaidContentBanner()Z
move-result v$dummyRegister
if-eqz v$dummyRegister, :shown
const v$viewRegister, 0x0
""", listOf(ExternalLabel("shown", mutableMethod.instruction(insertIndex + 1)))
)
patchSuccessArray[3] = true;
patchSuccessArray[4] = true;
}
} }
} }
else -> return@forEachIndexed else -> return@forEachIndexed