Skip to content

Commit

Permalink
feat(YouTube/Player components): add Disable switch mix playlists s…
Browse files Browse the repository at this point in the history
…etting
  • Loading branch information
inotia00 committed Sep 5, 2024
1 parent 94f7c5b commit fc832e2
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.Scrim
import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.SeekUndoEduOverlayStub
import app.revanced.patches.youtube.utils.resourceid.SharedResourceIdPatch.TapBloomView
import app.revanced.patches.youtube.utils.settings.SettingsPatch
import app.revanced.patches.youtube.video.information.VideoInformationPatch
import app.revanced.util.REGISTER_TEMPLATE_REPLACEMENT
import app.revanced.util.getTargetIndexOrThrow
import app.revanced.util.getTargetIndexReversedOrThrow
Expand Down Expand Up @@ -73,6 +74,7 @@ object PlayerComponentsPatch : BaseBytecodePatch(
SharedResourceIdPatch::class,
SpeedOverlayPatch::class,
SuggestedVideoEndScreenPatch::class,
VideoInformationPatch::class
),
compatiblePackages = COMPATIBLE_PACKAGE,
fingerprints = setOf(
Expand Down Expand Up @@ -172,6 +174,12 @@ object PlayerComponentsPatch : BaseBytecodePatch(

// endregion

// region patch for disable auto switch mix playlists

VideoInformationPatch.hook("$PLAYER_CLASS_DESCRIPTOR->disableAutoSwitchMixPlaylists(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JZ)V")

// endregion

// region patch for hide channel watermark

WatermarkFingerprint.resolve(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,7 @@ object VideoInformationPatch : BytecodePatch(
// Call before any other video id hooks,
// so they can use VideoInformation and check if the video id is for a Short.
PlayerResponseMethodHookPatch += PlayerResponseMethodHookPatch.Hook.PlayerParameterBeforeVideoId(
"$INTEGRATIONS_CLASS_DESCRIPTOR->newPlayerResponseParameter(Ljava/lang/String;Ljava/lang/String;Z)Ljava/lang/String;"
"$INTEGRATIONS_CLASS_DESCRIPTOR->newPlayerResponseParameter(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Ljava/lang/String;"
)

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,14 @@ object PlayerResponseMethodHookPatch :
// Parameter numbers of the patched method.
private var PARAMETER_VIDEO_ID = 1
private var PARAMETER_PLAYER_PARAMETER = 3
private var PARAMETER_PLAYLIST_ID = 4
private var PARAMETER_IS_SHORT_AND_OPENING_OR_PLAYING by Delegates.notNull<Int>()

// Registers used to pass the parameters to integrations.
private var playerResponseMethodCopyRegisters = false
private lateinit var REGISTER_VIDEO_ID: String
private lateinit var REGISTER_PLAYER_PARAMETER: String
private lateinit var REGISTER_PLAYLIST_ID: String
private lateinit var REGISTER_IS_SHORT_AND_OPENING_OR_PLAYING: String

private lateinit var playerResponseMethod: MutableMethod
Expand All @@ -46,10 +48,12 @@ object PlayerResponseMethodHookPatch :
if (playerResponseMethodCopyRegisters) {
REGISTER_VIDEO_ID = "v0"
REGISTER_PLAYER_PARAMETER = "v1"
REGISTER_IS_SHORT_AND_OPENING_OR_PLAYING = "v2"
REGISTER_PLAYLIST_ID = "v2"
REGISTER_IS_SHORT_AND_OPENING_OR_PLAYING = "v3"
} else {
REGISTER_VIDEO_ID = "p$PARAMETER_VIDEO_ID"
REGISTER_PLAYER_PARAMETER = "p$PARAMETER_PLAYER_PARAMETER"
REGISTER_PLAYLIST_ID = "p$PARAMETER_PLAYLIST_ID"
REGISTER_IS_SHORT_AND_OPENING_OR_PLAYING = "p$PARAMETER_IS_SHORT_AND_OPENING_OR_PLAYING"
}
}
Expand All @@ -66,7 +70,7 @@ object PlayerResponseMethodHookPatch :
fun hookPlayerParameter(hook: Hook) {
playerResponseMethod.addInstructions(
0, """
invoke-static {$REGISTER_VIDEO_ID, $REGISTER_PLAYER_PARAMETER, $REGISTER_IS_SHORT_AND_OPENING_OR_PLAYING}, $hook
invoke-static {$REGISTER_VIDEO_ID, $REGISTER_PLAYER_PARAMETER, $REGISTER_PLAYLIST_ID, $REGISTER_IS_SHORT_AND_OPENING_OR_PLAYING}, $hook
move-result-object $REGISTER_PLAYER_PARAMETER
"""
)
Expand All @@ -90,11 +94,12 @@ object PlayerResponseMethodHookPatch :
"""
move-object/from16 $REGISTER_VIDEO_ID, p$PARAMETER_VIDEO_ID
move-object/from16 $REGISTER_PLAYER_PARAMETER, p$PARAMETER_PLAYER_PARAMETER
move-object/from16 $REGISTER_PLAYLIST_ID, p$PARAMETER_PLAYLIST_ID
move/from16 $REGISTER_IS_SHORT_AND_OPENING_OR_PLAYING, p$PARAMETER_IS_SHORT_AND_OPENING_OR_PLAYING
""",
)

numberOfInstructionsAdded += 3
numberOfInstructionsAdded += 4

// Move the modified register back.
addInstruction(
Expand Down
7 changes: 7 additions & 0 deletions src/main/resources/youtube/settings/host/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -543,6 +543,13 @@ Tap and hold to open RVX settings."</string>
<string name="revanced_disable_auto_player_popup_panels_title">Disable player popup panels</string>
<string name="revanced_disable_auto_player_popup_panels_summary_on">Auto player popup panels are disabled.</string>
<string name="revanced_disable_auto_player_popup_panels_summary_off">Auto player popup panels are enabled.</string>
<string name="revanced_disable_auto_switch_mix_playlists_title">Disable switch mix playlists</string>
<string name="revanced_disable_auto_switch_mix_playlists_summary_on">Auto switch mix playlists is disabled.</string>
<string name="revanced_disable_auto_switch_mix_playlists_summary_off">"Auto switch mix playlists is enabled when autoplay is turned on.

Autoplay can be changed in YouTube settings:
Settings → Autoplay → Autoplay next video"</string>
<string name="revanced_disable_auto_switch_mix_playlists_user_dialog_message">Enabling this feature will disable automatic switching to YouTube Mix when playing music while autoplay is turned on.</string>
<string name="revanced_disable_speed_overlay_title">Disable speed overlay</string>
<string name="revanced_disable_speed_overlay_summary">"Disable '2x&gt;&gt;' while holding down.

Expand Down
1 change: 1 addition & 0 deletions src/main/resources/youtube/settings/xml/revanced_prefs.xml
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,7 @@
<!-- SETTINGS: PLAYER_COMPONENTS
<app.revanced.integrations.shared.settings.preference.ResettableEditTextPreference android:hint="100" android:title="@string/revanced_custom_player_overlay_opacity_title" android:key="revanced_custom_player_overlay_opacity" android:summary="@string/revanced_custom_player_overlay_opacity_summary" android:inputType="number" />
<SwitchPreference android:title="@string/revanced_disable_auto_player_popup_panels_title" android:key="revanced_disable_auto_player_popup_panels" android:summaryOn="@string/revanced_disable_auto_player_popup_panels_summary_on" android:summaryOff="@string/revanced_disable_auto_player_popup_panels_summary_off" />
<SwitchPreference android:title="@string/revanced_disable_auto_switch_mix_playlists_title" android:key="revanced_disable_auto_switch_mix_playlists" android:summaryOn="@string/revanced_disable_auto_switch_mix_playlists_summary_on" android:summaryOff="@string/revanced_disable_auto_switch_mix_playlists_summary_off" />
<SwitchPreference android:title="@string/revanced_disable_speed_overlay_title" android:key="revanced_disable_speed_overlay" android:summary="@string/revanced_disable_speed_overlay_summary" />
<app.revanced.integrations.shared.settings.preference.ResettableEditTextPreference android:hint="2.0" android:title="@string/revanced_speed_overlay_value_title" android:key="revanced_speed_overlay_value" android:summary="@string/revanced_speed_overlay_value_summary" android:inputType="numberDecimal" />
<SwitchPreference android:title="@string/revanced_hide_channel_watermark_title" android:key="revanced_hide_channel_watermark" android:summaryOn="@string/revanced_hide_channel_watermark_summary_on" android:summaryOff="@string/revanced_hide_channel_watermark_summary_off" />
Expand Down

0 comments on commit fc832e2

Please sign in to comment.