mirror of
https://github.com/ReVanced/revanced-patches.git
synced 2026-01-17 00:03:57 +00:00
Compare commits
26 Commits
v5.46.0
...
v5.47.0-de
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dc813fe617 | ||
|
|
02831a6069 | ||
|
|
5228fd4b58 | ||
|
|
6bd7dca75b | ||
|
|
22ed7bfbb3 | ||
|
|
a7c220a4ae | ||
|
|
d8ca4ee931 | ||
|
|
a5d197b977 | ||
|
|
a0ec4c07f7 | ||
|
|
0928dcd00d | ||
|
|
bbd8932b2e | ||
|
|
300b12f948 | ||
|
|
ac583d40d0 | ||
|
|
c400188c38 | ||
|
|
0af0ee92c4 | ||
|
|
fff29544b9 | ||
|
|
9495cf49ef | ||
|
|
15675b5164 | ||
|
|
654d091e65 | ||
|
|
98371be33c | ||
|
|
2f0de15e67 | ||
|
|
df160370e2 | ||
|
|
bb745b555b | ||
|
|
8df9a46721 | ||
|
|
94ae84ad0f | ||
|
|
4febb2e2e9 |
85
CHANGELOG.md
85
CHANGELOG.md
@@ -1,3 +1,88 @@
|
||||
# [5.47.0-dev.12](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.11...v5.47.0-dev.12) (2025-12-08)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Hide layout components:** Add "Hide Join button" and "Hide Subscribe button" options for channel page ([#6345](https://github.com/ReVanced/revanced-patches/issues/6345)) ([02831a6](https://github.com/ReVanced/revanced-patches/commit/02831a6069fc30ffa3a87f8e4de653d003a2187e))
|
||||
|
||||
# [5.47.0-dev.11](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.10...v5.47.0-dev.11) (2025-12-08)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Disney+:** Add `Skip ads` patch ([#6343](https://github.com/ReVanced/revanced-patches/issues/6343)) ([6bd7dca](https://github.com/ReVanced/revanced-patches/commit/6bd7dca75bd2ea335a596aa93a8b767d39be5f83))
|
||||
|
||||
# [5.47.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.9...v5.47.0-dev.10) (2025-12-08)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Hide Shorts components:** Add "Hide auto-dubbed label" and "Hide live preview" options ([#6334](https://github.com/ReVanced/revanced-patches/issues/6334)) ([a7c220a](https://github.com/ReVanced/revanced-patches/commit/a7c220a4aea93ea7ae7005b5760443d7571c4228))
|
||||
|
||||
# [5.47.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.8...v5.47.0-dev.9) (2025-12-08)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Hide layout components:** Add "Hide cell divider", "Hide featured links", and "Hide featured videos" options ([#6335](https://github.com/ReVanced/revanced-patches/issues/6335)) ([a5d197b](https://github.com/ReVanced/revanced-patches/commit/a5d197b9775b98d7a37bfdee9e5f726d5e04d8cf))
|
||||
|
||||
# [5.47.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.7...v5.47.0-dev.8) (2025-12-08)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Instagram:** Add `Disable Reels scrolling` patch ([#6317](https://github.com/ReVanced/revanced-patches/issues/6317)) ([0928dcd](https://github.com/ReVanced/revanced-patches/commit/0928dcd00dc2a9c1eef9a23c1e26ff5dc9ee670a))
|
||||
* **ProtonVPN:** Add `Remove delay` patch ([#6326](https://github.com/ReVanced/revanced-patches/issues/6326)) ([bbd8932](https://github.com/ReVanced/revanced-patches/commit/bbd8932b2e740aff96ba047332e541bff3e09436))
|
||||
|
||||
# [5.47.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.6...v5.47.0-dev.7) (2025-12-03)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Spoof SIM provider:** Spoof additional TelephonyManager methods ([#6293](https://github.com/ReVanced/revanced-patches/issues/6293)) ([ac583d4](https://github.com/ReVanced/revanced-patches/commit/ac583d40d0f4c0e6544e3661ff3e82a25912f2b0))
|
||||
|
||||
# [5.47.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.5...v5.47.0-dev.6) (2025-11-24)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Letterboxd:** Add `Hide ads` patch ([#6309](https://github.com/ReVanced/revanced-patches/issues/6309)) ([0af0ee9](https://github.com/ReVanced/revanced-patches/commit/0af0ee92c48bb2ffc332197e05439e20c5c05d83))
|
||||
|
||||
# [5.47.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.4...v5.47.0-dev.5) (2025-11-13)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Hide player flyout menu items:** Allow hiding audio menu with 'Android No SDK' client type ([9495cf4](https://github.com/ReVanced/revanced-patches/commit/9495cf49ef8a872be64de6c971c1919b4b9a8720))
|
||||
|
||||
# [5.47.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.3...v5.47.0-dev.4) (2025-11-12)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Sanitize sharing links:** Handle non hierarchical urls ([654d091](https://github.com/ReVanced/revanced-patches/commit/654d091e650cda37650b57cbf3ba6f1cdd6d47d3))
|
||||
|
||||
# [5.47.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.2...v5.47.0-dev.3) (2025-11-12)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Instagram:** Add `Disable auto story flipping` patch ([#6262](https://github.com/ReVanced/revanced-patches/issues/6262)) ([2f0de15](https://github.com/ReVanced/revanced-patches/commit/2f0de15e67e4f99ed6ecdc136d04cceb23b0d069))
|
||||
|
||||
# [5.47.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.1...v5.47.0-dev.2) (2025-11-12)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Instagram - Disable signature check:** Change patch to default excluded ([#6283](https://github.com/ReVanced/revanced-patches/issues/6283)) ([bb745b5](https://github.com/ReVanced/revanced-patches/commit/bb745b555b3808b7679c5995319aa365630fbd76))
|
||||
|
||||
# [5.47.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.46.0...v5.47.0-dev.1) (2025-11-12)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Instagram:** Add `Anonymous story viewing` patch ([#6263](https://github.com/ReVanced/revanced-patches/issues/6263)) ([94ae84a](https://github.com/ReVanced/revanced-patches/commit/94ae84ad0fc3a9197c82d5356301d464730c3b17))
|
||||
|
||||
# [5.46.0](https://github.com/ReVanced/revanced-patches/compare/v5.45.0...v5.46.0) (2025-11-10)
|
||||
|
||||
|
||||
|
||||
@@ -35,6 +35,15 @@ public class LinkSanitizer {
|
||||
|
||||
public Uri sanitizeUri(Uri uri) {
|
||||
try {
|
||||
String scheme = uri.getScheme();
|
||||
if (scheme == null || !(scheme.equals("http") || scheme.equals("https"))) {
|
||||
// Opening YouTube share sheet 'other' option passes the video title as a URI.
|
||||
// Checking !uri.isHierarchical() works for all cases, except if the
|
||||
// video title starts with / and then it's hierarchical but still an invalid URI.
|
||||
Logger.printDebug(() -> "Ignoring uri: " + uri);
|
||||
return uri;
|
||||
}
|
||||
|
||||
Uri.Builder builder = uri.buildUpon().clearQuery();
|
||||
|
||||
if (!parametersToRemove.isEmpty()) {
|
||||
|
||||
@@ -58,6 +58,23 @@ public abstract class Setting<T> {
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Availability based on a single parent setting being disabled.
|
||||
*/
|
||||
public static Availability parentNot(BooleanSetting parent) {
|
||||
return new Availability() {
|
||||
@Override
|
||||
public boolean isAvailable() {
|
||||
return !parent.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Setting<?>> getParentSettings() {
|
||||
return Collections.singletonList(parent);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Availability based on all parents being enabled.
|
||||
*/
|
||||
|
||||
@@ -72,7 +72,7 @@ public class SpoofVideoStreamsPatch {
|
||||
public static boolean spoofingToClientWithNoMultiAudioStreams() {
|
||||
return isPatchIncluded()
|
||||
&& SPOOF_STREAMING_DATA
|
||||
&& preferredClient != ClientType.IPADOS;
|
||||
&& !preferredClient.supportsMultiAudioTracks;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -44,10 +44,14 @@ final class DescriptionComponentsFilter extends Filter {
|
||||
"video_attributes_section"
|
||||
);
|
||||
|
||||
final StringFilterGroup featuredSection = new StringFilterGroup(
|
||||
Settings.HIDE_FEATURED_SECTION,
|
||||
// "media_lockup", "structured_description_video_lockup"
|
||||
"compact_infocard"
|
||||
final StringFilterGroup featuredLinksSection = new StringFilterGroup(
|
||||
Settings.HIDE_FEATURED_LINKS_SECTION,
|
||||
"media_lockup"
|
||||
);
|
||||
|
||||
final StringFilterGroup featuredVideosSection = new StringFilterGroup(
|
||||
Settings.HIDE_FEATURED_VIDEOS_SECTION,
|
||||
"structured_description_video_lockup"
|
||||
);
|
||||
|
||||
final StringFilterGroup podcastSection = new StringFilterGroup(
|
||||
@@ -76,7 +80,7 @@ final class DescriptionComponentsFilter extends Filter {
|
||||
);
|
||||
|
||||
subscribeButton = new StringFilterGroup(
|
||||
Settings.HIDE_DESCRIPTION_SUBSCRIBE_BUTTON,
|
||||
Settings.HIDE_SUBSCRIBE_BUTTON,
|
||||
"subscribe_button"
|
||||
);
|
||||
|
||||
@@ -110,7 +114,8 @@ final class DescriptionComponentsFilter extends Filter {
|
||||
aiGeneratedVideoSummarySection,
|
||||
askSection,
|
||||
attributesSection,
|
||||
featuredSection,
|
||||
featuredLinksSection,
|
||||
featuredVideosSection,
|
||||
horizontalShelf,
|
||||
howThisWasMadeSection,
|
||||
hypePoints,
|
||||
|
||||
@@ -21,13 +21,14 @@ import app.revanced.extension.youtube.shared.PlayerType;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final class LayoutComponentsFilter extends Filter {
|
||||
private static final StringTrieSearch mixPlaylistsExceptions = new StringTrieSearch(
|
||||
private static final StringTrieSearch mixPlaylistsContextExceptions = new StringTrieSearch(
|
||||
"V.ED", // Playlist browse id.
|
||||
"java.lang.ref.WeakReference"
|
||||
);
|
||||
private static final ByteArrayFilterGroup mixPlaylistsExceptions2 = new ByteArrayFilterGroup(
|
||||
private static final ByteArrayFilterGroup mixPlaylistsBufferExceptions = new ByteArrayFilterGroup(
|
||||
null,
|
||||
"cell_description_body"
|
||||
"cell_description_body",
|
||||
"channel_profile"
|
||||
);
|
||||
private static final ByteArrayFilterGroup mixPlaylists = new ByteArrayFilterGroup(
|
||||
null,
|
||||
@@ -67,8 +68,14 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
"chips_shelf"
|
||||
);
|
||||
|
||||
final var visualSpacer = new StringFilterGroup(
|
||||
Settings.HIDE_VISUAL_SPACER,
|
||||
"cell_divider"
|
||||
);
|
||||
|
||||
addIdentifierCallbacks(
|
||||
chipsShelf
|
||||
chipsShelf,
|
||||
visualSpacer
|
||||
);
|
||||
|
||||
// Paths.
|
||||
@@ -259,12 +266,20 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
);
|
||||
channelProfileBuffer = new ByteArrayFilterGroupList();
|
||||
channelProfileBuffer.addAll(new ByteArrayFilterGroup(
|
||||
Settings.HIDE_VISIT_STORE_BUTTON,
|
||||
"header_store_button"
|
||||
Settings.HIDE_STORE_BUTTON,
|
||||
"store_button"
|
||||
),
|
||||
new ByteArrayFilterGroup(
|
||||
Settings.HIDE_VISIT_COMMUNITY_BUTTON,
|
||||
Settings.HIDE_COMMUNITY_BUTTON,
|
||||
"community_button"
|
||||
),
|
||||
new ByteArrayFilterGroup(
|
||||
Settings.HIDE_JOIN_BUTTON,
|
||||
"sponsor_button"
|
||||
),
|
||||
new ByteArrayFilterGroup(
|
||||
Settings.HIDE_SUBSCRIBE_BUTTON_IN_CHANNEL_PAGE,
|
||||
"subscribe_menu"
|
||||
)
|
||||
);
|
||||
|
||||
@@ -380,17 +395,15 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Prevent playlist items being hidden, if a mix playlist is present in it.
|
||||
if (mixPlaylistsExceptions.matches(conversionContext.toString())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Prevent hiding the description of some videos accidentally.
|
||||
if (mixPlaylistsExceptions2.check(bytes).isFiltered()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (mixPlaylists.check(bytes).isFiltered()) {
|
||||
if (mixPlaylists.check(bytes).isFiltered()
|
||||
// Prevent hiding the description of some videos accidentally.
|
||||
&& !mixPlaylistsBufferExceptions.check(bytes).isFiltered()
|
||||
// Prevent playlist items being hidden, if a mix playlist is present in it.
|
||||
// Check last since it requires creating a context string.
|
||||
//
|
||||
// FIXME: The conversion context passed in does not always generate a valid toString.
|
||||
// This string check may no longer be needed, or the patch may be broken.
|
||||
&& !mixPlaylistsContextExceptions.matches(conversionContext.toString())) {
|
||||
Logger.printDebug(() -> "Filtered mix playlist");
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -12,13 +12,9 @@ import java.util.List;
|
||||
public class PlayerFlyoutMenuItemsFilter extends Filter {
|
||||
|
||||
public static final class HideAudioFlyoutMenuAvailability implements Setting.Availability {
|
||||
private static final boolean AVAILABLE_ON_LAUNCH = !SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams();
|
||||
|
||||
@Override
|
||||
public boolean isAvailable() {
|
||||
// Check conditions of launch and now. Otherwise if spoofing is changed
|
||||
// without a restart the setting will show as available when it's not.
|
||||
return AVAILABLE_ON_LAUNCH && !SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams();
|
||||
return !SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -44,9 +44,10 @@ public final class ShortsFilter extends Filter {
|
||||
private final StringFilterGroup useTemplateButton;
|
||||
private final ByteArrayFilterGroup useTemplateButtonBuffer;
|
||||
|
||||
private final StringFilterGroup autoDubbedLabel;
|
||||
private final StringFilterGroup subscribeButton;
|
||||
private final StringFilterGroup joinButton;
|
||||
private final StringFilterGroup paidPromotionButton;
|
||||
private final StringFilterGroup paidPromotionLabel;
|
||||
private final StringFilterGroup shelfHeader;
|
||||
|
||||
private final StringFilterGroup suggestedAction;
|
||||
@@ -161,6 +162,18 @@ public final class ShortsFilter extends Filter {
|
||||
"participation_bar.e"
|
||||
);
|
||||
|
||||
StringFilterGroup livePreview = new StringFilterGroup(
|
||||
Settings.HIDE_SHORTS_LIVE_PREVIEW,
|
||||
// Live Shorts preview that can popup while scrolling through Shorts player.
|
||||
// Can be removed if a way to disable live Shorts is found.
|
||||
"live_preview_page_vm.e"
|
||||
);
|
||||
|
||||
autoDubbedLabel = new StringFilterGroup(
|
||||
Settings.HIDE_SHORTS_AUTO_DUBBED_LABEL,
|
||||
"badge."
|
||||
);
|
||||
|
||||
joinButton = new StringFilterGroup(
|
||||
Settings.HIDE_SHORTS_JOIN_BUTTON,
|
||||
"sponsor_button"
|
||||
@@ -171,9 +184,10 @@ public final class ShortsFilter extends Filter {
|
||||
"subscribe_button"
|
||||
);
|
||||
|
||||
paidPromotionButton = new StringFilterGroup(
|
||||
paidPromotionLabel = new StringFilterGroup(
|
||||
Settings.HIDE_PAID_PROMOTION_LABEL,
|
||||
"reel_player_disclosure.e"
|
||||
"reel_player_disclosure.e",
|
||||
"shorts_disclosures.e"
|
||||
);
|
||||
|
||||
shortsActionBar = new StringFilterGroup(
|
||||
@@ -219,10 +233,10 @@ public final class ShortsFilter extends Filter {
|
||||
);
|
||||
|
||||
addPathCallbacks(
|
||||
shortsCompactFeedVideo, joinButton, subscribeButton, paidPromotionButton,
|
||||
shortsCompactFeedVideo, joinButton, subscribeButton, paidPromotionLabel, autoDubbedLabel,
|
||||
shortsActionBar, suggestedAction, pausedOverlayButtons, channelBar, previewComment,
|
||||
fullVideoLinkLabel, videoTitle, useSoundButton, reelSoundMetadata, soundButton, infoPanel,
|
||||
stickers, likeFountain, likeButton, dislikeButton
|
||||
stickers, likeFountain, likeButton, dislikeButton, livePreview
|
||||
);
|
||||
|
||||
//
|
||||
@@ -250,6 +264,12 @@ public final class ShortsFilter extends Filter {
|
||||
// Suggested actions.
|
||||
//
|
||||
suggestedActionsBuffer.addAll(
|
||||
new ByteArrayFilterGroup(
|
||||
Settings.HIDE_SHORTS_PREVIEW_COMMENT,
|
||||
// Preview comment that can popup while a Short is playing.
|
||||
// Uses no bundled icons, and instead the users profile photo is shown.
|
||||
"shorts-comments-panel"
|
||||
),
|
||||
new ByteArrayFilterGroup(
|
||||
Settings.HIDE_SHORTS_SHOP_BUTTON,
|
||||
"yt_outline_bag_"
|
||||
@@ -322,7 +342,8 @@ public final class ShortsFilter extends Filter {
|
||||
boolean isFiltered(String identifier, String path, byte[] buffer,
|
||||
StringFilterGroup matchedGroup, FilterContentType contentType, int contentIndex) {
|
||||
if (contentType == FilterContentType.PATH) {
|
||||
if (matchedGroup == subscribeButton || matchedGroup == joinButton || matchedGroup == paidPromotionButton) {
|
||||
if (matchedGroup == subscribeButton || matchedGroup == joinButton
|
||||
|| matchedGroup == paidPromotionLabel || matchedGroup == autoDubbedLabel) {
|
||||
// Selectively filter to avoid false positive filtering of other subscribe/join buttons.
|
||||
return path.startsWith(REEL_CHANNEL_BAR_PATH) || path.startsWith(REEL_METAPANEL_PATH);
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package app.revanced.extension.youtube.settings;
|
||||
import static java.lang.Boolean.FALSE;
|
||||
import static java.lang.Boolean.TRUE;
|
||||
import static app.revanced.extension.shared.settings.Setting.parent;
|
||||
import static app.revanced.extension.shared.settings.Setting.parentNot;
|
||||
import static app.revanced.extension.shared.settings.Setting.parentsAll;
|
||||
import static app.revanced.extension.shared.settings.Setting.parentsAny;
|
||||
import static app.revanced.extension.youtube.patches.ChangeFormFactorPatch.FormFactor;
|
||||
@@ -115,6 +116,7 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting HIDE_UPLOAD_TIME = new BooleanSetting("revanced_hide_upload_time", FALSE, "revanced_hide_upload_time_user_dialog_message");
|
||||
public static final BooleanSetting HIDE_VIDEO_RECOMMENDATION_LABELS = new BooleanSetting("revanced_hide_video_recommendation_labels", TRUE);
|
||||
public static final BooleanSetting HIDE_VIEW_COUNT = new BooleanSetting("revanced_hide_view_count", FALSE, "revanced_hide_view_count_user_dialog_message");
|
||||
public static final BooleanSetting HIDE_VISUAL_SPACER = new BooleanSetting("revanced_hide_visual_spacer", TRUE);
|
||||
|
||||
// Alternative thumbnails
|
||||
public static final EnumSetting<ThumbnailOption> ALT_THUMBNAIL_HOME = new EnumSetting<>("revanced_alt_thumbnail_home", ThumbnailOption.ORIGINAL);
|
||||
@@ -136,11 +138,13 @@ public class Settings extends BaseSettings {
|
||||
parentsAny(HIDE_KEYWORD_CONTENT_HOME, HIDE_KEYWORD_CONTENT_SUBSCRIPTIONS, HIDE_KEYWORD_CONTENT_SEARCH));
|
||||
|
||||
// Channel page
|
||||
public static final BooleanSetting HIDE_COMMUNITY_BUTTON = new BooleanSetting("revanced_hide_community_button", TRUE);
|
||||
public static final BooleanSetting HIDE_FOR_YOU_SHELF = new BooleanSetting("revanced_hide_for_you_shelf", FALSE);
|
||||
public static final BooleanSetting HIDE_JOIN_BUTTON = new BooleanSetting("revanced_hide_join_button", FALSE);
|
||||
public static final BooleanSetting HIDE_LINKS_PREVIEW = new BooleanSetting("revanced_hide_links_preview", TRUE);
|
||||
public static final BooleanSetting HIDE_MEMBERS_SHELF = new BooleanSetting("revanced_hide_members_shelf", TRUE);
|
||||
public static final BooleanSetting HIDE_VISIT_COMMUNITY_BUTTON = new BooleanSetting("revanced_hide_visit_community_button", TRUE);
|
||||
public static final BooleanSetting HIDE_VISIT_STORE_BUTTON = new BooleanSetting("revanced_hide_visit_store_button", TRUE);
|
||||
public static final BooleanSetting HIDE_STORE_BUTTON = new BooleanSetting("revanced_hide_store_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SUBSCRIBE_BUTTON_IN_CHANNEL_PAGE = new BooleanSetting("revanced_hide_subscribe_button_in_channel_page", FALSE);
|
||||
|
||||
// Player
|
||||
public static final BooleanSetting COPY_VIDEO_URL = new BooleanSetting("revanced_copy_video_url", FALSE);
|
||||
@@ -210,13 +214,14 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting HIDE_ASK_SECTION = new BooleanSetting("revanced_hide_ask_section", FALSE);
|
||||
public static final BooleanSetting HIDE_ATTRIBUTES_SECTION = new BooleanSetting("revanced_hide_attributes_section", FALSE);
|
||||
public static final BooleanSetting HIDE_CHAPTERS_SECTION = new BooleanSetting("revanced_hide_chapters_section", TRUE);
|
||||
public static final BooleanSetting HIDE_FEATURED_SECTION = new BooleanSetting("revanced_hide_featured_section", TRUE);
|
||||
public static final BooleanSetting HIDE_HOW_THIS_WAS_MADE_SECTION = new BooleanSetting("revanced_hide_how_this_was_made_section", FALSE);
|
||||
public static final BooleanSetting HIDE_HYPE_POINTS = new BooleanSetting("revanced_hide_hype_points", FALSE);
|
||||
public static final BooleanSetting HIDE_INFO_CARDS_SECTION = new BooleanSetting("revanced_hide_info_cards_section", TRUE);
|
||||
public static final BooleanSetting HIDE_FEATURED_LINKS_SECTION = new BooleanSetting("revanced_hide_featured_links_section", FALSE, parentNot(HIDE_INFO_CARDS_SECTION));
|
||||
public static final BooleanSetting HIDE_FEATURED_VIDEOS_SECTION = new BooleanSetting("revanced_hide_featured_videos_section", FALSE, parentNot(HIDE_INFO_CARDS_SECTION));
|
||||
public static final BooleanSetting HIDE_SUBSCRIBE_BUTTON = new BooleanSetting("revanced_hide_subscribe_button", FALSE, parentNot(HIDE_INFO_CARDS_SECTION));
|
||||
public static final BooleanSetting HIDE_KEY_CONCEPTS_SECTION = new BooleanSetting("revanced_hide_key_concepts_section", FALSE);
|
||||
public static final BooleanSetting HIDE_PODCAST_SECTION = new BooleanSetting("revanced_hide_podcast_section", TRUE);
|
||||
public static final BooleanSetting HIDE_DESCRIPTION_SUBSCRIBE_BUTTON = new BooleanSetting("revanced_hide_description_subscribe_button", TRUE);
|
||||
public static final BooleanSetting HIDE_TRANSCRIPT_SECTION = new BooleanSetting("revanced_hide_transcript_section", TRUE);
|
||||
|
||||
// Action buttons
|
||||
@@ -228,11 +233,11 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting HIDE_HYPE_BUTTON = new BooleanSetting("revanced_hide_hype_button", FALSE);
|
||||
public static final BooleanSetting HIDE_LIKE_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_like_dislike_button", FALSE);
|
||||
public static final BooleanSetting HIDE_PROMOTE_BUTTON = new BooleanSetting("revanced_hide_promote_button", FALSE);
|
||||
public static final BooleanSetting HIDE_REMIX_BUTTON = new BooleanSetting("revanced_hide_remix_button", TRUE);
|
||||
public static final BooleanSetting HIDE_REMIX_BUTTON = new BooleanSetting("revanced_hide_remix_button", FALSE);
|
||||
public static final BooleanSetting HIDE_REPORT_BUTTON = new BooleanSetting("revanced_hide_report_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SAVE_BUTTON = new BooleanSetting("revanced_hide_save_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHARE_BUTTON = new BooleanSetting("revanced_hide_share_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHOP_BUTTON = new BooleanSetting("revanced_hide_shop_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHOP_BUTTON = new BooleanSetting("revanced_hide_shop_button", TRUE);
|
||||
public static final BooleanSetting HIDE_STOP_ADS_BUTTON = new BooleanSetting("revanced_hide_stop_ads_button", TRUE);
|
||||
public static final BooleanSetting HIDE_THANKS_BUTTON = new BooleanSetting("revanced_hide_thanks_button", TRUE);
|
||||
|
||||
@@ -292,6 +297,7 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting DISABLE_RESUMING_SHORTS_PLAYER = new BooleanSetting("revanced_disable_resuming_shorts_player", FALSE);
|
||||
public static final BooleanSetting DISABLE_SHORTS_BACKGROUND_PLAYBACK = new BooleanSetting("revanced_shorts_disable_background_playback", FALSE);
|
||||
public static final EnumSetting<ShortsPlayerType> SHORTS_PLAYER_TYPE = new EnumSetting<>("revanced_shorts_player_type", ShortsPlayerType.SHORTS_PLAYER);
|
||||
public static final BooleanSetting HIDE_SHORTS_AUTO_DUBBED_LABEL = new BooleanSetting("revanced_hide_shorts_auto_dubbed_label", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_CHANNEL_BAR = new BooleanSetting("revanced_hide_shorts_channel_bar", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_COMMENTS_BUTTON = new BooleanSetting("revanced_hide_shorts_comments_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_shorts_dislike_button", FALSE);
|
||||
@@ -306,11 +312,12 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting HIDE_SHORTS_JOIN_BUTTON = new BooleanSetting("revanced_hide_shorts_join_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_LIKE_BUTTON = new BooleanSetting("revanced_hide_shorts_like_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_LIKE_FOUNTAIN = new BooleanSetting("revanced_hide_shorts_like_fountain", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_LIVE_PREVIEW = new BooleanSetting("revanced_hide_shorts_live_preview", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_LOCATION_LABEL = new BooleanSetting("revanced_hide_shorts_location_label", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_NAVIGATION_BAR = new BooleanSetting("revanced_hide_shorts_navigation_bar", FALSE, true);
|
||||
public static final BooleanSetting HIDE_SHORTS_PAUSED_OVERLAY_BUTTONS = new BooleanSetting("revanced_hide_shorts_paused_overlay_buttons", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_PREVIEW_COMMENT = new BooleanSetting("revanced_hide_shorts_preview_comment", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_REMIX_BUTTON = new BooleanSetting("revanced_hide_shorts_remix_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_REMIX_BUTTON = new BooleanSetting("revanced_hide_shorts_remix_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SAVE_SOUND_BUTTON = new BooleanSetting("revanced_hide_shorts_save_sound_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SEARCH = new BooleanSetting("revanced_hide_shorts_search", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SEARCH_SUGGESTIONS = new BooleanSetting("revanced_hide_shorts_search_suggestions", TRUE);
|
||||
|
||||
@@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
|
||||
org.gradle.parallel = true
|
||||
android.useAndroidX = true
|
||||
kotlin.code.style = official
|
||||
version = 5.46.0
|
||||
version = 5.47.0-dev.12
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
public final class DisableReelsScrollingPatchKt {
|
||||
public static final fun getDisableReelsScrollingPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/all/misc/activity/exportall/ExportAllActivitiesPatchKt {
|
||||
public static final fun getExportAllActivitiesPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
|
||||
}
|
||||
@@ -56,6 +60,10 @@ public final class app/revanced/patches/all/misc/connectivity/telephony/sim/spoo
|
||||
public static final fun getSpoofSimCountryPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/all/misc/connectivity/telephony/sim/spoof/SpoofSimProviderPatchKt {
|
||||
public static final fun getSpoofSimProviderPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/all/misc/connectivity/wifi/spoof/SpoofWifiPatchKt {
|
||||
public static final fun getSpoofWifiPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -180,6 +188,10 @@ public final class app/revanced/patches/crunchyroll/ads/HideAdsPatchKt {
|
||||
public static final fun getHideAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/disneyplus/ads/SkipAdsPatchKt {
|
||||
public static final fun getSkipAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/duolingo/ad/DisableAdsPatchKt {
|
||||
public static final fun getDisableAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -276,6 +288,10 @@ public final class app/revanced/patches/instagram/feed/LimitFeedToFollowedProfil
|
||||
public static final fun getLimitFeedToFollowedProfiles ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/instagram/ghost/story/AnonymousStoryViewingPatchKt {
|
||||
public static final fun getAnonymousStoryViewingPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/instagram/hide/explore/HideExploreFeedKt {
|
||||
public static final fun getHideExploreFeedPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -316,10 +332,18 @@ public final class app/revanced/patches/instagram/misc/signature/SignatureCheckP
|
||||
public static final fun getSignatureCheckPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/instagram/story/flipping/DisableStoryAutoFlippingPatchKt {
|
||||
public static final fun getDisableStoryAutoFlippingPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/irplus/ad/RemoveAdsPatchKt {
|
||||
public static final fun getRemoveAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/letterboxd/ads/HideAdsPatchKt {
|
||||
public static final fun getHideAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/lightroom/misc/login/DisableMandatoryLoginPatchKt {
|
||||
public static final fun getDisableMandatoryLoginPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -605,6 +629,10 @@ public final class app/revanced/patches/protonmail/signature/RemoveSentFromSigna
|
||||
public static final fun getRemoveSentFromSignaturePatch ()Lapp/revanced/patcher/patch/ResourcePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/protonvpn/delay/RemoveDelayPatchKt {
|
||||
public static final fun getRemoveDelayPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/rar/misc/annoyances/purchasereminder/HidePurchaseReminderPatchKt {
|
||||
public static final fun getHidePurchaseReminderPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
@@ -1,105 +1,9 @@
|
||||
package app.revanced.patches.all.misc.connectivity.telephony.sim.spoof
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.stringOption
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||
import app.revanced.patches.all.misc.transformation.transformInstructionsPatch
|
||||
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
|
||||
import com.android.tools.smali.dexlib2.immutable.reference.ImmutableMethodReference
|
||||
import com.android.tools.smali.dexlib2.util.MethodUtil
|
||||
import java.util.*
|
||||
|
||||
@Deprecated("Patch was renamed", ReplaceWith("spoofSimProviderPatch"))
|
||||
@Suppress("unused")
|
||||
val spoofSimCountryPatch = bytecodePatch(
|
||||
name = "Spoof SIM country",
|
||||
description = "Spoofs country information returned by the SIM card provider.",
|
||||
use = false,
|
||||
) {
|
||||
val countries = Locale.getISOCountries().associateBy { Locale("", it).displayCountry }
|
||||
|
||||
fun isoCountryPatchOption(
|
||||
key: String,
|
||||
title: String,
|
||||
) = stringOption(
|
||||
key,
|
||||
null,
|
||||
countries,
|
||||
title,
|
||||
"ISO-3166-1 alpha-2 country code equivalent for the SIM provider's country code.",
|
||||
false,
|
||||
validator = { it: String? -> it == null || it.uppercase() in countries.values },
|
||||
)
|
||||
|
||||
val networkCountryIso by isoCountryPatchOption(
|
||||
"networkCountryIso",
|
||||
"Network ISO country code",
|
||||
)
|
||||
|
||||
val simCountryIso by isoCountryPatchOption(
|
||||
"simCountryIso",
|
||||
"SIM ISO country code",
|
||||
)
|
||||
|
||||
dependsOn(
|
||||
transformInstructionsPatch(
|
||||
filterMap = { _, _, instruction, instructionIndex ->
|
||||
if (instruction !is ReferenceInstruction) return@transformInstructionsPatch null
|
||||
|
||||
val reference = instruction.reference as? MethodReference ?: return@transformInstructionsPatch null
|
||||
|
||||
val match = MethodCall.entries.firstOrNull { search ->
|
||||
MethodUtil.methodSignaturesMatch(reference, search.reference)
|
||||
} ?: return@transformInstructionsPatch null
|
||||
|
||||
val iso = when (match) {
|
||||
MethodCall.NetworkCountryIso -> networkCountryIso
|
||||
MethodCall.SimCountryIso -> simCountryIso
|
||||
}?.lowercase()
|
||||
|
||||
iso?.let { instructionIndex to it }
|
||||
},
|
||||
transform = { mutableMethod, entry: Pair<Int, String> ->
|
||||
transformMethodCall(entry, mutableMethod)
|
||||
},
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
private fun transformMethodCall(
|
||||
entry: Pair<Int, String>,
|
||||
mutableMethod: MutableMethod,
|
||||
) {
|
||||
val (instructionIndex, methodCallValue) = entry
|
||||
|
||||
val register = mutableMethod.getInstruction<OneRegisterInstruction>(instructionIndex + 1).registerA
|
||||
|
||||
mutableMethod.replaceInstruction(
|
||||
instructionIndex + 1,
|
||||
"const-string v$register, \"$methodCallValue\"",
|
||||
)
|
||||
}
|
||||
|
||||
private enum class MethodCall(
|
||||
val reference: MethodReference,
|
||||
) {
|
||||
NetworkCountryIso(
|
||||
ImmutableMethodReference(
|
||||
"Landroid/telephony/TelephonyManager;",
|
||||
"getNetworkCountryIso",
|
||||
emptyList(),
|
||||
"Ljava/lang/String;",
|
||||
),
|
||||
),
|
||||
SimCountryIso(
|
||||
ImmutableMethodReference(
|
||||
"Landroid/telephony/TelephonyManager;",
|
||||
"getSimCountryIso",
|
||||
emptyList(),
|
||||
"Ljava/lang/String;",
|
||||
),
|
||||
),
|
||||
}
|
||||
val spoofSimCountryPatch = bytecodePatch {
|
||||
dependsOn(spoofSimProviderPatch)
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
package app.revanced.patches.all.misc.connectivity.telephony.sim.spoof
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.intOption
|
||||
import app.revanced.patcher.patch.stringOption
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||
import app.revanced.patches.all.misc.transformation.transformInstructionsPatch
|
||||
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
|
||||
import com.android.tools.smali.dexlib2.immutable.reference.ImmutableMethodReference
|
||||
import com.android.tools.smali.dexlib2.util.MethodUtil
|
||||
import java.util.Locale
|
||||
|
||||
@Suppress("unused")
|
||||
val spoofSimProviderPatch = bytecodePatch(
|
||||
name = "Spoof SIM provider",
|
||||
description = "Spoofs information about the SIM card provider.",
|
||||
use = false,
|
||||
) {
|
||||
val countries = Locale.getISOCountries().associateBy { Locale("", it).displayCountry }
|
||||
|
||||
fun isoCountryPatchOption(
|
||||
key: String,
|
||||
title: String,
|
||||
) = stringOption(
|
||||
key,
|
||||
null,
|
||||
countries,
|
||||
title,
|
||||
"ISO-3166-1 alpha-2 country code equivalent for the SIM provider's country code.",
|
||||
false,
|
||||
validator = { it: String? -> it == null || it.uppercase() in countries.values },
|
||||
)
|
||||
|
||||
fun isMccMncValid(it: Int?): Boolean = it == null || (it >= 10000 && it <= 999999)
|
||||
|
||||
val networkCountryIso by isoCountryPatchOption(
|
||||
"networkCountryIso",
|
||||
"Network ISO country code",
|
||||
)
|
||||
|
||||
val networkOperator by intOption(
|
||||
key = "networkOperator",
|
||||
title = "MCC+MNC network operator code",
|
||||
description = "The 5 or 6 digits MCC+MNC (Mobile Country Code + Mobile Network Code) of the network operator.",
|
||||
validator = { isMccMncValid(it) }
|
||||
)
|
||||
|
||||
val networkOperatorName by stringOption(
|
||||
key = "networkOperatorName",
|
||||
title = "Network operator name",
|
||||
description = "The full name of the network operator.",
|
||||
)
|
||||
|
||||
val simCountryIso by isoCountryPatchOption(
|
||||
"simCountryIso",
|
||||
"SIM ISO country code",
|
||||
)
|
||||
|
||||
val simOperator by intOption(
|
||||
key = "simOperator",
|
||||
title = "MCC+MNC SIM operator code",
|
||||
description = "The 5 or 6 digits MCC+MNC (Mobile Country Code + Mobile Network Code) of the SIM operator.",
|
||||
validator = { isMccMncValid(it) }
|
||||
)
|
||||
|
||||
val simOperatorName by stringOption(
|
||||
key = "simOperatorName",
|
||||
title = "SIM operator name",
|
||||
description = "The full name of the SIM operator.",
|
||||
)
|
||||
|
||||
dependsOn(
|
||||
transformInstructionsPatch(
|
||||
filterMap = { _, _, instruction, instructionIndex ->
|
||||
if (instruction !is ReferenceInstruction) return@transformInstructionsPatch null
|
||||
|
||||
val reference = instruction.reference as? MethodReference ?: return@transformInstructionsPatch null
|
||||
|
||||
val match = MethodCall.entries.firstOrNull { search ->
|
||||
MethodUtil.methodSignaturesMatch(reference, search.reference)
|
||||
} ?: return@transformInstructionsPatch null
|
||||
|
||||
val replacement = when (match) {
|
||||
MethodCall.NetworkCountryIso -> networkCountryIso?.lowercase()
|
||||
MethodCall.NetworkOperator -> networkOperator?.toString()
|
||||
MethodCall.NetworkOperatorName -> networkOperatorName
|
||||
MethodCall.SimCountryIso -> simCountryIso?.lowercase()
|
||||
MethodCall.SimOperator -> simOperator?.toString()
|
||||
MethodCall.SimOperatorName -> simOperatorName
|
||||
}
|
||||
replacement?.let { instructionIndex to it }
|
||||
},
|
||||
transform = ::transformMethodCall,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
private fun transformMethodCall(
|
||||
mutableMethod: MutableMethod,
|
||||
entry: Pair<Int, String>,
|
||||
) {
|
||||
val (instructionIndex, methodCallValue) = entry
|
||||
|
||||
// Get the register which would have contained the return value
|
||||
val register = mutableMethod.getInstruction<OneRegisterInstruction>(instructionIndex + 1).registerA
|
||||
|
||||
// Replace the move-result instruction with our fake value
|
||||
mutableMethod.replaceInstruction(
|
||||
instructionIndex + 1,
|
||||
"const-string v$register, \"$methodCallValue\"",
|
||||
)
|
||||
}
|
||||
|
||||
private enum class MethodCall(
|
||||
val reference: MethodReference,
|
||||
) {
|
||||
NetworkCountryIso(
|
||||
ImmutableMethodReference(
|
||||
"Landroid/telephony/TelephonyManager;",
|
||||
"getNetworkCountryIso",
|
||||
emptyList(),
|
||||
"Ljava/lang/String;",
|
||||
),
|
||||
),
|
||||
NetworkOperator(
|
||||
ImmutableMethodReference(
|
||||
"Landroid/telephony/TelephonyManager;",
|
||||
"getNetworkOperator",
|
||||
emptyList(),
|
||||
"Ljava/lang/String;",
|
||||
),
|
||||
),
|
||||
NetworkOperatorName(
|
||||
ImmutableMethodReference(
|
||||
"Landroid/telephony/TelephonyManager;",
|
||||
"getNetworkOperatorName",
|
||||
emptyList(),
|
||||
"Ljava/lang/String;",
|
||||
),
|
||||
),
|
||||
SimCountryIso(
|
||||
ImmutableMethodReference(
|
||||
"Landroid/telephony/TelephonyManager;",
|
||||
"getSimCountryIso",
|
||||
emptyList(),
|
||||
"Ljava/lang/String;",
|
||||
),
|
||||
),
|
||||
SimOperator(
|
||||
ImmutableMethodReference(
|
||||
"Landroid/telephony/TelephonyManager;",
|
||||
"getSimOperator",
|
||||
emptyList(),
|
||||
"Ljava/lang/String;",
|
||||
),
|
||||
),
|
||||
SimOperatorName(
|
||||
ImmutableMethodReference(
|
||||
"Landroid/telephony/TelephonyManager;",
|
||||
"getSimOperatorName",
|
||||
emptyList(),
|
||||
"Ljava/lang/String;",
|
||||
),
|
||||
),
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package app.revanced.patches.disneyplus.ads
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val insertionGetPointsFingerprint = fingerprint {
|
||||
returns("Ljava/util/List")
|
||||
custom { method, _ ->
|
||||
method.name == "getPoints" &&
|
||||
method.definingClass == "Lcom/dss/sdk/internal/media/Insertion;"
|
||||
}
|
||||
}
|
||||
|
||||
internal val insertionGetRangesFingerprint = fingerprint {
|
||||
returns("Ljava/util/List")
|
||||
custom { method, _ ->
|
||||
method.name == "getRanges" &&
|
||||
method.definingClass == "Lcom/dss/sdk/internal/media/Insertion;"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package app.revanced.patches.disneyplus.ads
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
|
||||
@Suppress("unused")
|
||||
val skipAdsPatch = bytecodePatch(
|
||||
name = "Skip ads",
|
||||
description = "Automatically skips ads.",
|
||||
) {
|
||||
compatibleWith("com.disney.disneyplus")
|
||||
|
||||
execute {
|
||||
arrayOf(insertionGetPointsFingerprint, insertionGetRangesFingerprint).forEach {
|
||||
it.method.addInstructions(
|
||||
0,
|
||||
"""
|
||||
new-instance v0, Ljava/util/ArrayList;
|
||||
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
|
||||
return-object v0
|
||||
""",
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package app.revanced.patches.instagram.ghost.story
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.util.Utils.trimIndentMultiline
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val anonymousStoryViewingPatch = bytecodePatch(
|
||||
name = "Anonymous story viewing",
|
||||
description = """
|
||||
View stories without sending any information to the server.
|
||||
Your view will not appear in the story viewers list.
|
||||
Note: Since no data is sent, a story you have already viewed may appear as new on another device.
|
||||
""".trimIndentMultiline(),
|
||||
use = false
|
||||
) {
|
||||
compatibleWith("com.instagram.android")
|
||||
|
||||
execute {
|
||||
// Prevent the hashmap of the seen media to be filled
|
||||
setMediaSeenHashmapFingerprint.method.returnEarly()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package app.revanced.patches.instagram.ghost.story
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val setMediaSeenHashmapFingerprint = fingerprint {
|
||||
parameters()
|
||||
returns("V")
|
||||
strings("media/seen/")
|
||||
}
|
||||
@@ -6,7 +6,9 @@ import app.revanced.util.returnEarly
|
||||
@Suppress("unused")
|
||||
val signatureCheckPatch = bytecodePatch(
|
||||
name = "Disable signature check",
|
||||
description = "Disables the signature check that causes the app to crash on startup."
|
||||
description = "Disables the signature check that can cause the app to crash on startup. " +
|
||||
"Including this patch may cause issues with sharing or opening external Instagram links.",
|
||||
use = false
|
||||
) {
|
||||
compatibleWith("com.instagram.android")
|
||||
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.instagram.reels.clipsSwipeRefreshLayoutOnInterceptTouchEventFingerprint
|
||||
import app.revanced.patches.instagram.reels.clipsViewPagerImplGetViewAtIndexFingerprint
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val disableReelsScrollingPatch = bytecodePatch(
|
||||
name = "Disable Reels scrolling",
|
||||
description = "Disables the endless scrolling behavior in Instagram Reels, preventing swiping to the next Reel. " +
|
||||
"Note: On a clean install, the 'Tip' animation may appear but will stop on its own after a few seconds.",
|
||||
use = true
|
||||
) {
|
||||
compatibleWith("com.instagram.android")
|
||||
|
||||
execute {
|
||||
val viewPagerField = clipsViewPagerImplGetViewAtIndexFingerprint.classDef.fields.first {
|
||||
it.type == "Landroidx/viewpager2/widget/ViewPager2;"
|
||||
}
|
||||
|
||||
// Disable user input on the ViewPager2 to prevent scrolling.
|
||||
clipsViewPagerImplGetViewAtIndexFingerprint.method.addInstructions(
|
||||
0,
|
||||
"""
|
||||
iget-object v0, p0, $viewPagerField
|
||||
const/4 v1, 0x0
|
||||
invoke-virtual { v0, v1 }, Landroidx/viewpager2/widget/ViewPager2;->setUserInputEnabled(Z)V
|
||||
"""
|
||||
)
|
||||
|
||||
// Return false in onInterceptTouchEvent to disable pull-to-refresh.
|
||||
clipsSwipeRefreshLayoutOnInterceptTouchEventFingerprint.method.returnEarly(false)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package app.revanced.patches.instagram.reels
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val clipsViewPagerImplGetViewAtIndexFingerprint = fingerprint {
|
||||
strings("ClipsViewPagerImpl_getViewAtIndex")
|
||||
}
|
||||
|
||||
internal val clipsSwipeRefreshLayoutOnInterceptTouchEventFingerprint = fingerprint {
|
||||
parameters("Landroid/view/MotionEvent;")
|
||||
custom { _, classDef -> classDef.type == "Linstagram/features/clips/viewer/ui/ClipsSwipeRefreshLayout;" }
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package app.revanced.patches.instagram.story.flipping
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val disableStoryAutoFlippingPatch = bytecodePatch(
|
||||
name = "Disable story auto flipping",
|
||||
description = "Disable stories automatically flipping/skipping after some seconds.",
|
||||
use = false
|
||||
) {
|
||||
compatibleWith("com.instagram.android")
|
||||
|
||||
execute {
|
||||
onStoryTimeoutActionFingerprint.method.returnEarly()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package app.revanced.patches.instagram.story.flipping
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val onStoryTimeoutActionFingerprint = fingerprint {
|
||||
parameters("Ljava/lang/Object;")
|
||||
returns("V")
|
||||
strings("userSession")
|
||||
custom { _, classDef ->
|
||||
classDef.type == "Linstagram/features/stories/fragment/ReelViewerFragment;"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package app.revanced.patches.letterboxd.ads
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal const val admobHelperClassName = "Lcom/letterboxd/letterboxd/helpers/AdmobHelper;"
|
||||
|
||||
internal val admobHelperSetShowAdsFingerprint = fingerprint {
|
||||
custom { method, classDef ->
|
||||
method.name == "setShowAds" && classDef.type == admobHelperClassName
|
||||
}
|
||||
}
|
||||
|
||||
internal val admobHelperShouldShowAdsFingerprint = fingerprint {
|
||||
custom { method, classDef ->
|
||||
method.name == "shouldShowAds" && classDef.type == admobHelperClassName
|
||||
}
|
||||
}
|
||||
|
||||
internal val filmFragmentShowAdsFingerprint = fingerprint {
|
||||
custom { method, classDef ->
|
||||
method.name == "showAds" && classDef.type.endsWith("/FilmFragment;")
|
||||
}
|
||||
}
|
||||
|
||||
internal val memberExtensionShowAdsFingerprint = fingerprint {
|
||||
custom { method, classDef ->
|
||||
method.name == "showAds" && classDef.type.endsWith("/AMemberExtensionKt;")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
|
||||
package app.revanced.patches.letterboxd.ads
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val hideAdsPatch = bytecodePatch(
|
||||
name = "Hide ads",
|
||||
) {
|
||||
compatibleWith("com.letterboxd.letterboxd")
|
||||
|
||||
execute {
|
||||
admobHelperSetShowAdsFingerprint.method.addInstruction(0, "const p1, 0x0")
|
||||
listOf(admobHelperShouldShowAdsFingerprint, filmFragmentShowAdsFingerprint, memberExtensionShowAdsFingerprint).forEach {
|
||||
it.method.returnEarly(false)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package app.revanced.patches.protonvpn.delay
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
|
||||
internal val longDelayFingerprint = fingerprint {
|
||||
custom { method, _ ->
|
||||
method.name == "getChangeServerLongDelayInSeconds"
|
||||
}
|
||||
}
|
||||
|
||||
internal val shortDelayFingerprint = fingerprint {
|
||||
custom { method, _ ->
|
||||
method.name == "getChangeServerShortDelayInSeconds"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package app.revanced.patches.protonvpn.delay
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val removeDelayPatch = bytecodePatch(
|
||||
name = "Remove delay",
|
||||
description = "Removes the delay when changing servers.",
|
||||
) {
|
||||
compatibleWith("ch.protonvpn.android")
|
||||
|
||||
execute {
|
||||
longDelayFingerprint.method.returnEarly(0)
|
||||
shortDelayFingerprint.method.returnEarly(0)
|
||||
}
|
||||
}
|
||||
@@ -145,13 +145,14 @@ val hideLayoutComponentsPatch = bytecodePatch(
|
||||
SwitchPreference("revanced_hide_ask_section"),
|
||||
SwitchPreference("revanced_hide_attributes_section"),
|
||||
SwitchPreference("revanced_hide_chapters_section"),
|
||||
SwitchPreference("revanced_hide_featured_section"),
|
||||
SwitchPreference("revanced_hide_featured_links_section"),
|
||||
SwitchPreference("revanced_hide_featured_videos_section"),
|
||||
SwitchPreference("revanced_hide_info_cards_section"),
|
||||
SwitchPreference("revanced_hide_how_this_was_made_section"),
|
||||
SwitchPreference("revanced_hide_hype_points"),
|
||||
SwitchPreference("revanced_hide_key_concepts_section"),
|
||||
SwitchPreference("revanced_hide_podcast_section"),
|
||||
SwitchPreference("revanced_hide_description_subscribe_button"),
|
||||
SwitchPreference("revanced_hide_subscribe_button"),
|
||||
SwitchPreference("revanced_hide_transcript_section"),
|
||||
),
|
||||
),
|
||||
@@ -214,19 +215,21 @@ val hideLayoutComponentsPatch = bytecodePatch(
|
||||
PreferenceScreenPreference(
|
||||
key = "revanced_channel_screen",
|
||||
preferences = setOf(
|
||||
SwitchPreference("revanced_hide_community_button"),
|
||||
SwitchPreference("revanced_hide_for_you_shelf"),
|
||||
SwitchPreference("revanced_hide_join_button"),
|
||||
SwitchPreference("revanced_hide_links_preview"),
|
||||
SwitchPreference("revanced_hide_members_shelf"),
|
||||
SwitchPreference("revanced_hide_visit_community_button"),
|
||||
SwitchPreference("revanced_hide_visit_store_button"),
|
||||
SwitchPreference("revanced_hide_store_button"),
|
||||
SwitchPreference("revanced_hide_subscribe_button_in_channel_page"),
|
||||
),
|
||||
),
|
||||
SwitchPreference("revanced_hide_album_cards"),
|
||||
SwitchPreference("revanced_hide_artist_cards"),
|
||||
SwitchPreference("revanced_hide_chips_shelf"),
|
||||
SwitchPreference("revanced_hide_community_posts"),
|
||||
SwitchPreference("revanced_hide_compact_banner"),
|
||||
SwitchPreference("revanced_hide_crowdfunding_box"),
|
||||
SwitchPreference("revanced_hide_chips_shelf"),
|
||||
SwitchPreference("revanced_hide_expandable_card"),
|
||||
SwitchPreference("revanced_hide_floating_microphone_button"),
|
||||
SwitchPreference(
|
||||
@@ -242,9 +245,10 @@ val hideLayoutComponentsPatch = bytecodePatch(
|
||||
SwitchPreference("revanced_hide_show_more_button"),
|
||||
SwitchPreference("revanced_hide_surveys"),
|
||||
SwitchPreference("revanced_hide_ticket_shelf"),
|
||||
SwitchPreference("revanced_hide_upload_time"),
|
||||
SwitchPreference("revanced_hide_video_recommendation_labels"),
|
||||
SwitchPreference("revanced_hide_view_count"),
|
||||
SwitchPreference("revanced_hide_upload_time"),
|
||||
SwitchPreference("revanced_hide_visual_spacer"),
|
||||
SwitchPreference("revanced_hide_doodles"),
|
||||
)
|
||||
|
||||
|
||||
@@ -101,6 +101,7 @@ private val hideShortsComponentsResourcePatch = resourcePatch {
|
||||
SwitchPreference("revanced_hide_shorts_effect_button"),
|
||||
SwitchPreference("revanced_hide_shorts_green_screen_button"),
|
||||
SwitchPreference("revanced_hide_shorts_hashtag_button"),
|
||||
SwitchPreference("revanced_hide_shorts_live_preview"),
|
||||
SwitchPreference("revanced_hide_shorts_new_posts_button"),
|
||||
SwitchPreference("revanced_hide_shorts_shop_button"),
|
||||
SwitchPreference("revanced_hide_shorts_tagged_products"),
|
||||
@@ -109,6 +110,7 @@ private val hideShortsComponentsResourcePatch = resourcePatch {
|
||||
SwitchPreference("revanced_hide_shorts_stickers"),
|
||||
|
||||
// Bottom of the screen.
|
||||
SwitchPreference("revanced_hide_shorts_auto_dubbed_label"),
|
||||
SwitchPreference("revanced_hide_shorts_location_label"),
|
||||
SwitchPreference("revanced_hide_shorts_channel_bar"),
|
||||
SwitchPreference("revanced_hide_shorts_info_panel"),
|
||||
|
||||
@@ -342,9 +342,9 @@ Hər halda, bunu aktivləşdirmə IP ünvanınız kimi bəzi istifadəçi məlum
|
||||
<string name="revanced_hide_podcast_section_title">\'Podkastı araşdırın\"-ı Gizlət</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Podkast bölməsin araşdırın gizlidir</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Podkast bölməsin araşdırın görünür</string>
|
||||
<string name="revanced_hide_featured_section_title">Önə çıxan məzmunu gizlət</string>
|
||||
<string name="revanced_hide_featured_section_summary_on">Önə çıxan məzmun bölməsi gizlənib</string>
|
||||
<string name="revanced_hide_featured_section_summary_off">Önə çıxan məzmun bölməsi göstərilir</string>
|
||||
<string name="revanced_hide_featured_section_title">Seçilən məzmunu gizlət</string>
|
||||
<string name="revanced_hide_featured_section_summary_on">Seçilən məzmun bölməsi gizlidir</string>
|
||||
<string name="revanced_hide_featured_section_summary_off">Seçilən məzmun bölməsi göstərilir</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Məlumat Kartlarını Gizlət</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">Məlumat kartları bölməsi gizlədilir</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">Məlumat kartları bölməsi göstərilir</string>
|
||||
@@ -352,8 +352,8 @@ Hər halda, bunu aktivləşdirmə IP ünvanınız kimi bəzi istifadəçi məlum
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Əsas konseptlər bölməsi gizlidir</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Əsas konseptlər bölməsi görünür</string>
|
||||
<string name="revanced_hide_description_subscribe_button_title">Abunə ol düyməsini gizlət</string>
|
||||
<string name="revanced_hide_description_subscribe_button_summary_on">Abunə düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_description_subscribe_button_summary_off">Abunə düyməsi görünür</string>
|
||||
<string name="revanced_hide_description_subscribe_button_summary_on">Abunə ol düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_description_subscribe_button_summary_off">Abunə ol düyməsi görünür</string>
|
||||
<string name="revanced_hide_transcript_section_title">Transkript-i Gizlət</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">Transkripsiya bölməsi gizlidir</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">Transkripsiya bölməsi göstərilir</string>
|
||||
@@ -1680,9 +1680,9 @@ Video oynatma AV1 ilə ilişə bilər və ya kadrlar buraxıla bilər."</string>
|
||||
<string name="revanced_music_hide_cast_button_title">Yayım düyməsini gizlət</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_on">Yayım düyməsi gizlidir</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_off">Yayım düyməsi göstərilir</string>
|
||||
<string name="revanced_music_hide_history_button_title">Keçmiş düyməsini gizlət</string>
|
||||
<string name="revanced_music_hide_history_button_summary_on">Keçmiş düyməsi gizlidir</string>
|
||||
<string name="revanced_music_hide_history_button_summary_off">Keçmiş düyməsi görünür</string>
|
||||
<string name="revanced_music_hide_history_button_title">Tarixçə düyməsini gizlət</string>
|
||||
<string name="revanced_music_hide_history_button_summary_on">Tarixçə düyməsi gizlidir</string>
|
||||
<string name="revanced_music_hide_history_button_summary_off">Tarixçə düyməsi görünür</string>
|
||||
<string name="revanced_music_hide_notification_button_title">Bildiriş düyməsini gizlət</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_on">Bildiriş düyməsi gizlidir</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_off">Bildiriş düyməsi görünür</string>
|
||||
@@ -1696,9 +1696,9 @@ Video oynatma AV1 ilə ilişə bilər və ya kadrlar buraxıla bilər."</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_off">Kateqoriya cizgisi görünür</string>
|
||||
</patch>
|
||||
<patch id="layout.miniplayercolor.changeMiniplayerColor">
|
||||
<string name="revanced_music_change_miniplayer_color_title">Miniplayer rəngini dəyişdirin</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_on">Miniplayer rəngi tam ekran pleyeri ilə eynidir</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_off">Miniplayer defolt rəngdən istifadə edir</string>
|
||||
<string name="revanced_music_change_miniplayer_color_title">Kiçik oynadıcı rəngini dəyişdir</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_on">Kiçik oynadıcı rəngi tam ekran oynadıcıya bərabərdir</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_off">Kiçik oynadıcı ilkin rəngi istifadə edir</string>
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<string name="revanced_music_navigation_bar_screen_title">Fəaliyyət cizgisi</string>
|
||||
|
||||
@@ -344,9 +344,9 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_podcast_section_title">Ενότητα «Εξερευνήστε το podcast»</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Κρυμμένη</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_hide_featured_section_title">Απόκρυψη Προβεβλημένου περιεχομένου</string>
|
||||
<string name="revanced_hide_featured_section_summary_on">Η ενότητα Προβεβλημένου περιεχομένου είναι κρυμμένη</string>
|
||||
<string name="revanced_hide_featured_section_summary_off">Η ενότητα Προβεβλημένου περιεχομένου εμφανίζεται</string>
|
||||
<string name="revanced_hide_featured_section_title">Ενότητα προτεινόμενων συνδέσμων</string>
|
||||
<string name="revanced_hide_featured_section_summary_on">Κρυμμένη</string>
|
||||
<string name="revanced_hide_featured_section_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Κάρτες πληροφοριών</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">Κρυμμένη</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">Εμφανίζεται</string>
|
||||
|
||||
@@ -44,7 +44,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time_invalid">APK käännöspäivä on vioittunut</string>
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">ReVanced Ilmoitus</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">ReVanced-ilmoitus</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">Kellon historiaa ei tallenneta.<br><br>Tämä todennäköisesti johtuu DNS mainosten estäjä tai verkkovälityspalvelin.<br><br>Korjataksesi tämän, valkoiselle listalle <b>s.youtube.com</b> tai poistaaksesi kaikki DNS-estäjät ja -profiilit.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Älä näytä uudelleen</string>
|
||||
</patch>
|
||||
@@ -164,7 +164,7 @@ Et saa ilmoituksia odottamattomista tapahtumista."</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_title">Tyhjennä virheenkorjauslokit</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_summary">Tyhjentää kaikki tallennetut ReVanced-virheenkorjauslokit</string>
|
||||
<string name="revanced_debug_logs_clear_toast">Lokit tyhjennetty</string>
|
||||
<string name="revanced_debug_feature_flags_manager_title">Ominaisuuslippujen Manager</string>
|
||||
<string name="revanced_debug_feature_flags_manager_title">Ominaisuuslippujen hallinta</string>
|
||||
<string name="revanced_debug_feature_flags_manager_summary">Hallitse totuusarvo-ominaisuuslippuja</string>
|
||||
<string name="revanced_debug_feature_flags_manager_active_header">Aktiiviset liput (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_blocked_header">Estetyt liput (%d)</string>
|
||||
@@ -343,8 +343,8 @@ Jos Doodle näkyy tällä hetkellä alueellasi ja tämä piilotusasetus on käyt
|
||||
<string name="revanced_hide_podcast_section_summary_on">Tutustu podcastiin -osio piilotetaan</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Tutustu podcastiin -osio näytetään</string>
|
||||
<string name="revanced_hide_featured_section_title">Piilota esitelty sisältö</string>
|
||||
<string name="revanced_hide_featured_section_summary_on">Esitelty sisältö -osio on piilotettu</string>
|
||||
<string name="revanced_hide_featured_section_summary_off">Esitelty sisältö -osio näytetään</string>
|
||||
<string name="revanced_hide_featured_section_summary_on">Suositellun sisällön osio piilotetaan</string>
|
||||
<string name="revanced_hide_featured_section_summary_off">Suositellun sisällön osio näytetään</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Piilota tietokortit</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">Infokortit-osio piilotetaan</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">Infokortit-osio näytetään</string>
|
||||
@@ -1697,7 +1697,7 @@ AV1-videon toisto saattaa pätkiä."</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_off">Kategoriapalkki näytetään</string>
|
||||
</patch>
|
||||
<patch id="layout.miniplayercolor.changeMiniplayerColor">
|
||||
<string name="revanced_music_change_miniplayer_color_title">Vaihda minisoittimen väri</string>
|
||||
<string name="revanced_music_change_miniplayer_color_title">Muuta minisoittimen väriä</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_on">Minisoittimen väri vastaa kokoruudun soitinta</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_off">Minisoitin käyttää oletusväriä</string>
|
||||
</patch>
|
||||
|
||||
@@ -164,14 +164,14 @@ Vous ne serez pas informé des événements inattendus."</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_title">Effacer les journaux de débogage</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_summary">Efface tous les journaux de débogage ReVanced stockés</string>
|
||||
<string name="revanced_debug_logs_clear_toast">Journaux effacés</string>
|
||||
<string name="revanced_debug_feature_flags_manager_title">Gestionnaire des indicateurs de fonctionnalités</string>
|
||||
<string name="revanced_debug_feature_flags_manager_summary">Gérer les indicateurs de fonctionnalités booléens</string>
|
||||
<string name="revanced_debug_feature_flags_manager_active_header">Drapeaux actifs (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_blocked_header">Drapeaux bloqués (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_search_hint">Rechercher des drapeaux...</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_saved">Drapeaux enregistrés</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_reset">Drapeaux réinitialisés</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_copied">Drapeaux copiés dans le presse-papiers</string>
|
||||
<string name="revanced_debug_feature_flags_manager_title">Gestionnaire des flags de fonctionnalités</string>
|
||||
<string name="revanced_debug_feature_flags_manager_summary">Gérez les flags de fonctionnalités booléens</string>
|
||||
<string name="revanced_debug_feature_flags_manager_active_header">Flags actifs (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_blocked_header">Flags bloqués (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_search_hint">Rechercher des flags...</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_saved">Flags enregistrés</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_reset">Flags réinitialisés</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_copied">Flags copiés dans le presse-papiers</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">Nettoyer les liens de partage</string>
|
||||
@@ -1685,9 +1685,9 @@ La lecture vidéo avec AV1 peut être saccadée et des images peuvent être perd
|
||||
<string name="revanced_music_hide_history_button_title">Masquer le bouton Historique</string>
|
||||
<string name="revanced_music_hide_history_button_summary_on">Le bouton Historique est masqué</string>
|
||||
<string name="revanced_music_hide_history_button_summary_off">Le bouton Historique est affiché</string>
|
||||
<string name="revanced_music_hide_notification_button_title">Masquer le bouton de notification</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_on">Le bouton de notification est masqué</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_off">Le bouton de notification est affiché</string>
|
||||
<string name="revanced_music_hide_notification_button_title">Masquer le bouton des notifications</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_on">Le bouton des notifications est masqué</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_off">Le bouton des notifications est affiché</string>
|
||||
<string name="revanced_music_hide_search_button_title">Masquer le bouton de recherche</string>
|
||||
<string name="revanced_music_hide_search_button_summary_on">Le bouton de recherche est masqué</string>
|
||||
<string name="revanced_music_hide_search_button_summary_off">Le bouton de recherche est affiché</string>
|
||||
@@ -1698,9 +1698,9 @@ La lecture vidéo avec AV1 peut être saccadée et des images peuvent être perd
|
||||
<string name="revanced_music_hide_category_bar_summary_off">La barre des catégories est affichée</string>
|
||||
</patch>
|
||||
<patch id="layout.miniplayercolor.changeMiniplayerColor">
|
||||
<string name="revanced_music_change_miniplayer_color_title">Changer la couleur du mini-lecteur</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_on">La couleur du mini-lecteur correspond à celle du lecteur plein écran</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_off">Le mini-lecteur utilise la couleur par défaut</string>
|
||||
<string name="revanced_music_change_miniplayer_color_title">Changer la couleur du lecteur réduit</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_on">La couleur du lecteur réduit correspond à celle du lecteur plein écran</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_off">Le lecteur réduit utilise la couleur par défaut</string>
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<string name="revanced_music_navigation_bar_screen_title">Barre de navigation</string>
|
||||
|
||||
@@ -342,9 +342,9 @@ Má tá Doodle á thaispeáint faoi láthair i do réigiún agus má tá an tsu
|
||||
<string name="revanced_hide_podcast_section_title">Folaigh \'Déan iniúchadh ar an bpodchraoladh\'</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Tá an chuid Déan iniúchadh ar an bpodchraoladh i bhfolach</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Taispeántar an chuid Déan iniúchadh ar an bpodchraoladh</string>
|
||||
<string name="revanced_hide_featured_section_title">Folaigh ábhar roghnaithe</string>
|
||||
<string name="revanced_hide_featured_section_summary_on">Tá an chuid ábhair roghnaithe i bhfolach</string>
|
||||
<string name="revanced_hide_featured_section_summary_off">Taispeántar an chuid ábhair roghnaithe</string>
|
||||
<string name="revanced_hide_featured_section_title">Folaigh ábhar le feiceáil</string>
|
||||
<string name="revanced_hide_featured_section_summary_on">Tá an chuid ábhar le feiceáil i bhfolach</string>
|
||||
<string name="revanced_hide_featured_section_summary_off">Taispeántar an chuid ábhar le feiceáil</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Folaigh cártaí eolais</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">Tá an chuid cártaí faisnéise i bhfolach</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">Taispeántar rannán cártaí faisnéise</string>
|
||||
@@ -1695,9 +1695,9 @@ D’fhéadfadh sé go mbeadh stad nó go gcaillfí frámaí ag athsheinm físe l
|
||||
<string name="revanced_music_hide_category_bar_summary_off">Taispeántar an barra catagóirí</string>
|
||||
</patch>
|
||||
<patch id="layout.miniplayercolor.changeMiniplayerColor">
|
||||
<string name="revanced_music_change_miniplayer_color_title">Athraigh dath an mini-imreora</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_on">Meaitseálann dath an mini-imreora leis an imreoir lánscáileáin</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_off">Úsáideann an mini-imreoir an dath réamhshocraithe</string>
|
||||
<string name="revanced_music_change_miniplayer_color_title">Athraigh dath an mhion-imreoir</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_on">Tá dath an mhion-imreoir ag teacht leis an imreoir lánscáileáin</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_off">Úsáideann an mion-imreoir an dath réamhshocraithe</string>
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<string name="revanced_music_navigation_bar_screen_title">Barra nascleanúna</string>
|
||||
|
||||
@@ -274,8 +274,8 @@ Men om du aktiverar detta kommer även vissa användardata, t.ex. din IP-adress,
|
||||
<string name="revanced_hide_show_more_button_summary_on">Knappen Visa mer i sökresultat är dold</string>
|
||||
<string name="revanced_hide_show_more_button_summary_off">Knappen Visa mer i sökresultat visas</string>
|
||||
<string name="revanced_hide_surveys_title">Dölj enkäter</string>
|
||||
<string name="revanced_hide_surveys_summary_on">Undersökningar är dolda</string>
|
||||
<string name="revanced_hide_surveys_summary_off">Undersökningar visas</string>
|
||||
<string name="revanced_hide_surveys_summary_on">Enkäter är dolda</string>
|
||||
<string name="revanced_hide_surveys_summary_off">Enkäter visas</string>
|
||||
<string name="revanced_hide_ticket_shelf_title">Dölj biljetthylla</string>
|
||||
<string name="revanced_hide_ticket_shelf_summary_on">Biljetthyllan är dold</string>
|
||||
<string name="revanced_hide_ticket_shelf_summary_off">Biljetthyllan visas</string>
|
||||
@@ -477,7 +477,7 @@ Begränsningar
|
||||
• Om du söker på ett nyckelord kan det hända att inga resultat visas"</string>
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_title">Matcha hela ord</string>
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc.) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_summary">Om du omger ett nyckelord/en fras med dubbla citattecken förhindrar du partiella matchningar av videotitlar och kanalnamn<br><br>Till exempel,<br><b>\"ai\"</b> kommer att dölja videon: <b>How does AI work?</b><br>men kommer inte att dölja: <b>What does fair use mean?</b></string>
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_summary">Om du omger ett nyckelord/en fras med dubbla citattecken förhindrar du partiella matchningar av videotitlar och kanalnamn<br><br>Till exempel:<br><b>\"ai\"</b> kommer att dölja videon: <b>How does AI work?</b><br>men kommer inte att dölja: <b>What does fair use mean?</b></string>
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_hide_keyword_toast_invalid_common">Kan inte använda nyckelord: %s</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_common_whole_word_required">Lägg till citattecken för att använda nyckelord: %s</string>
|
||||
|
||||
@@ -342,7 +342,7 @@ Nếu cài đặt này được bật và Doodle đang hiển thị tại khu v
|
||||
<string name="revanced_hide_podcast_section_title">Ẩn \'Khám phá podcast\'</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Phần Khám phá podcast đã bị ẩn</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Phần Khám phá podcast được hiển thị</string>
|
||||
<string name="revanced_hide_featured_section_title">Ẩn nội dung nổi bật</string>
|
||||
<string name="revanced_hide_featured_section_title">Ẩn Nội dung nổi bật</string>
|
||||
<string name="revanced_hide_featured_section_summary_on">Phần nội dung nổi bật đã bị ẩn</string>
|
||||
<string name="revanced_hide_featured_section_summary_off">Phần nội dung nổi bật được hiển thị</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Ẩn thẻ Thông tin</string>
|
||||
@@ -1703,9 +1703,9 @@ Phát video bằng AV1 có thể bị giật hoặc tụt khung hình."</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_off">Thanh danh mục được hiển thị</string>
|
||||
</patch>
|
||||
<patch id="layout.miniplayercolor.changeMiniplayerColor">
|
||||
<string name="revanced_music_change_miniplayer_color_title">Thay đổi màu của Miniplayer</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_on">Màu Miniplayer khớp với trình phát toàn màn hình</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_off">Miniplayer sử dụng màu mặc định</string>
|
||||
<string name="revanced_music_change_miniplayer_color_title">Đổi màu trình phát thu nhỏ</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_on">Màu trình phát thu nhỏ khớp với trình phát toàn màn hình</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_off">Trình phát thu nhỏ dùng màu mặc định</string>
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<string name="revanced_music_navigation_bar_screen_title">Thanh điều hướng</string>
|
||||
|
||||
@@ -286,6 +286,9 @@ However, enabling this will also log some user data such as your IP address."</s
|
||||
<string name="revanced_hide_video_recommendation_labels_title">Hide video recommendation labels</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_on">\'People also watched\' and \'You might also like\' labels in search results are hidden</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_off">\'People also watched\' and \'You might also like\' labels in search results are shown</string>
|
||||
<string name="revanced_hide_visual_spacer_title">Hide visual spacer</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_on">Visual spacer is hidden</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_off">Visual spacer is shown</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">Hide YouTube Doodles</string>
|
||||
<string name="revanced_hide_doodles_summary_on">YouTube Doodles animation on the logo is hidden</string>
|
||||
@@ -346,18 +349,21 @@ If a Doodle is currently showing in your region and this hide setting is on, the
|
||||
<string name="revanced_hide_podcast_section_title">Hide \'Explore the podcast\'</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Explore the podcast section is hidden</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Explore the podcast section is shown</string>
|
||||
<string name="revanced_hide_featured_section_title">Hide Featured content</string>
|
||||
<string name="revanced_hide_featured_section_summary_on">Featured content section is hidden</string>
|
||||
<string name="revanced_hide_featured_section_summary_off">Featured content section is shown</string>
|
||||
<string name="revanced_hide_featured_links_section_title">Hide Featured links</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_on">Featured links section is hidden</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_off">Featured links section is shown</string>
|
||||
<string name="revanced_hide_featured_videos_section_title">Hide Featured videos</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_on">Featured videos section is hidden</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_off">Featured videos section is shown</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Hide Info cards</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">Info cards section is hidden</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">Info cards section is shown</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">Hide \'Key concepts\'</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Key concepts section is hidden</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Key concepts section is shown</string>
|
||||
<string name="revanced_hide_description_subscribe_button_title">Hide Subscribe button</string>
|
||||
<string name="revanced_hide_description_subscribe_button_summary_on">Subscribe button is hidden</string>
|
||||
<string name="revanced_hide_description_subscribe_button_summary_off">Subscribe button is shown</string>
|
||||
<string name="revanced_hide_subscribe_button_title">Hide Subscribe button</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_on">Subscribe button is hidden</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_off">Subscribe button is shown</string>
|
||||
<string name="revanced_hide_transcript_section_title">Hide Transcript</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">Transcript section is hidden</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">Transcript section is shown</string>
|
||||
@@ -381,24 +387,32 @@ If a Doodle is currently showing in your region and this hide setting is on, the
|
||||
|
||||
<string name="revanced_channel_screen_title">Channel page</string>
|
||||
<string name="revanced_channel_screen_summary">Hide or show channel page components</string>
|
||||
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_community_button_title">Hide Community button</string>
|
||||
<string name="revanced_hide_community_button_summary_on">Community button is hidden</string>
|
||||
<string name="revanced_hide_community_button_summary_off">Community button is shown</string>
|
||||
<!-- 'For You' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">Hide \'For You\' shelf</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">For You shelf is hidden</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">For You shelf is shown</string>
|
||||
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_join_button_title">Hide Join button</string>
|
||||
<string name="revanced_hide_join_button_summary_on">Join button is hidden</string>
|
||||
<string name="revanced_hide_join_button_summary_off">Join button is shown</string>
|
||||
<string name="revanced_hide_links_preview_title">Hide links preview</string>
|
||||
<string name="revanced_hide_links_preview_summary_on">Links preview is hidden</string>
|
||||
<string name="revanced_hide_links_preview_summary_off">Links preview is shown</string>
|
||||
<string name="revanced_hide_members_shelf_title">Hide members shelf</string>
|
||||
<string name="revanced_hide_members_shelf_summary_on">Members shelf is hidden</string>
|
||||
<string name="revanced_hide_members_shelf_summary_off">Members shelf is shown</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_community_button_title">Hide \'Visit Community\' button</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_on">Visit Community button is hidden</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_off">Visit Community button is shown</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">Hide \'Visit store\' button</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Visit store button is hidden</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Visit store button is shown</string>
|
||||
<!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_store_button_title">Hide Store button</string>
|
||||
<string name="revanced_hide_store_button_summary_on">Store button is hidden</string>
|
||||
<string name="revanced_hide_store_button_summary_off">Store button is shown</string>
|
||||
<!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_title">Hide Subscribe button</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_on">Subscribe button is hidden</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_off">Subscribe button is shown</string>
|
||||
|
||||
<string name="revanced_comments_screen_title">Comments</string>
|
||||
<string name="revanced_comments_screen_summary">Hide or show comments section components</string>
|
||||
@@ -541,11 +555,11 @@ This feature is only available for older devices"</string>
|
||||
<string name="revanced_share_copy_url_success">URL copied to clipboard</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">URL with timestamp copied</string>
|
||||
<string name="revanced_copy_video_url_title">Show copy video URL button</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Button is shown. Tap to copy video URL. Tap and hold to copy with timestamp</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Button is not shown</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Copy video URL button is shown. Tap to copy video URL. Tap and hold to copy with timestamp</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Copy video URL button is not shown</string>
|
||||
<string name="revanced_copy_video_url_timestamp_title">Show copy timestamp URL button</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Button is shown. Tap to copy video URL with timestamp. Tap and hold to copy without timestamp</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Button is not shown</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Copy timestamp URL button is shown. Tap to copy video URL with timestamp. Tap and hold to copy without timestamp</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Copy timestamp URL button is not shown</string>
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
<string name="revanced_remove_viewer_discretion_dialog_title">Remove viewer discretion dialog</string>
|
||||
@@ -554,7 +568,7 @@ This feature is only available for older devices"</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">This does not bypass the age restriction. It just accepts it automatically.</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
|
||||
<string name="revanced_disable_signin_to_tv_popup_title">Disable Sign in to TV popup</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_title">Disable \'Sign in to TV\' popup</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_summary_on">Sign in to TV popup is disabled</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_summary_off">Sign in to TV popup is enabled</string>
|
||||
</patch>
|
||||
@@ -686,7 +700,7 @@ Adjust volume by swiping vertically on the right side of the screen"</string>
|
||||
<string name="revanced_hide_download_button_summary_on">Download button is hidden</string>
|
||||
<string name="revanced_hide_download_button_summary_off">Download button is shown</string>
|
||||
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
|
||||
This button only shows on videos uploaded by the logged in user. -->
|
||||
This button only shows on videos uploaded by the logged-in user. -->
|
||||
<string name="revanced_hide_hype_button_title">Hide Hype</string>
|
||||
<string name="revanced_hide_hype_button_summary_on">Hype button is hidden</string>
|
||||
<string name="revanced_hide_hype_button_summary_off">Hype button is shown</string>
|
||||
@@ -807,10 +821,11 @@ If changing this setting does not take effect, try switching to Incognito mode."
|
||||
<string name="revanced_hide_player_flyout_audio_track_title">Hide Audio track</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_on">Audio track menu is hidden</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_off">Audio track menu is shown</string>
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
|
||||
'Android No SDK' must be kept untranslated. -->
|
||||
<string name="revanced_hide_player_flyout_audio_track_not_available">"Audio track menu is hidden
|
||||
|
||||
To show the Audio track menu, change \'Spoof video streams\' to iPadOS"</string>
|
||||
To show the Audio track menu, change \'Spoof video streams\' to \'Android No SDK\'"</string>
|
||||
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_title">Hide Watch in VR</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Watch in VR menu is hidden</string>
|
||||
@@ -886,13 +901,16 @@ To show the Audio track menu, change \'Spoof video streams\' to iPadOS"</string>
|
||||
<string name="revanced_hide_shorts_history_title">Hide Shorts in watch history</string>
|
||||
<string name="revanced_hide_shorts_history_summary_on">Hidden in watch history</string>
|
||||
<string name="revanced_hide_shorts_history_summary_off">Shown in watch history</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_title">Hide Buy Super Thanks button</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_title">Hide \'Auto-dubbed\' label</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_summary_on">Auto-dubbed label is hidden</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_summary_off">Auto-dubbed label is shown</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_title">Hide \'Buy Super Thanks\' button</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_on">Buy Super Thanks button is hidden</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_off">Buy Super Thanks button is shown</string>
|
||||
<string name="revanced_hide_shorts_effect_button_title">Hide Effect button</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_on">Effect button is hidden</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_off">Effect button is shown</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">Hide Green screen button</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">Hide \'Green screen\' button</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_on">Green screen button is hidden</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_off">Green screen button is shown</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_title">Hide Hashtag button</string>
|
||||
@@ -902,10 +920,13 @@ To show the Audio track menu, change \'Spoof video streams\' to iPadOS"</string>
|
||||
<string name="revanced_hide_shorts_join_button_title">Hide Join button</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_on">Join button is hidden</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_off">Join button is shown</string>
|
||||
<string name="revanced_hide_shorts_live_preview_title">Hide live preview</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_on">Live preview is hidden</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_off">Live preview is shown</string>
|
||||
<string name="revanced_hide_shorts_location_label_title">Hide location label</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_on">Location label is hidden</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_off">Location label is shown</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">Hide New posts button</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">Hide \'New posts\' button</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_on">New posts button is hidden</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_off">New posts button is shown</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_title">Hide paused overlay buttons</string>
|
||||
@@ -914,7 +935,7 @@ To show the Audio track menu, change \'Spoof video streams\' to iPadOS"</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_title">Hide preview comment</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_on">Preview comment is hidden</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_off">Preview comment is shown</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">Hide Save music button</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">Hide \'Save music\' button</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_on">Save music button is hidden</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_off">Save music button is shown</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_title">Hide search suggestions</string>
|
||||
@@ -935,10 +956,10 @@ To show the Audio track menu, change \'Spoof video streams\' to iPadOS"</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_title">Hide Upcoming button</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_on">Upcoming button is hidden</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_off">Upcoming button is shown</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_title">Hide Use this sound button</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_title">Hide \'Use this sound\' button</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_on">Use this sound button is hidden</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_off">Use this sound button is shown</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_title">Hide Use this template button</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_title">Hide \'Use this template\' button</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_on">Use this template button is hidden</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_off">Use this template button is shown</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_title">Hide Like button fountain animation</string>
|
||||
@@ -1599,13 +1620,13 @@ Enabling this can unlock higher video qualities"</string>
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
<string name="revanced_playback_speed_dialog_button_title">Show speed dialog button</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Button is shown. Tap and hold to reset playback speed to default</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Button is not shown</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Speed dialog button is shown. Tap and hold to reset playback speed to default</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Speed dialog button is not shown</string>
|
||||
</patch>
|
||||
<patch id="video.quality.button.videoQualityDialogButtonPatch">
|
||||
<string name="revanced_video_quality_dialog_button_title">Show video quality button</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">Button is shown. Tap and hold to reset quality to default</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">Button is not shown</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">Video quality button is shown. Tap and hold to reset quality to default</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">Video quality button is not shown</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_speed_menu_title">Custom playback speed menu</string>
|
||||
|
||||
Reference in New Issue
Block a user