Skip to content

Commit 9d5998b

Browse files
committed
fix(YouTube/Disable force auto captions): patch doesn't work with Shorts inotia00/ReVanced_Extended#2346
1 parent 03dd80a commit 9d5998b

File tree

11 files changed

+81
-122
lines changed

11 files changed

+81
-122
lines changed

src/main/kotlin/app/revanced/patches/music/general/autocaptions/AutoCaptionsBytecodePatch.kt

Lines changed: 0 additions & 6 deletions
This file was deleted.

src/main/kotlin/app/revanced/patches/music/general/autocaptions/AutoCaptionsPatch.kt

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,38 @@
11
package app.revanced.patches.music.general.autocaptions
22

3-
import app.revanced.patcher.data.ResourceContext
3+
import app.revanced.patcher.data.BytecodeContext
4+
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
5+
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
46
import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKAGE
7+
import app.revanced.patches.music.utils.integrations.Constants.GENERAL_CLASS_DESCRIPTOR
58
import app.revanced.patches.music.utils.settings.CategoryType
69
import app.revanced.patches.music.utils.settings.SettingsPatch
7-
import app.revanced.util.patch.BaseResourcePatch
10+
import app.revanced.patches.shared.fingerprints.SubtitleTrackFingerprint
11+
import app.revanced.util.patch.BaseBytecodePatch
12+
import app.revanced.util.resultOrThrow
13+
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
814

