From 8779a990650bb228001ff39e065848e537f7f65c Mon Sep 17 00:00:00 2001 From: inotia00 <108592928+inotia00@users.noreply.github.com> Date: Thu, 12 Oct 2023 17:28:24 +0900 Subject: [PATCH] =?UTF-8?q?feat(YouTube=20Music/Enable=20new=20player=20la?= =?UTF-8?q?yout):=20change=20patch=20name=20`Enable=20new=20layout`=20?= =?UTF-8?q?=E2=86=92=20`Enable=20new=20player=20layout`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../music/player/newlayout/NewLayoutPatch.kt | 59 ------------------- .../newplayerlayout/NewPlayerLayoutPatch.kt | 41 +++++++++++++ .../playerlayouthook/PlayerLayoutHookPatch.kt | 32 ++++++++++ .../NewPlayerLayoutFingerprint.kt} | 4 +- .../music/settings/host/values/strings.xml | 4 +- 5 files changed, 77 insertions(+), 63 deletions(-) delete mode 100644 src/main/kotlin/app/revanced/patches/music/player/newlayout/NewLayoutPatch.kt create mode 100644 src/main/kotlin/app/revanced/patches/music/player/newplayerlayout/NewPlayerLayoutPatch.kt create mode 100644 src/main/kotlin/app/revanced/patches/music/utils/playerlayouthook/PlayerLayoutHookPatch.kt rename src/main/kotlin/app/revanced/patches/music/{player/newlayout/fingerprints/NewLayoutFingerprint.kt => utils/playerlayouthook/fingerprints/NewPlayerLayoutFingerprint.kt} (67%) diff --git a/src/main/kotlin/app/revanced/patches/music/player/newlayout/NewLayoutPatch.kt b/src/main/kotlin/app/revanced/patches/music/player/newlayout/NewLayoutPatch.kt deleted file mode 100644 index 03b9b3843..000000000 --- a/src/main/kotlin/app/revanced/patches/music/player/newlayout/NewLayoutPatch.kt +++ /dev/null @@ -1,59 +0,0 @@ -package app.revanced.patches.music.player.newlayout - -import app.revanced.extensions.exception -import app.revanced.patcher.data.BytecodeContext -import app.revanced.patcher.extensions.InstructionExtensions.addInstructions -import app.revanced.patcher.extensions.InstructionExtensions.getInstruction -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.newlayout.fingerprints.NewLayoutFingerprint -import app.revanced.patches.music.utils.settings.SettingsPatch -import app.revanced.util.enum.CategoryType -import app.revanced.util.integrations.Constants.MUSIC_PLAYER -import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction - -@Patch( - name = "Enable new layout", - description = "Enable new player layouts.", - dependencies = [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 NewLayoutPatch : BytecodePatch( - setOf(NewLayoutFingerprint) -) { - override fun execute(context: BytecodeContext) { - - NewLayoutFingerprint.result?.let { - it.mutableMethod.apply { - val insertIndex = implementation!!.instructions.size - 1 - val targetRegister = getInstruction(insertIndex).registerA - - addInstructions( - insertIndex, """ - invoke-static {}, $MUSIC_PLAYER->enableNewLayout()Z - move-result v$targetRegister - """ - ) - } - } ?: throw NewLayoutFingerprint.exception - - SettingsPatch.addMusicPreference( - CategoryType.PLAYER, - "revanced_enable_new_layout", - "true" - ) - - } -} \ 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 new file mode 100644 index 000000000..25d9faeb9 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/player/newplayerlayout/NewPlayerLayoutPatch.kt @@ -0,0 +1,41 @@ +package app.revanced.patches.music.player.newplayerlayout + +import app.revanced.patcher.data.ResourceContext +import app.revanced.patcher.patch.ResourcePatch +import app.revanced.patcher.patch.annotation.CompatiblePackage +import app.revanced.patcher.patch.annotation.Patch +import app.revanced.patches.music.utils.playerlayouthook.PlayerLayoutHookPatch +import app.revanced.patches.music.utils.settings.SettingsPatch +import app.revanced.util.enum.CategoryType + +@Patch( + name = "Enable new player layout", + description = "Enable new player layouts.", + [ + 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 NewPlayerLayoutPatch : ResourcePatch() { + override fun execute(context: ResourceContext) { + + SettingsPatch.addMusicPreference( + CategoryType.PLAYER, + "revanced_enable_new_player_layout", + "true" + ) + + } +} \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/utils/playerlayouthook/PlayerLayoutHookPatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/playerlayouthook/PlayerLayoutHookPatch.kt new file mode 100644 index 000000000..4b349330f --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/utils/playerlayouthook/PlayerLayoutHookPatch.kt @@ -0,0 +1,32 @@ +package app.revanced.patches.music.utils.playerlayouthook + +import app.revanced.extensions.exception +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patches.music.utils.playerlayouthook.fingerprints.NewPlayerLayoutFingerprint +import app.revanced.util.integrations.Constants.MUSIC_PLAYER +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction + +object PlayerLayoutHookPatch : BytecodePatch( + setOf(NewPlayerLayoutFingerprint) +) { + override fun execute(context: BytecodeContext) { + + NewPlayerLayoutFingerprint.result?.let { + it.mutableMethod.apply { + val insertIndex = implementation!!.instructions.size - 1 + val targetRegister = getInstruction(insertIndex).registerA + + addInstructions( + insertIndex, """ + invoke-static {}, $MUSIC_PLAYER->enableNewPlayerLayout()Z + move-result v$targetRegister + """ + ) + } + } ?: throw NewPlayerLayoutFingerprint.exception + + } +} \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/player/newlayout/fingerprints/NewLayoutFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/utils/playerlayouthook/fingerprints/NewPlayerLayoutFingerprint.kt similarity index 67% rename from src/main/kotlin/app/revanced/patches/music/player/newlayout/fingerprints/NewLayoutFingerprint.kt rename to src/main/kotlin/app/revanced/patches/music/utils/playerlayouthook/fingerprints/NewPlayerLayoutFingerprint.kt index 4076205fc..88e0fe4b7 100644 --- a/src/main/kotlin/app/revanced/patches/music/player/newlayout/fingerprints/NewLayoutFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/playerlayouthook/fingerprints/NewPlayerLayoutFingerprint.kt @@ -1,9 +1,9 @@ -package app.revanced.patches.music.player.newlayout.fingerprints +package app.revanced.patches.music.utils.playerlayouthook.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.util.bytecode.isWide32LiteralExists -object NewLayoutFingerprint : MethodFingerprint( +object NewPlayerLayoutFingerprint : MethodFingerprint( returnType = "Z", parameters = emptyList(), customFingerprint = { methodDef, _ -> methodDef.isWide32LiteralExists(45399578) } diff --git a/src/main/resources/music/settings/host/values/strings.xml b/src/main/resources/music/settings/host/values/strings.xml index cf07c8004..0c4c81d4e 100644 --- a/src/main/resources/music/settings/host/values/strings.xml +++ b/src/main/resources/music/settings/host/values/strings.xml @@ -34,8 +34,8 @@ Enable force minimized player Enables entry into landscape mode by screen rotation on the phone. Enable landscape mode - Enable new player layouts. - Enable new layout + Enable new player layouts. + Enable new player layout Return the library shelf to old style. (Experimental) Enable old style library shelf Return the mini players to old style.