diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/musicsearch/MusicSearchPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/musicsearch/MusicSearchPatch.kt new file mode 100644 index 000000000..72318487b --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/general/musicsearch/MusicSearchPatch.kt @@ -0,0 +1,67 @@ +package app.revanced.patches.youtube.general.musicsearch + +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.youtube.general.musicsearch.fingerprints.VoiceSearchConfigFingerprint +import app.revanced.patches.youtube.utils.settings.SettingsPatch +import app.revanced.util.integrations.Constants.GENERAL + +@Patch( + name = "Enable music search", + description = "Enables music search in the voice search screen.", + dependencies = [SettingsPatch::class], + compatiblePackages = [ + CompatiblePackage( + "com.google.android.youtube", + [ + "18.30.37", + "18.31.40", + "18.32.39", + "18.33.40", + "18.34.38", + "18.35.36", + "18.36.39", + "18.37.36", + "18.38.44", + "18.39.41", + "18.40.34" + ] + ) + ], + use = false +) +@Suppress("unused") +object MusicSearchPatch : BytecodePatch( + setOf(VoiceSearchConfigFingerprint) +) { + override fun execute(context: BytecodeContext) { + + VoiceSearchConfigFingerprint.result?.let { + it.mutableMethod.apply { + addInstructions( + 0, """ + invoke-static { }, $GENERAL->enableMusicSearch()Z + move-result v0 + return v0 + """ + ) + } + } ?: throw VoiceSearchConfigFingerprint.exception + + /** + * Add settings + */ + SettingsPatch.addPreference( + arrayOf( + "PREFERENCE: GENERAL_SETTINGS", + "SETTINGS: ENABLE_MUSIC_SEARCH" + ) + ) + + SettingsPatch.updatePatchStatus("Enable music search") + } +} diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/musicsearch/fingerprints/VoiceSearchConfigFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/musicsearch/fingerprints/VoiceSearchConfigFingerprint.kt new file mode 100644 index 000000000..f483b73ff --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/general/musicsearch/fingerprints/VoiceSearchConfigFingerprint.kt @@ -0,0 +1,9 @@ +package app.revanced.patches.youtube.general.musicsearch.fingerprints + +import app.revanced.patcher.fingerprint.MethodFingerprint +import app.revanced.util.bytecode.isWide32LiteralExists + +object VoiceSearchConfigFingerprint : MethodFingerprint( + returnType = "Z", + customFingerprint = { methodDef, _ -> methodDef.isWide32LiteralExists(45417109) } +) \ No newline at end of file diff --git a/src/main/resources/youtube/settings/host/values/strings.xml b/src/main/resources/youtube/settings/host/values/strings.xml index 8e676e856..482342f54 100644 --- a/src/main/resources/youtube/settings/host/values/strings.xml +++ b/src/main/resources/youtube/settings/host/values/strings.xml @@ -120,6 +120,9 @@ Language switch is disabled. Language switch is enabled. Enable language switch + Music search is disabled. + Music search is enabled. + Enable music search New splash animation is disabled. New splash animation is enabled. Enable new splash animation diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index 8cda48ca6..3414ad825 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -165,6 +165,9 @@ + + @@ -359,6 +362,7 @@ + @@ -580,25 +584,25 @@ PREFERENCE: SEEKBAR_SETTINGS --> - - - - - -