From 294b2dce2ec9a054e3acb9051ad6e333cbc018cd Mon Sep 17 00:00:00 2001
From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com>
Date: Sun, 13 Jul 2025 10:15:16 +0400
Subject: [PATCH] fix(YouTube - Disable double tap actions): Remove old
incompatible targets
---
...java => DisableDoubleTapActionsPatch.java} | 2 +-
patches/api/patches.api | 1 +
.../DisableChapterSkipDoubleTapPatch.kt | 35 +++++++++++++++----
.../interaction/doubletap/Fingerprints.kt | 19 +++-------
.../resources/addresources/values/strings.xml | 2 +-
5 files changed, 36 insertions(+), 23 deletions(-)
rename extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/{DisableChapterSkipDoubleTapPatch.java => DisableDoubleTapActionsPatch.java} (88%)
diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/DisableChapterSkipDoubleTapPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/DisableDoubleTapActionsPatch.java
similarity index 88%
rename from extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/DisableChapterSkipDoubleTapPatch.java
rename to extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/DisableDoubleTapActionsPatch.java
index 13a2c2f6c..6caa392aa 100644
--- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/DisableChapterSkipDoubleTapPatch.java
+++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/DisableDoubleTapActionsPatch.java
@@ -3,7 +3,7 @@ package app.revanced.extension.youtube.patches;
import app.revanced.extension.youtube.settings.Settings;
@SuppressWarnings("unused")
-public final class DisableChapterSkipDoubleTapPatch {
+public final class DisableDoubleTapActionsPatch {
/**
* Injection point.
diff --git a/patches/api/patches.api b/patches/api/patches.api
index c9f49557f..0e416b34d 100644
--- a/patches/api/patches.api
+++ b/patches/api/patches.api
@@ -1238,6 +1238,7 @@ public final class app/revanced/patches/youtube/interaction/dialog/RemoveViewerD
public final class app/revanced/patches/youtube/interaction/doubletap/DisableChapterSkipDoubleTapPatchKt {
public static final fun getDisableChapterSkipDoubleTapPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
+ public static final fun getDisableDoubleTapActionsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/interaction/downloads/DownloadsPatchKt {
diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/doubletap/DisableChapterSkipDoubleTapPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/doubletap/DisableChapterSkipDoubleTapPatch.kt
index 95d30ed5d..9672ef9a2 100644
--- a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/doubletap/DisableChapterSkipDoubleTapPatch.kt
+++ b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/doubletap/DisableChapterSkipDoubleTapPatch.kt
@@ -1,6 +1,7 @@
package app.revanced.patches.youtube.interaction.doubletap
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
+import app.revanced.patcher.fingerprint
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.all.misc.resources.addResources
import app.revanced.patches.all.misc.resources.addResourcesPatch
@@ -8,12 +9,14 @@ import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
import app.revanced.patches.youtube.misc.settings.settingsPatch
+import com.android.tools.smali.dexlib2.AccessFlags
+import com.android.tools.smali.dexlib2.Opcode
private const val EXTENSION_CLASS_DESCRIPTOR =
- "Lapp/revanced/extension/youtube/patches/DisableChapterSkipDoubleTapPatch;"
+ "Lapp/revanced/extension/youtube/patches/DisableDoubleTapActionsPatch;"
@Suppress("unused")
-val disableChapterSkipDoubleTapPatch = bytecodePatch(
+val disableDoubleTapActionsPatch = bytecodePatch(
name = "Disable double tap actions",
description = "Adds an option to disable player double tap gestures.",
) {
@@ -25,9 +28,6 @@ val disableChapterSkipDoubleTapPatch = bytecodePatch(
compatibleWith(
"com.google.android.youtube"(
- "19.34.42",
- "19.43.41",
- "19.47.53",
"20.07.39",
"20.12.46",
"20.13.41",
@@ -35,12 +35,28 @@ val disableChapterSkipDoubleTapPatch = bytecodePatch(
)
execute {
- addResources("youtube", "interaction.doubletap.disableChapterSkipDoubleTapPatch")
+ addResources("youtube", "interaction.doubletap.disableDoubleTapActionsPatch")
PreferenceScreen.PLAYER.addPreferences(
SwitchPreference("revanced_disable_chapter_skip_double_tap"),
)
+ val doubleTapInfoGetSeekSourceFingerprint = fingerprint {
+ accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
+ parameters("Z")
+ returns(seekTypeEnumFingerprint.originalClassDef.type)
+ opcodes(
+ Opcode.IF_EQZ,
+ Opcode.SGET_OBJECT,
+ Opcode.RETURN_OBJECT,
+ Opcode.SGET_OBJECT,
+ Opcode.RETURN_OBJECT,
+ )
+ custom { _, classDef ->
+ classDef.fields.count() == 4
+ }
+ }
+
// Force isChapterSeek flag to false.
doubleTapInfoGetSeekSourceFingerprint.method.addInstructions(
0,
@@ -60,4 +76,9 @@ val disableChapterSkipDoubleTapPatch = bytecodePatch(
"""
)
}
-}
\ No newline at end of file
+}
+
+@Deprecated("Patch was renamed", ReplaceWith("disableDoubleTapActionsPatch"))
+val disableChapterSkipDoubleTapPatch = bytecodePatch {
+ dependsOn(disableDoubleTapActionsPatch)
+}
diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/doubletap/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/doubletap/Fingerprints.kt
index 0e16e0b5c..4524a6853 100644
--- a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/doubletap/Fingerprints.kt
+++ b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/doubletap/Fingerprints.kt
@@ -2,22 +2,13 @@ package app.revanced.patches.youtube.interaction.doubletap
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
-import com.android.tools.smali.dexlib2.Opcode
-internal val doubleTapInfoGetSeekSourceFingerprint = fingerprint {
- accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
- parameters("Z")
- returns("L") // Enum SeekSource, but name obfuscated.
- opcodes(
- Opcode.IF_EQZ,
- Opcode.SGET_OBJECT,
- Opcode.RETURN_OBJECT,
- Opcode.SGET_OBJECT,
- Opcode.RETURN_OBJECT,
+internal val seekTypeEnumFingerprint = fingerprint {
+ accessFlags(AccessFlags.STATIC, AccessFlags.CONSTRUCTOR)
+ strings(
+ "SEEK_SOURCE_SEEK_TO_NEXT_CHAPTER",
+ "SEEK_SOURCE_SEEK_TO_PREVIOUS_CHAPTER"
)
- custom { _, classDef ->
- classDef.fields.count() == 4
- }
}
internal val doubleTapInfoCtorFingerprint = fingerprint {
diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml
index f2e0a1ff3..cd4dbeb10 100644
--- a/patches/src/main/resources/addresources/values/strings.xml
+++ b/patches/src/main/resources/addresources/values/strings.xml
@@ -516,7 +516,7 @@ This feature is only available for older devices"
Dialog will be shown
This does not bypass the age restriction. It just accepts it automatically.
-
+
Disable double tap chapter skip
Double tap can never trigger a skip to the next/previous chapter
Double tap can occasionally trigger a skip to the next/previous chapter