Skip to content

Commit 029aee8

Browse files
fix(YouTube - Force original audio): If stream spoofing to Android then show a summary text why force audio is not available (#4220)
1 parent 56ce9db commit 029aee8

File tree

6 files changed

+65
-15
lines changed

6 files changed

+65
-15
lines changed

extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/SpoofVideoStreamsPatch.java

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,12 @@ private static boolean isPatchIncluded() {
3434
return false; // Modified during patching.
3535
}
3636

37+
public static boolean notSpoofingToAndroid() {
38+
return !isPatchIncluded()
39+
|| !BaseSettings.SPOOF_VIDEO_STREAMS.get()
40+
|| BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() == ClientType.IOS_UNPLUGGED;
41+
}
42+
3743
/**
3844
* Injection point.
3945
* Blocks /get_watch requests by returning an unreachable URI.
@@ -206,18 +212,6 @@ public static String appendSpoofedClient(String videoFormat) {
206212
return videoFormat;
207213
}
208214

209-
public static final class NotSpoofingAndroidAvailability implements Setting.Availability {
210-
@Override
211-
public boolean isAvailable() {
212-
if (SpoofVideoStreamsPatch.isPatchIncluded()) {
213-
return !BaseSettings.SPOOF_VIDEO_STREAMS.get()
214-
|| BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() == ClientType.IOS_UNPLUGGED;
215-
}
216-
217-
return true;
218-
}
219-
}
220-
221215
public static final class AudioStreamLanguageOverrideAvailability implements Setting.Availability {
222216
@Override
223217
public boolean isAvailable() {

extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ForceOriginalAudioPatch.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,29 @@
11
package app.revanced.extension.youtube.patches;
22

33
import app.revanced.extension.shared.Logger;
4+
import app.revanced.extension.shared.settings.Setting;
5+
import app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch;
46
import app.revanced.extension.youtube.settings.Settings;
57

68
@SuppressWarnings("unused")
79
public class ForceOriginalAudioPatch {
810

911
private static final String DEFAULT_AUDIO_TRACKS_SUFFIX = ".4";
1012

13+
/**
14+
* If the conditions to use this patch were present when the app launched.
15+
*/
16+
public static boolean PATCH_AVAILABLE = SpoofVideoStreamsPatch.notSpoofingToAndroid();
17+
18+
public static final class ForceOriginalAudioAvailability implements Setting.Availability {
19+
@Override
20+
public boolean isAvailable() {
21+
// Check conditions of launch and now. Otherwise if spoofing is changed
22+
// without a restart the setting will show as available when it's not.
23+
return PATCH_AVAILABLE && SpoofVideoStreamsPatch.notSpoofingToAndroid();
24+
}
25+
}
26+
1127
/**
1228
* Injection point.
1329
*/

extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
import static app.revanced.extension.shared.settings.Setting.migrateOldSettingToNew;
88
import static app.revanced.extension.shared.settings.Setting.parent;
99
import static app.revanced.extension.shared.settings.Setting.parentsAny;
10-
import static app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.NotSpoofingAndroidAvailability;
1110
import static app.revanced.extension.youtube.patches.ChangeStartPagePatch.StartPage;
11+
import static app.revanced.extension.youtube.patches.ForceOriginalAudioPatch.ForceOriginalAudioAvailability;
1212
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerHideExpandCloseAvailability;
1313
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerHorizontalDragAvailability;
1414
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType;
@@ -54,7 +54,7 @@ public class Settings extends BaseSettings {
5454
public static final StringSetting CUSTOM_PLAYBACK_SPEEDS = new StringSetting("revanced_custom_playback_speeds",
5555
"0.25\n0.5\n0.75\n0.9\n0.95\n1.0\n1.05\n1.1\n1.25\n1.5\n1.75\n2.0\n3.0\n4.0\n5.0", true);
5656
// Audio
57-
public static final BooleanSetting FORCE_ORIGINAL_AUDIO = new BooleanSetting("revanced_force_original_audio", FALSE, new NotSpoofingAndroidAvailability());
57+
public static final BooleanSetting FORCE_ORIGINAL_AUDIO = new BooleanSetting("revanced_force_original_audio", FALSE, new ForceOriginalAudioAvailability());
5858

5959
// Ads
6060
public static final BooleanSetting HIDE_BUTTONED_ADS = new BooleanSetting("revanced_hide_buttoned_ads", TRUE);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package app.revanced.extension.youtube.settings.preference;
2+
3+
import static app.revanced.extension.shared.StringRef.str;
4+
5+
import android.content.Context;
6+
import android.preference.SwitchPreference;
7+
import android.util.AttributeSet;
8+
9+
import app.revanced.extension.youtube.patches.ForceOriginalAudioPatch;
10+
11+
@SuppressWarnings({"deprecation", "unused"})
12+
public class ForceOriginalAudioSwitchPreference extends SwitchPreference {
13+
14+
{
15+
if (!ForceOriginalAudioPatch.PATCH_AVAILABLE) {
16+
// Show why force audio is not available.
17+
String summary = str("revanced_force_original_audio_not_available");
18+
setSummary(summary);
19+
setSummaryOn(summary);
20+
setSummaryOff(summary);
21+
}
22+
}
23+
24+
public ForceOriginalAudioSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
25+
super(context, attrs, defStyleAttr, defStyleRes);
26+
}
27+
public ForceOriginalAudioSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) {
28+
super(context, attrs, defStyleAttr);
29+
}
30+
public ForceOriginalAudioSwitchPreference(Context context, AttributeSet attrs) {
31+
super(context, attrs);
32+
}
33+
public ForceOriginalAudioSwitchPreference(Context context) {
34+
super(context);
35+
}
36+
}

patches/src/main/kotlin/app/revanced/patches/youtube/video/audio/ForceOriginalAudioPatch.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,10 @@ val forceOriginalAudioPatch = bytecodePatch(
5757
addResources("youtube", "video.audio.forceOriginalAudioPatch")
5858

5959
PreferenceScreen.VIDEO.addPreferences(
60-
SwitchPreference("revanced_force_original_audio")
60+
SwitchPreference(
61+
key = "revanced_force_original_audio",
62+
tag = "app.revanced.extension.youtube.settings.preference.ForceOriginalAudioSwitchPreference"
63+
)
6164
)
6265

6366
fun Method.firstFormatStreamingModelCall(

patches/src/main/resources/addresources/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1246,6 +1246,7 @@ Enabling this can unlock higher video qualities"</string>
12461246
<string name="revanced_force_original_audio_title">Force original audio</string>
12471247
<string name="revanced_force_original_audio_summary_on">Using original audio</string>
12481248
<string name="revanced_force_original_audio_summary_off">Using default audio</string>
1249+
<string name="revanced_force_original_audio_not_available">To use this feature, change stream spoofing to iOS client type</string>
12491250
</patch>
12501251
<patch id="video.quality.rememberVideoQualityPatch">
12511252
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->

0 commit comments

Comments
 (0)