diff --git a/CHANGELOG.md b/CHANGELOG.md index ed2a45bb1..916435557 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,38 @@ +# [5.22.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.22.0-dev.3...v5.22.0-dev.4) (2025-04-30) + + +### Bug Fixes + +* **YouTube - Hide layout components:** Hide new type of community posts ([#4888](https://github.com/ReVanced/revanced-patches/issues/4888)) ([f0c9c35](https://github.com/ReVanced/revanced-patches/commit/f0c9c35778ab43a99149ee5ad0ccfd8aeb09f638)) +* **YouTube - Hide Shorts components:** Hide action buttons A/B button layout ([#4889](https://github.com/ReVanced/revanced-patches/issues/4889)) ([9dcd3d3](https://github.com/ReVanced/revanced-patches/commit/9dcd3d35dddf019547ab6ce431bac7a5a8a4c291)) + +# [5.22.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.22.0-dev.2...v5.22.0-dev.3) (2025-04-29) + + +### Features + +* **YouTube - GmsCore support:** Show troubleshooting in app text if the user recently changed their account details ([#4879](https://github.com/ReVanced/revanced-patches/issues/4879)) ([ab4bdc8](https://github.com/ReVanced/revanced-patches/commit/ab4bdc8a2519cee15f79bf95d89e7ea56ea464ee)) + +# [5.22.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.22.0-dev.1...v5.22.0-dev.2) (2025-04-27) + + +### Bug Fixes + +* **YouTube - Shorts autoplay:** Fix autoplay with YT 20.12 ([06b35b2](https://github.com/ReVanced/revanced-patches/commit/06b35b2a7d7371915881e8f430c32ce15fa224de)) + +# [5.22.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.21.0...v5.22.0-dev.1) (2025-04-26) + + +### Bug Fixes + +* **TikTok - Feed filter:** Hide ads in following feed ([#4844](https://github.com/ReVanced/revanced-patches/issues/4844)) ([c255ac1](https://github.com/ReVanced/revanced-patches/commit/c255ac18e0b2dcf917bd0559876be5a2a81023db)) +* **YouTube - Spoof app version:** Do not hide spoof version in general settings menu ([#4861](https://github.com/ReVanced/revanced-patches/issues/4861)) ([f459c3c](https://github.com/ReVanced/revanced-patches/commit/f459c3c7fae3a1b8addf3354488dcef9f95255cc)) + + +### Features + +* **TikTok - Feed Filter:** Remove TikTok Shop from feed. ([#4851](https://github.com/ReVanced/revanced-patches/issues/4851)) ([f198bec](https://github.com/ReVanced/revanced-patches/commit/f198bece653e3e1adf083129dedb77c1d1a633d7)) + # [5.21.0](https://github.com/ReVanced/revanced-patches/compare/v5.20.1...v5.21.0) (2025-04-25) diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/GmsCoreSupport.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/GmsCoreSupport.java index 83a3ca130..5debdd649 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/GmsCoreSupport.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/GmsCoreSupport.java @@ -20,9 +20,7 @@ import androidx.annotation.RequiresApi; import java.net.MalformedURLException; import java.net.URL; -/** - * @noinspection unused - */ +@SuppressWarnings("unused") public class GmsCoreSupport { private static final String PACKAGE_NAME_YOUTUBE = "com.google.android.youtube"; private static final String PACKAGE_NAME_YOUTUBE_MUSIC = "com.google.android.apps.youtube.music"; diff --git a/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/feedfilter/FeedItemsFilter.java b/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/feedfilter/FeedItemsFilter.java index e1e0add8e..6b361bb61 100644 --- a/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/feedfilter/FeedItemsFilter.java +++ b/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/feedfilter/FeedItemsFilter.java @@ -2,6 +2,7 @@ package app.revanced.extension.tiktok.feedfilter; import com.ss.android.ugc.aweme.feed.model.Aweme; import com.ss.android.ugc.aweme.feed.model.FeedItemList; +import com.ss.android.ugc.aweme.follow.presenter.FollowFeedList; import java.util.Iterator; import java.util.List; @@ -13,22 +14,41 @@ public final class FeedItemsFilter { new StoryFilter(), new ImageVideoFilter(), new ViewCountFilter(), - new LikeCountFilter() + new LikeCountFilter(), + new ShopFilter() ); public static void filter(FeedItemList feedItemList) { - Iterator feedItemListIterator = feedItemList.items.iterator(); - while (feedItemListIterator.hasNext()) { - Aweme item = feedItemListIterator.next(); - if (item == null) continue; + filterFeedList(feedItemList.items, item -> item); + } - for (IFilter filter : FILTERS) { - boolean enabled = filter.getEnabled(); - if (enabled && filter.getFiltered(item)) { - feedItemListIterator.remove(); - break; - } + public static void filter(FollowFeedList followFeedList) { + filterFeedList(followFeedList.mItems, feed -> (feed != null) ? feed.aweme : null); + } + + private static void filterFeedList(List list, AwemeExtractor extractor) { + // Could be simplified with removeIf() but requires Android 7.0+ while TikTok supports 4.0+. + Iterator iterator = list.iterator(); + while (iterator.hasNext()) { + T container = iterator.next(); + Aweme item = extractor.extract(container); + if (item != null && shouldFilter(item)) { + iterator.remove(); } } } -} + + private static boolean shouldFilter(Aweme item) { + for (IFilter filter : FILTERS) { + if (filter.getEnabled() && filter.getFiltered(item)) { + return true; + } + } + return false; + } + + @FunctionalInterface + interface AwemeExtractor { + Aweme extract(T source); + } +} \ No newline at end of file diff --git a/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/feedfilter/ShopFilter.java b/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/feedfilter/ShopFilter.java new file mode 100644 index 000000000..f134dc1bd --- /dev/null +++ b/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/feedfilter/ShopFilter.java @@ -0,0 +1,17 @@ +package app.revanced.extension.tiktok.feedfilter; + +import app.revanced.extension.tiktok.settings.Settings; +import com.ss.android.ugc.aweme.feed.model.Aweme; + +public class ShopFilter implements IFilter { + private static final String SHOP_INFO = "placeholder_product_id"; + @Override + public boolean getEnabled() { + return Settings.HIDE_SHOP.get(); + } + + @Override + public boolean getFiltered(Aweme item) { + return item.getShareUrl().contains(SHOP_INFO); + } +} diff --git a/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/settings/Settings.java b/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/settings/Settings.java index 58e3df369..3af58c5f3 100644 --- a/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/settings/Settings.java +++ b/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/settings/Settings.java @@ -11,6 +11,7 @@ import app.revanced.extension.shared.settings.StringSetting; public class Settings extends BaseSettings { public static final BooleanSetting REMOVE_ADS = new BooleanSetting("remove_ads", TRUE, true); public static final BooleanSetting HIDE_LIVE = new BooleanSetting("hide_live", FALSE, true); + public static final BooleanSetting HIDE_SHOP = new BooleanSetting("hide_shop", FALSE, true); public static final BooleanSetting HIDE_STORY = new BooleanSetting("hide_story", FALSE, true); public static final BooleanSetting HIDE_IMAGE = new BooleanSetting("hide_image", FALSE, true); public static final StringSetting MIN_MAX_VIEWS = new StringSetting("min_max_views", "0-" + Long.MAX_VALUE, true); diff --git a/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/settings/preference/categories/FeedFilterPreferenceCategory.java b/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/settings/preference/categories/FeedFilterPreferenceCategory.java index bcd56bc7e..938d20e63 100644 --- a/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/settings/preference/categories/FeedFilterPreferenceCategory.java +++ b/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/settings/preference/categories/FeedFilterPreferenceCategory.java @@ -26,6 +26,11 @@ public class FeedFilterPreferenceCategory extends ConditionalPreferenceCategory "Remove feed ads", "Remove ads from feed.", Settings.REMOVE_ADS )); + addPreference(new TogglePreference( + context, + "Hide TikTok Shop", "Hide TikTok shop from feed.", + Settings.HIDE_SHOP + )); addPreference(new TogglePreference( context, "Hide livestreams", "Hide livestreams from feed.", diff --git a/extensions/tiktok/stub/src/main/java/com/ss/android/ugc/aweme/feed/model/Aweme.java b/extensions/tiktok/stub/src/main/java/com/ss/android/ugc/aweme/feed/model/Aweme.java index e1ea9af6c..a950b0905 100644 --- a/extensions/tiktok/stub/src/main/java/com/ss/android/ugc/aweme/feed/model/Aweme.java +++ b/extensions/tiktok/stub/src/main/java/com/ss/android/ugc/aweme/feed/model/Aweme.java @@ -33,4 +33,8 @@ public class Aweme { public AwemeStatistics getStatistics() { throw new UnsupportedOperationException("Stub"); } + + public String getShareUrl() { + throw new UnsupportedOperationException("Stub"); + } } diff --git a/extensions/tiktok/stub/src/main/java/com/ss/android/ugc/aweme/follow/presenter/FollowFeed.java b/extensions/tiktok/stub/src/main/java/com/ss/android/ugc/aweme/follow/presenter/FollowFeed.java new file mode 100644 index 000000000..833b6d21d --- /dev/null +++ b/extensions/tiktok/stub/src/main/java/com/ss/android/ugc/aweme/follow/presenter/FollowFeed.java @@ -0,0 +1,8 @@ +package com.ss.android.ugc.aweme.follow.presenter; + +import com.ss.android.ugc.aweme.feed.model.Aweme; + +//Dummy class +public class FollowFeed { + public Aweme aweme; +} diff --git a/extensions/tiktok/stub/src/main/java/com/ss/android/ugc/aweme/follow/presenter/FollowFeedList.java b/extensions/tiktok/stub/src/main/java/com/ss/android/ugc/aweme/follow/presenter/FollowFeedList.java new file mode 100644 index 000000000..d8995ca36 --- /dev/null +++ b/extensions/tiktok/stub/src/main/java/com/ss/android/ugc/aweme/follow/presenter/FollowFeedList.java @@ -0,0 +1,8 @@ +package com.ss.android.ugc.aweme.follow.presenter; + +import java.util.List; + +//Dummy class +public class FollowFeedList { + public List mItems; +} diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/ThemeHelper.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/ThemeHelper.java index 80b9b583c..f541b2347 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/ThemeHelper.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/ThemeHelper.java @@ -2,6 +2,8 @@ package app.revanced.extension.youtube; import android.app.Activity; import android.graphics.Color; +import android.os.Build; +import android.view.Window; import androidx.annotation.Nullable; @@ -102,4 +104,21 @@ public class ThemeHelper { return Utils.getColorFromString(colorName); } + + /** + * Sets the system navigation bar color for the activity. + * Applies the background color obtained from {@link #getBackgroundColor()} to the navigation bar. + * For Android 10 (API 29) and above, enforces navigation bar contrast to ensure visibility. + */ + public static void setNavigationBarColor(@Nullable Window window) { + if (window == null) { + Logger.printDebug(() -> "Cannot set navigation bar color, window is null"); + return; + } + + window.setNavigationBarColor(getBackgroundColor()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + window.setNavigationBarContrastEnforced(true); + } + } } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/AccountCredentialsInvalidTextPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/AccountCredentialsInvalidTextPatch.java new file mode 100644 index 000000000..4620f0e50 --- /dev/null +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/AccountCredentialsInvalidTextPatch.java @@ -0,0 +1,28 @@ +package app.revanced.extension.youtube.patches; + +import static app.revanced.extension.shared.StringRef.sf; + +import app.revanced.extension.shared.Logger; +import app.revanced.extension.shared.Utils; + +@SuppressWarnings("unused") +public class AccountCredentialsInvalidTextPatch { + + /** + * Injection point. + */ + public static String getOfflineNetworkErrorString(String original) { + try { + if (Utils.isNetworkConnected()) { + Logger.printDebug(() -> "Network appears to be online, but app is showing offline error"); + return '\n' + sf("microg_offline_account_login_error").toString(); + } + + Logger.printDebug(() -> "Network is offline"); + } catch (Exception ex) { + Logger.printException(() -> "getOfflineNetworkErrorString failure", ex); + } + + return original; + } +} diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ShortsAutoplayPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ShortsAutoplayPatch.java index bd650b243..9e5aff20b 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ShortsAutoplayPatch.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/ShortsAutoplayPatch.java @@ -2,6 +2,8 @@ package app.revanced.extension.youtube.patches; import android.app.Activity; +import androidx.annotation.Nullable; + import java.lang.ref.WeakReference; import java.util.Objects; @@ -76,7 +78,7 @@ public class ShortsAutoplayPatch { /** * Injection point. */ - public static Enum changeShortsRepeatBehavior(Enum original) { + public static Enum changeShortsRepeatBehavior(@Nullable Enum original) { try { final boolean autoplay; @@ -98,17 +100,35 @@ public class ShortsAutoplayPatch { : ShortsLoopBehavior.REPEAT; if (behavior.ytEnumValue != null) { - Logger.printDebug(() -> behavior.ytEnumValue == original - ? "Changing Shorts repeat behavior from: " + original.name() + " to: " + behavior.ytEnumValue - : "Behavior setting is same as original. Using original: " + original.name() - ); + Logger.printDebug(() -> { + String name = (original == null ? "unknown (null)" : original.name()); + return behavior == original + ? "Behavior setting is same as original. Using original: " + name + : "Changing Shorts repeat behavior from: " + name + " to: " + behavior.name(); + }); return behavior.ytEnumValue; } + + if (original == null) { + // Cannot return null, as null is used to indicate Short was auto played. + // Unpatched app replaces null with unknown enum type (appears to fix for bad api data). + Enum unknown = ShortsLoopBehavior.UNKNOWN.ytEnumValue; + Logger.printDebug(() -> "Original is null, returning: " + unknown.name()); + return unknown; + } } catch (Exception ex) { - Logger.printException(() -> "changeShortsRepeatState failure", ex); + Logger.printException(() -> "changeShortsRepeatBehavior failure", ex); } return original; } + + + /** + * Injection point. + */ + public static boolean isAutoPlay(Enum original) { + return ShortsLoopBehavior.SINGLE_PLAY.ytEnumValue == original; + } } 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 a82459c28..5f6bffd1a 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 @@ -75,7 +75,10 @@ public final class LayoutComponentsFilter extends Filter { "post_base_wrapper_slim.eml", "poll_post_root.eml", "videos_post_root.eml", - "post_shelf_slim.eml" + "post_shelf_slim.eml", + "videos_post_responsive_root.eml", + "text_post_responsive_root.eml", + "poll_post_responsive_root.eml" ); final var communityGuidelines = new StringFilterGroup( diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/ShortsFilter.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/ShortsFilter.java index 3a57fb836..b647d48c4 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/ShortsFilter.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/ShortsFilter.java @@ -1,6 +1,5 @@ package app.revanced.extension.youtube.patches.components; -import static app.revanced.extension.shared.Utils.hideViewUnderCondition; import static app.revanced.extension.youtube.shared.NavigationBar.NavigationButton; import android.view.View; @@ -52,6 +51,7 @@ public final class ShortsFilter extends Filter { private final StringFilterGroup suggestedAction; private final ByteArrayFilterGroupList suggestedActionsGroupList = new ByteArrayFilterGroupList(); + private final StringFilterGroup shortsActionBar; private final StringFilterGroup actionButton; private final ByteArrayFilterGroupList videoActionButtonGroupList = new ByteArrayFilterGroupList(); @@ -141,6 +141,16 @@ public final class ShortsFilter extends Filter { "like_fountain.eml" ); + StringFilterGroup likeButton = new StringFilterGroup( + Settings.HIDE_SHORTS_LIKE_BUTTON, + "shorts_like_button.eml" + ); + + StringFilterGroup dislikeButton = new StringFilterGroup( + Settings.HIDE_SHORTS_DISLIKE_BUTTON, + "shorts_dislike_button.eml" + ); + joinButton = new StringFilterGroup( Settings.HIDE_SHORTS_JOIN_BUTTON, "sponsor_button" @@ -156,9 +166,15 @@ public final class ShortsFilter extends Filter { "reel_player_disclosure.eml" ); + shortsActionBar = new StringFilterGroup( + null, + "shorts_action_bar.eml" + ); + actionButton = new StringFilterGroup( null, - "shorts_video_action_button.eml" + // Can be simply 'button.eml' or 'shorts_video_action_button.eml' + "button.eml" ); suggestedAction = new StringFilterGroup( @@ -167,27 +183,16 @@ public final class ShortsFilter extends Filter { ); addPathCallbacks( - shortsCompactFeedVideoPath, suggestedAction, actionButton, joinButton, subscribeButton, - paidPromotionButton, pausedOverlayButtons, channelBar, fullVideoLinkLabel, videoTitle, - reelSoundMetadata, soundButton, infoPanel, stickers, likeFountain + shortsCompactFeedVideoPath, joinButton, subscribeButton, paidPromotionButton, + shortsActionBar, suggestedAction, pausedOverlayButtons, channelBar, + fullVideoLinkLabel, videoTitle, reelSoundMetadata, soundButton, infoPanel, + stickers, likeFountain, likeButton, dislikeButton ); // - // Action buttons + // All other action buttons. // videoActionButtonGroupList.addAll( - // This also appears as the path item 'shorts_like_button.eml' - new ByteArrayFilterGroup( - Settings.HIDE_SHORTS_LIKE_BUTTON, - "reel_like_button", - "reel_like_toggled_button" - ), - // This also appears as the path item 'shorts_dislike_button.eml' - new ByteArrayFilterGroup( - Settings.HIDE_SHORTS_DISLIKE_BUTTON, - "reel_dislike_button", - "reel_dislike_toggled_button" - ), new ByteArrayFilterGroup( Settings.HIDE_SHORTS_COMMENTS_BUTTON, "reel_comment_button" @@ -286,9 +291,11 @@ public final class ShortsFilter extends Filter { return false; } - // Video action buttons (like, dislike, comment, share, remix) have the same path. - if (matchedGroup == actionButton) { - if (videoActionButtonGroupList.check(protobufBufferArray).isFiltered()) { + // Video action buttons (comment, share, remix) have the same path. + // Like and dislike are separate path filters and don't require buffer searching. + if (matchedGroup == shortsActionBar) { + if (actionButton.check(path).isFiltered() + && videoActionButtonGroupList.check(protobufBufferArray).isFiltered()) { return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex); } return false; @@ -392,37 +399,6 @@ public final class ShortsFilter extends Filter { return original; } - // region Hide the buttons in older versions of YouTube. New versions use Litho. - - public static void hideLikeButton(final View likeButtonView) { - // Cannot set the visibility to gone for like/dislike, - // as some other unknown YT code also sets the visibility after this hook. - // - // Setting the view to 0dp works, but that leaves a blank space where - // the button was (only relevant for dislikes button). - // - // Instead remove the view from the parent. - Utils.hideViewByRemovingFromParentUnderCondition(Settings.HIDE_SHORTS_LIKE_BUTTON, likeButtonView); - } - - public static void hideDislikeButton(final View dislikeButtonView) { - Utils.hideViewByRemovingFromParentUnderCondition(Settings.HIDE_SHORTS_DISLIKE_BUTTON, dislikeButtonView); - } - - public static void hideShortsCommentsButton(final View commentsButtonView) { - hideViewUnderCondition(Settings.HIDE_SHORTS_COMMENTS_BUTTON, commentsButtonView); - } - - public static void hideShortsRemixButton(final View remixButtonView) { - hideViewUnderCondition(Settings.HIDE_SHORTS_REMIX_BUTTON, remixButtonView); - } - - public static void hideShortsShareButton(final View shareButtonView) { - hideViewUnderCondition(Settings.HIDE_SHORTS_SHARE_BUTTON, shareButtonView); - } - - // endregion - public static void setNavigationBar(PivotBar view) { pivotBarRef = new WeakReference<>(view); } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/LicenseActivityHook.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/LicenseActivityHook.java index 294bc079e..b9c193d1a 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/LicenseActivityHook.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/LicenseActivityHook.java @@ -84,6 +84,7 @@ public class LicenseActivityHook { public static void initialize(Activity licenseActivity) { try { ThemeHelper.setActivityTheme(licenseActivity); + ThemeHelper.setNavigationBarColor(licenseActivity.getWindow()); licenseActivity.setContentView(getResourceIdentifier( "revanced_settings_with_toolbar", "layout")); @@ -126,7 +127,7 @@ public class LicenseActivityHook { // This is required to fix submenu title alignment issue with Android ASOP 15+ ViewGroup toolBarParent = activity.findViewById( getResourceIdentifier("revanced_toolbar_parent", "id")); - ViewGroup dummyToolbar = Utils.getChildViewByResourceName(toolBarParent,"revanced_toolbar"); + ViewGroup dummyToolbar = Utils.getChildViewByResourceName(toolBarParent, "revanced_toolbar"); toolbarLayoutParams = dummyToolbar.getLayoutParams(); toolBarParent.removeView(dummyToolbar); @@ -149,5 +150,4 @@ public class LicenseActivityHook { toolBarParent.addView(toolbar, 0); } - -} +} \ No newline at end of file diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ReVancedPreferenceFragment.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ReVancedPreferenceFragment.java index a972a4198..a2b6dbbfb 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ReVancedPreferenceFragment.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ReVancedPreferenceFragment.java @@ -138,6 +138,9 @@ public class ReVancedPreferenceFragment extends AbstractPreferenceFragment { .findViewById(android.R.id.content) .getParent(); + // Fix the system navigation bar color for submenus. + ThemeHelper.setNavigationBarColor(preferenceScreenDialog.getWindow()); + // Fix edge-to-edge screen with Android 15 and YT 19.45+ // https://developer.android.com/develop/ui/views/layout/edge-to-edge#system-bars-insets if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { diff --git a/gradle.properties b/gradle.properties index ac4e53dcd..c43b74be5 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.21.0 +version = 5.22.0-dev.4 diff --git a/patches/api/patches.api b/patches/api/patches.api index 72c53e50a..7d32bec85 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -642,14 +642,12 @@ public abstract class app/revanced/patches/shared/misc/settings/preference/BaseP public static final field Companion Lapp/revanced/patches/shared/misc/settings/preference/BasePreference$Companion; public fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V public synthetic fun (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public fun equals (Ljava/lang/Object;)Z public final fun getIcon ()Ljava/lang/String; public final fun getKey ()Ljava/lang/String; public final fun getLayout ()Ljava/lang/String; public final fun getSummaryKey ()Ljava/lang/String; public final fun getTag ()Ljava/lang/String; public final fun getTitleKey ()Ljava/lang/String; - public fun hashCode ()I public fun serialize (Lorg/w3c/dom/Document;Lkotlin/jvm/functions/Function1;)Lorg/w3c/dom/Element; } diff --git a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreference.kt b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreference.kt index 5428b3983..70542b9b9 100644 --- a/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreference.kt +++ b/patches/src/main/kotlin/app/revanced/patches/shared/misc/settings/preference/BasePreference.kt @@ -51,26 +51,6 @@ abstract class BasePreference( layout?.let { setAttribute("android:layout", layout) } } - override fun hashCode(): Int { - var result = key?.hashCode() ?: 0 - result = 31 * result + titleKey.hashCode() - result = 31 * result + tag.hashCode() - return result - } - - override fun equals(other: Any?): Boolean { - if (this === other) return true - if (javaClass != other?.javaClass) return false - - other as BasePreference - - if (key != other.key) return false - if (titleKey != other.titleKey) return false - if (tag != other.tag) return false - - return true - } - companion object { fun Element.addSummary(summaryKey: String, summaryType: SummaryType = SummaryType.DEFAULT) = setAttribute("android:${summaryType.type}", "@string/$summaryKey") diff --git a/patches/src/main/kotlin/app/revanced/patches/tiktok/feedfilter/FeedFilterPatch.kt b/patches/src/main/kotlin/app/revanced/patches/tiktok/feedfilter/FeedFilterPatch.kt index 9ea783f95..0f1227e4d 100644 --- a/patches/src/main/kotlin/app/revanced/patches/tiktok/feedfilter/FeedFilterPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/tiktok/feedfilter/FeedFilterPatch.kt @@ -9,6 +9,8 @@ import app.revanced.patches.tiktok.misc.settings.settingsStatusLoadFingerprint import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/tiktok/feedfilter/FeedItemsFilter;" + @Suppress("unused") val feedFilterPatch = bytecodePatch( name = "Feed filter", @@ -26,14 +28,15 @@ val feedFilterPatch = bytecodePatch( ) execute { - feedApiServiceLIZFingerprint.method.apply { - val returnFeedItemInstruction = instructions.first { it.opcode == Opcode.RETURN_OBJECT } - val feedItemsRegister = (returnFeedItemInstruction as OneRegisterInstruction).registerA - - addInstruction( - returnFeedItemInstruction.location.index, - "invoke-static { v$feedItemsRegister }, " + - "Lapp/revanced/extension/tiktok/feedfilter/FeedItemsFilter;->filter(Lcom/ss/android/ugc/aweme/feed/model/FeedItemList;)V", + arrayOf( + feedApiServiceLIZFingerprint.method to "$EXTENSION_CLASS_DESCRIPTOR->filter(Lcom/ss/android/ugc/aweme/feed/model/FeedItemList;)V", + followFeedFingerprint.method to "$EXTENSION_CLASS_DESCRIPTOR->filter(Lcom/ss/android/ugc/aweme/follow/presenter/FollowFeedList;)V" + ).forEach { (method, filterSignature) -> + val returnInstruction = method.instructions.first { it.opcode == Opcode.RETURN_OBJECT } + val register = (returnInstruction as OneRegisterInstruction).registerA + method.addInstruction( + returnInstruction.location.index, + "invoke-static { v$register }, $filterSignature" ) } @@ -42,4 +45,5 @@ val feedFilterPatch = bytecodePatch( "invoke-static {}, Lapp/revanced/extension/tiktok/settings/SettingsStatus;->enableFeedFilter()V", ) } + } diff --git a/patches/src/main/kotlin/app/revanced/patches/tiktok/feedfilter/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/tiktok/feedfilter/Fingerprints.kt index 4f899661e..f85dd2d07 100644 --- a/patches/src/main/kotlin/app/revanced/patches/tiktok/feedfilter/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/tiktok/feedfilter/Fingerprints.kt @@ -1,9 +1,22 @@ package app.revanced.patches.tiktok.feedfilter import app.revanced.patcher.fingerprint +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode internal val feedApiServiceLIZFingerprint = fingerprint { custom { method, classDef -> classDef.endsWith("/FeedApiService;") && method.name == "fetchFeedList" } } + +internal val followFeedFingerprint = fingerprint { + accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC) + returns("Lcom/ss/android/ugc/aweme/follow/presenter/FollowFeedList;") + strings("getFollowFeedList") + opcodes( + Opcode.INVOKE_INTERFACE_RANGE, + Opcode.MOVE_RESULT_OBJECT, + Opcode.INVOKE_INTERFACE + ) +} \ No newline at end of file diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/Fingerprints.kt index 7d563f3c7..f3a6244c3 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/Fingerprints.kt @@ -25,11 +25,6 @@ internal val shortsBottomBarContainerFingerprint = fingerprint { literal { bottomBarContainer } } -internal val createShortsButtonsFingerprint = fingerprint { - returns("V") - literal { reelPlayerRightCellButtonHeight } -} - internal val renderBottomNavigationBarFingerprint = fingerprint { returns("V") parameters("Ljava/lang/String;") diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/HideShortsComponentsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/HideShortsComponentsPatch.kt index 37fc633d5..49e119357 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/HideShortsComponentsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/HideShortsComponentsPatch.kt @@ -6,7 +6,6 @@ import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.booleanOption import app.revanced.patcher.patch.bytecodePatch import app.revanced.patcher.patch.resourcePatch -import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.all.misc.resources.addResources import app.revanced.patches.all.misc.resources.addResourcesPatch import app.revanced.patches.shared.misc.mapping.get @@ -22,14 +21,14 @@ import app.revanced.patches.youtube.misc.playservice.is_19_41_or_greater import app.revanced.patches.youtube.misc.playservice.versionCheckPatch import app.revanced.patches.youtube.misc.settings.PreferenceScreen import app.revanced.patches.youtube.misc.settings.settingsPatch -import app.revanced.util.* -import com.android.tools.smali.dexlib2.Opcode -import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction +import app.revanced.util.findElementByAttributeValueOrThrow +import app.revanced.util.forEachLiteralValueInstruction +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstLiteralInstruction import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.reference.MethodReference -internal var reelPlayerRightCellButtonHeight = -1L - private set internal var bottomBarContainer = -1L private set internal var reelPlayerRightPivotV2Size = -1L @@ -137,11 +136,6 @@ private val hideShortsComponentsResourcePatch = resourcePatch { } } - reelPlayerRightCellButtonHeight = resourceMappings[ - "dimen", - "reel_player_right_cell_button_height", - ] - bottomBarContainer = resourceMappings[ "id", "bottom_bar_container", @@ -186,15 +180,6 @@ val hideShortsComponentsPatch = bytecodePatch( hideShortsWidgetOption() execute { - // region Hide the Shorts buttons in older versions of YouTube. - - // Some Shorts buttons are views, hide them by setting their visibility to GONE. - ShortsButtons.entries.forEach { button -> button.injectHideCall(createShortsButtonsFingerprint.method) } - - // endregion - - // region Hide the Shorts buttons in newer versions of YouTube. - addLithoFilter(FILTER_CLASS_DESCRIPTOR) forEachLiteralValueInstruction( @@ -211,7 +196,7 @@ val hideShortsComponentsPatch = bytecodePatch( """ invoke-static { v$sizeRegister }, $FILTER_CLASS_DESCRIPTOR->getSoundButtonSize(I)I move-result v$sizeRegister - """, + """ ) } @@ -261,31 +246,10 @@ val hideShortsComponentsPatch = bytecodePatch( """ invoke-static { v$heightRegister }, $FILTER_CLASS_DESCRIPTOR->getNavigationBarHeight(I)I move-result v$heightRegister - """, + """ ) } // endregion } } - -private enum class ShortsButtons(private val resourceName: String, private val methodName: String) { - LIKE("reel_dyn_like", "hideLikeButton"), - DISLIKE("reel_dyn_dislike", "hideDislikeButton"), - COMMENTS("reel_dyn_comment", "hideShortsCommentsButton"), - REMIX("reel_dyn_remix", "hideShortsRemixButton"), - SHARE("reel_dyn_share", "hideShortsShareButton"), - ; - - fun injectHideCall(method: MutableMethod) { - val referencedIndex = method.indexOfFirstResourceIdOrThrow(resourceName) - - val setIdIndex = method.indexOfFirstInstructionOrThrow(referencedIndex) { - opcode == Opcode.INVOKE_VIRTUAL && getReference()?.name == "setId" - } - - val viewRegister = method.getInstruction(setIdIndex).registerC - - method.injectHideViewCall(setIdIndex + 1, viewRegister, FILTER_CLASS_DESCRIPTOR, methodName) - } -} diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/shortsautoplay/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/shortsautoplay/Fingerprints.kt index cd48868f5..045d75ca2 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/shortsautoplay/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/shortsautoplay/Fingerprints.kt @@ -1,8 +1,13 @@ package app.revanced.patches.youtube.layout.shortsautoplay import app.revanced.patcher.fingerprint +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.reference.FieldReference +import com.android.tools.smali.dexlib2.iface.reference.MethodReference internal val reelEnumConstructorFingerprint = fingerprint { accessFlags(AccessFlags.STATIC, AccessFlags.CONSTRUCTOR) @@ -20,3 +25,27 @@ internal val reelPlaybackRepeatFingerprint = fingerprint { parameters("L") strings("YoutubePlayerState is in throwing an Error.") } + +internal val reelPlaybackFingerprint = fingerprint { + accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL) + returns("V") + parameters("J") + custom { method, _ -> + indexOfMilliSecondsInstruction(method) >= 0 && + indexOfInitializationInstruction(method) >= 0 + } +} + +private fun indexOfMilliSecondsInstruction(method: Method) = + method.indexOfFirstInstruction { + getReference()?.name == "MILLISECONDS" + } + +internal fun indexOfInitializationInstruction(method: Method) = + method.indexOfFirstInstruction { + val reference = getReference() + opcode == Opcode.INVOKE_DIRECT && + reference?.name == "" && + reference.parameterTypes.size == 3 && + reference.parameterTypes.firstOrNull() == "I" + } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/shortsautoplay/ShortsAutoplayPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/shortsautoplay/ShortsAutoplayPatch.kt index 67bb3c159..d95826f89 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/shortsautoplay/ShortsAutoplayPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/shortsautoplay/ShortsAutoplayPatch.kt @@ -2,21 +2,32 @@ package app.revanced.patches.youtube.layout.shortsautoplay import app.revanced.patcher.extensions.InstructionExtensions.addInstruction import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.bytecodePatch +import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable import app.revanced.patches.all.misc.resources.addResources import app.revanced.patches.shared.misc.mapping.resourceMappingPatch import app.revanced.patches.shared.misc.settings.preference.SwitchPreference import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch import app.revanced.patches.youtube.misc.playservice.is_19_34_or_greater +import app.revanced.patches.youtube.misc.playservice.is_20_09_or_greater import app.revanced.patches.youtube.misc.playservice.versionCheckPatch import app.revanced.patches.youtube.misc.settings.PreferenceScreen import app.revanced.patches.youtube.misc.settings.settingsPatch import app.revanced.patches.youtube.shared.mainActivityOnCreateFingerprint import app.revanced.util.findInstructionIndicesReversedOrThrow import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.reference.FieldReference import com.android.tools.smali.dexlib2.iface.reference.MethodReference +import com.android.tools.smali.dexlib2.immutable.ImmutableMethod +import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/youtube/patches/ShortsAutoplayPatch;" @@ -98,5 +109,84 @@ val shortsAutoplayPatch = bytecodePatch( ) } } + + // As of YouTube 20.09, Google has removed the code for 'Autoplay' and 'Pause' from this method. + // Manually restore the removed 'Autoplay' code. + if (is_20_09_or_greater) { + // Variable names are only a rough guess of what these methods do. + val userActionMethodIndex = indexOfInitializationInstruction(reelPlaybackFingerprint.method) + val userActionMethodReference = reelPlaybackFingerprint.method + .getInstruction(userActionMethodIndex).reference as MethodReference + val reelSequenceControllerMethodIndex = reelPlaybackFingerprint.method + .indexOfFirstInstructionOrThrow(userActionMethodIndex, Opcode.INVOKE_VIRTUAL) + val reelSequenceControllerMethodReference = reelPlaybackFingerprint.method + .getInstruction(reelSequenceControllerMethodIndex).reference as MethodReference + + reelPlaybackRepeatFingerprint.method.apply { + // Find the first call modified by extension code above. + val extensionReturnResultIndex = indexOfFirstInstructionOrThrow { + opcode == Opcode.INVOKE_STATIC && + getReference()?.definingClass == EXTENSION_CLASS_DESCRIPTOR + } + 1 + val enumRegister = getInstruction(extensionReturnResultIndex).registerA + val getReelSequenceControllerIndex = indexOfFirstInstructionOrThrow(extensionReturnResultIndex) { + val reference = getReference() + opcode == Opcode.IGET_OBJECT && + reference?.definingClass == definingClass && + reference.type == reelSequenceControllerMethodReference.definingClass + } + val getReelSequenceControllerReference = + getInstruction(getReelSequenceControllerIndex).reference + + // Add a helper method to avoid finding multiple free registers. + // If enum is autoplay then method performs autoplay and returns null, + // otherwise returns the same enum. + val helperClass = definingClass + val helperName = "patch_handleAutoPlay" + val helperReturnType = "Ljava/lang/Enum;" + val helperMethod = ImmutableMethod( + helperClass, + helperName, + listOf(ImmutableMethodParameter("Ljava/lang/Enum;", null, null)), + helperReturnType, + AccessFlags.PRIVATE.value, + null, + null, + MutableMethodImplementation(7), + ).toMutable().apply { + addInstructionsWithLabels( + 0, + """ + invoke-static { p1 }, $EXTENSION_CLASS_DESCRIPTOR->isAutoPlay(Ljava/lang/Enum;)Z + move-result v0 + if-eqz v0, :ignore + new-instance v0, ${userActionMethodReference.definingClass} + const/4 v1, 0x3 + const/4 v2, 0x0 + invoke-direct { v0, v1, v2, v2 }, $userActionMethodReference + iget-object v3, p0, $getReelSequenceControllerReference + invoke-virtual { v3, v0 }, $reelSequenceControllerMethodReference + const/4 v4, 0x0 + return-object v4 + :ignore + return-object p1 + """ + ) + } + reelPlaybackRepeatFingerprint.classDef.methods.add(helperMethod) + + addInstructionsWithLabels( + extensionReturnResultIndex + 1, + """ + invoke-direct { p0, v$enumRegister }, $helperClass->$helperName(Ljava/lang/Enum;)$helperReturnType + move-result-object v$enumRegister + if-nez v$enumRegister, :ignore + return-void # Autoplay was performed. + :ignore + nop + """ + ) + } + } } } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/SpoofAppVersionPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/SpoofAppVersionPatch.kt index 486bb398d..ee218d499 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/SpoofAppVersionPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/SpoofAppVersionPatch.kt @@ -73,7 +73,7 @@ val spoofAppVersionPatch = bytecodePatch( PreferenceScreen.GENERAL_LAYOUT.addPreferences( // Group the switch and list preference together, since General menu is sorted by name - // and the preferences can be scattered apart with non English langauges. + // and the preferences can be scattered apart with non English languages. PreferenceCategory( titleKey = null, sorting = Sorting.UNSORTED, @@ -122,16 +122,17 @@ val spoofAppVersionPatch = bytecodePatch( ) } - val insertIndex = spoofAppVersionFingerprint.patternMatch!!.startIndex + 1 - val buildOverrideNameRegister = - spoofAppVersionFingerprint.method.getInstruction(insertIndex - 1).registerA + spoofAppVersionFingerprint.apply { + val startIndex = patternMatch!!.startIndex + val buildOverrideNameRegister = method.getInstruction(startIndex).registerA - spoofAppVersionFingerprint.method.addInstructions( - insertIndex, - """ - invoke-static {v$buildOverrideNameRegister}, $EXTENSION_CLASS_DESCRIPTOR->getYouTubeVersionOverride(Ljava/lang/String;)Ljava/lang/String; - move-result-object v$buildOverrideNameRegister - """ - ) + method.addInstructions( + startIndex + 1, + """ + invoke-static {v$buildOverrideNameRegister}, $EXTENSION_CLASS_DESCRIPTOR->getYouTubeVersionOverride(Ljava/lang/String;)Ljava/lang/String; + move-result-object v$buildOverrideNameRegister + """ + ) + } } } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/gms/AccountCredentialsInvalidTextPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/gms/AccountCredentialsInvalidTextPatch.kt new file mode 100644 index 000000000..673fa240a --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/gms/AccountCredentialsInvalidTextPatch.kt @@ -0,0 +1,83 @@ +package app.revanced.patches.youtube.misc.gms + +import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.patch.bytecodePatch +import app.revanced.patcher.patch.resourcePatch +import app.revanced.patches.all.misc.resources.addResources +import app.revanced.patches.all.misc.resources.addResourcesPatch +import app.revanced.patches.shared.misc.mapping.get +import app.revanced.patches.shared.misc.mapping.resourceMappings +import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstructionOrThrow +import app.revanced.util.indexOfFirstLiteralInstructionOrThrow +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference + +private const val EXTENSION_CLASS_DESCRIPTOR = + "Lapp/revanced/extension/youtube/patches/AccountCredentialsInvalidTextPatch;" + +internal var ic_offline_no_content_upside_down = -1L + private set +internal var offline_no_content_body_text_not_offline_eligible = -1L + private set + +private val accountCredentialsInvalidTextResourcePatch = resourcePatch { + execute { + ic_offline_no_content_upside_down = resourceMappings[ + "drawable", + "ic_offline_no_content_upside_down" + ] + + offline_no_content_body_text_not_offline_eligible = resourceMappings[ + "string", + "offline_no_content_body_text_not_offline_eligible" + ] + } +} + +internal val accountCredentialsInvalidTextPatch = bytecodePatch { + dependsOn( + sharedExtensionPatch, + accountCredentialsInvalidTextResourcePatch, + addResourcesPatch + ) + + execute { + addResources("youtube", "misc.gms.accountCredentialsInvalidTextPatch") + + // If the user recently changed their account password, + // the app can show "You're offline. Check your internet connection." + // even when the internet is available. For this situation + // YouTube + MicroG shows an offline error message. + // + // Change the error text to inform the user to uninstall and reinstall MicroG. + // The user can also fix this by deleting the MicroG account but + // MicroG accounts look almost identical to Google device accounts + // and it's more foolproof to instead uninstall/reinstall. + arrayOf( + specificNetworkErrorViewControllerFingerprint, + loadingFrameLayoutControllerFingerprint + ).forEach { fingerprint -> + fingerprint.method.apply { + val resourceIndex = indexOfFirstLiteralInstructionOrThrow( + offline_no_content_body_text_not_offline_eligible + ) + val getStringIndex = indexOfFirstInstructionOrThrow(resourceIndex) { + val reference = getReference() + reference?.name == "getString" + } + val register = getInstruction(getStringIndex + 1).registerA + + addInstructions( + getStringIndex + 2, + """ + invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->getOfflineNetworkErrorString(Ljava/lang/String;)Ljava/lang/String; + move-result-object v$register + """ + ) + } + } + } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/gms/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/gms/Fingerprints.kt new file mode 100644 index 000000000..3f4a521df --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/gms/Fingerprints.kt @@ -0,0 +1,27 @@ +package app.revanced.patches.youtube.misc.gms + +import app.revanced.patcher.fingerprint +import app.revanced.util.containsLiteralInstruction +import com.android.tools.smali.dexlib2.AccessFlags + +internal val specificNetworkErrorViewControllerFingerprint = fingerprint { + accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL) + returns("V") + parameters() + custom { method, _ -> + method.containsLiteralInstruction(ic_offline_no_content_upside_down) + && method.containsLiteralInstruction(offline_no_content_body_text_not_offline_eligible) + } +} + +// It's not clear if this second class is ever used and it may be dead code, +// but it the layout image/text is identical to the network error fingerprint above. +internal val loadingFrameLayoutControllerFingerprint = fingerprint { + accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL) + returns("V") + parameters("L") + custom { method, _ -> + method.containsLiteralInstruction(ic_offline_no_content_upside_down) + && method.containsLiteralInstruction(offline_no_content_body_text_not_offline_eligible) + } +} \ No newline at end of file diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/gms/GmsCoreSupportPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/gms/GmsCoreSupportPatch.kt index 1c2246077..72dd910c2 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/gms/GmsCoreSupportPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/gms/GmsCoreSupportPatch.kt @@ -68,5 +68,5 @@ private fun gmsCoreSupportResourcePatch( ) }, ) { - dependsOn(settingsPatch, addResourcesPatch) + dependsOn(settingsPatch, addResourcesPatch, accountCredentialsInvalidTextPatch) } 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-af-rZA/strings.xml +++ b/patches/src/main/resources/addresources/values-af-rZA/strings.xml @@ -197,6 +197,8 @@ 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-am-rET/strings.xml +++ b/patches/src/main/resources/addresources/values-am-rET/strings.xml @@ -197,6 +197,8 @@ 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 66b260aa8..64e64c93f 100644 --- a/patches/src/main/resources/addresources/values-ar-rSA/strings.xml +++ b/patches/src/main/resources/addresources/values-ar-rSA/strings.xml @@ -1311,6 +1311,9 @@ Second \"item\" text" إعدادات GmsCore إعدادات لـ GmsCore + + إذا قمت مؤخرًا بتغيير تفاصيل تسجيل الدخول إلى حسابك، فأزل تثبيت MicroG ثم أعد تثبيته. + تجاوز إعادة توجيه URL تم تجاوز إعادة توجيه عنوان URL 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 d179e15f4..6d0e6d20c 100644 --- a/patches/src/main/resources/addresources/values-as-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-as-rIN/strings.xml @@ -199,6 +199,8 @@ 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 1f76324a6..badcf059c 100644 --- a/patches/src/main/resources/addresources/values-az-rAZ/strings.xml +++ b/patches/src/main/resources/addresources/values-az-rAZ/strings.xml @@ -524,6 +524,9 @@ Ekranın sağ tərəfində düzünə sürüşdürərək səs səviyyəsini tənz Təşəkkür düyməsi göstərilir + Soruş\'u Gizlət + Soruş düyməsi gizlidir + \"Soruş\" düyməsi göstərilir Kəsmə/ gizlət Kəsmə düyməsi gizlidir @@ -1252,7 +1255,7 @@ Bunu aktivləşdirmə, bəzi regionlarda əngəllənib silinən şəkilləri dü DeArrow & Orijinal miniatürlər DeArrow & Kadr çəkilişlər Kadr çəkilişləri - "DeArrow YouTube videoları üçün izdiham mənbəli miniatürlər təqdim edir. Bu miniatürlər YouTube tərəfindən təqdim edilənlərdən dəfələrlə daha uyğundur. + "DeArrow YouTube videoları üçün çox mənbəli miniatürlər təqdim edir. Bu miniatürlər YouTube tərəfindən təqdim edilənlərdən dəfələrlə daha uyğundur. Aktivləşdirilərsə, video URL-lər API alıcısına göndəriləcək və başqa məlumat göndərilməyəcək. Videonun DeArrow miniatürləri yoxdursa, orijinal və ya hələ də çəkilişlər göstərilir. @@ -1307,6 +1310,9 @@ Bunu aktivləşdirmə daha yüksək video keyfiyyətləri əngəlin silə bilər GmsCore Tənzimləmələri GmsCore üçün Tənzimləmələr + + Bu yaxınlarda hesabınıza giriş məlumatlarınızı dəyişmisinizsə, MicroG-ni silin və təkrar quraşdırın. + URL yönləndirmələrini ötür URL yönləndirmələri ötürülü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 6a768754a..82ff2b6aa 100644 --- a/patches/src/main/resources/addresources/values-be-rBY/strings.xml +++ b/patches/src/main/resources/addresources/values-be-rBY/strings.xml @@ -1312,6 +1312,9 @@ Second \"item\" text" Налады GmsCore Налады для GmsCore + + Калі вы нядаўна змянілі даныя для ўваходу ў свой уліковы запіс, выдаліце і пераўсталюйце MicroG. + Абыход URL-перанакіраванняў Перанакіраванне URL абыходзіць 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 0da563f7e..480e3e823 100644 --- a/patches/src/main/resources/addresources/values-bg-rBG/strings.xml +++ b/patches/src/main/resources/addresources/values-bg-rBG/strings.xml @@ -1311,6 +1311,9 @@ Second \"item\" text" GmsCore Настройки Настройки на GmsCore + + Ако наскоро сте променили данните си за вход в профила, деинсталирайте и инсталирайте отново MicroG. + Заобикаляне на URL пренасочване URL пренасочванията се заобикалят 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 9c61307ef..80a0498cf 100644 --- a/patches/src/main/resources/addresources/values-bn-rBD/strings.xml +++ b/patches/src/main/resources/addresources/values-bn-rBD/strings.xml @@ -1311,6 +1311,9 @@ DeArrow সম্পর্কে আরও জানতে এখানে ট GmsCore সেটিং GmsCore এর জন্য সেটিং + + আপনি যদি সম্প্রতি আপনার অ্যাকাউন্ট লগইন বিশদ পরিবর্তন করে থাকেন, তবে MicroG আনইনস্টল করুন এবং পুনরায় ইনস্টল করুন। + URL পুনঃনির্দেশ বাইপাস করুন URL পুনঃনির্দেশ বাইপাস করছে 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-bs-rBA/strings.xml +++ b/patches/src/main/resources/addresources/values-bs-rBA/strings.xml @@ -197,6 +197,8 @@ 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 4da667615..16dd15cba 100644 --- a/patches/src/main/resources/addresources/values-ca-rES/strings.xml +++ b/patches/src/main/resources/addresources/values-ca-rES/strings.xml @@ -1310,6 +1310,9 @@ Si actives aquesta opció, es poden desbloquejar qualitats de vídeo més altes" Configuració de GmsCore Configuració de GmsCore + + Si recentment heu canviat les dades d\'inici de sessió del vostre compte, desinstal·leu i torneu a instal·lar MicroG. + Omet les redireccions d\'URL Les redireccions d\'URL s\'ometent 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 86908e41f..a584529de 100644 --- a/patches/src/main/resources/addresources/values-cs-rCZ/strings.xml +++ b/patches/src/main/resources/addresources/values-cs-rCZ/strings.xml @@ -1310,6 +1310,9 @@ Povolením této funkce lze odemknout vyšší kvality videa" Nastavení GmsCore Nastavení pro GmsCore + + Pokud jste nedávno změnili přihlašovací údaje svého účtu, odinstalujte a znovu nainstalujte MicroG. + Obcházet přesměrování URL Přesměrování URL jsou obcházena 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 43360a485..f87cc7bb8 100644 --- a/patches/src/main/resources/addresources/values-da-rDK/strings.xml +++ b/patches/src/main/resources/addresources/values-da-rDK/strings.xml @@ -1252,6 +1252,9 @@ Aktivering af dette kan låse op for højere videokvalitet" GmsCore Indstillinger Indstillinger for GmsCore + + Hvis du for nylig har ændret dine kontooplysninger, skal du afinstallere og geninstallere MicroG. + Bypass URL omdirigeringer URL omdirigeringer er omgået 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 71c63bf8d..1fabd417e 100644 --- a/patches/src/main/resources/addresources/values-de-rDE/strings.xml +++ b/patches/src/main/resources/addresources/values-de-rDE/strings.xml @@ -1304,6 +1304,9 @@ Durch Aktivieren dieser Option können höhere Videoqualitäten freigeschaltet w GmsCore Einstellungen Einstellungen für GmsCore + + Wenn Sie kürzlich Ihre Kontoanmeldedaten geändert haben, deinstallieren Sie MicroG und installieren Sie es erneut. + URL-Weiterleitungen umgehen URL-Umleitungen werden umgangen 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 1a0c0bcd5..2a08f13a2 100644 --- a/patches/src/main/resources/addresources/values-el-rGR/strings.xml +++ b/patches/src/main/resources/addresources/values-el-rGR/strings.xml @@ -86,7 +86,7 @@ Second \"item\" text" Ροή Γενικά Οθόνη αναπαραγωγής - Γραμμή προόδου βίντεο + Γραμμή προόδου Έλεγχος με σάρωση οθόνης Διάφορα Βίντεο @@ -1310,6 +1310,9 @@ Second \"item\" text" Ρυθμίσεις GmsCore Ρυθμίσεις για το MicroG GmsCore + + Εάν αλλάξατε πρόσφατα τα στοιχεία σύνδεσης του λογαριασμού σας, απεγκαταστήστε και εγκαταστήστε ξανά το MicroG. + Παράκαμψη ανακατευθύνσεων συνδέσμων Οι ανακατευθύνσεις συνδέσμων URL παρακάμπτονται 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 a32e47c12..c3297571b 100644 --- a/patches/src/main/resources/addresources/values-es-rES/strings.xml +++ b/patches/src/main/resources/addresources/values-es-rES/strings.xml @@ -1299,6 +1299,9 @@ Habilitar esto puede desbloquear calidades de vídeo más altas" Ajustes de GmsCore Configuración de GmsCore + + Si has cambiado recientemente los datos de inicio de sesión de tu cuenta, desinstala y vuelve a instalar MicroG. + Evitar redirecciones de URL Se omiten las redirecciones de URL 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 f91b4284f..559ec1b3e 100644 --- a/patches/src/main/resources/addresources/values-et-rEE/strings.xml +++ b/patches/src/main/resources/addresources/values-et-rEE/strings.xml @@ -1311,6 +1311,9 @@ Selle lubamine võib avada kõrgema video kvaliteedi" GmsCore seaded GmsCore seaded + + Kui sa hiljuti muutsid oma konto sisselogimisandmeid, siis eemalda ja installeeri MicroG uuesti. + Ümbersuunamiste URL-id mööda minna Ümbersuunamiste URL-id mööda minnakse 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-eu-rES/strings.xml +++ b/patches/src/main/resources/addresources/values-eu-rES/strings.xml @@ -197,6 +197,8 @@ 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 62d44757f..f5901cede 100644 --- a/patches/src/main/resources/addresources/values-fa-rIR/strings.xml +++ b/patches/src/main/resources/addresources/values-fa-rIR/strings.xml @@ -217,6 +217,8 @@ 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 ae56e8edf..8b4242ce4 100644 --- a/patches/src/main/resources/addresources/values-fi-rFI/strings.xml +++ b/patches/src/main/resources/addresources/values-fi-rFI/strings.xml @@ -1294,6 +1294,8 @@ Tämä voi avata korkealaatuisemmat videot" GmsCore-asetukset GmsCoren asetukset + + Ohita URL-osoitteen uudelleenohjaukset URL-osoitteen uudelleenohjaukset ohitetaan 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 7fdcf0183..276ec1d79 100644 --- a/patches/src/main/resources/addresources/values-fil-rPH/strings.xml +++ b/patches/src/main/resources/addresources/values-fil-rPH/strings.xml @@ -1309,6 +1309,9 @@ Ang pagpapagana nito ay maaaring magbukas ng mas mataas na kalidad ng video"Mga Setting ng GmsCore Mga setting para sa GmsCore + + Kung kamakailan mo lang binago ang mga detalye sa pag-login sa iyong account, i-uninstall at muling i-install ang MicroG. + I-bypass ang mga pag-redirect ng URL Ang mga pag-redirect ng URL ay na-bypass 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 3c60254c9..14e29636c 100644 --- a/patches/src/main/resources/addresources/values-fr-rFR/strings.xml +++ b/patches/src/main/resources/addresources/values-fr-rFR/strings.xml @@ -1310,6 +1310,9 @@ Activer cette option peut déverrouiller des qualités vidéo supérieures"Paramètres GmsCore Paramètres relatifs à GmsCore + + Si vous avez récemment modifié vos informations de connexion, désinstallez et réinstallez MicroG. + Contourner les redirections d\'URL Les redirections d\'URL sont contournées 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 3ec2cb3dd..3ea410f96 100644 --- a/patches/src/main/resources/addresources/values-ga-rIE/strings.xml +++ b/patches/src/main/resources/addresources/values-ga-rIE/strings.xml @@ -1311,6 +1311,9 @@ Is féidir le seo caighdeáin físeáin níos airde a dhíghlasáil" Socruithe GmsCore Socruithe le haghaidh GmsCore + + Má d’athraigh tú sonraí logála isteach do chuntais le déanaí, ansin díshuiteáil agus athshuiteáil MicroG. + Atreoracha seachbhóthar URL Seachnaítear atreoruithe URL 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-gl-rES/strings.xml +++ b/patches/src/main/resources/addresources/values-gl-rES/strings.xml @@ -197,6 +197,8 @@ 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-gu-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-gu-rIN/strings.xml @@ -197,6 +197,8 @@ 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-hi-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-hi-rIN/strings.xml @@ -197,6 +197,8 @@ 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-hr-rHR/strings.xml +++ b/patches/src/main/resources/addresources/values-hr-rHR/strings.xml @@ -197,6 +197,8 @@ 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 f72e24a06..4d025abe4 100644 --- a/patches/src/main/resources/addresources/values-hu-rHU/strings.xml +++ b/patches/src/main/resources/addresources/values-hu-rHU/strings.xml @@ -1308,6 +1308,9 @@ Ez a beállítás lehetővé teszi a magasabb videóminőségek feloldását"GmsCore beállítások A GmsCore beállításai + + Ha nemrég módosította a fiókja bejelentkezési adatait, távolítsa el, majd telepítse újra a MicroG-t. + URL átirányítások kikerülése URL átirányítások kikerülve 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 4138f307c..29a06445a 100644 --- a/patches/src/main/resources/addresources/values-hy-rAM/strings.xml +++ b/patches/src/main/resources/addresources/values-hy-rAM/strings.xml @@ -1311,6 +1311,9 @@ Mini-player-ը կարող է գրավվել էկրանից դուրս՝ դեպի GmsCore կարգավորումներ GmsCore-ի կարգավորումներ + + Եթե վերջերս փոխել եք ձեր հաշվի մուտքի տվյալները, ապա ջնջեք և նորից տեղադրեք MicroG-ն: + URL-ի վերահղումների հնարավորությունը անջատել URL-ի վերահղումները անջատված են 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 9c7fafbae..188f2387a 100644 --- a/patches/src/main/resources/addresources/values-in-rID/strings.xml +++ b/patches/src/main/resources/addresources/values-in-rID/strings.xml @@ -1310,6 +1310,9 @@ Mengaktifkan ini dapat membuka kualitas video yang lebih tinggi" Pengaturan GmsCore Pengaturan untuk GmsCore + + Jika Anda baru saja mengubah detail login akun Anda, hapus pemasangan dan ulangi memasang MicroG. + Abaikan pengalihan URL Pengalihan URL diabaikan 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-is-rIS/strings.xml +++ b/patches/src/main/resources/addresources/values-is-rIS/strings.xml @@ -197,6 +197,8 @@ 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 46c57f818..589f273f7 100644 --- a/patches/src/main/resources/addresources/values-it-rIT/strings.xml +++ b/patches/src/main/resources/addresources/values-it-rIT/strings.xml @@ -1310,6 +1310,9 @@ Abilitare questa opzione può sbloccare qualità video più elevate" Impostazioni di GmsCore Impostazioni per GmsCore + + Se di recente hai modificato i dettagli di accesso al tuo account, disinstalla e reinstalla MicroG. + Aggira reindirizzamenti dell\'URL I reindirizzamenti URL sono aggirati 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 790261fe0..aeb6d0979 100644 --- a/patches/src/main/resources/addresources/values-iw-rIL/strings.xml +++ b/patches/src/main/resources/addresources/values-iw-rIL/strings.xml @@ -1294,6 +1294,8 @@ Second \"item\" text" הגדרות GmsCore הגדרות עבור GmsCore + + עקוף הפניות מחדש של URL הפניות מחדש של URL נעקפות 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 aabd7e4bb..88b96c63e 100644 --- a/patches/src/main/resources/addresources/values-ja-rJP/strings.xml +++ b/patches/src/main/resources/addresources/values-ja-rJP/strings.xml @@ -29,7 +29,7 @@ Second \"item\" text" ReVanced Manager によってインストールされていない 10 分以上前にパッチが適用されている %s 日前にパッチが適用されている - APK の作成日情報が破損している + APK の作成日時データが破損している 設定 @@ -313,14 +313,14 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ キーワード フィルタ フィード、検索結果、関連動画に表示される動画をキーワードで除外するフィルタの設定 キーワードに合致する動画をホームフィードから除外する - キーワードに合致する動画はホームフィードに表示されません - ホームフィードはキーワードでフィルタリングされません + キーワードに合致する動画はホームフィードおよび関連動画に表示されません + ホームフィードおよび関連動画はキーワードでフィルタリングされません キーワードに合致する動画を検索結果から除外する キーワードに合致する動画は検索結果に表示されません 検索結果はキーワードでフィルタリングされません キーワードに合致する動画を登録チャンネル フィードから除外する キーワードに合致する動画は登録チャンネル フィードに表示されません - 登録チャンネル フィードの動画はキーワードでフィルタリングされません + 登録チャンネル フィードはキーワードでフィルタリングされません キーワード @@ -895,10 +895,10 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ シーク中のサムネイルはプレーヤー画面全体に表示されます - SponsorBlock を有効化 + SponsorBlock を有効にする SponsorBlock はユーザーからの情報提供により YouTube 動画のわずらわしい部分をスキップする機能です 外観 - 投票ボタンを表示 + 投票ボタンを表示する セグメントへの投票ボタンはプレーヤー オーバーレイに表示されます セグメントへの投票ボタンはプレーヤー オーバーレイに表示されません 四角ボタンを使用する @@ -909,45 +909,45 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ ボタンに「スキップ」とだけ表示されます ボタンにカテゴリー名が表示されます スキップボタンを自動的に非表示にする - スキップボタンは表示された数秒後に自動的に非表示になります - スキップボタンはセグメントの開始から終了まで表示されます - スキップ時にトーストを表示 - セグメントが自動的にスキップされたときにトースト ポップアップが表示されます。ここをタップするとサンプルが表示されます + スキップボタンは、表示された数秒後に自動的に非表示になります + スキップボタンは、セグメントの開始から終了まで表示されます + スキップ時にトーストを表示する + セグメントが自動的にスキップされたときに、トースト ポップアップが表示されます。ここをタップするとサンプルが表示されます トースト ポップアップは表示されません。ここをタップするとサンプルが表示されます - セグメントを除いた再生時間を表示 + セグメントを除いた再生時間を表示する セグメントを除いた再生時間が、動画全体の再生時間の横に括弧付きで表示されます 動画全体の再生時間のみが表示されます セグメントの作成 セグメント作成ボタンを表示する セグメント作成ボタンは表示されます セグメント作成ボタンは表示されません - 新しいセグメントステップを調整する - 新しいセグメントを作成する際の時間調節ボタンの移動時間 (単位: ミリ秒) + セグメントの時間調整幅 + 「セグメントを作成」メニュー内の早送り / 巻き戻しボタンで移動する時間 (ミリ秒) 値は正の整数でなければなりません ガイドラインを見る ガイドラインには、新しいセグメントを作成するためのルールとヒントが含まれています ガイドラインに従ってください - 新しいセグメントを作成する前にSponsorBlockガイドラインを読んでください - 既に読んでいます - 見る - 一般設定 - API 利用不可時にトーストを表示 - SponsorBlock が利用できない場合はトースト ポップアップが表示されます - SponsorBlock が利用できない場合でもトースト ポップアップは表示されません - スキップ数の追跡を有効にする - SponsorBlock リーダーボードに、どれだけの時間が節約されたかを報告します。セグメントがスキップされるたびにメッセージがリーダーボードに送信されます - スキップカウント追跡が有効になっていません - 最小のセグメントの長さ + 新しいセグメントを作成する前に SponsorBlock ガイドラインを読んでください + 既読 + 表示 + その他 + API 利用不可時にトーストを表示する + SponsorBlock が利用できない場合は、トースト ポップアップが表示されます + SponsorBlock が利用できない場合でも、トースト ポップアップは表示されません + スキップデータを送信する + SponsorBlock リーダーボード にスキップによって節約した時間を送信します。セグメントをスキップする度にデータを送信します + スキップデータは送信されません + セグメントのしきい値 設定値 (単位: 秒) より短いセグメントはスキップされず、プレーヤーにも表示されません セグメントのしきい値が無効です 非公開ユーザー ID この ID は公開すべきではありません。パスワードのようなものであり、誰とも共有すべきではありません。もし誰かがこの ID を手に入れた場合、あなたになりすますことができます 非公開ユーザー ID は 30 文字以上必要です - API の URL を変更 - SponsorBlockのアドレスはサーバーへの呼び出しに使用されます - API の URL をリセットしました + API URL + SponsorBlock がサーバーとの通信で使用するアドレス + API URL をリセットしました API URL が無効です - API の URL を変更しました + API URL を変更しました 設定のインポート / エクスポート コピー SponsorBlock の設定を JSON 形式のテキストでインポート / エクスポートします。この JSON テキストは他のプラットフォームでも利用可能です @@ -955,7 +955,7 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ 設定が正常にインポートされました インポートに失敗しました: %s エクスポートに失敗しました: %s - "設定には、SponsorBlock の非公開ユーザー ID が含まれています。このユーザー ID はパスワードのようなものであり、決して共有すべきではありません。" + "設定には、SponsorBlock の非公開ユーザー ID が含まれています。この ID はパスワードのようなものであり、決して共有すべきではありません。" 今後表示しない セグメントのスキップ スポンサー @@ -968,7 +968,7 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ 動画の中で最も興味を引く場面 幕間 / オープニング (イントロ) 実際のコンテンツを含まない間隔。一時停止、固定フレーム、繰り返しアニメーションを使用できます。情報を含むトランジションは含まれません。 - 終了画面 / クレジット (アウトロ) + 終了画面 / クレジット(アウトロ) クレジットまたはYouTubeのエンドカードが表示される場合、情報を持つ結論にはなりません 予告編 / 総集編 / フック ビデオやシリーズの他のビデオで何が起こったのかを示すクリップのコレクション 全ての情報が他の場所で繰り返されます @@ -1009,7 +1009,7 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ 複数のセグメントをスキップしました 自動的にスキップ 1 回だけ自動的にスキップ - スキップ ボタンを表示 + スキップボタンを表示 シークバーに表示 無効 セグメント送信失敗: %s @@ -1024,9 +1024,9 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ SponsorBlock は一時的に利用できません (API タイムアウト) SponsorBlockは一時的に利用できません (ステータス: %d) SponsorBlockは一時的に利用できません - セグメントに投票できません (API タイムアウト) + セグメントに投票できませんでした (API タイムアウト) セグメントに投票できませんでした(ステータス: %1$d %2$s) - セグメントに投票できません: %s + セグメントに投票できませんでした: %s 高評価 低評価 カテゴリーの変更 @@ -1083,7 +1083,7 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ 透明度: 色: 色を変更しました - 色をリセット + 色がリセットされました 色の値が無効です 色をリセット リセット @@ -1301,7 +1301,7 @@ Automotive レイアウト より高画質な映像がアンロックされる可能性がありますが、動画のカクつき、バッテリー寿命の悪化、予期せぬ副作用が 発生するかもしれません" - "端末の画面サイズは偽装されていません + "デバイスの画面サイズは偽装されていません この機能を有効にすると、より高画質な映像がアンロックされる可能性があります" この機能を有効にすると、動画のカクつき、バッテリー寿命の悪化、および予期せぬ副作用を引き起こす可能性があります。 @@ -1310,6 +1310,9 @@ Automotive レイアウト GmsCore 設定 GmsCore の設定 + + 最近アカウントのログイン情報を変更した場合は、MicroGをアンインストールして再インストールしてください。 + URL リダイレクトを回避する YouTube の URL リダイレクトを経由せずにリンクへ移動します @@ -1406,10 +1409,10 @@ Automotive レイアウト デフォルトのクライアント iOS クライアントで AVC (H.264) を強制的に使用する ビデオ コーデックは強制的に AVC (H.264) が使用されます - ビデオコーデックは自動的に決定されます - "この機能を有効にすると、バッテリー寿命が延び、動画のカクつきが改善される可能性があります。 + ビデオ コーデックは自動的に決定されます + "この機能を有効にすると、バッテリー寿命が延びたり、動画のカクつきが改善さたりする可能性があります。 -AVC の最大解像度は 1080p であり、Opus オーディオ コーデックは使用できず、動画の再生時に VP9 や AV1 より多くの通信量を使用します。" +AVC は、最大解像度が 1080p であり、Opus オーディオ コーデックが利用できず、動画再生時の通信量が VP9 や AV1 より多くなります。" iOS クライアントの副作用 "• 映画や有料動画が再生されない可能性があります •「 一定音量」が利用できません 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-ka-rGE/strings.xml +++ b/patches/src/main/resources/addresources/values-ka-rGE/strings.xml @@ -197,6 +197,8 @@ 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-kk-rKZ/strings.xml +++ b/patches/src/main/resources/addresources/values-kk-rKZ/strings.xml @@ -197,6 +197,8 @@ 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-km-rKH/strings.xml +++ b/patches/src/main/resources/addresources/values-km-rKH/strings.xml @@ -197,6 +197,8 @@ 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-kn-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-kn-rIN/strings.xml @@ -197,6 +197,8 @@ 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 7cddda58e..409cccbdd 100644 --- a/patches/src/main/resources/addresources/values-ko-rKR/strings.xml +++ b/patches/src/main/resources/addresources/values-ko-rKR/strings.xml @@ -24,7 +24,7 @@ Second \"item\" text" 환경 검사에 실패함 공식 홈페이지 열기 닫기 - <h5>이 앱은 사용자가 패치하지 않은 것 같습니다.</h5><br>이 앱은 제대로 작동하지 않을 수 있으며, <b>사용 시 해롭거나 심지어 위험할 수도 있습니다</b>.<br><br>이러한 검사는 이 앱이 사전에 패치되었거나 다른 사람으로부터 받은 것임을 의미합니다:<br><br><small>%1$s</small><br>검증되고 안전한 앱을 사용하고 있는지 확인하려면 <b>이 앱을 제거하고 직접 패치하는 것</b>을 강력히 권장합니다.<p><br>이 경고는 두 번만 표시됩니다 + <h5>이 앱은 사용자가 패치하지 않은 것 같습니다.</h5><br>이 앱은 제대로 작동하지 않을 수 있으며, <b>사용 시 해롭거나 심지어 위험할 수도 있습니다</b>.<br><br>이러한 검사는 이 앱이 사전에 패치되었거나 다른 사람으로부터 받은 것임을 의미합니다:<br><br><small>%1$s</small><br>검증되고 안전한 앱을 사용하고 있는지 확인하려면 <b>이 앱을 제거하고 직접 패치하는 것</b>을 강력히 권장합니다.<p><br>이 경고는 두 번만 표시됩니다. 다른 기기에서 패치됨 ReVanced Manager에 의해 설치되지 않음 10분 이상 전에 패치됨 @@ -46,9 +46,9 @@ Second \"item\" text" 설정 아이콘을 표시합니다 설정 아이콘을 표시하지 않습니다 ReVanced 언어 - "일부 언어의 번역이 누락되었거나 완료되지 않았을 수 있습니다 + "일부 언어의 번역이 누락되었거나 완료되지 않았을 수 있습니다. -새로운 언어를 번역하려면 translate.revanced.app를 방문하세요" +새로운 언어를 번역하려면 translate.revanced.app를 방문하세요." 앱 언어 가져오기 / 내보내기 ReVanced 설정을 가져오거나 내보낼 수 있습니다 @@ -62,13 +62,13 @@ Second \"item\" text" - MicroG GmsCore가 설치되어 있지 않습니다. 설치하세요 + MicroG GmsCore가 설치되어 있지 않습니다. 설치하세요. 필수 조치 - "MicroG GmsCore에 백그라운드에서 실행할 수 있는 권한이 없습니다 + "MicroG GmsCore에 백그라운드에서 실행할 수 있는 권한이 없습니다. -이 기기에 대한 \"Don't kill my app\" 가이드를 읽어보고, MicroG 설치 지침을 적용하세요 +이 기기에 대한 \"Don't kill my app\" 가이드를 읽어보고, MicroG 설치 지침을 적용하세요. -앱이 실행하려면 이 과정이 필요합니다" +앱이 실행하려면 이 과정이 필요합니다." 웹사이트 열기 "MicroG GmsCore 앱 배터리 최적화를 비활성화(제한 없음)하여 앱 문제를 방지할 수 있습니다. @@ -114,9 +114,9 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 ReVanced 오류 팝업 메시지 표시하기 오류가 발생하면 팝업 메시지를 표시합니다 오류가 발생하면 팝업 메시지를 표시하지 않습니다 - "오류 메시지를 비활성화하면 모든 ReVanced 오류 알림이 숨겨집니다 + "오류 메시지를 비활성화하면 모든 ReVanced 오류 알림이 숨겨집니다. -예상되지 않은 이벤트에 대한 알림을 받지 못할 수 있습니다" +예상되지 않은 이벤트에 대한 알림을 받지 못할 수 있습니다." 음악 앨범 카드 숨기기 @@ -299,9 +299,9 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 YouTube Doodles 숨기기 YouTube Doodles가 숨겨집니다\n• Doodles: 기념일 로고 헤더 YouTube Doodles가 표시됩니다\n• Doodles: 기념일 로고 헤더 - "YouTube Doodles는 공휴일이나 기념일 등, 그날에 맞춘 디자인으로 변경되는 왼쪽 상단의 YouTube 헤더를 말합니다 + "YouTube Doodles는 공휴일이나 기념일 등, 그날에 맞춘 디자인으로 변경되는 왼쪽 상단의 YouTube 헤더를 말합니다. -현재 거주하는 지역에서 YouTube Doodles가 표시되어 있는데 이 설정이 활성화되어 있는 경우에는 검색창 아래에 표시되는 카테고리 바도 숨겨집니다" +현재 거주하는 지역에서 YouTube Doodles가 표시되어 있는데 이 설정이 활성화되어 있는 경우에는 검색창 아래에 표시되는 카테고리 바도 숨겨집니다." 사용자 정의 필터 사용자 정의 필터를 사용하여 구성요소를 숨길 수 있습니다 사용자 정의 필터 활성화하기 @@ -413,7 +413,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 시청 경고 다이얼로그 제거하기 다음 동영상을 시청하기 전에 표시되는 시청 경고 다이얼로그를 제거합니다:\n• 연령 제한 동영상\n• 자살 또는 자해와 관련된 동영상, etc. 다음 동영상을 시청하기 전에 표시되는 시청 경고 다이얼로그를 제거하지 않습니다:\n• 연령 제한 동영상\n• 자살 또는 자해와 관련된 동영상, etc. - 이 설정은 다이얼로그를 자동으로 허용하기만 하며 연령 제한(성인인증 절차)을 우회할 수 없습니다 + 이 설정은 다이얼로그를 자동으로 허용하기만 하며 연령 제한(성인인증 절차)을 우회할 수 없습니다. 외부 다운로드 @@ -475,7 +475,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 볼륨 스와이프 민감도 스와이프할 때마다 볼륨이 얼마나 변경되는지를 지정할 수 있습니다 스와이프 오버레이 스타일 - 바형 오버레이 + 가로 오버레이 가로 오버레이 (최소화 - 상단) 가로 오버레이 (최소화 - 중앙) 원형 오버레이 @@ -564,16 +564,16 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 알려진 문제점: • 동영상 광고가 강제로 숨겨집니다" 만들기 버튼과 알림 버튼의 위치를 교환하지 않습니다\n\n알려진 문제점:\n• 서버에서 더 많은 광고가 로드될 수 있습니다\n• Shorts 광고가 더 이상 숨겨지지 않습니다 - "이 설정을 비활성화하면 Shorts 광고가 차단되지 않습니다 + "이 설정을 비활성화하면 Shorts 광고가 차단되지 않습니다. -이 설정을 변경해도 적용되지 않는다면 시크릿 모드로 전환해 보세요" +이 설정을 변경해도 적용되지 않는다면 시크릿 모드로 전환해 보세요." 하단바 버튼 라벨 숨기기 라벨이 숨겨집니다 라벨이 표시됩니다 반투명 상태바 비활성화하기 상태바가 불투명합니다 상태바가 불투명하거나 반투명합니다 - 일부 기기에서는 이 기능을 활성화하면 시스템 네비게이션 바가 투명하게 변경될 수 있습니다 + 일부 기기에서는 이 기능을 활성화하면 시스템 네비게이션 바가 투명하게 변경될 수 있습니다. 밝은 반투명 하단바 비활성화하기 밝은 테마에서 하단바가 불투명합니다 밝은 테마에서 하단바가 불투명하거나 반투명합니다 @@ -788,7 +788,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 최종 화면에서 다음 재생 추천 동영상 숨기기 - "자동재생이 꺼져 있으면 최종 화면에서 다음 재생 추천 동영상이 숨겨집니다. + "자동재생이 꺼져 있으면 최종 화면에서 다음 재생 추천 동영상이 숨겨집니다 자동재생은 YouTube 설정에서 변경할 수 있습니다: 설정 → 재생 → 다음 동영상 자동재생" @@ -883,11 +883,11 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 일반 화질 재생바 썸네일을 활성화합니다 전체 화면 고화질 재생바 썸네일을 활성화합니다 전체 화면 일반 화질 재생바 썸네일을 활성화합니다 - "이 설정을 활성화하면 재생바 썸네일이 없는 실시간 스트림의 썸네일도 복원됩니다 + "이 설정을 활성화하면 재생바 썸네일이 없는 실시간 스트림의 썸네일도 복원됩니다. -재생바 썸네일에는 현재 동영상과 동일한 화질 값이 사용됩니다 +재생바 썸네일에는 현재 동영상과 동일한 화질 값이 사용됩니다. -이 설정은 동영상 화질 값이 720p 이하이고 인터넷 연결 상태가 매우 빠를 때 가장 잘 작동합니다" +이 설정은 동영상 화질 값이 720p 이하이고 인터넷 연결 상태가 매우 빠를 때 가장 잘 작동합니다." 이전 재생바 썸네일 복원하기 재생바 상단에서 최소화된 썸네일을 표시합니다 플레이어에서 전체 화면으로 된 썸네일을 표시합니다 @@ -1034,7 +1034,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 %1$s ~ %2$s 구간 카테고리를 선택하세요 - 이 카테고리는 비활성화되어 있습니다. 제출하려면 설정에서 활성화해야 합니다 + 이 카테고리는 비활성화되어 있습니다. 제출하려면 설정에서 활성화해야 합니다. 새 SponsorBlock 구간 %s 을 구간의 시작 또는 끝으로 설정하시겠습니까? 시작 @@ -1109,11 +1109,11 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 앱 버전 변경하기 앱 버전을 변경합니다 앱 버전을 변경하지 않습니다 - "앱 버전을 YouTube 이전 앱 버전으로 변경합니다 + "앱 버전을 YouTube 이전 앱 버전으로 변경합니다. -이 경우 앱 레이아웃과 기능이 변경되지만 알려지지 않은 문제점이 발생할 수 있습니다 +이 경우 앱 레이아웃과 기능이 변경되지만 알려지지 않은 문제점이 발생할 수 있습니다. -나중에 이 설정을 비활성화하면 앱 레이아웃 버그를 방지하기 위해 앱 데이터를 지우는 것이 좋습니다" +나중에 이 설정을 비활성화하면 앱 레이아웃 버그를 방지하기 위해 앱 데이터를 지우는 것이 좋습니다." 변경할 앱 버전 @@ -1308,12 +1308,15 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요" "기기 크기 정보를 변경하지 않습니다 이 설정을 활성화하면 더 높은 화질 동영상 값을 잠금 해제할 수 있습니다" - 이 설정을 활성화하면 동영상 재생이 끊기거나 배터리 수명이 단축되고 알려지지 않은 문제점이 발생할 수 있습니다 + 이 설정을 활성화하면 동영상 재생이 끊기거나 배터리 수명이 단축되고 알려지지 않은 문제점이 발생할 수 있습니다. GmsCore 설정 알림 수신을 위한 클라우드 메시징을 설정할 수 있습니다 + + 최근에 계정 로그인 정보를 변경했다면 MicroG를 제거하고 다시 설치하세요. + 리다이렉션 없이 링크 바로 열기 앱 내에서 외부 링크를 열 때, URL 리다이렉션(youtube.com/redirect)을 거치지 않고 연결됩니다 @@ -1405,22 +1408,22 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요" 스트리밍 데이터를 변경합니다 "스트리밍 데이터를 변경하지 않습니다 동영상 재생 문제가 발생할 수 있습니다" - 이 설정을 비활성화하면 동영상 재생 문제가 발생할 수 있습니다 + 이 설정을 비활성화하면 동영상 재생 문제가 발생할 수 있습니다. 기본 클라이언트 iOS AVC (H.264) 강제로 활성화하기 동영상 코덱을 AVC (H.264)로 강제로 활성화합니다\n\n• 일부 VP9 코덱 동영상에서 제거되었던 화질 값이 표시될 수 있습니다\n• 최대 화질 값이 1080p이므로, 초고화질 동영상을 재생할 수 없습니다\n• HDR 동영상을 재생할 수 없습니다 동영상 코덱을 자동으로 결정합니다\n\n• 예전에 업로드된 동영상을 재생했는데 VP9 코덱 응답을 받았을 경우, 일부 화질값이 제거되어 360p와 1080p(Premium 기능)만 선택가능할 수 있거나 화질 메뉴를 선택불가능할 수 있습니다 - "이 설정를 활성화하면 배터리 수명이 향상되고, 동영상 재생 끊김 문제가 해결될 수 있습니다 + "이 설정를 활성화하면 배터리 수명이 향상되고, 동영상 재생 끊김 문제가 해결될 수 있습니다. -AVC의 최대 화질 값은 1080p이고, OPUS 코덱을 사용불가 및 HDR 동영상을 재생할 수 없으며, 동영상을 재생했을 경우에는 VP9 또는 AV1보다 더 많은 모바일 데이터를 사용되오니 주의하세요" +AVC의 최대 화질 값은 1080p이고, OPUS 코덱을 사용불가 및 HDR 동영상을 재생할 수 없으며, 동영상을 재생했을 경우에는 VP9 또는 AV1보다 더 많은 모바일 데이터를 사용되오니 주의하세요." 알려진 문제점 - "• 영화 또는 유료 동영상이 재생되지 않을 수 있습니다. + "• 영화 또는 유료 동영상이 재생되지 않을 수 있습니다 • 안정적인 볼륨을 사용할 수 없습니다 • 동영상이 1초 일찍 종료될 수 있습니다" 알려진 문제점 "• 오디오 트랙 메뉴가 표시되지 않습니다 • 안정적인 볼륨을 사용할 수 없습니다 -• 원본 오디오 트랙를 강제로 활성화할 수 없습니다." +• 원본 오디오 트랙를 강제로 활성화할 수 없습니다" • AV1 코덱이 지원되지 않습니다 • Kids 동영상은 로그인을 하지 않았거나 시크릿 모드에서는 재생되지 않을 수 있습니다 전문 통계에서 표시하기 @@ -1436,8 +1439,8 @@ AVC의 최대 화질 값은 1080p이고, OPUS 코덱을 사용불가 및 HDR 동 음성 광고를 차단하지 않습니다 - %s 를 차단할 수 없기 때문에 광고가 표시될 것입니다. 설정에서 다른 광고 차단 서비스로 전환해 보세요 - %s 에서 오류가 발생했기 때문에 광고가 표시될 것입니다. 설정에서 다른 광고 차단 서비스로 전환해 보세요 + %s 를 차단할 수 없기 때문에 광고가 표시될 것입니다. 설정에서 다른 광고 차단 서비스로 전환해 보세요. + %s 에서 오류가 발생했기 때문에 광고가 표시될 것입니다. 설정에서 다른 광고 차단 서비스로 전환해 보세요. 광고 차단 Proxy 서버 사용하기 사용 안함 Luminous Proxy 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-ky-rKG/strings.xml +++ b/patches/src/main/resources/addresources/values-ky-rKG/strings.xml @@ -197,6 +197,8 @@ 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-lo-rLA/strings.xml +++ b/patches/src/main/resources/addresources/values-lo-rLA/strings.xml @@ -197,6 +197,8 @@ 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 bc2033bf1..2d2ff6aa2 100644 --- a/patches/src/main/resources/addresources/values-lt-rLT/strings.xml +++ b/patches/src/main/resources/addresources/values-lt-rLT/strings.xml @@ -1310,6 +1310,9 @@ Gali būti atrakinta aukštesnės vaizdo įrašų kokybės, bet galite patirti v „GmsCore“ nustatymai „GmsCore“ nustatymai + + Jei neseniai pakeitėte savo paskyros prisijungimo duomenis, išdiekite ir iš naujo įdiekite „MicroG“. + Aplenkti URL nukreipimus URL nukreipimai aplenkiami 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 9d5ca8938..90d3b8e62 100644 --- a/patches/src/main/resources/addresources/values-lv-rLV/strings.xml +++ b/patches/src/main/resources/addresources/values-lv-rLV/strings.xml @@ -1310,6 +1310,9 @@ Var tikt atbloķētas augstākas video kvalitātes, taču var rasties video atsk GmsCore iestatījumi GmsCore iestatījumi + + Ja nesen mainījāt sava konta pieteikšanās informāciju, atinstalējiet un atkārtoti instalējiet MicroG. + Aiziet garām URL pāradresācijai URL pāradresācija tiek apiet 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-mk-rMK/strings.xml +++ b/patches/src/main/resources/addresources/values-mk-rMK/strings.xml @@ -197,6 +197,8 @@ 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-ml-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-ml-rIN/strings.xml @@ -197,6 +197,8 @@ 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-mn-rMN/strings.xml +++ b/patches/src/main/resources/addresources/values-mn-rMN/strings.xml @@ -197,6 +197,8 @@ 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-mr-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-mr-rIN/strings.xml @@ -197,6 +197,8 @@ 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-ms-rMY/strings.xml +++ b/patches/src/main/resources/addresources/values-ms-rMY/strings.xml @@ -197,6 +197,8 @@ 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-my-rMM/strings.xml +++ b/patches/src/main/resources/addresources/values-my-rMM/strings.xml @@ -197,6 +197,8 @@ 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-nb-rNO/strings.xml +++ b/patches/src/main/resources/addresources/values-nb-rNO/strings.xml @@ -197,6 +197,8 @@ 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-ne-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-ne-rIN/strings.xml @@ -197,6 +197,8 @@ 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 1b061e6b1..f891d779e 100644 --- a/patches/src/main/resources/addresources/values-nl-rNL/strings.xml +++ b/patches/src/main/resources/addresources/values-nl-rNL/strings.xml @@ -1309,6 +1309,9 @@ Het inschakelen hiervan kan hogere videokwaliteiten ontgrendelen" GmsCore-instellingen Instellingen voor GmsCore + + Als u onlangs de inloggegevens van uw account hebt gewijzigd, verwijder dan MicroG en installeer het opnieuw. + Omzeil URL-omleidingen URL-omleidingen worden omzeild 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-or-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-or-rIN/strings.xml @@ -197,6 +197,8 @@ 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-pa-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-pa-rIN/strings.xml @@ -197,6 +197,8 @@ 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 472077cd7..7a635e661 100644 --- a/patches/src/main/resources/addresources/values-pl-rPL/strings.xml +++ b/patches/src/main/resources/addresources/values-pl-rPL/strings.xml @@ -1311,6 +1311,9 @@ Włączenie tego może odblokować wyższe jakości wideo" Ustawienia GmsCore Ustawienia GmsCore + + Jeśli niedawno zmieniono dane logowania do konta, odinstaluj i zainstaluj ponownie MicroG. + Omijanie przekierowań URL Przekierowanie URL jest omijane 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 2eec894f2..982ca845d 100644 --- a/patches/src/main/resources/addresources/values-pt-rBR/strings.xml +++ b/patches/src/main/resources/addresources/values-pt-rBR/strings.xml @@ -1308,6 +1308,9 @@ Habilitar isso pode desbloquear qualidades de vídeo mais altas" Configurações do GmsCore Configurações do GmsCore + + Se você alterou recentemente os detalhes de login da sua conta, desinstale e reinstale o MicroG. + Ignorar redirecionamentos de URL Redirecionamentos de URL estão ignorados 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 a6a33310c..d5bd80a93 100644 --- a/patches/src/main/resources/addresources/values-pt-rPT/strings.xml +++ b/patches/src/main/resources/addresources/values-pt-rPT/strings.xml @@ -1311,6 +1311,9 @@ Bật tính năng này có thể mở khóa chất lượng video cao hơn"Configurações do GmsCore Configurações para GmsCore + + Se você alterou recentemente os detalhes de login da sua conta, desinstale e reinstale o MicroG. + Ignorar redirecionamentos de URL Redirecionamentos de URL estão ignorados 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 67535280e..eb26c7549 100644 --- a/patches/src/main/resources/addresources/values-ro-rRO/strings.xml +++ b/patches/src/main/resources/addresources/values-ro-rRO/strings.xml @@ -1310,6 +1310,9 @@ Activarea acestei opțiuni poate debloca calități video mai mari" Setări GmsCore Setări pentru GmsCore + + Dacă ți-ai schimbat recent detaliile de conectare la cont, dezinstalează și reinstalează MicroG. + Ignoră redirecționările adreselor URL Redirecționările URL sunt ocolite 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 f4cb37569..804cf9dbb 100644 --- a/patches/src/main/resources/addresources/values-ru-rRU/strings.xml +++ b/patches/src/main/resources/addresources/values-ru-rRU/strings.xml @@ -1311,6 +1311,9 @@ Second \"item\" text" GmsCore Настройки GmsCore + + Если Вы недавно изменили данные для входа в свою учетную запись, удалите и переустановите MicroG. + Обход перенаправлений URL-адресов Перенаправления URL-адресов (youtube.com/redirect) обходятся и исходные URL-адреса открываются напрямую 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-si-rLK/strings.xml +++ b/patches/src/main/resources/addresources/values-si-rLK/strings.xml @@ -197,6 +197,8 @@ 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 254fae7c4..4b43d1235 100644 --- a/patches/src/main/resources/addresources/values-sk-rSK/strings.xml +++ b/patches/src/main/resources/addresources/values-sk-rSK/strings.xml @@ -1299,6 +1299,9 @@ Povolením tejto možnosti môžete odomknúť vyššie kvality videa" Nastavenia GmsCore Nastavenia pre GmsCore + + Ak ste nedávno zmenili prihlasovacie údaje svojho účtu, odinštalujte a znova nainštalujte MicroG. + Obíďte presmerovania adries URL Presmerovania URL sú obchádzané 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 459807740..d61f1c318 100644 --- a/patches/src/main/resources/addresources/values-sl-rSI/strings.xml +++ b/patches/src/main/resources/addresources/values-sl-rSI/strings.xml @@ -1310,6 +1310,9 @@ Omogočanje tega lahko odklene višje kakovosti videa" Nastavitve GmsCore Nastavitve za GmsCore + + Če ste nedavno spremenili podatke za prijavo v račun, odstranite in znova namestite MicroG. + Obvod preusmeritev URL-jev Preusmeritve URL-jev so obvodene 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 73ba09de3..9dc085645 100644 --- a/patches/src/main/resources/addresources/values-sq-rAL/strings.xml +++ b/patches/src/main/resources/addresources/values-sq-rAL/strings.xml @@ -1309,6 +1309,9 @@ Aktivizimi i kësaj mund të zhbllokojë cilësi më të larta video" Cilësimet e GmsCore Cilësimet për GmsCore + + Nëse së fundmi keni ndryshuar detajet e hyrjes në llogarinë tuaj, atëherë çinstaloni dhe riinstaloni MicroG. + Anulo redirektimin e URL Redirektimet e URL janë të anuluara 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 863101a17..f0fd569d9 100644 --- a/patches/src/main/resources/addresources/values-sr-rCS/strings.xml +++ b/patches/src/main/resources/addresources/values-sr-rCS/strings.xml @@ -524,7 +524,7 @@ Podesite jačinu zvuka prevlačenjem vertikalno na desnoj strani ekrana"Dugme „Hvala” je prikazano - Sakrij „Pitaj” + Sakrij dugme „Pitaj” Dugme „Pitaj” je skriveno Dugme „Pitaj” je prikazano @@ -1310,6 +1310,9 @@ Ako ovo omogućite, mogu biti otključani viši kvaliteti videa" Podešavanja GmsCorea Podešavanja za GmsCore + + Ako ste nedavno promenili podatke za prijavu na nalog, deinstalirajte i ponovo instalirajte MicroG. + Zaobiđi URL preusmeravanja URL preusmeravanja se zaobilaze 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 2d37d78ef..8329c5c01 100644 --- a/patches/src/main/resources/addresources/values-sr-rSP/strings.xml +++ b/patches/src/main/resources/addresources/values-sr-rSP/strings.xml @@ -524,7 +524,7 @@ Second \"item\" text" Дугме „Хвала” је приказано - Сакриј „Питај” + Сакриј дугме „Питај” Дугме „Питај” је скривено Дугме „Питај” је приказано @@ -1310,6 +1310,9 @@ Second \"item\" text" Подешавања GmsCore-а Подешавања за GmsCore + + Ако сте недавно променили податке за пријаву на налог, деинсталирајте и поново инсталирајте MicroG. + Заобиђи URL преусмеравања URL преусмеравања се заобилазе 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 76e6039cf..66d125d5a 100644 --- a/patches/src/main/resources/addresources/values-sv-rSE/strings.xml +++ b/patches/src/main/resources/addresources/values-sv-rSE/strings.xml @@ -1310,6 +1310,9 @@ Att aktivera detta kan låsa upp högre videokvalitet" GmsCore inställningar Inställningar för GmsCore + + Om du nyligen har ändrat dina inloggningsuppgifter, avinstallera och installera om MicroG. + Bypass URL omdirigerar URL-omdirigeringar förbigås 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-sw-rKE/strings.xml +++ b/patches/src/main/resources/addresources/values-sw-rKE/strings.xml @@ -197,6 +197,8 @@ 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-ta-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-ta-rIN/strings.xml @@ -197,6 +197,8 @@ 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-te-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-te-rIN/strings.xml @@ -197,6 +197,8 @@ 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 3a74e93bb..6eef0c014 100644 --- a/patches/src/main/resources/addresources/values-th-rTH/strings.xml +++ b/patches/src/main/resources/addresources/values-th-rTH/strings.xml @@ -1309,6 +1309,9 @@ User id ของคุณเหมือนกับรหัสผ่าน การตั้งค่า GmsCore การตั้งค่าสำหรับ GmsCore + + หากคุณเพิ่งเปลี่ยนรายละเอียดการเข้าสู่ระบบบัญชีของคุณ ให้ถอนการติดตั้งและติดตั้ง MicroG ใหม่อีกครั้ง + เลี่ยงการเปลี่ยนเส้นทาง URL การเปลี่ยนเส้นทาง URL ถูกเลี่ยง 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 74a49e751..3c5eda1c9 100644 --- a/patches/src/main/resources/addresources/values-tr-rTR/strings.xml +++ b/patches/src/main/resources/addresources/values-tr-rTR/strings.xml @@ -1311,6 +1311,9 @@ Bunu etkinleştirmek daha yüksek video kalitelerini açabilir" GmsCore Ayarları GmsCore için ayarlar + + Yakın zamanda hesap giriş bilgilerinizi değiştirdiyseniz MicroG\'yi kaldırıp yeniden yükleyin. + URL yönlendirmelerini atla URL yönlendirmeleri atlanıyor 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 4c7145f4c..98eb7eabd 100644 --- a/patches/src/main/resources/addresources/values-uk-rUA/strings.xml +++ b/patches/src/main/resources/addresources/values-uk-rUA/strings.xml @@ -1310,6 +1310,9 @@ Second \"item\" text" Налаштування GmsCore Відкрити GmsCore для налаштування та входу в обліковий запис Google + + Якщо ви нещодавно змінили дані для входу у свій обліковий запис, видаліть і повторно встановіть MicroG. + Обхід URL переадресацій URL переадресації обходяться 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-ur-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-ur-rIN/strings.xml @@ -197,6 +197,8 @@ 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-uz-rUZ/strings.xml +++ b/patches/src/main/resources/addresources/values-uz-rUZ/strings.xml @@ -197,6 +197,8 @@ 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 9f8488e0c..adad5e60d 100644 --- a/patches/src/main/resources/addresources/values-vi-rVN/strings.xml +++ b/patches/src/main/resources/addresources/values-vi-rVN/strings.xml @@ -120,19 +120,19 @@ Bạn sẽ không được thông báo về bất kỳ sự kiện bất ngờ n Ẩn các thẻ album - Các thẻ album bị ẩn + Các thẻ album đã bị ẩn Các thẻ album được hiển thị Ẩn hộp chiến dịch gây quỹ - Hộp chiến dịch gây quỹ bị ẩn + Hộp chiến dịch gây quỹ đã bị ẩn Hộp chiến dịch gây quỹ được hiển thị Ẩn nút micrô nổi Nút micrô bị ẩn Nút micrô được hiển thị Ẩn hình mờ của kênh - Hình mờ bị ẩn + Hình mờ đã bị ẩn Hình mờ được hiển thị Ẩn các kệ ngang - "Kệ bị ẩn, chẳng hạn như: + "Kệ đã bị ẩn, chẳng hạn như: • Tin tức nóng • Tiếp tục xem • Khám phá thêm kênh @@ -142,115 +142,115 @@ Bạn sẽ không được thông báo về bất kỳ sự kiện bất ngờ n Ẩn nút Tham gia - Nút bị ẩn + Nút đã bị ẩn Nút được hiển thị Ẩn kệ \'Dành cho bạn\' - Kệ trên trang kênh bị ẩn + Kệ trên trang kênh đã bị ẩn Kệ trên trang kênh được hiển thị Ẩn nút \'Thông báo cho tôi\' - Nút bị ẩn + Nút đã bị ẩn Nút được hiển thị Ẩn nhãn \'Mọi người cũng đã xem\' - Nhãn bị ẩn + Nhãn đã bị ẩn Nhãn được hiển thị Ẩn nút \'Hiện thêm\' - Nút bị ẩn + Nút đã bị ẩn Nút được hiển thị Ẩn phản ứng theo thời gian - Phản ứng theo thời gian bị ẩn + Phản ứng theo thời gian đã bị ẩn Phản ứng theo thời gian được hiển thị Ẩn nguyên tắc của kênh - Nguyên tắc của kênh bị ẩn + Nguyên tắc của kênh đã bị ẩn Nguyên tắc của kênh được hiển thị Ẩn kệ danh mục được đề xuất - Kệ danh mục được đề xuất bị ẩn + Kệ danh mục được đề xuất đã bị ẩn Kệ danh mục được đề xuất được hiển thị Ẩn thẻ có thể mở rộng bên dưới video - Thẻ có thể mở rộng bị ẩn + Thẻ có thể mở rộng đã bị ẩn Thẻ có thể mở rộng được hiển thị Ẩn bài đăng cộng đồng - Bài đăng cộng đồng bị ẩn + Bài đăng cộng đồng đã bị ẩn Bài đăng cộng đồng được hiển thị Ẩn biểu ngữ vắn tắt - Biểu ngữ vắn tắt bị ẩn + Biểu ngữ vắn tắt đã bị ẩn Biểu ngữ vắn tắt được hiển thị Ẩn phần phim - Phần phim bị ẩn + Phần phim đã bị ẩn Phần phim được hiển thị Ẩn khảo sát ở bảng tin - Khảo sát ở bảng tin bị ẩn + Khảo sát ở bảng tin đã bị ẩn Khảo sát ở bảng tin được hiển thị Ẩn nguyên tắc cộng đồng - Nguyên tắc cộng đồng bị ẩn - Nguyên tắc cộng đồng được hiện + Nguyên tắc cộng đồng đã bị ẩn + Nguyên tắc cộng đồng được hiển thị Ẩn nguyên tắc cộng đồng cho người đăng ký - Nguyên tắc cộng đồng cho người đăng ký bị ẩn + Nguyên tắc cộng đồng cho người đăng ký đã bị ẩn Nguyên tắc cộng đồng dành cho người đăng ký được hiển thị Ẩn kệ hội viên kênh - Kệ hội viên kênh bị ẩn + Kệ hội viên kênh đã bị ẩn Kệ hội viên kênh được hiển thị Ẩn hộp khẩn cấp - Hộp khẩn cấp được bị ẩn + Hộp khẩn cấp đã bị ẩn Hộp khẩn cấp được hiển thị Ẩn bảng thông tin - Bảng thông tin bị ẩn + Bảng thông tin đã bị ẩn Bảng thông tin được hiển thị Ẩn bảng thông tin y tế - Bảng thông tin y tế bị ẩn + Bảng thông tin y tế đã bị ẩn Bảng thông tin y tế được hiển thị Ẩn nút kênh - Nút kênh bị ẩn + Nút kênh đã bị ẩn Nút kênh được hiển thị Ẩn Playables - Playables bị ẩn - Playables được hiển thị + Chơi game đã bị ẩn + Chơi game được hiển thị Ẩn các hành động nhanh khi ở toàn màn hình - Hành động nhanh bị ẩn + Hành động nhanh đã bị ẩn Hành động nhanh được hiển thị Ẩn các video liên quan trong hành động nhanh - Các video liên quan bị ẩn + Các video liên quan đã bị ẩn Các video liên quan được hiển thị Ẩn kệ hình ảnh từ kết quả tìm kiếm - Kệ hình ảnh bị ẩn + Kệ hình ảnh đã bị ẩn Kệ hình ảnh được hiển thị Ẩn bài đăng mới nhất - Bài đăng mới nhất bị ẩn + Bài đăng mới nhất đã bị ẩn Bài đăng mới nhất được hiển thị Ẩn danh sách phát tổng hợp - Danh sách phát tổng hợp bị ẩn + Danh sách phát tổng hợp đã bị ẩn Danh sách phát tổng hợp được hiển thị Ẩn thẻ nghệ sĩ - Thẻ nghệ sĩ bị ẩn + Thẻ nghệ sĩ đã bị ẩn Thẻ nghệ sĩ được hiển thị Ẩn \'Bản tóm tắt video do AI tạo\' - Phần tóm tắt video bị ẩn + Phần tóm tắt video đã bị ẩn Phần tóm tắt video được hiển thị Ẩn Thuộc tính - Phần Địa điểm nổi bật, Trò chơi, Âm nhạc và Người được đề cập bị ẩn + Phần Địa điểm nổi bật, Trò chơi, Âm nhạc và Người được đề cập đã bị ẩn Phần Địa điểm nổi bật, Trò chơi, Âm nhạc và Người được đề cập được hiển thị Ẩn Chương - Phần chương bị ẩn + Phần chương đã bị ẩn Phần chương được hiển thị Ẩn \'Cách nội dung này được tạo ra\' - Phần cách nội dung được tạo ra bị ẩn + Phần cách nội dung được tạo ra đã bị ẩn Phần cách nội dung được tạo ra được hiển thị Ẩn \'Khám phá podcast\' - Phần Khám phá podcast bị ẩn + Phần Khám phá podcast đã bị ẩn Phần Khám phá podcast được hiển thị Ẩn thẻ Thông tin - Phần thẻ thông tin bị ẩn - Phần thẻ thông tin được hiện + Phần thẻ thông tin đã bị ẩn + Phần thẻ thông tin được hiển thị Ẩn \'Khái niệm chính\' - Phần Khái niệm chính bị ẩn + Phần Khái niệm chính đã bị ẩn Phần Khái niệm chính được hiển thị Ẩn Bản chép lời - Phần bản chép lời bị ẩn + Phần bản chép lời đã bị ẩn Phần bản chép lời được hiển thị Mô tả video Ẩn hoặc hiện các thành phần mô tả video @@ -268,32 +268,32 @@ Bạn sẽ không được thông báo về bất kỳ sự kiện bất ngờ n Bình luận Ẩn hoặc hiện các thành phần bình luận Ẩn Tóm tắt Trò chuyện AI - Tóm tắt trò chuyện bị ẩn + Tóm tắt trò chuyện đã bị ẩn Tóm tắt trò chuyện được hiển thị Ẩn tóm tắt Bình luận AI - Tóm tắt bình luận bị ẩn + Tóm tắt bình luận đã bị ẩn Tóm tắt bình luận được hiển thị Ẩn tiêu đề \'Bình luận của hội viên\' - Tiêu đề bình luận của hội viên bị ẩn + Tiêu đề bình luận của hội viên đã bị ẩn Tiêu đề bình luận của hội viên được hiển thị Ẩn phần bình luận - Phần Bình luận bị ẩn + Phần Bình luận đã bị ẩn Phần Bình luận được hiển thị Ẩn nút \'Tạo video ngắn\' - Nút Tạo video ngắn bị ẩn + Nút Tạo video ngắn đã bị ẩn Nút Tạo video ngắn được hiển thị Ẩn nút biểu tượng cảm xúc và dấu thời gian - Nút biểu tượng cảm xúc và dấu thời gian bị ẩn + Nút biểu tượng cảm xúc và dấu thời gian đã bị ẩn Nút biểu tượng cảm xúc và dấu thời gian được hiển thị Ẩn xem trước bình luận - Xem trước bình luận bị ẩn + Xem trước bình luận đã bị ẩn Xem trước bình luận được hiển thị Ẩn nút Cảm ơn - Nút cảm ơn bị ẩn + Nút cảm ơn đã bị ẩn Nút cảm ơn được hiển thị Ẩn YouTube Doodles - Thanh tìm kiếm Doodles bị ẩn + Thanh tìm kiếm Doodles đã bị ẩn Thanh tìm kiếm Doodles được hiển thị "YouTube Doodles chỉ xuất hiện vào một số ngày nhất định trong năm. @@ -345,79 +345,79 @@ Hạn chế Ẩn quảng cáo chung - Quảng cáo chung được ẩn - Quảng cáo chung được hiện + Quảng cáo chung đã bị ẩn + Quảng cáo chung được hiển thị Ẩn quảng cáo toàn màn hình - "Quảng cáo toàn màn hình bị ẩn + "Quảng cáo toàn màn hình đã bị ẩn Tính năng này chỉ khả dụng cho các thiết bị cũ hơn" - Quảng cáo toàn màn hình được hiện + Quảng cáo toàn màn hình được hiển thị Ẩn quảng cáo có nút - Quảng cáo có nút được ẩn - Quảng cáo có nút được hiện + Quảng cáo có nút đã bị ẩn + Quảng cáo có nút được hiển thị Ẩn nhãn quảng cáo được tài trợ - Nhãn quảng cáo được tài trợ được ẩn - Nhãn quảng cáo được tài trợ được hiện + Nhãn quảng cáo được tài trợ đã bị ẩn + Nhãn quảng cáo được tài trợ được hiển thị Ẩn thẻ tự tài trợ - Thẻ được tài trợ được ẩn - Thẻ được tài trợ được hiện + Thẻ được tài trợ đã bị ẩn + Thẻ được tài trợ được hiển thị Ẩn biểu ngữ \'Xem sản phẩm\' - Biểu ngữ được ẩn - Biểu ngữ được hiện + Biểu ngữ đã bị ẩn + Biểu ngữ được hiển thị Ẩn biểu ngữ cửa hàng ở cuối màn hình - Biểu ngữ Cửa hàng bị ẩn - Biểu ngữ Cửa hàng được hiện + Biểu ngữ Cửa hàng đã bị ẩn + Biểu ngữ Cửa hàng được hiển thị Ẩn kệ cửa hàng - Kệ cửa hàng được ẩn - Kệ cửa hàng được hiện + Kệ cửa hàng đã bị ẩn + Kệ cửa hàng được hiển thị Ẩn các liên kết mua hàng trong mô tả video - Các liên kết mua sắm trong phần mô tả video được ẩn - Các liên kết mua sắm trong phần mô tả video được hiện + Các liên kết mua sắm trong phần mô tả video đã bị ẩn + Các liên kết mua sắm trong phần mô tả video được hiển thị Ẩn nút \'Đến Mua sắm\' trên trang của kênh - Nút trên trang kênh được ẩn - Nút trên trang kênh được hiện + Nút trên trang kênh đã bị ẩn + Nút trên trang kênh được hiển thị Ẩn kết quả tìm kiếm từ web - Kết quả tìm kiếm từ web được ẩn - Kết quả tìm kiếm từ web được hiện + Kết quả tìm kiếm từ web đã bị ẩn + Kết quả tìm kiếm từ web được hiển thị Ẩn biểu ngữ hàng hoá - Biểu ngữ hàng hóa được ẩn - Biểu ngữ hàng hóa được hiện + Biểu ngữ hàng hóa đã bị ẩn + Biểu ngữ hàng hóa được hiển thị Ẩn QC toàn màn hình chỉ hoạt động với các thiết bị cũ Ẩn quảng cáo YouTube Premium - Quảng cáo Youtube Premium bên dưới video được ẩn - Quảng cáo Youtube Premium bên dưới video được hiện + Quảng cáo Youtube Premium bên dưới video đã bị ẩn + Quảng cáo Youtube Premium bên dưới video được hiển thị Ẩn quảng cáo trên video - Quảng cáo trên video được ẩn - Quảng cáo trên video được hiện + Quảng cáo trên video đã bị ẩn + Quảng cáo trên video được hiển thị Đã chép URL vào bảng nhớ tạm Đã chép URL với dấu thời gian Hiện nút sao chép url video - Nút được hiện. Chạm để sao chép video URL. Chạm và giữ để sao chép với dấu thời gian - Nút không được hiện + Nút được hiển thị. Chạm để sao chép video URL. Chạm và giữ để sao chép với dấu thời gian + Nút không được hiển thị Hiện nút sao chép URL với dấu thời gian - Nút được hiện. Chạm để sao chép video URL với dấu thời gian. Chạm và giữ để sao chép video không dấu thời gian - Nút không được hiện + Nút được hiển thị. Chạm để sao chép video URL với dấu thời gian. Chạm và giữ để sao chép video không kèm theo dấu thời gian + Nút không được hiển thị Loại bỏ hộp thoại cảnh báo trước khi xem Hộp thoại sẽ bị loại bỏ - Hộp thoại sẽ được hiện + Hộp thoại sẽ được hiển thị Điều này sẽ không qua mặt hạn chế độ tuổi. Nó chỉ tự động chấp nhận. Tải xuống bên ngoài Các thiết lập trình tải xuống bên ngoài Hiện nút tải xuống bên ngoài - Nút tải xuống trong trình phát được hiện - Không hiện nút tải xuống trong trình phát + Nút tải xuống trong trình phát được hiển thị + Nút tải xuống trong trình phát không được hiển thị Thay thế nút hành động Tải xuống Nút tải xuống mở trình tải xuống bên ngoài @@ -499,65 +499,65 @@ Tính năng này chỉ khả dụng cho các thiết bị cũ hơn" Nút Thích và Đăng ký sẽ không phát sáng khi được đề cập đến Nút Thích và Đăng ký sẽ phát sáng khi được đề cập đến Ẩn Thích và Không thích - Các nút Thích và Không thích được ẩn - Các nút Thích và Không thích được hiện + Các nút Thích và Không thích đã bị ẩn + Các nút Thích và Không thích được hiển thị Ẩn Chia sẻ - Nút chia sẻ được ẩn - Nút chia sẻ được hiện + Nút chia sẻ đã bị ẩn + Nút chia sẻ được hiển thị Ẩn Báo cáo - Nút báo cáo được ẩn - Nút báo cáo được hiện + Nút báo cáo đã bị ẩn + Nút báo cáo được hiển thị Ẩn Phối lại - Nút Phối lại được ẩn - Nút Phối lại được hiện + Nút Phối lại đã bị ẩn + Nút Phối lại được hiển thị Ẩn Tải xuống - Nút tải xuống được ẩn - Nút tải xuống được hiện + Nút tải xuống đã bị ẩn + Nút tải xuống được hiển thị Ẩn Cảm ơn - Nút cảm ơn được ẩn - Nút cảm ơn được hiện + Nút cảm ơn đã bị ẩn + Nút cảm ơn được hiển thị Ẩn Hỏi - Nút Hỏi đã ẩn - Nút Hỏi đang hiện + Nút Hỏi đã bị ẩn + Nút Hỏi được hiển thị Ẩn Tạo đoạn video - Nút tạo đoạn video được ẩn - Nút tạo đoạn video được hiện + Nút tạo đoạn video đã bị ẩn + Nút tạo đoạn video được hiển thị Ẩn Lưu vào danh sách phát - Nút lưu vào danh sách phát được ẩn - Nút lưu vào danh sách phát được hiện + Nút lưu vào danh sách phát đã bị ẩn + Nút lưu vào danh sách phát được hiển thị Các nút điều hướng Ẩn hoặc hiện các nút ở thanh điều hướng Ẩn Trang chính - Nút trang chính được ẩn - Nút trang chính được hiện + Nút trang chính đã bị ẩn + Nút trang chính được hiển thị Ẩn Shorts - Nút Shorts được ẩn - Nút Shorts được hiện + Nút Shorts đã bị ẩn + Nút Shorts được hiển thị Ẩn Tạo mới - Nút tạo được ẩn - Nút tạo được hiện + Nút tạo đã bị ẩn + Nút tạo được hiển thị Ẩn Đăng ký - Nút đăng ký được ẩn - Nút Đăng ký được hiện + Nút đăng ký đã bị ẩn + Nút Đăng ký được hiển thị Ẩn Thông báo - Nút Thông báo được ẩn - Nút Thông báo được hiện + Nút Thông báo đã bị ẩn + Nút Thông báo được hiển thị Chuyển vị nút Tạo với nút Thông báo "Nút tạo được chuyển đổi với nút Thông báo @@ -569,7 +569,7 @@ Lưu ý: Bật tính năng này cũng sẽ tự động ẩn quảng cáo video" Nếu việc thay đổi cài đặt này không có hiệu lực, hãy thử chuyển sang chế độ Ẩn danh." Ẩn các nhãn nút điều hướng Các nhãn được ẩn - Các nhãn được hiện + Các nhãn được hiển thị Vô hiệu hóa thanh trạng thái trong suốt Thanh trạng thái là đục Thanh trạng thái là đục hoặc trong mờ @@ -586,79 +586,79 @@ Nếu việc thay đổi cài đặt này không có hiệu lực, hãy thử ch Ẩn hoặc hiện các mục trình đơn nổi Ẩn Phụ đề - Trình đơn phụ đề được ẩn - Trình đơn phụ đề được hiện + Trình đơn phụ đề đã bị ẩn + Trình đơn phụ đề được hiển thị Ẩn cài đặt bổ sung - Trình đơn cài đặt bổ sung được ẩn - Trình đơn cài đặt bổ sung được hiện + Trình đơn cài đặt bổ sung đã bị ẩn + Trình đơn cài đặt bổ sung được hiển thị Ẩn Hẹn giờ ngủ - Trình đơn Hẹn giờ ngủ được ẩn - Trình đơn Hẹn giờ ngủ được hiện + Trình đơn Hẹn giờ ngủ đã bị ẩn + Trình đơn Hẹn giờ ngủ được hiển thị Ẩn lặp video - Trình đơn lặp video được ẩn - Trình đơn lặp video được hiện + Trình đơn lặp video đã bị ẩn + Trình đơn lặp video được hiển thị Ẩn chế độ môi trường - Trình đơn chế độ môi trường được ẩn - Trình đơn chế độ môi trường được hiện + Trình đơn chế độ môi trường đã bị ẩn + Trình đơn chế độ môi trường được hiển thị Ẩn Âm lượng ổn định - Trình đơn Âm lượng ổn định được hiện - Trình đơn Âm lượng ổn định được ẩn + Trình đơn Âm lượng ổn định được hiển thị + Trình đơn Âm lượng ổn định đã bị ẩn Ẩn Trợ giúp & Phản hồi - Trình đơn trợ giúp & phản hồi được ẩn - Trình đơn trợ giúp & phản hồi được hiện + Trình đơn trợ giúp & phản hồi đã bị ẩn + Trình đơn trợ giúp & phản hồi được hiển thị Ẩn Tốc độ phát - Trình đơn tốc độ phát được ẩn - Trình đơn tốc độ phát được hiện + Trình đơn tốc độ phát đã bị ẩn + Trình đơn tốc độ phát được hiển thị Ẩn Thông tin thêm - Trình đơn thông tin thêm được ẩn - Trình đơn thông tin thêm được hiện + Trình đơn thông tin thêm đã bị ẩn + Trình đơn thông tin thêm được hiển thị Ẩn Khóa màn hình - Trình đơn khóa màn hình được ẩn - Trình đơn khóa màn hình được hiện + Trình đơn khóa màn hình đã bị ẩn + Trình đơn khóa màn hình được hiển thị Ẩn Bản âm thanh - Nút bản âm thanh được ẩn - Nút bản âm thanh được hiện + Nút bản âm thanh đã bị ẩn + Nút bản âm thanh được hiển thị - "Trình đơn bản âm thanh bị ẩn + "Trình đơn bản âm thanh đã bị ẩn -Để hiển thị Trình đơn bản âm thanh, hãy thay đổi 'Giả mạo luồng phát video trực tuyến' thành iOS TV" +Để hiển thị trình đơn Bản âm thanh, hãy thay đổi 'Giả mạo luồng phát video' thành iOS TV" Ẩn Xem trong thực tế ảo - Trình đơn xem trong thực tế ảo được ẩn - Trình đơn xem trong thực tế ảo được hiện + Trình đơn xem trong thực tế ảo đã bị ẩn + Trình đơn xem trong thực tế ảo được hiển thị Ẩn trình đơn chất lượng video dưới - Trình đơn chất lượng video bên dưới được ẩn - Trình đơn chất lượng video bên dưới được hiện + Trình đơn chất lượng video bên dưới đã bị ẩn + Trình đơn chất lượng video bên dưới được hiển thị Ẩn các nút Trước & Tiếp theo - Các nút được ẩn - Các nút được hiện + Các nút đã bị ẩn + Các nút được hiển thị Ẩn nút truyền - Nút Truyền được ẩn - Nút Truyền được hiện + Nút Truyền đã bị ẩn + Nút Truyền được hiển thị Ẩn nút Chú thích - Nút phụ đề được ẩn - Nút phụ đề được hiện + Nút phụ đề đã bị ẩn + Nút phụ đề được hiển thị Ẩn nút Phát tự động - Nút tự động phát được ẩn - Nút tự động phát được hiện + Nút tự động phát đã bị ẩn + Nút tự động phát được hiển thị Ẩn thẻ kết thúc màn hình - Thẻ kết thúc màn hình được ẩn - Thẻ kết thúc màn hình được hiện + Thẻ kết thúc màn hình đã bị ẩn + Thẻ kết thúc màn hình được hiển thị Tắt chế độ môi trường khi toàn màn hình @@ -667,8 +667,8 @@ Nếu việc thay đổi cài đặt này không có hiệu lực, hãy thử ch Ẩn thẻ thông tin - Thẻ thông tin được ẩn - Thẻ thông tin được hiện + Thẻ thông tin đã bị ẩn + Thẻ thông tin được hiển thị Tắt chuyển động cuộn số @@ -677,11 +677,11 @@ Nếu việc thay đổi cài đặt này không có hiệu lực, hãy thử ch Ẩn thanh tiến trình trong trình phát video - Thanh tiến trình trong trình phát video được ẩn - Thanh tiến trình trong trình phát video được hiện + Thanh tiến trình trong trình phát video đã bị ẩn + Thanh tiến trình trong trình phát video được hiển thị Ẩn thanh tiến trình trong hình thu nhỏ video - Thanh tiến trình hình thu nhỏ được ẩn - Thanh tiến trình hình thu nhỏ được hiện + Thanh tiến trình hình thu nhỏ đã bị ẩn + Thanh tiến trình hình thu nhỏ được hiển thị Trình phát Shorts @@ -698,111 +698,111 @@ Nếu việc thay đổi cài đặt này không có hiệu lực, hãy thử ch Bị ẩn trong kết quả tìm kiếm Được hiện trong kết quả tìm kiếm Ẩn Shorts trong lịch sử xem - Bị ẩn trong lịch sử xem + Đã ẩn trong lịch sử xem Đã hiện trong lịch sử xem Ẩn nút Tham gia - Nút tham gia được ẩn - Nút tham gia được hiện + Nút tham gia đã bị ẩn + Nút tham gia được hiển thị Ẩn nút Đăng ký - Nút đăng ký được ẩn - Nút đăng ký được hiện + Nút đăng ký đã bị ẩn + Nút đăng ký được hiển thị Ẩn các nút phủ lên khi tạm dừng - Các nút phủ lên khi tạm dừng được ẩn - Các nút phủ lên khi tạm dừng được hiện + Các nút phủ lên khi tạm dừng đã bị ẩn + Các nút phủ lên khi tạm dừng được hiển thị Ẩn nút Cửa hàng - Nút mua sắm được ẩn - Nút mua sắm được hiện + Nút mua sắm đã bị ẩn + Nút mua sắm được hiển thị Ẩn nút Mua Super Thanks - Nút Super Thanks bị ẩn - Nút Super Thanks được hiện + Nút Super Thanks đã bị ẩn + Nút Super Thanks được hiển thị Ẩn sản phẩm được gắn thê - Sản phẩm được gắn thẻ được ẩn - Sản phẩm được gắn thẻ được hiện + Sản phẩm được gắn thẻ đã bị ẩn + Sản phẩm được gắn thẻ được hiển thị Ẩn nhãn vị trí - Nhãn vị trí được ẩn - Nhãn vị trí được hiện + Nhãn vị trí đã bị ẩn + Nhãn vị trí được hiển thị Ẩn nút Lưu âm thanh - Nút lưu nhạc được ẩn - Nút lưu nhạc được hiện + Nút lưu nhạc đã bị ẩn + Nút lưu nhạc được hiển thị Ẩn nút Sử dụng mẫu - Nút sử dụng mẫu được ẩn - Nút sử dụng mẫu được hiện + Nút sử dụng mẫu đã bị ẩn + Nút sử dụng mẫu được hiển thị Ẩn nút Sắp diễn ra - Nút sắp tới được ẩn - Nút sắp tới được hiện + Nút sắp diễn ra đã bị ẩn + Nút sắp diễn ra được hiển thị Ẩn nút Màn hình xanh - Nút phông xanh được ẩn - Nút phông xanh được hiện + Nút phông xanh đã bị ẩn + Nút phông xanh được hiển thị Ẩn nút hashtag - Nút hashtag được ẩn - Nút hashtag được hiện + Nút hashtag đã bị ẩn + Nút hashtag được hiển thị Ẩn đề xuất tìm kiếm - Đề xuất tìm kiếm được ẩn - Đề xuất tìm kiếm được hiện + Đề xuất tìm kiếm đã bị ẩn + Đề xuất tìm kiếm được hiển thị Ẩn nhãn dán - Nhãn dán được ẩn - Nhãn dán được hiện + Nhãn dán đã bị ẩn + Nhãn dán được hiển thị Ẩn hiệu ứng thị giác nút Thích - Đài phun thích được ẩn - Đài phun thích được hiện + Hiệu ứng đài phun nút thích đã bị ẩn + Hiệu ứng đài phun nút thích được hiển thị Ẩn nút Thích - Nút thích được ẩn - Nút thích được hiện + Nút thích đã bị ẩn + Nút thích được hiển thị Ẩn nút Không thích - Nút không thích được ẩn - Nút không thích được hiện + Nút không thích đã bị ẩn + Nút không thích được hiển thị Ẩn nút Bình luận - Nút bình luận được ẩn - Nút bình luận được hiện + Nút bình luận đã bị ẩn + Nút bình luận được hiển thị Ẩn nút Phối lại - Nút phối lại được ẩn - Nút phối lại được hiện + Nút phối lại đã bị ẩn + Nút phối lại được hiển thị Ẩn nút Chia sẻ - Nút chia sẻ được ẩn - Nút chia sẻ được hiện + Nút chia sẻ đã bị ẩn + Nút chia sẻ được hiển thị Ẩn bảng thông tin - Bảng thông tin được ẩn - Bảng thông tin được hiện + Bảng thông tin đã bị ẩn + Bảng thông tin được hiển thị Ẩn nút kênh - Nút kênh được ẩn - Nút kênh được hiện + Nút kênh đã bị ẩn + Nút kênh được hiển thị Ẩn tiêu đề video - Tiêu đề được ẩn - Tiêu đề được hiện + Tiêu đề đã bị ẩn + Tiêu đề được hiển thị Ẩn nhãn siêu dữ liệu âm thanh - Nhãn siêu dữ liệu được ẩn - Nhãn siêu dữ liệu được hiện + Nhãn siêu dữ liệu đã bị ẩn + Nhãn siêu dữ liệu được hiển thị Ẩn nhãn liên kết toàn video - Nhãn liên kết video được ẩn - Nhãn liên kết video được hiện + Nhãn liên kết video đã bị ẩn + Nhãn liên kết video được hiển thị Ẩn nút âm thanh - Nút âm thanh được ẩn - Nút âm thanh được hiện + Nút âm thanh đã bị ẩn + Nút âm thanh được hiển thị Ẩn thanh điều hướng - Thanh điều hướng được ẩn - Thanh điều hướng được hiện + Thanh điều hướng đã bị ẩn + Thanh điều hướng được hiển thị Ẩn video được đề xuất ở màn hình kết thúc - "Video được đề xuất ở màn hình kết thúc bị ẩn khi tự động phát bị tắt + "Video được đề xuất ở màn hình kết thúc đã bị ẩn khi tự động phát bị tắt Có thể thay đổi Tự động phát trong phần cài đặt YouTube: -Cài đặt → Phát lại → Tự động phát video tiếp theo" - Video được đề xuất ở màn hình kết thúc được hiện +Cài đặt → Phát → Tự động phát video tiếp theo" + Video được đề xuất ở màn hình kết thúc được hiển thị - Ẩn mốc thời gian video - Mốc thời gian được ẩn - Mốc thời gian được hiện + Ẩn dấu thời gian video + Dấu thời gian đã bị ẩn + Dấu thời gian được hiển thị Ẩn bảng tự bật lên trên trình phát - Bảng bật lên trên trình phát được ẩn - Bảng bật lên trên trình phát được hiện + Bảng bật lên trên trình phát đã bị ẩn + Bảng bật lên trên trình phát được hiển thị Thoát chế độ toàn màn hình khi kết thúc video @@ -823,24 +823,24 @@ Cài đặt → Phát lại → Tự động phát video tiếp theo" - Lượt ko thích tạm thời ko khả dụng (API hết giờ) + Lượt không thích tạm thời không khả dụng (API hết thời gian chờ) Lượt không thích không khả dụng ( trạng thái %d) Lượt không thích không khả dụng (giới hạn API máy khách) Số lượt không thích không khả dụng (%s) - Tải lại video để không thích bằng ReturnYouTubeDislike + Tải lại video để bình chọn bằng Return YouTube Dislike Bị ẩn bởi chủ sở hữu - Số lượt không thích được hiện - Số lượt không thích không được hiện + Số lượt không thích được hiển thị + Số lượt không thích không được hiển thị Hiện số lượt không thích trong Shorts - "Số lượt không thích trên Shorts được hiện + "Số lượt không thích trên Shorts được hiển thị Hạn chế: Số lượt không thích có thể không xuất hiện ở chế độ ẩn danh" - Số lượt không thích trên Shorts không được hiện + Số lượt không thích trên Shorts không được hiển thị Số lượt không thích theo phần trăm - Số lượt không thích được hiện dưới dạng phần trăm - Số lượt không thích được hiện dưới dạng số + Số lượt không thích được hiển thị dưới dạng phần trăm + Số lượt không thích được hiển thị dưới dạng số Nút Thích thu gọn Nút thích được thiết kế để tối ưu độ rộng @@ -849,8 +849,8 @@ Hạn chế: Số lượt không thích có thể không xuất hiện ở chế Video có lượt thích bị tắt hiển thị số lượt thích ước tính Không hiển thị lượt thích ước tính Hiện thông báo nổi nếu API không khả dụng - Thông báo nổi được hiện nếu Return YouTube Dislike không khả dụng - Thông báo nổi không được hiện nếu Return YouTube Dislike không khả dụng + Thông báo nổi được hiển thị nếu Return YouTube Dislike không khả dụng + Thông báo nổi không được hiển thị nếu Return YouTube Dislike không khả dụng Giới thiệu Dữ liệu được cung cấp bởi API Return YouTube Dislike. Nhấn vào đây để tìm hiểu thêm @@ -896,8 +896,8 @@ Tính năng này hoạt động tốt nhất với chất lượng video 720p tr SponsorBlock là một hệ thống cộng đồng để bỏ qua các phần quảng cáo trong video YouTube Giao diện Hiện nút bình chọn - Nút bình chọn phân đoạn được hiện - Nút bình chọn phân đoạn không được hiện + Nút bình chọn phân đoạn được hiển thị + Nút bình chọn phân đoạn không được hiển thị Sử dụng bố cục vuông Các nút và điều khiển có hình vuông Các nút và điều khiển được bo tròn @@ -907,17 +907,17 @@ Tính năng này hoạt động tốt nhất với chất lượng video 720p tr Nút bỏ qua phân đoạn được thiết kế để tối ưu ngoại hình tốt nhất Tự động ẩn nút Bỏ qua Nút bỏ qua ẩn sau vài giây - Nút bỏ qua được hiện cho toàn bộ phân đoạn + Nút bỏ qua được hiển thị cho toàn bộ phân đoạn Hiện một thông báo nổi khi bỏ qua - Hiện thông báo nổi mỗi khi tự động bỏ qua phân đoạn. Nhấn vào đây để xem ví dụ - Thông báo nổi không được hiện. Nhấn vào đây để xem ví dụ + Hiển thị thông báo nổi mỗi khi tự động bỏ qua phân đoạn. Nhấn vào đây để xem ví dụ + Thông báo nổi không được hiển thị. Nhấn vào đây để xem ví dụ Hiện thời lượng video không có phân đoạn - Thời lượng video trừ đi tất cả phân đoạn, được hiện trong dấu ngoặc đơn bên cạnh thời lượng đầy đủ của video + Thời lượng video trừ đi tất cả phân đoạn, được hiển thị trong dấu ngoặc đơn bên cạnh thời lượng đầy đủ của video Thời lượng đầy đủ của video được hiện Tạo các phân đoạn mới Hiện nút Tạo phân đoạn mới - Nút tạo phân đoạn mới được hiện - Nút tạo phân đoạn mới không được hiện + Nút tạo phân đoạn mới được hiển thị + Nút tạo phân đoạn mới không được hiển thị Điều chỉnh bước tua của phân đoạn mới Số mili-giây của các nút điều chỉnh thay đổi khi tạo phân đoạn mới Giá trị phải là một số dương @@ -929,13 +929,13 @@ Tính năng này hoạt động tốt nhất với chất lượng video 720p tr Hiện cho tôi Chung Hiện một thông báo nổi nếu API không khả dụng - Thông báo nổi được hiện nếu SponsorBlock không khả dụng - Thông báo nổi không được hiện nếu SponsorBlock không khả dụng + Thông báo nổi được hiển thị nếu SponsorBlock không khả dụng + Thông báo nổi không được hiển thị nếu SponsorBlock không khả dụng Bật theo dõi số lần bỏ qua Để bảng xếp hạng SponsorBlock biết đã tiết kiệm bao nhiêu thời gian. Một tin nhắn được gửi đến bảng xếp hạng mỗi khi một phân đoạn được bỏ qua Theo dõi số lần bỏ qua được bật Thời lượng phân đoạn tối thiểu - Các phân đoạn ngắn hơn giá trị này (bằng giây) sẽ không được hiện hoặc bỏ qua + Các phân đoạn ngắn hơn giá trị này (bằng giây) sẽ không được hiển thị hoặc bị bỏ qua Thời lượng không hợp lệ Định danh người dùng riêng tư của bạn Mã này nên được giữ riêng tư. Nó giống như mật khẩu và không nên được chia sẻ với bất kỳ ai. Nếu ai đó có nó, họ có thể mạo danh bạn @@ -1020,7 +1020,7 @@ ID người dùng của bạn giống như mật khẩu và không bao giờ đ Đã tồn tại" Phân đoạn được gửi thành công - SponsorBlock tạm thời không khả dụng (API hết hạn) + SponsorBlock tạm thời không khả dụng (API hết thời gian chờ) SponsorBlock tạm thời không khả dụng (trạng thái %d) SponsorBlock tạm thời không khả dụng Không thể bình chọn cho phân đoạn (API hết hạn) @@ -1098,24 +1098,24 @@ Bạn đã sẵn sàng gửi?" "Thay đổi bao gồm: Bố cục máy tính bảng -• Bài đăng trên cộng đồng bị ẩn +• Bài đăng cộng đồng đã bị ẩn Bố cục ô tô • Shorts mở trong trình phát thông thường -• Bảng Feed được sắp xếp theo chủ đề và kênh" +• Bảng tin được sắp xếp theo chủ đề và kênh" Giả mạo phiên bản ứng dụng Phiên bản đã được giả mạo Phiên bản không được giả mạo - "Phiên bản ứng dụng sẽ bị giả mạo thành phiên bản YouTube cũ hơn. + "Phiên bản ứng dụng sẽ được giả mạo thành phiên bản YouTube cũ hơn. -Điều này sẽ thay đổi giao diện và tính năng của ứng dụng, nhưng có thể xảy ra các tác dụng phụ không xác định. +Điều này sẽ làm thay đổi giao diện và tính năng của ứng dụng, nhưng cũng có thể xảy ra các sự cố không xác định. -Nếu sau này tắt đi, bạn nên xóa dữ liệu ứng dụng để tránh lỗi giao diện." +Nếu tắt đi sau đó, bạn nên xóa dữ liệu ứng dụng để tránh phát sinh lỗi giao diện." - Phiên bản giả mạo mục tiêu + Phiên bản giả mạo đích 19.35.36 - Khôi phục biểu tượng trình phát Shorts cũ 19.01.34 - Khôi phục biểu tượng điều hướng cũ @@ -1202,19 +1202,19 @@ Trình phát nhỏ có thể được kéo đến bất kỳ góc nào của mà Trình phát nhỏ có thể được kéo ra khỏi màn hình sang trái hoặc phải" Cử chỉ kéo ngang được tắt Ẩn các nút lớp phủ - Các nút lớp phủ bị ẩn - Các nút lớp phủ được hiện + Các nút lớp phủ đã bị ẩn + Các nút lớp phủ được hiển thị Ẩn các nút mở rộng và đóng - "Các nút bị ẩn + "Các nút đã bị ẩn Vuốt để mở rộng hoặc đóng" - Các nút mở rộng và đóng được hiện + Các nút mở rộng và đóng được hiển thị Ẩn văn bản phụ - Văn bản phụ được ẩn - Văn bản phụ được hiện + Văn bản phụ đã bị ẩn + Văn bản phụ được hiển thị Ẩn các nút bỏ quả đến tiếp và trước đó - Các nút bỏ quả đến tiếp và trước đó được ẩn - Các nút bỏ quả đến tiếp và trước đó được hiện + Các nút bỏ quả đến tiếp và trước đó đã bị ẩn + Các nút bỏ quả đến tiếp và trước đó được hiển thị Kích thước ban đầu Kích thước ban đầu trên màn hình, bằng pixel Pixel phải nằm giữa %1$s và %2$s @@ -1227,8 +1227,8 @@ Vuốt để mở rộng hoặc đóng" Màn hình tải sẽ có một nền màu dốc Màn hình tải sẽ có một nền màu đặc Bật màu tùy chỉnh thanh tiến trình - Màu tùy chỉnh thanh tiến trình được hiện - Màu gốc thanh tiến trình được hiện + Màu tùy chỉnh thanh tiến trình được hiển thị + Màu gốc thanh tiến trình được hiển thị Tùy chỉnh màu thanh tìm kiếm Màu của thanh tìm kiếm Tùy chỉnh màu sắc nổi bật của thanh tìm kiếm @@ -1257,12 +1257,12 @@ Bật tính năng này có thể khắc phục hình ảnh bị thiếu khi bị Chụp tĩnh "DeArrow cung cấp hình thu nhỏ có nguồn gốc từ cộng đồng cho video YouTube. Những hình thu nhỏ này thường liên quan hơn so với những hình thu nhỏ do YouTube cung cấp -Nếu được bật, URL video sẽ được gửi đến máy chủ API và không có dữ liệu nào khác được gửi. Nếu video không có hình thu nhỏ DeArrow, thì hình thu nhỏ gốc hoặc ảnh chụp tĩnh sẽ được hiện +Nếu được bật, URL video sẽ được gửi đến máy chủ API và không có dữ liệu nào khác được gửi. Nếu video không có hình thu nhỏ DeArrow, thì hình thu nhỏ gốc hoặc ảnh chụp tĩnh sẽ được hiển thị Nhấn vào đây để tìm hiểu thêm về DeArrow" Hiện một thông báo nổi nếu API không khả dụng - Thông báo nổi được hiện nếu DeArrow không khả dụng - Thông báo nổi không được hiện nếu DeArrow không khả dụng + Thông báo nổi được hiển thị nếu DeArrow không khả dụng + Thông báo nổi không được hiển thị nếu DeArrow không khả dụng Điểm cuối API DeArrow URL của điểm cuối bộ đệm hình thu nhỏ DeArrow Chụp tĩnh video @@ -1280,8 +1280,8 @@ Nhấn vào đây để tìm hiểu thêm về DeArrow" Hiện công bố của ReVanced - Thông báo khi khởi động được hiện - Thông báo khi khởi động không được hiện + Thông báo khi khởi động được hiển thị + Thông báo khi khởi động không được hiển thị Hiện công bố khi khởi chạy Kết nối đến nguồn cấp công bố thất bại Từ bỏ @@ -1298,18 +1298,21 @@ Nhấn vào đây để tìm hiểu thêm về DeArrow" Giả mạo kích thước thiết bị - "Kích thước thiết bị bị giả mạo + "Kích thước thiết bị đã được giả mạo -Chất lượng video cao hơn có thể được mở khóa nhưng bạn có thể gặp hiện tượng giật khi phát lại video, thời lượng pin giảm và các tác dụng phụ không xác định" - "Kích thước thiết bị không bị giả mạo +Chất lượng video cao hơn có thể được mở khóa nhưng bạn có thể gặp hiện tượng giật lag khi phát video, hao pin hơn và các sự cố không xác định" + "Kích thước thiết bị không được giả mạo Bật tính năng này có thể mở khóa chất lượng video cao hơn" - Bật tính năng này có thể làm video phát lắp, hao pin, và các tác dụng phụ chưa biết. + Bật tính năng này có thể làm giật lag khi phát video, hao pin, và các sự cố không xác định. Cài đặt GmsCore Các cài đặt cho GmsCore + + Nếu gần đây bạn đã cập nhật thông tin đăng nhập tài khoản của mình, hãy gỡ và cài đặt lại MicroG. + Vượt chuyển hướng URL Chuyển hướng URL được vượt @@ -1335,7 +1338,7 @@ Bật tính năng này có thể mở khóa chất lượng video cao hơn"Sử dụng ngôn ngữ âm thanh gốc Sử dụng âm thanh mặc định - Để sử dụng tính năng này, hãy thay đổi \'Giả mạo luồng video\' thành iOS TV + Để sử dụng tính năng này, hãy thay đổi \'Giả mạo luồng phát video\' thành iOS TV @@ -1357,13 +1360,13 @@ Bật tính năng này có thể mở khóa chất lượng video cao hơn" Hiện nút hộp thoại tốc độ phát - Nút được hiện - Nút không được hiện + Nút được hiển thị + Nút không được hiển thị Trình đơn tốc độ phát tùy chỉnh - Trình đơn tốc độ phát tùy chỉnh được hiện - Trình đơn tốc độ phát tùy chỉnh không được hiện + Trình đơn tốc độ phát tùy chỉnh được hiển thị + Trình đơn tốc độ phát tùy chỉnh không được hiển thị Tốc độ phát tùy chỉnh Thêm hoặc thay đổi tốc độ phát tùy chỉnh Tốc độ tùy chỉnh phải nhỏ hơn %s @@ -1386,8 +1389,8 @@ Bật tính năng này có thể mở khóa chất lượng video cao hơn" Hiện trình đơn chất lượng video nâng cao - Trình đơn chất lượng video nâng cao được hiện - Trình đơn chất lượng video nâng cao không được hiện + Trình đơn chất lượng video nâng cao được hiển thị + Trình đơn chất lượng video nâng cao không được hiển thị Bật vuốt để tua @@ -1395,34 +1398,34 @@ Bật tính năng này có thể mở khóa chất lượng video cao hơn"Vuốt để tua không được bật - Giả mạo luồng phát video trực tuyến - Giả mạo luồng video máy khách để ngăn ngừa sự cố khi phát nền - Giả mạo luồng phát video trực tuyến + Giả mạo luồng phát video + Giả mạo luồng video máy khách để ngăn ngừa sự cố phát + Giả mạo luồng phát video Luồng video đã được giả mạo - "Luồng video không bị giả mạo + "Luồng video không được giả mạo -Phát lại video có thể không hoạt động" - Việc tắt cài đặt này có thể gây ra sự cố phát nền video. +Có thể gặp sự cố phát video" + Việc tắt cài đặt này có thể gây ra sự cố phát video. Máy khách mặc định Buộc iOS AVC (H.264) Bộ giải mã video bị buộc thành AVC (H.264) Bộ giải mã video được xác định tự động - "Bật tính năng này có thể cải thiện thời lượng pin và khắc phục tình trạng giật lag khi phát lại. + "Bật tính năng này có thể cải thiện thời lượng pin và khắc phục tình trạng giật lag khi phát. -AVC có độ phân giải tối đa là 1080p, bộ giải mã âm thanh Opus không khả dụng và phát lại video sẽ sử dụng nhiều dữ liệu internet hơn VP9 hoặc AV1." - Tác dụng phụ của việc giả mạo iOS +AVC có độ phân giải tối đa là 1080p, bộ giải mã âm thanh Opus không khả dụng và phát video sẽ sử dụng nhiều dữ liệu di động hơn VP9 hoặc AV1." + Các hạn chế khi giả mạo iOS "• Phim hoặc video có trả phí có thể không phát được • Âm lượng ổn định không khả dụng • Video có thể kết thúc sớm hơn 1 giây" - Tác dụng phụ của việc giả mạo Android + Các hạn chế khi giả mạo Android "• Trình đơn bản âm thanh bị thiếu • Âm lượng ổn định không khả dụng • Tùy chọn âm thanh gốc không khả dụng" • Không có bộ giải mã video AV1 • Video dành cho trẻ em có thể không phát được khi đăng xuất hoặc ở chế độ ẩn danh Hiển thị trong Thống kê chi tiết - Loại máy khách được hiện trong Thống kê chi tiết - Máy khách bị ẩn trong Thống kê chi tiết + Loại máy khách được hiển thị trong Thống kê chi tiết + Máy khách đã bị ẩn trong Thống kê chi tiết Ngôn ngữ âm thanh mặc định của VR 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 7ab529d24..cded58f00 100644 --- a/patches/src/main/resources/addresources/values-zh-rCN/strings.xml +++ b/patches/src/main/resources/addresources/values-zh-rCN/strings.xml @@ -1315,6 +1315,9 @@ Second \"item\" text" GmsCore 设置 GmsCore 的设置 + + 如果您最近更改了帐户登录详细信息,请卸载并重新安装 MicroG。 + 绕过 URL 重定向 URL 重定向将被跳过 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 32994669f..c47b0d054 100644 --- a/patches/src/main/resources/addresources/values-zh-rTW/strings.xml +++ b/patches/src/main/resources/addresources/values-zh-rTW/strings.xml @@ -465,10 +465,12 @@ Second \"item\" text" 滑動覆蓋背景透明度 不透明度值介於 0 到 100 之間 滑動透明度必須介於 0 到 100 之間 + 音量和亮度控制的進度列顏色 滑動幅度臨界點 滑動幅度臨界點 音量滑動靈敏度 滑動一下音量調整的大小 + 垂直覆蓋(最小) 啟用滑動切換影片 在全螢幕模式下滑動將切換到下一部/上一部影片 在全螢幕模式下滑動將不會切換到下一部/上一部影片 @@ -510,6 +512,9 @@ Second \"item\" text" 已顯示「感謝」按鈕 + 隱藏詢問 + 詢問按鈕已隱藏 + 詢問按鈕已顯示 隱藏剪輯片段 已隱藏「剪輯片段」按鈕 @@ -1131,6 +1136,9 @@ Second \"item\" text" 稍後觀看 你的剪輯 一律變更起始頁面 + "開始頁面總是變更 + +限制: 使用工具列上的返回按鈕可能無法運作" 起始頁面僅在應用程式啟動時變更 @@ -1296,6 +1304,9 @@ Second \"item\" text" GmsCore 設定 GmsCore 設定 + + 如果您最近變更了帳戶登入詳細資訊,請解除安裝並重新安裝 MicroG。 + 繞過 URL 重新導向 已繞過 URL 重新導向 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 bc8bec158..ed07bda61 100644 --- a/patches/src/main/resources/addresources/values-zu-rZA/strings.xml +++ b/patches/src/main/resources/addresources/values-zu-rZA/strings.xml @@ -197,6 +197,8 @@ Second \"item\" text" + + diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml index f99437d31..98ce9cb16 100644 --- a/patches/src/main/resources/addresources/values/strings.xml +++ b/patches/src/main/resources/addresources/values/strings.xml @@ -1379,6 +1379,9 @@ Enabling this can unlock higher video qualities" GmsCore Settings Settings for GmsCore + + If you recently changed your account login details, then uninstall and reinstall MicroG. + Bypass URL redirects URL redirects are bypassed