Skip to content

Commit 0384907

Browse files
committed
Merge branch 'dev' into revanced-extended
2 parents 2b0f12c + 23a8941 commit 0384907

File tree

255 files changed

+11472
-4018
lines changed

Some content is hidden

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

255 files changed

+11472
-4018
lines changed

README-template.md

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,37 +19,28 @@ Example:
1919
{
2020
"name": "Alternative thumbnails",
2121
"description": "Adds options to replace video thumbnails using the DeArrow API or image captures from the video.",
22-
"compatiblePackages":[
23-
{
24-
"name": "com.google.android.youtube",
25-
"versions": "COMPATIBLE_PACKAGE_YOUTUBE"
26-
}
27-
],
2822
"use":true,
23+
"compatiblePackages": {
24+
"com.google.android.youtube": "COMPATIBLE_PACKAGE_YOUTUBE"
25+
},
2926
"options": []
3027
},
3128
{
3229
"name": "Bitrate default value",
3330
"description": "Sets the audio quality to 'Always High' when you first install the app.",
34-
"compatiblePackages": [
35-
{
36-
"name": "com.google.android.apps.youtube.music",
37-
"versions": "COMPATIBLE_PACKAGE_MUSIC"
38-
}
39-
],
4031
"use":true,
32+
"compatiblePackages": {
33+
"com.google.android.apps.youtube.music": "COMPATIBLE_PACKAGE_MUSIC"
34+
},
4135
"options": []
4236
},
4337
{
4438
"name": "Hide ads",
4539
"description": "Adds options to hide ads.",
46-
"compatiblePackages": [
47-
{
48-
"name": "com.reddit.frontpage",
49-
"versions": "COMPATIBLE_PACKAGE_REDDIT"
50-
}
51-
],
5240
"use":true,
41+
"compatiblePackages": {
42+
"com.reddit.frontpage": "COMPATIBLE_PACKAGE_REDDIT"
43+
},
5344
"options": []
5445
}
5546
]

README.md

Lines changed: 138 additions & 146 deletions
Large diffs are not rendered by default.

extensions/shared/src/main/java/app/revanced/extension/music/patches/actionbar/ActionBarPatch.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import androidx.annotation.NonNull;
99

1010
import app.revanced.extension.music.settings.Settings;
11-
import app.revanced.extension.music.utils.VideoUtils;
1211

1312
@SuppressWarnings("unused")
1413
public class ActionBarPatch {
@@ -40,15 +39,6 @@ public static void hideLikeDislikeButton(View view) {
4039
);
4140
}
4241

