feat(YouTube/Player components): add Disable switch mix playlists setting

This commit is contained in:
inotia00 2024-09-05 17:39:22 +09:00
parent 94f7c5b79a
commit fc832e2459
5 changed files with 25 additions and 4 deletions

View File

@ -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
@ -73,6 +74,7 @@ object PlayerComponentsPatch : BaseBytecodePatch(
SharedResourceIdPatch::class,
SpeedOverlayPatch::class,
SuggestedVideoEndScreenPatch::class,
VideoInformationPatch::class
),
compatiblePackages = COMPATIBLE_PACKAGE,
fingerprints = setOf(
@ -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(

View File

@ -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;"
)
/**

View File

@ -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
@ -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"
}
}
@ -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
"""
)
@ -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(

View File

@ -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.

View File

@ -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" />