diff --git a/extensions/shared/src/main/java/app/revanced/extension/music/patches/misc/OpusCodecPatch.java b/extensions/shared/src/main/java/app/revanced/extension/music/patches/misc/OpusCodecPatch.java deleted file mode 100644 index 5dec961fa..000000000 --- a/extensions/shared/src/main/java/app/revanced/extension/music/patches/misc/OpusCodecPatch.java +++ /dev/null @@ -1,11 +0,0 @@ -package app.revanced.extension.music.patches.misc; - -import app.revanced.extension.music.settings.Settings; - -@SuppressWarnings("unused") -public class OpusCodecPatch { - - public static boolean enableOpusCodec() { - return Settings.ENABLE_OPUS_CODEC.get(); - } -} diff --git a/extensions/shared/src/main/java/app/revanced/extension/music/settings/Settings.java b/extensions/shared/src/main/java/app/revanced/extension/music/settings/Settings.java index 8343ac79e..b0b531d8b 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/music/settings/Settings.java +++ b/extensions/shared/src/main/java/app/revanced/extension/music/settings/Settings.java @@ -190,7 +190,6 @@ public class Settings extends BaseSettings { public static final BooleanSetting DISABLE_DRC_AUDIO = new BooleanSetting("revanced_disable_drc_audio", FALSE, true); public static final BooleanSetting DISABLE_MUSIC_VIDEO_IN_ALBUM = new BooleanSetting("revanced_disable_music_video_in_album", FALSE, true); public static final EnumSetting DISABLE_MUSIC_VIDEO_IN_ALBUM_REDIRECT_TYPE = new EnumSetting<>("revanced_disable_music_video_in_album_redirect_type", RedirectType.REDIRECT, true); - public static final BooleanSetting ENABLE_OPUS_CODEC = new BooleanSetting("revanced_enable_opus_codec", FALSE, true); public static final BooleanSetting SETTINGS_IMPORT_EXPORT = new BooleanSetting("revanced_extended_settings_import_export", FALSE, false); // PreferenceScreen: Return YouTube Dislike diff --git a/extensions/shared/src/main/java/app/revanced/extension/shared/patches/OpusCodecPatch.java b/extensions/shared/src/main/java/app/revanced/extension/shared/patches/OpusCodecPatch.java new file mode 100644 index 000000000..98cb4aabf --- /dev/null +++ b/extensions/shared/src/main/java/app/revanced/extension/shared/patches/OpusCodecPatch.java @@ -0,0 +1,11 @@ +package app.revanced.extension.shared.patches; + +import app.revanced.extension.shared.settings.BaseSettings; + +@SuppressWarnings("unused") +public class OpusCodecPatch { + + public static boolean enableOpusCodec() { + return BaseSettings.ENABLE_OPUS_CODEC.get(); + } +} diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/misc/QUICProtocolPatch.java b/extensions/shared/src/main/java/app/revanced/extension/shared/patches/QUICProtocolPatch.java similarity index 83% rename from extensions/shared/src/main/java/app/revanced/extension/youtube/patches/misc/QUICProtocolPatch.java rename to extensions/shared/src/main/java/app/revanced/extension/shared/patches/QUICProtocolPatch.java index b04fb584e..df91ff19d 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/misc/QUICProtocolPatch.java +++ b/extensions/shared/src/main/java/app/revanced/extension/shared/patches/QUICProtocolPatch.java @@ -1,4 +1,4 @@ -package app.revanced.extension.youtube.patches.misc; +package app.revanced.extension.shared.patches; import app.revanced.extension.shared.settings.BaseSettings; diff --git a/extensions/shared/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java b/extensions/shared/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java index c212cef74..1036c1500 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java +++ b/extensions/shared/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java @@ -56,6 +56,7 @@ public class BaseSettings { public static final BooleanSetting DISABLE_AUTO_CAPTIONS = new BooleanSetting("revanced_disable_auto_captions", FALSE, true); public static final BooleanSetting DISABLE_QUIC_PROTOCOL = new BooleanSetting("revanced_disable_quic_protocol", FALSE, true); + public static final BooleanSetting ENABLE_OPUS_CODEC = new BooleanSetting("revanced_enable_opus_codec", FALSE, true); public static final BooleanSetting BYPASS_IMAGE_REGION_RESTRICTIONS = new BooleanSetting("revanced_bypass_image_region_restrictions", FALSE, true); public static final EnumSetting WATCH_HISTORY_TYPE = new EnumSetting<>("revanced_watch_history_type", WatchHistoryType.REPLACE); diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/misc/OpusCodecPatch.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/misc/OpusCodecPatch.java deleted file mode 100644 index 32696151a..000000000 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/misc/OpusCodecPatch.java +++ /dev/null @@ -1,11 +0,0 @@ -package app.revanced.extension.youtube.patches.misc; - -import app.revanced.extension.youtube.settings.Settings; - -@SuppressWarnings("unused") -public class OpusCodecPatch { - - public static boolean enableOpusCodec() { - return Settings.ENABLE_OPUS_CODEC.get(); - } -} diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/Settings.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/Settings.java index afd77628f..2551ef43d 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/Settings.java +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/Settings.java @@ -567,7 +567,6 @@ public class Settings extends BaseSettings { // Experimental Flags public static final BooleanSetting CHANGE_SHARE_SHEET = new BooleanSetting("revanced_change_share_sheet", FALSE, true); - public static final BooleanSetting ENABLE_OPUS_CODEC = new BooleanSetting("revanced_enable_opus_codec", FALSE, true); /** * @noinspection DeprecatedIsStillUsed diff --git a/patches/src/main/kotlin/app/revanced/patches/music/misc/codecs/OpusCodecPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/misc/codecs/OpusCodecPatch.kt index ee0a01215..008fe309d 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/misc/codecs/OpusCodecPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/misc/codecs/OpusCodecPatch.kt @@ -2,7 +2,6 @@ package app.revanced.patches.music.misc.codecs import app.revanced.patcher.patch.resourcePatch import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKAGE -import app.revanced.patches.music.utils.extension.Constants.MISC_PATH import app.revanced.patches.music.utils.patch.PatchList.ENABLE_OPUS_CODEC import app.revanced.patches.music.utils.settings.CategoryType import app.revanced.patches.music.utils.settings.ResourceUtils.updatePatchStatus @@ -18,10 +17,8 @@ val opusCodecPatch = resourcePatch( compatibleWith(COMPATIBLE_PACKAGE) dependsOn( - baseOpusCodecsPatch( - "$MISC_PATH/OpusCodecPatch;->enableOpusCodec()Z" - ), - settingsPatch + settingsPatch, + baseOpusCodecsPatch(), ) execute { @@ -30,8 +27,6 @@ val opusCodecPatch = resourcePatch( "revanced_enable_opus_codec", "false" ) - updatePatchStatus(ENABLE_OPUS_CODEC) - } } diff --git a/patches/src/main/kotlin/app/revanced/patches/music/misc/quic/QUICProtocolPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/misc/quic/QUICProtocolPatch.kt new file mode 100644 index 000000000..b98f69ade --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/music/misc/quic/QUICProtocolPatch.kt @@ -0,0 +1,34 @@ +package app.revanced.patches.music.misc.quic + +import app.revanced.patcher.patch.bytecodePatch +import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKAGE +import app.revanced.patches.music.utils.patch.PatchList.DISABLE_QUIC_PROTOCOL +import app.revanced.patches.music.utils.settings.CategoryType +import app.revanced.patches.music.utils.settings.ResourceUtils.updatePatchStatus +import app.revanced.patches.music.utils.settings.addSwitchPreference +import app.revanced.patches.music.utils.settings.settingsPatch +import app.revanced.patches.shared.quic.baseQuicProtocolPatch + +@Suppress("unused", "SpellCheckingInspection") +val quicProtocolPatch = bytecodePatch( + DISABLE_QUIC_PROTOCOL.title, + DISABLE_QUIC_PROTOCOL.summary, +) { + compatibleWith(COMPATIBLE_PACKAGE) + + dependsOn( + settingsPatch, + baseQuicProtocolPatch(), + ) + + execute { + + addSwitchPreference( + CategoryType.MISC, + "revanced_disable_quic_protocol", + "false" + ) + updatePatchStatus(DISABLE_QUIC_PROTOCOL) + + } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/music/utils/patch/PatchList.kt b/patches/src/main/kotlin/app/revanced/patches/music/utils/patch/PatchList.kt index 7f38fea41..1b9c330e0 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/utils/patch/PatchList.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/utils/patch/PatchList.kt @@ -61,6 +61,10 @@ internal enum class PatchList( "Disable music video in album", "Adds option to redirect music videos from albums for non-premium users." ), + DISABLE_QUIC_PROTOCOL( + "Disable QUIC protocol", + "Adds an option to disable CronetEngine's QUIC protocol." + ), ENABLE_OPUS_CODEC( "Enable OPUS codec", "Adds an option to enable the OPUS audio codec if the player response includes it." diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/opus/BaseOpusCodecsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/opus/BaseOpusCodecsPatch.kt index 3918ebfbd..ca0f12da8 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/opus/BaseOpusCodecsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/opus/BaseOpusCodecsPatch.kt @@ -4,6 +4,7 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWith import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.bytecodePatch import app.revanced.patcher.util.smali.ExternalLabel +import app.revanced.patches.shared.extension.Constants.PATCHES_PATH import app.revanced.util.fingerprint.matchOrThrow import app.revanced.util.fingerprint.methodOrThrow import app.revanced.util.getReference @@ -13,9 +14,10 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction import com.android.tools.smali.dexlib2.iface.reference.MethodReference -fun baseOpusCodecsPatch( - descriptor: String, -) = bytecodePatch( +private const val EXTENSION_CLASS_DESCRIPTOR = + "$PATCHES_PATH/OpusCodecPatch;" + +fun baseOpusCodecsPatch() = bytecodePatch( description = "baseOpusCodecsPatch" ) { execute { @@ -35,7 +37,7 @@ fun baseOpusCodecsPatch( addInstructionsWithLabels( targetIndex + 1, """ - invoke-static {}, $descriptor + invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->enableOpusCodec()Z move-result v$freeRegister if-eqz v$freeRegister, :mp4a invoke-static {}, $opusCodecReference diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/quic/BaseQuicProtocolPatch.kt b/patches/src/main/kotlin/app/revanced/patches/shared/quic/BaseQuicProtocolPatch.kt new file mode 100644 index 000000000..1b2347a00 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/shared/quic/BaseQuicProtocolPatch.kt @@ -0,0 +1,30 @@ +@file:Suppress("SpellCheckingInspection") + +package app.revanced.patches.shared.quic + +import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.patch.bytecodePatch +import app.revanced.patches.shared.extension.Constants.PATCHES_PATH +import app.revanced.util.fingerprint.methodOrThrow + +private const val EXTENSION_CLASS_DESCRIPTOR = + "$PATCHES_PATH/QUICProtocolPatch;" + +fun baseQuicProtocolPatch() = bytecodePatch( + description = "baseQuicProtocolPatch" +) { + execute { + arrayOf( + cronetEngineBuilderFingerprint, + experimentalCronetEngineBuilderFingerprint + ).forEach { + it.methodOrThrow().addInstructions( + 0, """ + invoke-static {p1}, $EXTENSION_CLASS_DESCRIPTOR->disableQUICProtocol(Z)Z + move-result p1 + """ + ) + } + } +} + diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/quic/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/shared/quic/Fingerprints.kt similarity index 95% rename from patches/src/main/kotlin/app/revanced/patches/youtube/misc/quic/Fingerprints.kt rename to patches/src/main/kotlin/app/revanced/patches/shared/quic/Fingerprints.kt index 807b46700..205f41c33 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/quic/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/quic/Fingerprints.kt @@ -1,6 +1,6 @@ @file:Suppress("SpellCheckingInspection") -package app.revanced.patches.youtube.misc.quic +package app.revanced.patches.shared.quic import app.revanced.util.fingerprint.legacyFingerprint import com.android.tools.smali.dexlib2.AccessFlags diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/codecs/OpusCodecPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/codecs/OpusCodecPatch.kt index 341dcea9a..b702c184e 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/codecs/OpusCodecPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/codecs/OpusCodecPatch.kt @@ -3,7 +3,6 @@ package app.revanced.patches.youtube.misc.codecs import app.revanced.patcher.patch.bytecodePatch import app.revanced.patches.shared.opus.baseOpusCodecsPatch import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE -import app.revanced.patches.youtube.utils.extension.Constants.MISC_PATH import app.revanced.patches.youtube.utils.patch.PatchList.ENABLE_OPUS_CODEC import app.revanced.patches.youtube.utils.settings.ResourceUtils.addPreference import app.revanced.patches.youtube.utils.settings.settingsPatch @@ -16,16 +15,11 @@ val opusCodecPatch = bytecodePatch( compatibleWith(COMPATIBLE_PACKAGE) dependsOn( - baseOpusCodecsPatch( - "$MISC_PATH/OpusCodecPatch;->enableOpusCodec()Z" - ), settingsPatch, + baseOpusCodecsPatch(), ) execute { - - // region add settings - addPreference( arrayOf( "PREFERENCE_CATEGORY: MISC_EXPERIMENTAL_FLAGS", @@ -33,8 +27,5 @@ val opusCodecPatch = bytecodePatch( ), ENABLE_OPUS_CODEC ) - - // endregion - } } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/quic/QUICProtocolPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/quic/QUICProtocolPatch.kt index 5c0ba3aaa..98e3ee4d7 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/quic/QUICProtocolPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/quic/QUICProtocolPatch.kt @@ -1,47 +1,30 @@ package app.revanced.patches.youtube.misc.quic -import app.revanced.patcher.extensions.InstructionExtensions.addInstructions import app.revanced.patcher.patch.bytecodePatch +import app.revanced.patches.shared.quic.baseQuicProtocolPatch import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE -import app.revanced.patches.youtube.utils.extension.Constants.MISC_PATH import app.revanced.patches.youtube.utils.patch.PatchList.DISABLE_QUIC_PROTOCOL import app.revanced.patches.youtube.utils.settings.ResourceUtils.addPreference import app.revanced.patches.youtube.utils.settings.settingsPatch -import app.revanced.util.fingerprint.methodOrThrow -@Suppress("unused") +@Suppress("unused", "SpellCheckingInspection") val quicProtocolPatch = bytecodePatch( DISABLE_QUIC_PROTOCOL.title, DISABLE_QUIC_PROTOCOL.summary, ) { compatibleWith(COMPATIBLE_PACKAGE) - dependsOn(settingsPatch) + dependsOn( + settingsPatch, + baseQuicProtocolPatch(), + ) execute { - - arrayOf( - cronetEngineBuilderFingerprint, - experimentalCronetEngineBuilderFingerprint - ).forEach { - it.methodOrThrow().addInstructions( - 0, """ - invoke-static {p1}, $MISC_PATH/QUICProtocolPatch;->disableQUICProtocol(Z)Z - move-result p1 - """ - ) - } - - // region add settings - addPreference( arrayOf( "SETTINGS: DISABLE_QUIC_PROTOCOL" ), DISABLE_QUIC_PROTOCOL ) - - // endregion - } } diff --git a/patches/src/main/resources/music/settings/host/values/strings.xml b/patches/src/main/resources/music/settings/host/values/strings.xml index cf9ffdaab..80d378973 100644 --- a/patches/src/main/resources/music/settings/host/values/strings.xml +++ b/patches/src/main/resources/music/settings/host/values/strings.xml @@ -469,6 +469,8 @@ Click to see how to issue an API key." Find the official song if a music video is detected playing from an album. • Powered by Piped Instance API." + Disable QUIC protocol + "Disables CronetEngine's QUIC protocol." Redirection type Specifies how to redirect to official song. Redirect