diff --git a/src/main/kotlin/app/revanced/patches/music/ads/video/patch/MusicVideoAdsPatch.kt b/src/main/kotlin/app/revanced/patches/music/ads/video/patch/MusicVideoAdsPatch.kt index 05e252020..4001a38c7 100644 --- a/src/main/kotlin/app/revanced/patches/music/ads/video/patch/MusicVideoAdsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/ads/video/patch/MusicVideoAdsPatch.kt @@ -10,10 +10,11 @@ import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.patch.annotations.Patch import app.revanced.patches.music.misc.litho.patch.MusicLithoFilterPatch -import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch +import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility import app.revanced.patches.shared.patch.videoads.GeneralVideoAdsPatch -import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH +import app.revanced.util.enum.CategoryType +import app.revanced.util.integrations.Constants.MUSIC_ADS_PATH @Patch @Name("hide-music-ads") @@ -34,11 +35,11 @@ class MusicVideoAdsPatch : BytecodePatch() { GeneralVideoAdsPatch.injectMainstreamAds(INTEGRATIONS_CLASS_DESCRIPTOR) - MusicSettingsPatch.addMusicPreference("ads", "revanced_hide_music_ads", "true") + MusicSettingsPatch.addMusicPreference(CategoryType.ADS, "revanced_hide_music_ads", "true") return PatchResultSuccess() } private companion object { - const val INTEGRATIONS_CLASS_DESCRIPTOR = "$MUSIC_SETTINGS_PATH->hideMusicAds()Z" + const val INTEGRATIONS_CLASS_DESCRIPTOR = "$MUSIC_ADS_PATH/HideMusicAdsPatch;->hideMusicAds()Z" } } diff --git a/src/main/kotlin/app/revanced/patches/music/layout/autocaptions/patch/DisableAutoCaptionsPatch.kt b/src/main/kotlin/app/revanced/patches/music/layout/autocaptions/patch/DisableAutoCaptionsPatch.kt index 2de9ff6b6..49fc84768 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/autocaptions/patch/DisableAutoCaptionsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/autocaptions/patch/DisableAutoCaptionsPatch.kt @@ -11,10 +11,11 @@ import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.patch.annotations.Patch -import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch +import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility import app.revanced.patches.shared.fingerprints.SubtitleTrackFingerprint -import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH +import app.revanced.util.enum.CategoryType +import app.revanced.util.integrations.Constants.MUSIC_LAYOUT import org.jf.dexlib2.iface.instruction.OneRegisterInstruction @Patch @@ -36,14 +37,14 @@ class DisableAutoCaptionsPatch : BytecodePatch( val register = (elementAt(index) as OneRegisterInstruction).registerA it.addInstructions( index, """ - invoke-static {v$register}, $MUSIC_SETTINGS_PATH->disableAutoCaptions(Z)Z + invoke-static {v$register}, $MUSIC_LAYOUT->disableAutoCaptions(Z)Z move-result v$register """ ) } } ?: return SubtitleTrackFingerprint.toErrorResult() - MusicSettingsPatch.addMusicPreference("design", "revanced_disable_auto_captions", "false") + MusicSettingsPatch.addMusicPreference(CategoryType.LAYOUT, "revanced_disable_auto_captions", "false") return PatchResultSuccess() } diff --git a/src/main/kotlin/app/revanced/patches/music/layout/blacknavbar/patch/BlackNavbarPatch.kt b/src/main/kotlin/app/revanced/patches/music/layout/blacknavbar/patch/BlackNavbarPatch.kt index 719512555..69aed9900 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/blacknavbar/patch/BlackNavbarPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/blacknavbar/patch/BlackNavbarPatch.kt @@ -15,9 +15,10 @@ import app.revanced.patcher.patch.annotations.Patch import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.music.layout.blacknavbar.fingerprints.TabLayoutFingerprint import app.revanced.patches.music.misc.resourceid.patch.SharedResourceIdPatch -import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch +import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility -import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH +import app.revanced.util.enum.CategoryType +import app.revanced.util.integrations.Constants.MUSIC_LAYOUT import org.jf.dexlib2.iface.instruction.formats.Instruction11x import org.jf.dexlib2.iface.instruction.formats.Instruction31i @@ -50,7 +51,7 @@ class BlackNavbarPatch : BytecodePatch( addInstructions( insertIndex, """ - invoke-static {}, $MUSIC_SETTINGS_PATH->enableBlackNavbar()Z + invoke-static {}, $MUSIC_LAYOUT->enableBlackNavbar()Z move-result v$dummyRegister if-eqz v$dummyRegister, :default const/high16 v$targetRegister, -0x1000000 @@ -59,7 +60,7 @@ class BlackNavbarPatch : BytecodePatch( } } ?: return TabLayoutFingerprint.toErrorResult() - MusicSettingsPatch.addMusicPreference("design", "revanced_enable_black_navbar", "true") + MusicSettingsPatch.addMusicPreference(CategoryType.LAYOUT, "revanced_enable_black_navbar", "true") return PatchResultSuccess() } diff --git a/src/main/kotlin/app/revanced/patches/music/layout/castbutton/patch/HideCastButtonPatch.kt b/src/main/kotlin/app/revanced/patches/music/layout/castbutton/patch/HideCastButtonPatch.kt index 6a9ba34ec..105b701c0 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/castbutton/patch/HideCastButtonPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/castbutton/patch/HideCastButtonPatch.kt @@ -14,10 +14,10 @@ import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.patch.annotations.Patch import app.revanced.patches.music.layout.castbutton.fingerprints.HideCastButtonFingerprint import app.revanced.patches.music.layout.castbutton.fingerprints.HideCastButtonParentFingerprint -import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch +import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility -import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH - +import app.revanced.util.enum.CategoryType +import app.revanced.util.integrations.Constants.MUSIC_LAYOUT @Patch @Name("hide-music-cast-button") @Description("Hides the cast button in the video player and header.") @@ -34,13 +34,13 @@ class HideCastButtonPatch : BytecodePatch( HideCastButtonParentFingerprint.result?.let { parentResult -> HideCastButtonFingerprint.also { it.resolve(context, parentResult.classDef) }.result?.mutableMethod?.addInstructions( 0, """ - invoke-static {p1}, $MUSIC_SETTINGS_PATH->hideCastButton(I)I + invoke-static {p1}, $MUSIC_LAYOUT->hideCastButton(I)I move-result p1 """ ) ?: return HideCastButtonFingerprint.toErrorResult() } ?: return HideCastButtonParentFingerprint.toErrorResult() - MusicSettingsPatch.addMusicPreference("navigation", "revanced_hide_cast_button", "true") + MusicSettingsPatch.addMusicPreference(CategoryType.LAYOUT, "revanced_hide_cast_button", "true") return PatchResultSuccess() } diff --git a/src/main/kotlin/app/revanced/patches/music/layout/compactdialog/patch/CompactDialogPatch.kt b/src/main/kotlin/app/revanced/patches/music/layout/compactdialog/patch/CompactDialogPatch.kt index 6b998b74b..4b89328d4 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/compactdialog/patch/CompactDialogPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/compactdialog/patch/CompactDialogPatch.kt @@ -15,9 +15,10 @@ import app.revanced.patcher.patch.annotations.Patch import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.music.layout.compactdialog.fingerprints.DialogSolidFingerprint import app.revanced.patches.music.misc.resourceid.patch.SharedResourceIdPatch -import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch +import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility -import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH +import app.revanced.util.enum.CategoryType +import app.revanced.util.integrations.Constants.MUSIC_LAYOUT @Patch @Name("enable-compact-dialog") @@ -44,14 +45,14 @@ class CompactDialogPatch : BytecodePatch( ) { addInstructions( 2, """ - invoke-static {p0}, $MUSIC_SETTINGS_PATH->enableCompactDialog(I)I + invoke-static {p0}, $MUSIC_LAYOUT->enableCompactDialog(I)I move-result p0 """ ) } } ?: return DialogSolidFingerprint.toErrorResult() - MusicSettingsPatch.addMusicPreference("navigation", "revanced_enable_compact_dialog", "true") + MusicSettingsPatch.addMusicPreference(CategoryType.LAYOUT, "revanced_enable_compact_dialog", "true") return PatchResultSuccess() } diff --git a/src/main/kotlin/app/revanced/patches/music/layout/floatingbutton/patch/NewPlaylistButtonPatch.kt b/src/main/kotlin/app/revanced/patches/music/layout/floatingbutton/patch/NewPlaylistButtonPatch.kt index ff03da746..cc5403074 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/floatingbutton/patch/NewPlaylistButtonPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/floatingbutton/patch/NewPlaylistButtonPatch.kt @@ -16,9 +16,10 @@ import app.revanced.patcher.patch.annotations.Patch import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.music.layout.floatingbutton.fingerprints.* import app.revanced.patches.music.misc.resourceid.patch.SharedResourceIdPatch -import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch +import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility -import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH +import app.revanced.util.enum.CategoryType +import app.revanced.util.integrations.Constants.MUSIC_LAYOUT @Patch @Name("hide-new-playlist") @@ -42,7 +43,7 @@ class NewPlaylistButtonPatch : BytecodePatch( FloatingButtonFingerprint.also { it.resolve(context, parentResult.classDef) }.result?.mutableMethod?.let { it.addInstructions( 1, """ - invoke-static {}, $MUSIC_SETTINGS_PATH->hideNewPlaylistButton()Z + invoke-static {}, $MUSIC_LAYOUT->hideNewPlaylistButton()Z move-result v0 if-eqz v0, :show return-void @@ -51,7 +52,7 @@ class NewPlaylistButtonPatch : BytecodePatch( } ?: return FloatingButtonFingerprint.toErrorResult() } ?: return FloatingButtonParentFingerprint.toErrorResult() - MusicSettingsPatch.addMusicPreference("navigation", "revanced_hide_new_playlist_button", "false") + MusicSettingsPatch.addMusicPreference(CategoryType.LAYOUT, "revanced_hide_new_playlist_button", "false") return PatchResultSuccess() } diff --git a/src/main/kotlin/app/revanced/patches/music/layout/minimizedplayer/patch/MinimizedPlayerPatch.kt b/src/main/kotlin/app/revanced/patches/music/layout/minimizedplayer/patch/MinimizedPlayerPatch.kt index dfe3bde1a..0effa0676 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/minimizedplayer/patch/MinimizedPlayerPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/minimizedplayer/patch/MinimizedPlayerPatch.kt @@ -12,9 +12,10 @@ import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.patch.annotations.Patch import app.revanced.patches.music.layout.minimizedplayer.fingerprints.MinimizedPlayerFingerprint -import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch +import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility -import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH +import app.revanced.util.enum.CategoryType +import app.revanced.util.integrations.Constants.MUSIC_LAYOUT import org.jf.dexlib2.iface.instruction.OneRegisterInstruction @Patch @@ -37,14 +38,14 @@ class MinimizedPlayerPatch : BytecodePatch( addInstructions( index, """ - invoke-static {v$register}, $MUSIC_SETTINGS_PATH->enableForceMinimizedPlayer(Z)Z + invoke-static {v$register}, $MUSIC_LAYOUT->enableForceMinimizedPlayer(Z)Z move-result v$register """ ) } } ?: return MinimizedPlayerFingerprint.toErrorResult() - MusicSettingsPatch.addMusicPreference("listening", "revanced_enable_force_minimized_player", "true") + MusicSettingsPatch.addMusicPreference(CategoryType.LAYOUT, "revanced_enable_force_minimized_player", "true") return PatchResultSuccess() } diff --git a/src/main/kotlin/app/revanced/patches/music/layout/miniplayercolor/patch/MiniplayerColorPatch.kt b/src/main/kotlin/app/revanced/patches/music/layout/miniplayercolor/patch/MiniplayerColorPatch.kt index 68dc9026a..97730f955 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/miniplayercolor/patch/MiniplayerColorPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/miniplayercolor/patch/MiniplayerColorPatch.kt @@ -15,10 +15,11 @@ import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.patch.annotations.Patch import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.music.layout.miniplayercolor.fingerprints.MiniplayerColorFingerprint -import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch +import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility import app.revanced.patches.shared.fingerprints.MiniplayerColorParentFingerprint -import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH +import app.revanced.util.enum.CategoryType +import app.revanced.util.integrations.Constants.MUSIC_LAYOUT import org.jf.dexlib2.iface.instruction.Instruction import org.jf.dexlib2.iface.instruction.ReferenceInstruction import org.jf.dexlib2.iface.reference.FieldReference @@ -68,7 +69,7 @@ class MiniplayerColorPatch : BytecodePatch( addInstructions( insertIndex, """ - invoke-static {}, $MUSIC_SETTINGS_PATH->enableColorMatchPlayer()Z + invoke-static {}, $MUSIC_LAYOUT->enableColorMatchPlayer()Z move-result v2 if-eqz v2, :off iget v0, p0, ${type}->${firstReference.name}:${firstReference.type} @@ -92,7 +93,7 @@ class MiniplayerColorPatch : BytecodePatch( } ?: return MiniplayerColorFingerprint.toErrorResult() } ?: return MiniplayerColorParentFingerprint.toErrorResult() - MusicSettingsPatch.addMusicPreference("design", "revanced_enable_color_match_player", "true") + MusicSettingsPatch.addMusicPreference(CategoryType.LAYOUT, "revanced_enable_color_match_player", "true") return PatchResultSuccess() } diff --git a/src/main/kotlin/app/revanced/patches/music/layout/playlistcard/patch/HidePlaylistCardPatch.kt b/src/main/kotlin/app/revanced/patches/music/layout/playlistcard/patch/HidePlaylistCardPatch.kt index 597fdd361..3d7e0af52 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/playlistcard/patch/HidePlaylistCardPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/playlistcard/patch/HidePlaylistCardPatch.kt @@ -10,8 +10,9 @@ import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.patch.annotations.Patch import app.revanced.patches.music.misc.litho.patch.MusicLithoFilterPatch -import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch +import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility +import app.revanced.util.enum.CategoryType @Patch @Name("hide-playlist-card") @@ -27,7 +28,7 @@ import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility class HidePlaylistCardPatch : BytecodePatch() { override fun execute(context: BytecodeContext): PatchResult { - MusicSettingsPatch.addMusicPreference("navigation", "revanced_hide_playlist_card", "true") + MusicSettingsPatch.addMusicPreference(CategoryType.LAYOUT, "revanced_hide_playlist_card", "false") return PatchResultSuccess() } diff --git a/src/main/kotlin/app/revanced/patches/music/layout/zenmode/patch/ZenModePatch.kt b/src/main/kotlin/app/revanced/patches/music/layout/zenmode/patch/ZenModePatch.kt index 038e26e2f..b69227964 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/zenmode/patch/ZenModePatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/zenmode/patch/ZenModePatch.kt @@ -13,10 +13,11 @@ import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.patch.annotations.Patch import app.revanced.patches.music.layout.zenmode.fingerprints.ZenModeFingerprint -import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch +import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility import app.revanced.patches.shared.fingerprints.MiniplayerColorParentFingerprint -import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH +import app.revanced.util.enum.CategoryType +import app.revanced.util.integrations.Constants.MUSIC_LAYOUT import org.jf.dexlib2.iface.instruction.OneRegisterInstruction import org.jf.dexlib2.iface.instruction.ReferenceInstruction import org.jf.dexlib2.iface.reference.FieldReference @@ -51,7 +52,7 @@ class ZenModePatch : BytecodePatch( addInstructions( insertIndex, """ - invoke-static {}, $MUSIC_SETTINGS_PATH->enableZenMode()Z + invoke-static {}, $MUSIC_LAYOUT->enableZenMode()Z move-result v$dummyRegister if-eqz v$dummyRegister, :off const v$dummyRegister, -0xfcfcfd @@ -67,7 +68,7 @@ class ZenModePatch : BytecodePatch( } ?: return ZenModeFingerprint.toErrorResult() } ?: return MiniplayerColorParentFingerprint.toErrorResult() - MusicSettingsPatch.addMusicPreference("design", "revanced_enable_zen_mode", "false") + MusicSettingsPatch.addMusicPreference(CategoryType.LAYOUT, "revanced_enable_zen_mode", "false") return PatchResultSuccess() } diff --git a/src/main/kotlin/app/revanced/patches/music/audio/codecs/fingerprints/AllCodecsFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/misc/codecs/fingerprints/AllCodecsFingerprint.kt similarity index 88% rename from src/main/kotlin/app/revanced/patches/music/audio/codecs/fingerprints/AllCodecsFingerprint.kt rename to src/main/kotlin/app/revanced/patches/music/misc/codecs/fingerprints/AllCodecsFingerprint.kt index 55af3d3e0..eb63dabca 100644 --- a/src/main/kotlin/app/revanced/patches/music/audio/codecs/fingerprints/AllCodecsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/codecs/fingerprints/AllCodecsFingerprint.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.music.audio.codecs.fingerprints +package app.revanced.patches.music.misc.codecs.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint diff --git a/src/main/kotlin/app/revanced/patches/music/audio/codecs/fingerprints/AllCodecsParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/misc/codecs/fingerprints/AllCodecsParentFingerprint.kt similarity index 87% rename from src/main/kotlin/app/revanced/patches/music/audio/codecs/fingerprints/AllCodecsParentFingerprint.kt rename to src/main/kotlin/app/revanced/patches/music/misc/codecs/fingerprints/AllCodecsParentFingerprint.kt index e7d14a9d2..4d468692c 100644 --- a/src/main/kotlin/app/revanced/patches/music/audio/codecs/fingerprints/AllCodecsParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/codecs/fingerprints/AllCodecsParentFingerprint.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.music.audio.codecs.fingerprints +package app.revanced.patches.music.misc.codecs.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint diff --git a/src/main/kotlin/app/revanced/patches/music/audio/codecs/fingerprints/CodecsLockFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/misc/codecs/fingerprints/CodecsLockFingerprint.kt similarity index 89% rename from src/main/kotlin/app/revanced/patches/music/audio/codecs/fingerprints/CodecsLockFingerprint.kt rename to src/main/kotlin/app/revanced/patches/music/misc/codecs/fingerprints/CodecsLockFingerprint.kt index 90cac0dcc..af311a0b5 100644 --- a/src/main/kotlin/app/revanced/patches/music/audio/codecs/fingerprints/CodecsLockFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/codecs/fingerprints/CodecsLockFingerprint.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.music.audio.codecs.fingerprints +package app.revanced.patches.music.misc.codecs.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint diff --git a/src/main/kotlin/app/revanced/patches/music/audio/codecs/patch/CodecsUnlockPatch.kt b/src/main/kotlin/app/revanced/patches/music/misc/codecs/patch/CodecsUnlockPatch.kt similarity index 83% rename from src/main/kotlin/app/revanced/patches/music/audio/codecs/patch/CodecsUnlockPatch.kt rename to src/main/kotlin/app/revanced/patches/music/misc/codecs/patch/CodecsUnlockPatch.kt index 62d222cf8..2b8b9685a 100644 --- a/src/main/kotlin/app/revanced/patches/music/audio/codecs/patch/CodecsUnlockPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/codecs/patch/CodecsUnlockPatch.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.music.audio.codecs.patch +package app.revanced.patches.music.misc.codecs.patch import app.revanced.extensions.toErrorResult import app.revanced.patcher.annotation.Description @@ -15,10 +15,11 @@ import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.patch.annotations.Patch import app.revanced.patcher.util.smali.ExternalLabel -import app.revanced.patches.music.audio.codecs.fingerprints.* -import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch +import app.revanced.patches.music.misc.codecs.fingerprints.* +import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility -import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH +import app.revanced.util.enum.CategoryType +import app.revanced.util.integrations.Constants.MUSIC_MISC_PATH import org.jf.dexlib2.iface.Method import org.jf.dexlib2.iface.instruction.OneRegisterInstruction @@ -38,7 +39,7 @@ class CodecsUnlockPatch : BytecodePatch( AllCodecsParentFingerprint.result?.let { parentResult -> AllCodecsFingerprint.also { it.resolve(context, parentResult.classDef) }.result?.let { result -> - allCodecsMethod = + allCodecsMethod = context.toMethodWalker(result.method) .nextMethod(result.scanResult.patternScanResult!!.endIndex) .getMethod() @@ -53,7 +54,7 @@ class CodecsUnlockPatch : BytecodePatch( val register = (instruction(endIndex) as OneRegisterInstruction).registerA addInstructions( endIndex + 1, """ - invoke-static {}, $MUSIC_SETTINGS_PATH->enableOpusCodec()Z + invoke-static {}, $MUSIC_MISC_PATH/OpusCodecPatch;->enableOpusCodec()Z move-result v7 if-eqz v7, :mp4a invoke-static {}, ${allCodecsMethod.definingClass}->${allCodecsMethod.name}()Ljava/util/Set; @@ -63,7 +64,7 @@ class CodecsUnlockPatch : BytecodePatch( } } ?: return CodecsLockFingerprint.toErrorResult() - MusicSettingsPatch.addMusicPreference("listening", "revanced_enable_opus_codec", "true") + MusicSettingsPatch.addMusicPreference(CategoryType.MISC, "revanced_enable_opus_codec", "true") return PatchResultSuccess() } diff --git a/src/main/kotlin/app/revanced/patches/music/audio/exclusiveaudio/fingerprints/AudioOnlyEnablerFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/misc/exclusiveaudio/fingerprints/AudioOnlyEnablerFingerprint.kt similarity index 92% rename from src/main/kotlin/app/revanced/patches/music/audio/exclusiveaudio/fingerprints/AudioOnlyEnablerFingerprint.kt rename to src/main/kotlin/app/revanced/patches/music/misc/exclusiveaudio/fingerprints/AudioOnlyEnablerFingerprint.kt index f0b5eaaf6..5cdecb7b3 100644 --- a/src/main/kotlin/app/revanced/patches/music/audio/exclusiveaudio/fingerprints/AudioOnlyEnablerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/exclusiveaudio/fingerprints/AudioOnlyEnablerFingerprint.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.music.audio.exclusiveaudio.fingerprints +package app.revanced.patches.music.misc.exclusiveaudio.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint diff --git a/src/main/kotlin/app/revanced/patches/music/audio/exclusiveaudio/patch/ExclusiveAudioPatch.kt b/src/main/kotlin/app/revanced/patches/music/misc/exclusiveaudio/patch/ExclusiveAudioPatch.kt similarity index 88% rename from src/main/kotlin/app/revanced/patches/music/audio/exclusiveaudio/patch/ExclusiveAudioPatch.kt rename to src/main/kotlin/app/revanced/patches/music/misc/exclusiveaudio/patch/ExclusiveAudioPatch.kt index be26cbff1..0e18e3496 100644 --- a/src/main/kotlin/app/revanced/patches/music/audio/exclusiveaudio/patch/ExclusiveAudioPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/exclusiveaudio/patch/ExclusiveAudioPatch.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.music.audio.exclusiveaudio.patch +package app.revanced.patches.music.misc.exclusiveaudio.patch import app.revanced.extensions.toErrorResult import app.revanced.patcher.annotation.Description @@ -11,7 +11,7 @@ import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.Patch -import app.revanced.patches.music.audio.exclusiveaudio.fingerprints.AudioOnlyEnablerFingerprint +import app.revanced.patches.music.misc.exclusiveaudio.fingerprints.AudioOnlyEnablerFingerprint import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility @Patch diff --git a/src/main/kotlin/app/revanced/patches/music/misc/integrations/patch/MusicIntegrationsPatch.kt b/src/main/kotlin/app/revanced/patches/music/misc/integrations/patch/MusicIntegrationsPatch.kt index 5cc1c2e34..1ca203f11 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/integrations/patch/MusicIntegrationsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/integrations/patch/MusicIntegrationsPatch.kt @@ -5,10 +5,12 @@ import app.revanced.patcher.patch.annotations.RequiresIntegrations import app.revanced.patches.music.misc.integrations.fingerprints.InitFingerprint import app.revanced.patches.shared.patch.integrations.AbstractIntegrationsPatch import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility +import app.revanced.util.integrations.Constants.MUSIC_INTEGRATIONS_PATH @Name("music-integrations") @YouTubeMusicCompatibility @RequiresIntegrations class MusicIntegrationsPatch : AbstractIntegrationsPatch( + "$MUSIC_INTEGRATIONS_PATH/utils/ReVancedUtils;", listOf(InitFingerprint), ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/misc/litho/patch/MusicLithoFilterPatch.kt b/src/main/kotlin/app/revanced/patches/music/misc/litho/patch/MusicLithoFilterPatch.kt index ec2a1ae9a..c7681ee59 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/litho/patch/MusicLithoFilterPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/litho/patch/MusicLithoFilterPatch.kt @@ -11,7 +11,7 @@ import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility import app.revanced.patches.shared.fingerprints.LithoFingerprint -import app.revanced.util.integrations.Constants.ADS_PATH +import app.revanced.util.integrations.Constants.MUSIC_ADS_PATH import org.jf.dexlib2.Opcode import org.jf.dexlib2.builder.instruction.BuilderInstruction21c import org.jf.dexlib2.iface.instruction.OneRegisterInstruction @@ -60,7 +60,7 @@ class MusicLithoFilterPatch : BytecodePatch( method.addInstructions( insertIndex, // right after setting the component.pathBuilder field, """ - invoke-static {v$stringBuilderRegister, v$identifierRegister}, $ADS_PATH/MusicLithoFilterPatch;->filter(Ljava/lang/StringBuilder;Ljava/lang/String;)Z + invoke-static {v$stringBuilderRegister, v$identifierRegister}, $MUSIC_ADS_PATH/MusicLithoFilterPatch;->filter(Ljava/lang/StringBuilder;Ljava/lang/String;)Z move-result v$bufferRegister if-eqz v$bufferRegister, :not_an_ad move-object/from16 v$identifierRegister, p1 diff --git a/src/main/kotlin/app/revanced/patches/music/misc/microg/bytecode/patch/MusicMicroGBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/music/misc/microg/bytecode/patch/MusicMicroGBytecodePatch.kt index e9986cf98..397f2ef8f 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/microg/bytecode/patch/MusicMicroGBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/microg/bytecode/patch/MusicMicroGBytecodePatch.kt @@ -9,7 +9,6 @@ import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.patch.annotations.Patch -import app.revanced.patches.music.misc.clientspoof.patch.ClientSpoofMusicPatch import app.revanced.patches.music.misc.microg.bytecode.fingerprints.* import app.revanced.patches.music.misc.microg.resource.patch.MusicMicroGResourcePatch import app.revanced.patches.music.misc.microg.shared.Constants.MUSIC_PACKAGE_NAME @@ -21,7 +20,6 @@ import app.revanced.util.microg.MicroGBytecodeHelper @Patch @DependsOn( [ - ClientSpoofMusicPatch::class, MusicMicroGResourcePatch::class, PatchOptions::class ] diff --git a/src/main/kotlin/app/revanced/patches/music/layout/minimizedplayback/fingerprints/MinimizedPlaybackManagerFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/misc/minimizedplayback/fingerprints/MinimizedPlaybackManagerFingerprint.kt similarity index 90% rename from src/main/kotlin/app/revanced/patches/music/layout/minimizedplayback/fingerprints/MinimizedPlaybackManagerFingerprint.kt rename to src/main/kotlin/app/revanced/patches/music/misc/minimizedplayback/fingerprints/MinimizedPlaybackManagerFingerprint.kt index c4cca455b..377619411 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/minimizedplayback/fingerprints/MinimizedPlaybackManagerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/minimizedplayback/fingerprints/MinimizedPlaybackManagerFingerprint.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.music.layout.minimizedplayback.fingerprints +package app.revanced.patches.music.misc.minimizedplayback.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint diff --git a/src/main/kotlin/app/revanced/patches/music/layout/minimizedplayback/patch/MinimizedPlaybackPatch.kt b/src/main/kotlin/app/revanced/patches/music/misc/minimizedplayback/patch/MinimizedPlaybackPatch.kt similarity index 86% rename from src/main/kotlin/app/revanced/patches/music/layout/minimizedplayback/patch/MinimizedPlaybackPatch.kt rename to src/main/kotlin/app/revanced/patches/music/misc/minimizedplayback/patch/MinimizedPlaybackPatch.kt index 735fb1b2f..b94e3db70 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/minimizedplayback/patch/MinimizedPlaybackPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/minimizedplayback/patch/MinimizedPlaybackPatch.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.music.layout.minimizedplayback.patch +package app.revanced.patches.music.misc.minimizedplayback.patch import app.revanced.extensions.toErrorResult import app.revanced.patcher.annotation.Description @@ -10,7 +10,7 @@ import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.Patch -import app.revanced.patches.music.layout.minimizedplayback.fingerprints.MinimizedPlaybackManagerFingerprint +import app.revanced.patches.music.misc.minimizedplayback.fingerprints.MinimizedPlaybackManagerFingerprint import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility @Patch diff --git a/src/main/kotlin/app/revanced/patches/music/layout/premium/fingerprints/HideGetPremiumFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/misc/premium/fingerprints/HideGetPremiumFingerprint.kt similarity index 90% rename from src/main/kotlin/app/revanced/patches/music/layout/premium/fingerprints/HideGetPremiumFingerprint.kt rename to src/main/kotlin/app/revanced/patches/music/misc/premium/fingerprints/HideGetPremiumFingerprint.kt index e210ca65d..d34acb58b 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/premium/fingerprints/HideGetPremiumFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/premium/fingerprints/HideGetPremiumFingerprint.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.music.layout.premium.fingerprints +package app.revanced.patches.music.misc.premium.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint diff --git a/src/main/kotlin/app/revanced/patches/music/layout/premium/patch/HideGetPremiumPatch.kt b/src/main/kotlin/app/revanced/patches/music/misc/premium/patch/HideGetPremiumPatch.kt similarity index 97% rename from src/main/kotlin/app/revanced/patches/music/layout/premium/patch/HideGetPremiumPatch.kt rename to src/main/kotlin/app/revanced/patches/music/misc/premium/patch/HideGetPremiumPatch.kt index 4beb8e618..e60981deb 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/premium/patch/HideGetPremiumPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/premium/patch/HideGetPremiumPatch.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.music.layout.premium.patch +package app.revanced.patches.music.misc.premium.patch import app.revanced.extensions.findMutableMethodOf import app.revanced.extensions.toErrorResult @@ -14,7 +14,7 @@ import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.patch.annotations.Patch import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod -import app.revanced.patches.music.layout.premium.fingerprints.HideGetPremiumFingerprint +import app.revanced.patches.music.misc.premium.fingerprints.HideGetPremiumFingerprint import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility import app.revanced.patches.shared.patch.mapping.ResourceMappingPatch import org.jf.dexlib2.Opcode diff --git a/src/main/kotlin/app/revanced/patches/music/misc/settings/bytecode/fingerprints/PreferenceFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/misc/settings/bytecode/fingerprints/PreferenceFingerprint.kt new file mode 100644 index 000000000..739684b29 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/misc/settings/bytecode/fingerprints/PreferenceFingerprint.kt @@ -0,0 +1,23 @@ +package app.revanced.patches.music.misc.settings.bytecode.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import org.jf.dexlib2.Opcode + +object PreferenceFingerprint : MethodFingerprint( + returnType = "V", + parameters = listOf("Z"), + opcodes = listOf( + Opcode.RETURN_VOID, + Opcode.XOR_INT_LIT8, + Opcode.INVOKE_VIRTUAL, + Opcode.MOVE_RESULT, + Opcode.IF_NE, + Opcode.RETURN_VOID, + Opcode.IGET_OBJECT, + Opcode.INVOKE_VIRTUAL, + Opcode.MOVE_RESULT_OBJECT, + Opcode.IGET_OBJECT, + Opcode.INVOKE_INTERFACE + ), + customFingerprint = { it.definingClass == "Landroidx/preference/Preference;" } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/misc/settings/bytecode/fingerprints/SettingsHeadersFragmentFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/misc/settings/bytecode/fingerprints/SettingsHeadersFragmentFingerprint.kt new file mode 100644 index 000000000..e7fa4dae9 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/misc/settings/bytecode/fingerprints/SettingsHeadersFragmentFingerprint.kt @@ -0,0 +1,16 @@ +package app.revanced.patches.music.misc.settings.bytecode.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import org.jf.dexlib2.Opcode + +object SettingsHeadersFragmentFingerprint : MethodFingerprint( + returnType = "V", + parameters = listOf("L"), + opcodes = listOf( + Opcode.IGET_OBJECT, + Opcode.INVOKE_VIRTUAL, + Opcode.MOVE_RESULT_OBJECT + + ), + customFingerprint = { it.definingClass.endsWith("/SettingsHeadersFragment;") && it.name == "onCreate" } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/music/misc/settings/bytecode/patch/MusicSettingsBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/music/misc/settings/bytecode/patch/MusicSettingsBytecodePatch.kt new file mode 100644 index 000000000..2c1ca2dad --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/misc/settings/bytecode/patch/MusicSettingsBytecodePatch.kt @@ -0,0 +1,61 @@ +package app.revanced.patches.music.misc.settings.bytecode.patch + +import app.revanced.extensions.toErrorResult +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.annotation.Version +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.addInstruction +import app.revanced.patcher.extensions.instruction +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.PatchResult +import app.revanced.patcher.patch.PatchResultSuccess +import app.revanced.patcher.patch.annotations.DependsOn +import app.revanced.patches.music.misc.integrations.patch.MusicIntegrationsPatch +import app.revanced.patches.music.misc.settings.bytecode.fingerprints.* +import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility +import app.revanced.util.integrations.Constants.MUSIC_INTEGRATIONS_PATH +import org.jf.dexlib2.iface.instruction.FiveRegisterInstruction +import org.jf.dexlib2.iface.instruction.OneRegisterInstruction + +@Name("music-settings-bytecode-patch") +@DependsOn([MusicIntegrationsPatch::class]) +@YouTubeMusicCompatibility +@Version("0.0.1") +class MusicSettingsBytecodePatch : BytecodePatch( + listOf( + PreferenceFingerprint, + SettingsHeadersFragmentFingerprint + ) +) { + override fun execute(context: BytecodeContext): PatchResult { + + SettingsHeadersFragmentFingerprint.result?.let { + with(it.mutableMethod) { + val targetIndex = it.scanResult.patternScanResult!!.endIndex + val targetRegister = (instruction(targetIndex) as OneRegisterInstruction).registerA + addInstruction( + targetIndex + 1, + "invoke-static {v$targetRegister}, $INTEGRATIONS_CLASS_DESCRIPTOR->setActivity(Ljava/lang/Object;)V" + ) + } + } ?: return SettingsHeadersFragmentFingerprint.toErrorResult() + + PreferenceFingerprint.result?.let { + with(it.mutableMethod) { + val targetIndex = it.scanResult.patternScanResult!!.endIndex + val keyRegister = (instruction(targetIndex) as FiveRegisterInstruction).registerD + val valueRegister = (instruction(targetIndex) as FiveRegisterInstruction).registerE + addInstruction( + targetIndex, + "invoke-static {v$keyRegister, v$valueRegister}, $INTEGRATIONS_CLASS_DESCRIPTOR->onPreferenceChanged(Ljava/lang/String;Z)V" + ) + } + } ?: return PreferenceFingerprint.toErrorResult() + + return PatchResultSuccess() + } + companion object { + const val INTEGRATIONS_CLASS_DESCRIPTOR = + "$MUSIC_INTEGRATIONS_PATH/settingsmenu/SharedPreferenceChangeListener;" + } +} diff --git a/src/main/kotlin/app/revanced/patches/music/misc/settings/patch/MusicSettingsPatch.kt b/src/main/kotlin/app/revanced/patches/music/misc/settings/resource/patch/MusicSettingsPatch.kt similarity index 56% rename from src/main/kotlin/app/revanced/patches/music/misc/settings/patch/MusicSettingsPatch.kt rename to src/main/kotlin/app/revanced/patches/music/misc/settings/resource/patch/MusicSettingsPatch.kt index 427c28d98..53e0cf18a 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/settings/patch/MusicSettingsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/settings/resource/patch/MusicSettingsPatch.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.music.misc.settings.patch +package app.revanced.patches.music.misc.settings.resource.patch import app.revanced.patcher.annotation.Description import app.revanced.patcher.annotation.Name @@ -7,18 +7,22 @@ import app.revanced.patcher.data.ResourceContext import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.DependsOn -import app.revanced.patches.music.misc.integrations.patch.MusicIntegrationsPatch +import app.revanced.patches.music.misc.settings.bytecode.patch.MusicSettingsBytecodePatch import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility import app.revanced.patches.shared.patch.settings.AbstractSettingsResourcePatch +import app.revanced.util.enum.CategoryType +import app.revanced.util.enum.CategoryType.* import app.revanced.util.resources.MusicResourceHelper.addMusicPreference +import app.revanced.util.resources.MusicResourceHelper.addMusicPreferenceAlt import app.revanced.util.resources.MusicResourceHelper.addMusicPreferenceCategory +import app.revanced.util.resources.MusicResourceHelper.addMusicPreferenceWithIntent import app.revanced.util.resources.MusicResourceHelper.addReVancedMusicPreference import app.revanced.util.resources.MusicResourceHelper.sortMusicPreferenceCategory import org.w3c.dom.Element @Name("music-settings") @Description("Adds settings for ReVanced to YouTube Music.") -@DependsOn([MusicIntegrationsPatch::class]) +@DependsOn([MusicSettingsBytecodePatch::class]) @YouTubeMusicCompatibility @Version("0.0.1") class MusicSettingsPatch : AbstractSettingsResourcePatch( @@ -56,13 +60,39 @@ class MusicSettingsPatch : AbstractSettingsResourcePatch( private lateinit var contexts: ResourceContext internal fun addMusicPreference( - category: String, + category: CategoryType, key: String, defaultValue: String ) { - contexts.addMusicPreferenceCategory(category) - contexts.sortMusicPreferenceCategory() - contexts.addMusicPreference(category, key, defaultValue) + val categoryValue = category.value + contexts.addMusicPreferenceCategory(categoryValue) + contexts.addMusicPreference(categoryValue, key, defaultValue) + contexts.sortMusicPreferenceCategory(categoryValue) + } + + internal fun addMusicPreferenceAlt( + category: CategoryType, + key: String, + defaultValue: String, + dependencyKey: String + + ) { + val categoryValue = category.value + contexts.addMusicPreferenceCategory(categoryValue) + contexts.addMusicPreferenceAlt(categoryValue, key, defaultValue, dependencyKey) + contexts.sortMusicPreferenceCategory(categoryValue) + } + + internal fun addMusicPreferenceWithIntent( + category: CategoryType, + key: String, + dependencyKey: String + + ) { + val categoryValue = category.value + contexts.addMusicPreferenceCategory(categoryValue) + contexts.addMusicPreferenceWithIntent(categoryValue, key, dependencyKey) + contexts.sortMusicPreferenceCategory(categoryValue) } } } diff --git a/src/main/kotlin/app/revanced/patches/music/layout/shuffle/fingerprints/MusicPlaybackControlsFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/misc/shuffle/fingerprints/MusicPlaybackControlsFingerprint.kt similarity index 89% rename from src/main/kotlin/app/revanced/patches/music/layout/shuffle/fingerprints/MusicPlaybackControlsFingerprint.kt rename to src/main/kotlin/app/revanced/patches/music/misc/shuffle/fingerprints/MusicPlaybackControlsFingerprint.kt index 5e9cd2fe2..c1aed8278 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/shuffle/fingerprints/MusicPlaybackControlsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/shuffle/fingerprints/MusicPlaybackControlsFingerprint.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.music.layout.shuffle.fingerprints +package app.revanced.patches.music.misc.shuffle.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint diff --git a/src/main/kotlin/app/revanced/patches/music/layout/shuffle/fingerprints/ShuffleClassFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/misc/shuffle/fingerprints/ShuffleClassFingerprint.kt similarity index 93% rename from src/main/kotlin/app/revanced/patches/music/layout/shuffle/fingerprints/ShuffleClassFingerprint.kt rename to src/main/kotlin/app/revanced/patches/music/misc/shuffle/fingerprints/ShuffleClassFingerprint.kt index 2a3114899..2b7404528 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/shuffle/fingerprints/ShuffleClassFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/shuffle/fingerprints/ShuffleClassFingerprint.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.music.layout.shuffle.fingerprints +package app.revanced.patches.music.misc.shuffle.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint diff --git a/src/main/kotlin/app/revanced/patches/music/layout/shuffle/fingerprints/ShuffleClassReferenceFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/misc/shuffle/fingerprints/ShuffleClassReferenceFingerprint.kt similarity index 90% rename from src/main/kotlin/app/revanced/patches/music/layout/shuffle/fingerprints/ShuffleClassReferenceFingerprint.kt rename to src/main/kotlin/app/revanced/patches/music/misc/shuffle/fingerprints/ShuffleClassReferenceFingerprint.kt index 2a4263660..1355d7794 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/shuffle/fingerprints/ShuffleClassReferenceFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/shuffle/fingerprints/ShuffleClassReferenceFingerprint.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.music.layout.shuffle.fingerprints +package app.revanced.patches.music.misc.shuffle.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint diff --git a/src/main/kotlin/app/revanced/patches/music/layout/shuffle/patch/EnforceShufflePatch.kt b/src/main/kotlin/app/revanced/patches/music/misc/shuffle/patch/EnforceShufflePatch.kt similarity index 91% rename from src/main/kotlin/app/revanced/patches/music/layout/shuffle/patch/EnforceShufflePatch.kt rename to src/main/kotlin/app/revanced/patches/music/misc/shuffle/patch/EnforceShufflePatch.kt index 6f40dd8c1..89817ac6f 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/shuffle/patch/EnforceShufflePatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/shuffle/patch/EnforceShufflePatch.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.music.layout.shuffle.patch +package app.revanced.patches.music.misc.shuffle.patch import app.revanced.extensions.toErrorResult import app.revanced.extensions.transformFields @@ -16,13 +16,12 @@ import app.revanced.patcher.util.TypeUtil.traverseClassHierarchy import app.revanced.patcher.util.proxy.mutableTypes.MutableField.Companion.toMutable import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable import app.revanced.patcher.util.smali.toInstructions -import app.revanced.patches.music.layout.shuffle.fingerprints.MusicPlaybackControlsFingerprint -import app.revanced.patches.music.layout.shuffle.fingerprints.ShuffleClassFingerprint -import app.revanced.patches.music.layout.shuffle.fingerprints.ShuffleClassReferenceFingerprint import app.revanced.patches.music.misc.resourceid.patch.SharedResourceIdPatch -import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch +import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch +import app.revanced.patches.music.misc.shuffle.fingerprints.* import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility -import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH +import app.revanced.util.enum.CategoryType +import app.revanced.util.integrations.Constants.MUSIC_MISC_PATH import org.jf.dexlib2.AccessFlags import org.jf.dexlib2.dexbacked.reference.DexBackedMethodReference import org.jf.dexlib2.iface.instruction.ReferenceInstruction @@ -132,7 +131,7 @@ class EnforceShufflePatch : BytecodePatch( null, ImmutableMethodImplementation( 5, """ - invoke-static {}, $MUSIC_SETTINGS_PATH->enableForceShuffle()Z + invoke-static {}, $MUSIC_MISC_PATH/ForceShufflePatch;->enableForceShuffle()Z move-result v0 if-eqz v0, :cond_0 new-instance v0, $SHUFFLE_CLASS @@ -158,7 +157,7 @@ class EnforceShufflePatch : BytecodePatch( ) } ?: return MusicPlaybackControlsFingerprint.toErrorResult() - MusicSettingsPatch.addMusicPreference("listening", "revanced_enable_force_shuffle", "true") + MusicSettingsPatch.addMusicPreference(CategoryType.MISC, "revanced_enable_force_shuffle", "true") return PatchResultSuccess() } diff --git a/src/main/kotlin/app/revanced/patches/music/layout/tastebuilder/fingerprints/TasteBuilderConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/misc/tastebuilder/fingerprints/TasteBuilderConstructorFingerprint.kt similarity index 94% rename from src/main/kotlin/app/revanced/patches/music/layout/tastebuilder/fingerprints/TasteBuilderConstructorFingerprint.kt rename to src/main/kotlin/app/revanced/patches/music/misc/tastebuilder/fingerprints/TasteBuilderConstructorFingerprint.kt index 22158db3e..770885f4e 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/tastebuilder/fingerprints/TasteBuilderConstructorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/tastebuilder/fingerprints/TasteBuilderConstructorFingerprint.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.music.layout.tastebuilder.fingerprints +package app.revanced.patches.music.misc.tastebuilder.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod diff --git a/src/main/kotlin/app/revanced/patches/music/layout/tastebuilder/patch/RemoveTasteBuilderPatch.kt b/src/main/kotlin/app/revanced/patches/music/misc/tastebuilder/patch/RemoveTasteBuilderPatch.kt similarity index 85% rename from src/main/kotlin/app/revanced/patches/music/layout/tastebuilder/patch/RemoveTasteBuilderPatch.kt rename to src/main/kotlin/app/revanced/patches/music/misc/tastebuilder/patch/RemoveTasteBuilderPatch.kt index b7feb8f78..899fb7efb 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/tastebuilder/patch/RemoveTasteBuilderPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/tastebuilder/patch/RemoveTasteBuilderPatch.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.music.layout.tastebuilder.patch +package app.revanced.patches.music.misc.tastebuilder.patch import app.revanced.extensions.toErrorResult import app.revanced.patcher.annotation.Description @@ -10,7 +10,7 @@ import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.Patch -import app.revanced.patches.music.layout.tastebuilder.fingerprints.TasteBuilderConstructorFingerprint +import app.revanced.patches.music.misc.tastebuilder.fingerprints.TasteBuilderConstructorFingerprint import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility import org.jf.dexlib2.iface.instruction.formats.Instruction22c @@ -33,7 +33,7 @@ class RemoveTasteBuilderPatch : BytecodePatch( addInstructions( insertIndex, """ const/16 v1, 0x8 - invoke-virtual {v${register}, v1}, Landroid/view/View;->setVisibility(I)V + invoke-virtual {v$register, v1}, Landroid/view/View;->setVisibility(I)V """ ) } diff --git a/src/main/kotlin/app/revanced/patches/music/misc/translations/patch/MusicTranslationsPatch.kt b/src/main/kotlin/app/revanced/patches/music/misc/translations/patch/MusicTranslationsPatch.kt index 6cc3d14f3..2d95015bf 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/translations/patch/MusicTranslationsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/translations/patch/MusicTranslationsPatch.kt @@ -9,7 +9,7 @@ import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.ResourcePatch import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.patch.annotations.Patch -import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch +import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility import app.revanced.util.resources.ResourceHelper.addTranslations diff --git a/src/main/kotlin/app/revanced/patches/music/misc/versionspoof/patch/SpoofAppVersionPatch.kt b/src/main/kotlin/app/revanced/patches/music/misc/versionspoof/patch/SpoofAppVersionPatch.kt index a6ac15436..d7c476c97 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/versionspoof/patch/SpoofAppVersionPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/versionspoof/patch/SpoofAppVersionPatch.kt @@ -9,10 +9,11 @@ import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.patch.annotations.Patch -import app.revanced.patches.music.misc.settings.patch.MusicSettingsPatch +import app.revanced.patches.music.misc.settings.resource.patch.MusicSettingsPatch import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility import app.revanced.patches.shared.patch.versionspoof.GeneralVersionSpoofPatch -import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH +import app.revanced.util.enum.CategoryType +import app.revanced.util.integrations.Constants.MUSIC_MISC_PATH @Patch @Name("spoof-version") @@ -28,9 +29,9 @@ import app.revanced.util.integrations.Constants.MUSIC_SETTINGS_PATH class SpoofAppVersionPatch : BytecodePatch() { override fun execute(context: BytecodeContext): PatchResult { - GeneralVersionSpoofPatch.injectSpoof("$MUSIC_SETTINGS_PATH->spoofVersion(Ljava/lang/String;)Ljava/lang/String;") + GeneralVersionSpoofPatch.injectSpoof("$MUSIC_MISC_PATH/SpoofAppVersionPatch;->getVersionOverride(Ljava/lang/String;)Ljava/lang/String;") - MusicSettingsPatch.addMusicPreference("navigation", "revanced_enable_spoof_version", "false") + MusicSettingsPatch.addMusicPreference(CategoryType.MISC, "revanced_spoof_app_version", "false") return PatchResultSuccess() } diff --git a/src/main/kotlin/app/revanced/patches/music/misc/videoid/patch/MusicVideoIdPatch.kt b/src/main/kotlin/app/revanced/patches/music/misc/videoid/patch/MusicVideoIdPatch.kt index a63cce749..a10143869 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/videoid/patch/MusicVideoIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/videoid/patch/MusicVideoIdPatch.kt @@ -12,7 +12,7 @@ import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.music.misc.videoid.fingerprint.MusicVideoIdFingerprint import app.revanced.patches.shared.annotation.YouTubeMusicCompatibility -import app.revanced.util.integrations.Constants.VIDEO_PATH +import app.revanced.util.integrations.Constants.MUSIC_UTILS_PATH import org.jf.dexlib2.iface.instruction.OneRegisterInstruction @Name("music-video-id-hook") @@ -42,7 +42,7 @@ class MusicVideoIdPatch : BytecodePatch( } companion object { - const val INTEGRATIONS_CLASS_DESCRIPTOR = "$VIDEO_PATH/VideoInformation;" + const val INTEGRATIONS_CLASS_DESCRIPTOR = "$MUSIC_UTILS_PATH/VideoInformation;" private var offset = 0 diff --git a/src/main/kotlin/app/revanced/patches/shared/patch/integrations/AbstractIntegrationsPatch.kt b/src/main/kotlin/app/revanced/patches/shared/patch/integrations/AbstractIntegrationsPatch.kt index ff9f21796..3d504535b 100644 --- a/src/main/kotlin/app/revanced/patches/shared/patch/integrations/AbstractIntegrationsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/patch/integrations/AbstractIntegrationsPatch.kt @@ -1,5 +1,6 @@ package app.revanced.patches.shared.patch.integrations +import app.revanced.extensions.toErrorResult import app.revanced.patcher.annotation.Description import app.revanced.patcher.annotation.Version import app.revanced.patcher.data.BytecodeContext @@ -9,13 +10,13 @@ import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResultError import app.revanced.patcher.patch.PatchResultSuccess -import app.revanced.extensions.toErrorResult -import app.revanced.util.integrations.Constants.INTEGRATIONS_PATH +import app.revanced.patches.shared.patch.integrations.AbstractIntegrationsPatch.IntegrationsFingerprint.RegisterResolver import org.jf.dexlib2.iface.Method @Description("Applies mandatory patches to implement the ReVanced integrations into the application.") @Version("0.0.1") abstract class AbstractIntegrationsPatch( + private val integrationsDescriptor: String, private val hooks: Iterable ) : BytecodePatch(hooks) { /** @@ -29,14 +30,15 @@ abstract class AbstractIntegrationsPatch( customFingerprint: ((methodDef: Method) -> Boolean)? = null, private val contextRegisterResolver: (Method) -> Int = object : RegisterResolver {} ) : MethodFingerprint(strings = strings, customFingerprint = customFingerprint) { - fun invoke(): PatchResult { + + fun invoke(integrationsDescriptor: String): PatchResult { result?.mutableMethod?.let { method -> val contextRegister = contextRegisterResolver(method) method.addInstruction( 0, "sput-object v$contextRegister, " + - "$INTEGRATIONS_CLASS_DESCRIPTOR->context:Landroid/content/Context;" + "$integrationsDescriptor->context:Landroid/content/Context;" ) } ?: return toErrorResult() return PatchResultSuccess() @@ -48,9 +50,9 @@ abstract class AbstractIntegrationsPatch( } override fun execute(context: BytecodeContext): PatchResult { - if (context.findClass(INTEGRATIONS_CLASS_DESCRIPTOR) == null) return MISSING_INTEGRATIONS + if (context.findClass(integrationsDescriptor) == null) return MISSING_INTEGRATIONS - for (hook in hooks) hook.invoke().let { + for (hook in hooks) hook.invoke(integrationsDescriptor).let { if (it is PatchResultError) return it } @@ -58,8 +60,6 @@ abstract class AbstractIntegrationsPatch( } private companion object { - const val INTEGRATIONS_CLASS_DESCRIPTOR = - "$INTEGRATIONS_PATH/utils/ReVancedUtils;" val MISSING_INTEGRATIONS = PatchResultError( "Integrations have not been merged yet. " + "This patch can not succeed without merging the integrations." diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/patch/IntegrationsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/patch/IntegrationsPatch.kt index 81f43fcea..08180e269 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/patch/IntegrationsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/patch/IntegrationsPatch.kt @@ -5,10 +5,12 @@ import app.revanced.patcher.patch.annotations.RequiresIntegrations import app.revanced.patches.shared.annotation.YouTubeCompatibility import app.revanced.patches.shared.patch.integrations.AbstractIntegrationsPatch import app.revanced.patches.youtube.misc.integrations.fingerprints.* +import app.revanced.util.integrations.Constants.INTEGRATIONS_PATH @Name("integrations") @YouTubeCompatibility @RequiresIntegrations class IntegrationsPatch : AbstractIntegrationsPatch( + "$INTEGRATIONS_PATH/utils/ReVancedUtils;", listOf(InitFingerprint, StandalonePlayerFingerprint, ServiceFingerprint), ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/util/enum/CategoryType.kt b/src/main/kotlin/app/revanced/util/enum/CategoryType.kt new file mode 100644 index 000000000..e796f7e0e --- /dev/null +++ b/src/main/kotlin/app/revanced/util/enum/CategoryType.kt @@ -0,0 +1,7 @@ +package app.revanced.util.enum + +internal enum class CategoryType(val value: String) { + ADS("ads"), + LAYOUT("layout"), + MISC("misc") +} \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/util/integrations/Constants.kt b/src/main/kotlin/app/revanced/util/integrations/Constants.kt index a7b044cfa..6dcf8cd08 100644 --- a/src/main/kotlin/app/revanced/util/integrations/Constants.kt +++ b/src/main/kotlin/app/revanced/util/integrations/Constants.kt @@ -5,9 +5,7 @@ internal object Constants { const val PATCHES_PATH = "$INTEGRATIONS_PATH/patches" const val ADS_PATH = "$PATCHES_PATH/ads" - const val SWIPE_PATH = "$PATCHES_PATH/swipe" - const val BOTTOM_PLAYER = "$PATCHES_PATH/layout/BottomPlayerPatch;" const val FLYOUT_PANEL = "$PATCHES_PATH/layout/FlyoutPanelPatch;" const val FULLSCREEN = "$PATCHES_PATH/layout/FullscreenPatch;" @@ -16,15 +14,16 @@ internal object Constants { const val PLAYER = "$PATCHES_PATH/layout/PlayerPatch;" const val SEEKBAR = "$PATCHES_PATH/layout/SeekBarPatch;" const val SHORTS = "$PATCHES_PATH/layout/ShortsPatch;" - const val MISC_PATH = "$PATCHES_PATH/misc" - - const val MUSIC_PATH = "$PATCHES_PATH/music" - const val BUTTON_PATH = "$PATCHES_PATH/button" const val VIDEO_PATH = "$PATCHES_PATH/video" - const val UTILS_PATH = "$PATCHES_PATH/utils" - const val MUSIC_SETTINGS_PATH = "$INTEGRATIONS_PATH/settings/MusicSettings;" + const val MUSIC_INTEGRATIONS_PATH = "Lapp/revanced/music" + private const val MUSIC_PATCHES_PATH = "$MUSIC_INTEGRATIONS_PATH/patches" + + const val MUSIC_ADS_PATH = "$MUSIC_PATCHES_PATH/ads" + const val MUSIC_LAYOUT = "$MUSIC_PATCHES_PATH/layout/LayoutPatch;" + const val MUSIC_MISC_PATH = "$MUSIC_PATCHES_PATH/misc" + const val MUSIC_UTILS_PATH = "$MUSIC_PATCHES_PATH/utils" } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/util/resources/MusicResourceHelper.kt b/src/main/kotlin/app/revanced/util/resources/MusicResourceHelper.kt index ac4461006..95d74d188 100644 --- a/src/main/kotlin/app/revanced/util/resources/MusicResourceHelper.kt +++ b/src/main/kotlin/app/revanced/util/resources/MusicResourceHelper.kt @@ -34,8 +34,17 @@ internal object MusicResourceHelper { private const val YOUTUBE_MUSIC_PREFERENCE_TAG_NAME = "com.google.android.apps.youtube.music.ui.preference.SwitchCompatPreference" + private const val YOUTUBE_MUSIC_PREFERENCE_TARGET_CLASS = "com.google.android.libraries.strictmode.penalties.notification.FullStackTraceActivity" + private var currentMusicPreferenceCategory = emptyArray() + private var targetPackage = "com.google.android.apps.youtube.music" + + internal fun ResourceContext.setMicroG (newPackage: String) { + targetPackage = newPackage + replacePackageName() + } + private fun setMusicPreferenceCategory (newCategory: String) { currentMusicPreferenceCategory += listOf(newCategory) } @@ -59,20 +68,27 @@ internal object MusicResourceHelper { } } - internal fun ResourceContext.sortMusicPreferenceCategory() { + internal fun ResourceContext.sortMusicPreferenceCategory( + category: String + ) { this.xmlEditor[YOUTUBE_MUSIC_SETTINGS_PATH].use { editor -> editor.file.doRecursively loop@{ if (it !is Element) return@loop - currentMusicPreferenceCategory.forEach { category -> - it.getAttributeNode("android:key")?.let { attribute -> - if (attribute.textContent == "revanced_settings_$category") { - it.cloneNodes(it.parentNode) - } + it.getAttributeNode("android:key")?.let { attribute -> + if (attribute.textContent == "revanced_settings_$category") { + it.cloneNodes(it.parentNode) } } } } + replacePackageName() + } + + private fun ResourceContext.replacePackageName(){ + this[YOUTUBE_MUSIC_SETTINGS_PATH].writeText( + this[YOUTUBE_MUSIC_SETTINGS_PATH].readText().replace("\"com.google.android.apps.youtube.music", "\"" + targetPackage) + ) } internal fun ResourceContext.addMusicPreference( @@ -95,6 +111,54 @@ internal object MusicResourceHelper { } } + internal fun ResourceContext.addMusicPreferenceAlt( + category: String, + key: String, + defaultValue: String, + dependencyKey: String + ) { + this.xmlEditor[YOUTUBE_MUSIC_SETTINGS_PATH].use { editor -> + val tags = editor.file.getElementsByTagName(YOUTUBE_MUSIC_CATEGORY_TAG_NAME) + List(tags.length) { tags.item(it) as Element } + .filter { it.getAttribute("android:key").contains("revanced_settings_$category") } + .forEach { + it.adoptChild(YOUTUBE_MUSIC_PREFERENCE_TAG_NAME) { + setAttribute("android:title", "@string/$key" + "_title") + setAttribute("android:summaryOn", "@string/$key" + "_summary_on") + setAttribute("android:summaryOff", "@string/$key" + "_summary_off") + setAttribute("android:key", key) + setAttribute("android:defaultValue", defaultValue) + setAttribute("android:dependency", dependencyKey) + } + } + } + } + + internal fun ResourceContext.addMusicPreferenceWithIntent( + category: String, + key: String, + dependencyKey: String + ) { + this.xmlEditor[YOUTUBE_MUSIC_SETTINGS_PATH].use { editor -> + val tags = editor.file.getElementsByTagName(YOUTUBE_MUSIC_CATEGORY_TAG_NAME) + List(tags.length) { tags.item(it) as Element } + .filter { it.getAttribute("android:key").contains("revanced_settings_$category") } + .forEach { + it.adoptChild("Preference") { + setAttribute("android:title", "@string/$key" + "_title") + setAttribute("android:summary", "@string/$key" + "_summary") + setAttribute("android:key", key) + setAttribute("android:dependency", dependencyKey) + this.adoptChild("intent") { + setAttribute("android:targetPackage", targetPackage) + setAttribute("android:data", key) + setAttribute("android:targetClass", YOUTUBE_MUSIC_PREFERENCE_TARGET_CLASS) + } + } + } + } + } + internal fun ResourceContext.addReVancedMusicPreference() { this.xmlEditor[YOUTUBE_MUSIC_SETTINGS_PATH].use { editor -> with (editor.file) {