From 7f52ec2ceac48380b4ef18524c021dc0f87e4c2b Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Wed, 11 Mar 2026 10:44:18 +0100 Subject: [PATCH] feat(YouTube): Add experimental support for `21.20.493` Co-Authored-By: LisoUseInAIKyrios <118716522+lisouseinaikyrios@users.noreply.github.com> --- .../youtube/patches/ShortsAutoplayPatch.java | 15 +++++++++-- .../youtube/patches/VersionCheckPatch.java | 2 ++ .../shortsautoplay/ShortsAutoplayPatch.kt | 25 ++++++++++++++----- .../misc/playservice/VersionCheckPatch.kt | 3 +++ 4 files changed, 37 insertions(+), 8 deletions(-) diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ShortsAutoplayPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ShortsAutoplayPatch.java index 905ca6dfa0..b73bff3b88 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ShortsAutoplayPatch.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ShortsAutoplayPatch.java @@ -1,5 +1,7 @@ package app.revanced.extension.youtube.patches; +import static app.revanced.extension.youtube.patches.VersionCheckPatch.IS_21_10_OR_GREATER; + import android.app.Activity; import java.lang.ref.WeakReference; @@ -24,7 +26,12 @@ public class ShortsAutoplayPatch { /** * Pause playback after 1 play. */ - END_SCREEN; + END_SCREEN, + /** + * Play once, then advanced to the next Short. + * Only found in 21.10+ + */ + AUTO_ADVANCE; static void setYTEnumValue(Enum ytBehavior) { for (ShortsLoopBehavior rvBehavior : values()) { @@ -93,8 +100,12 @@ public class ShortsAutoplayPatch { autoplay = Settings.SHORTS_AUTOPLAY.get(); } - Enum overrideBehavior = (autoplay + ShortsLoopBehavior autoPlayBehavior = IS_21_10_OR_GREATER ? ShortsLoopBehavior.SINGLE_PLAY + : ShortsLoopBehavior.AUTO_ADVANCE; + + Enum overrideBehavior = (autoplay + ? autoPlayBehavior : ShortsLoopBehavior.REPEAT).ytEnumValue; if (overrideBehavior != null) { diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/VersionCheckPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/VersionCheckPatch.java index 77d85737b5..9c2986a2f1 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/VersionCheckPatch.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/VersionCheckPatch.java @@ -27,4 +27,6 @@ public class VersionCheckPatch { public static final boolean IS_20_31_OR_GREATER = isVersionOrGreater("20.31.00"); public static final boolean IS_20_37_OR_GREATER = isVersionOrGreater("20.37.00"); + + public static final boolean IS_21_10_OR_GREATER = isVersionOrGreater("21.10.00"); } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/shortsautoplay/ShortsAutoplayPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/shortsautoplay/ShortsAutoplayPatch.kt index 395dcc4674..da6d26dd6e 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/shortsautoplay/ShortsAutoplayPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/shortsautoplay/ShortsAutoplayPatch.kt @@ -15,6 +15,8 @@ import app.revanced.patches.shared.misc.settings.preference.SwitchPreference import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch import app.revanced.patches.youtube.misc.playservice.is_19_34_or_greater import app.revanced.patches.youtube.misc.playservice.is_20_09_or_greater +import app.revanced.patcher.method +import app.revanced.patches.youtube.misc.playservice.is_21_10_or_greater import app.revanced.patches.youtube.misc.playservice.versionCheckPatch import app.revanced.patches.youtube.misc.settings.PreferenceScreen import app.revanced.patches.youtube.misc.settings.settingsPatch @@ -99,12 +101,23 @@ val shortsAutoplayPatch = bytecodePatch( reelPlaybackRepeatMethod.apply { // The behavior enums are looked up from an ordinal value to an enum type. - findInstructionIndicesReversedOrThrow { - val reference = getReference() - reference?.definingClass == reelEnumClass && - reference.parameterTypes.firstOrNull() == "I" && - reference.returnType == reelEnumClass - }.forEach { index -> + + val match = if (is_21_10_or_greater) { + method { + returnType == reelEnumClass && + parameterTypes.size == 1 && + parameterTypes[0].startsWith("L") + } + } else { + method { + definingClass == "reelEnumClass" && + returnType == reelEnumClass && + parameterTypes.size == 1 && + parameterTypes[0].startsWith("L") + } + } + + findInstructionIndicesReversedOrThrow { match(0, 0) {} }.forEach { index -> val register = getInstruction(index + 1).registerA addInstructions( diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playservice/VersionCheckPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playservice/VersionCheckPatch.kt index f2e6b41ee3..0903a3a718 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playservice/VersionCheckPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playservice/VersionCheckPatch.kt @@ -127,6 +127,8 @@ var is_21_07_or_greater : Boolean by Delegates.notNull() private set var is_21_08_or_greater : Boolean by Delegates.notNull() private set +var is_21_10_or_greater : Boolean by Delegates.notNull() + private set val versionCheckPatch = resourcePatch( description = "Uses the Play Store service version to find the major/minor version of the YouTube target app.", @@ -184,5 +186,6 @@ val versionCheckPatch = resourcePatch( is_21_06_or_greater = 260705000 <= playStoreServicesVersion is_21_07_or_greater = 260805000 <= playStoreServicesVersion is_21_08_or_greater = 260905000 <= playStoreServicesVersion + is_21_10_or_greater = 261080000 <= playStoreServicesVersion } }