From 119a5c6e5c96e5ac35e9c5dad59d14d4fde99847 Mon Sep 17 00:00:00 2001 From: inotia00 <108592928+inotia00@users.noreply.github.com> Date: Thu, 12 Oct 2023 17:31:45 +0900 Subject: [PATCH] feat(YouTube Music): add `Enable new player background` patch --- .../NewPlayerBackgroundPatch.kt | 60 +++++++++++++++++++ .../NewPlayerBackgroundFingerprint.kt | 10 ++++ .../newplayerlayout/NewPlayerLayoutPatch.kt | 10 ++++ .../music/settings/host/values/strings.xml | 2 + 4 files changed, 82 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/music/player/newplayerbackground/NewPlayerBackgroundPatch.kt create mode 100644 src/main/kotlin/app/revanced/patches/music/player/newplayerbackground/fingerprints/NewPlayerBackgroundFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/music/player/newplayerbackground/NewPlayerBackgroundPatch.kt b/src/main/kotlin/app/revanced/patches/music/player/newplayerbackground/NewPlayerBackgroundPatch.kt new file mode 100644 index 000000000..0dabfeb4c --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/player/newplayerbackground/NewPlayerBackgroundPatch.kt @@ -0,0 +1,60 @@ +package app.revanced.patches.music.player.newplayerbackground + +import app.revanced.extensions.exception +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.annotation.CompatiblePackage +import app.revanced.patcher.patch.annotation.Patch +import app.revanced.patches.music.player.newplayerbackground.fingerprints.NewPlayerBackgroundFingerprint +import app.revanced.patches.music.utils.playerlayouthook.PlayerLayoutHookPatch +import app.revanced.patches.music.utils.settings.SettingsPatch +import app.revanced.util.enum.CategoryType +import app.revanced.util.integrations.Constants.MUSIC_PLAYER + +@Patch( + name = "Enable new player background", + description = "Enable new player background.", + dependencies = + [ + PlayerLayoutHookPatch::class, + SettingsPatch::class + ], + compatiblePackages = [ + CompatiblePackage( + "com.google.android.apps.youtube.music", + [ + "6.15.52", + "6.20.51", + "6.21.51", + "6.22.51" + ] + ) + ] +) +@Suppress("unused") +object NewPlayerBackgroundPatch : BytecodePatch( + setOf(NewPlayerBackgroundFingerprint) +) { + override fun execute(context: BytecodeContext) { + + NewPlayerBackgroundFingerprint.result?.let { + it.mutableMethod.apply { + addInstructions( + 0, """ + invoke-static {}, $MUSIC_PLAYER->enableNewPlayerBackground()Z + move-result v0 + return v0 + """ + ) + } + } ?: throw NewPlayerBackgroundFingerprint.exception + + SettingsPatch.addMusicPreference( + CategoryType.PLAYER, + "revanced_enable_new_player_background", + "false" + ) + + } +} \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/player/newplayerbackground/fingerprints/NewPlayerBackgroundFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/player/newplayerbackground/fingerprints/NewPlayerBackgroundFingerprint.kt new file mode 100644 index 000000000..82f3f7ae0 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/player/newplayerbackground/fingerprints/NewPlayerBackgroundFingerprint.kt @@ -0,0 +1,10 @@ +package app.revanced.patches.music.player.newplayerbackground.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import app.revanced.util.bytecode.isWide32LiteralExists + +object NewPlayerBackgroundFingerprint : MethodFingerprint( + returnType = "Z", + parameters = emptyList(), + customFingerprint = { methodDef, _ -> methodDef.isWide32LiteralExists(45415319) } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/player/newplayerlayout/NewPlayerLayoutPatch.kt b/src/main/kotlin/app/revanced/patches/music/player/newplayerlayout/NewPlayerLayoutPatch.kt index 25d9faeb9..90f8347ce 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/newplayerlayout/NewPlayerLayoutPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/player/newplayerlayout/NewPlayerLayoutPatch.kt @@ -29,6 +29,7 @@ import app.revanced.util.enum.CategoryType ) @Suppress("unused") object NewPlayerLayoutPatch : ResourcePatch() { + private const val YOUTUBE_MUSIC_SETTINGS_PATH = "res/xml/settings_headers.xml" override fun execute(context: ResourceContext) { SettingsPatch.addMusicPreference( @@ -37,5 +38,14 @@ object NewPlayerLayoutPatch : ResourcePatch() { "true" ) + val prefs = context[YOUTUBE_MUSIC_SETTINGS_PATH] + + prefs.writeText( + prefs.readText() + .replace( + "revanced_enable_new_player_background\"", + "revanced_enable_new_player_background\" android:dependency=\"revanced_enable_new_player_layout\"" + ) + ) } } \ No newline at end of file diff --git a/src/main/resources/music/settings/host/values/strings.xml b/src/main/resources/music/settings/host/values/strings.xml index d15b645e1..1163df47b 100644 --- a/src/main/resources/music/settings/host/values/strings.xml +++ b/src/main/resources/music/settings/host/values/strings.xml @@ -34,6 +34,8 @@ Enable force minimized player Enables entry into landscape mode by screen rotation on the phone. Enable landscape mode + Enables new player background. + Enable new player background Enable new player layouts. Enable new player layout Return the library shelf to old style. (Experimental)