diff --git a/src/main/kotlin/app/revanced/patches/music/utils/overridequality/OverrideQualityHookPatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/overridequality/OverrideQualityHookPatch.kt index 1c83651e0..7c157b3e8 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/overridequality/OverrideQualityHookPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/overridequality/OverrideQualityHookPatch.kt @@ -9,13 +9,16 @@ import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchException import app.revanced.patcher.patch.annotation.Patch import app.revanced.patcher.util.proxy.mutableTypes.MutableField.Companion.toMutable +import app.revanced.patches.music.utils.integrations.Constants.INTEGRATIONS_PATH import app.revanced.patches.music.utils.integrations.Constants.VIDEO_PATH import app.revanced.patches.music.utils.overridequality.fingerprints.VideoQualityListFingerprint import app.revanced.patches.music.utils.overridequality.fingerprints.VideoQualityPatchFingerprint +import app.revanced.patches.music.utils.overridequality.fingerprints.VideoQualityTextFingerprint import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch import app.revanced.util.exception import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction import com.android.tools.smali.dexlib2.immutable.ImmutableField import com.android.tools.smali.dexlib2.util.MethodUtil @@ -23,7 +26,8 @@ import com.android.tools.smali.dexlib2.util.MethodUtil object OverrideQualityHookPatch : BytecodePatch( setOf( VideoQualityListFingerprint, - VideoQualityPatchFingerprint + VideoQualityPatchFingerprint, + VideoQualityTextFingerprint ) ) { override fun execute(context: BytecodeContext) { @@ -78,11 +82,26 @@ object OverrideQualityHookPatch : BytecodePatch( ) } } ?: throw VideoQualityPatchFingerprint.exception + + VideoQualityTextFingerprint.result?.let { + it.mutableMethod.apply { + val textIndex = it.scanResult.patternScanResult!!.endIndex + val textRegister = getInstruction(textIndex).registerA + + addInstruction( + textIndex + 1, + "sput-object v$textRegister, $INTEGRATIONS_VIDEO_HELPER_CLASS_DESCRIPTOR->currentQuality:Ljava/lang/String;" + ) + } + } ?: throw VideoQualityTextFingerprint.exception } private const val INTEGRATIONS_VIDEO_QUALITY_CLASS_DESCRIPTOR = "$VIDEO_PATH/VideoQualityPatch;" + private const val INTEGRATIONS_VIDEO_HELPER_CLASS_DESCRIPTOR = + "$INTEGRATIONS_PATH/utils/VideoHelpers;" + private lateinit var QUALITY_CLASS: String private lateinit var QUALITY_METHOD: String } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/utils/overridequality/fingerprints/VideoQualityPatchFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/utils/overridequality/fingerprints/VideoQualityPatchFingerprint.kt index 83dbc8aea..a771e5dcb 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/overridequality/fingerprints/VideoQualityPatchFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/overridequality/fingerprints/VideoQualityPatchFingerprint.kt @@ -6,7 +6,7 @@ import com.android.tools.smali.dexlib2.AccessFlags object VideoQualityPatchFingerprint : MethodFingerprint( returnType = "V", - accessFlags = AccessFlags.PRIVATE or AccessFlags.STATIC, + accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC, parameters = listOf("I"), customFingerprint = { methodDef, _ -> methodDef.definingClass == "Lapp/revanced/music/patches/video/VideoQualityPatch;" diff --git a/src/main/kotlin/app/revanced/patches/music/utils/overridequality/fingerprints/VideoQualityTextFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/utils/overridequality/fingerprints/VideoQualityTextFingerprint.kt new file mode 100644 index 000000000..ed865f1d2 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/utils/overridequality/fingerprints/VideoQualityTextFingerprint.kt @@ -0,0 +1,20 @@ +package app.revanced.patches.music.utils.overridequality.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode + +object VideoQualityTextFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = listOf("[L", "I", "Z"), + opcodes = listOf( + Opcode.IF_EQZ, + Opcode.IF_LTZ, + Opcode.ARRAY_LENGTH, + Opcode.IF_GE, + Opcode.AGET_OBJECT, + Opcode.IGET_OBJECT + ) +) \ No newline at end of file