diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/speed/CustomPlaybackSpeedPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/speed/CustomPlaybackSpeedPatch.java index 767ea7d7c3..e2c2353783 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/speed/CustomPlaybackSpeedPatch.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/speed/CustomPlaybackSpeedPatch.java @@ -60,6 +60,11 @@ public class CustomPlaybackSpeedPatch { */ private static final float PROGRESS_BAR_VALUE_SCALE = 100; + /** + * Disable tap and hold speed, true when TAP_AND_HOLD_SPEED is 0. + */ + private static final boolean DISABLE_TAP_AND_HOLD_SPEED; + /** * Tap and hold speed. */ @@ -96,7 +101,12 @@ public class CustomPlaybackSpeedPatch { speedFormatter.setMaximumFractionDigits(2); final float holdSpeed = Settings.SPEED_TAP_AND_HOLD.get(); - if (holdSpeed > 0 && holdSpeed <= PLAYBACK_SPEED_MAXIMUM) { + DISABLE_TAP_AND_HOLD_SPEED = holdSpeed == 0; + + if (DISABLE_TAP_AND_HOLD_SPEED) { + // A value for handling exceptions, but this is not used. + TAP_AND_HOLD_SPEED = Settings.SPEED_TAP_AND_HOLD.defaultValue; + } else if (holdSpeed > 0 && holdSpeed <= PLAYBACK_SPEED_MAXIMUM) { TAP_AND_HOLD_SPEED = holdSpeed; } else { showInvalidCustomSpeedToast(); @@ -108,6 +118,14 @@ public class CustomPlaybackSpeedPatch { customPlaybackSpeedsMax = customPlaybackSpeeds[customPlaybackSpeeds.length - 1]; } + /** + * Injection point. + * Called before {@link #getTapAndHoldSpeed()} + */ + public static boolean disableTapAndHoldSpeed(boolean original) { + return !DISABLE_TAP_AND_HOLD_SPEED && original; + } + /** * Injection point. */ diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/video/speed/custom/CustomPlaybackSpeedPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/video/speed/custom/CustomPlaybackSpeedPatch.kt index 606c78c458..b048d53f0b 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/video/speed/custom/CustomPlaybackSpeedPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/video/speed/custom/CustomPlaybackSpeedPatch.kt @@ -186,6 +186,18 @@ internal val customPlaybackSpeedPatch = bytecodePatch( move-result v$speedRegister """ ) + + val enabledIndex = it[3].index + val enabledRegister = + getInstruction(enabledIndex).registerA + + addInstructions( + enabledIndex, + """ + invoke-static { v$enabledRegister }, $EXTENSION_CLASS_DESCRIPTOR->disableTapAndHoldSpeed(Z)Z + move-result v$enabledRegister + """ + ) } } } diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml index fd6d1a0a20..48edc4f46c 100644 --- a/patches/src/main/resources/addresources/values/strings.xml +++ b/patches/src/main/resources/addresources/values/strings.xml @@ -1742,7 +1742,9 @@ Enabling this can unlock higher video qualities" Invalid custom playback speeds Auto Custom tap and hold speed - Playback speed between 0-8 + "Playback speed between 0-8 + +Set to 0, to disable tap and hold speed" Remember playback speed changes