diff --git a/CHANGELOG.md b/CHANGELOG.md index 3def1fcf8..684d03bd3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,59 @@ +# [5.40.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.39.1-dev.1...v5.40.0-dev.1) (2025-09-17) + + +### Features + +* **Viber - Hide ads:** Support latest app target ([#5863](https://github.com/ReVanced/revanced-patches/issues/5863)) ([e6cce85](https://github.com/ReVanced/revanced-patches/commit/e6cce8554116df3c0ea6dbb7440c59c9e73d8334)) + +## [5.39.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.39.0...v5.39.1-dev.1) (2025-09-17) + + +### Bug Fixes + +* **YouTube - Force original audio:** Show UI setting summary if spoofing to Android Studio ([b7026b7](https://github.com/ReVanced/revanced-patches/commit/b7026b70865bc44de07b30f84ba8b8b608930d5b)) + +# [5.39.0](https://github.com/ReVanced/revanced-patches/compare/v5.38.0...v5.39.0) (2025-09-17) + + +### Bug Fixes + +* **YouTube - Spoof video streams:** Do not use Android Creator for livestreams ([cbe576b](https://github.com/ReVanced/revanced-patches/commit/cbe576bc384ef5f5ee2fa341147925ed0dff568b)) +* **YouTube - Spoof video streams:** Show Android Studio in spoof stream menu ([c9f741e](https://github.com/ReVanced/revanced-patches/commit/c9f741e616c7acab0cd4558e02b0c4ec18392c10)) +* **YouTube Music - Spoof video streams:** Remove iPadOS client ([7eeffd3](https://github.com/ReVanced/revanced-patches/commit/7eeffd3392c57555342173103d3a417c038d0970)) + + +### Features + +* **YouTube - Hide video action buttons:** Add "Hide Shop button" setting ([a84db7b](https://github.com/ReVanced/revanced-patches/commit/a84db7be7fde2e9bb3ac41aec709a1681e845fe1)) + +# [5.39.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.39.0-dev.1...v5.39.0-dev.2) (2025-09-17) + + +### Bug Fixes + +* **YouTube - Spoof video streams:** Show Android Studio in spoof stream menu ([c9f741e](https://github.com/ReVanced/revanced-patches/commit/c9f741e616c7acab0cd4558e02b0c4ec18392c10)) + +# [5.39.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.38.1-dev.2...v5.39.0-dev.1) (2025-09-17) + + +### Features + +* **YouTube - Hide video action buttons:** Add "Hide Shop button" setting ([a84db7b](https://github.com/ReVanced/revanced-patches/commit/a84db7be7fde2e9bb3ac41aec709a1681e845fe1)) + +## [5.38.1-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.38.1-dev.1...v5.38.1-dev.2) (2025-09-16) + + +### Bug Fixes + +* **YouTube Music - Spoof video streams:** Remove iPadOS client ([7eeffd3](https://github.com/ReVanced/revanced-patches/commit/7eeffd3392c57555342173103d3a417c038d0970)) + +## [5.38.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.38.0...v5.38.1-dev.1) (2025-09-16) + + +### Bug Fixes + +* **YouTube - Spoof video streams:** Do not use Android Creator for livestreams ([cbe576b](https://github.com/ReVanced/revanced-patches/commit/cbe576bc384ef5f5ee2fa341147925ed0dff568b)) + # [5.38.0](https://github.com/ReVanced/revanced-patches/compare/v5.37.0...v5.38.0) (2025-09-16) diff --git a/extensions/instagram/build.gradle.kts b/extensions/instagram/build.gradle.kts new file mode 100644 index 000000000..8cf6305c1 --- /dev/null +++ b/extensions/instagram/build.gradle.kts @@ -0,0 +1,3 @@ +dependencies { + compileOnly(project(":extensions:shared:library")) +} diff --git a/extensions/instagram/src/main/AndroidManifest.xml b/extensions/instagram/src/main/AndroidManifest.xml new file mode 100644 index 000000000..9b65eb06c --- /dev/null +++ b/extensions/instagram/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/extensions/instagram/src/main/java/app/revanced/extension/instagram/feed/LimitFeedToFollowedProfiles.java b/extensions/instagram/src/main/java/app/revanced/extension/instagram/feed/LimitFeedToFollowedProfiles.java new file mode 100644 index 000000000..2367e738a --- /dev/null +++ b/extensions/instagram/src/main/java/app/revanced/extension/instagram/feed/LimitFeedToFollowedProfiles.java @@ -0,0 +1,18 @@ +package app.revanced.extension.instagram.feed; + +import java.util.HashMap; +import java.util.Map; + +@SuppressWarnings("unused") +public class LimitFeedToFollowedProfiles { + + /** + * Injection point. + */ + public static Map setFollowingHeader(Map requestHeaderMap) { + // Create new map as original is unmodifiable. + Map patchedRequestHeaderMap = new HashMap<>(requestHeaderMap); + patchedRequestHeaderMap.put("pagination_source", "following"); + return patchedRequestHeaderMap; + } +} diff --git a/extensions/music/src/main/java/app/revanced/extension/music/patches/spoof/SpoofVideoStreamsPatch.java b/extensions/music/src/main/java/app/revanced/extension/music/patches/spoof/SpoofVideoStreamsPatch.java index f6d248715..15e90f565 100644 --- a/extensions/music/src/main/java/app/revanced/extension/music/patches/spoof/SpoofVideoStreamsPatch.java +++ b/extensions/music/src/main/java/app/revanced/extension/music/patches/spoof/SpoofVideoStreamsPatch.java @@ -1,5 +1,6 @@ package app.revanced.extension.music.patches.spoof; +import static app.revanced.extension.music.settings.Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE; import static app.revanced.extension.shared.spoof.ClientType.ANDROID_VR_1_43_32; import static app.revanced.extension.shared.spoof.ClientType.ANDROID_VR_1_61_48; import static app.revanced.extension.shared.spoof.ClientType.VISIONOS; @@ -7,7 +8,6 @@ import static app.revanced.extension.shared.spoof.ClientType.VISIONOS; import java.util.List; import app.revanced.extension.shared.spoof.ClientType; -import app.revanced.extension.shared.spoof.requests.StreamingDataRequest; @SuppressWarnings("unused") public class SpoofVideoStreamsPatch { @@ -22,6 +22,7 @@ public class SpoofVideoStreamsPatch { VISIONOS ); - StreamingDataRequest.setClientOrderToUse(availableClients, ANDROID_VR_1_43_32); + app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.setClientsToUse( + availableClients, SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get()); } } diff --git a/extensions/music/src/main/java/app/revanced/extension/music/settings/Settings.java b/extensions/music/src/main/java/app/revanced/extension/music/settings/Settings.java index 394cc7b3e..f793eef0f 100644 --- a/extensions/music/src/main/java/app/revanced/extension/music/settings/Settings.java +++ b/extensions/music/src/main/java/app/revanced/extension/music/settings/Settings.java @@ -3,8 +3,12 @@ package app.revanced.extension.music.settings; import static java.lang.Boolean.FALSE; import static java.lang.Boolean.TRUE; +import static app.revanced.extension.shared.settings.Setting.parent; + import app.revanced.extension.shared.settings.BaseSettings; import app.revanced.extension.shared.settings.BooleanSetting; +import app.revanced.extension.shared.settings.EnumSetting; +import app.revanced.extension.shared.spoof.ClientType; public class Settings extends BaseSettings { @@ -18,4 +22,8 @@ public class Settings extends BaseSettings { // Player public static final BooleanSetting PERMANENT_REPEAT = new BooleanSetting("revanced_music_play_permanent_repeat", FALSE, true); + + // Miscellaneous + public static final EnumSetting SPOOF_VIDEO_STREAMS_CLIENT_TYPE = new EnumSetting<>("revanced_spoof_video_streams_client_type", + ClientType.ANDROID_VR_1_43_32, true, parent(SPOOF_VIDEO_STREAMS)); } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/ByteTrieSearch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/ByteTrieSearch.java similarity index 89% rename from extensions/youtube/src/main/java/app/revanced/extension/youtube/ByteTrieSearch.java rename to extensions/shared/library/src/main/java/app/revanced/extension/shared/ByteTrieSearch.java index 162e0b040..c91de4a7a 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/ByteTrieSearch.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/ByteTrieSearch.java @@ -1,6 +1,4 @@ -package app.revanced.extension.youtube; - -import androidx.annotation.NonNull; +package app.revanced.extension.shared; import java.nio.charset.StandardCharsets; @@ -39,7 +37,7 @@ public final class ByteTrieSearch extends TrieSearch { return replacement; } - public ByteTrieSearch(@NonNull byte[]... patterns) { + public ByteTrieSearch(byte[]... patterns) { super(new ByteTrieNode(), patterns); } } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/StringTrieSearch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/StringTrieSearch.java similarity index 85% rename from extensions/youtube/src/main/java/app/revanced/extension/youtube/StringTrieSearch.java rename to extensions/shared/library/src/main/java/app/revanced/extension/shared/StringTrieSearch.java index fbff9beba..9c7b88213 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/StringTrieSearch.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/StringTrieSearch.java @@ -1,6 +1,4 @@ -package app.revanced.extension.youtube; - -import androidx.annotation.NonNull; +package app.revanced.extension.shared; /** * Text pattern searching using a prefix tree (trie). @@ -28,7 +26,7 @@ public final class StringTrieSearch extends TrieSearch { } } - public StringTrieSearch(@NonNull String... patterns) { + public StringTrieSearch(String... patterns) { super(new StringTrieNode(), patterns); } } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/TrieSearch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/TrieSearch.java similarity index 93% rename from extensions/youtube/src/main/java/app/revanced/extension/youtube/TrieSearch.java rename to extensions/shared/library/src/main/java/app/revanced/extension/shared/TrieSearch.java index 74fb4685d..7628a51d9 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/TrieSearch.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/TrieSearch.java @@ -1,6 +1,5 @@ -package app.revanced.extension.youtube; +package app.revanced.extension.shared; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; import java.util.ArrayList; @@ -57,11 +56,13 @@ public abstract class TrieSearch { if (searchTextLength - searchTextIndex < patternLength - patternStartIndex) { return false; // Remaining search text is shorter than the remaining leaf pattern and they cannot match. } + for (int i = searchTextIndex, j = patternStartIndex; j < patternLength; i++, j++) { if (enclosingNode.getCharValue(searchText, i) != enclosingNode.getCharValue(pattern, j)) { return false; } } + return callback == null || callback.patternMatched(searchText, searchTextIndex - patternStartIndex, patternLength, callbackParameter); } @@ -136,7 +137,7 @@ public abstract class TrieSearch { * @param patternLength Length of the pattern. * @param callback Callback, where a value of NULL indicates to always accept a pattern match. */ - private void addPattern(@NonNull T pattern, int patternIndex, int patternLength, + private void addPattern(T pattern, int patternIndex, int patternLength, @Nullable TriePatternMatchedCallback callback) { if (patternIndex == patternLength) { // Reached the end of the pattern. if (endOfPatternCallback == null) { @@ -145,6 +146,7 @@ public abstract class TrieSearch { endOfPatternCallback.add(callback); return; } + if (leaf != null) { // Reached end of the graph and a leaf exist. // Recursively call back into this method and push the existing leaf down 1 level. @@ -159,6 +161,7 @@ public abstract class TrieSearch { leaf = new TrieCompressedPath<>(pattern, patternIndex, patternLength, callback); return; } + final char character = getCharValue(pattern, patternIndex); final int arrayIndex = hashIndexForTableSize(children.length, character); TrieNode child = children[arrayIndex]; @@ -183,6 +186,7 @@ public abstract class TrieSearch { //noinspection unchecked TrieNode[] replacement = new TrieNode[replacementArraySize]; addNodeToArray(replacement, child); + boolean collision = false; for (TrieNode existingChild : children) { if (existingChild != null) { @@ -195,6 +199,7 @@ public abstract class TrieSearch { if (collision) { continue; } + children = replacement; return; } @@ -234,6 +239,7 @@ public abstract class TrieSearch { if (leaf != null && leaf.matches(startNode, searchText, searchTextEndIndex, searchTextIndex, callbackParameter)) { return true; // Leaf exists and it matched the search text. } + List> endOfPatternCallback = node.endOfPatternCallback; if (endOfPatternCallback != null) { final int matchStartIndex = searchTextIndex - currentMatchLength; @@ -246,6 +252,7 @@ public abstract class TrieSearch { } } } + TrieNode[] children = node.children; if (children == null) { return false; // Reached a graph end point and there's no further patterns to search. @@ -278,9 +285,11 @@ public abstract class TrieSearch { if (leaf != null) { numberOfPointers += 4; // Number of fields in leaf node. } + if (endOfPatternCallback != null) { numberOfPointers += endOfPatternCallback.size(); } + if (children != null) { numberOfPointers += children.length; for (TrieNode child : children) { @@ -308,13 +317,13 @@ public abstract class TrieSearch { private final List patterns = new ArrayList<>(); @SafeVarargs - TrieSearch(@NonNull TrieNode root, @NonNull T... patterns) { + TrieSearch(TrieNode root, T... patterns) { this.root = Objects.requireNonNull(root); addPatterns(patterns); } @SafeVarargs - public final void addPatterns(@NonNull T... patterns) { + public final void addPatterns(T... patterns) { for (T pattern : patterns) { addPattern(pattern); } @@ -325,7 +334,7 @@ public abstract class TrieSearch { * * @param pattern Pattern to add. Calling this with a zero length pattern does nothing. */ - public void addPattern(@NonNull T pattern) { + public void addPattern(T pattern) { addPattern(pattern, root.getTextLength(pattern), null); } @@ -333,31 +342,31 @@ public abstract class TrieSearch { * @param pattern Pattern to add. Calling this with a zero length pattern does nothing. * @param callback Callback to determine if searching should halt when a match is found. */ - public void addPattern(@NonNull T pattern, @NonNull TriePatternMatchedCallback callback) { + public void addPattern(T pattern, TriePatternMatchedCallback callback) { addPattern(pattern, root.getTextLength(pattern), Objects.requireNonNull(callback)); } - void addPattern(@NonNull T pattern, int patternLength, @Nullable TriePatternMatchedCallback callback) { + void addPattern(T pattern, int patternLength, @Nullable TriePatternMatchedCallback callback) { if (patternLength == 0) return; // Nothing to match patterns.add(pattern); root.addPattern(pattern, 0, patternLength, callback); } - public final boolean matches(@NonNull T textToSearch) { + public final boolean matches(T textToSearch) { return matches(textToSearch, 0); } - public boolean matches(@NonNull T textToSearch, @NonNull Object callbackParameter) { + public boolean matches(T textToSearch, Object callbackParameter) { return matches(textToSearch, 0, root.getTextLength(textToSearch), Objects.requireNonNull(callbackParameter)); } - public boolean matches(@NonNull T textToSearch, int startIndex) { + public boolean matches(T textToSearch, int startIndex) { return matches(textToSearch, startIndex, root.getTextLength(textToSearch)); } - public final boolean matches(@NonNull T textToSearch, int startIndex, int endIndex) { + public final boolean matches(T textToSearch, int startIndex, int endIndex) { return matches(textToSearch, startIndex, endIndex, null); } @@ -370,11 +379,11 @@ public abstract class TrieSearch { * @param callbackParameter Optional parameter passed to the callbacks. * @return If any pattern matched, and it's callback halted searching. */ - public boolean matches(@NonNull T textToSearch, int startIndex, int endIndex, @Nullable Object callbackParameter) { + public boolean matches(T textToSearch, int startIndex, int endIndex, @Nullable Object callbackParameter) { return matches(textToSearch, root.getTextLength(textToSearch), startIndex, endIndex, callbackParameter); } - private boolean matches(@NonNull T textToSearch, int textToSearchLength, int startIndex, int endIndex, + private boolean matches(T textToSearch, int textToSearchLength, int startIndex, int endIndex, @Nullable Object callbackParameter) { if (endIndex > textToSearchLength) { throw new IllegalArgumentException("endIndex: " + endIndex diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java index 43ea8e226..be4b58227 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/settings/BaseSettings.java @@ -5,9 +5,6 @@ import static java.lang.Boolean.TRUE; import static app.revanced.extension.shared.settings.Setting.parent; import static app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.AudioStreamLanguageOverrideAvailability; -import app.revanced.extension.shared.Logger; -import app.revanced.extension.shared.spoof.ClientType; - /** * Settings shared across multiple apps. *

