mirror of
https://github.com/inotia00/revanced-patches.git
synced 2025-05-13 21:07:17 +02:00
feat(YouTube - Seekbar components): If the Custom braning icon
patch is included and the patch option Restore old splash animation
is enabled, it will not change the Seekbar color from the original splash animation (Lottie animation)
This commit is contained in:
parent
721f6043e9
commit
f6a5ffd3ba
@ -11,12 +11,14 @@ import app.revanced.patcher.util.smali.ExternalLabel
|
|||||||
import app.revanced.patches.shared.drawable.addDrawableColorHook
|
import app.revanced.patches.shared.drawable.addDrawableColorHook
|
||||||
import app.revanced.patches.shared.drawable.drawableColorHookPatch
|
import app.revanced.patches.shared.drawable.drawableColorHookPatch
|
||||||
import app.revanced.patches.shared.mainactivity.onCreateMethod
|
import app.revanced.patches.shared.mainactivity.onCreateMethod
|
||||||
|
import app.revanced.patches.youtube.layout.branding.icon.customBrandingIconPatch
|
||||||
import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE
|
import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE
|
||||||
import app.revanced.patches.youtube.utils.extension.Constants.PATCH_STATUS_CLASS_DESCRIPTOR
|
import app.revanced.patches.youtube.utils.extension.Constants.PATCH_STATUS_CLASS_DESCRIPTOR
|
||||||
import app.revanced.patches.youtube.utils.extension.Constants.PLAYER_CLASS_DESCRIPTOR
|
import app.revanced.patches.youtube.utils.extension.Constants.PLAYER_CLASS_DESCRIPTOR
|
||||||
import app.revanced.patches.youtube.utils.extension.Constants.PLAYER_PATH
|
import app.revanced.patches.youtube.utils.extension.Constants.PLAYER_PATH
|
||||||
import app.revanced.patches.youtube.utils.flyoutmenu.flyoutMenuHookPatch
|
import app.revanced.patches.youtube.utils.flyoutmenu.flyoutMenuHookPatch
|
||||||
import app.revanced.patches.youtube.utils.mainactivity.mainActivityResolvePatch
|
import app.revanced.patches.youtube.utils.mainactivity.mainActivityResolvePatch
|
||||||
|
import app.revanced.patches.youtube.utils.patch.PatchList.CUSTOM_BRANDING_ICON_FOR_YOUTUBE
|
||||||
import app.revanced.patches.youtube.utils.patch.PatchList.SEEKBAR_COMPONENTS
|
import app.revanced.patches.youtube.utils.patch.PatchList.SEEKBAR_COMPONENTS
|
||||||
import app.revanced.patches.youtube.utils.playerButtonsResourcesFingerprint
|
import app.revanced.patches.youtube.utils.playerButtonsResourcesFingerprint
|
||||||
import app.revanced.patches.youtube.utils.playerButtonsVisibilityFingerprint
|
import app.revanced.patches.youtube.utils.playerButtonsVisibilityFingerprint
|
||||||
@ -43,6 +45,7 @@ import app.revanced.util.fingerprint.injectLiteralInstructionBooleanCall
|
|||||||
import app.revanced.util.fingerprint.matchOrThrow
|
import app.revanced.util.fingerprint.matchOrThrow
|
||||||
import app.revanced.util.fingerprint.methodOrThrow
|
import app.revanced.util.fingerprint.methodOrThrow
|
||||||
import app.revanced.util.fingerprint.resolvable
|
import app.revanced.util.fingerprint.resolvable
|
||||||
|
import app.revanced.util.getBooleanOptionValue
|
||||||
import app.revanced.util.getReference
|
import app.revanced.util.getReference
|
||||||
import app.revanced.util.getWalkerMethod
|
import app.revanced.util.getWalkerMethod
|
||||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||||
@ -116,6 +119,9 @@ val seekbarComponentsPatch = bytecodePatch(
|
|||||||
|
|
||||||
execute {
|
execute {
|
||||||
|
|
||||||
|
val restoreOldSplashAnimationIncluded = CUSTOM_BRANDING_ICON_FOR_YOUTUBE.included == true &&
|
||||||
|
customBrandingIconPatch.getBooleanOptionValue("restoreOldSplashAnimationOption").value == true
|
||||||
|
|
||||||
var settingArray = arrayOf(
|
var settingArray = arrayOf(
|
||||||
"PREFERENCE_SCREEN: PLAYER",
|
"PREFERENCE_SCREEN: PLAYER",
|
||||||
"SETTINGS: SEEKBAR_COMPONENTS"
|
"SETTINGS: SEEKBAR_COMPONENTS"
|
||||||
@ -257,25 +263,27 @@ val seekbarComponentsPatch = bytecodePatch(
|
|||||||
"invoke-static/range { p4 .. p5 }, $EXTENSION_SEEKBAR_COLOR_CLASS_DESCRIPTOR->setLinearGradient([I[F)V"
|
"invoke-static/range { p4 .. p5 }, $EXTENSION_SEEKBAR_COLOR_CLASS_DESCRIPTOR->setLinearGradient([I[F)V"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Don't use the lotte splash screen layout if using custom seekbar.
|
if (!restoreOldSplashAnimationIncluded) {
|
||||||
arrayOf(
|
// Don't use the lotte splash screen layout if using custom seekbar.
|
||||||
launchScreenLayoutTypeFingerprint.methodOrThrow(),
|
arrayOf(
|
||||||
onCreateMethod
|
launchScreenLayoutTypeFingerprint.methodOrThrow(),
|
||||||
).forEach { method ->
|
onCreateMethod
|
||||||
method.apply {
|
).forEach { method ->
|
||||||
val literalIndex =
|
method.apply {
|
||||||
indexOfFirstLiteralInstructionOrThrow(launchScreenLayoutTypeLotteFeatureFlag)
|
val literalIndex =
|
||||||
val resultIndex =
|
indexOfFirstLiteralInstructionOrThrow(launchScreenLayoutTypeLotteFeatureFlag)
|
||||||
indexOfFirstInstructionOrThrow(literalIndex, Opcode.MOVE_RESULT)
|
val resultIndex =
|
||||||
val register = getInstruction<OneRegisterInstruction>(resultIndex).registerA
|
indexOfFirstInstructionOrThrow(literalIndex, Opcode.MOVE_RESULT)
|
||||||
|
val register = getInstruction<OneRegisterInstruction>(resultIndex).registerA
|
||||||
|
|
||||||
addInstructions(
|
addInstructions(
|
||||||
resultIndex + 1,
|
resultIndex + 1,
|
||||||
"""
|
"""
|
||||||
invoke-static { v$register }, $EXTENSION_SEEKBAR_COLOR_CLASS_DESCRIPTOR->useLotteLaunchSplashScreen(Z)Z
|
invoke-static { v$register }, $EXTENSION_SEEKBAR_COLOR_CLASS_DESCRIPTOR->useLotteLaunchSplashScreen(Z)Z
|
||||||
move-result v$register
|
move-result v$register
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -317,7 +325,7 @@ val seekbarComponentsPatch = bytecodePatch(
|
|||||||
scaleNode.replaceChild(replacementNode, shapeNode)
|
scaleNode.replaceChild(replacementNode, shapeNode)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_19_25_or_greater) {
|
if (is_19_25_or_greater && !restoreOldSplashAnimationIncluded) {
|
||||||
// Add attribute and styles for splash screen custom color.
|
// Add attribute and styles for splash screen custom color.
|
||||||
// Using a style is the only way to selectively change just the seekbar fill color.
|
// Using a style is the only way to selectively change just the seekbar fill color.
|
||||||
//
|
//
|
||||||
|
@ -20,6 +20,10 @@ private val classLoader = object {}.javaClass.classLoader
|
|||||||
fun Patch<*>.getStringOptionValue(key: String) =
|
fun Patch<*>.getStringOptionValue(key: String) =
|
||||||
options[key] as Option<String>
|
options[key] as Option<String>
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
fun Patch<*>.getBooleanOptionValue(key: String) =
|
||||||
|
options[key] as Option<Boolean>
|
||||||
|
|
||||||
fun Option<String>.valueOrThrow() = value
|
fun Option<String>.valueOrThrow() = value
|
||||||
?: throw PatchException("Invalid patch option: $title.")
|
?: throw PatchException("Invalid patch option: $title.")
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user