diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/fingerprints/PlayerControlsVisibilityModelFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/fingerprints/PlayerControlsVisibilityModelFingerprint.kt new file mode 100644 index 000000000..8e23440c9 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/fingerprints/PlayerControlsVisibilityModelFingerprint.kt @@ -0,0 +1,9 @@ +package app.revanced.patches.youtube.misc.playercontrols.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import org.jf.dexlib2.Opcode + +object PlayerControlsVisibilityModelFingerprint : MethodFingerprint( + opcodes = listOf(Opcode.IGET_BOOLEAN), + strings = listOf("hasNext", "hasPrevious", "Missing required properties:") +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/patch/PlayerControlsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/patch/PlayerControlsPatch.kt index 3d885a1d7..78158bf93 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/patch/PlayerControlsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/patch/PlayerControlsPatch.kt @@ -26,38 +26,42 @@ class PlayerControlsPatch : BytecodePatch( listOf( BottomControlsInflateFingerprint, ControlsLayoutInflateFingerprint, - PlayerControlsVisibilityFingerprint + PlayerControlsVisibilityFingerprint, + PlayerControlsVisibilityModelFingerprint ) ) { override fun execute(context: BytecodeContext): PatchResult { - PlayerControlsVisibilityFingerprint.result?.let { - showPlayerControlsResult = it - } ?: return PlayerControlsVisibilityFingerprint.toErrorResult() - - ControlsLayoutInflateFingerprint.result?.let { - controlsLayoutInflateResult = it - } ?: return ControlsLayoutInflateFingerprint.toErrorResult() - - BottomControlsInflateFingerprint.result?.let { - inflateResult = it - } ?: return BottomControlsInflateFingerprint.toErrorResult() + playerControlsVisibilityResult = PlayerControlsVisibilityFingerprint.result?: return PlayerControlsVisibilityFingerprint.toErrorResult() + playerControlsVisibilityModelResult = PlayerControlsVisibilityModelFingerprint.result?: return PlayerControlsVisibilityModelFingerprint.toErrorResult() + controlsLayoutInflateResult = ControlsLayoutInflateFingerprint.result?: return ControlsLayoutInflateFingerprint.toErrorResult() + inflateResult = BottomControlsInflateFingerprint.result?: return BottomControlsInflateFingerprint.toErrorResult() return PatchResultSuccess() } internal companion object { - lateinit var showPlayerControlsResult: MethodFingerprintResult + lateinit var playerControlsVisibilityResult: MethodFingerprintResult + lateinit var playerControlsVisibilityModelResult: MethodFingerprintResult lateinit var controlsLayoutInflateResult: MethodFingerprintResult lateinit var inflateResult: MethodFingerprintResult - fun MethodFingerprintResult.injectVisibilityCall( + private fun MethodFingerprintResult.injectVisibilityCall( descriptor: String, - fieldname: String + fieldName: String ) { mutableMethod.addInstruction( 0, - "invoke-static {p1}, $descriptor->$fieldname(Z)V" + "invoke-static {p1}, $descriptor->$fieldName(Z)V" + ) + } + + private fun MethodFingerprintResult.injectVisibilityNegatedCall( + descriptor: String + ) { + mutableMethod.addInstruction( + scanResult.patternScanResult!!.startIndex, + "invoke-static {}, $descriptor->changeVisibilityNegatedImmediate()V" ) } @@ -75,7 +79,8 @@ class PlayerControlsPatch : BytecodePatch( } fun injectVisibility(descriptor: String) { - showPlayerControlsResult.injectVisibilityCall(descriptor, "changeVisibility") + playerControlsVisibilityResult.injectVisibilityCall(descriptor, "changeVisibility") + playerControlsVisibilityModelResult.injectVisibilityNegatedCall(descriptor) } fun initializeSB(descriptor: String) {