43-
public static void inAppDownloadButtonOnClick(View view) {
44-
if (!Settings.EXTERNAL_DOWNLOADER_ACTION_BUTTON.get()) {
45-
return;
46-
}
47-
48-
if (buttonType.equals(ActionButton.DOWNLOAD.name))
49-
view.setOnClickListener(imageView -> VideoUtils.launchExternalDownloader());
50-
}
51-
5242
public static void setButtonType(@NonNull Object obj) {
5343
final String buttonType = obj.toString();
5444

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package app.revanced.extension.music.patches.components;
2+
3+
import androidx.annotation.Nullable;
4+
5+
import app.revanced.extension.music.settings.Settings;
6+
import app.revanced.extension.shared.patches.components.ByteArrayFilterGroup;
7+
import app.revanced.extension.shared.patches.components.ByteArrayFilterGroupList;
8+
import app.revanced.extension.shared.patches.components.Filter;
9+
import app.revanced.extension.shared.patches.components.StringFilterGroup;
10+
11+
@SuppressWarnings("unused")
12+
public final class ActionButtonsFilter extends Filter {
13+
private static final String VIDEO_ACTION_BAR_PATH_PREFIX = "video_action_bar.eml";
14+
15+
private final StringFilterGroup actionBarRule;
16+
private final StringFilterGroup bufferFilterPathRule;
17+
private final ByteArrayFilterGroupList bufferButtonsGroupList = new ByteArrayFilterGroupList();
18+
19+
public ActionButtonsFilter() {
20+
actionBarRule = new StringFilterGroup(
21+
null,
22+
VIDEO_ACTION_BAR_PATH_PREFIX
23+
);
24+
addIdentifierCallbacks(actionBarRule);
25+
26+
bufferFilterPathRule = new StringFilterGroup(
27+
null,
28+
"|ContainerType|button.eml|"
29+
);
30+
final StringFilterGroup downloadButton = new StringFilterGroup(
31+
Settings.HIDE_ACTION_BUTTON_DOWNLOAD,
32+
"music_download_button.eml"
33+
);
34+
final StringFilterGroup likeDislikeContainer = new StringFilterGroup(
35+
Settings.HIDE_ACTION_BUTTON_LIKE_DISLIKE,
36+
"segmented_like_dislike_button.eml"
37+
);
38+
addPathCallbacks(
39+
bufferFilterPathRule,
40+
downloadButton,
41+
likeDislikeContainer
42+
);
43+
44+
bufferButtonsGroupList.addAll(
45+
new ByteArrayFilterGroup(
46+
Settings.HIDE_ACTION_BUTTON_COMMENT,
47+
"yt_outline_message_bubble"
48+
),
49+
new ByteArrayFilterGroup(
50+
Settings.HIDE_ACTION_BUTTON_ADD_TO_PLAYLIST,
51+
"yt_outline_list_add"
52+
),
53+
new ByteArrayFilterGroup(
54+
Settings.HIDE_ACTION_BUTTON_SHARE,
55+
"yt_outline_share"
56+
),
57+
new ByteArrayFilterGroup(
58+
Settings.HIDE_ACTION_BUTTON_RADIO,
59+
"yt_outline_youtube_mix"
60+
)
61+
);
62+
}
63+
64+
private boolean isEveryFilterGroupEnabled() {
65+
for (StringFilterGroup group : pathCallbacks)
66+
if (!group.isEnabled()) return false;
67+
68+
for (ByteArrayFilterGroup group : bufferButtonsGroupList)
69+
if (!group.isEnabled()) return false;
70+
71+
return true;
72+
}
73+
74+
@Override
75+
public boolean isFiltered(String path, @Nullable String identifier, String allValue, byte[] protobufBufferArray,
76+
StringFilterGroup matchedGroup, FilterContentType contentType, int contentIndex) {
77+
if (!path.startsWith(VIDEO_ACTION_BAR_PATH_PREFIX)) {
78+
return false;
79+
}
80+
if (matchedGroup == actionBarRule && !isEveryFilterGroupEnabled()) {
81+
return false;
82+
}
83+
if (matchedGroup == bufferFilterPathRule && !bufferButtonsGroupList.check(protobufBufferArray).isFiltered()) {
84+
return false;
85+
}
86+
87+
return super.isFiltered(path, identifier, allValue, protobufBufferArray, matchedGroup, contentType, contentIndex);
88+
}
89+
}

extensions/shared/src/main/java/app/revanced/extension/music/patches/flyout/FlyoutPatch.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,14 +147,16 @@ private enum FlyoutPanelComponent {
147147
ADD_TO_QUEUE("QUEUE_MUSIC", Settings.HIDE_FLYOUT_MENU_ADD_TO_QUEUE.get()),
148148
SAVE_TO_LIBRARY("LIBRARY_ADD", Settings.HIDE_FLYOUT_MENU_SAVE_TO_LIBRARY.get()),
149149
REMOVE_FROM_LIBRARY("LIBRARY_REMOVE", Settings.HIDE_FLYOUT_MENU_REMOVE_FROM_LIBRARY.get()),
150+
SAVE_TO_PLAYLIST("ADD_TO_PLAYLIST", Settings.HIDE_FLYOUT_MENU_SAVE_TO_PLAYLIST.get()),
150151
REMOVE_FROM_PLAYLIST("REMOVE_FROM_PLAYLIST", Settings.HIDE_FLYOUT_MENU_REMOVE_FROM_PLAYLIST.get()),
151152
DOWNLOAD("OFFLINE_DOWNLOAD", Settings.HIDE_FLYOUT_MENU_DOWNLOAD.get()),
152-
SAVE_TO_PLAYLIST("ADD_TO_PLAYLIST", Settings.HIDE_FLYOUT_MENU_SAVE_TO_PLAYLIST.get()),
153153
GO_TO_EPISODE("INFO", Settings.HIDE_FLYOUT_MENU_GO_TO_EPISODE.get()),
154154
GO_TO_PODCAST("BROADCAST", Settings.HIDE_FLYOUT_MENU_GO_TO_PODCAST.get()),
155155
GO_TO_ALBUM("ALBUM", Settings.HIDE_FLYOUT_MENU_GO_TO_ALBUM.get()),
156156
GO_TO_ARTIST("ARTIST", Settings.HIDE_FLYOUT_MENU_GO_TO_ARTIST.get()),
157157
VIEW_SONG_CREDIT("PEOPLE_GROUP", Settings.HIDE_FLYOUT_MENU_VIEW_SONG_CREDIT.get()),
158+
PIN_TO_SPEED_DIAL("KEEP", Settings.HIDE_FLYOUT_MENU_PIN_TO_SPEED_DIAL.get()),
159+
UNPIN_FROM_SPEED_DIAL("KEEP_OFF", Settings.HIDE_FLYOUT_MENU_UNPIN_FROM_SPEED_DIAL.get()),
158160
SHARE("SHARE", Settings.HIDE_FLYOUT_MENU_SHARE.get()),
159161
DISMISS_QUEUE("DISMISS_QUEUE", Settings.HIDE_FLYOUT_MENU_DISMISS_QUEUE.get()),
160162
HELP("HELP_OUTLINE", Settings.HIDE_FLYOUT_MENU_HELP.get()),
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package app.revanced.extension.music.patches.misc;
2+
3+
import app.revanced.extension.music.settings.Settings;
4+
5+
@SuppressWarnings("unused")
6+
public class DrcAudioPatch {
7+
8+
public static float disableDrcAudio(float original) {
9+
if (!Settings.DISABLE_DRC_AUDIO.get()) {
10+
return original;
11+
}
12+
return 0f;
13+
}
14+
}

extensions/shared/src/main/java/app/revanced/extension/music/patches/misc/SpoofClientPatch.java

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@
22

33
import app.revanced.extension.music.patches.misc.client.AppClient.ClientType;
44
import app.revanced.extension.music.settings.Settings;
5+
import app.revanced.extension.shared.patches.BlockRequestPatch;
56

67
@SuppressWarnings("unused")
7-
public class SpoofClientPatch {
8-
private static final boolean SPOOF_CLIENT_ENABLED = Settings.SPOOF_CLIENT.get();
9-
private static final ClientType clientType = ClientType.IOS_MUSIC;
8+
public class SpoofClientPatch extends BlockRequestPatch {
9+
private static final ClientType CLIENT_TYPE = Settings.SPOOF_CLIENT_TYPE.get();
1010

1111
/**
1212
* Injection point.
1313
*/
1414
public static int getClientTypeId(int originalClientTypeId) {
15-
if (SPOOF_CLIENT_ENABLED) {
16-
return clientType.id;
15+
if (SPOOF_CLIENT) {
16+
return CLIENT_TYPE.id;
1717
}
1818

1919
return originalClientTypeId;
@@ -23,8 +23,8 @@ public static int getClientTypeId(int originalClientTypeId) {
2323
* Injection point.
2424
*/
2525
public static String getClientVersion(String originalClientVersion) {
26-
if (SPOOF_CLIENT_ENABLED) {
27-
return clientType.clientVersion;
26+
if (SPOOF_CLIENT) {
27+
return CLIENT_TYPE.clientVersion;
2828
}
2929

3030
return originalClientVersion;
@@ -34,8 +34,8 @@ public static String getClientVersion(String originalClientVersion) {
3434
* Injection point.
3535
*/
3636
public static String getClientModel(String originalClientModel) {
37-
if (SPOOF_CLIENT_ENABLED) {
38-
return clientType.deviceModel;
37+
if (SPOOF_CLIENT) {
38+
return CLIENT_TYPE.deviceModel;
3939
}
4040

4141
return originalClientModel;
@@ -45,8 +45,8 @@ public static String getClientModel(String originalClientModel) {
4545
* Injection point.
4646
*/
4747
public static String getOsVersion(String originalOsVersion) {
48-
if (SPOOF_CLIENT_ENABLED) {
49-
return clientType.osVersion;
48+
if (SPOOF_CLIENT) {
49+
return CLIENT_TYPE.osVersion;
5050
}
5151

5252
return originalOsVersion;
@@ -56,8 +56,8 @@ public static String getOsVersion(String originalOsVersion) {
5656
* Injection point.
5757
*/
5858
public static String getUserAgent(String originalUserAgent) {
59-
if (SPOOF_CLIENT_ENABLED) {
60-
return clientType.userAgent;
59+
if (SPOOF_CLIENT) {
60+
return CLIENT_TYPE.userAgent;
6161
}
6262

6363
return originalUserAgent;
@@ -67,16 +67,19 @@ public static String getUserAgent(String originalUserAgent) {
6767
* Injection point.
6868
*/
6969
public static boolean isClientSpoofingEnabled() {
70-
return SPOOF_CLIENT_ENABLED;
70+
return SPOOF_CLIENT;
7171
}
7272

7373
/**
7474
* Injection point.
75+
* <p>
7576
* When spoofing the client to iOS, the playback speed menu is missing from the player response.
77+
* This fix is required because playback speed is not available in YouTube Music Podcasts.
78+
* <p>
7679
* Return true to force create the playback speed menu.
7780
*/
7881
public static boolean forceCreatePlaybackSpeedMenu(boolean original) {
79-
if (SPOOF_CLIENT_ENABLED) {
82+
if (SPOOF_CLIENT) {
8083
return true;
8184
}
8285
return original;

0 commit comments

Comments
 (0)