From 294c6e514d0f0fb82fed2feb8852cbbb5c5838f1 Mon Sep 17 00:00:00 2001 From: inotia00 <108592928+inotia00@users.noreply.github.com> Date: Fri, 13 Oct 2023 23:19:34 +0900 Subject: [PATCH] feat(YouTube): add `Enable gradient loading screen` patch --- .../GradientLoadingScreenPatch.kt | 93 +++++++++++++++++++ ...GradientLoadingScreenPrimaryFingerprint.kt | 8 ++ ...adientLoadingScreenSecondaryFingerprint.kt | 8 ++ .../youtube/settings/host/values/strings.xml | 3 + .../youtube/settings/xml/revanced_prefs.xml | 4 + 5 files changed, 116 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/GradientLoadingScreenPatch.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/fingerprints/GradientLoadingScreenPrimaryFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/fingerprints/GradientLoadingScreenSecondaryFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/GradientLoadingScreenPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/GradientLoadingScreenPatch.kt new file mode 100644 index 000000000..bf3d947ad --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/GradientLoadingScreenPatch.kt @@ -0,0 +1,93 @@ +package app.revanced.patches.youtube.general.loadingscreen + +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.youtube.general.loadingscreen.fingerprints.GradientLoadingScreenPrimaryFingerprint +import app.revanced.patches.youtube.general.loadingscreen.fingerprints.GradientLoadingScreenSecondaryFingerprint +import app.revanced.patches.youtube.utils.settings.SettingsPatch +import app.revanced.util.bytecode.getWide32LiteralIndex +import app.revanced.util.integrations.Constants.GENERAL +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction + +@Patch( + name = "Enable gradient loading screen", + description = "Enables gradient loading screen.", + dependencies = [SettingsPatch::class], + compatiblePackages = [ + CompatiblePackage( + "com.google.android.youtube", + [ + "18.24.37", + "18.25.40", + "18.27.36", + "18.29.38", + "18.30.37", + "18.31.40", + "18.32.39", + "18.33.40", + "18.34.38", + "18.35.36", + "18.36.39" + ] + ) + ] +) +@Suppress("unused") +object GradientLoadingScreenPatch : BytecodePatch( + setOf( + GradientLoadingScreenPrimaryFingerprint, + GradientLoadingScreenSecondaryFingerprint + ) +) { + override fun execute(context: BytecodeContext) { + + /** + * YouTube v18.29.38 ~ + */ + GradientLoadingScreenSecondaryFingerprint.result?.let { + it.mutableMethod.apply { + val targetIndex = getWide32LiteralIndex(45418917) + 2 + val targetRegister = getInstruction(targetIndex).registerA + + addInstructions( + targetIndex + 1, """ + invoke-static { }, $GENERAL->enableGradientLoadingScreen()Z + move-result v$targetRegister + """ + ) + } + } + + GradientLoadingScreenPrimaryFingerprint.result?.let { + it.mutableMethod.apply { + val targetIndex = getWide32LiteralIndex(45412406) + 2 + val targetRegister = getInstruction(targetIndex).registerA + + addInstructions( + targetIndex + 1, """ + invoke-static { }, $GENERAL->enableGradientLoadingScreen()Z + move-result v$targetRegister + """ + ) + } + } ?: throw GradientLoadingScreenPrimaryFingerprint.exception + + /** + * Add settings + */ + SettingsPatch.addPreference( + arrayOf( + "PREFERENCE: GENERAL_SETTINGS", + "SETTINGS: ENABLE_GRADIENT_LOADING_SCREEN" + ) + ) + + SettingsPatch.updatePatchStatus("enable-gradient-loading-screen") + + } +} diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/fingerprints/GradientLoadingScreenPrimaryFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/fingerprints/GradientLoadingScreenPrimaryFingerprint.kt new file mode 100644 index 000000000..967b1662e --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/fingerprints/GradientLoadingScreenPrimaryFingerprint.kt @@ -0,0 +1,8 @@ +package app.revanced.patches.youtube.general.loadingscreen.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import app.revanced.util.bytecode.isWide32LiteralExists + +object GradientLoadingScreenPrimaryFingerprint : MethodFingerprint( + customFingerprint = { methodDef, _ -> methodDef.isWide32LiteralExists(45412406) } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/fingerprints/GradientLoadingScreenSecondaryFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/fingerprints/GradientLoadingScreenSecondaryFingerprint.kt new file mode 100644 index 000000000..8c06bf12c --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/general/loadingscreen/fingerprints/GradientLoadingScreenSecondaryFingerprint.kt @@ -0,0 +1,8 @@ +package app.revanced.patches.youtube.general.loadingscreen.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import app.revanced.util.bytecode.isWide32LiteralExists + +object GradientLoadingScreenSecondaryFingerprint : MethodFingerprint( + customFingerprint = { methodDef, _ -> methodDef.isWide32LiteralExists(45418917) } +) \ 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 9edc4cc71..6503847a9 100644 --- a/src/main/resources/youtube/settings/host/values/strings.xml +++ b/src/main/resources/youtube/settings/host/values/strings.xml @@ -111,6 +111,9 @@ Only available to some users who can use the speed overlay" External browser is disabled External browser is enabled Enable external browser + Gradient loading screen is disabled + Gradient loading screen is enabled + Enable gradient loading screen Language switch is disabled Language switch is enabled Enable language switch diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index 05553f8e2..5bdddd3ab 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -148,6 +148,9 @@ + + @@ -334,6 +337,7 @@ +