feat(YouTube): add Enable gradient loading screen patch

This commit is contained in:
inotia00
2023-10-13 23:19:34 +09:00
parent e0492ff1c2
commit 294c6e514d
5 changed files with 116 additions and 0 deletions

View File

@ -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<OneRegisterInstruction>(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<OneRegisterInstruction>(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")
}
}

View File

@ -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) }
)

View File

@ -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) }
)