From 806d6c799fb67c0fb630ae954ef615ff01597b1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aaron=20Mompi=C3=A9?= Date: Sat, 14 Mar 2026 13:52:12 +0100 Subject: [PATCH] feat(Instagram): Add `Disable Reels auto-scroll` patch (#6736) Co-authored-by: oSumAtrIX --- patches/api/patches.api | 7 +++++- .../autoscroll/DisableReelsAutoScrollPatch.kt | 22 +++++++++++++++++ .../reels/autoscroll/Fingerprints.kt | 24 +++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 patches/src/main/kotlin/app/revanced/patches/instagram/reels/autoscroll/DisableReelsAutoScrollPatch.kt create mode 100644 patches/src/main/kotlin/app/revanced/patches/instagram/reels/autoscroll/Fingerprints.kt diff --git a/patches/api/patches.api b/patches/api/patches.api index bf62f55d8..be251e84a 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -357,6 +357,10 @@ public final class app/revanced/patches/instagram/reels/DisableReelsScrollingPat public static final fun getDisableReelsScrollingPatch ()Lapp/revanced/patcher/patch/Patch; } +public final class app/revanced/patches/instagram/reels/autoscroll/DisableReelsAutoScrollPatchKt { + public static final fun getDisableReelsAutoScrollPatch ()Lapp/revanced/patcher/patch/Patch; +} + public final class app/revanced/patches/instagram/story/flipping/DisableStoryAutoFlippingPatchKt { public static final fun getDisableStoryAutoFlippingPatch ()Lapp/revanced/patcher/patch/Patch; } @@ -888,6 +892,7 @@ public final class app/revanced/patches/shared/misc/gms/GmsCoreSupportPatchKt { public static synthetic fun gmsCoreSupportPatch$default (Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Ljava/util/Set;Lkotlin/Pair;Lapp/revanced/patcher/patch/Patch;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/patch/Patch; public static final fun gmsCoreSupportResourcePatch (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patcher/patch/Option;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lapp/revanced/patcher/patch/Patch; public static synthetic fun gmsCoreSupportResourcePatch$default (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lapp/revanced/patcher/patch/Option;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/patcher/patch/Patch; + public static final fun prefixOrReplace (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; } public final class app/revanced/patches/shared/misc/hex/HexPatchBuilder : java/util/Set, kotlin/jvm/internal/markers/KMappedMarker { @@ -1867,7 +1872,7 @@ public final class app/revanced/patches/youtube/misc/settings/PreferenceScreen : public final fun getADS ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen; public final fun getALTERNATIVE_THUMBNAILS ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen; public final fun getFEED ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen; - public final fun getGENERAL_LAYOUT ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen; + public final fun getGENERAL ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen; public final fun getMISC ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen; public final fun getPLAYER ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen; public final fun getRETURN_YOUTUBE_DISLIKE ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen; diff --git a/patches/src/main/kotlin/app/revanced/patches/instagram/reels/autoscroll/DisableReelsAutoScrollPatch.kt b/patches/src/main/kotlin/app/revanced/patches/instagram/reels/autoscroll/DisableReelsAutoScrollPatch.kt new file mode 100644 index 000000000..596556d23 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/instagram/reels/autoscroll/DisableReelsAutoScrollPatch.kt @@ -0,0 +1,22 @@ +package app.revanced.patches.instagram.reels.autoscroll + +import app.revanced.patcher.patch.bytecodePatch +import app.revanced.util.returnEarly + +@Suppress("unused") +val disableReelsAutoScrollPatch = bytecodePatch( + name = "Disable Reels auto-scroll", + description = "Removes the auto-scroll toggle and prevents Reels from scrolling automatically.", + use = false, +) { + compatibleWith("com.instagram.android") + + apply { + // Prevent the auto-scroll feature from being initialized. + // When this returns false, ClipsViewerFragment skips creating the auto-scroller. + clipsAutoScrollFeatureCheckMethod.returnEarly() + + // Make the toggle button handler a no-op so tapping it does nothing. + clipsAutoScrollToggleMethod.returnEarly() + } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/instagram/reels/autoscroll/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/instagram/reels/autoscroll/Fingerprints.kt new file mode 100644 index 000000000..a3c75efe9 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/instagram/reels/autoscroll/Fingerprints.kt @@ -0,0 +1,24 @@ +package app.revanced.patches.instagram.reels.autoscroll + +import app.revanced.patcher.gettingFirstMethodDeclaratively +import app.revanced.patcher.parameterTypes +import app.revanced.patcher.patch.BytecodePatchContext +import app.revanced.patcher.returnType + +/** + * Matches the feature availability gate that determines + * whether auto-scroll should be available for Reels. + */ +internal val BytecodePatchContext.clipsAutoScrollFeatureCheckMethod by gettingFirstMethodDeclaratively("auto_scroll") { + returnType("Z") + parameterTypes("Lcom/instagram/common/session/UserSession;", "Z") +} + +/** + * Matches the toggle handler called when the user taps + * the auto-scroll button. Contains analytics logging strings. + */ +internal val BytecodePatchContext.clipsAutoScrollToggleMethod by gettingFirstMethodDeclaratively( + "auto_scroll", + "instagram_clips_viewer_autoplay_tap", +)