From f90b9a239750e2878f68ced61da632377682b09f Mon Sep 17 00:00:00 2001 From: inotia00 <108592928+inotia00@users.noreply.github.com> Date: Thu, 2 May 2024 03:45:58 +0900 Subject: [PATCH] feat(YouTube/Player components): add `Skip autoplay countdown` settings --- .../components/PlayerComponentsPatch.kt | 21 +++++++++++++++++++ .../TouchAreaOnClickListenerFingerprint.kt | 12 +++++++++++ .../utils/resourceid/SharedResourceIdPatch.kt | 2 ++ .../youtube/settings/host/values/strings.xml | 3 +++ .../youtube/settings/xml/revanced_prefs.xml | 3 ++- 5 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/TouchAreaOnClickListenerFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt index 5d825b596..edff0729d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt @@ -24,6 +24,7 @@ import app.revanced.patches.youtube.player.components.fingerprints.RestoreSlideT import app.revanced.patches.youtube.player.components.fingerprints.SeekEduContainerFingerprint import app.revanced.patches.youtube.player.components.fingerprints.SpeedOverlayFingerprint import app.revanced.patches.youtube.player.components.fingerprints.SuggestedActionsFingerprint +import app.revanced.patches.youtube.player.components.fingerprints.TouchAreaOnClickListenerFingerprint import app.revanced.patches.youtube.player.components.fingerprints.WatermarkFingerprint import app.revanced.patches.youtube.player.components.fingerprints.WatermarkParentFingerprint import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE @@ -77,6 +78,7 @@ object PlayerComponentsPatch : BaseBytecodePatch( SeekEduContainerFingerprint, SpeedOverlayFingerprint, SuggestedActionsFingerprint, + TouchAreaOnClickListenerFingerprint, WatermarkParentFingerprint, YouTubeControlsOverlayFingerprint, ) @@ -323,6 +325,25 @@ object PlayerComponentsPatch : BaseBytecodePatch( // endregion + // region patch for skip autoplay countdown + + // This patch works fine when the [SuggestedVideoEndScreenPatch] patch is included. + TouchAreaOnClickListenerFingerprint.resultOrThrow().let { + it.mutableClass.methods.find { method -> + method.parameters == listOf("Landroid/view/View${'$'}OnClickListener;") + }?.apply { + val setOnClickListenerIndex = getTargetIndexWithMethodReferenceName("setOnClickListener") + val setOnClickListenerRegister = getInstruction(setOnClickListenerIndex).registerC + + addInstruction( + setOnClickListenerIndex + 1, + "invoke-static {v$setOnClickListenerRegister}, $PLAYER_CLASS_DESCRIPTOR->skipAutoPlayCountdown(Landroid/view/View;)V" + ) + } ?: throw PatchException("Failed to find setOnClickListener method") + } + + // endregion + LithoFilterPatch.addFilter(PLAYER_COMPONENTS_FILTER_CLASS_DESCRIPTOR) /** diff --git a/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/TouchAreaOnClickListenerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/TouchAreaOnClickListenerFingerprint.kt new file mode 100644 index 000000000..e202e8a00 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/player/components/fingerprints/TouchAreaOnClickListenerFingerprint.kt @@ -0,0 +1,12 @@ +package app.revanced.patches.youtube.player.components.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.TouchArea +import app.revanced.util.fingerprint.LiteralValueFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +internal object TouchAreaOnClickListenerFingerprint : LiteralValueFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, + literalSupplier = { TouchArea } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt index 1b93ab185..1682896b3 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/resourceid/SharedResourceIdPatch.kt @@ -91,6 +91,7 @@ object SharedResourceIdPatch : ResourcePatch() { var TitleAnchor = -1L var ToolTipContentView = -1L var TotalTime = -1L + var TouchArea = -1L var VideoQualityBottomSheet = -1L var VoiceSearch = -1L var YouTubeControlsOverlaySubtitleButton = -1L @@ -178,6 +179,7 @@ object SharedResourceIdPatch : ResourcePatch() { TitleAnchor = getId(ID, "title_anchor") ToolTipContentView = getId(LAYOUT, "tooltip_content_view") TotalTime = getId(STRING, "total_time") + TouchArea = getId(ID, "touch_area") VideoQualityBottomSheet = getId(LAYOUT, "video_quality_bottom_sheet_list_fragment_title") VoiceSearch = getId(ID, "voice_search") YouTubeControlsOverlaySubtitleButton = getId(LAYOUT, "youtube_controls_overlay_subtitle_button") diff --git a/src/main/resources/youtube/settings/host/values/strings.xml b/src/main/resources/youtube/settings/host/values/strings.xml index 6fe817284..9799b89be 100644 --- a/src/main/resources/youtube/settings/host/values/strings.xml +++ b/src/main/resources/youtube/settings/host/values/strings.xml @@ -487,6 +487,9 @@ Instead, use the 'Settings → Autoplay → Autoplay next video' setting."Hide timed reactions Timed reactions are hidden. Timed reactions are shown. + Skip autoplay countdown + If autoplay is turned on, next video will play without a countdown. + If autoplay is turned on, next video will play after the countdown ends. Action buttons diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index 7efa62a9b..e8a600b03 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -389,7 +389,8 @@ - SETTINGS: PLAYER_COMPONENTS --> + + SETTINGS: PLAYER_COMPONENTS -->