@@ -31,13 +28,4 @@ public class BaseSettings { public static final BooleanSetting SPOOF_VIDEO_STREAMS = new BooleanSetting("revanced_spoof_video_streams", TRUE, true, "revanced_spoof_video_streams_user_dialog_message"); public static final EnumSetting SPOOF_VIDEO_STREAMS_LANGUAGE = new EnumSetting<>("revanced_spoof_video_streams_language", AppLanguage.DEFAULT, new AudioStreamLanguageOverrideAvailability()); public static final BooleanSetting SPOOF_STREAMING_DATA_STATS_FOR_NERDS = new BooleanSetting("revanced_spoof_streaming_data_stats_for_nerds", TRUE, parent(SPOOF_VIDEO_STREAMS)); - // Client type must be last spoof setting due to cyclic references. - public static final EnumSetting SPOOF_VIDEO_STREAMS_CLIENT_TYPE = new EnumSetting<>("revanced_spoof_video_streams_client_type", ClientType.ANDROID_VR_1_61_48, true, parent(SPOOF_VIDEO_STREAMS)); - - static { - if (SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() == ClientType.IOS_UNPLUGGED) { - Logger.printInfo(() -> "Migrating from iOS Unplugged to iPadOS"); - SPOOF_VIDEO_STREAMS_CLIENT_TYPE.save(ClientType.IPADOS); - } - } } diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/ClientType.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/ClientType.java index 4226b415c..96299facc 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/ClientType.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/ClientType.java @@ -31,7 +31,6 @@ public enum ClientType { "132.0.6808.3", "1.61.48", false, - false, "Android VR 1.61" ), /** @@ -50,7 +49,6 @@ public enum ClientType { Objects.requireNonNull(ANDROID_VR_1_61_48.buildId), "107.0.5284.2", "1.43.32", - ANDROID_VR_1_61_48.requiresAuth, ANDROID_VR_1_61_48.useAuth, "Android VR 1.43" ), @@ -71,8 +69,7 @@ public enum ClientType { "132.0.6779.0", "23.47.101", true, - true, - "Android Creator" + "Android Studio" ), /** * Internal YT client for an unreleased YT client. May stop working at any time. @@ -86,7 +83,6 @@ public enum ClientType { "0.1", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Safari/605.1.15", false, - false, "visionOS" ), /** @@ -111,25 +107,7 @@ public enum ClientType { "19.22.3", "com.google.ios.youtube/19.22.3 (iPad7,6; U; CPU iPadOS 17_7_10 like Mac OS X; " + Locale.getDefault() + ")", false, - false, "iPadOS" - ), - /** - * Obsolete and broken client. Here only to migrate data. - */ - @Deprecated - IOS_UNPLUGGED( - 33, - "IOS_UNPLUGGED", - "Apple", - "iPhone16,2", - "iOS", - "18.2.22C152", - "8.49", - "dummy user-agent", - true, - true, - "iOS TV" ); /** @@ -197,12 +175,6 @@ public enum ClientType { */ public final String clientVersion; - /** - * If this client requires authentication and does not work - * if logged out or in incognito mode. - */ - public final boolean requiresAuth; - /** * If the client should use authentication if available. */ @@ -227,7 +199,6 @@ public enum ClientType { @NonNull String buildId, @NonNull String cronetVersion, String clientVersion, - boolean requiresAuth, boolean useAuth, String friendlyName) { this.id = id; @@ -241,7 +212,6 @@ public enum ClientType { this.buildId = buildId; this.cronetVersion = cronetVersion; this.clientVersion = clientVersion; - this.requiresAuth = requiresAuth; this.useAuth = useAuth; this.friendlyName = friendlyName; @@ -267,7 +237,6 @@ public enum ClientType { String osVersion, String clientVersion, String userAgent, - boolean requiresAuth, boolean useAuth, String friendlyName) { this.id = id; @@ -278,7 +247,6 @@ public enum ClientType { this.osVersion = osVersion; this.clientVersion = clientVersion; this.userAgent = userAgent; - this.requiresAuth = requiresAuth; this.useAuth = useAuth; this.friendlyName = friendlyName; this.packageName = null; diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/SpoofVideoStreamsPatch.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/SpoofVideoStreamsPatch.java index 12265a73a..f11c7ea26 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/SpoofVideoStreamsPatch.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/SpoofVideoStreamsPatch.java @@ -6,7 +6,9 @@ import android.text.TextUtils; import androidx.annotation.Nullable; import java.nio.ByteBuffer; +import java.util.List; import java.util.Map; +import java.util.Objects; import app.revanced.extension.shared.Logger; import app.revanced.extension.shared.Utils; @@ -17,14 +19,6 @@ import app.revanced.extension.shared.spoof.requests.StreamingDataRequest; @SuppressWarnings("unused") public class SpoofVideoStreamsPatch { - private static final boolean SPOOF_STREAMING_DATA = BaseSettings.SPOOF_VIDEO_STREAMS.get(); - - private static final boolean FIX_HLS_CURRENT_TIME = SPOOF_STREAMING_DATA - && BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() == ClientType.VISIONOS; - - @Nullable - private static volatile AppLanguage languageOverride; - /** * Domain used for internet connectivity verification. * It has an empty response body and is only used to check for a 204 response code. @@ -40,17 +34,23 @@ public class SpoofVideoStreamsPatch { private static final String INTERNET_CONNECTION_CHECK_URI_STRING = "https://www.google.com/gen_204"; private static final Uri INTERNET_CONNECTION_CHECK_URI = Uri.parse(INTERNET_CONNECTION_CHECK_URI_STRING); + private static final boolean SPOOF_STREAMING_DATA = BaseSettings.SPOOF_VIDEO_STREAMS.get(); + + @Nullable + private static volatile AppLanguage languageOverride; + + private static volatile ClientType preferredClient = ClientType.ANDROID_VR_1_61_48; + /** * @return If this patch was included during patching. */ - private static boolean isPatchIncluded() { + public static boolean isPatchIncluded() { return false; // Modified during patching. } - public static boolean spoofingToClientWithNoMultiAudioStreams() { - return isPatchIncluded() - && BaseSettings.SPOOF_VIDEO_STREAMS.get() - && BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() != ClientType.IPADOS; + @Nullable + public static AppLanguage getLanguageOverride() { + return languageOverride; } /** @@ -61,9 +61,15 @@ public class SpoofVideoStreamsPatch { languageOverride = language; } - @Nullable - public static AppLanguage getLanguageOverride() { - return languageOverride; + public static void setClientsToUse(List availableClients, ClientType client) { + preferredClient = Objects.requireNonNull(client); + StreamingDataRequest.setClientOrderToUse(availableClients, client); + } + + public static boolean spoofingToClientWithNoMultiAudioStreams() { + return isPatchIncluded() + && SPOOF_STREAMING_DATA + && preferredClient != ClientType.IPADOS; } /** @@ -278,8 +284,7 @@ public class SpoofVideoStreamsPatch { public static final class AudioStreamLanguageOverrideAvailability implements Setting.Availability { @Override public boolean isAvailable() { - // Since all current clients are un-authenticated, this works for all spoof clients. - return BaseSettings.SPOOF_VIDEO_STREAMS.get(); + return BaseSettings.SPOOF_VIDEO_STREAMS.get() && !preferredClient.useAuth; } } } diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/requests/PlayerRoutes.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/requests/PlayerRoutes.java index 82db445d7..ef5907b01 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/requests/PlayerRoutes.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/requests/PlayerRoutes.java @@ -42,10 +42,10 @@ final class PlayerRoutes { JSONObject context = new JSONObject(); AppLanguage language = SpoofVideoStreamsPatch.getLanguageOverride(); - if (language == null || BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() == ANDROID_VR_1_43_32) { + if (language == null || clientType == ANDROID_VR_1_43_32) { // Force original audio has not overrode the language. - // Or if YT has fallen over to the very last client (VR 1.43), then always - // use the app language because forcing an audio stream of specific languages + // Or if YT has fallen over to the last unauthenticated client (VR 1.43), then + // always use the app language because forcing an audio stream of specific languages // can sometimes fail so it's better to try and load something rather than nothing. language = BaseSettings.SPOOF_VIDEO_STREAMS_LANGUAGE.get(); } diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/requests/StreamingDataRequest.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/requests/StreamingDataRequest.java index e4942d701..b8cd9b6b4 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/requests/StreamingDataRequest.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/spoof/requests/StreamingDataRequest.java @@ -1,5 +1,6 @@ package app.revanced.extension.shared.spoof.requests; +import static app.revanced.extension.shared.ByteTrieSearch.convertStringsToBytes; import static app.revanced.extension.shared.spoof.requests.PlayerRoutes.GET_STREAMING_DATA; import androidx.annotation.NonNull; @@ -23,6 +24,7 @@ import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import app.revanced.extension.shared.ByteTrieSearch; import app.revanced.extension.shared.Logger; import app.revanced.extension.shared.Utils; import app.revanced.extension.shared.settings.BaseSettings; @@ -90,6 +92,16 @@ public class StreamingDataRequest { private static final Map cache = Collections.synchronizedMap( Utils.createSizeRestrictedMap(50)); + /** + * Strings found in the response if the video is a livestream. + */ + private static final ByteTrieSearch liveStreamBufferSearch = new ByteTrieSearch( + convertStringsToBytes( + "yt_live_broadcast", + "yt_premiere_broadcast" + ) + ); + private static volatile ClientType lastSpoofedClientType; public static String getLastSpoofedClientName() { @@ -157,7 +169,7 @@ public class StreamingDataRequest { } } - if (!authHeadersIncludes && clientType.requiresAuth) { + if (!authHeadersIncludes && clientType.useAuth) { Logger.printDebug(() -> "Skipping client since user is not logged in: " + clientType + " videoId: " + videoId); return null; @@ -218,9 +230,13 @@ public class StreamingDataRequest { while ((bytesRead = inputStream.read(buffer)) >= 0) { baos.write(buffer, 0, bytesRead); } - lastSpoofedClientType = clientType; + if (clientType == ClientType.ANDROID_CREATOR && liveStreamBufferSearch.matches(buffer)) { + Logger.printDebug(() -> "Skipping Android Studio as video is a livestream: " + videoId); + } else { + lastSpoofedClientType = clientType; - return ByteBuffer.wrap(baos.toByteArray()); + return ByteBuffer.wrap(baos.toByteArray()); + } } } } catch (IOException ex) { diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/AdsFilter.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/AdsFilter.java index 027fdd84a..cb604c57b 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/AdsFilter.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/AdsFilter.java @@ -10,7 +10,7 @@ import java.util.List; import app.revanced.extension.shared.Logger; import app.revanced.extension.shared.Utils; -import app.revanced.extension.youtube.StringTrieSearch; +import app.revanced.extension.shared.StringTrieSearch; import app.revanced.extension.youtube.settings.Settings; @SuppressWarnings("unused") diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/ButtonsFilter.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/ButtonsFilter.java index 7512db706..0f6ca53e5 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/ButtonsFilter.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/ButtonsFilter.java @@ -80,6 +80,10 @@ final class ButtonsFilter extends Filter { Settings.HIDE_ASK_BUTTON, "yt_fill_spark" ), + new ByteArrayFilterGroup( + Settings.HIDE_SHOP_BUTTON, + "yt_outline_bag" + ), new ByteArrayFilterGroup( Settings.HIDE_STOP_ADS_BUTTON, "yt_outline_slash_circle_left" diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/CustomFilter.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/CustomFilter.java index cd6950717..1fed2e967 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/CustomFilter.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/CustomFilter.java @@ -14,7 +14,7 @@ import java.util.regex.Pattern; import app.revanced.extension.shared.Logger; import app.revanced.extension.shared.Utils; -import app.revanced.extension.youtube.ByteTrieSearch; +import app.revanced.extension.shared.ByteTrieSearch; import app.revanced.extension.youtube.settings.Settings; /** diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/DescriptionComponentsFilter.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/DescriptionComponentsFilter.java index c5f4ac33f..5c0870cde 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/DescriptionComponentsFilter.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/DescriptionComponentsFilter.java @@ -1,6 +1,6 @@ package app.revanced.extension.youtube.patches.components; -import app.revanced.extension.youtube.StringTrieSearch; +import app.revanced.extension.shared.StringTrieSearch; import app.revanced.extension.youtube.settings.Settings; import app.revanced.extension.youtube.shared.PlayerType; diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/FilterGroup.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/FilterGroup.java index 4e20bc82a..cf880b468 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/FilterGroup.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/FilterGroup.java @@ -4,7 +4,7 @@ import androidx.annotation.NonNull; import app.revanced.extension.shared.Logger; import app.revanced.extension.shared.settings.BooleanSetting; -import app.revanced.extension.youtube.ByteTrieSearch; +import app.revanced.extension.shared.ByteTrieSearch; abstract class FilterGroup { final static class FilterGroupResult { diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/FilterGroupList.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/FilterGroupList.java index c10b563e9..f839436c0 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/FilterGroupList.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/FilterGroupList.java @@ -5,9 +5,9 @@ import androidx.annotation.NonNull; import java.util.*; import java.util.function.Consumer; -import app.revanced.extension.youtube.ByteTrieSearch; -import app.revanced.extension.youtube.StringTrieSearch; -import app.revanced.extension.youtube.TrieSearch; +import app.revanced.extension.shared.ByteTrieSearch; +import app.revanced.extension.shared.StringTrieSearch; +import app.revanced.extension.shared.TrieSearch; abstract class FilterGroupList> implements Iterable { diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/KeywordContentFilter.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/KeywordContentFilter.java index 470b650bb..eecf17766 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/KeywordContentFilter.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/KeywordContentFilter.java @@ -14,9 +14,9 @@ import java.util.concurrent.atomic.AtomicReference; import app.revanced.extension.shared.Logger; import app.revanced.extension.shared.Utils; -import app.revanced.extension.youtube.ByteTrieSearch; -import app.revanced.extension.youtube.StringTrieSearch; -import app.revanced.extension.youtube.TrieSearch; +import app.revanced.extension.shared.ByteTrieSearch; +import app.revanced.extension.shared.StringTrieSearch; +import app.revanced.extension.shared.TrieSearch; import app.revanced.extension.youtube.settings.Settings; import app.revanced.extension.youtube.shared.NavigationBar; import app.revanced.extension.youtube.shared.PlayerType; diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/LayoutComponentsFilter.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/LayoutComponentsFilter.java index c73bab074..ac58f2b1a 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/LayoutComponentsFilter.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/LayoutComponentsFilter.java @@ -11,7 +11,7 @@ import androidx.annotation.Nullable; import app.revanced.extension.shared.Logger; import app.revanced.extension.shared.Utils; -import app.revanced.extension.youtube.StringTrieSearch; +import app.revanced.extension.shared.StringTrieSearch; import app.revanced.extension.youtube.patches.ChangeHeaderPatch; import app.revanced.extension.youtube.settings.Settings; import app.revanced.extension.youtube.shared.NavigationBar; diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/LithoFilterPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/LithoFilterPatch.java index 619651cf0..a85a024a1 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/LithoFilterPatch.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/LithoFilterPatch.java @@ -12,7 +12,7 @@ import java.util.Map; import app.revanced.extension.shared.Logger; import app.revanced.extension.shared.Utils; import app.revanced.extension.shared.settings.BaseSettings; -import app.revanced.extension.youtube.StringTrieSearch; +import app.revanced.extension.shared.StringTrieSearch; import app.revanced.extension.youtube.patches.VersionCheckPatch; import app.revanced.extension.youtube.settings.Settings; diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/ReturnYouTubeDislikeFilter.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/ReturnYouTubeDislikeFilter.java index 5a2e97aff..122d81de8 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/ReturnYouTubeDislikeFilter.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/ReturnYouTubeDislikeFilter.java @@ -8,8 +8,8 @@ import java.util.LinkedHashSet; import java.util.Map; import app.revanced.extension.shared.Logger; +import app.revanced.extension.shared.TrieSearch; import app.revanced.extension.shared.Utils; -import app.revanced.extension.youtube.TrieSearch; import app.revanced.extension.youtube.patches.ReturnYouTubeDislikePatch; import app.revanced.extension.youtube.patches.VideoInformation; import app.revanced.extension.youtube.settings.Settings; diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/spoof/SpoofVideoStreamsPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/spoof/SpoofVideoStreamsPatch.java index 6cd8212fb..2af74b2a0 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/spoof/SpoofVideoStreamsPatch.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/spoof/SpoofVideoStreamsPatch.java @@ -8,9 +8,8 @@ import static app.revanced.extension.shared.spoof.ClientType.VISIONOS; import java.util.List; -import app.revanced.extension.shared.settings.BaseSettings; import app.revanced.extension.shared.spoof.ClientType; -import app.revanced.extension.shared.spoof.requests.StreamingDataRequest; +import app.revanced.extension.youtube.settings.Settings; @SuppressWarnings("unused") public class SpoofVideoStreamsPatch { @@ -22,14 +21,12 @@ public class SpoofVideoStreamsPatch { List availableClients = List.of( ANDROID_VR_1_61_48, VISIONOS, - IPADOS, - // Creator must be next to last, because livestreams fetch successfully but don't playback. ANDROID_CREATOR, - // VR 1.43 must be last as spoof streaming data handles it slightly differently. - ANDROID_VR_1_43_32 + ANDROID_VR_1_43_32, + IPADOS ); - StreamingDataRequest.setClientOrderToUse(availableClients, - BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get()); + app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.setClientsToUse( + availableClients, Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get()); } } \ No newline at end of file diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java index 1f667d6b6..d7fd10a3d 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java @@ -43,6 +43,7 @@ import app.revanced.extension.shared.settings.LongSetting; import app.revanced.extension.shared.settings.Setting; import app.revanced.extension.shared.settings.StringSetting; import app.revanced.extension.shared.settings.preference.SharedPrefCategory; +import app.revanced.extension.shared.spoof.ClientType; import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.DeArrowAvailability; import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.StillImagesAvailability; import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.ThumbnailOption; @@ -231,6 +232,7 @@ public class Settings extends BaseSettings { 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_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); @@ -360,6 +362,7 @@ public class Settings extends BaseSettings { public static final BooleanSetting REMOVE_TRACKING_QUERY_PARAMETER = new BooleanSetting("revanced_remove_tracking_query_parameter", TRUE); public static final BooleanSetting SPOOF_DEVICE_DIMENSIONS = new BooleanSetting("revanced_spoof_device_dimensions", FALSE, true, "revanced_spoof_device_dimensions_user_dialog_message"); + public static final EnumSetting SPOOF_VIDEO_STREAMS_CLIENT_TYPE = new EnumSetting<>("revanced_spoof_video_streams_client_type", ClientType.ANDROID_VR_1_61_48, true, parent(SPOOF_VIDEO_STREAMS)); public static final BooleanSetting DEBUG_PROTOBUFFER = new BooleanSetting("revanced_debug_protobuffer", FALSE, false, "revanced_debug_protobuffer_user_dialog_message", parent(BaseSettings.DEBUG)); diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ForceOriginalAudioSwitchPreference.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ForceOriginalAudioSwitchPreference.java new file mode 100644 index 000000000..b6be1b893 --- /dev/null +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ForceOriginalAudioSwitchPreference.java @@ -0,0 +1,63 @@ +package app.revanced.extension.youtube.settings.preference; + +import static app.revanced.extension.shared.StringRef.str; + +import android.content.Context; +import android.preference.SwitchPreference; +import android.util.AttributeSet; + +import app.revanced.extension.shared.spoof.ClientType; +import app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch; +import app.revanced.extension.youtube.settings.Settings; + +@SuppressWarnings({"deprecation", "unused"}) +public class ForceOriginalAudioSwitchPreference extends SwitchPreference { + + // Spoof stream patch is not included, or is not currently spoofing to Android Studio. + private static final boolean available = !SpoofVideoStreamsPatch.isPatchIncluded() + || !(Settings.SPOOF_VIDEO_STREAMS.get() + && Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() == ClientType.ANDROID_CREATOR); + + { + if (!available) { + // Show why force audio is not available. + String summary = str("revanced_force_original_audio_not_available"); + super.setSummary(summary); + super.setSummaryOn(summary); + super.setSummaryOff(summary); + super.setEnabled(false); + } + } + + public ForceOriginalAudioSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + public ForceOriginalAudioSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + public ForceOriginalAudioSwitchPreference(Context context, AttributeSet attrs) { + super(context, attrs); + } + public ForceOriginalAudioSwitchPreference(Context context) { + super(context); + } + + @Override + public void setEnabled(boolean enabled) { + if (!available) { + return; + } + + super.setEnabled(enabled); + } + + @Override + public void setSummary(CharSequence summary) { + if (!available) { + return; + } + + super.setSummary(summary); + } +} + diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/SpoofStreamingDataSideEffectsPreference.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/SpoofStreamingDataSideEffectsPreference.java index 04f366a2f..ae84c9dc2 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/SpoofStreamingDataSideEffectsPreference.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/SpoofStreamingDataSideEffectsPreference.java @@ -15,6 +15,7 @@ import app.revanced.extension.shared.Utils; import app.revanced.extension.shared.settings.BaseSettings; import app.revanced.extension.shared.settings.Setting; import app.revanced.extension.shared.spoof.ClientType; +import app.revanced.extension.youtube.settings.Settings; @SuppressWarnings({"deprecation", "unused"}) public class SpoofStreamingDataSideEffectsPreference extends Preference { @@ -69,7 +70,7 @@ public class SpoofStreamingDataSideEffectsPreference extends Preference { } private void updateUI() { - ClientType clientType = BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get(); + ClientType clientType = Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get(); if (currentClientType == clientType) { return; } @@ -82,19 +83,19 @@ public class SpoofStreamingDataSideEffectsPreference extends Preference { String summary = str(clientType == ClientType.IPADOS ? "revanced_spoof_video_streams_about_ipados_summary" - // visionOS has same base side effects as Android VR. + // Same base side effects for Android VR, Android Studio, and visionOS. : "revanced_spoof_video_streams_about_android_summary"); if (clientType == ClientType.IPADOS) { - summary = str("revanced_spoof_video_streams_about_no_av1") - + '\n' + summary; + summary += '\n' + str("revanced_spoof_video_streams_about_no_av1"); } else if (clientType == ClientType.VISIONOS) { summary = str("revanced_spoof_video_streams_about_experimental") + '\n' + summary + '\n' + str("revanced_spoof_video_streams_about_no_av1") + '\n' + str("revanced_spoof_video_streams_about_kids_videos"); - } else { - summary += '\n' + str("revanced_spoof_video_streams_about_kids_videos"); + } else if (clientType == ClientType.ANDROID_CREATOR) { + summary += '\n' + str("revanced_spoof_video_streams_about_no_av1") + + '\n' + str("revanced_spoof_video_streams_about_kids_videos"); } setSummary(summary); diff --git a/gradle.properties b/gradle.properties index 44ac67889..9ea70c171 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M org.gradle.parallel = true android.useAndroidX = true kotlin.code.style = official -version = 5.38.0 +version = 5.40.0-dev.1 diff --git a/patches/api/patches.api b/patches/api/patches.api index f1aef0a8d..f92ea05e1 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -252,6 +252,10 @@ public final class app/revanced/patches/instagram/ads/HideAdsPatchKt { public static final fun getHideAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } +public final class app/revanced/patches/instagram/feed/LimitFeedToFollowedProfilesKt { + public static final fun getLimitFeedToFollowedProfiles ()Lapp/revanced/patcher/patch/BytecodePatch; +} + public final class app/revanced/patches/instagram/hide/explore/HideExploreFeedKt { public static final fun getHideExportFeedPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } @@ -264,6 +268,10 @@ public final class app/revanced/patches/instagram/hide/stories/HideStoriesKt { public static final fun getHideStoriesPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } +public final class app/revanced/patches/instagram/misc/extension/SharedExtensionPatchKt { + public static final fun getSharedExtensionPatch ()Lapp/revanced/patcher/patch/BytecodePatch; +} + public final class app/revanced/patches/instagram/misc/signature/SignatureCheckPatchKt { public static final fun getSignatureCheckPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } diff --git a/patches/src/main/kotlin/app/revanced/patches/instagram/feed/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/instagram/feed/Fingerprints.kt new file mode 100644 index 000000000..cf8c61118 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/instagram/feed/Fingerprints.kt @@ -0,0 +1,20 @@ +package app.revanced.patches.instagram.feed + +import app.revanced.patcher.fingerprint +import app.revanced.patcher.patch.BytecodePatchContext + +internal val mainFeedRequestClassFingerprint = fingerprint { + strings("Request{mReason=", ", mInstanceNumber=") +} + +context(BytecodePatchContext) +internal val initMainFeedRequestFingerprint get() = fingerprint { + custom { method, classDef -> + method.name == "" && + classDef == mainFeedRequestClassFingerprint.classDef + } +} + +internal val mainFeedHeaderMapFinderFingerprint = fingerprint { + strings("pagination_source", "FEED_REQUEST_SENT") +} diff --git a/patches/src/main/kotlin/app/revanced/patches/instagram/feed/LimitFeedToFollowedProfiles.kt b/patches/src/main/kotlin/app/revanced/patches/instagram/feed/LimitFeedToFollowedProfiles.kt new file mode 100644 index 000000000..3ded4c91a --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/instagram/feed/LimitFeedToFollowedProfiles.kt @@ -0,0 +1,63 @@ +package app.revanced.patches.instagram.feed + +import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.patch.bytecodePatch +import app.revanced.patches.instagram.misc.extension.sharedExtensionPatch +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow +import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.FieldReference + +internal const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/instagram/feed/LimitFeedToFollowedProfiles;" + +@Suppress("unused") +val limitFeedToFollowedProfiles = bytecodePatch( + name = "Limit feed to followed profiles", + description = "Filters the home feed to display only content from profiles you follow.", +) { + compatibleWith("com.instagram.android") + + dependsOn(sharedExtensionPatch) + + execute { + /** + * Since the header field is obfuscated and there is no easy way to identify it among all the class fields, + * an additional method is fingerprinted. + * This method uses the map, so we can get the field name of the map field using this. + */ + val mainFeedRequestHeaderFieldName: String + + with(mainFeedHeaderMapFinderFingerprint.method) { + mainFeedRequestHeaderFieldName = indexOfFirstInstructionOrThrow { + getReference().let { ref -> + ref?.type == "Ljava/util/Map;" && + ref.definingClass == mainFeedRequestClassFingerprint.classDef.toString() + + } + }.let { instructionIndex -> + getInstruction(instructionIndex).getReference()!!.name + } + } + + initMainFeedRequestFingerprint.method.apply { + // Finds the instruction where the map is being initialized in the constructor + val getHeaderIndex = indexOfFirstInstructionOrThrow { + getReference().let { + it?.name == mainFeedRequestHeaderFieldName + } + } + + val paramHeaderRegister = getInstruction(getHeaderIndex).registerA + + // Replace the `pagination_source` header value with `following` in the feed/timeline request. + addInstructions( + getHeaderIndex, + """ + invoke-static { v$paramHeaderRegister }, $EXTENSION_CLASS_DESCRIPTOR->setFollowingHeader(Ljava/util/Map;)Ljava/util/Map; + move-result-object v$paramHeaderRegister + """ + ) + } + } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/instagram/hide/navigation/HideNavigationButtons.kt b/patches/src/main/kotlin/app/revanced/patches/instagram/hide/navigation/HideNavigationButtons.kt index ee68c4fe1..cac9c35c3 100644 --- a/patches/src/main/kotlin/app/revanced/patches/instagram/hide/navigation/HideNavigationButtons.kt +++ b/patches/src/main/kotlin/app/revanced/patches/instagram/hide/navigation/HideNavigationButtons.kt @@ -49,7 +49,7 @@ val hideNavigationButtonsPatch = bytecodePatch( val freeRegister = findFreeRegister(insertIndex, loopIndexRegister) val instruction = getInstruction(endIndex - 1) - var instructions = buildString { + val instructions = buildString { if (hideCreate!!) { appendLine( """ diff --git a/patches/src/main/kotlin/app/revanced/patches/instagram/misc/extension/SharedExtensionPatch.kt b/patches/src/main/kotlin/app/revanced/patches/instagram/misc/extension/SharedExtensionPatch.kt new file mode 100644 index 000000000..351b641a4 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/instagram/misc/extension/SharedExtensionPatch.kt @@ -0,0 +1,9 @@ +package app.revanced.patches.instagram.misc.extension + +import app.revanced.patches.instagram.misc.extension.hooks.applicationInitHook +import app.revanced.patches.shared.misc.extension.sharedExtensionPatch + +val sharedExtensionPatch = sharedExtensionPatch( + "instagram", + applicationInitHook, +) diff --git a/patches/src/main/kotlin/app/revanced/patches/instagram/misc/extension/hooks/ApplicationInitHook.kt b/patches/src/main/kotlin/app/revanced/patches/instagram/misc/extension/hooks/ApplicationInitHook.kt new file mode 100644 index 000000000..eca0a885f --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/instagram/misc/extension/hooks/ApplicationInitHook.kt @@ -0,0 +1,9 @@ +package app.revanced.patches.instagram.misc.extension.hooks + +import app.revanced.patches.shared.misc.extension.extensionHook + +internal val applicationInitHook = extensionHook { + custom { method, classDef -> + method.name == "onCreate" && classDef.endsWith("/InstagramAppShell;") + } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/music/misc/spoof/SpoofVideoStreamsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/music/misc/spoof/SpoofVideoStreamsPatch.kt index 7d1a4c648..0452bc3cf 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/misc/spoof/SpoofVideoStreamsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/misc/spoof/SpoofVideoStreamsPatch.kt @@ -38,7 +38,7 @@ val spoofVideoStreamsPatch = spoofVideoStreamsPatch( ) }, executeBlock = { - addResources("shared", "misc.spoof.spoofVideoStreamsPatch") + addResources("music", "misc.fix.playback.spoofVideoStreamsPatch") PreferenceScreen.MISC.addPreferences( PreferenceScreenPreference( diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/spoof/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/spoof/Fingerprints.kt index 79f2ec7d8..4805638b2 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/spoof/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/spoof/Fingerprints.kt @@ -146,7 +146,6 @@ internal val nerdsStatsVideoFormatBuilderFingerprint by fingerprint { } internal val patchIncludedExtensionMethodFingerprint by fingerprint { - accessFlags(AccessFlags.PRIVATE, AccessFlags.STATIC) returns("Z") parameters() custom { method, classDef -> diff --git a/patches/src/main/kotlin/app/revanced/patches/viber/ads/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/viber/ads/Fingerprints.kt index 8d0efac12..93fd578d5 100644 --- a/patches/src/main/kotlin/app/revanced/patches/viber/ads/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/viber/ads/Fingerprints.kt @@ -2,12 +2,6 @@ package app.revanced.patches.viber.ads import app.revanced.patcher.fingerprint -internal val adsFreeFingerprint by fingerprint { - returns("I") - parameters() - custom { method, classDef -> - classDef.type.contains("com/viber/voip/feature/viberplus") && - classDef.superclass?.contains("com/viber/voip/core/feature") == true && // Must extend com.viber.voip.core.feature.? - classDef.methods.count() == 1 - } +internal val findAdStringFingerprint by fingerprint { + strings("viber_plus_debug_ads_free_flag") } diff --git a/patches/src/main/kotlin/app/revanced/patches/viber/ads/HideAdsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/viber/ads/HideAdsPatch.kt index 91bff02c6..0ec31e376 100644 --- a/patches/src/main/kotlin/app/revanced/patches/viber/ads/HideAdsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/viber/ads/HideAdsPatch.kt @@ -1,17 +1,41 @@ package app.revanced.patches.viber.ads +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.fingerprint +import app.revanced.patcher.patch.PatchException import app.revanced.patcher.patch.bytecodePatch +import app.revanced.util.indexOfFirstInstructionReversedOrThrow import app.revanced.util.returnEarly +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.reference.TypeReference @Suppress("unused") val hideAdsPatch = bytecodePatch( name = "Hide Ads", description = "Hides ad banners between chats.", ) { - compatibleWith("com.viber.voip"("25.9.2.0")) + compatibleWith("com.viber.voip"("25.9.2.0", "26.1.2.0")) execute { - // Return 1 (true) indicating ads should be disabled. - adsFreeFingerprint.method.returnEarly(1) + val method = findAdStringFingerprint.method + + // Find the ads free string index + val stringIndex = findAdStringFingerprint.stringMatches!!.first().index + + // Search backwards from the string to find the `new-instance` (TypeReference) instruction + val typeRefIndex = method.indexOfFirstInstructionReversedOrThrow(stringIndex) { this.opcode == Opcode.NEW_INSTANCE } + + // Get the class name from the TypeReference + val targetClass = method.getInstruction(typeRefIndex).reference as TypeReference + + // Patch the ads-free method to always return true + fingerprint { + returns("I") + parameters() + custom { method, classDef -> + classDef == targetClass + } + }.method.returnEarly(1) } } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/HideButtonsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/HideButtonsPatch.kt index c8b802361..46210654e 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/HideButtonsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/HideButtonsPatch.kt @@ -55,7 +55,7 @@ val hideButtonsPatch = resourcePatch( SwitchPreference("revanced_hide_remix_button"), SwitchPreference("revanced_hide_report_button"), SwitchPreference("revanced_hide_share_button"), - SwitchPreference("revanced_hide_stop_ads_button"), + SwitchPreference("revanced_hide_shop_button"),SwitchPreference("revanced_hide_stop_ads_button"), SwitchPreference("revanced_hide_thanks_button"), )) } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/video/audio/ForceOriginalAudioPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/video/audio/ForceOriginalAudioPatch.kt index b17d1c96c..eee6c0e45 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/video/audio/ForceOriginalAudioPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/video/audio/ForceOriginalAudioPatch.kt @@ -57,7 +57,10 @@ val forceOriginalAudioPatch = bytecodePatch( addResources("youtube", "video.audio.forceOriginalAudioPatch") PreferenceScreen.VIDEO.addPreferences( - SwitchPreference("revanced_force_original_audio") + SwitchPreference( + key = "revanced_force_original_audio", + tag = "app.revanced.extension.youtube.settings.preference.ForceOriginalAudioSwitchPreference" + ) ) mainActivityOnCreateFingerprint.method.addInstruction( diff --git a/patches/src/main/resources/addresources/values-af-rZA/strings.xml b/patches/src/main/resources/addresources/values-af-rZA/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-af-rZA/strings.xml +++ b/patches/src/main/resources/addresources/values-af-rZA/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-am-rET/strings.xml b/patches/src/main/resources/addresources/values-am-rET/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-am-rET/strings.xml +++ b/patches/src/main/resources/addresources/values-am-rET/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-ar-rSA/strings.xml b/patches/src/main/resources/addresources/values-ar-rSA/strings.xml index 38a2d9a3b..6e124f11b 100644 --- a/patches/src/main/resources/addresources/values-ar-rSA/strings.xml +++ b/patches/src/main/resources/addresources/values-ar-rSA/strings.xml @@ -621,6 +621,10 @@ Second \"item\" text" إخفاء المقطع تم إخفاء زر إنشاء مقطع يتم عرض زر إنشاء مقطع + + إخفاء المتجر + زر المتجر مخفي + زر المتجر معروض إخفاء حفظ زر الحفظ مخفي @@ -1473,7 +1477,7 @@ Second \"item\" text" استخدام لغة الصوت الأصلية استخدام الصوت الافتراضي - لاستخدام هذه الميزة، غيّر \'Spoof Video Streams\' إلى iOS TV + لاستخدام هذه الميزة، غيّر \"تزوير تدفقات الفيديو\" إلى أي عميل باستثناء Android Studio diff --git a/patches/src/main/resources/addresources/values-as-rIN/strings.xml b/patches/src/main/resources/addresources/values-as-rIN/strings.xml index 4a61a68fb..a87acac0a 100644 --- a/patches/src/main/resources/addresources/values-as-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-as-rIN/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-az-rAZ/strings.xml b/patches/src/main/resources/addresources/values-az-rAZ/strings.xml index d43c432b7..3c78618f6 100644 --- a/patches/src/main/resources/addresources/values-az-rAZ/strings.xml +++ b/patches/src/main/resources/addresources/values-az-rAZ/strings.xml @@ -89,10 +89,16 @@ Davam et düyməsinə toxun və optimallaşdırma dəyişikliklərin qəbul et." Video yayımları saxtalaşdır Oynatma problemlərin önləmək üçün qəbuledici video yayımların saxtalaşdır + Video yayımların saxtalaşdır + Oynatma problemlərin önləmək üçün qəbuledici video yayımların saxtalaşdır Video yayımları saxtalaşdır "Video yayımları saxtalaşdırılıb Əgər YouTube Premium istifadəçisisinizsə, bu tənzimlənmə tələb olunmaya bilər" + "Video yayımları saxtalaşmayıb + +Oynatma işləməyə bilər" + Bu tənzimləməni qapatmaq oynatma problemlərinə səbəb ola bilər. İlkin qəbuledici @@ -615,6 +621,10 @@ Ekranın sağ tərəfində düzünə sürüşdürərək səs səviyyəsini tənz Kəsmə/ gizlət Kəsmə düyməsi gizlidir Kəsmə düyməsi göstərilir + + Mağazanı Gizlət + Mağaza düyməsi gizlidir + Mağaza düyməsi görünür Saxlayın-ı Gizlət Saxlayın düyməsi gizlidir @@ -713,6 +723,9 @@ Bu seçimi dəyişdirmə işə düşmürsə, Gizli rejimə keçməyə çalışı Səs axını menyusu gizlidir Səs axını menyusu göstərilir + "Səs trek menyusu gizlidir + +Səs treki menyusunu göstərmək üçün \"Video yayımları saxtalaşdır\"ı iPadOS-a dəyiş" \"VR-da İzləni\" gizlət VR menyusunda izləmə gizlidir @@ -1463,7 +1476,7 @@ Bunu aktivləşdirmə daha yüksək video keyfiyyətləri əngəlin silə bilər Orijinal səs dilini istifadə İlkin səs istifadəsi - Bu xüsusiyyəti istifadə etmək üçün \"Saxta video yayımların\" iOS TV-yə dəyiş + Bu funksiyanı istifadə etmək üçün \"Video yayımları saxtalaşdırı\" Android Studio savayı istənilən qəbulediciyə dəyiş @@ -1541,6 +1554,7 @@ Bunu aktivləşdirmə daha yüksək video keyfiyyətləri əngəlin silə bilər Android saxtalaşdırma yan təsirləri "• Səs treki menyusu əlçatmazdır • Sabit səs səviyyəsi yoxdur" + • Video 01:00-da dayana bilər və ya bəzi bölgələrdə mövcud olmaya bilər • Təcrübi qəbuledici və hər vaxt işləməyi dayandıra bilər • AV1 video kodlayıcı yoxdur • Giriş edilməyəndə və ya gizli rejimdə uşaq videoları oynadıla bilməz @@ -1549,6 +1563,7 @@ Bunu aktivləşdirmə daha yüksək video keyfiyyətləri əngəlin silə bilər Qəbuledici nerd üçün Statistikada gizlidir Səs yayım dili + Xüsusi səs dilini seçmək üçün \"Orijinal səs dilini zorlanı\" qapat @@ -1556,18 +1571,31 @@ Bunu aktivləşdirmə daha yüksək video keyfiyyətləri əngəlin silə bilər Haqqında Reklamlar Ümumi - Oyunçu + Oynadıcı Çoxvariantlı + Video reklamlarını gizlət + Video reklamları gizlidir + Video reklamları görünür + Kəsintisiz təkrarlamanı aktivləşdir + Kəsintisiz təkrarlama aktivdir + Kəsintisiz təkrarlama qapalıdır + Kateqoriya cizgisin gizlət + Kateqoriya cizgisi gizlidir + Kateqoriya cizgisi görünür + \'Musiqi Premiumu Əldə et\' etiketini gizlət + Etiket gizlidir + Etiket görünür + Təkmilləşdirmə düyməsini gizlət Düymə gizlidir Düymə görünür diff --git a/patches/src/main/resources/addresources/values-be-rBY/strings.xml b/patches/src/main/resources/addresources/values-be-rBY/strings.xml index 716a78e72..b040e0879 100644 --- a/patches/src/main/resources/addresources/values-be-rBY/strings.xml +++ b/patches/src/main/resources/addresources/values-be-rBY/strings.xml @@ -621,6 +621,10 @@ Second \"item\" text" Схаваць кліп Кнопка кліпа схавана Паказана кнопка кліпа + + Схаваць Краму + Кнопка \"Крама\" схавана + Кнопка \"Крама\" паказана Схаваць \"Захаваць\" Кнопка \"Захаваць\" схавана @@ -1474,7 +1478,7 @@ Second \"item\" text" Выкарыстоўваць арыгінальную мову аўдыя Выкарыстанне аўдыё па змаўчанні - Каб выкарыстоўваць гэту функцыю, змяніце параметр \"Падрабляць відэаструмені\" на iOS TV + Каб выкарыстаць гэтую функцыю, змяніце \'Падмена відэаструменяў\' на любога кліента, акрамя Android Studio diff --git a/patches/src/main/resources/addresources/values-bg-rBG/strings.xml b/patches/src/main/resources/addresources/values-bg-rBG/strings.xml index 35a1ad853..0f56d98d2 100644 --- a/patches/src/main/resources/addresources/values-bg-rBG/strings.xml +++ b/patches/src/main/resources/addresources/values-bg-rBG/strings.xml @@ -621,6 +621,10 @@ Second \"item\" text" Бутон за създаване на клип Бутона за клип е скрит Бутона за клип се показва + + Скрий магазин + Бутонът за магазин е скрит + Бутонът за магазин е показан Скриване на Запазване Бутонът за запазване е скрит @@ -1473,7 +1477,7 @@ Second \"item\" text" Използване на оригиналния език на аудиото Използване на аудио по подразбиране - За да използвате тази функция, сменете „Фалшифициране на видео потоци“ на iOS TV + За да използвате тази функция, променете \'Фалшифициране на видео потоци\' на всеки клиент, освен Android Studio diff --git a/patches/src/main/resources/addresources/values-bn-rBD/strings.xml b/patches/src/main/resources/addresources/values-bn-rBD/strings.xml index f6dc3a91e..ab28549e3 100644 --- a/patches/src/main/resources/addresources/values-bn-rBD/strings.xml +++ b/patches/src/main/resources/addresources/values-bn-rBD/strings.xml @@ -617,6 +617,10 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ ক্লিপ লুকান ক্লিপ বোতাম লুকিয়ে রয়েছে ক্লিপ বোতাম প্রদর্শিত হয়েছে + + শপ লুকান + শপ বাটন লুকানো আছে + শপ বাটন দেখানো আছে সংরক্ষণ লুকান সংরক্ষণ বোতাম লুকানো আছে @@ -1469,7 +1473,7 @@ DeArrow সম্পর্কে আরও জানতে এখানে ট মূল অডিও ভাষা ব্যবহার করা হচ্ছে ডিফল্ট অডিও ব্যবহার করছে - এই বৈশিষ্ট্যটি ব্যবহার করতে, \'স্পুফ ভিডিও স্ট্রীম\' কে iOS TV-তে পরিবর্তন করুন + এই বৈশিষ্ট্যটি ব্যবহার করতে, \'ভিডিও স্ট্রিম স্পুফ করুন\' অ্যান্ড্রয়েড স্টুডিও ছাড়া অন্য কোনো ক্লায়েন্টে পরিবর্তন করুন diff --git a/patches/src/main/resources/addresources/values-bs-rBA/strings.xml b/patches/src/main/resources/addresources/values-bs-rBA/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-bs-rBA/strings.xml +++ b/patches/src/main/resources/addresources/values-bs-rBA/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-ca-rES/strings.xml b/patches/src/main/resources/addresources/values-ca-rES/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-ca-rES/strings.xml +++ b/patches/src/main/resources/addresources/values-ca-rES/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-cs-rCZ/strings.xml b/patches/src/main/resources/addresources/values-cs-rCZ/strings.xml index 77e842c93..876ebac1d 100644 --- a/patches/src/main/resources/addresources/values-cs-rCZ/strings.xml +++ b/patches/src/main/resources/addresources/values-cs-rCZ/strings.xml @@ -621,6 +621,10 @@ Hlasitost se upravuje svislým přejetím po pravé straně obrazovky" Skrýt Klip Tlačítko Klip je skryto Tlačítko Klip je zobrazeno + + Skrýt Obchod + Tlačítko Obchod je skryté + Tlačítko Obchod je zobrazené Skrýt Uložit Tlačítko Uložit je skryté @@ -1473,7 +1477,7 @@ Povolením této funkce lze odemknout vyšší kvality videa" Použít původní jazyk zvuku Používání výchozího zvuku - Chcete-li používat tuto funkci, změňte možnost „Zfalšovat datové proudy videa“ na iOS TV + Chcete-li použít tuto funkci, změňte \'Zfalšovat video streamy\' na libovolného klienta kromě Android Studia diff --git a/patches/src/main/resources/addresources/values-da-rDK/strings.xml b/patches/src/main/resources/addresources/values-da-rDK/strings.xml index b066433f7..6738a3d89 100644 --- a/patches/src/main/resources/addresources/values-da-rDK/strings.xml +++ b/patches/src/main/resources/addresources/values-da-rDK/strings.xml @@ -621,6 +621,10 @@ Juster lydstyrken ved at swipe lodret i højre side af skærmen" Skjul klip Klip knappen er skjult Klip knappen er vist + + Skjul butik + Butiksknappen er skjult + Butiksknappen vises Skjul Gem Knappen \"Gem\" er skjult @@ -1475,7 +1479,7 @@ Aktivering af dette kan låse op for højere videokvalitet" Bruger originalt lydsprog Brug standard lyd - For at bruge denne funktion skal du ændre \"Spoof videostreams\" til iOS TV + For at bruge denne funktion skal du ændre \"Forfalsk videostreams\" til en hvilken som helst klient undtagen Android Studio diff --git a/patches/src/main/resources/addresources/values-de-rDE/strings.xml b/patches/src/main/resources/addresources/values-de-rDE/strings.xml index 49340e0f7..4725708e2 100644 --- a/patches/src/main/resources/addresources/values-de-rDE/strings.xml +++ b/patches/src/main/resources/addresources/values-de-rDE/strings.xml @@ -616,6 +616,10 @@ Passen Sie die Helligkeit an, indem Sie auf der linken Seite des Bildschirms ver Clip ausblenden Clip-Button ist ausgeblendet Clip-Taste wird angezeigt + + Shop ausblenden + Shop-Button ist ausgeblendet + Shop-Button wird angezeigt Speichern ausblenden Schaltfläche \"Speichern\" ist ausgeblendet @@ -1468,7 +1472,7 @@ Durch Aktivieren dieser Option können höhere Videoqualitäten freigeschaltet w Original-Audiosprache verwenden Standardaudio verwenden - Um diese Funktion zu nutzen, ändere \"Video-Streams fälschen\" zu iOS TV + Um diese Funktion zu nutzen, ändere \"Video-Streams fälschen\" auf einen beliebigen Client außer Android Studio diff --git a/patches/src/main/resources/addresources/values-el-rGR/strings.xml b/patches/src/main/resources/addresources/values-el-rGR/strings.xml index 7067f880f..9c8483553 100644 --- a/patches/src/main/resources/addresources/values-el-rGR/strings.xml +++ b/patches/src/main/resources/addresources/values-el-rGR/strings.xml @@ -623,6 +623,10 @@ Second \"item\" text" Κουμπί «Κλιπ» Κρυμμένο Εμφανίζεται + + Κουμπί «Αγορές» + Κρυμμένο + Εμφανίζεται Κουμπί «Αποθήκευση» Κρυμμένο @@ -721,7 +725,7 @@ Second \"item\" text" Κρυμμένο Εμφανίζεται - "Το μενού «Κομμάτι ήχου» είναι κρυμμένο + "Κρυμμένο Για να εμφανίζεται το μενού κομματιού ήχου, αλλάξτε την «Παραποίηση ροών βίντεο» σε iPadOS" @@ -1472,7 +1476,7 @@ Second \"item\" text" Χρησιμοποιείται η αρχική γλώσσα ήχου Χρησιμοποιείται ο προεπιλεγμένος ήχος - Για να χρησιμοποιήσετε αυτήν τη λειτουργία, αλλάξτε την επιλογή «Παραποίηση ροών βίντεο» σε iOS TV + Για να χρησιμοποιήσετε αυτήν τη λειτουργία, αλλάξτε την επιλογή «Παραποίηση ροών βίντεο» σε οποιονδήποτε πελάτη εκτός από το Android Studio @@ -1550,7 +1554,7 @@ Second \"item\" text" Παρενέργειες παραποίησης σε Android "• Το μενού «Κομμάτι ήχου» λείπει • Η λειτουργία «Σταθερή ένταση» δεν είναι διαθέσιμη" - • Το βίντεο ενδέχεται να σταματήσει στο 1:00 ή ενδέχεται να μην είναι διαθέσιμο σε ορισμένες περιοχές + • Το βίντεο ενδέχεται να σταματήσει στο 1:00 ή να μην είναι διαθέσιμο σε ορισμένες περιοχές • Πειραματικός πελάτης και μπορεί να σταματήσει να λειτουργεί ανά πάσα στιγμή • Δεν υπάρχει ο κωδικοποιητής βίντεο AV1 • Τα βίντεο για παιδιά ενδέχεται να μην αναπαράγονται αν είστε αποσυνδεδεμένοι ή σε λειτουργία ανώνυμης περιήγησης @@ -1559,12 +1563,12 @@ Second \"item\" text" Το πρόγραμμα πελάτη δεν εμφανίζεται στο μενού «Στατιστικά για σπασίκλες» Γλώσσα ροής ήχου - Για να επιλέξετε μια συγκεκριμένη γλώσσα ήχου, απενεργοποιήστε το \'Επιβολή αρχικής γλώσσας ήχου\' + Για να επιλέξετε μια συγκεκριμένη γλώσσα ήχου, απενεργοποιήστε το «Εξαναγκασμός αρχικής γλώσσας ήχου» - Ομάδα προγραμματιστών + Σχετικά με Διαφημίσεις Γενικά Οθόνη αναπαραγωγής @@ -1581,17 +1585,17 @@ Second \"item\" text" Η μόνιμη επανάληψη είναι απενεργοποιημένη - Απόκρυψη γραμμής κατηγοριών - Η γραμμή κατηγοριών είναι κρυμμένη - Η γραμμή κατηγοριών εμφανίζεται + Γραμμή κατηγοριών + Κρυμμένη + Εμφανίζεται - Απόκρυψη ετικέτας «Απόκτηση Music Premium» - Η ετικέτα είναι κρυμμένη - Η ετικέτα εμφανίζεται + Ετικέτα «Αποκτήστε το Music Premium» + Κρυμμένη + Εμφανίζεται - Απόκρυψη κουμπιού αναβάθμισης + Κουμπί «Αναβάθμιση» Κρυμμένο Εμφανίζεται diff --git a/patches/src/main/resources/addresources/values-es-rES/strings.xml b/patches/src/main/resources/addresources/values-es-rES/strings.xml index d1aab2ab8..1018b914d 100644 --- a/patches/src/main/resources/addresources/values-es-rES/strings.xml +++ b/patches/src/main/resources/addresources/values-es-rES/strings.xml @@ -621,6 +621,10 @@ Ajusta el volumen deslizando verticalmente en el lado derecho de la pantalla"Ocultar Recortar El botón del recortar está oculto Se muestra el botón de recortar + + Ocultar Tienda + El botón de la Tienda está oculto + El botón de la Tienda es visible Ocultar Guardar El botón de Guardar está oculto @@ -1464,7 +1468,7 @@ Habilitar esto puede desbloquear calidades de vídeo más altas" Usar el idioma de audio original Utilizando audio predeterminado - Para usar esta función, cambia \"Falsificar transmisiones de vídeo\" a iOS TV + Para usar esta función, cambia \'Falsificar transmisiones de vídeo\' a cualquier cliente excepto Android Studio diff --git a/patches/src/main/resources/addresources/values-et-rEE/strings.xml b/patches/src/main/resources/addresources/values-et-rEE/strings.xml index 99707154b..c33984447 100644 --- a/patches/src/main/resources/addresources/values-et-rEE/strings.xml +++ b/patches/src/main/resources/addresources/values-et-rEE/strings.xml @@ -621,6 +621,10 @@ Helitugevuse reguleerimiseks pühkige ekraani paremal küljel vertikaalselt"Peida Lõik Lõigu nupp on peidetud Lõigu nupp on nähtav + + Peida pood + Poe nupp on peidetud + Poe nupp on nähtaval Peida Salvesta Nupp Salvesta on peidetud @@ -1473,7 +1477,7 @@ Selle lubamine võib avada kõrgema video kvaliteedi" Algse helikeele kasutamine Kasutan vaikeheli - Selle funktsiooni kasutamiseks muuda valik „Pettemanööver videovoogudele” iOS TV peale + Selle funktsiooni kasutamiseks muutke „Võltsitud videovood” mis tahes muule kliendile peale Android Studio. diff --git a/patches/src/main/resources/addresources/values-eu-rES/strings.xml b/patches/src/main/resources/addresources/values-eu-rES/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-eu-rES/strings.xml +++ b/patches/src/main/resources/addresources/values-eu-rES/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-fa-rIR/strings.xml b/patches/src/main/resources/addresources/values-fa-rIR/strings.xml index 51d77d7c8..cdb190b76 100644 --- a/patches/src/main/resources/addresources/values-fa-rIR/strings.xml +++ b/patches/src/main/resources/addresources/values-fa-rIR/strings.xml @@ -147,6 +147,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-fi-rFI/strings.xml b/patches/src/main/resources/addresources/values-fi-rFI/strings.xml index 165bb5c18..34351751a 100644 --- a/patches/src/main/resources/addresources/values-fi-rFI/strings.xml +++ b/patches/src/main/resources/addresources/values-fi-rFI/strings.xml @@ -621,6 +621,10 @@ Säädä äänenvoimakkuutta pyyhkäisemällä pystysuoraan näytön oikealta pu Piilota Klippi Klippi-painike on piilotettu Klippi-painike näytetään + + Piilota Ostokset + Kauppa-painike on piilotettu + Kauppa-painike näytetään Piilota Tallenna Tallenna-painike on piilotettu @@ -1473,7 +1477,7 @@ Tämä voi avata korkealaatuisemmat videot" Käytetään alkuperäistä ääntä Käytetään oletusääntä - Voit käyttää tätä ominaisuutta muuttamalla \"Naamioi videovirrat\" iOS TV:ksi + Jotta voit käyttää tätä ominaisuutta, muuta \'Huijaa videovirtoja\' mihin tahansa asiakasohjelmaan paitsi Android Studioon diff --git a/patches/src/main/resources/addresources/values-fil-rPH/strings.xml b/patches/src/main/resources/addresources/values-fil-rPH/strings.xml index cab88824d..d28b500ee 100644 --- a/patches/src/main/resources/addresources/values-fil-rPH/strings.xml +++ b/patches/src/main/resources/addresources/values-fil-rPH/strings.xml @@ -621,6 +621,10 @@ Ayusin ang volume sa pamamagitan ng pag-swipe nang patayo sa kanang bahagi ng sc Itago ang Clip Nakatago ang clip button Ang pindutan ng clip ay ipinapakita + + Itago ang Tindahan + Ang pindutan ng Tindahan ay nakatago + Ang pindutan ng Tindahan ay nakikita Itago ang I-save Nakatago ang button ng I-save @@ -1471,7 +1475,7 @@ Ang pagpapagana nito ay maaaring magbukas ng mas mataas na kalidad ng video"Ginagamit ang orihinal na wika ng audio Gumagamit ng default audio - Para magamit ang feature na ito, palitan ang \'Magpanggap na video stream\' sa iOS TV + Para magamit ang feature na ito, palitan ang \'Panggagaya ng mga video stream\' sa anumang client maliban sa Android Studio diff --git a/patches/src/main/resources/addresources/values-fr-rFR/strings.xml b/patches/src/main/resources/addresources/values-fr-rFR/strings.xml index d477651e7..1ff7e441a 100644 --- a/patches/src/main/resources/addresources/values-fr-rFR/strings.xml +++ b/patches/src/main/resources/addresources/values-fr-rFR/strings.xml @@ -94,10 +94,10 @@ Appuyez sur le bouton Continuer et autorisez les modifications." Falsifier les flux vidéo "Les flux vidéo sont falsifiés -Si vous avez YouTube Premium, il est possible que ce paramètre ne soit pas nécessaire" +Si vous êtes abonné à YouTube Premium, ce paramètre n'est peut-être pas nécessaire" "Les flux vidéo ne sont pas falsifiés -La lecture est susceptible de ne pas fonctionner" +Il est possible que la lecture ne fonctionne pas" La désactivation de ce paramètre peut entraîner des problèmes de lecture. Client par défaut @@ -621,6 +621,10 @@ Réglez le volume en balayant verticalement sur le côté droit de l'écran"Masquer \"Clip\" Le bouton Clip est masqué Le bouton Clip est affiché + + Masquer \"Magasin\" + Le bouton Magasin est masqué + Le bouton Magasin est affiché Masquer \"Enregistrer\" Le bouton Enregistrer est masqué @@ -1063,9 +1067,9 @@ Cette fonctionnalité fonctionne de manière optimale avec une qualité vidéo d Durée minimale d\'un segment Les segments dont la durée est inférieure à cette valeur (en secondes) ne seront ni affichés ni ignorés Durée invalide - Votre ID privé d\'utilisateur + Votre ID d\'utilisateur privé Cet identifiant doit rester confidentiel. Cet identifiant est comme un mot de passe et ne doit être partagé avec qui que ce soit. Si quelqu\'un venait à mettre la main dessus, il pourrait usurper votre identité. - L\'ID privé d\'utilisateur doit comporter au moins 30 caractères + ID d\'utilisateur privé trop court (30+ caractères) Modifier l\'URL de l\'API L\'adresse utilisée par SponsorBlock pour contacter son serveur URL de l\'API réinitialisée @@ -1074,11 +1078,11 @@ Cette fonctionnalité fonctionne de manière optimale avec une qualité vidéo d Importer/Exporter les paramètres Copier Votre configuration SponsorBlock au format JSON qui peut être importée/exportée vers ReVanced et les autres plateformes SponsorBlock - Votre configuration SponsorBlock au format JSON qui peut être importée/exportée vers ReVanced et d\'autres plateformes SponsorBlock. Votre ID privé d\'utilisateur y est présent, partagez-la avec prudence. + Votre configuration SponsorBlock au format JSON qui peut être importée/exportée vers ReVanced et d\'autres plateformes SponsorBlock. Votre ID d\'utilisateur privé y est présent, partagez-la avec prudence. Paramètres importés avec succès Échec de l\'importation : %s Échec de l\'exportation : %s - "Vos paramètres contiennent un ID privé d'utilisateur. + "Vos paramètres contiennent un ID d'utilisateur SponsorBlock privé. Votre ID d'utilisateur est comme un mot de passe et ne doit jamais être partagé." Ne plus afficher @@ -1474,7 +1478,7 @@ Activer cette option peut déverrouiller des qualités vidéo supérieures"Utilisation de la langue audio d\'origine Utilisation de l\'audio par défaut - Pour utiliser cette fonctionnalité, définissez \"Falsifier les flux vidéo\" sur iOS TV + Pour utiliser cette fonctionnalité, changez \"Simuler les flux vidéo\" pour tout client sauf Android Studio diff --git a/patches/src/main/resources/addresources/values-ga-rIE/strings.xml b/patches/src/main/resources/addresources/values-ga-rIE/strings.xml index c69c02553..953056e64 100644 --- a/patches/src/main/resources/addresources/values-ga-rIE/strings.xml +++ b/patches/src/main/resources/addresources/values-ga-rIE/strings.xml @@ -621,6 +621,10 @@ Coigeartaigh an toirt trí haisceartán go hingearach ar thaobh deas an scáile Folaigh Gearrthóg Tá an cnaipe gearrthóg i bhfolach Taispeántar cnaipe gearrthóg + + Folaigh Siopa + Tá cnaipe an tSiopa i bhfolach + Tá cnaipe an tSiopa ar taispeáint Folaigh Sábháil Tá cnaipe sábhála i bhfolach @@ -1473,7 +1477,7 @@ Is féidir le seo caighdeáin físeáin níos airde a dhíghlasáil" Ag úsáid teanga bhunaidh na fuaime Ag úsáid fuaim réamhshocraithe - Chun an ghné seo a úsáid, athraigh \'Sruthanna físeáin bhréige\' go iOS TV + Chun an ghné seo a úsáid, athraigh \'Bréag-sruthanna físeáin\' chuig aon chliant seachas Android Studio diff --git a/patches/src/main/resources/addresources/values-gl-rES/strings.xml b/patches/src/main/resources/addresources/values-gl-rES/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-gl-rES/strings.xml +++ b/patches/src/main/resources/addresources/values-gl-rES/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-gu-rIN/strings.xml b/patches/src/main/resources/addresources/values-gu-rIN/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-gu-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-gu-rIN/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-hi-rIN/strings.xml b/patches/src/main/resources/addresources/values-hi-rIN/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-hi-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-hi-rIN/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-hr-rHR/strings.xml b/patches/src/main/resources/addresources/values-hr-rHR/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-hr-rHR/strings.xml +++ b/patches/src/main/resources/addresources/values-hr-rHR/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-hu-rHU/strings.xml b/patches/src/main/resources/addresources/values-hu-rHU/strings.xml index 15d6e0b9e..e918555c7 100644 --- a/patches/src/main/resources/addresources/values-hu-rHU/strings.xml +++ b/patches/src/main/resources/addresources/values-hu-rHU/strings.xml @@ -621,6 +621,10 @@ A hangerő a képernyő jobb oldalán függőlegesen húzva állítható be"Vágás gomb elrejtése A klip gomb el van rejtve A klip gomb látható + + Bolt elrejtése + A Bolt gomb elrejtve + A Bolt gomb látható Mentés elrejtése A mentés gomb rejtett @@ -1470,7 +1474,7 @@ Ez a beállítás lehetővé teszi a magasabb videóminőségek feloldását"Eredeti hang használata a hang nyelvén Alapértelmezett hang használata - A funkció használatához módosítsa a „Videófolyamok hamisítása” beállítást iOS TV-re + A funkció használatához módosítsa a \"Videóstreamek hamisítása\" beállítást bármely kliensre, kivéve az Android Studiót diff --git a/patches/src/main/resources/addresources/values-hy-rAM/strings.xml b/patches/src/main/resources/addresources/values-hy-rAM/strings.xml index 0e4d92290..0ee3a1caf 100644 --- a/patches/src/main/resources/addresources/values-hy-rAM/strings.xml +++ b/patches/src/main/resources/addresources/values-hy-rAM/strings.xml @@ -621,6 +621,10 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել Թաքցնել Clip Clip կոճակը թաքցված է Clip կոճակը ցուցադրվում է + + Թաքցնել Խանութը + Խանութի կոճակը թաքնված է + Խանութի կոճակը ցուցադրվում է Թաքցնել պահելը Պահելու կոճակը թաքցված է @@ -1474,7 +1478,7 @@ Mini-player-ը կարող է գրավվել էկրանից դուրս՝ դեպի Օգտագործելով ձայնային օրիգինալ լեզուն Վերջնական ձայն օգտագործվում է - Այս գործառույթն օգտագործելու համար փոխեք «Կեղծել տեսահոսքերը» iOS TV-ի + Այս հնարավորությունն օգտագործելու համար «Կեղծել վիդեո հոսքերը» տարբերակը փոխեք ցանկացած հաճախորդի, բացի Android Studio-ից diff --git a/patches/src/main/resources/addresources/values-in-rID/strings.xml b/patches/src/main/resources/addresources/values-in-rID/strings.xml index e3b59b000..7d237961b 100644 --- a/patches/src/main/resources/addresources/values-in-rID/strings.xml +++ b/patches/src/main/resources/addresources/values-in-rID/strings.xml @@ -98,7 +98,7 @@ Jika Anda adalah pengguna YouTube Premium, setelan ini mungkin tidak diperlukan" "Aliran video tidak dipalsukan Pemutaran mungkin tidak berfungsi" - Mematikan pengaturan ini dapat menyebabkan masalah pemutaran. + Menonaktifkan pengaturan ini mungkin menyebabkan masalah pemutaran. Klien bawaan @@ -621,6 +621,10 @@ Menyesuaikan volume dengan mengusap secara vertikal di sisi kanan layar"Sembunyikan Klip Tombol klip disembunyikan Tombol klip ditampilkan + + Sembunyikan Belanja + Tombol belanja disembunyikan + Tombol belanja ditampilkan Sembunyikan Simpan Tombol Simpan disembunyikan @@ -721,7 +725,7 @@ Jika mengubah setelan ini tidak berpengaruh, coba beralih ke mode Penyamaran." "Menu trek audio disembunyikan -Untuk menampilkan menu trek audio, ubah 'Spoof stream video' ke iPadOS" +Untuk menampilkan menu trek audio, ubah 'Palsukan aliran video' ke iPadOS" Sembunyikan Tonton di VR Menu tonton di VR disembunyikan @@ -831,7 +835,7 @@ Untuk menampilkan menu trek audio, ubah 'Spoof stream video' ke iPadOS" Sembunyikan saran penelusuran Saran penelusuran disembunyikan Saran penelusuran ditampilkan - Sembunyikan tombol Toko + Sembunyikan tombol Belanja Tombol belanja disembunyikan Tombol belanja ditampilkan Sembunyikan stiker @@ -1472,7 +1476,7 @@ Mengaktifkan ini dapat membuka kualitas video yang lebih tinggi" Menggunakan bahasa audio asli Menggunakan audio bawaan - Untuk menggunakan fitur ini, ubah \'Palsukan aliran video\' ke iOS TV + Untuk menggunakan fitur ini, ubah \'Spoof aliran video\' ke klien apa pun kecuali Android Studio @@ -1548,9 +1552,9 @@ Mengaktifkan ini dapat membuka kualitas video yang lebih tinggi" Efek samping pemalsuan Efek samping pemalsuan Android - "• Menu trek audio tidak ada + "• Menu trek audio hilang • Volume stabil tidak tersedia" - • Video mungkin berhenti pada pukul 1:00, atau mungkin tidak tersedia di beberapa wilayah + • Video mungkin berhenti pada menit 1:00, atau mungkin tidak tersedia di beberapa wilayah • Klien eksperimental dan dapat berhenti berfungsi kapan saja • Tidak ada codec video AV1 • Video anak-anak mungkin tidak dapat diputar saat keluar atau dalam mode penyamaran diff --git a/patches/src/main/resources/addresources/values-is-rIS/strings.xml b/patches/src/main/resources/addresources/values-is-rIS/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-is-rIS/strings.xml +++ b/patches/src/main/resources/addresources/values-is-rIS/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-it-rIT/strings.xml b/patches/src/main/resources/addresources/values-it-rIT/strings.xml index b398a1589..f5a1ad788 100644 --- a/patches/src/main/resources/addresources/values-it-rIT/strings.xml +++ b/patches/src/main/resources/addresources/values-it-rIT/strings.xml @@ -621,6 +621,10 @@ Regola il volume scorrendo verticalmente sul lato destro dello schermo" Nascondi Clip Il pulsante Clip è nascosto Il pulsante Clip è visibile + + Nascondi Acquisti + Il pulsante Acquisti è nascosto + Il pulsante Acquisti è visibile Nascondi Salva Il pulsante Salva è nascosto @@ -1472,7 +1476,7 @@ Abilitare questa opzione può sbloccare qualità video più elevate" Utilizza la lingua audio originale Utilizzo audio predefinito - Per utilizzare questa funzionalità, cambia \'Spoof video streams\' in iOS TV + Per usare questa funzionalità, cambia \"Falsifica i flussi video\" a qualsiasi client eccetto Android Studio diff --git a/patches/src/main/resources/addresources/values-iw-rIL/strings.xml b/patches/src/main/resources/addresources/values-iw-rIL/strings.xml index e5afe0f0a..7480855f6 100644 --- a/patches/src/main/resources/addresources/values-iw-rIL/strings.xml +++ b/patches/src/main/resources/addresources/values-iw-rIL/strings.xml @@ -621,6 +621,10 @@ Second \"item\" text" הסתר קליפ לחצן קליפ מוסתר לחצן קליפ מוצג + + הסתר \'חנות\' + הלחצן \'חנות\' מוסתר + הלחצן \'חנות\' מוצג הסתר \'שמירה\' הלחצן \'שמירה\' מוסתר @@ -1475,7 +1479,7 @@ Second \"item\" text" שימוש בשפת שמע מקורית שימוש בשמע ברירת מחדל - כדי להשתמש בתכונה זו, שנה את \'זייף זרמי וידאו\' ל-iOS TV + כדי להשתמש בתכונה זו, שנה את \'זיוף זרמי וידאו\' לכל לקוח מלבד Android Studio diff --git a/patches/src/main/resources/addresources/values-ja-rJP/strings.xml b/patches/src/main/resources/addresources/values-ja-rJP/strings.xml index d9cd992c3..8128bb2f8 100644 --- a/patches/src/main/resources/addresources/values-ja-rJP/strings.xml +++ b/patches/src/main/resources/addresources/values-ja-rJP/strings.xml @@ -90,15 +90,15 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 動画ストリームを偽装 動画再生の失敗を回避するために、クライアントの動画ストリームを偽装します 動画ストリームを偽装 - 再生の問題を防ぐためにクライアントのビデオストリームを偽装する + 動画再生の失敗を回避するために、クライアントの動画ストリームを偽装します 動画ストリームを偽装 "動画ストリームは偽装されます YouTube Premium ユーザーの場合、この設定は必要ない可能性があります" - "ビデオストリームが偽装されていません + "動画ストリームは偽装されません -再生できない可能性があります" - この設定をオフにすると、再生の問題が発生する可能性があります。 +再生に失敗する可能性があります" + この設定を無効にすると、動画の再生に失敗するようになる可能性があります。 デフォルトのクライアント @@ -623,6 +623,10 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が クリップボタンを非表示 クリップボタンは表示されません クリップボタンは表示されます + + 「ショップ」を非表示 + ショップボタンは表示されません + ショップボタンは表示されます 「保存」を非表示にする 「保存」ボタンは表示されません @@ -1475,7 +1479,7 @@ Automotive レイアウト オリジナルの音声トラック (言語) を使用します\n\nオートダビングを含む吹き替えの音声トラックは使用しません アプリが選択した音声トラック (言語) を使用します\n\nオートダビングを含む吹き替えの音声トラックを使用する場合があります - この機能を使用するには、「動画ストリームを偽装」のクライアントを iOS TV に変更してください + この機能を使用するには、「動画ストリームを偽装」のクライアントを Android Studio を除く任意のクライアントに変更してください @@ -1553,7 +1557,7 @@ Automotive レイアウト Android クライアントの副作用 "• 「音声トラック」がフライアウト メニューに表示されない • 「一定音量」が利用できない" - • 動画は1:00で停止する場合があります。または、一部の地域では利用できない場合があります。 + • 動画が 01:00 で停止する、または一部の地域で利用できない可能性がある • 実験的なクライアントであり、いつでも動作しなくなる可能性がある • AV1 コーデックが利用できない • ログアウト時またはシークレット モード時に、子ども向け動画が再生されない可能性がある @@ -1562,14 +1566,14 @@ Automotive レイアウト 統計情報に現在のクライアントは表示されません 音声ストリームの言語 - 特定の音声言語を選択するには、「元の音声言語を強制」をオフにしてください + 特定の音声言語を選択するには、「オリジナルの音声を強制的に使用」を無効にしてください ReVanced について 広告 - その他 + 全般 プレーヤー その他 @@ -1579,24 +1583,24 @@ Automotive レイアウト 動画広告は表示されます - 永続リピートを有効にする - 永続リピートが有効です - 永続リピートが無効です + 常時リピートを有効化 + 常時リピートは有効です\n\nリピート設定が保存され常時適用されます + 常時リピートは無効です\n\nリピート設定は保存されません カテゴリバーを非表示 - カテゴリバーは非表示です + カテゴリバーは表示されません カテゴリバーは表示されます - 「Get Music Premium」ラベルを非表示 - ラベルは非表示です + 「Music Premium に登録」ラベルを非表示 + ラベルは表示されません ラベルは表示されます - アップグレードボタンを非表示 - 「メンバーになる」ボタンは表示されません - 「メンバーになる」ボタンは表示されます + アップグレード ボタンを非表示 + ボタンは表示されません + ボタンは表示されます diff --git a/patches/src/main/resources/addresources/values-ka-rGE/strings.xml b/patches/src/main/resources/addresources/values-ka-rGE/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-ka-rGE/strings.xml +++ b/patches/src/main/resources/addresources/values-ka-rGE/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-kk-rKZ/strings.xml b/patches/src/main/resources/addresources/values-kk-rKZ/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-kk-rKZ/strings.xml +++ b/patches/src/main/resources/addresources/values-kk-rKZ/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-km-rKH/strings.xml b/patches/src/main/resources/addresources/values-km-rKH/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-km-rKH/strings.xml +++ b/patches/src/main/resources/addresources/values-km-rKH/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-kn-rIN/strings.xml b/patches/src/main/resources/addresources/values-kn-rIN/strings.xml index c7288141f..a46a49eb4 100644 --- a/patches/src/main/resources/addresources/values-kn-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-kn-rIN/strings.xml @@ -115,6 +115,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-ko-rKR/strings.xml b/patches/src/main/resources/addresources/values-ko-rKR/strings.xml index 33441a45a..bb3d0a511 100644 --- a/patches/src/main/resources/addresources/values-ko-rKR/strings.xml +++ b/patches/src/main/resources/addresources/values-ko-rKR/strings.xml @@ -619,6 +619,10 @@ YouTube Premium 사용자라면 이 설정은 필요하지 않을 수 있습니 클립 버튼 숨기기 클립 버튼이 숨겨집니다 클립 버튼이 표시됩니다 + + 쇼핑 버튼 숨기기 + 쇼핑 버튼이 숨겨집니다 + 쇼핑 버튼이 표시됩니다 저장 버튼 숨기기 저장 버튼이 숨겨집니다 @@ -1480,7 +1484,7 @@ DeArrow에 대해 자세히 알아보려면 여기를 탭하세요" 원본 오디오 스트림 언어를 사용 중입니다 기본 오디오 스트림 언어를 사용 중입니다 - 이 기능을 사용하려면, \'동영상 스트림 변경하기\'에서 기본 클라이언트를 iOS TV로 변경하세요 + 이 기능을 사용하려면, \'동영상 스트림 변경하기\'를 Android Studio를 제외한 다른 클라이언트로 변경하세요. @@ -1558,7 +1562,7 @@ DeArrow에 대해 자세히 알아보려면 여기를 탭하세요" Android 변경에 따른 부작용 "• 오디오 트랙 메뉴가 표시되지 않습니다 • 안정적인 볼륨을 사용할 수 없습니다" - • 동영상이 1:00에서 중지되거나 일부 지역에서 제공되지 않을 수 있습니다 + • 동영상이 1:00에 멈출 수 있으며, 일부 지역에서는 이용이 불가능할 수 있습니다 • 실험용 클라이언트이며 언제든지 작동이 중단될 수 있습니다 • AV1 코덱이 지원되지 않습니다 • Kids 동영상은 로그인을 하지 않았거나 시크릿 모드에서는 재생되지 않을 수 있습니다 @@ -1567,7 +1571,7 @@ DeArrow에 대해 자세히 알아보려면 여기를 탭하세요" 동영상 스트림을 가져오는 데 사용되는 클라이언트가 전문 통계에서 표시되지 않습니다 오디오 스트림 언어 - 특정 오디오 언어를 선택하려면 \"원본 오디오 언어 강제 적용\"을 끄십시오. + 특정 오디오 스트림 언어를 선택하려면, \'원본 오디오 스트림 언어 강제로 활성화하기\'를 끄세요 diff --git a/patches/src/main/resources/addresources/values-ky-rKG/strings.xml b/patches/src/main/resources/addresources/values-ky-rKG/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-ky-rKG/strings.xml +++ b/patches/src/main/resources/addresources/values-ky-rKG/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-lo-rLA/strings.xml b/patches/src/main/resources/addresources/values-lo-rLA/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-lo-rLA/strings.xml +++ b/patches/src/main/resources/addresources/values-lo-rLA/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-lt-rLT/strings.xml b/patches/src/main/resources/addresources/values-lt-rLT/strings.xml index a66bbd8fa..a2b993423 100644 --- a/patches/src/main/resources/addresources/values-lt-rLT/strings.xml +++ b/patches/src/main/resources/addresources/values-lt-rLT/strings.xml @@ -621,6 +621,10 @@ Reguliuokite garsumą braukdami vertikaliai dešinėje ekrano pusėje" Slėpti Iškarpą Iškarpos mygtukas paslėptas Iškarpos mygtukas rodomas + + Slėpti parduotuvę + Parduotuvės mygtukas paslėptas + Parduotuvės mygtukas rodomas Slėpti Išsaugoti Išsaugojimo mygtukas paslėptas @@ -1474,7 +1478,7 @@ Gali būti atrakinta aukštesnės vaizdo įrašų kokybės, bet galite patirti v Naudojama originali garso kalba Naudojamas numatytasis garsas - Norėdami naudoti šią funkciją, pakeiskite „Klastoti vaizdo srautus“ į iOS TV + Kad naudotumėte šią funkciją, pakeiskite „Klastoti vaizdo įrašų srautus“ į bet kurį klientą, išskyrus „Android Studio“ diff --git a/patches/src/main/resources/addresources/values-lv-rLV/strings.xml b/patches/src/main/resources/addresources/values-lv-rLV/strings.xml index 4e9c8f690..862ec7422 100644 --- a/patches/src/main/resources/addresources/values-lv-rLV/strings.xml +++ b/patches/src/main/resources/addresources/values-lv-rLV/strings.xml @@ -621,6 +621,10 @@ Regulējiet skaļumu, velkot vertikāli ekrāna labajā pusē" Paslēpt Izgriezt Izgriezt poga ir paslēpta Izgriezt poga ir redzama + + Paslēpt veikalu + Veikala poga ir paslēpta + Veikala poga ir redzama Paslēpt Saglabāt Poga Saglabāt ir paslēpta @@ -1474,7 +1478,7 @@ Var tikt atbloķētas augstākas video kvalitātes, taču var rasties video atsk Izmantot oriģinālo audio valodu Tiek izmantots noklusējuma audio - Lai izmantotu šo funkciju, nomainiet \"Video straumju viltošana\" uz iOS TV + Lai izmantotu šo funkciju, mainiet \"Viltotās video plūsmas\" uz jebkuru klientu, izņemot Android Studio diff --git a/patches/src/main/resources/addresources/values-mk-rMK/strings.xml b/patches/src/main/resources/addresources/values-mk-rMK/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-mk-rMK/strings.xml +++ b/patches/src/main/resources/addresources/values-mk-rMK/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-ml-rIN/strings.xml b/patches/src/main/resources/addresources/values-ml-rIN/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-ml-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-ml-rIN/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-mn-rMN/strings.xml b/patches/src/main/resources/addresources/values-mn-rMN/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-mn-rMN/strings.xml +++ b/patches/src/main/resources/addresources/values-mn-rMN/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-mr-rIN/strings.xml b/patches/src/main/resources/addresources/values-mr-rIN/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-mr-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-mr-rIN/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-ms-rMY/strings.xml b/patches/src/main/resources/addresources/values-ms-rMY/strings.xml index d8bf2a45f..177641f2e 100644 --- a/patches/src/main/resources/addresources/values-ms-rMY/strings.xml +++ b/patches/src/main/resources/addresources/values-ms-rMY/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-my-rMM/strings.xml b/patches/src/main/resources/addresources/values-my-rMM/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-my-rMM/strings.xml +++ b/patches/src/main/resources/addresources/values-my-rMM/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-nb-rNO/strings.xml b/patches/src/main/resources/addresources/values-nb-rNO/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-nb-rNO/strings.xml +++ b/patches/src/main/resources/addresources/values-nb-rNO/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-ne-rIN/strings.xml b/patches/src/main/resources/addresources/values-ne-rIN/strings.xml index f02157c05..39674e0dc 100644 --- a/patches/src/main/resources/addresources/values-ne-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-ne-rIN/strings.xml @@ -102,6 +102,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-nl-rNL/strings.xml b/patches/src/main/resources/addresources/values-nl-rNL/strings.xml index a77caaf9f..efe7a43c6 100644 --- a/patches/src/main/resources/addresources/values-nl-rNL/strings.xml +++ b/patches/src/main/resources/addresources/values-nl-rNL/strings.xml @@ -621,6 +621,10 @@ Pas het volume aan door verticaal over de rechterkant van het scherm te vegen"Fragment verbergen Fragment knop is verborgen Fragment knop wordt weergegeven + + Winkel verbergen + Winkelknop is verborgen + Winkelknop is weergegeven Opslaan verbergen Knop \"Opslaan\" is verborgen @@ -1471,7 +1475,7 @@ Het inschakelen hiervan kan hogere videokwaliteiten ontgrendelen" De oorspronkelijke audiotaal gebruiken Standaard audio gebruiken - Om deze functie te gebruiken, wijzig je \'Videostreams vervalsen\' in iOS TV + Om deze functie te gebruiken, wijzig \'Videostreams spoofen\' naar elke client behalve Android Studio diff --git a/patches/src/main/resources/addresources/values-or-rIN/strings.xml b/patches/src/main/resources/addresources/values-or-rIN/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-or-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-or-rIN/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-pa-rIN/strings.xml b/patches/src/main/resources/addresources/values-pa-rIN/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-pa-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-pa-rIN/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-pl-rPL/strings.xml b/patches/src/main/resources/addresources/values-pl-rPL/strings.xml index 75754d9f8..b19d19a24 100644 --- a/patches/src/main/resources/addresources/values-pl-rPL/strings.xml +++ b/patches/src/main/resources/addresources/values-pl-rPL/strings.xml @@ -617,6 +617,10 @@ Dostosuj głośność, przesuwając pionowo po prawej stronie ekranu" Przycisk od klipów Przycisk tworzenia klipów jest ukryty Przycisk tworzenia klipów jest widoczny + + Ukryj Sklep + Przycisk Sklep jest ukryty + Przycisk Sklep jest widoczny Ukryj Zapisz Przycisk Zapisz jest ukryty @@ -1469,7 +1473,7 @@ Włączenie tego może odblokować wyższe jakości wideo" Używanie oryginalnego języka audio Używanie domyślnego dźwięku - Aby użyć tej funkcji, zmień opcję \"Fałszuj strumienie wideo\" na iOS TV + Aby użyć tej funkcji, zmień \'Fałszuj strumienie wideo\' na dowolnego klienta z wyjątkiem Android Studio diff --git a/patches/src/main/resources/addresources/values-pt-rBR/strings.xml b/patches/src/main/resources/addresources/values-pt-rBR/strings.xml index 18ad54d5c..f32cbe2a1 100644 --- a/patches/src/main/resources/addresources/values-pt-rBR/strings.xml +++ b/patches/src/main/resources/addresources/values-pt-rBR/strings.xml @@ -621,6 +621,10 @@ Ajuste o volume deslizando verticalmente no lado direito da tela" Ocultar Clipe Botão clipe está oculto O botão clipe é mostrado + + Ocultar Loja + O botão Loja está oculto + O botão Loja é exibido Ocultar Salvar O botão Salvar está oculto @@ -1470,7 +1474,7 @@ Habilitar isso pode desbloquear qualidades de vídeo mais altas" Usar o idioma original do áudio Usando áudio padrão - Para usar este recurso, altere \"Spoof video streams\" para iOS TV + Para usar este recurso, mude \'Falsificar fluxos de vídeo\' para qualquer cliente, exceto o Android Studio diff --git a/patches/src/main/resources/addresources/values-pt-rPT/strings.xml b/patches/src/main/resources/addresources/values-pt-rPT/strings.xml index 2e12a6b4a..4bffd019f 100644 --- a/patches/src/main/resources/addresources/values-pt-rPT/strings.xml +++ b/patches/src/main/resources/addresources/values-pt-rPT/strings.xml @@ -621,6 +621,10 @@ Ajuste o volume deslizando verticalmente no lado direito da tela" Esconder clipe O botão do clipe está escondido Botão de corte é visível + + Ocultar Loja + O botão Loja está oculto + O botão Loja está exibido Ocultar Salvar O botão Salvar está oculto @@ -1473,7 +1477,7 @@ Bật tính năng này có thể mở khóa chất lượng video cao hơn"Usando o idioma de áudio original Usando o áudio predefinido - Para usar este recurso, altere \"Spoof video streams\" para iOS TV + Para usar este recurso, altere \'Falsificar streams de vídeo\' para qualquer cliente, exceto o Android Studio diff --git a/patches/src/main/resources/addresources/values-ro-rRO/strings.xml b/patches/src/main/resources/addresources/values-ro-rRO/strings.xml index a7e006147..b94cc4106 100644 --- a/patches/src/main/resources/addresources/values-ro-rRO/strings.xml +++ b/patches/src/main/resources/addresources/values-ro-rRO/strings.xml @@ -621,6 +621,10 @@ Reglați volumul glisând vertical pe partea dreaptă a ecranului" Ascunde Clip Butonul clip este ascuns Butonul clipului este afișat + + Ascunde Magazinul + Butonul Magazin este ascuns + Butonul Magazin este afișat Ascunde Salvare Butonul Salvare este ascuns @@ -1472,7 +1476,7 @@ Activarea acestei opțiuni poate debloca calități video mai mari" Folosind limba audio originală Utilizează audio implicit - Pentru a utiliza această funcție, schimbați „Spoof video streams” în iOS TV + Pentru a utiliza această funcție, modificați \"Falsificare fluxuri video\" la orice client, cu excepția Android Studio diff --git a/patches/src/main/resources/addresources/values-ru-rRU/strings.xml b/patches/src/main/resources/addresources/values-ru-rRU/strings.xml index 53772a353..cf31e0a5e 100644 --- a/patches/src/main/resources/addresources/values-ru-rRU/strings.xml +++ b/patches/src/main/resources/addresources/values-ru-rRU/strings.xml @@ -621,6 +621,10 @@ Second \"item\" text" Скрыть кнопку \"Создать клип\" Кнопка \"Создать клип\" под плеером скрыта Кнопка \"Создать клип\" под плеером показана + + Скрыть магазин + Кнопка \"Магазин\" в Shorts скрыта + Кнопка \"Магазин\" в Shorts показана Скрыть кнопку \"Сохранить\" Кнопка \"Сохранить\" скрыта @@ -1480,7 +1484,7 @@ Second \"item\" text" Используется оригинальная звуковая дорожка Используется звуковая дорожка по умолчанию - Для использования данной опции измените подмену видеопотока на тип клиента iOS TV + Для использования этой функции, измените \'Подмена видеопотоков\' на любой клиент, кроме Android Studio diff --git a/patches/src/main/resources/addresources/values-si-rLK/strings.xml b/patches/src/main/resources/addresources/values-si-rLK/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-si-rLK/strings.xml +++ b/patches/src/main/resources/addresources/values-si-rLK/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-sk-rSK/strings.xml b/patches/src/main/resources/addresources/values-sk-rSK/strings.xml index 5a53db7cb..8b14f7f09 100644 --- a/patches/src/main/resources/addresources/values-sk-rSK/strings.xml +++ b/patches/src/main/resources/addresources/values-sk-rSK/strings.xml @@ -619,6 +619,10 @@ Upravte hlasitosť posúvaním vertikálne na pravej strane obrazovky" Skryť klip Tlačidlo klipu je skryté Zobrazí sa tlačidlo klipu + + Skryť obchod + Tlačidlo Obchod je skryté + Tlačidlo Obchod je zobrazené Skryť Uložiť Tlačidlo Uložiť je skryté @@ -1466,7 +1470,7 @@ Povolením tejto možnosti môžete odomknúť vyššie kvality videa" Používa sa pôvodný jazyk zvuku Používanie predvoleného zvuku - Ak chcete používať túto funkciu, zmeňte možnosť „Zosmiešniť streamy videa“ na iOS TV + Ak chcete použiť túto funkciu, zmeňte \"Podvrhnúť video streamy\" na ľubovoľného klienta okrem Android Studio diff --git a/patches/src/main/resources/addresources/values-sl-rSI/strings.xml b/patches/src/main/resources/addresources/values-sl-rSI/strings.xml index 137ef0a6d..a72fe78c7 100644 --- a/patches/src/main/resources/addresources/values-sl-rSI/strings.xml +++ b/patches/src/main/resources/addresources/values-sl-rSI/strings.xml @@ -621,6 +621,10 @@ Prilagodite glasnost s potegom navpično na desni strani zaslona" Skrij Izrezek Gumb Izrezek je skrit Gumb Izrezek je prikazan + + Skrij Trgovino + Gumb Trgovina je skrit + Gumb Trgovina je prikazan Skrij Shrani Gumb Shrani je skrit @@ -1473,7 +1477,7 @@ Omogočanje tega lahko odklene višje kakovosti videa" Uporabi izvirni jezik zvoka Uporaba privzetega zvoka - Če želite uporabiti to funkcijo, spremenite »Spoof video streams« v iOS TV + Za uporabo te funkcije spremenite \"Ponaredi video tokove\" na katerega koli odjemalca, razen na Android Studio diff --git a/patches/src/main/resources/addresources/values-sq-rAL/strings.xml b/patches/src/main/resources/addresources/values-sq-rAL/strings.xml index ba69b2768..ec07f6b47 100644 --- a/patches/src/main/resources/addresources/values-sq-rAL/strings.xml +++ b/patches/src/main/resources/addresources/values-sq-rAL/strings.xml @@ -621,6 +621,10 @@ Përshtate shkëlqimin duke rrëshqitur vertikalisht në anën e majtë të ekra Fsheh \"Klip\" Butoni \"Klip\" është i fshehur Butoni \"Klip\" është i dukshëm + + Fshih Dyqanin + Butoni i dyqanit është fshehur + Butoni i dyqanit është shfaqur Fshih Ruaj Butoni Ruaj është i fshehur @@ -1471,7 +1475,7 @@ Aktivizimi i kësaj mund të zhbllokojë cilësi më të larta video" Duke përdorur gjuhën origjinale audio Përdorimi i Zërit Parazgjedhur - Për ta përdorur këtë veçori, ndryshoni \'Rrjedhat e videos tallëse\' në iOS TV + Për të përdorur këtë veçori, ndryshoni \'Falsifiko transmetimet e videos\' në çdo klient përveç Android Studio diff --git a/patches/src/main/resources/addresources/values-sr-rCS/strings.xml b/patches/src/main/resources/addresources/values-sr-rCS/strings.xml index c9da14aa7..eae05e2e4 100644 --- a/patches/src/main/resources/addresources/values-sr-rCS/strings.xml +++ b/patches/src/main/resources/addresources/values-sr-rCS/strings.xml @@ -89,13 +89,13 @@ Dodirnite dugme „Nastavi” i dozvolite promene optimizacije." Lažirani video strimovi Lažiranje klijenta video strimova da bi se sprečili problemi sa reprodukcijom - Lažiranje video tokova - Lažirajte video tokove klijenta da biste sprečili probleme sa reprodukcijom. + Lažirani video strimovi + Lažiranje video strimova klijenta da bi se sprečili problemi sa reprodukcijom Lažirani video strimovi "Video strimovi su lažirani Ako ste korisnik YouTube Premiuma, ovo podešavanje možda neće biti potrebno" - "Video tokovi nisu lažirani + "Video strimovi nisu lažirani Reprodukcija možda neće raditi" Isključivanje ovog podešavanja može izazvati probleme sa reprodukcijom. @@ -621,6 +621,10 @@ Podesite jačinu zvuka prevlačenjem vertikalno na desnoj strani ekrana"Sakrij dugme „Klip” Dugme „Klip” je skriveno Dugme „Klip” je prikazano + + Sakrij dugme „Prodavnica” + Dugme „Prodavnica” je skriveno + Dugme „Prodavnica” je prikazano Sakrij dugme „Sačuvaj” Dugme „Sačuvaj” je skriveno @@ -721,7 +725,7 @@ Ako se promena ove opcije ne primeni, pokušajte da pređete u režim bez arhivi "Meni „Audio snimak” je skriven -Da biste prikazali meni „Audio snimak”, promenite „Lažirani video strimovi” u iPadOS" +Da biste prikazali meni „Audio snimak”, promenite opciju „Lažirani video strimovi” na iPadOS" Sakrij dugme „Gledaj u VR” Dugme „Gledaj u VR” je skriveno @@ -1472,7 +1476,7 @@ Ako ovo omogućite, mogu biti otključani viši kvaliteti videa" Korišćenje originalnog jezika zvuka Korišćenje podrazumevanog zvuka - Da biste koristili ovu funkciju, promenite opciju „Lažirani video strimovi” na iOS TV + Da biste koristili ovu funkciju, promenite opciju „Lažirani video strimovi” na bilo koji klijent osim Android Studio @@ -1550,7 +1554,7 @@ Ako ovo omogućite, mogu biti otključani viši kvaliteti videa" Neželjeni efekti lažiranja na Android "• Meni „Audio snimak” nedostaje • Opcija „Ujednačena jačina zvuka” nije dostupna" - • Video se može zaustaviti u 1:00, ili možda neće biti dostupan u nekim regionima + • Video se može zaustaviti u 1:00 ili možda neće biti dostupan u nekim regionima • Eksperimentalni klijent i može prestati da radi bilo kada • Nema video kodeka AV1 • Videi za decu se možda neće puštati kada ste odjavljeni ili u režimu bez arhiviranja @@ -1559,12 +1563,12 @@ Ako ovo omogućite, mogu biti otključani viši kvaliteti videa" Tip klijenta je skriven u „Statistici za znalce” Jezik audio strima - Da biste odabrali određeni audio jezik, isključite \'Prisiljavanje originalnog audio jezika\' + Da biste izabrali određeni jezik zvuka, isključite opciju „Prisili originalni jezik zvuka” - O + O programu Oglasi Opšte Plejer @@ -1586,7 +1590,7 @@ Ako ovo omogućite, mogu biti otključani viši kvaliteti videa" Traka kategorija je prikazana - Sakrij oznaku „Preuzmi Music Premium” + Sakrij oznaku „Nabavite Music Premium” Oznaka je skrivena Oznaka je prikazana diff --git a/patches/src/main/resources/addresources/values-sr-rSP/strings.xml b/patches/src/main/resources/addresources/values-sr-rSP/strings.xml index 1f28184e2..e84787fda 100644 --- a/patches/src/main/resources/addresources/values-sr-rSP/strings.xml +++ b/patches/src/main/resources/addresources/values-sr-rSP/strings.xml @@ -89,13 +89,13 @@ Second \"item\" text" Лажирани видео стримови Лажирање клијента видео стримова да би се спречили проблеми са репродукцијом - Фалсификујте видео стримове - Фалсификујте клијентске видео стримове да бисте спречили проблеме са репродукцијом + Лажирани видео стримови + Лажирање видео стримова клијента да би се спречили проблеми са репродукцијом Лажирани видео стримови "Видео стримови су лажирани Ако сте корисник YouTube Premium-а, ово подешавање можда неће бити потребно" - "Видео стримови нису фалсификовани + "Видео стримови нису лажирани Репродукција можда неће радити" Искључивање овог подешавања може изазвати проблеме са репродукцијом. @@ -621,6 +621,10 @@ Second \"item\" text" Сакриј дугме „Клип” Дугме „Клип” је скривено Дугме „Клип” је приказано + + Сакриј дугме „Продавница” + Дугме „Продавница” је скривено + Дугме „Продавница” је приказано Сакриј дугме „Сачувај” Дугме „Сачувај” је скривено @@ -721,7 +725,7 @@ Second \"item\" text" "Мени „Аудио снимак” је скривен -Да бисте приказали мени „Аудио снимак”, промените „Лажирани видео стримови” на iPadOS" +Да бисте приказали мени „Аудио снимак”, промените опцију „Лажирани видео стримови” на iPadOS" Сакриј дугме „Гледај у ВР” Дугме „Гледај у ВР” је скривено @@ -1475,7 +1479,7 @@ Second \"item\" text" Коришћење оригиналног језика звука Коришћење подразумеваног звука - Да бисте користили ову функцију, промените „Лажирани видео стримови” на iOS TV + Да бисте користили ову функцију, промените опцију „Лажирани видео стримови” на било који клијент осим Android Studio @@ -1553,7 +1557,7 @@ Second \"item\" text" Нежељени ефекти лажирања на Android "• Мени „Аудио снимак” недостаје • Опција „Уједначена јачина звука” није доступна" - • Видео се може зауставити на 1:00, или можда неће бити доступан у неким регионима + • Видео се може зауставити на 1:00 или можда неће бити доступан у неким регионима • Експериментални клијент и може престати да ради било када • Нема видео кодека AV1 • Видеи за децу се можда неће пуштати када сте одјављени или у режиму без архивирања @@ -1562,7 +1566,7 @@ Second \"item\" text" Тип клијента је скривен у „Статистици за зналце” Језик аудио стрима - Да бисте изабрали одређени аудио језик, искључите „Принудно коришћење оригиналног аудио језика“ + Да бисте изабрали одређени језик звука, искључите опцију „Присили оригинални језик звука” @@ -1589,7 +1593,7 @@ Second \"item\" text" Трака категорија је приказана - Сакриј ознаку „Преузми Music Premium” + Сакриј ознаку „Набавите Music Premium” Ознака је скривена Ознака је приказана diff --git a/patches/src/main/resources/addresources/values-sv-rSE/strings.xml b/patches/src/main/resources/addresources/values-sv-rSE/strings.xml index fe83b998e..d0642166d 100644 --- a/patches/src/main/resources/addresources/values-sv-rSE/strings.xml +++ b/patches/src/main/resources/addresources/values-sv-rSE/strings.xml @@ -621,6 +621,10 @@ Justera volymen genom att svepa vertikalt till höger på skärmen" Dölj Klipp Knappen Klipp är dold Knappen Klipp visas + + Dölj Butik + Knappen Butik är dold + Knappen Butik visas Dölj Spara Knappen Spara är dold @@ -1472,7 +1476,7 @@ Om du aktiverar detta kan högre videokvaliteter låsas upp" Använder ursprungligt ljudspråk Använder standardljud - Om du vill använda den här funktionen ändrar du \"Förfalska videoströmmar\" till iOS TV + Om du vill använda den här funktionen ändrar du \"Förfalska videoströmmar\" till valfri klient utom Android Studio diff --git a/patches/src/main/resources/addresources/values-sw-rKE/strings.xml b/patches/src/main/resources/addresources/values-sw-rKE/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-sw-rKE/strings.xml +++ b/patches/src/main/resources/addresources/values-sw-rKE/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-ta-rIN/strings.xml b/patches/src/main/resources/addresources/values-ta-rIN/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-ta-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-ta-rIN/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-te-rIN/strings.xml b/patches/src/main/resources/addresources/values-te-rIN/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-te-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-te-rIN/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-th-rTH/strings.xml b/patches/src/main/resources/addresources/values-th-rTH/strings.xml index 5f5039e94..189784fb2 100644 --- a/patches/src/main/resources/addresources/values-th-rTH/strings.xml +++ b/patches/src/main/resources/addresources/values-th-rTH/strings.xml @@ -619,6 +619,10 @@ Second \"item\" text" ซ่อนคลิป ปุ่มคลิปถูกซ่อน ปุ่มคลิปถูกแสดง + + ซ่อนร้านค้า + ปุ่มร้านค้าถูกซ่อน + ปุ่มร้านค้าถูกแสดง ซ่อนบันทึก ปุ่มบันทึกถูกซ่อน @@ -1475,7 +1479,7 @@ User id ของคุณเหมือนกับรหัสผ่าน กำลังใช้ภาษาเสียงต้นฉบับ กำลังใช้ออดิโอเริ่มต้น - หากต้องการใช้คุณสมบัตินี้ ให้เปลี่ยน \'ปลอมแปลงสตรีมวิดีโอ\' เป็น iOS TV + หากต้องการใช้คุณสมบัตินี้ ให้เปลี่ยน \'Spoof video streams\' เป็นไคลเอ็นต์อื่น ๆ ยกเว้น Android Studio diff --git a/patches/src/main/resources/addresources/values-tr-rTR/strings.xml b/patches/src/main/resources/addresources/values-tr-rTR/strings.xml index f22cbc4e6..726beeda2 100644 --- a/patches/src/main/resources/addresources/values-tr-rTR/strings.xml +++ b/patches/src/main/resources/addresources/values-tr-rTR/strings.xml @@ -621,6 +621,10 @@ Ekranın sağ tarafında dikey olarak kaydırarak sesi ayarlayın" Klip\'i gizle Klip düğmesi gizli Klip düğmesi görünür + + Alışverişi gizle + Alışveriş düğmesi gizli + Alışveriş düğmesi görünür Kaydet\'i Gizle Kaydet düğmesi gizli @@ -1480,7 +1484,7 @@ Bunu etkinleştirmek daha yüksek video kalitelerini açabilir" Orijinal ses dili kullanılıyor Varsayılan ses kullanılıyor - Bu özelliği kullanmak için \'Video akışlarını taklit et\' ayarını iOS TV olarak değiştirin + Bu özelliği kullanmak için \'Video akışlarını taklit et\' ayarını Android Studio dışındaki herhangi bir istemciye değiştirin diff --git a/patches/src/main/resources/addresources/values-uk-rUA/strings.xml b/patches/src/main/resources/addresources/values-uk-rUA/strings.xml index 7dcc12780..11baf5759 100644 --- a/patches/src/main/resources/addresources/values-uk-rUA/strings.xml +++ b/patches/src/main/resources/addresources/values-uk-rUA/strings.xml @@ -621,6 +621,10 @@ Second \"item\" text" Приховати \"Створити кліп\" Кнопку \"Створити кліп\" приховано Кнопка \"Створити кліп\" показується + + Приховати \"Покупки\" + Кнопку \"Покупки\" приховано + Кнопка \"Покупки\" показується Приховати \"Зберегти\" Кнопку \"Зберегти\" приховано @@ -1472,7 +1476,7 @@ Second \"item\" text" Використовується оригінальна мова звукової доріжки Використовується стандартна (регіональна) мова звукової доріжки - Щоб використовувати цю функцію, змініть клієнт \"Підробки відеопотоків\" на iOS TV + Щоб використовувати цю функцію, змініть клієнт \"Підробки відеопотоків\" на будь-який клієнт, окрім Android Studio @@ -1559,7 +1563,7 @@ Second \"item\" text" Тип клієнта приховано у вікні \"Статистика для сисадмінів\" Мова звукової доріжки - Щоб вибрати певну аудіомову, вимкніть \"Примусово використовувати оригінальну аудіомову\" + Щоб вибрати певну звукову доріжку, вимкніть \"Примусово оригінальна мова звукової доріжки\" diff --git a/patches/src/main/resources/addresources/values-ur-rIN/strings.xml b/patches/src/main/resources/addresources/values-ur-rIN/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-ur-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-ur-rIN/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-uz-rUZ/strings.xml b/patches/src/main/resources/addresources/values-uz-rUZ/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-uz-rUZ/strings.xml +++ b/patches/src/main/resources/addresources/values-uz-rUZ/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values-vi-rVN/strings.xml b/patches/src/main/resources/addresources/values-vi-rVN/strings.xml index 6f8d28935..4cea6ef05 100644 --- a/patches/src/main/resources/addresources/values-vi-rVN/strings.xml +++ b/patches/src/main/resources/addresources/values-vi-rVN/strings.xml @@ -621,6 +621,10 @@ Vui lòng kiểm tra lại tên gói và đảm bảo ứng dụng đã được Ẩn Tạo đoạn video Nút tạo đoạn video đã bị ẩn Nút tạo đoạn video được hiển thị + + Ẩn Cửa hàng + Nút Cửa hàng đã bị ẩn + Nút Cửa hàng được hiển thị Ẩn Lưu Nút Lưu đã bị ẩn @@ -1479,7 +1483,7 @@ Bật tính năng này có thể mở khóa chất lượng video cao hơn"Đang dùng ngôn ngữ âm thanh gốc Đang dùng âm thanh mặc định - Để dùng tính năng này, hãy đổi \'Giả mạo luồng video\' thành iOS TV + Để dùng tính năng này, hãy đổi \'Giả mạo luồng video\' thành bất kỳ ứng dụng khách nào ngoại trừ Android Studio diff --git a/patches/src/main/resources/addresources/values-zh-rCN/strings.xml b/patches/src/main/resources/addresources/values-zh-rCN/strings.xml index b0d692b7b..392bc2024 100644 --- a/patches/src/main/resources/addresources/values-zh-rCN/strings.xml +++ b/patches/src/main/resources/addresources/values-zh-rCN/strings.xml @@ -621,6 +621,10 @@ Second \"item\" text" 隐藏「剪辑」按钮 剪辑按钮已隐藏 剪辑按钮已显示 + + 隐藏购物 + 购物按钮已隐藏 + 购物按钮已显示 隐藏保存 保存按钮已隐藏 @@ -1478,7 +1482,7 @@ Second \"item\" text" 使用原始音频语言 正在使用默认音频 - 要使用此功能,请将“欺骗视频流”更改为 iOS TV + 要使用此功能,请将“伪造视频流”更改为除 Android Studio 之外的任何客户端 diff --git a/patches/src/main/resources/addresources/values-zh-rTW/strings.xml b/patches/src/main/resources/addresources/values-zh-rTW/strings.xml index d67e8a8c9..36b19264b 100644 --- a/patches/src/main/resources/addresources/values-zh-rTW/strings.xml +++ b/patches/src/main/resources/addresources/values-zh-rTW/strings.xml @@ -621,6 +621,10 @@ Second \"item\" text" 隱藏剪輯片段 已隱藏「剪輯片段」按鈕 已顯示「剪輯片段」按鈕 + + 隱藏「商店」 + 「商店」按鈕已隱藏 + 「商店」按鈕已顯示 隱藏「儲存」 「儲存」按鈕已隱藏 @@ -1483,7 +1487,7 @@ Second \"item\" text" 正在使用原始音訊語言 使用預設音訊 - 如要使用這項功能,請將「偽裝視訊串流」變更為 iOS TV + 若要使用此功能,請將「偽造視訊串流」變更為 Android Studio 以外的任何用戶端 diff --git a/patches/src/main/resources/addresources/values-zu-rZA/strings.xml b/patches/src/main/resources/addresources/values-zu-rZA/strings.xml index 0e52a5c79..98a3659f6 100644 --- a/patches/src/main/resources/addresources/values-zu-rZA/strings.xml +++ b/patches/src/main/resources/addresources/values-zu-rZA/strings.xml @@ -100,6 +100,7 @@ Second \"item\" text" + diff --git a/patches/src/main/resources/addresources/values/arrays.xml b/patches/src/main/resources/addresources/values/arrays.xml index 0030646e2..77ac078ac 100644 --- a/patches/src/main/resources/addresources/values/arrays.xml +++ b/patches/src/main/resources/addresources/values/arrays.xml @@ -121,20 +121,34 @@ ZH + + Android VR visionOS + + + ANDROID_VR_1_43_32 + VISIONOS + + + + + + + Android VR + Android Studio + visionOS iPadOS ANDROID_VR_1_61_48 + ANDROID_CREATOR VISIONOS IPADOS - - @string/revanced_swipe_overlay_style_entry_1 diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml index 5a01d9e29..fe2eae128 100644 --- a/patches/src/main/resources/addresources/values/strings.xml +++ b/patches/src/main/resources/addresources/values/strings.xml @@ -684,6 +684,10 @@ Adjust volume by swiping vertically on the right side of the screen" Hide Clip Clip button is hidden Clip button is shown + + Hide Shop + Shop button is hidden + Shop button is shown Hide Save Save button is hidden @@ -1557,7 +1561,7 @@ Enabling this can unlock higher video qualities" Using original audio language Using default audio - To use this feature, change \'Spoof video streams\' to iOS TV + To use this feature, change \'Spoof video streams\' to any client except Android Studio