915
@Suppress("unused")
10-
object AutoCaptionsPatch : BaseResourcePatch(
16+
object AutoCaptionsPatch : BaseBytecodePatch(
1117
name = "Disable auto captions",
1218
description = "Adds an option to disable captions from being automatically enabled.",
13-
dependencies = setOf(
14-
AutoCaptionsBytecodePatch::class,
15-
SettingsPatch::class,
16-
),
17-
compatiblePackages = COMPATIBLE_PACKAGE
19+
dependencies = setOf(SettingsPatch::class),
20+
compatiblePackages = COMPATIBLE_PACKAGE,
21+
fingerprints = setOf(SubtitleTrackFingerprint),
1822
) {
19-
override fun execute(context: ResourceContext) {
23+
override fun execute(context: BytecodeContext) {
24+
25+
SubtitleTrackFingerprint.resultOrThrow().mutableMethod.apply {
26+
val index = implementation!!.instructions.lastIndex
27+
val register = getInstruction<OneRegisterInstruction>(index).registerA
28+
29+
addInstructions(
30+
index, """
31+
invoke-static {v$register}, $GENERAL_CLASS_DESCRIPTOR->disableAutoCaptions(Z)Z
32+
move-result v$register
33+
"""
34+
)
35+
}
2036

2137
SettingsPatch.addSwitchPreference(
2238
CategoryType.GENERAL,

src/main/kotlin/app/revanced/patches/shared/captions/BaseAutoCaptionsPatch.kt

Lines changed: 0 additions & 65 deletions
This file was deleted.

src/main/kotlin/app/revanced/patches/shared/captions/fingerprints/SubtitleButtonControllerFingerprint.kt

Lines changed: 0 additions & 23 deletions
This file was deleted.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package app.revanced.patches.shared.captions.fingerprints
1+
package app.revanced.patches.shared.fingerprints
22

33
import app.revanced.patcher.extensions.or
44
import app.revanced.patcher.fingerprint.MethodFingerprint

src/main/kotlin/app/revanced/patches/youtube/general/autocaptions/AutoCaptionsBytecodePatch.kt

Lines changed: 0 additions & 6 deletions
This file was deleted.

src/main/kotlin/app/revanced/patches/youtube/general/autocaptions/AutoCaptionsPatch.kt

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,57 @@
11
package app.revanced.patches.youtube.general.autocaptions
22

33
import app.revanced.patcher.data.BytecodeContext
4+
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
5+
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
6+
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
7+
import app.revanced.patcher.util.smali.ExternalLabel
8+
import app.revanced.patches.shared.fingerprints.SubtitleTrackFingerprint
9+
import app.revanced.patches.youtube.general.autocaptions.fingerprints.StoryboardRendererDecoderRecommendedLevelFingerprint
410
import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE
5-
import app.revanced.patches.youtube.utils.playertype.PlayerTypeHookPatch
11+
import app.revanced.patches.youtube.utils.fingerprints.StartVideoInformerFingerprint
12+
import app.revanced.patches.youtube.utils.integrations.Constants.GENERAL_CLASS_DESCRIPTOR
613
import app.revanced.patches.youtube.utils.settings.SettingsPatch
714
import app.revanced.util.patch.BaseBytecodePatch
15+
import app.revanced.util.resultOrThrow
816

917
@Suppress("unused")
1018
object AutoCaptionsPatch : BaseBytecodePatch(
1119
name = "Disable auto captions",
1220
description = "Adds an option to disable captions from being automatically enabled.",
13-
dependencies = setOf(
14-
AutoCaptionsBytecodePatch::class,
15-
PlayerTypeHookPatch::class,
16-
SettingsPatch::class
17-
),
18-
compatiblePackages = COMPATIBLE_PACKAGE
21+
dependencies = setOf(SettingsPatch::class),
22+
compatiblePackages = COMPATIBLE_PACKAGE,
23+
fingerprints = setOf(
24+
SubtitleTrackFingerprint,
25+
StartVideoInformerFingerprint,
26+
StoryboardRendererDecoderRecommendedLevelFingerprint,
27+
)
1928
) {
2029
override fun execute(context: BytecodeContext) {
2130

31+
SubtitleTrackFingerprint.resultOrThrow().mutableMethod.apply {
32+
addInstructionsWithLabels(
33+
0, """
34+
invoke-static {}, $GENERAL_CLASS_DESCRIPTOR->disableAutoCaptions()Z
35+
move-result v0
36+
if-eqz v0, :disabled
37+
const/4 v0, 0x1
38+
return v0
39+
""", ExternalLabel("disabled", getInstruction(0))
40+
)
41+
}
42+
43+
mapOf(
44+
StartVideoInformerFingerprint to 0,
45+
StoryboardRendererDecoderRecommendedLevelFingerprint to 1
46+
).forEach { (fingerprint, enabled) ->
47+
fingerprint.resultOrThrow().mutableMethod.addInstructions(
48+
0, """
49+
const/4 v0, 0x$enabled
50+
invoke-static {v0}, $GENERAL_CLASS_DESCRIPTOR->setCaptionsButtonStatus(Z)V
51+
"""
52+
)
53+
}
54+
2255
/**
2356
* Add settings
2457
*/
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package app.revanced.patches.youtube.general.autocaptions.fingerprints
2+
3+
import app.revanced.patcher.extensions.or
4+
import app.revanced.patcher.fingerprint.MethodFingerprint
5+
import com.android.tools.smali.dexlib2.AccessFlags
6+
7+
internal object StoryboardRendererDecoderRecommendedLevelFingerprint : MethodFingerprint(
8+
returnType = "V",
9+
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
10+
parameters = listOf("Lcom/google/android/libraries/youtube/innertube/model/player/PlayerResponseModel;"),
11+
strings = listOf("#-1#")
12+
)

src/main/kotlin/app/revanced/patches/youtube/player/components/PlayerComponentsPatch.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import app.revanced.patcher.extensions.InstructionExtensions.removeInstruction
99
import app.revanced.patcher.patch.PatchException
1010
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
1111
import app.revanced.patcher.util.smali.ExternalLabel
12-
import app.revanced.patches.shared.fingerprints.StartVideoInformerFingerprint
1312
import app.revanced.patches.shared.litho.LithoFilterPatch
1413
import app.revanced.patches.youtube.player.components.fingerprints.CrowdfundingBoxFingerprint
1514
import app.revanced.patches.youtube.player.components.fingerprints.EngagementPanelControllerFingerprint
@@ -34,6 +33,7 @@ import app.revanced.patches.youtube.player.components.fingerprints.WatermarkPare
3433
import app.revanced.patches.youtube.player.speedoverlay.SpeedOverlayPatch
3534
import app.revanced.patches.youtube.utils.compatibility.Constants.COMPATIBLE_PACKAGE
3635
import app.revanced.patches.youtube.utils.controlsoverlay.ControlsOverlayConfigPatch
36+
import app.revanced.patches.youtube.utils.fingerprints.StartVideoInformerFingerprint
3737
import app.revanced.patches.youtube.utils.fingerprints.YouTubeControlsOverlayFingerprint
3838
import app.revanced.patches.youtube.utils.fix.suggestedvideoendscreen.SuggestedVideoEndScreenPatch
3939
import app.revanced.patches.youtube.utils.integrations.Constants.COMPONENTS_PATH

src/main/kotlin/app/revanced/patches/shared/fingerprints/StartVideoInformerFingerprint.kt renamed to src/main/kotlin/app/revanced/patches/youtube/utils/fingerprints/StartVideoInformerFingerprint.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package app.revanced.patches.shared.fingerprints
1+
package app.revanced.patches.youtube.utils.fingerprints
22

33
import app.revanced.patcher.extensions.or
44
import app.revanced.patcher.fingerprint.MethodFingerprint

src/main/resources/youtube/settings/host/values/strings.xml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -319,9 +319,7 @@ Limitations:
319319
<string name="revanced_change_start_page_entry_watch_later">Watch later</string>
320320
<string name="revanced_change_start_page_invalid_toast">Invalid start page, resetting to default.</string>
321321
<string name="revanced_disable_auto_audio_tracks_title">Disable forced auto audio tracks</string>
322-
<string name="revanced_disable_auto_audio_tracks_summary_on">"Forced auto audio tracks are disabled.
323-
324-
Limitation: This setting does not apply to Shorts."</string>
322+
<string name="revanced_disable_auto_audio_tracks_summary_on">Forced auto audio tracks are disabled.</string>
325323
<string name="revanced_disable_auto_audio_tracks_summary_off">Forced auto audio tracks are enabled.</string>
326324
<string name="revanced_disable_auto_captions_title">Disable forced auto captions</string>
327325
<string name="revanced_disable_auto_captions_summary_on">Forced auto captions are disabled.</string>

0 commit comments

Comments
 (0)