diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt index 7a8d7585b..4bc01390f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt @@ -33,7 +33,6 @@ object SharedResourceIdPatch : ResourcePatch() { var ControlsLayoutStub: Long = -1 var CoreContainer: Long = -1 var DarkSplashAnimation: Long = -1 - var DislikeButton: Long = -1 var DonationCompanion: Long = -1 var EasySeekEduContainer: Long = -1 var EditSettingsAction: Long = -1 @@ -118,7 +117,6 @@ object SharedResourceIdPatch : ResourcePatch() { ControlsLayoutStub = find(ID, "controls_layout_stub") CoreContainer = find(ID, "core_container") DarkSplashAnimation = find(ID, "dark_splash_animation") - DislikeButton = find(ID, "dislike_button") DonationCompanion = find(LAYOUT, "donation_companion") EasySeekEduContainer = find(ID, "easy_seek_edu_container") EditSettingsAction = find(STRING, "edit_settings_action") diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/general/ReturnYouTubeDislikePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/general/ReturnYouTubeDislikePatch.kt index 8884910b4..194798957 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/general/ReturnYouTubeDislikePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/general/ReturnYouTubeDislikePatch.kt @@ -16,17 +16,14 @@ import app.revanced.patches.youtube.utils.returnyoutubedislike.general.fingerpri import app.revanced.patches.youtube.utils.returnyoutubedislike.general.fingerprints.RemoveLikeFingerprint import app.revanced.patches.youtube.utils.returnyoutubedislike.general.fingerprints.TextComponentConstructorFingerprint import app.revanced.patches.youtube.utils.returnyoutubedislike.general.fingerprints.TextComponentContextFingerprint -import app.revanced.patches.youtube.utils.returnyoutubedislike.oldlayout.ReturnYouTubeDislikeOldLayoutPatch import app.revanced.patches.youtube.utils.returnyoutubedislike.rollingnumber.ReturnYouTubeDislikeRollingNumberPatch import app.revanced.patches.youtube.utils.returnyoutubedislike.shorts.ReturnYouTubeDislikeShortsPatch import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.patches.youtube.utils.videoid.general.VideoIdPatch import app.revanced.util.exception -import app.revanced.util.getReference -import com.android.tools.smali.dexlib2.Opcode +import app.revanced.util.getTargetIndexWithFieldReferenceType import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction -import com.android.tools.smali.dexlib2.iface.reference.FieldReference @Patch( name = "Return YouTube Dislike", @@ -34,7 +31,6 @@ import com.android.tools.smali.dexlib2.iface.reference.FieldReference dependencies = [ LithoFilterPatch::class, PlayerResponsePatch::class, - ReturnYouTubeDislikeOldLayoutPatch::class, ReturnYouTubeDislikeRollingNumberPatch::class, ReturnYouTubeDislikeShortsPatch::class, SettingsPatch::class, @@ -79,6 +75,12 @@ object ReturnYouTubeDislikePatch : BytecodePatch( TextComponentConstructorFingerprint ) ) { + private const val INTEGRATIONS_RYD_CLASS_DESCRIPTOR = + "$UTILS_PATH/ReturnYouTubeDislikePatch;" + + private const val FILTER_CLASS_DESCRIPTOR = + "$COMPONENTS_PATH/ReturnYouTubeDislikeFilterPatch;" + override fun execute(context: BytecodeContext) { listOf( LikeFingerprint.toPatch(Vote.LIKE), @@ -103,17 +105,11 @@ object ReturnYouTubeDislikePatch : BytecodePatch( TextComponentContextFingerprint.result?.let { it.mutableMethod.apply { - val conversionContextFieldIndex = implementation!!.instructions.indexOfFirst { instruction -> - instruction.opcode == Opcode.IGET_OBJECT - && instruction.getReference()?.type == "Ljava/util/Map;" - } - 1 + val conversionContextFieldIndex = getTargetIndexWithFieldReferenceType("Ljava/util/Map;") - 1 val conversionContextFieldReference = getInstruction(conversionContextFieldIndex).reference - val charSequenceIndex = implementation!!.instructions.indexOfFirst { instruction -> - instruction.opcode == Opcode.IGET_OBJECT - && instruction.getReference()?.type == "Ljava/util/BitSet;" - } - 1 + val charSequenceIndex = getTargetIndexWithFieldReferenceType("Ljava/util/BitSet;") - 1 val charSequenceRegister = getInstruction(charSequenceIndex).registerA val freeRegister = getInstruction(charSequenceIndex).registerB @@ -146,12 +142,6 @@ object ReturnYouTubeDislikePatch : BytecodePatch( } - private const val INTEGRATIONS_RYD_CLASS_DESCRIPTOR = - "$UTILS_PATH/ReturnYouTubeDislikePatch;" - - private const val FILTER_CLASS_DESCRIPTOR = - "$COMPONENTS_PATH/ReturnYouTubeDislikeFilterPatch;" - private fun MethodFingerprint.toPatch(voteKind: Vote) = VotePatch(this, voteKind) private data class VotePatch(val fingerprint: MethodFingerprint, val voteKind: Vote) diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/oldlayout/ReturnYouTubeDislikeOldLayoutPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/oldlayout/ReturnYouTubeDislikeOldLayoutPatch.kt deleted file mode 100644 index c114d0e9d..000000000 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/oldlayout/ReturnYouTubeDislikeOldLayoutPatch.kt +++ /dev/null @@ -1,42 +0,0 @@ -package app.revanced.patches.youtube.utils.returnyoutubedislike.oldlayout - -import app.revanced.patcher.data.BytecodeContext -import app.revanced.patcher.extensions.InstructionExtensions.addInstruction -import app.revanced.patcher.extensions.InstructionExtensions.getInstruction -import app.revanced.patcher.patch.BytecodePatch -import app.revanced.patcher.patch.annotation.Patch -import app.revanced.patches.youtube.utils.integrations.Constants.UTILS_PATH -import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch -import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.DislikeButton -import app.revanced.patches.youtube.utils.returnyoutubedislike.oldlayout.fingerprints.ButtonTagFingerprint -import app.revanced.util.exception -import app.revanced.util.getWideLiteralInstructionIndex -import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction - -@Patch(dependencies = [SharedResourceIdPatch::class]) -object ReturnYouTubeDislikeOldLayoutPatch : BytecodePatch( - setOf(ButtonTagFingerprint) -) { - override fun execute(context: BytecodeContext) { - - ButtonTagFingerprint.result?.let { - it.mutableMethod.apply { - val dislikeButtonIndex = getWideLiteralInstructionIndex(DislikeButton) - - val resourceIdentifierRegister = - getInstruction(dislikeButtonIndex).registerA - val textViewRegister = - getInstruction(dislikeButtonIndex + 4).registerA - - addInstruction( - dislikeButtonIndex + 4, - "invoke-static {v$resourceIdentifierRegister, v$textViewRegister}, $INTEGRATIONS_RYD_CLASS_DESCRIPTOR->setOldUILayoutDislikes(ILandroid/widget/TextView;)V" - ) - } - } ?: throw ButtonTagFingerprint.exception - - } - - private const val INTEGRATIONS_RYD_CLASS_DESCRIPTOR = - "$UTILS_PATH/ReturnYouTubeDislikePatch;" -} diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/oldlayout/fingerprints/ButtonTagFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/oldlayout/fingerprints/ButtonTagFingerprint.kt deleted file mode 100644 index eba68deb7..000000000 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/oldlayout/fingerprints/ButtonTagFingerprint.kt +++ /dev/null @@ -1,13 +0,0 @@ -package app.revanced.patches.youtube.utils.returnyoutubedislike.oldlayout.fingerprints - -import app.revanced.patcher.extensions.or -import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.DislikeButton -import app.revanced.util.fingerprint.LiteralValueFingerprint -import com.android.tools.smali.dexlib2.AccessFlags - -object ButtonTagFingerprint : LiteralValueFingerprint( - returnType = "V", - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - parameters = listOf("L"), - literalSupplier = { DislikeButton } -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/rollingnumber/ReturnYouTubeDislikeRollingNumberPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/rollingnumber/ReturnYouTubeDislikeRollingNumberPatch.kt index 0d1a8c565..e2d0c5b52 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/rollingnumber/ReturnYouTubeDislikeRollingNumberPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/rollingnumber/ReturnYouTubeDislikeRollingNumberPatch.kt @@ -18,13 +18,13 @@ import app.revanced.patches.youtube.utils.returnyoutubedislike.rollingnumber.fin import app.revanced.patches.youtube.utils.returnyoutubedislike.rollingnumber.fingerprints.RollingNumberTextViewFingerprint import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.util.exception +import app.revanced.util.getTargetIndexWithMethodReferenceName import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction21c import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction -import com.android.tools.smali.dexlib2.iface.reference.MethodReference import com.android.tools.smali.dexlib2.iface.reference.Reference @Patch(dependencies = [SettingsPatch::class]) @@ -158,10 +158,7 @@ object ReturnYouTubeDislikeRollingNumberPatch : BytecodePatch( realTimeUpdateTextViewMethod ).forEach { insertMethod -> insertMethod.apply { - val setTextIndex = - implementation!!.instructions.indexOfFirst { instruction -> - ((instruction as? ReferenceInstruction)?.reference as? MethodReference)?.name == "setText" - } + val setTextIndex = getTargetIndexWithMethodReferenceName("setText") val textViewRegister = getInstruction(setTextIndex).registerC val textSpanRegister = diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/shorts/ReturnYouTubeDislikeShortsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/shorts/ReturnYouTubeDislikeShortsPatch.kt index 53ee003b8..6ebdc06b5 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/shorts/ReturnYouTubeDislikeShortsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/returnyoutubedislike/shorts/ReturnYouTubeDislikeShortsPatch.kt @@ -15,6 +15,7 @@ import app.revanced.patches.youtube.utils.returnyoutubedislike.shorts.fingerprin import app.revanced.patches.youtube.utils.returnyoutubedislike.shorts.fingerprints.TextComponentSpecFingerprint import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.util.exception +import app.revanced.util.getTargetIndex import app.revanced.util.getTargetIndexReversed import app.revanced.util.getTargetIndexWithReference import com.android.tools.smali.dexlib2.Opcode @@ -51,9 +52,7 @@ object ReturnYouTubeDislikeShortsPatch : BytecodePatch( // Check if the hooked TextView object is that of the dislike button. // If RYD is disabled, or the TextView object is not that of the dislike button, the execution flow is not interrupted. // Otherwise, the TextView object is modified, and the execution flow is interrupted to prevent it from being changed afterward. - val insertIndex = implementation!!.instructions.indexOfFirst { instruction -> - instruction.opcode == Opcode.CHECK_CAST - } + 1 + val insertIndex = getTargetIndex(Opcode.CHECK_CAST) + 1 addInstructionsWithLabels( insertIndex, """