diff --git a/src/main/kotlin/app/revanced/patches/music/general/startpage/fingerprints/ColdStartUpFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/general/startpage/fingerprints/ColdStartUpFingerprint.kt new file mode 100644 index 000000000..4ea4ca09f --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/general/startpage/fingerprints/ColdStartUpFingerprint.kt @@ -0,0 +1,18 @@ +package app.revanced.patches.music.general.startpage.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode + +object ColdStartUpFingerprint : MethodFingerprint( + returnType = "Ljava/lang/String;", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = emptyList(), + opcodes = listOf( + Opcode.GOTO, + Opcode.CONST_STRING, + Opcode.RETURN_OBJECT + ), + strings = listOf("FEmusic_library_sideloaded_tracks", "FEmusic_home") +) diff --git a/src/main/kotlin/app/revanced/patches/music/general/startpage/patch/StartPagePatch.kt b/src/main/kotlin/app/revanced/patches/music/general/startpage/patch/StartPagePatch.kt new file mode 100644 index 000000000..b28846469 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/general/startpage/patch/StartPagePatch.kt @@ -0,0 +1,65 @@ +package app.revanced.patches.music.general.startpage.patch + +import app.revanced.extensions.exception +import app.revanced.patcher.annotation.Description +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.extensions.InstructionExtensions.removeInstruction +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.annotations.DependsOn +import app.revanced.patcher.patch.annotations.Patch +import app.revanced.patches.music.general.startpage.fingerprints.ColdStartUpFingerprint +import app.revanced.patches.music.utils.annotations.MusicCompatibility +import app.revanced.patches.music.utils.intenthook.patch.IntentHookPatch +import app.revanced.patches.music.utils.settings.resource.patch.SettingsPatch +import app.revanced.patches.music.utils.settings.resource.patch.SettingsPatch.Companion.contexts +import app.revanced.util.enum.CategoryType +import app.revanced.util.integrations.Constants.MUSIC_GENERAL +import app.revanced.util.resources.ResourceUtils.copyXmlNode +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction + +@Patch +@Name("Start page") +@Description("Set the default start page.") +@DependsOn( + [ + IntentHookPatch::class, + SettingsPatch::class + ] +) +@MusicCompatibility +class StartPagePatch : BytecodePatch( + listOf(ColdStartUpFingerprint) +) { + override fun execute(context: BytecodeContext) { + + ColdStartUpFingerprint.result?.let { + it.mutableMethod.apply { + val targetIndex = it.scanResult.patternScanResult!!.endIndex + val targetRegister = getInstruction(targetIndex).registerA + + addInstructions( + targetIndex + 1, """ + invoke-static {v$targetRegister}, $MUSIC_GENERAL->setStartPage(Ljava/lang/String;)Ljava/lang/String; + move-result-object v$targetRegister + return-object v$targetRegister + """ + ) + removeInstruction(targetIndex) + } + } ?: throw ColdStartUpFingerprint.exception + + /** + * Copy arrays + */ + contexts.copyXmlNode("music/startpage/host", "values/arrays.xml", "resources") + + SettingsPatch.addMusicPreferenceWithIntent( + CategoryType.GENERAL, + "revanced_start_page" + ) + + } +} diff --git a/src/main/resources/music/settings/host/values/strings.xml b/src/main/resources/music/settings/host/values/strings.xml index 64e7fbafb..d11b625fa 100644 --- a/src/main/resources/music/settings/host/values/strings.xml +++ b/src/main/resources/music/settings/host/values/strings.xml @@ -145,6 +145,13 @@ Changing default Wi-Fi quality to: Trick the YouTube Music version to v4.27.53 for Canadian users. Spoof app version + Chart + Explore + Home + Library + Subscription + Set the start page. + Start page Enable SponsorBlock SponsorBlock is a crowd-sourced system for skipping annoying parts of YouTube videos. diff --git a/src/main/resources/music/startpage/host/values/arrays.xml b/src/main/resources/music/startpage/host/values/arrays.xml new file mode 100644 index 000000000..21a2ff9c7 --- /dev/null +++ b/src/main/resources/music/startpage/host/values/arrays.xml @@ -0,0 +1,17 @@ + + + + @string/revanced_start_page_entry_chart + @string/revanced_start_page_entry_explore + @string/revanced_start_page_entry_home + @string/revanced_start_page_entry_library + @string/revanced_start_page_entry_subscription + + + FEmusic_charts + FEmusic_explore + FEmusic_home + FEmusic_library_landing + FEmusic_library_corpus_artists + +