Skip to content

Commit 1b2cd64

Browse files
chore: Merge branch dev to main (#6174)
2 parents 1502bf7 + 0c03599 commit 1b2cd64

File tree

144 files changed

+868
-686
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

144 files changed

+868
-686
lines changed

CHANGELOG.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,52 @@
1+
# [5.45.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.45.0-dev.5...v5.45.0-dev.6) (2025-11-01)
2+
3+
4+
### Features
5+
6+
* **Spoof video streams:** Add experimental "Android No SDK" client type ([5f23bfe](https://github.com/ReVanced/revanced-patches/commit/5f23bfe833c6e01617a7dbc5325b4a3fb931e53e))
7+
8+
# [5.45.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.45.0-dev.4...v5.45.0-dev.5) (2025-11-01)
9+
10+
11+
### Bug Fixes
12+
13+
* **TikTok - Downloads:** Fix download path setting ([#6191](https://github.com/ReVanced/revanced-patches/issues/6191)) ([3e4990a](https://github.com/ReVanced/revanced-patches/commit/3e4990afff4c86b93970b153db713ad0f813124d))
14+
* **YouTube - Spoof video streams:** Remove spoof stream audio selector that no longer works ([292fae4](https://github.com/ReVanced/revanced-patches/commit/292fae440c6d5694c5e84407becec2d91f1fd156))
15+
16+
# [5.45.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.45.0-dev.3...v5.45.0-dev.4) (2025-10-30)
17+
18+
19+
### Bug Fixes
20+
21+
* **YouTube - Change header:** Do not mirror header graphic with RTL languages ([a0c5604](https://github.com/ReVanced/revanced-patches/commit/a0c56049510ce040e1ccd49257864672c343344d))
22+
23+
# [5.45.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.45.0-dev.2...v5.45.0-dev.3) (2025-10-27)
24+
25+
26+
### Features
27+
28+
* **YouTube - Change Header:** Use SVG for header logo ([#6178](https://github.com/ReVanced/revanced-patches/issues/6178)) ([e9f45ce](https://github.com/ReVanced/revanced-patches/commit/e9f45ce92695d5857473ff71c14b190bded28a73))
29+
30+
# [5.45.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.45.0-dev.1...v5.45.0-dev.2) (2025-10-26)
31+
32+
33+
### Bug Fixes
34+
35+
* **YouTube - Force original audio:** Fall back to visionOS and not Android Studio if Android VR is not available ([6d01863](https://github.com/ReVanced/revanced-patches/commit/6d01863ec70617d9abc864ce6686ed9764dd151d))
36+
* **YouTube Music - Hide category bar:** Correctly hide the category bar in newer app targets ([#6175](https://github.com/ReVanced/revanced-patches/issues/6175)) ([13cf172](https://github.com/ReVanced/revanced-patches/commit/13cf1724bf2f946c7129cab0db96721c90f9fe89))
37+
38+
# [5.45.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.44.0...v5.45.0-dev.1) (2025-10-26)
39+
40+
41+
### Bug Fixes
42+
43+
* **Instagram:** Update failing fingerprints on newer versions ([#6181](https://github.com/ReVanced/revanced-patches/issues/6181)) ([c73a03c](https://github.com/ReVanced/revanced-patches/commit/c73a03c9e18a12262939c974cdf16221221d1487))
44+
45+
46+
### Features
47+
48+
* **TikTok:** Add `Sanitize sharing links` patch ([#6176](https://github.com/ReVanced/revanced-patches/issues/6176)) ([ef44eaa](https://github.com/ReVanced/revanced-patches/commit/ef44eaa119b9d6c5faec051e22d20f883d0da4f1))
49+
150
# [5.44.0](https://github.com/ReVanced/revanced-patches/compare/v5.43.1...v5.44.0) (2025-10-24)
251

352

extensions/music/src/main/java/app/revanced/extension/music/patches/HideCastButtonPatch.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ public static int hideCastButton(int original) {
1919
* Injection point
2020
*/
2121
public static void hideCastButton(View view) {
22-
hideViewBy0dpUnderCondition(Settings.HIDE_CAST_BUTTON.get(), view);
22+
hideViewBy0dpUnderCondition(Settings.HIDE_CAST_BUTTON, view);
2323
}
2424
}
Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package app.revanced.extension.music.patches;
22

3+
import static app.revanced.extension.shared.Utils.hideViewBy0dpUnderCondition;
4+
5+
import android.view.View;
36
import app.revanced.extension.music.settings.Settings;
47

58
@SuppressWarnings("unused")
@@ -8,7 +11,7 @@ public class HideCategoryBarPatch {
811
/**
912
* Injection point
1013
*/
11-
public static boolean hideCategoryBar() {
12-
return Settings.HIDE_CATEGORY_BAR.get();
14+
public static void hideCategoryBar(View view) {
15+
hideViewBy0dpUnderCondition(Settings.HIDE_CATEGORY_BAR, view);
1316
}
1417
}

extensions/music/src/main/java/app/revanced/extension/music/patches/spoof/SpoofVideoStreamsPatch.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package app.revanced.extension.music.patches.spoof;
22

33
import static app.revanced.extension.music.settings.Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE;
4+
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_NO_SDK;
45
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_VR_1_43_32;
56
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_VR_1_61_48;
67
import static app.revanced.extension.shared.spoof.ClientType.VISIONOS;
@@ -18,8 +19,9 @@ public class SpoofVideoStreamsPatch {
1819
public static void setClientOrderToUse() {
1920
List<ClientType> availableClients = List.of(
2021
ANDROID_VR_1_43_32,
21-
ANDROID_VR_1_61_48,
22-
VISIONOS
22+
ANDROID_NO_SDK,
23+
VISIONOS,
24+
ANDROID_VR_1_61_48
2325
);
2426

2527
app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.setClientsToUse(

extensions/shared/library/src/main/java/app/revanced/extension/shared/patches/CustomBrandingPatch.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,14 +150,14 @@ public static void setBranding() {
150150
}
151151

152152
for (ComponentName disable : componentsToDisable) {
153-
// Use info logging because if the alias status become corrupt the app cannot launch.
154-
Logger.printInfo(() -> "Disabling: " + disable.getClassName());
155153
pm.setComponentEnabledSetting(disable,
156154
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
157155
}
158156

157+
// Use info logging because if the alias status become corrupt the app cannot launch.
159158
ComponentName componentToEnableFinal = componentToEnable;
160159
Logger.printInfo(() -> "Enabling: " + componentToEnableFinal.getClassName());
160+
161161
pm.setComponentEnabledSetting(componentToEnable,
162162
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);
163163
} catch (Exception ex) {

extensions/shared/library/src/main/java/app/revanced/extension/shared/privacy/LinkSanitizer.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@ public class LinkSanitizer {
1717

1818
public LinkSanitizer(String ... parametersToRemove) {
1919
final int parameterCount = parametersToRemove.length;
20-
if (parameterCount == 0) {
21-
throw new IllegalArgumentException("No parameters specified");
22-
}
2320

2421
// List is faster if only checking a few parameters.
2522
this.parametersToRemove = parameterCount > 4
@@ -40,10 +37,12 @@ public Uri sanitizeUri(Uri uri) {
4037
try {
4138
Uri.Builder builder = uri.buildUpon().clearQuery();
4239

43-
for (String paramName : uri.getQueryParameterNames()) {
44-
if (!parametersToRemove.contains(paramName)) {
45-
for (String value : uri.getQueryParameters(paramName)) {
46-
builder.appendQueryParameter(paramName, value);
40+
if (!parametersToRemove.isEmpty()) {
41+
for (String paramName : uri.getQueryParameterNames()) {
42+
if (!parametersToRemove.contains(paramName)) {
43+
for (String value : uri.getQueryParameters(paramName)) {
44+
builder.appendQueryParameter(paramName, value);
45+
}
4746
}
4847
}
4948
}

extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import static java.lang.Boolean.TRUE;
55
import static app.revanced.extension.shared.patches.CustomBrandingPatch.BrandingTheme;
66
import static app.revanced.extension.shared.settings.Setting.parent;
7-
import static app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.AudioStreamLanguageOverrideAvailability;
87

98
/**
109
* Settings shared across multiple apps.
@@ -34,7 +33,6 @@ public class BaseSettings {
3433
//
3534

3635
public static final BooleanSetting SPOOF_VIDEO_STREAMS = new BooleanSetting("revanced_spoof_video_streams", TRUE, true, "revanced_spoof_video_streams_user_dialog_message");
37-
public static final EnumSetting<AppLanguage> SPOOF_VIDEO_STREAMS_LANGUAGE = new EnumSetting<>("revanced_spoof_video_streams_language", AppLanguage.DEFAULT, new AudioStreamLanguageOverrideAvailability());
3836
public static final BooleanSetting SPOOF_STREAMING_DATA_STATS_FOR_NERDS = new BooleanSetting("revanced_spoof_streaming_data_stats_for_nerds", TRUE, parent(SPOOF_VIDEO_STREAMS));
3937

4038
public static final BooleanSetting SANITIZE_SHARED_LINKS = new BooleanSetting("revanced_sanitize_sharing_links", TRUE);

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

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,33 @@ public enum ClientType {
5454
ANDROID_VR_1_61_48.supportsMultiAudioTracks,
5555
"Android VR 1.43"
5656
),
57+
/**
58+
* Video not playable: Paid / Movie / Private / Age-restricted.
59+
* Note: The 'Authorization' key must be excluded from the header.
60+
*
61+
* According to TeamNewPipe in 2022, if the 'androidSdkVersion' field is missing,
62+
* the GVS did not return a valid response:
63+
* [NewPipe#8713 (comment)](https://github.com/TeamNewPipe/NewPipe/issues/8713#issuecomment-1207443550).
64+
*
65+
* According to the latest commit in yt-dlp, the GVS returns a valid response
66+
* even if the 'androidSdkVersion' field is missing:
67+
* [yt-dlp#14693](https://github.com/yt-dlp/yt-dlp/pull/14693).
68+
*
69+
* For some reason, PoToken is not required.
70+
*/
71+
ANDROID_NO_SDK(
72+
3,
73+
"ANDROID",
74+
"",
75+
"",
76+
"",
77+
Build.VERSION.RELEASE,
78+
"20.05.46",
79+
"com.google.android.youtube/20.05.46 (Linux; U; Android " + Build.VERSION.RELEASE + ") gzip",
80+
false,
81+
true,
82+
"Android No SDK"
83+
),
5784
/**
5885
* Cannot play livestreams and lacks HDR, but can play videos with music and labeled "for children".
5986
* <a href="https://dumps.tadiphone.dev/dumps/google/barbet">Google Pixel 9 Pro Fold</a>

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

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,11 @@
1414
import app.revanced.extension.shared.Utils;
1515
import app.revanced.extension.shared.settings.AppLanguage;
1616
import app.revanced.extension.shared.settings.BaseSettings;
17-
import app.revanced.extension.shared.settings.Setting;
1817
import app.revanced.extension.shared.spoof.requests.StreamingDataRequest;
1918

2019
@SuppressWarnings("unused")
2120
public class SpoofVideoStreamsPatch {
2221

23-
public static final class AudioStreamLanguageOverrideAvailability implements Setting.Availability {
24-
@Override
25-
public boolean isAvailable() {
26-
return BaseSettings.SPOOF_VIDEO_STREAMS.get() && !preferredClient.useAuth;
27-
}
28-
}
29-
3022
/**
3123
* Domain used for internet connectivity verification.
3224
* It has an empty response body and is only used to check for a 204 response code.
@@ -62,8 +54,7 @@ public static AppLanguage getLanguageOverride() {
6254
}
6355

6456
/**
65-
* @param language Language override for non-authenticated requests. If this is null then
66-
* {@link BaseSettings#SPOOF_VIDEO_STREAMS_LANGUAGE} is used.
57+
* @param language Language override for non-authenticated requests.
6758
*/
6859
public static void setLanguageOverride(@Nullable AppLanguage language) {
6960
languageOverride = language;

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package app.revanced.extension.shared.spoof.requests;
22

3-
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_VR_1_43_32;
4-
53
import org.json.JSONException;
64
import org.json.JSONObject;
75

@@ -13,7 +11,6 @@
1311
import app.revanced.extension.shared.requests.Requester;
1412
import app.revanced.extension.shared.requests.Route;
1513
import app.revanced.extension.shared.settings.AppLanguage;
16-
import app.revanced.extension.shared.settings.BaseSettings;
1714
import app.revanced.extension.shared.spoof.ClientType;
1815
import app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch;
1916

@@ -44,7 +41,7 @@ static String createInnertubeBody(ClientType clientType, String videoId) {
4441
AppLanguage language = SpoofVideoStreamsPatch.getLanguageOverride();
4542
if (language == null) {
4643
// Force original audio has not overrode the language.
47-
language = BaseSettings.SPOOF_VIDEO_STREAMS_LANGUAGE.get();
44+
language = AppLanguage.DEFAULT;
4845
}
4946
//noinspection ExtractMethodRecommender
5047
Locale streamLocale = language.getLocale();

0 commit comments

Comments
 (0)