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)