fix(YouTube Music/Remember video quality): video quality toast shows wrong quality value

This commit is contained in:
inotia00
2023-12-12 10:04:56 +09:00
parent b6c7b75c9d
commit 819348054b
3 changed files with 41 additions and 2 deletions

View File

@ -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<TwoRegisterInstruction>(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
}

View File

@ -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;"

View File

@ -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
)
)