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

View File

@ -111,6 +111,9 @@ Only available to some users who can use the speed overlay"</string>
<string name="revanced_enable_external_browser_summary_off">External browser is disabled</string>
<string name="revanced_enable_external_browser_summary_on">External browser is enabled</string>
<string name="revanced_enable_external_browser_title">Enable external browser</string>
<string name="revanced_enable_gradient_loading_screen_summary_off">Gradient loading screen is disabled</string>
<string name="revanced_enable_gradient_loading_screen_summary_on">Gradient loading screen is enabled</string>
<string name="revanced_enable_gradient_loading_screen_title">Enable gradient loading screen</string>
<string name="revanced_enable_language_switch_summary_off">Language switch is disabled</string>
<string name="revanced_enable_language_switch_summary_on">Language switch is enabled</string>
<string name="revanced_enable_language_switch_title">Enable language switch</string>

View File

@ -148,6 +148,9 @@
<!-- SETTINGS: DISABLE_AUTO_CAPTIONS
<SwitchPreference android:title="@string/revanced_disable_auto_captions_title" android:key="revanced_disable_auto_captions" android:defaultValue="false" android:summaryOn="@string/revanced_disable_auto_captions_summary_on" android:summaryOff="@string/revanced_disable_auto_captions_summary_off" />SETTINGS: DISABLE_AUTO_CAPTIONS -->
<!-- SETTINGS: ENABLE_GRADIENT_LOADING_SCREEN
<SwitchPreference android:title="@string/revanced_enable_gradient_loading_screen_title" android:key="revanced_enable_gradient_loading_screen" android:defaultValue="false" android:summaryOn="@string/revanced_enable_gradient_loading_screen_summary_on" android:summaryOff="@string/revanced_enable_gradient_loading_screen_summary_off" />SETTINGS: ENABLE_GRADIENT_LOADING_SCREEN -->
<!-- SETTINGS: ENABLE_TABLET_MINI_PLAYER
<SwitchPreference android:title="@string/revanced_enable_tablet_mini_player_title" android:key="revanced_enable_tablet_mini_player" android:defaultValue="false" android:summaryOn="@string/revanced_enable_tablet_mini_player_summary_on" android:summaryOff="@string/revanced_enable_tablet_mini_player_summary_off" />SETTINGS: ENABLE_TABLET_MINI_PLAYER -->
@ -334,6 +337,7 @@
<Preference android:title=" " android:selectable="false" android:summary="@string/revanced_general" />
<Preference android:title="disable-auto-captions" android:summary="@string/revanced_patches_excluded" android:selectable="false"/>
<Preference android:title="enable-gradient-loading-screen" android:summary="@string/revanced_patches_excluded" android:selectable="false"/>
<Preference android:title="enable-tablet-mini-player" android:summary="@string/revanced_patches_excluded" android:selectable="false"/>
<Preference android:title="enable-wide-search-bar" android:summary="@string/revanced_patches_excluded" android:selectable="false"/>
<Preference android:title="header-switch" android:summary="@string/revanced_patches_excluded" android:selectable="false"/>