From a28c05ab6a8118b92a7bd2ca534e944c8e35f19d Mon Sep 17 00:00:00 2001 From: inotia00 <108592928+inotia00@users.noreply.github.com> Date: Wed, 18 Oct 2023 10:25:20 +0900 Subject: [PATCH] fix(YouTube/Enable minimized playback): play button not available after playing Shorts --- .../MinimizedPlaybackPatch.kt | 22 ++++++++++++++++++- .../fingerprints/PiPControllerFingerprint.kt | 18 +++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/PiPControllerFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/MinimizedPlaybackPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/MinimizedPlaybackPatch.kt index c367bcd80..a08061301 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/MinimizedPlaybackPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/MinimizedPlaybackPatch.kt @@ -4,6 +4,7 @@ import app.revanced.extensions.exception import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.extensions.InstructionExtensions.addInstruction import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.annotation.CompatiblePackage import app.revanced.patcher.patch.annotation.Patch @@ -11,10 +12,12 @@ import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.youtube.misc.minimizedplayback.fingerprints.KidsMinimizedPlaybackPolicyControllerFingerprint import app.revanced.patches.youtube.misc.minimizedplayback.fingerprints.MinimizedPlaybackManagerFingerprint import app.revanced.patches.youtube.misc.minimizedplayback.fingerprints.MinimizedPlaybackSettingsFingerprint +import app.revanced.patches.youtube.misc.minimizedplayback.fingerprints.PiPControllerFingerprint import app.revanced.patches.youtube.utils.integrations.IntegrationsPatch import app.revanced.patches.youtube.utils.playertype.PlayerTypeHookPatch import app.revanced.util.integrations.Constants.MISC_PATH import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Patch( @@ -49,7 +52,8 @@ object MinimizedPlaybackPatch : BytecodePatch( setOf( KidsMinimizedPlaybackPolicyControllerFingerprint, MinimizedPlaybackManagerFingerprint, - MinimizedPlaybackSettingsFingerprint + MinimizedPlaybackSettingsFingerprint, + PiPControllerFingerprint ) ) { override fun execute(context: BytecodeContext) { @@ -95,6 +99,22 @@ object MinimizedPlaybackPatch : BytecodePatch( ) } } ?: throw MinimizedPlaybackSettingsFingerprint.exception + + PiPControllerFingerprint.result?.let { + val targetMethod = context + .toMethodWalker(it.method) + .nextMethod(it.scanResult.patternScanResult!!.endIndex, true) + .getMethod() as MutableMethod + + targetMethod.apply { + val targetRegister = getInstruction(0).registerA + + addInstruction( + 1, + "const/4 v$targetRegister, 0x1" + ) + } + } ?: throw PiPControllerFingerprint.exception } private const val INTEGRATIONS_METHOD_REFERENCE = diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/PiPControllerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/PiPControllerFingerprint.kt new file mode 100644 index 000000000..4f0aca69d --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/PiPControllerFingerprint.kt @@ -0,0 +1,18 @@ +package app.revanced.patches.youtube.misc.minimizedplayback.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import app.revanced.util.bytecode.isNarrowLiteralExists +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode + +object PiPControllerFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = emptyList(), + opcodes = listOf( + Opcode.IF_NEZ, + Opcode.INVOKE_DIRECT + ), + customFingerprint = { methodDef, _ -> methodDef.isNarrowLiteralExists(151635310) } +) \ No newline at end of file