From 6633eb515f3a92e9658ce6f4cae39885d6186dbd Mon Sep 17 00:00:00 2001 From: inotia00 <108592928+inotia00@users.noreply.github.com> Date: Sat, 25 Nov 2023 13:30:56 +0900 Subject: [PATCH] feat(YouTube Music/Settings): add `Open MicroG` settings --- .../music/utils/microg/MicroGResourcePatch.kt | 19 ++++++++++++- .../app/revanced/util/microg/Constants.kt | 9 +++++-- .../util/resources/MusicResourceHelper.kt | 27 +++++++++++++++++++ .../music/settings/host/values/strings.xml | 6 +++++ 4 files changed, 58 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/music/utils/microg/MicroGResourcePatch.kt b/src/main/kotlin/app/revanced/patches/music/utils/microg/MicroGResourcePatch.kt index 461b47b34..9d2d7773b 100644 --- a/src/main/kotlin/app/revanced/patches/music/utils/microg/MicroGResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/utils/microg/MicroGResourcePatch.kt @@ -7,13 +7,23 @@ import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.music.utils.microg.Constants.MUSIC_PACKAGE_NAME import app.revanced.patches.music.utils.microg.Constants.SPOOFED_PACKAGE_NAME import app.revanced.patches.music.utils.microg.Constants.SPOOFED_PACKAGE_SIGNATURE +import app.revanced.patches.music.utils.settings.SettingsPatch import app.revanced.patches.shared.patch.packagename.PackageNamePatch +import app.revanced.util.enum.CategoryType +import app.revanced.util.microg.Constants.MICROG_PACKAGE_NAME import app.revanced.util.microg.MicroGManifestHelper.addSpoofingMetadata import app.revanced.util.microg.MicroGResourceHelper.patchManifest +import app.revanced.util.resources.MusicResourceHelper.addMicroGPreference import app.revanced.util.resources.MusicResourceHelper.setMicroG -@Patch(dependencies = [PackageNamePatch::class]) +@Patch( + dependencies = [ + PackageNamePatch::class, + SettingsPatch::class + ] +) object MicroGResourcePatch : ResourcePatch() { + private const val MICROG_TARGET_CLASS = "org.microg.gms.ui.SettingsActivity" override fun execute(context: ResourceContext) { val packageName = PackageNamePatch.PackageNameYouTubeMusic ?: throw PatchException("Invalid package name.") @@ -35,5 +45,12 @@ object MicroGResourcePatch : ResourcePatch() { context.setMicroG(packageName) + context.addMicroGPreference( + CategoryType.MISC.value, + "microg_settings", + MICROG_PACKAGE_NAME, + MICROG_TARGET_CLASS + ) + } } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/util/microg/Constants.kt b/src/main/kotlin/app/revanced/util/microg/Constants.kt index 0eb8938b8..3c280af7f 100644 --- a/src/main/kotlin/app/revanced/util/microg/Constants.kt +++ b/src/main/kotlin/app/revanced/util/microg/Constants.kt @@ -10,16 +10,21 @@ internal object Constants { */ const val MICROG_VENDOR = "com.mgoogle" + /** + * microG package name + */ + const val MICROG_PACKAGE_NAME = "$MICROG_VENDOR.android.gms" + /** * meta-data for microG package name spoofing on patched builds */ - const val META_SPOOFED_PACKAGE_NAME = "$MICROG_VENDOR.android.gms.SPOOFED_PACKAGE_NAME" + const val META_SPOOFED_PACKAGE_NAME = "$MICROG_PACKAGE_NAME.SPOOFED_PACKAGE_NAME" /** * meta-data for microG package signature spoofing on patched builds */ const val META_SPOOFED_PACKAGE_SIGNATURE = - "$MICROG_VENDOR.android.gms.SPOOFED_PACKAGE_SIGNATURE" + "$MICROG_PACKAGE_NAME.SPOOFED_PACKAGE_SIGNATURE" /** * meta-data for microG package detection diff --git a/src/main/kotlin/app/revanced/util/resources/MusicResourceHelper.kt b/src/main/kotlin/app/revanced/util/resources/MusicResourceHelper.kt index 2e486a5c5..a1e0daa60 100644 --- a/src/main/kotlin/app/revanced/util/resources/MusicResourceHelper.kt +++ b/src/main/kotlin/app/revanced/util/resources/MusicResourceHelper.kt @@ -107,6 +107,33 @@ internal object MusicResourceHelper { ) } + internal fun ResourceContext.addMicroGPreference( + category: String, + key: String, + packageName: String, + targetClassName: String + ) { + this.xmlEditor[YOUTUBE_MUSIC_SETTINGS_PATH].use { editor -> + val tags = editor.file.getElementsByTagName(YOUTUBE_MUSIC_PREFERENCE_SCREEN_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") + this.adoptChild("intent") { + setAttribute("android:targetPackage", packageName) + setAttribute("android:data", key) + setAttribute( + "android:targetClass", + targetClassName + ) + } + } + } + } + } + internal fun ResourceContext.addMusicPreference( category: String, key: String, diff --git a/src/main/resources/music/settings/host/values/strings.xml b/src/main/resources/music/settings/host/values/strings.xml index 917ee28e0..b7900a419 100644 --- a/src/main/resources/music/settings/host/values/strings.xml +++ b/src/main/resources/music/settings/host/values/strings.xml @@ -1,5 +1,11 @@ + Please install MicroG. + MicroG is not found. + MicroG does not run in the background. + Enable cloud messaging settings to receive notifications. + Open MicroG + Account Action Bar Ads