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