Skip to content

Commit ac9be97

Browse files
authored
feat(YouTube - Hide player components): Hide related video overlay in fullscreen (#4938)
1 parent b89927a commit ac9be97

File tree

6 files changed

+124
-1
lines changed

6 files changed

+124
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package app.revanced.extension.youtube.patches;
2+
3+
import app.revanced.extension.youtube.settings.Settings;
4+
5+
@SuppressWarnings("unused")
6+
public final class HideRelatedVideoOverlayPatch {
7+
/**
8+
* Injection point.
9+
*/
10+
public static boolean hideRelatedVideoOverlay() {
11+
return Settings.HIDE_RELATED_VIDEO_OVERLAY.get();
12+
}
13+
}

extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ public class Settings extends BaseSettings {
139139
public static final BooleanSetting HIDE_EMERGENCY_BOX = new BooleanSetting("revanced_hide_emergency_box", TRUE);
140140
public static final BooleanSetting HIDE_ENDSCREEN_CARDS = new BooleanSetting("revanced_hide_endscreen_cards", FALSE);
141141
public static final BooleanSetting HIDE_END_SCREEN_SUGGESTED_VIDEO = new BooleanSetting("revanced_end_screen_suggested_video", FALSE, true);
142+
public static final BooleanSetting HIDE_RELATED_VIDEO_OVERLAY = new BooleanSetting("revanced_hide_related_video_overlay", FALSE, true);
142143
public static final BooleanSetting HIDE_HIDE_CHANNEL_GUIDELINES = new BooleanSetting("revanced_hide_channel_guidelines", TRUE);
143144
public static final BooleanSetting HIDE_INFO_PANELS = new BooleanSetting("revanced_hide_info_panels", TRUE);
144145
public static final BooleanSetting HIDE_INFO_CARDS = new BooleanSetting("revanced_hide_info_cards", FALSE);
@@ -478,4 +479,3 @@ public class Settings extends BaseSettings {
478479
// endregion
479480
}
480481
}
481-

patches/api/patches.api

+4
Original file line numberDiff line numberDiff line change
@@ -1220,6 +1220,10 @@ public final class app/revanced/patches/youtube/layout/hide/player/flyoutmenupan
12201220
public static final fun getHidePlayerFlyoutMenuPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
12211221
}
12221222

1223+
public final class app/revanced/patches/youtube/layout/hide/relatedvideooverlay/HideRelatedVideoOverlayPatchKt {
1224+
public static final fun getHideRelatedVideoOverlayPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
1225+
}
1226+
12231227
public final class app/revanced/patches/youtube/layout/hide/rollingnumber/DisableRollingNumberAnimationPatchKt {
12241228
public static final fun getDisableRollingNumberAnimationPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
12251229
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package app.revanced.patches.youtube.layout.hide.relatedvideooverlay
2+
3+
import app.revanced.patcher.fingerprint
4+
import app.revanced.util.literal
5+
6+
internal val relatedEndScreenResultsParentFingerprint = fingerprint {
7+
returns("V")
8+
literal{ appRelatedEndScreenResults }
9+
}
10+
11+
internal val relatedEndScreenResultsFingerprint = fingerprint {
12+
returns("V")
13+
parameters(
14+
"I",
15+
"Z",
16+
"I",
17+
)
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package app.revanced.patches.youtube.layout.hide.relatedvideooverlay
2+
3+
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
4+
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
5+
import app.revanced.patcher.patch.bytecodePatch
6+
import app.revanced.patcher.patch.resourcePatch
7+
import app.revanced.patches.all.misc.resources.addResources
8+
import app.revanced.patches.all.misc.resources.addResourcesPatch
9+
import app.revanced.patches.shared.misc.mapping.get
10+
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
11+
import app.revanced.patches.shared.misc.mapping.resourceMappings
12+
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
13+
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
14+
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
15+
import app.revanced.patches.youtube.misc.settings.settingsPatch
16+
import app.revanced.patcher.util.smali.ExternalLabel
17+
18+
internal var appRelatedEndScreenResults = -1L
19+
private set
20+
21+
private val hideRelatedVideoOverlayResourcePatch = resourcePatch {
22+
dependsOn(
23+
resourceMappingPatch,
24+
)
25+
26+
execute {
27+
appRelatedEndScreenResults = resourceMappings[
28+
"layout",
29+
"app_related_endscreen_results",
30+
]
31+
}
32+
}
33+
34+
private const val EXTENSION_CLASS_DESCRIPTOR =
35+
"Lapp/revanced/extension/youtube/patches/HideRelatedVideoOverlayPatch;"
36+
37+
@Suppress("unused")
38+
val hideRelatedVideoOverlayPatch = bytecodePatch(
39+
name = "Hide related video overlay",
40+
description = "Adds an option to hide the related video overlay shown when swiping up in fullscreen.",
41+
) {
42+
dependsOn(
43+
settingsPatch,
44+
sharedExtensionPatch,
45+
addResourcesPatch,
46+
hideRelatedVideoOverlayResourcePatch,
47+
)
48+
49+
compatibleWith(
50+
"com.google.android.youtube"(
51+
"19.16.39",
52+
"19.25.37",
53+
"19.34.42",
54+
"19.43.41",
55+
"19.47.53",
56+
"20.07.39",
57+
"20.12.46",
58+
)
59+
)
60+
61+
execute {
62+
addResources("youtube", "layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch")
63+
64+
PreferenceScreen.PLAYER.addPreferences(
65+
SwitchPreference("revanced_hide_related_video_overlay")
66+
)
67+
68+
relatedEndScreenResultsFingerprint.match(
69+
relatedEndScreenResultsParentFingerprint.originalClassDef
70+
).method.apply {
71+
addInstructionsWithLabels(
72+
0,
73+
"""
74+
invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->hideRelatedVideoOverlay()Z
75+
move-result v0
76+
if-eqz v0, :show
77+
return-void
78+
""",
79+
ExternalLabel("show", getInstruction(0))
80+
)
81+
}
82+
}
83+
}

patches/src/main/resources/addresources/values/strings.xml

+5
Original file line numberDiff line numberDiff line change
@@ -855,6 +855,11 @@ Autoplay can be changed in YouTube settings:
855855
Settings → Playback → Autoplay next video"</string>
856856
<string name="revanced_end_screen_suggested_video_summary_off">End screen suggested video is shown</string>
857857
</patch>
858+
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
859+
<string name="revanced_hide_related_video_overlay_title">Hide related video overlay in fullscreen</string>
860+
<string name="revanced_hide_related_video_overlay_summary_on">Related video overlay is hidden</string>
861+
<string name="revanced_hide_related_video_overlay_summary_off">Related video overlay is shown</string>
862+
</patch>
858863
<patch id="layout.hide.time.hideTimestampPatch">
859864
<string name="revanced_hide_timestamp_title">Hide video timestamp</string>
860865
<string name="revanced_hide_timestamp_summary_on">Timestamp is hidden</string>

0 commit comments

Comments
 (0)