mirror of
https://github.com/inotia00/revanced-patches.git
synced 2025-04-30 06:34:37 +02:00
feat(YouTube Music/Player components): add settings Disable miniplayer gesture
, Disable player gesture
https://github.com/inotia00/ReVanced_Extended/issues/2097
This commit is contained in:
parent
327768128d
commit
25287b24c3
@ -29,6 +29,7 @@ import app.revanced.patches.music.player.components.fingerprints.OldEngagementPa
|
|||||||
import app.revanced.patches.music.player.components.fingerprints.OldPlayerBackgroundFingerprint
|
import app.revanced.patches.music.player.components.fingerprints.OldPlayerBackgroundFingerprint
|
||||||
import app.revanced.patches.music.player.components.fingerprints.OldPlayerLayoutFingerprint
|
import app.revanced.patches.music.player.components.fingerprints.OldPlayerLayoutFingerprint
|
||||||
import app.revanced.patches.music.player.components.fingerprints.PlayerPatchConstructorFingerprint
|
import app.revanced.patches.music.player.components.fingerprints.PlayerPatchConstructorFingerprint
|
||||||
|
import app.revanced.patches.music.player.components.fingerprints.PlayerViewPagerConstructorFingerprint
|
||||||
import app.revanced.patches.music.player.components.fingerprints.QuickSeekOverlayFingerprint
|
import app.revanced.patches.music.player.components.fingerprints.QuickSeekOverlayFingerprint
|
||||||
import app.revanced.patches.music.player.components.fingerprints.RemixGenericButtonFingerprint
|
import app.revanced.patches.music.player.components.fingerprints.RemixGenericButtonFingerprint
|
||||||
import app.revanced.patches.music.player.components.fingerprints.RepeatTrackFingerprint
|
import app.revanced.patches.music.player.components.fingerprints.RepeatTrackFingerprint
|
||||||
@ -40,11 +41,14 @@ import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKA
|
|||||||
import app.revanced.patches.music.utils.fingerprints.PendingIntentReceiverFingerprint
|
import app.revanced.patches.music.utils.fingerprints.PendingIntentReceiverFingerprint
|
||||||
import app.revanced.patches.music.utils.integrations.Constants.COMPONENTS_PATH
|
import app.revanced.patches.music.utils.integrations.Constants.COMPONENTS_PATH
|
||||||
import app.revanced.patches.music.utils.integrations.Constants.PLAYER_CLASS_DESCRIPTOR
|
import app.revanced.patches.music.utils.integrations.Constants.PLAYER_CLASS_DESCRIPTOR
|
||||||
|
import app.revanced.patches.music.utils.mainactivity.MainActivityResolvePatch
|
||||||
import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch
|
import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch
|
||||||
import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.AudioVideoSwitchToggle
|
import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.AudioVideoSwitchToggle
|
||||||
import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.ColorGrey
|
import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.ColorGrey
|
||||||
import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.DarkBackground
|
import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.DarkBackground
|
||||||
import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.MiniPlayerPlayPauseReplayButton
|
import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.MiniPlayerPlayPauseReplayButton
|
||||||
|
import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.MiniPlayerViewPager
|
||||||
|
import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.PlayerViewPager
|
||||||
import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.TapBloomView
|
import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.TapBloomView
|
||||||
import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.TopEnd
|
import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.TopEnd
|
||||||
import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.TopStart
|
import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.TopStart
|
||||||
@ -55,11 +59,13 @@ import app.revanced.patches.shared.litho.LithoFilterPatch
|
|||||||
import app.revanced.util.REGISTER_TEMPLATE_REPLACEMENT
|
import app.revanced.util.REGISTER_TEMPLATE_REPLACEMENT
|
||||||
import app.revanced.util.getReference
|
import app.revanced.util.getReference
|
||||||
import app.revanced.util.getStringInstructionIndex
|
import app.revanced.util.getStringInstructionIndex
|
||||||
|
import app.revanced.util.getTargetIndex
|
||||||
import app.revanced.util.getTargetIndexOrThrow
|
import app.revanced.util.getTargetIndexOrThrow
|
||||||
import app.revanced.util.getTargetIndexReversedOrThrow
|
import app.revanced.util.getTargetIndexReversedOrThrow
|
||||||
import app.revanced.util.getTargetIndexWithFieldReferenceTypeOrThrow
|
import app.revanced.util.getTargetIndexWithFieldReferenceTypeOrThrow
|
||||||
import app.revanced.util.getWalkerMethod
|
import app.revanced.util.getWalkerMethod
|
||||||
import app.revanced.util.getWideLiteralInstructionIndex
|
import app.revanced.util.getWideLiteralInstructionIndex
|
||||||
|
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||||
import app.revanced.util.literalInstructionBooleanHook
|
import app.revanced.util.literalInstructionBooleanHook
|
||||||
import app.revanced.util.literalInstructionViewHook
|
import app.revanced.util.literalInstructionViewHook
|
||||||
import app.revanced.util.patch.BaseBytecodePatch
|
import app.revanced.util.patch.BaseBytecodePatch
|
||||||
@ -88,6 +94,7 @@ object PlayerComponentsPatch : BaseBytecodePatch(
|
|||||||
description = "Adds options to hide or change components related to the player.",
|
description = "Adds options to hide or change components related to the player.",
|
||||||
dependencies = setOf(
|
dependencies = setOf(
|
||||||
LithoFilterPatch::class,
|
LithoFilterPatch::class,
|
||||||
|
MainActivityResolvePatch::class,
|
||||||
PlayerComponentsResourcePatch::class,
|
PlayerComponentsResourcePatch::class,
|
||||||
SettingsPatch::class,
|
SettingsPatch::class,
|
||||||
SharedResourceIdPatch::class,
|
SharedResourceIdPatch::class,
|
||||||
@ -111,6 +118,7 @@ object PlayerComponentsPatch : BaseBytecodePatch(
|
|||||||
OldPlayerLayoutFingerprint,
|
OldPlayerLayoutFingerprint,
|
||||||
PendingIntentReceiverFingerprint,
|
PendingIntentReceiverFingerprint,
|
||||||
PlayerPatchConstructorFingerprint,
|
PlayerPatchConstructorFingerprint,
|
||||||
|
PlayerViewPagerConstructorFingerprint,
|
||||||
QuickSeekOverlayFingerprint,
|
QuickSeekOverlayFingerprint,
|
||||||
RemixGenericButtonFingerprint,
|
RemixGenericButtonFingerprint,
|
||||||
RepeatTrackFingerprint,
|
RepeatTrackFingerprint,
|
||||||
@ -123,6 +131,54 @@ object PlayerComponentsPatch : BaseBytecodePatch(
|
|||||||
|
|
||||||
override fun execute(context: BytecodeContext) {
|
override fun execute(context: BytecodeContext) {
|
||||||
|
|
||||||
|
// region patch for disable gesture in player
|
||||||
|
|
||||||
|
val playerViewPagerConstructorMethod =
|
||||||
|
PlayerViewPagerConstructorFingerprint.resultOrThrow().mutableMethod
|
||||||
|
val mainActivityOnStartMethod =
|
||||||
|
MainActivityResolvePatch.getMethod("onStart")
|
||||||
|
|
||||||
|
mapOf(
|
||||||
|
MiniPlayerViewPager to "disableMiniPlayerGesture",
|
||||||
|
PlayerViewPager to "disablePlayerGesture"
|
||||||
|
).forEach { (literal, methodName) ->
|
||||||
|
val viewPagerReference = playerViewPagerConstructorMethod.let {
|
||||||
|
val constIndex = it.getWideLiteralInstructionIndex(literal)
|
||||||
|
val targetIndex = it.getTargetIndexOrThrow(constIndex, Opcode.IPUT_OBJECT)
|
||||||
|
|
||||||
|
it.getInstruction<ReferenceInstruction>(targetIndex).reference.toString()
|
||||||
|
}
|
||||||
|
mainActivityOnStartMethod.apply {
|
||||||
|
val insertIndex = indexOfFirstInstructionOrThrow {
|
||||||
|
opcode == Opcode.IGET_OBJECT
|
||||||
|
&& getReference<FieldReference>()?.toString() == viewPagerReference
|
||||||
|
}
|
||||||
|
val insertRegister = getInstruction<TwoRegisterInstruction>(insertIndex).registerA
|
||||||
|
val jumpIndex = getTargetIndex(insertIndex, Opcode.INVOKE_VIRTUAL) + 1
|
||||||
|
|
||||||
|
addInstructionsWithLabels(
|
||||||
|
insertIndex, """
|
||||||
|
invoke-static {}, $PLAYER_CLASS_DESCRIPTOR->$methodName()Z
|
||||||
|
move-result v$insertRegister
|
||||||
|
if-nez v$insertRegister, :disable
|
||||||
|
""", ExternalLabel("disable", getInstruction(jumpIndex))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SettingsPatch.addSwitchPreference(
|
||||||
|
CategoryType.PLAYER,
|
||||||
|
"revanced_disable_mini_player_gesture",
|
||||||
|
"false"
|
||||||
|
)
|
||||||
|
SettingsPatch.addSwitchPreference(
|
||||||
|
CategoryType.PLAYER,
|
||||||
|
"revanced_disable_player_gesture",
|
||||||
|
"false"
|
||||||
|
)
|
||||||
|
|
||||||
|
// endregion
|
||||||
|
|
||||||
// region patch for enable color match player and enable black player background
|
// region patch for enable color match player and enable black player background
|
||||||
|
|
||||||
lateinit var colorMathPlayerInvokeVirtualReference: Reference
|
lateinit var colorMathPlayerInvokeVirtualReference: Reference
|
||||||
@ -803,6 +859,7 @@ object PlayerComponentsPatch : BaseBytecodePatch(
|
|||||||
|
|
||||||
// region patch for restore old comments popup panels
|
// region patch for restore old comments popup panels
|
||||||
|
|
||||||
|
OldEngagementPanelFingerprint.result?.let {
|
||||||
OldEngagementPanelFingerprint.literalInstructionBooleanHook(
|
OldEngagementPanelFingerprint.literalInstructionBooleanHook(
|
||||||
45427672,
|
45427672,
|
||||||
"$PLAYER_CLASS_DESCRIPTOR->restoreOldCommentsPopUpPanels(Z)Z"
|
"$PLAYER_CLASS_DESCRIPTOR->restoreOldCommentsPopUpPanels(Z)Z"
|
||||||
@ -813,6 +870,7 @@ object PlayerComponentsPatch : BaseBytecodePatch(
|
|||||||
"revanced_restore_old_comments_popup_panels",
|
"revanced_restore_old_comments_popup_panels",
|
||||||
"false"
|
"false"
|
||||||
)
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
|
@ -0,0 +1,17 @@
|
|||||||
|
package app.revanced.patches.music.player.components.fingerprints
|
||||||
|
|
||||||
|
import app.revanced.patcher.extensions.or
|
||||||
|
import app.revanced.patcher.fingerprint.MethodFingerprint
|
||||||
|
import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.MiniPlayerViewPager
|
||||||
|
import app.revanced.patches.music.utils.resourceid.SharedResourceIdPatch.PlayerViewPager
|
||||||
|
import app.revanced.util.containsWideLiteralInstructionIndex
|
||||||
|
import com.android.tools.smali.dexlib2.AccessFlags
|
||||||
|
|
||||||
|
internal object PlayerViewPagerConstructorFingerprint : MethodFingerprint(
|
||||||
|
returnType = "V",
|
||||||
|
accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR,
|
||||||
|
customFingerprint = { methodDef, _ ->
|
||||||
|
methodDef.containsWideLiteralInstructionIndex(MiniPlayerViewPager)
|
||||||
|
&& methodDef.containsWideLiteralInstructionIndex(PlayerViewPager)
|
||||||
|
},
|
||||||
|
)
|
@ -35,11 +35,13 @@ object SharedResourceIdPatch : ResourcePatch() {
|
|||||||
var MiniPlayerDefaultText = -1L
|
var MiniPlayerDefaultText = -1L
|
||||||
var MiniPlayerMdxPlaying = -1L
|
var MiniPlayerMdxPlaying = -1L
|
||||||
var MiniPlayerPlayPauseReplayButton = -1L
|
var MiniPlayerPlayPauseReplayButton = -1L
|
||||||
|
var MiniPlayerViewPager = -1L
|
||||||
var MusicNotifierShelf = -1L
|
var MusicNotifierShelf = -1L
|
||||||
var MusicTasteBuilderShelf = -1L
|
var MusicTasteBuilderShelf = -1L
|
||||||
var NamesInactiveAccountThumbnailSize = -1L
|
var NamesInactiveAccountThumbnailSize = -1L
|
||||||
var OfflineSettingsMenuItem = -1L
|
var OfflineSettingsMenuItem = -1L
|
||||||
var PlayerOverlayChip = -1L
|
var PlayerOverlayChip = -1L
|
||||||
|
var PlayerViewPager = -1L
|
||||||
var PrivacyTosFooter = -1L
|
var PrivacyTosFooter = -1L
|
||||||
var QualityAuto = -1L
|
var QualityAuto = -1L
|
||||||
var RemixGenericButtonSize = -1L
|
var RemixGenericButtonSize = -1L
|
||||||
@ -77,11 +79,13 @@ object SharedResourceIdPatch : ResourcePatch() {
|
|||||||
MiniPlayerDefaultText = getId(STRING, "mini_player_default_text")
|
MiniPlayerDefaultText = getId(STRING, "mini_player_default_text")
|
||||||
MiniPlayerMdxPlaying = getId(STRING, "mini_player_mdx_playing")
|
MiniPlayerMdxPlaying = getId(STRING, "mini_player_mdx_playing")
|
||||||
MiniPlayerPlayPauseReplayButton = getId(ID, "mini_player_play_pause_replay_button")
|
MiniPlayerPlayPauseReplayButton = getId(ID, "mini_player_play_pause_replay_button")
|
||||||
|
MiniPlayerViewPager = getId(ID, "mini_player_view_pager")
|
||||||
MusicNotifierShelf = getId(LAYOUT, "music_notifier_shelf")
|
MusicNotifierShelf = getId(LAYOUT, "music_notifier_shelf")
|
||||||
MusicTasteBuilderShelf = getId(LAYOUT, "music_tastebuilder_shelf")
|
MusicTasteBuilderShelf = getId(LAYOUT, "music_tastebuilder_shelf")
|
||||||
NamesInactiveAccountThumbnailSize = getId(DIMEN, "names_inactive_account_thumbnail_size")
|
NamesInactiveAccountThumbnailSize = getId(DIMEN, "names_inactive_account_thumbnail_size")
|
||||||
OfflineSettingsMenuItem = getId(ID, "offline_settings_menu_item")
|
OfflineSettingsMenuItem = getId(ID, "offline_settings_menu_item")
|
||||||
PlayerOverlayChip = getId(ID, "player_overlay_chip")
|
PlayerOverlayChip = getId(ID, "player_overlay_chip")
|
||||||
|
PlayerViewPager = getId(ID, "player_view_pager")
|
||||||
PrivacyTosFooter = getId(ID, "privacy_tos_footer")
|
PrivacyTosFooter = getId(ID, "privacy_tos_footer")
|
||||||
QualityAuto = getId(STRING, "quality_auto")
|
QualityAuto = getId(STRING, "quality_auto")
|
||||||
RemixGenericButtonSize = getId(DIMEN, "remix_generic_button_size")
|
RemixGenericButtonSize = getId(DIMEN, "remix_generic_button_size")
|
||||||
|
@ -222,6 +222,10 @@ This does not bypass the age restriction. It just accepts it automatically."</st
|
|||||||
<!-- PreferenceScreen: Player -->
|
<!-- PreferenceScreen: Player -->
|
||||||
<string name="revanced_preference_screen_player_title">Player</string>
|
<string name="revanced_preference_screen_player_title">Player</string>
|
||||||
|
|
||||||
|
<string name="revanced_disable_mini_player_gesture_title">Disable miniplayer gesture</string>
|
||||||
|
<string name="revanced_disable_mini_player_gesture_summary">Disable swipe to change tracks in the miniplayer.</string>
|
||||||
|
<string name="revanced_disable_player_gesture_title">Disable player gesture</string>
|
||||||
|
<string name="revanced_disable_player_gesture_summary">Disable swipe to change tracks in the player.</string>
|
||||||
<string name="revanced_enable_black_player_background_title">Enable black player background</string>
|
<string name="revanced_enable_black_player_background_title">Enable black player background</string>
|
||||||
<string name="revanced_enable_black_player_background_summary">Changes the player background color to black.</string>
|
<string name="revanced_enable_black_player_background_summary">Changes the player background color to black.</string>
|
||||||
<string name="revanced_enable_color_match_player_title">Enable color match player</string>
|
<string name="revanced_enable_color_match_player_title">Enable color match player</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user