fix(youtube/overlay-button): overlay button not hidden when scrubbing seekbar

This commit is contained in:
inotia00 2023-09-05 12:52:08 +09:00
parent 47b2ed2104
commit 7164f729f4
2 changed files with 43 additions and 6 deletions

View File

@ -0,0 +1,16 @@
package app.revanced.patches.youtube.utils.playercontrols.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.instruction.NarrowLiteralInstruction
object QuickSeekVisibleFingerprint : MethodFingerprint(
returnType = "V",
parameters = listOf("Z"),
opcodes = listOf(Opcode.OR_INT_LIT16),
customFingerprint = { methodDef, _ ->
methodDef.implementation!!.instructions.any {
((it as? NarrowLiteralInstruction)?.narrowLiteral == 128)
}
}
)

View File

@ -17,6 +17,7 @@ import app.revanced.patches.youtube.utils.playercontrols.fingerprints.Fullscreen
import app.revanced.patches.youtube.utils.playercontrols.fingerprints.FullscreenEngagementSpeedEduVisibleParentFingerprint import app.revanced.patches.youtube.utils.playercontrols.fingerprints.FullscreenEngagementSpeedEduVisibleParentFingerprint
import app.revanced.patches.youtube.utils.playercontrols.fingerprints.PlayerControlsVisibilityFingerprint import app.revanced.patches.youtube.utils.playercontrols.fingerprints.PlayerControlsVisibilityFingerprint
import app.revanced.patches.youtube.utils.playercontrols.fingerprints.PlayerControlsVisibilityModelFingerprint import app.revanced.patches.youtube.utils.playercontrols.fingerprints.PlayerControlsVisibilityModelFingerprint
import app.revanced.patches.youtube.utils.playercontrols.fingerprints.QuickSeekVisibleFingerprint
import app.revanced.patches.youtube.utils.playercontrols.fingerprints.SeekEDUVisibleFingerprint import app.revanced.patches.youtube.utils.playercontrols.fingerprints.SeekEDUVisibleFingerprint
import app.revanced.patches.youtube.utils.playercontrols.fingerprints.UserScrubbingFingerprint import app.revanced.patches.youtube.utils.playercontrols.fingerprints.UserScrubbingFingerprint
import app.revanced.patches.youtube.utils.resourceid.patch.SharedResourceIdPatch import app.revanced.patches.youtube.utils.resourceid.patch.SharedResourceIdPatch
@ -42,6 +43,9 @@ class PlayerControlsPatch : BytecodePatch(
fun MutableMethod.findReference(targetString: String): Reference { fun MutableMethod.findReference(targetString: String): Reference {
val targetIndex = getStringIndex(targetString) + 2 val targetIndex = getStringIndex(targetString) + 2
val targetOpcode = getInstruction(targetIndex).opcode
if (targetOpcode == Opcode.INVOKE_VIRTUAL) {
val targetRegister = getInstruction<Instruction35c>(targetIndex).registerD val targetRegister = getInstruction<Instruction35c>(targetIndex).registerD
val instructions = implementation!!.instructions val instructions = implementation!!.instructions
@ -51,10 +55,22 @@ class PlayerControlsPatch : BytecodePatch(
if (getInstruction<TwoRegisterInstruction>(index).registerA == targetRegister) if (getInstruction<TwoRegisterInstruction>(index).registerA == targetRegister)
return getInstruction<ReferenceInstruction>(index).reference return getInstruction<ReferenceInstruction>(index).reference
} }
} else if (targetOpcode == Opcode.IGET_BOOLEAN) {
return getInstruction<ReferenceInstruction>(targetIndex).reference
}
throw PatchException("Reference not found: $targetString") throw PatchException("Reference not found: $targetString")
} }
PlayerControlsVisibilityModelFingerprint.result?.classDef?.let { classDef -> PlayerControlsVisibilityModelFingerprint.result?.classDef?.let { classDef ->
quickSeekVisibleMutableMethod =
QuickSeekVisibleFingerprint.also {
it.resolve(
context,
classDef
)
}.result?.mutableMethod ?: throw QuickSeekVisibleFingerprint.exception
seekEDUVisibleMutableMethod = seekEDUVisibleMutableMethod =
SeekEDUVisibleFingerprint.also { SeekEDUVisibleFingerprint.also {
it.resolve( it.resolve(
@ -115,6 +131,7 @@ class PlayerControlsPatch : BytecodePatch(
lateinit var inflateResult: MethodFingerprintResult lateinit var inflateResult: MethodFingerprintResult
lateinit var playerControlsVisibilityMutableMethod: MutableMethod lateinit var playerControlsVisibilityMutableMethod: MutableMethod
lateinit var quickSeekVisibleMutableMethod: MutableMethod
lateinit var seekEDUVisibleMutableMethod: MutableMethod lateinit var seekEDUVisibleMutableMethod: MutableMethod
lateinit var userScrubbingMutableMethod: MutableMethod lateinit var userScrubbingMutableMethod: MutableMethod
@ -171,6 +188,10 @@ class PlayerControlsPatch : BytecodePatch(
descriptor, descriptor,
"changeVisibility" "changeVisibility"
) )
quickSeekVisibleMutableMethod.injectVisibilityCall(
descriptor,
"changeVisibilityNegatedImmediate"
)
seekEDUVisibleMutableMethod.injectVisibilityCall( seekEDUVisibleMutableMethod.injectVisibilityCall(
descriptor, descriptor,
"changeVisibilityNegatedImmediate" "changeVisibilityNegatedImmediate"