From 5b47a5f0f6299daaae209341064fd85f16ca18a6 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Wed, 22 Jan 2025 09:23:31 +0100 Subject: [PATCH] fix(YouTube - Theme): Fix 19.25 - 19.45 patch error --- patches/api/patches.api | 1 + .../swipecontrols/SwipeControlsPatch.kt | 7 +++-- .../youtube/layout/seekbar/Fingerprints.kt | 27 ++++++++++++++----- .../layout/seekbar/SeekbarColorPatch.kt | 14 ++++++++-- .../misc/playservice/VersionCheckPatch.kt | 3 +++ 5 files changed, 39 insertions(+), 13 deletions(-) diff --git a/patches/api/patches.api b/patches/api/patches.api index a4075b866..728774278 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -1365,6 +1365,7 @@ public final class app/revanced/patches/youtube/misc/playservice/VersionCheckPat public static final fun is_19_43_or_greater ()Z public static final fun is_19_46_or_greater ()Z public static final fun is_19_47_or_greater ()Z + public static final fun is_19_49_or_greater ()Z } public final class app/revanced/patches/youtube/misc/privacy/RemoveTrackingQueryParameterPatchKt { diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/SwipeControlsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/SwipeControlsPatch.kt index ce9b537ed..cf51936fa 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/SwipeControlsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/SwipeControlsPatch.kt @@ -10,8 +10,7 @@ import app.revanced.patches.shared.misc.settings.preference.SwitchPreference import app.revanced.patches.shared.misc.settings.preference.TextPreference import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch import app.revanced.patches.youtube.misc.playertype.playerTypeHookPatch -import app.revanced.patches.youtube.misc.playservice.is_19_23_or_greater -import app.revanced.patches.youtube.misc.playservice.is_19_25_or_greater +import app.revanced.patches.youtube.misc.playservice.is_19_43_or_greater import app.revanced.patches.youtube.misc.settings.PreferenceScreen import app.revanced.patches.youtube.misc.settings.settingsPatch import app.revanced.patches.youtube.shared.mainActivityFingerprint @@ -30,7 +29,7 @@ private val swipeControlsResourcePatch = resourcePatch { execute { addResources("youtube", "interaction.swipecontrols.swipeControlsResourcePatch") - if (is_19_25_or_greater) { + if (is_19_43_or_greater) { PreferenceScreen.SWIPE_CONTROLS.addPreferences( SwitchPreference("revanced_swipe_change_video") ) @@ -114,7 +113,7 @@ val swipeControlsPatch = bytecodePatch( // region patch to enable/disable swipe to change video. - if (is_19_23_or_greater) { + if (is_19_43_or_greater) { swipeChangeVideoFingerprint.method.insertFeatureFlagBooleanOverride( SWIPE_CHANGE_VIDEO_FEATURE_FLAG, "$EXTENSION_CLASS_DESCRIPTOR->allowSwipeChangeVideo(Z)Z" diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/Fingerprints.kt index 61ca4c231..4c08cdd92 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/Fingerprints.kt @@ -41,9 +41,23 @@ internal val lithoLinearGradientFingerprint = fingerprint { } /** - * 29.25 - 19.50 + * 19.49+ */ -internal val playerLinearGradientLegacyFingerprint = fingerprint { +internal val playerLinearGradientFingerprint = fingerprint { + accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC) + parameters("I", "I", "I", "I", "Landroid/content/Context;", "I") + returns("Landroid/graphics/LinearGradient;") + opcodes( + Opcode.FILLED_NEW_ARRAY, + Opcode.MOVE_RESULT_OBJECT + ) + literal { ytYoutubeMagentaColorId } +} + +/** + * 19.46 - 19.47 + */ +internal val playerLinearGradientLegacy1946Fingerprint = fingerprint { accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL) parameters("I", "I", "I", "I") returns("V") @@ -57,12 +71,11 @@ internal val playerLinearGradientLegacyFingerprint = fingerprint { } /** - * 20.03+ + * 19.25 - 19.45 */ -internal val playerLinearGradientFingerprint = fingerprint { - accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC) - parameters("I", "I", "I", "I", "Landroid/content/Context;", "I") - returns("Landroid/graphics/LinearGradient;") +internal val playerLinearGradientLegacy1925Fingerprint = fingerprint { + accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR) + parameters("Landroid/content/Context;") opcodes( Opcode.FILLED_NEW_ARRAY, Opcode.MOVE_RESULT_OBJECT diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/SeekbarColorPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/SeekbarColorPatch.kt index 78271f91f..d138ae6ef 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/SeekbarColorPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/SeekbarColorPatch.kt @@ -15,6 +15,7 @@ import app.revanced.patches.youtube.layout.theme.lithoColorOverrideHook import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch import app.revanced.patches.youtube.misc.playservice.is_19_25_or_greater import app.revanced.patches.youtube.misc.playservice.is_19_46_or_greater +import app.revanced.patches.youtube.misc.playservice.is_19_49_or_greater import app.revanced.patches.youtube.misc.playservice.versionCheckPatch import app.revanced.patches.youtube.misc.settings.settingsPatch import app.revanced.patches.youtube.shared.mainActivityOnCreateFingerprint @@ -188,6 +189,7 @@ val seekbarColorPatch = bytecodePatch( sharedExtensionPatch, lithoColorHookPatch, seekbarColorResourcePatch, + versionCheckPatch ) execute { @@ -240,8 +242,16 @@ val seekbarColorPatch = bytecodePatch( "invoke-static/range { p4 .. p5 }, $EXTENSION_CLASS_DESCRIPTOR->setLinearGradient([I[F)V" ) - // TODO: add 20.03 support - playerLinearGradientLegacyFingerprint.let { + val playerFingerprint = + if (is_19_49_or_greater) { + playerLinearGradientFingerprint + } else if (is_19_46_or_greater) { + playerLinearGradientLegacy1946Fingerprint + } else { + playerLinearGradientLegacy1925Fingerprint + } + + playerFingerprint.let { it.method.apply { val index = it.patternMatch!!.endIndex val register = getInstruction(index).registerA diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playservice/VersionCheckPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playservice/VersionCheckPatch.kt index e5c233b11..49b7beb5d 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playservice/VersionCheckPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playservice/VersionCheckPatch.kt @@ -41,6 +41,8 @@ var is_19_46_or_greater = false private set var is_19_47_or_greater = false private set +var is_19_49_or_greater = false + private set val versionCheckPatch = resourcePatch( description = "Uses the Play Store service version to find the major/minor version of the YouTube target app.", @@ -74,5 +76,6 @@ val versionCheckPatch = resourcePatch( is_19_43_or_greater = 244405000 <= playStoreServicesVersion is_19_46_or_greater = 244705000 <= playStoreServicesVersion is_19_47_or_greater = 244799000 <= playStoreServicesVersion + is_19_49_or_greater = 245005000 <= playStoreServicesVersion } }