From 714d79f59731716481d2e0b934cc745110a4e6be Mon Sep 17 00:00:00 2001 From: inotia00 Date: Tue, 14 Mar 2023 10:38:49 +0900 Subject: [PATCH] add `disable-quic-protocol` patch (Experimental Flags) --- .../CronetEngineBuilderFingerprint.kt | 11 ++++ ...erimentalCronetEngineBuilderFingerprint.kt | 11 ++++ .../misc/quic/patch/QUICProtocolPatch.kt | 58 +++++++++++++++++++ .../youtube/settings/host/values/strings.xml | 3 + .../youtube/settings/xml/revanced_prefs.xml | 3 + 5 files changed, 86 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/misc/quic/fingerprints/CronetEngineBuilderFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/misc/quic/fingerprints/ExperimentalCronetEngineBuilderFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/misc/quic/patch/QUICProtocolPatch.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/quic/fingerprints/CronetEngineBuilderFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/quic/fingerprints/CronetEngineBuilderFingerprint.kt new file mode 100644 index 000000000..a9c6a92e5 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/quic/fingerprints/CronetEngineBuilderFingerprint.kt @@ -0,0 +1,11 @@ +package app.revanced.patches.youtube.misc.quic.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import org.jf.dexlib2.AccessFlags + +object CronetEngineBuilderFingerprint : MethodFingerprint( + returnType = "L", + access = AccessFlags.PUBLIC.value, + parameters = listOf("Z"), + customFingerprint = { it.definingClass == "Lorg/chromium/net/CronetEngine\$Builder;" && it.name == "enableQuic" } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/quic/fingerprints/ExperimentalCronetEngineBuilderFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/quic/fingerprints/ExperimentalCronetEngineBuilderFingerprint.kt new file mode 100644 index 000000000..bd47cb0a3 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/quic/fingerprints/ExperimentalCronetEngineBuilderFingerprint.kt @@ -0,0 +1,11 @@ +package app.revanced.patches.youtube.misc.quic.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import org.jf.dexlib2.AccessFlags + +object ExperimentalCronetEngineBuilderFingerprint : MethodFingerprint( + returnType = "L", + access = AccessFlags.PUBLIC.value, + parameters = listOf("Z"), + customFingerprint = { it.definingClass == "Lorg/chromium/net/ExperimentalCronetEngine\$Builder;" && it.name == "enableQuic" } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/quic/patch/QUICProtocolPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/quic/patch/QUICProtocolPatch.kt new file mode 100644 index 000000000..d19424925 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/quic/patch/QUICProtocolPatch.kt @@ -0,0 +1,58 @@ +package app.revanced.patches.youtube.misc.quic.patch + +import app.revanced.extensions.toErrorResult +import app.revanced.patcher.annotation.Description +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.annotation.Version +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.addInstructions +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.PatchResult +import app.revanced.patcher.patch.PatchResultSuccess +import app.revanced.patcher.patch.annotations.DependsOn +import app.revanced.patcher.patch.annotations.Patch +import app.revanced.patches.shared.annotation.YouTubeCompatibility +import app.revanced.patches.youtube.misc.quic.fingerprints.* +import app.revanced.patches.youtube.misc.settings.resource.patch.SettingsPatch +import app.revanced.util.integrations.Constants.MISC_PATH + +@Patch +@Name("disable-quic-protocol") +@Description("Disable CronetEngine's QUIC protocol.") +@DependsOn([SettingsPatch::class]) +@YouTubeCompatibility +@Version("0.0.1") +class QUICProtocolPatch : BytecodePatch( + listOf( + CronetEngineBuilderFingerprint, + ExperimentalCronetEngineBuilderFingerprint + ) +) { + override fun execute(context: BytecodeContext): PatchResult { + + arrayOf( + CronetEngineBuilderFingerprint, + ExperimentalCronetEngineBuilderFingerprint + ).forEach { + it.result?.mutableMethod?.addInstructions( + 0, """ + invoke-static {p1}, $MISC_PATH/QUICProtocolPatch;->disableQUICProtocol(Z)Z + move-result p1 + """ + )?: return it.toErrorResult() + } + + /* + * Add settings + */ + SettingsPatch.addPreference( + arrayOf( + "SETTINGS: DISABLE_QUIC_PROTOCOL" + ) + ) + + SettingsPatch.updatePatchStatus("disable-quic-protocol") + + return PatchResultSuccess() + } +} \ 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 25dc963f2..a43f5cd14 100644 --- a/src/main/resources/youtube/settings/host/values/strings.xml +++ b/src/main/resources/youtube/settings/host/values/strings.xml @@ -173,6 +173,8 @@ Is it ready to submit?" Zoom haptic feedback is enabled Zoom haptic feedback is disabled Disable zoom haptic feedback + "Disable CronetEngine's QUIC protocol" + Disable QUIC protocol The amount of seconds the double press back to exit Double back timeout is not installed. Please install it. @@ -485,6 +487,7 @@ In the app settings, the YouTube version may be marked as v17.28.35" If you enable this setting, the following features are available: - Community Posts - Hide Mix playlist" + It is recommended not to use it if your internet speed is not fast enough "If you enable this setting, the following features are not available: - Ambient mode" "Tricks the dpi to change some layouts to tablet layouts. diff --git a/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/src/main/resources/youtube/settings/xml/revanced_prefs.xml index 9bb389e91..82631e040 100644 --- a/src/main/resources/youtube/settings/xml/revanced_prefs.xml +++ b/src/main/resources/youtube/settings/xml/revanced_prefs.xml @@ -377,6 +377,8 @@ SETTINGS: LAYOUT_SWITCH --> + @@ -465,6 +467,7 @@ +