From e18568df73feb1b4705f34419ed73ffe8758387e Mon Sep 17 00:00:00 2001 From: inotia00 <108592928+inotia00@users.noreply.github.com> Date: Tue, 7 Nov 2023 21:26:23 +0900 Subject: [PATCH] fix(YouTube/Swipe controls): swipe gesture working even after after using `Lock screen` feature --- .../swipe/controls/SwipeControlsPatch.kt | 2 + .../lockmodestate/LockModeStateHookPatch.kt | 37 +++++++++++++++++++ .../fingerprint/LockModeStateFingerprint.kt | 15 ++++++++ 3 files changed, 54 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/utils/lockmodestate/LockModeStateHookPatch.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/utils/lockmodestate/fingerprint/LockModeStateFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/SwipeControlsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/SwipeControlsPatch.kt index 77bf589e5..e82500651 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/SwipeControlsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/swipe/controls/SwipeControlsPatch.kt @@ -14,6 +14,7 @@ import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.youtube.swipe.controls.fingerprints.HDRBrightnessFingerprint import app.revanced.patches.youtube.swipe.controls.fingerprints.SwipeControlsHostActivityFingerprint import app.revanced.patches.youtube.swipe.controls.fingerprints.WatchWhileActivityFingerprint +import app.revanced.patches.youtube.utils.lockmodestate.LockModeStateHookPatch import app.revanced.patches.youtube.utils.playertype.PlayerTypeHookPatch import app.revanced.patches.youtube.utils.settings.SettingsPatch import app.revanced.patches.youtube.utils.settings.SettingsPatch.contexts @@ -27,6 +28,7 @@ import com.android.tools.smali.dexlib2.immutable.ImmutableMethod name = "Swipe controls", description = "Adds volume and brightness swipe controls.", dependencies = [ + LockModeStateHookPatch::class, PlayerTypeHookPatch::class, SettingsPatch::class ], diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/lockmodestate/LockModeStateHookPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/lockmodestate/LockModeStateHookPatch.kt new file mode 100644 index 000000000..dfccbf927 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/lockmodestate/LockModeStateHookPatch.kt @@ -0,0 +1,37 @@ +package app.revanced.patches.youtube.utils.lockmodestate + +import app.revanced.extensions.exception +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.extensions.InstructionExtensions.removeInstruction +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patches.youtube.utils.lockmodestate.fingerprint.LockModeStateFingerprint +import app.revanced.util.integrations.Constants.UTILS_PATH +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction + +object LockModeStateHookPatch : BytecodePatch( + setOf(LockModeStateFingerprint) +) { + override fun execute(context: BytecodeContext) { + + LockModeStateFingerprint.result?.let { + it.mutableMethod.apply { + val insertIndex = it.scanResult.patternScanResult!!.endIndex + val insertRegister = getInstruction(insertIndex).registerA + + addInstructions( + insertIndex + 1, """ + invoke-static {v$insertRegister}, $INTEGRATIONS_CLASS_DESCRIPTOR->setLockModeState(Ljava/lang/Enum;)V + return-object v$insertRegister + """ + ) + removeInstruction(insertIndex) + } + } ?: throw LockModeStateFingerprint.exception + + } + + private const val INTEGRATIONS_CLASS_DESCRIPTOR = + "$UTILS_PATH/LockModeStateHookPatch;" +} diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/lockmodestate/fingerprint/LockModeStateFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/lockmodestate/fingerprint/LockModeStateFingerprint.kt new file mode 100644 index 000000000..d9f5aa4a9 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/lockmodestate/fingerprint/LockModeStateFingerprint.kt @@ -0,0 +1,15 @@ +package app.revanced.patches.youtube.utils.lockmodestate.fingerprint + +import app.revanced.patcher.fingerprint.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode + +object LockModeStateFingerprint : MethodFingerprint( + returnType = "L", + accessFlags = AccessFlags.PUBLIC.value, + parameters = emptyList(), + opcodes = listOf(Opcode.RETURN_OBJECT), + customFingerprint = { methodDef, _ -> + methodDef.name == "getLockModeStateEnum" + } +) \ No newline at end of file