From c4cb1e6f99941eaac0f561af1be234bc12d80b01 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Sat, 14 Oct 2023 00:59:58 +0200 Subject: [PATCH] refactor: Only check literal instead of additionally the opcode --- .../app/revanced/extensions/Extensions.kt | 23 +++++++++---------- .../CustomPlayerOverlayOpacityPatch.kt | 4 ++-- .../CreatePlayerOverviewFingerprint.kt | 4 ++-- .../seekbar/SeekbarColorBytecodePatch.kt | 4 ++-- .../PlayerSeekbarColorFingerprint.kt | 6 ++--- .../PlayerResponseModelImplFingerprint.kt | 4 ++-- .../util/patch/LiteralValueFingerprint.kt | 4 ++-- 7 files changed, 24 insertions(+), 25 deletions(-) diff --git a/src/main/kotlin/app/revanced/extensions/Extensions.kt b/src/main/kotlin/app/revanced/extensions/Extensions.kt index 0a00f5dd2..e82f03739 100644 --- a/src/main/kotlin/app/revanced/extensions/Extensions.kt +++ b/src/main/kotlin/app/revanced/extensions/Extensions.kt @@ -7,7 +7,6 @@ import app.revanced.patcher.patch.PatchException import app.revanced.patcher.util.proxy.mutableTypes.MutableClass import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.shared.mapping.misc.ResourceMappingPatch -import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.Method import com.android.tools.smali.dexlib2.iface.instruction.WideLiteralInstruction import com.android.tools.smali.dexlib2.util.MethodUtil @@ -58,38 +57,38 @@ fun MutableMethod.injectHideViewCall( ) /** - * Find the index of the first constant instruction with the id of the given resource name. + * Find the index of the first instruction with the id of the given resource name. * * @param resourceName the name of the resource to find the id for. - * @return the index of the first constant instruction with the id of the given resource name, or -1 if not found. + * @return the index of the first instruction with the id of the given resource name, or -1 if not found. */ fun Method.findIndexForIdResource(resourceName: String): Int { fun getIdResourceId(resourceName: String) = ResourceMappingPatch.resourceMappings.single { it.type == "id" && it.name == resourceName }.id - return indexOfFirstConstantInstructionValue(getIdResourceId(resourceName)) + return indexOfFirstWideLiteralInstructionValue(getIdResourceId(resourceName)) } /** - * Find the index of the first constant instruction with the given value. + * Find the index of the first wide literal instruction with the given value. * - * @return the first constant instruction with the value, or -1 if not found. + * @return the first literal instruction with the value, or -1 if not found. */ -fun Method.indexOfFirstConstantInstructionValue(constantValue: Long) = implementation?.let { +fun Method.indexOfFirstWideLiteralInstructionValue(literal: Long) = implementation?.let { it.instructions.indexOfFirst { instruction -> - instruction.opcode == Opcode.CONST && (instruction as WideLiteralInstruction).wideLiteral == constantValue + (instruction as? WideLiteralInstruction)?.wideLiteral == literal } } ?: -1 /** - * Check if the method contains a constant with the given value. + * Check if the method contains a literal with the given value. * - * @return if the method contains a constant with the given value. + * @return if the method contains a literal with the given value. */ -fun Method.containsConstantInstructionValue(constantValue: Long) = - indexOfFirstConstantInstructionValue(constantValue) >= 0 +fun Method.containsWideLiteralInstructionValue(literal: Long) = + indexOfFirstWideLiteralInstructionValue(literal) >= 0 /** diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/player/overlay/CustomPlayerOverlayOpacityPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/player/overlay/CustomPlayerOverlayOpacityPatch.kt index 5da8d54bb..e29773246 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/player/overlay/CustomPlayerOverlayOpacityPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/player/overlay/CustomPlayerOverlayOpacityPatch.kt @@ -1,7 +1,7 @@ package app.revanced.patches.youtube.layout.player.overlay import app.revanced.extensions.exception -import app.revanced.extensions.indexOfFirstConstantInstructionValue +import app.revanced.extensions.indexOfFirstWideLiteralInstructionValue import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.extensions.InstructionExtensions.addInstruction import app.revanced.patcher.extensions.InstructionExtensions.getInstruction @@ -27,7 +27,7 @@ object CustomPlayerOverlayOpacityPatch : BytecodePatch(setOf(CreatePlayerOvervie CreatePlayerOverviewFingerprint.result?.let { result -> result.mutableMethod.apply { val viewRegisterIndex = - indexOfFirstConstantInstructionValue(CustomPlayerOverlayOpacityResourcePatch.scrimOverlayId) + 3 + indexOfFirstWideLiteralInstructionValue(CustomPlayerOverlayOpacityResourcePatch.scrimOverlayId) + 3 val viewRegister = getInstruction(viewRegisterIndex).registerA diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/player/overlay/fingerprints/CreatePlayerOverviewFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/player/overlay/fingerprints/CreatePlayerOverviewFingerprint.kt index 8cc77efac..040b54a18 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/player/overlay/fingerprints/CreatePlayerOverviewFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/player/overlay/fingerprints/CreatePlayerOverviewFingerprint.kt @@ -1,6 +1,6 @@ package app.revanced.patches.youtube.layout.player.overlay.fingerprints -import app.revanced.extensions.containsConstantInstructionValue +import app.revanced.extensions.containsWideLiteralInstructionValue import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patches.youtube.layout.player.overlay.CustomPlayerOverlayOpacityResourcePatch @@ -17,6 +17,6 @@ object CreatePlayerOverviewFingerprint : MethodFingerprint( Opcode.CHECK_CAST ), customFingerprint = { methodDef, _ -> - methodDef.containsConstantInstructionValue(CustomPlayerOverlayOpacityResourcePatch.scrimOverlayId) + methodDef.containsWideLiteralInstructionValue(CustomPlayerOverlayOpacityResourcePatch.scrimOverlayId) } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/SeekbarColorBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/SeekbarColorBytecodePatch.kt index 4a98b7fb6..6c7100755 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/SeekbarColorBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/SeekbarColorBytecodePatch.kt @@ -1,7 +1,7 @@ package app.revanced.patches.youtube.layout.seekbar import app.revanced.extensions.exception -import app.revanced.extensions.indexOfFirstConstantInstructionValue +import app.revanced.extensions.indexOfFirstWideLiteralInstructionValue import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.extensions.InstructionExtensions.addInstructions import app.revanced.patcher.extensions.InstructionExtensions.getInstruction @@ -30,7 +30,7 @@ object SeekbarColorBytecodePatch : BytecodePatch( override fun execute(context: BytecodeContext) { fun MutableMethod.addColorChangeInstructions(resourceId: Long) { - val registerIndex = indexOfFirstConstantInstructionValue(resourceId) + 2 + val registerIndex = indexOfFirstWideLiteralInstructionValue(resourceId) + 2 val colorRegister = getInstruction(registerIndex).registerA addInstructions( registerIndex + 1, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/fingerprints/PlayerSeekbarColorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/fingerprints/PlayerSeekbarColorFingerprint.kt index a4f89764b..b4f8315b2 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/fingerprints/PlayerSeekbarColorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/fingerprints/PlayerSeekbarColorFingerprint.kt @@ -1,6 +1,6 @@ package app.revanced.patches.youtube.layout.seekbar.fingerprints -import app.revanced.extensions.containsConstantInstructionValue +import app.revanced.extensions.containsWideLiteralInstructionValue import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patches.youtube.layout.seekbar.SeekbarColorResourcePatch @@ -9,7 +9,7 @@ import com.android.tools.smali.dexlib2.AccessFlags object PlayerSeekbarColorFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, customFingerprint = { method, _ -> - method.containsConstantInstructionValue(SeekbarColorResourcePatch.inlineTimeBarColorizedBarPlayedColorDarkId) - && method.containsConstantInstructionValue(SeekbarColorResourcePatch.inlineTimeBarPlayedNotHighlightedColorId) + method.containsWideLiteralInstructionValue(SeekbarColorResourcePatch.inlineTimeBarColorizedBarPlayedColorDarkId) + && method.containsWideLiteralInstructionValue(SeekbarColorResourcePatch.inlineTimeBarPlayedNotHighlightedColorId) } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/PlayerResponseModelImplFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/PlayerResponseModelImplFingerprint.kt index 9dd4fa353..882060b06 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/PlayerResponseModelImplFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/PlayerResponseModelImplFingerprint.kt @@ -1,6 +1,6 @@ package app.revanced.patches.youtube.misc.fix.playback.fingerprints -import app.revanced.extensions.containsConstantInstructionValue +import app.revanced.extensions.containsWideLiteralInstructionValue import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import com.android.tools.smali.dexlib2.AccessFlags @@ -18,6 +18,6 @@ object PlayerResponseModelImplFingerprint : MethodFingerprint( customFingerprint = handler@{ methodDef, _ -> if (!methodDef.definingClass.endsWith("/PlayerResponseModelImpl;")) return@handler false - methodDef.containsConstantInstructionValue(55735497) + methodDef.containsWideLiteralInstructionValue(55735497) } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/util/patch/LiteralValueFingerprint.kt b/src/main/kotlin/app/revanced/util/patch/LiteralValueFingerprint.kt index e0cee8da2..a83c4026f 100644 --- a/src/main/kotlin/app/revanced/util/patch/LiteralValueFingerprint.kt +++ b/src/main/kotlin/app/revanced/util/patch/LiteralValueFingerprint.kt @@ -1,6 +1,6 @@ package app.revanced.util.patch -import app.revanced.extensions.containsConstantInstructionValue +import app.revanced.extensions.containsWideLiteralInstructionValue import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import com.android.tools.smali.dexlib2.Opcode @@ -19,6 +19,6 @@ abstract class LiteralValueFingerprint( opcodes = opcodes, strings = strings, customFingerprint = { methodDef, _ -> - methodDef.containsConstantInstructionValue(literalSupplier()) + methodDef.containsWideLiteralInstructionValue(literalSupplier()) } ) \ No newline at end of file