diff --git a/CHANGELOG.md b/CHANGELOG.md index 81c86c937..71fcd8c40 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,131 @@ +# [5.34.0-dev.13](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.12...v5.34.0-dev.13) (2025-08-19) + + +### Bug Fixes + +* **YouTube - Player Controls:** Fix chapter title overlapping the bottom buttons ([#5673](https://github.com/ReVanced/revanced-patches/issues/5673)) ([09ccee7](https://github.com/ReVanced/revanced-patches/commit/09ccee71384df338bbf8acc1097f619a372c4868)) + +# [5.34.0-dev.13](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.12...v5.34.0-dev.13) (2025-08-18) + + +### Bug Fixes + +* **YouTube - Player Controls:** Fix chapter title overlapping the bottom buttons ([#5673](https://github.com/ReVanced/revanced-patches/issues/5673)) ([09ccee7](https://github.com/ReVanced/revanced-patches/commit/09ccee71384df338bbf8acc1097f619a372c4868)) + +# [5.34.0-dev.12](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.11...v5.34.0-dev.12) (2025-08-18) + + +### Bug Fixes + +* **YouTube:** Use correct fade out animation when tapping to dismiss the video overlay ([#5670](https://github.com/ReVanced/revanced-patches/issues/5670)) ([cce6737](https://github.com/ReVanced/revanced-patches/commit/cce6737f627fc7621bbde50a5653b6af14c6f31a)) + +# [5.34.0-dev.11](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.10...v5.34.0-dev.11) (2025-08-16) + + +### Bug Fixes + +* **YouTube - SponsorBlock:** Do not hide voting or create button when the video ends ([6aba4e2](https://github.com/ReVanced/revanced-patches/commit/6aba4e284de9bb94b49eea8be2baf2870eecbbcf)) + +# [5.34.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.9...v5.34.0-dev.10) (2025-08-16) + + +### Bug Fixes + +* **YouTube - Video playback:** Disable HDR video does not disable Dolby Vision HDR ([#5661](https://github.com/ReVanced/revanced-patches/issues/5661)) ([6dab988](https://github.com/ReVanced/revanced-patches/commit/6dab98810645b96bd0387ba7d607e5d8ffb1b5bb)) + + +### Features + +* **YouTube - Hide video action buttons:** Add "Hide Promote button" setting ([1959396](https://github.com/ReVanced/revanced-patches/commit/1959396a53f4c07b94acddc5c0ee6cdf7ade7c7b)) + +# [5.34.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.9...v5.34.0-dev.10) (2025-08-16) + + +### Features + +* **YouTube - Hide video action buttons:** Add "Hide Promote button" setting ([1959396](https://github.com/ReVanced/revanced-patches/commit/1959396a53f4c07b94acddc5c0ee6cdf7ade7c7b)) + +# [5.34.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.9...v5.34.0-dev.10) (2025-08-16) + + +### Features + +* **YouTube - Hide video action buttons:** Add "Hide Promote button" setting ([1959396](https://github.com/ReVanced/revanced-patches/commit/1959396a53f4c07b94acddc5c0ee6cdf7ade7c7b)) + +# [5.34.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.8...v5.34.0-dev.9) (2025-08-16) + + +### Features + +* **YouTube - Hide video action buttons:** Add "Hide Hype button" setting ([f13f377](https://github.com/ReVanced/revanced-patches/commit/f13f3770e7c4fd5bff8f3e224fb1b1ead50a3c18)) + +# [5.34.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.7...v5.34.0-dev.8) (2025-08-15) + + +### Features + +* **NU.nl:** Support latest app version ([#5643](https://github.com/ReVanced/revanced-patches/issues/5643)) ([7338e4a](https://github.com/ReVanced/revanced-patches/commit/7338e4a5a99f913256120d0d58fede3aa4ee8922)) +* **YouTube:** Add `Disable sign in to TV popup` patch ([#5639](https://github.com/ReVanced/revanced-patches/issues/5639)) ([d0e5bd0](https://github.com/ReVanced/revanced-patches/commit/d0e5bd0479a8910b081c483ed2a6ab4d7134e3c3)) + +# [5.34.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.6...v5.34.0-dev.7) (2025-08-13) + + +### Bug Fixes + +* **YouTube - Video quality:** Fix additional incorrect quality resolutions used by YouTube ([a2a1fbe](https://github.com/ReVanced/revanced-patches/commit/a2a1fbe2959be8334c54cfc3426c24a960c55c8f)) + +# [5.34.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.5...v5.34.0-dev.6) (2025-08-11) + + +### Bug Fixes + +* **YouTube - Video quality:** Show FHD+ icon for 1080p 60fps enhanced bitrate ([76bed37](https://github.com/ReVanced/revanced-patches/commit/76bed3734093713af24ef065d5ffc5b1cd83f29a)) + +# [5.34.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.4...v5.34.0-dev.5) (2025-08-10) + + +### Features + +* **YouTube - Hide player flyout menu items:** Add option to hide quality flyout menu ([eb55068](https://github.com/ReVanced/revanced-patches/commit/eb5506856a2eaf2a8585e598868ddba3e1429159)) + +# [5.34.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.3...v5.34.0-dev.4) (2025-08-10) + + +### Bug Fixes + +* **YouTube - Hide layout components:** Do not hide community posts on channel profiles ([#5634](https://github.com/ReVanced/revanced-patches/issues/5634)) ([9e3d5a2](https://github.com/ReVanced/revanced-patches/commit/9e3d5a2b36106479470f3f69920518b57e8c4dca)) + +# [5.34.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.2...v5.34.0-dev.3) (2025-08-09) + + +### Bug Fixes + +* **pixiv - Hide ads:** Constrain patch to last working app target ([d8ea56c](https://github.com/ReVanced/revanced-patches/commit/d8ea56ca4be47df1c43f96ec41b91c800f1d9daf)) + +# [5.34.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.1...v5.34.0-dev.2) (2025-08-09) + + +### Bug Fixes + +* **Backdrops:** Remove broken patch that is no longer supported ([#5627](https://github.com/ReVanced/revanced-patches/issues/5627)) ([ebb8332](https://github.com/ReVanced/revanced-patches/commit/ebb83320838aa99dd4417d45a50333dd42c1218a)) + + +### Features + +* **YouTube - Playback speed:** Show current playback speed on player speed dialog button ([#5607](https://github.com/ReVanced/revanced-patches/issues/5607)) ([279436a](https://github.com/ReVanced/revanced-patches/commit/279436a3657b50f98bb4cc64dc88dc14e422f204)) + +# [5.34.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.33.0...v5.34.0-dev.1) (2025-08-08) + + +### Bug Fixes + +* **Twitch:** Constrain patches to last working app targets ([#5373](https://github.com/ReVanced/revanced-patches/issues/5373)) ([29a4748](https://github.com/ReVanced/revanced-patches/commit/29a47481c4efa209a3a53df60613b59a73adbe07)) + + +### Features + +* **Instagram:** Support latest app version ([#5611](https://github.com/ReVanced/revanced-patches/issues/5611)) ([26fe690](https://github.com/ReVanced/revanced-patches/commit/26fe690dfbefe6c412c5f81f208a3b1d2fbd7a0a)) + # [5.33.0](https://github.com/ReVanced/revanced-patches/compare/v5.32.0...v5.33.0) (2025-08-05) diff --git a/extensions/shared/library/src/main/java/app/revanced/extension/shared/Utils.java b/extensions/shared/library/src/main/java/app/revanced/extension/shared/Utils.java index c015c0610..db157c4a1 100644 --- a/extensions/shared/library/src/main/java/app/revanced/extension/shared/Utils.java +++ b/extensions/shared/library/src/main/java/app/revanced/extension/shared/Utils.java @@ -329,7 +329,7 @@ public class Utils { return (R) child; } - throw new IllegalArgumentException("View with resource name '" + str + "' not found"); + throw new IllegalArgumentException("View with resource name not found: " + str); } /** diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/Event.kt b/extensions/youtube/src/main/java/app/revanced/extension/youtube/Event.kt index 72323949c..802c995b3 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/Event.kt +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/Event.kt @@ -1,16 +1,20 @@ package app.revanced.extension.youtube +import app.revanced.extension.shared.Logger +import java.util.Collections + /** * generic event provider class */ class Event { - private val eventListeners = mutableSetOf<(T) -> Unit>() + private val eventListeners = Collections.synchronizedSet(mutableSetOf<(T) -> Unit>()) operator fun plusAssign(observer: (T) -> Unit) { addObserver(observer) } fun addObserver(observer: (T) -> Unit) { + Logger.printDebug { "Adding observer: $observer" } eventListeners.add(observer) } @@ -23,7 +27,8 @@ class Event { } operator fun invoke(value: T) { - for (observer in eventListeners) + for (observer in eventListeners) { observer.invoke(value) + } } } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/DisableHdrPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/DisableHdrPatch.java index 174e8a47e..d89bf72f5 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/DisableHdrPatch.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/DisableHdrPatch.java @@ -1,5 +1,7 @@ package app.revanced.extension.youtube.patches; +import android.view.Display; + import app.revanced.extension.youtube.settings.Settings; @SuppressWarnings("unused") @@ -8,8 +10,10 @@ public class DisableHdrPatch { /** * Injection point. */ - public static boolean disableHDRVideo() { - return !Settings.DISABLE_HDR_VIDEO.get(); + public static int[] disableHdrVideo(Display.HdrCapabilities capabilities) { + return Settings.DISABLE_HDR_VIDEO.get() + ? new int[0] + : capabilities.getSupportedHdrTypes(); } } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/DisableSignInToTvPopupPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/DisableSignInToTvPopupPatch.java new file mode 100644 index 000000000..f6298ce8b --- /dev/null +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/DisableSignInToTvPopupPatch.java @@ -0,0 +1,14 @@ +package app.revanced.extension.youtube.patches; + +import app.revanced.extension.youtube.settings.Settings; + +@SuppressWarnings("unused") +public class DisableSignInToTvPopupPatch { + + /** + * Injection point. + */ + public static boolean disableSignInToTvPopup() { + return Settings.DISABLE_SIGNIN_TO_TV_POPUP.get(); + } +} diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/PlayerControlsPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/PlayerControlsPatch.java index a8458310d..a96999683 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/PlayerControlsPatch.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/PlayerControlsPatch.java @@ -57,11 +57,4 @@ public class PlayerControlsPatch { private static void fullscreenButtonVisibilityChanged(boolean isVisible) { // Code added during patching. } - - /** - * Injection point. - */ - public static String getPlayerTopControlsLayoutResourceName(String original) { - return "default"; - } } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/PlayerControlsVisibilityHookPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/PlayerControlsVisibilityHookPatch.java new file mode 100644 index 000000000..75f37a570 --- /dev/null +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/PlayerControlsVisibilityHookPatch.java @@ -0,0 +1,18 @@ +package app.revanced.extension.youtube.patches; + +import androidx.annotation.Nullable; + +import app.revanced.extension.youtube.shared.PlayerControlsVisibility; + +@SuppressWarnings("unused") +public class PlayerControlsVisibilityHookPatch { + + /** + * Injection point. + */ + public static void setPlayerControlsVisibility(@Nullable Enum youTubePlayerControlsVisibility) { + if (youTubePlayerControlsVisibility == null) return; + + PlayerControlsVisibility.setFromString(youTubePlayerControlsVisibility.name()); + } +} diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/VideoInformation.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/VideoInformation.java index 99d8a5b6a..933bb5b61 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/VideoInformation.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/VideoInformation.java @@ -1,12 +1,18 @@ package app.revanced.extension.youtube.patches; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.google.android.libraries.youtube.innertube.model.media.VideoQuality; import java.lang.ref.WeakReference; +import java.util.Arrays; import java.util.Objects; import app.revanced.extension.shared.Logger; import app.revanced.extension.shared.Utils; +import app.revanced.extension.youtube.Event; +import app.revanced.extension.youtube.shared.ShortsPlayerState; import app.revanced.extension.youtube.shared.VideoState; /** @@ -16,11 +22,30 @@ import app.revanced.extension.youtube.shared.VideoState; public final class VideoInformation { public interface PlaybackController { - // Methods are added to YT classes during patching. - boolean seekTo(long videoTime); - void seekToRelative(long videoTimeOffset); + // Methods are added during patching. + boolean patch_seekTo(long videoTime); + void patch_seekToRelative(long videoTimeOffset); } + /** + * Interface to use obfuscated methods. + */ + public interface VideoQualityMenuInterface { + // Method is added during patching. + void patch_setQuality(VideoQuality quality); + } + + /** + * Video resolution of the automatic quality option.. + */ + public static final int AUTOMATIC_VIDEO_QUALITY_VALUE = -2; + + /** + * Video quality names are the same text for all languages. + * Premium can be "1080p Premium" or "1080p60 Premium" + */ + public static final String VIDEO_QUALITY_PREMIUM_NAME = "Premium"; + private static final float DEFAULT_YOUTUBE_PLAYBACK_SPEED = 1.0f; /** * Prefix present in all Short player parameters signature. @@ -30,12 +55,10 @@ public final class VideoInformation { private static WeakReference playerControllerRef = new WeakReference<>(null); private static WeakReference mdxPlayerDirectorRef = new WeakReference<>(null); - @NonNull private static String videoId = ""; private static long videoLength = 0; private static long videoTime = -1; - @NonNull private static volatile String playerResponseVideoId = ""; private static volatile boolean playerResponseVideoIdIsShort; private static volatile boolean videoIdIsShort; @@ -45,6 +68,44 @@ public final class VideoInformation { */ private static float playbackSpeed = DEFAULT_YOUTUBE_PLAYBACK_SPEED; + private static int desiredVideoResolution = AUTOMATIC_VIDEO_QUALITY_VALUE; + + private static boolean qualityNeedsUpdating; + + /** + * The available qualities of the current video. + */ + @Nullable + private static VideoQuality[] currentQualities; + + /** + * The current quality of the video playing. + * This is always the actual quality even if Automatic quality is active. + */ + @Nullable + private static VideoQuality currentQuality; + + /** + * The current VideoQualityMenuInterface, set during setVideoQuality. + */ + @Nullable + private static VideoQualityMenuInterface currentMenuInterface; + + /** + * Callback for when the current quality changes. + */ + public static final Event onQualityChange = new Event<>(); + + @Nullable + public static VideoQuality[] getCurrentQualities() { + return currentQualities; + } + + @Nullable + public static VideoQuality getCurrentQuality() { + return currentQuality; + } + /** * Injection point. * @@ -52,12 +113,18 @@ public final class VideoInformation { */ public static void initialize(@NonNull PlaybackController playerController) { try { + Logger.printDebug(() -> "newVideoStarted"); + playerControllerRef = new WeakReference<>(Objects.requireNonNull(playerController)); videoTime = -1; videoLength = 0; playbackSpeed = DEFAULT_YOUTUBE_PLAYBACK_SPEED; + desiredVideoResolution = AUTOMATIC_VIDEO_QUALITY_VALUE; + currentQualities = null; + currentMenuInterface = null; + setCurrentQuality(null); } catch (Exception ex) { - Logger.printException(() -> "Failed to initialize", ex); + Logger.printException(() -> "initialize failure", ex); } } @@ -197,14 +264,14 @@ public final class VideoInformation { if (controller == null) { Logger.printDebug(() -> "Cannot seekTo because player controller is null"); } else { - if (controller.seekTo(adjustedSeekTime)) return true; + if (controller.patch_seekTo(adjustedSeekTime)) return true; Logger.printDebug(() -> "seekTo did not succeeded. Trying MXD."); // Else the video is loading or changing videos, or video is casting to a different device. } // Try calling the seekTo method of the MDX player director (called when casting). // The difference has to be a different second mark in order to avoid infinite skip loops - // as the Lounge API only supports seconds. + // as the Lounge API only supports whole seconds. if (adjustedSeekTime / 1000 == videoTime / 1000) { Logger.printDebug(() -> "Skipping seekTo for MDX because seek time is too small " + "(" + (adjustedSeekTime - videoTime) + "ms)"); @@ -217,9 +284,9 @@ public final class VideoInformation { return false; } - return controller.seekTo(adjustedSeekTime); + return controller.patch_seekTo(adjustedSeekTime); } catch (Exception ex) { - Logger.printException(() -> "Failed to seek", ex); + Logger.printException(() -> "seekTo failure", ex); return false; } } @@ -239,7 +306,7 @@ public final class VideoInformation { if (controller == null) { Logger.printDebug(() -> "Cannot seek relative as player controller is null"); } else { - controller.seekToRelative(seekTime); + controller.patch_seekToRelative(seekTime); } // Adjust the fine adjustment function so it's at least 1 second before/after. @@ -255,10 +322,10 @@ public final class VideoInformation { if (controller == null) { Logger.printDebug(() -> "Cannot seek relative as MXD player controller is null"); } else { - controller.seekToRelative(adjustedSeekTime); + controller.patch_seekToRelative(adjustedSeekTime); } } catch (Exception ex) { - Logger.printException(() -> "Failed to seek relative", ex); + Logger.printException(() -> "seekToRelative failure", ex); } } @@ -339,14 +406,13 @@ public final class VideoInformation { } /** - * @return If the playback is at the end of the video. - *

* If video is playing in the background with no video visible, * this always returns false (even if the video is actually at the end). *

* This is equivalent to checking for {@link VideoState#ENDED}, * but can give a more up-to-date result for code calling from some hooks. * + * @return If the playback is at the end of the video. * @see VideoState */ @SuppressWarnings("BooleanMethodIsAlwaysInverted") @@ -373,4 +439,134 @@ public final class VideoInformation { playbackSpeed = newlyLoadedPlaybackSpeed; } } + + /** + * @param resolution The desired video quality resolution to use. + */ + public static void setDesiredVideoResolution(int resolution) { + Utils.verifyOnMainThread(); + Logger.printDebug(() -> "Setting desired video resolution: " + resolution); + desiredVideoResolution = resolution; + qualityNeedsUpdating = true; + } + + private static void setCurrentQuality(@Nullable VideoQuality quality) { + Utils.verifyOnMainThread(); + if (currentQuality != quality) { + Logger.printDebug(() -> "Current quality changed to: " + quality); + currentQuality = quality; + onQualityChange.invoke(quality); + } + } + + /** + * Forcefully changes the video quality of the currently playing video. + */ + public static void changeQuality(VideoQuality quality) { + Utils.verifyOnMainThread(); + + if (currentMenuInterface == null) { + Logger.printException(() -> "Cannot change quality, menu interface is null"); + return; + } + currentMenuInterface.patch_setQuality(quality); + } + + /** + * Injection point. Fixes bad data used by YouTube. + * Issue can be reproduced by selecting 480p quality on any Short, + * and occasionally with random regular videos. + */ + public static int fixVideoQualityResolution(String name, int quality) { + try { + if (!name.startsWith(Integer.toString(quality))) { + final int suffixIndex = name.indexOf('p'); + if (suffixIndex > 0) { + final int fixedQuality = Integer.parseInt(name.substring(0, suffixIndex)); + Logger.printDebug(() -> "Fixing wrong quality resolution from: " + + name + "(" + quality + ") to: " + name + ")" + fixedQuality + ")"); + return fixedQuality; + } + } + } catch (Exception ex) { + Logger.printException(() -> "fixVideoQualityResolution failed", ex); + } + + return quality; + } + + /** + * Injection point. + * + * @param qualities Video qualities available, ordered from largest to smallest, with index 0 being the 'automatic' value of -2 + * @param originalQualityIndex quality index to use, as chosen by YouTube + */ + public static int setVideoQuality(VideoQuality[] qualities, VideoQualityMenuInterface menu, int originalQualityIndex) { + try { + Utils.verifyOnMainThread(); + currentMenuInterface = menu; + + final boolean availableQualitiesChanged = (currentQualities == null) + || !Arrays.equals(currentQualities, qualities); + if (availableQualitiesChanged) { + currentQualities = qualities; + Logger.printDebug(() -> "VideoQualities: " + Arrays.toString(currentQualities)); + } + + VideoQuality updatedCurrentQuality = qualities[originalQualityIndex]; + if (updatedCurrentQuality.patch_getResolution() != AUTOMATIC_VIDEO_QUALITY_VALUE + && (currentQuality == null || currentQuality != updatedCurrentQuality)) { + setCurrentQuality(updatedCurrentQuality); + } + + final int preferredQuality = desiredVideoResolution; + if (preferredQuality == AUTOMATIC_VIDEO_QUALITY_VALUE) { + return originalQualityIndex; // Nothing to do. + } + + // After changing videos the qualities can initially be for the prior video. + // If the qualities have changed and the default is not auto then an update is needed. + if (qualityNeedsUpdating) { + qualityNeedsUpdating = false; + } else if (!availableQualitiesChanged) { + return originalQualityIndex; + } + + // Find the highest quality that is equal to or less than the preferred. + int i = 0; + final int lastQualityIndex = qualities.length - 1; + for (VideoQuality quality : qualities) { + final int qualityResolution = quality.patch_getResolution(); + if ((qualityResolution != AUTOMATIC_VIDEO_QUALITY_VALUE && qualityResolution <= preferredQuality) + // Use the lowest video quality if the default is lower than all available. + || i == lastQualityIndex) { + final boolean qualityNeedsChange = (i != originalQualityIndex); + Logger.printDebug(() -> qualityNeedsChange + ? "Changing video quality from: " + updatedCurrentQuality + " to: " + quality + : "Video is already the preferred quality: " + quality + ); + + // On first load of a new regular video, if the video is already the + // desired quality then the quality flyout will show 'Auto' (ie: Auto (720p)). + // + // To prevent user confusion, set the video index even if the + // quality is already correct so the UI picker will not display "Auto". + // + // Only change Shorts quality if the quality actually needs to change, + // because the "auto" option is not shown in the flyout + // and setting the same quality again can cause the Short to restart. + if (qualityNeedsChange || !ShortsPlayerState.isOpen()) { + changeQuality(quality); + return i; + } + + return originalQualityIndex; + } + i++; + } + } catch (Exception ex) { + Logger.printException(() -> "setVideoQuality failure", ex); + } + return originalQualityIndex; + } } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/ButtonsFilter.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/ButtonsFilter.java index 42e428fe9..3ac41318c 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/ButtonsFilter.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/ButtonsFilter.java @@ -83,6 +83,14 @@ final class ButtonsFilter extends Filter { new ByteArrayFilterGroup( Settings.HIDE_CLIP_BUTTON, "yt_outline_scissors" + ), + new ByteArrayFilterGroup( + Settings.HIDE_HYPE_BUTTON, + "yt_outline_star_shooting" + ), + new ByteArrayFilterGroup( + Settings.HIDE_PROMOTE_BUTTON, + "yt_outline_megaphone" ) ); } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/Filter.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/Filter.java index 454c03338..003949ce2 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/Filter.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/Filter.java @@ -40,7 +40,6 @@ abstract class Filter { /** * Adds callbacks to {@link #isFiltered(String, String, byte[], StringFilterGroup, FilterContentType, int)} * if any of the groups are found. - *

*/ protected final void addIdentifierCallbacks(StringFilterGroup... groups) { identifierCallbacks.addAll(Arrays.asList(groups)); @@ -58,7 +57,6 @@ abstract class Filter { * Called after an enabled filter has been matched. * Default implementation is to always filter the matched component and log the action. * Subclasses can perform additional or different checks if needed. - * *

* Method is called off the main thread. * 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 311e99163..6033f26fe 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 @@ -32,6 +32,7 @@ public final class LayoutComponentsFilter extends Filter { ); private final StringTrieSearch exceptions = new StringTrieSearch(); + private final StringFilterGroup communityPosts; private final StringFilterGroup surveys; private final StringFilterGroup notifyMe; private final StringFilterGroup singleItemInformationPanel; @@ -68,7 +69,7 @@ public final class LayoutComponentsFilter extends Filter { // Paths. - final var communityPosts = new StringFilterGroup( + communityPosts = new StringFilterGroup( Settings.HIDE_COMMUNITY_POSTS, "post_base_wrapper", // may be obsolete and no longer needed. "text_post_root.eml", @@ -325,6 +326,12 @@ public final class LayoutComponentsFilter extends Filter { return channelProfileBuffer.check(buffer).isFiltered(); } + if (matchedGroup == communityPosts && NavigationBar.isBackButtonVisible()) { + // Allow community posts on channel profile page, + // or if viewing an individual channel in the feed. + return false; + } + if (exceptions.matches(path)) return false; // Exceptions are not filtered. if (matchedGroup == compactChannelBarInner) { diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/PlayerFlyoutMenuItemsFilter.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/PlayerFlyoutMenuItemsFilter.java index fc2cc8099..2408ac81c 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/PlayerFlyoutMenuItemsFilter.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/components/PlayerFlyoutMenuItemsFilter.java @@ -3,7 +3,7 @@ package app.revanced.extension.youtube.patches.components; import app.revanced.extension.shared.settings.Setting; import app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch; import app.revanced.extension.youtube.settings.Settings; -import app.revanced.extension.youtube.shared.PlayerType; +import app.revanced.extension.youtube.shared.ShortsPlayerState; @SuppressWarnings("unused") public class PlayerFlyoutMenuItemsFilter extends Filter { @@ -20,17 +20,9 @@ public class PlayerFlyoutMenuItemsFilter extends Filter { } private final ByteArrayFilterGroupList flyoutFilterGroupList = new ByteArrayFilterGroupList(); - - private final ByteArrayFilterGroup exception; private final StringFilterGroup videoQualityMenuFooter; public PlayerFlyoutMenuItemsFilter() { - exception = new ByteArrayFilterGroup( - // Whitelist Quality menu item when "Hide Additional settings menu" is enabled - Settings.HIDE_PLAYER_FLYOUT_ADDITIONAL_SETTINGS, - "quality_sheet" - ); - videoQualityMenuFooter = new StringFilterGroup( Settings.HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER, "quality_sheet_footer" @@ -44,11 +36,11 @@ public class PlayerFlyoutMenuItemsFilter extends Filter { flyoutFilterGroupList.addAll( new ByteArrayFilterGroup( Settings.HIDE_PLAYER_FLYOUT_CAPTIONS, - "closed_caption" + "closed_caption_" ), new ByteArrayFilterGroup( Settings.HIDE_PLAYER_FLYOUT_ADDITIONAL_SETTINGS, - "yt_outline_gear" + "yt_outline_gear_" ), new ByteArrayFilterGroup( Settings.HIDE_PLAYER_FLYOUT_LOOP_VIDEO, @@ -56,31 +48,31 @@ public class PlayerFlyoutMenuItemsFilter extends Filter { ), new ByteArrayFilterGroup( Settings.HIDE_PLAYER_FLYOUT_AMBIENT_MODE, - "yt_outline_screen_light" + "yt_outline_screen_light_" ), new ByteArrayFilterGroup( Settings.HIDE_PLAYER_FLYOUT_STABLE_VOLUME, - "volume_stable" + "volume_stable_" ), new ByteArrayFilterGroup( Settings.HIDE_PLAYER_FLYOUT_HELP, - "yt_outline_question_circle" + "yt_outline_question_circle_" ), new ByteArrayFilterGroup( Settings.HIDE_PLAYER_FLYOUT_MORE_INFO, - "yt_outline_info_circle" + "yt_outline_info_circle_" ), new ByteArrayFilterGroup( Settings.HIDE_PLAYER_FLYOUT_LOCK_SCREEN, - "yt_outline_lock" + "yt_outline_lock_" ), new ByteArrayFilterGroup( Settings.HIDE_PLAYER_FLYOUT_SPEED, - "yt_outline_play_arrow_half_circle" + "yt_outline_play_arrow_half_circle_" ), new ByteArrayFilterGroup( Settings.HIDE_PLAYER_FLYOUT_AUDIO_TRACK, - "yt_outline_person_radar" + "yt_outline_person_radar_" ), new ByteArrayFilterGroup( Settings.HIDE_PLAYER_FLYOUT_SLEEP_TIMER, @@ -88,7 +80,11 @@ public class PlayerFlyoutMenuItemsFilter extends Filter { ), new ByteArrayFilterGroup( Settings.HIDE_PLAYER_FLYOUT_WATCH_IN_VR, - "yt_outline_vr" + "yt_outline_vr_" + ), + new ByteArrayFilterGroup( + Settings.HIDE_PLAYER_FLYOUT_VIDEO_QUALITY, + "yt_outline_adjust_" ) ); } @@ -105,7 +101,7 @@ public class PlayerFlyoutMenuItemsFilter extends Filter { } // Shorts also use this player flyout panel - if (PlayerType.getCurrent().isNoneOrHidden() || exception.check(buffer).isFiltered()) { + if (ShortsPlayerState.isOpen()) { return false; } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/quality/RememberVideoQualityPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/quality/RememberVideoQualityPatch.java index e4d1d9817..0ead14314 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/quality/RememberVideoQualityPatch.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/quality/RememberVideoQualityPatch.java @@ -3,12 +3,8 @@ package app.revanced.extension.youtube.patches.playback.quality; import static app.revanced.extension.shared.StringRef.str; import static app.revanced.extension.shared.Utils.NetworkType; -import androidx.annotation.Nullable; - import com.google.android.libraries.youtube.innertube.model.media.VideoQuality; -import java.util.Arrays; - import app.revanced.extension.shared.Logger; import app.revanced.extension.shared.Utils; import app.revanced.extension.shared.settings.BooleanSetting; @@ -16,69 +12,15 @@ import app.revanced.extension.shared.settings.IntegerSetting; import app.revanced.extension.youtube.patches.VideoInformation; import app.revanced.extension.youtube.settings.Settings; import app.revanced.extension.youtube.shared.ShortsPlayerState; -import app.revanced.extension.youtube.videoplayer.VideoQualityDialogButton; @SuppressWarnings("unused") public class RememberVideoQualityPatch { - /** - * Interface to use obfuscated methods. - */ - public interface VideoQualityMenuInterface { - void patch_setQuality(VideoQuality quality); - } - - /** - * Video resolution of the automatic quality option.. - */ - public static final int AUTOMATIC_VIDEO_QUALITY_VALUE = -2; - - /** - * All quality names are the same for all languages. - * VideoQuality also has a resolution enum that can be used if needed. - */ - public static final String VIDEO_QUALITY_1080P_PREMIUM_NAME = "1080p Premium"; - private static final IntegerSetting videoQualityWifi = Settings.VIDEO_QUALITY_DEFAULT_WIFI; private static final IntegerSetting videoQualityMobile = Settings.VIDEO_QUALITY_DEFAULT_MOBILE; private static final IntegerSetting shortsQualityWifi = Settings.SHORTS_QUALITY_DEFAULT_WIFI; private static final IntegerSetting shortsQualityMobile = Settings.SHORTS_QUALITY_DEFAULT_MOBILE; - private static boolean qualityNeedsUpdating; - - /** - * The available qualities of the current video. - */ - @Nullable - private static VideoQuality[] currentQualities; - - /** - * The current quality of the video playing. - * This is always the actual quality even if Automatic quality is active. - */ - @Nullable - private static VideoQuality currentQuality; - - /** - * The current VideoQualityMenuInterface, set during setVideoQuality. - */ - @Nullable - private static VideoQualityMenuInterface currentMenuInterface; - - @Nullable - public static VideoQuality[] getCurrentQualities() { - return currentQualities; - } - - @Nullable - public static VideoQuality getCurrentQuality() { - return currentQuality; - } - - @Nullable - public static VideoQualityMenuInterface getCurrentMenuInterface() { - return currentMenuInterface; - } public static boolean shouldRememberVideoQuality() { BooleanSetting preference = ShortsPlayerState.isOpen() @@ -128,87 +70,12 @@ public class RememberVideoQualityPatch { /** * Injection point. - * - * @param qualities Video qualities available, ordered from largest to smallest, with index 0 being the 'automatic' value of -2 - * @param originalQualityIndex quality index to use, as chosen by YouTube - */ - public static int setVideoQuality(VideoQuality[] qualities, VideoQualityMenuInterface menu, int originalQualityIndex) { - try { - Utils.verifyOnMainThread(); - currentMenuInterface = menu; - - final boolean availableQualitiesChanged = (currentQualities == null) - || !Arrays.equals(currentQualities, qualities); - if (availableQualitiesChanged) { - currentQualities = qualities; - Logger.printDebug(() -> "VideoQualities: " + Arrays.toString(currentQualities)); - } - - VideoQuality updatedCurrentQuality = qualities[originalQualityIndex]; - if (updatedCurrentQuality.patch_getResolution() != AUTOMATIC_VIDEO_QUALITY_VALUE - && (currentQuality == null || currentQuality != updatedCurrentQuality)) { - currentQuality = updatedCurrentQuality; - Logger.printDebug(() -> "Current quality changed to: " + updatedCurrentQuality); - - VideoQualityDialogButton.updateButtonIcon(updatedCurrentQuality); - } - - final int preferredQuality = getDefaultQualityResolution(); - if (preferredQuality == AUTOMATIC_VIDEO_QUALITY_VALUE) { - return originalQualityIndex; // Nothing to do. - } - - // After changing videos the qualities can initially be for the prior video. - // If the qualities have changed and the default is not auto then an update is needed. - if (!qualityNeedsUpdating && !availableQualitiesChanged) { - return originalQualityIndex; - } - qualityNeedsUpdating = false; - - // Find the highest quality that is equal to or less than the preferred. - int i = 0; - for (VideoQuality quality : qualities) { - final int qualityResolution = quality.patch_getResolution(); - if ((qualityResolution != AUTOMATIC_VIDEO_QUALITY_VALUE && qualityResolution <= preferredQuality) - // Use the lowest video quality if the default is lower than all available. - || i == qualities.length - 1) { - final boolean qualityNeedsChange = (i != originalQualityIndex); - Logger.printDebug(() -> qualityNeedsChange - ? "Changing video quality from: " + updatedCurrentQuality + " to: " + quality - : "Video is already the preferred quality: " + quality - ); - - // On first load of a new regular video, if the video is already the - // desired quality then the quality flyout will show 'Auto' (ie: Auto (720p)). - // - // To prevent user confusion, set the video index even if the - // quality is already correct so the UI picker will not display "Auto". - // - // Only change Shorts quality if the quality actually needs to change, - // because the "auto" option is not shown in the flyout - // and setting the same quality again can cause the Short to restart. - if (qualityNeedsChange || !ShortsPlayerState.isOpen()) { - menu.patch_setQuality(qualities[i]); - return i; - } - - return originalQualityIndex; - } - i++; - } - } catch (Exception ex) { - Logger.printException(() -> "setVideoQuality failure", ex); - } - return originalQualityIndex; - } - - /** - * Injection point. - * @param userSelectedQualityIndex Element index of {@link #currentQualities}. + * @param userSelectedQualityIndex Element index of {@link VideoInformation#getCurrentQualities()}. */ public static void userChangedShortsQuality(int userSelectedQualityIndex) { try { if (shouldRememberVideoQuality()) { + VideoQuality[] currentQualities = VideoInformation.getCurrentQualities(); if (currentQualities == null) { Logger.printDebug(() -> "Cannot save default quality, qualities is null"); return; @@ -227,6 +94,7 @@ public class RememberVideoQualityPatch { */ public static void userChangedQuality(int videoResolution) { Utils.verifyOnMainThread(); + Logger.printDebug(() -> "User changed quality to: " + videoResolution); if (shouldRememberVideoQuality()) { saveDefaultQuality(videoResolution); @@ -237,27 +105,6 @@ public class RememberVideoQualityPatch { * Injection point. */ public static void newVideoStarted(VideoInformation.PlaybackController ignoredPlayerController) { - Utils.verifyOnMainThread(); - - Logger.printDebug(() -> "newVideoStarted"); - currentQualities = null; - currentQuality = null; - currentMenuInterface = null; - qualityNeedsUpdating = true; - - // Hide the quality button until playback starts and the qualities are available. - VideoQualityDialogButton.updateButtonIcon(null); - } - - /** - * Injection point. Fixes bad data used by YouTube. - */ - public static int fixVideoQualityResolution(String name, int quality) { - final int correctQuality = 480; - if (name.equals("480p") && quality != correctQuality) { - return correctQuality; - } - - return quality; + VideoInformation.setDesiredVideoResolution(getDefaultQualityResolution()); } } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/speed/CustomPlaybackSpeedPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/speed/CustomPlaybackSpeedPatch.java index e738be34d..52e977e34 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/speed/CustomPlaybackSpeedPatch.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/speed/CustomPlaybackSpeedPatch.java @@ -100,7 +100,8 @@ public class CustomPlaybackSpeedPatch { private static WeakReference

currentDialog = new WeakReference<>(null); static { - // Cap at 2 decimals (rounds automatically). + // Use same 2 digit format as built in speed picker, + speedFormatter.setMinimumFractionDigits(2); speedFormatter.setMaximumFractionDigits(2); final float holdSpeed = Settings.SPEED_TAP_AND_HOLD.get(); @@ -321,7 +322,7 @@ public class CustomPlaybackSpeedPatch { TextView currentSpeedText = new TextView(context); float currentSpeed = VideoInformation.getPlaybackSpeed(); // Initially show with only 0 minimum digits, so 1.0 shows as 1x - currentSpeedText.setText(formatSpeedStringX(currentSpeed, 0)); + currentSpeedText.setText(formatSpeedStringX(currentSpeed)); currentSpeedText.setTextColor(Utils.getAppForegroundColor()); currentSpeedText.setTextSize(16); currentSpeedText.setTypeface(Typeface.DEFAULT_BOLD); @@ -398,10 +399,11 @@ public class CustomPlaybackSpeedPatch { return null; } - VideoInformation.overridePlaybackSpeed(roundedSpeed); - RememberPlaybackSpeedPatch.userSelectedPlaybackSpeed(roundedSpeed); - currentSpeedText.setText(formatSpeedStringX(roundedSpeed, 2)); // Update display. + currentSpeedText.setText(formatSpeedStringX(roundedSpeed)); // Update display. speedSlider.setProgress(speedToProgressValue(roundedSpeed)); // Update slider. + + RememberPlaybackSpeedPatch.userSelectedPlaybackSpeed(roundedSpeed); + VideoInformation.overridePlaybackSpeed(roundedSpeed); return null; }; @@ -437,7 +439,7 @@ public class CustomPlaybackSpeedPatch { gridParams.setMargins(0, 0, 0, 0); // No margins around GridLayout. gridLayout.setLayoutParams(gridParams); - // For all buttons show at least 1 zero in decimal (2 -> "2.0"). + // For button use 1 digit minimum. speedFormatter.setMinimumFractionDigits(1); // Add buttons for each preset playback speed. @@ -455,7 +457,7 @@ public class CustomPlaybackSpeedPatch { // Create speed button. Button speedButton = new Button(context, null, 0); - speedButton.setText(speedFormatter.format(speed)); // Do not use 'x' speed format. + speedButton.setText(speedFormatter.format(speed)); speedButton.setTextColor(Utils.getAppForegroundColor()); speedButton.setTextSize(12); speedButton.setAllCaps(false); @@ -498,6 +500,9 @@ public class CustomPlaybackSpeedPatch { gridLayout.addView(buttonContainer); } + // Restore 2 digit minimum. + speedFormatter.setMinimumFractionDigits(2); + // Add in-rows speed buttons layout to main layout. mainLayout.addView(gridLayout); @@ -631,8 +636,7 @@ public class CustomPlaybackSpeedPatch { * @param speed The playback speed value to format. * @return A string representation of the speed with 'x' (e.g. "1.25x" or "1.00x"). */ - private static String formatSpeedStringX(float speed, int minimumFractionDigits) { - speedFormatter.setMinimumFractionDigits(minimumFractionDigits); + private static String formatSpeedStringX(float speed) { return speedFormatter.format(speed) + 'x'; } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/spoof/SpoofAppVersionPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/spoof/SpoofAppVersionPatch.java index 25ad35d64..64628661a 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/spoof/SpoofAppVersionPatch.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/spoof/SpoofAppVersionPatch.java @@ -9,7 +9,7 @@ public class SpoofAppVersionPatch { private static final String SPOOF_APP_VERSION_TARGET = Settings.SPOOF_APP_VERSION_TARGET.get(); /** - * Injection point + * injection point. */ public static String getYouTubeVersionOverride(String version) { if (SPOOF_APP_VERSION_ENABLED) return SPOOF_APP_VERSION_TARGET; diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/theme/SeekbarColorPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/theme/SeekbarColorPatch.java index 4e3405860..965b16364 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/theme/SeekbarColorPatch.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/theme/SeekbarColorPatch.java @@ -126,7 +126,7 @@ public final class SeekbarColorPatch { } /** - * Injection point + * injection point. */ public static boolean useLotteLaunchSplashScreen(boolean original) { // This method is only used for development purposes to force the old style launch screen. diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java index d279287f0..ac24f2301 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java @@ -223,7 +223,9 @@ public class Settings extends BaseSettings { public static final BooleanSetting HIDE_ASK_BUTTON = new BooleanSetting("revanced_hide_ask_button", FALSE); public static final BooleanSetting HIDE_CLIP_BUTTON = new BooleanSetting("revanced_hide_clip_button", TRUE); public static final BooleanSetting HIDE_DOWNLOAD_BUTTON = new BooleanSetting("revanced_hide_download_button", FALSE); + public static final BooleanSetting HIDE_HYPE_BUTTON = new BooleanSetting("revanced_hide_hype_button", FALSE); public static final BooleanSetting HIDE_LIKE_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_like_dislike_button", FALSE); + public static final BooleanSetting HIDE_PROMOTE_BUTTON = new BooleanSetting("revanced_hide_promote_button", FALSE); public static final BooleanSetting HIDE_REMIX_BUTTON = new BooleanSetting("revanced_hide_remix_button", TRUE); public static final BooleanSetting HIDE_REPORT_BUTTON = new BooleanSetting("revanced_hide_report_button", FALSE); public static final BooleanSetting HIDE_SAVE_BUTTON = new BooleanSetting("revanced_hide_save_button", FALSE); @@ -244,6 +246,7 @@ public class Settings extends BaseSettings { public static final BooleanSetting HIDE_PLAYER_FLYOUT_SPEED = new BooleanSetting("revanced_hide_player_flyout_speed", FALSE); public static final BooleanSetting HIDE_PLAYER_FLYOUT_STABLE_VOLUME = new BooleanSetting("revanced_hide_player_flyout_stable_volume", FALSE); public static final BooleanSetting HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER = new BooleanSetting("revanced_hide_player_flyout_video_quality_footer", FALSE); + public static final BooleanSetting HIDE_PLAYER_FLYOUT_VIDEO_QUALITY = new BooleanSetting("revanced_hide_player_flyout_video_quality", FALSE); public static final BooleanSetting HIDE_PLAYER_FLYOUT_WATCH_IN_VR = new BooleanSetting("revanced_hide_player_flyout_watch_in_vr", TRUE); // General layout @@ -255,6 +258,7 @@ public class Settings extends BaseSettings { public static final BooleanSetting GRADIENT_LOADING_SCREEN = new BooleanSetting("revanced_gradient_loading_screen", FALSE, true); public static final EnumSetting SPLASH_SCREEN_ANIMATION_STYLE = new EnumSetting<>("revanced_splash_screen_animation_style", SplashScreenAnimationStyle.FPS_60_ONE_SECOND, true); public static final EnumSetting HEADER_LOGO = new EnumSetting<>("revanced_header_logo", HeaderLogo.DEFAULT, true); + public static final BooleanSetting DISABLE_SIGNIN_TO_TV_POPUP = new BooleanSetting("revanced_disable_signin_to_tv_popup", FALSE); public static final BooleanSetting REMOVE_VIEWER_DISCRETION_DIALOG = new BooleanSetting("revanced_remove_viewer_discretion_dialog", FALSE, "revanced_remove_viewer_discretion_dialog_user_dialog_message"); diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/shared/PlayerControlsVisibility.kt b/extensions/youtube/src/main/java/app/revanced/extension/youtube/shared/PlayerControlsVisibility.kt new file mode 100644 index 000000000..5585bc157 --- /dev/null +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/shared/PlayerControlsVisibility.kt @@ -0,0 +1,48 @@ +package app.revanced.extension.youtube.shared + +import app.revanced.extension.shared.Logger +import app.revanced.extension.youtube.Event + +/** + * PlayerControls visibility state. + */ +enum class PlayerControlsVisibility { + PLAYER_CONTROLS_VISIBILITY_UNKNOWN, + PLAYER_CONTROLS_VISIBILITY_WILL_HIDE, + PLAYER_CONTROLS_VISIBILITY_HIDDEN, + PLAYER_CONTROLS_VISIBILITY_WILL_SHOW, + PLAYER_CONTROLS_VISIBILITY_SHOWN; + + companion object { + + private val nameToPlayerControlsVisibility = PlayerControlsVisibility.entries.associateBy { it.name } + + @JvmStatic + fun setFromString(enumName: String) { + val newType = nameToPlayerControlsVisibility[enumName] + if (newType == null) { + Logger.printException { "Unknown PlayerControlsVisibility encountered: $enumName" } + } else { + current = newType + } + } + + @JvmStatic + var current + get() = currentPlayerControlsVisibility + private set(type) { + if (currentPlayerControlsVisibility != type) { + Logger.printDebug { "Changed to: $type" } + + currentPlayerControlsVisibility = type + onChange(type) + } + } + + @Volatile // Read/write from different threads. + private var currentPlayerControlsVisibility = PLAYER_CONTROLS_VISIBILITY_UNKNOWN + + @JvmStatic + val onChange = Event() + } +} \ No newline at end of file diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/SegmentPlaybackController.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/SegmentPlaybackController.java index 300488390..c53c12460 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/SegmentPlaybackController.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/SegmentPlaybackController.java @@ -13,7 +13,6 @@ import android.graphics.Rect; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.shapes.RoundRectShape; import android.text.TextUtils; -import android.util.DisplayMetrics; import android.util.Range; import android.view.Gravity; import android.view.ViewGroup; @@ -877,7 +876,7 @@ public class SegmentPlaybackController { } /** - * Injection point + * injection point. */ @SuppressWarnings("unused") public static void setSponsorBarRect(Object self) { @@ -909,7 +908,7 @@ public class SegmentPlaybackController { } /** - * Injection point + * injection point. */ @SuppressWarnings("unused") public static void setSponsorBarThickness(int thickness) { diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/ui/CreateSegmentButton.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/ui/CreateSegmentButton.java index b764ef24a..57d7caec8 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/ui/CreateSegmentButton.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/ui/CreateSegmentButton.java @@ -5,10 +5,10 @@ import android.view.View; import androidx.annotation.Nullable; import app.revanced.extension.shared.Logger; -import app.revanced.extension.youtube.patches.VideoInformation; import app.revanced.extension.youtube.settings.Settings; import app.revanced.extension.youtube.videoplayer.PlayerControlButton; +@SuppressWarnings("unused") public class CreateSegmentButton { @Nullable private static PlayerControlButton instance; @@ -18,7 +18,7 @@ public class CreateSegmentButton { } /** - * injection point + * injection point. */ public static void initialize(View controlsView) { try { @@ -36,21 +36,27 @@ public class CreateSegmentButton { } /** - * Injection point + * injection point. + */ + public static void setVisibilityNegatedImmediate() { + if (instance != null) instance.setVisibilityNegatedImmediate(); + } + + /** + * injection point. */ public static void setVisibilityImmediate(boolean visible) { if (instance != null) instance.setVisibilityImmediate(visible); } /** - * Injection point + * injection point. */ public static void setVisibility(boolean visible, boolean animated) { if (instance != null) instance.setVisibility(visible, animated); } private static boolean shouldBeShown() { - return Settings.SB_ENABLED.get() && Settings.SB_CREATE_NEW_SEGMENT.get() - && !VideoInformation.isAtEndOfVideo(); + return Settings.SB_ENABLED.get() && Settings.SB_CREATE_NEW_SEGMENT.get(); } } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/ui/SponsorBlockViewController.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/ui/SponsorBlockViewController.java index 4749c6930..dd753934a 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/ui/SponsorBlockViewController.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/ui/SponsorBlockViewController.java @@ -16,7 +16,6 @@ import java.util.Objects; import app.revanced.extension.shared.Logger; import app.revanced.extension.shared.Utils; -import app.revanced.extension.youtube.settings.Settings; import app.revanced.extension.youtube.shared.PlayerType; import app.revanced.extension.youtube.sponsorblock.objects.SponsorSegment; import kotlin.Unit; @@ -227,22 +226,4 @@ public class SponsorBlockViewController { params.bottomMargin = fullScreen ? ctaBottomMargin : defaultBottomMargin; view.setLayoutParams(params); } - - /** - * Injection point. - */ - public static void endOfVideoReached() { - try { - Logger.printDebug(() -> "endOfVideoReached"); - // the buttons automatically set themselves to visible when appropriate, - // but if buttons are showing when the end of the video is reached then they need - // to be forcefully hidden - if (!Settings.AUTO_REPEAT.get()) { - CreateSegmentButton.hideControls(); - VotingButton.hideControls(); - } - } catch (Exception ex) { - Logger.printException(() -> "endOfVideoReached failure", ex); - } - } } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/ui/VotingButton.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/ui/VotingButton.java index 87d46c464..32af03272 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/ui/VotingButton.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/sponsorblock/ui/VotingButton.java @@ -5,12 +5,12 @@ import android.view.View; import androidx.annotation.Nullable; import app.revanced.extension.shared.Logger; -import app.revanced.extension.youtube.patches.VideoInformation; import app.revanced.extension.youtube.settings.Settings; import app.revanced.extension.youtube.sponsorblock.SegmentPlaybackController; import app.revanced.extension.youtube.sponsorblock.SponsorBlockUtils; import app.revanced.extension.youtube.videoplayer.PlayerControlButton; +@SuppressWarnings("unused") public class VotingButton { @Nullable private static PlayerControlButton instance; @@ -20,7 +20,7 @@ public class VotingButton { } /** - * injection point + * injection point. */ public static void initialize(View controlsView) { try { @@ -38,14 +38,21 @@ public class VotingButton { } /** - * Injection point + * injection point. + */ + public static void setVisibilityNegatedImmediate() { + if (instance != null) instance.setVisibilityNegatedImmediate(); + } + + /** + * injection point. */ public static void setVisibilityImmediate(boolean visible) { if (instance != null) instance.setVisibilityImmediate(visible); } /** - * Injection point + * injection point. */ public static void setVisibility(boolean visible, boolean animated) { if (instance != null) instance.setVisibility(visible, animated); @@ -53,6 +60,6 @@ public class VotingButton { private static boolean shouldBeShown() { return Settings.SB_ENABLED.get() && Settings.SB_VOTING_BUTTON.get() - && SegmentPlaybackController.videoHasSegments() && !VideoInformation.isAtEndOfVideo(); + && SegmentPlaybackController.videoHasSegments(); } } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/CopyVideoUrlButton.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/CopyVideoUrlButton.java index be66cd70a..b0dc22e76 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/CopyVideoUrlButton.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/CopyVideoUrlButton.java @@ -7,7 +7,6 @@ import androidx.annotation.Nullable; import app.revanced.extension.shared.Logger; import app.revanced.extension.youtube.patches.CopyVideoUrlPatch; import app.revanced.extension.youtube.settings.Settings; -import app.revanced.extension.youtube.shared.PlayerType; @SuppressWarnings("unused") public class CopyVideoUrlButton { @@ -22,7 +21,7 @@ public class CopyVideoUrlButton { instance = new PlayerControlButton( controlsView, "revanced_copy_video_url_button", - "revanced_copy_video_url_button_placeholder", + null, Settings.COPY_VIDEO_URL::get, view -> CopyVideoUrlPatch.copyUrl(false), view -> { @@ -35,15 +34,22 @@ public class CopyVideoUrlButton { } } + /**` + * injection point. + */ + public static void setVisibilityNegatedImmediate() { + if (instance != null) instance.setVisibilityNegatedImmediate(); + } + /** - * injection point + * injection point. */ public static void setVisibilityImmediate(boolean visible) { if (instance != null) instance.setVisibilityImmediate(visible); } /** - * injection point + * injection point. */ public static void setVisibility(boolean visible, boolean animated) { if (instance != null) instance.setVisibility(visible, animated); diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/CopyVideoUrlTimestampButton.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/CopyVideoUrlTimestampButton.java index f7f246e1c..c702756ed 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/CopyVideoUrlTimestampButton.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/CopyVideoUrlTimestampButton.java @@ -7,7 +7,6 @@ import androidx.annotation.Nullable; import app.revanced.extension.shared.Logger; import app.revanced.extension.youtube.patches.CopyVideoUrlPatch; import app.revanced.extension.youtube.settings.Settings; -import app.revanced.extension.youtube.shared.PlayerType; @SuppressWarnings("unused") public class CopyVideoUrlTimestampButton { @@ -22,7 +21,7 @@ public class CopyVideoUrlTimestampButton { instance = new PlayerControlButton( controlsView, "revanced_copy_video_url_timestamp_button", - "revanced_copy_video_url_timestamp_button_placeholder", + null, Settings.COPY_VIDEO_URL_TIMESTAMP::get, view -> CopyVideoUrlPatch.copyUrl(true), view -> { @@ -36,14 +35,21 @@ public class CopyVideoUrlTimestampButton { } /** - * injection point + * injection point. + */ + public static void setVisibilityNegatedImmediate() { + if (instance != null) instance.setVisibilityNegatedImmediate(); + } + + /** + * injection point. */ public static void setVisibilityImmediate(boolean visible) { if (instance != null) instance.setVisibilityImmediate(visible); } /** - * injection point + * injection point. */ public static void setVisibility(boolean visible, boolean animated) { if (instance != null) instance.setVisibility(visible, animated); diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/ExternalDownloadButton.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/ExternalDownloadButton.java index 1ba5b2dcc..12e465ec2 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/ExternalDownloadButton.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/ExternalDownloadButton.java @@ -22,7 +22,7 @@ public class ExternalDownloadButton { instance = new PlayerControlButton( controlsView, "revanced_external_download_button", - "revanced_external_download_button_placeholder", + null, Settings.EXTERNAL_DOWNLOADER::get, ExternalDownloadButton::onDownloadClick, null @@ -33,14 +33,21 @@ public class ExternalDownloadButton { } /** - * injection point + * injection point. + */ + public static void setVisibilityNegatedImmediate() { + if (instance != null) instance.setVisibilityNegatedImmediate(); + } + + /** + * injection point. */ public static void setVisibilityImmediate(boolean visible) { if (instance != null) instance.setVisibilityImmediate(visible); } /** - * Injection point + * injection point. */ public static void setVisibility(boolean visible, boolean animated) { if (instance != null) instance.setVisibility(visible, animated); diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/PlaybackSpeedDialogButton.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/PlaybackSpeedDialogButton.java index cb4545cfb..d7c4fc346 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/PlaybackSpeedDialogButton.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/PlaybackSpeedDialogButton.java @@ -4,16 +4,26 @@ import android.view.View; import androidx.annotation.Nullable; +import java.text.DecimalFormat; + import app.revanced.extension.shared.Logger; +import app.revanced.extension.shared.Utils; import app.revanced.extension.youtube.patches.VideoInformation; import app.revanced.extension.youtube.patches.playback.speed.CustomPlaybackSpeedPatch; import app.revanced.extension.youtube.settings.Settings; @SuppressWarnings("unused") public class PlaybackSpeedDialogButton { + @Nullable private static PlayerControlButton instance; + private static final DecimalFormat speedDecimalFormatter = new DecimalFormat(); + static { + speedDecimalFormatter.setMinimumFractionDigits(1); + speedDecimalFormatter.setMaximumFractionDigits(2); + } + /** * Injection point. */ @@ -21,8 +31,9 @@ public class PlaybackSpeedDialogButton { try { instance = new PlayerControlButton( controlsView, + "revanced_playback_speed_dialog_button_container", "revanced_playback_speed_dialog_button", - "revanced_playback_speed_dialog_button_placeholder", + "revanced_playback_speed_dialog_button_text", Settings.PLAYBACK_SPEED_DIALOG_BUTTON::get, view -> { try { @@ -37,11 +48,11 @@ public class PlaybackSpeedDialogButton { }, view -> { try { + final float defaultSpeed = Settings.PLAYBACK_SPEED_DEFAULT.get(); final float speed = (!Settings.REMEMBER_PLAYBACK_SPEED_LAST_SELECTED.get() || - VideoInformation.getPlaybackSpeed() == Settings.PLAYBACK_SPEED_DEFAULT.get()) + VideoInformation.getPlaybackSpeed() == defaultSpeed) ? 1.0f - : Settings.PLAYBACK_SPEED_DEFAULT.get(); - + : defaultSpeed; VideoInformation.overridePlaybackSpeed(speed); } catch (Exception ex) { Logger.printException(() -> "speed button reset failure", ex); @@ -49,22 +60,60 @@ public class PlaybackSpeedDialogButton { return true; } ); + + // Set the appropriate icon. + updateButtonAppearance(); } catch (Exception ex) { Logger.printException(() -> "initializeButton failure", ex); } } /** - * injection point + * injection point. */ - public static void setVisibilityImmediate(boolean visible) { - if (instance != null) instance.setVisibilityImmediate(visible); + public static void setVisibilityNegatedImmediate() { + if (instance != null) instance.setVisibilityNegatedImmediate(); } /** - * injection point + * Injection point. + */ + public static void setVisibilityImmediate(boolean visible) { + if (instance != null) { + instance.setVisibilityImmediate(visible); + } + } + + /** + * Injection point. */ public static void setVisibility(boolean visible, boolean animated) { - if (instance != null) instance.setVisibility(visible, animated); + if (instance != null) { + instance.setVisibility(visible, animated); + } } -} \ No newline at end of file + + /** + * Injection point. + */ + public static void videoSpeedChanged(float currentVideoSpeed) { + updateButtonAppearance(); + } + + /** + * Updates the button's appearance, including icon and text overlay. + */ + private static void updateButtonAppearance() { + if (instance == null) return; + + try { + Utils.verifyOnMainThread(); + + String speedText = speedDecimalFormatter.format(VideoInformation.getPlaybackSpeed()); + instance.setTextOverlay(speedText); + Logger.printDebug(() -> "Updated playback speed button text to: " + speedText); + } catch (Exception ex) { + Logger.printException(() -> "updateButtonAppearance failure", ex); + } + } +} diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/PlayerControlButton.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/PlayerControlButton.java index 94c92b738..c9d61a8d3 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/PlayerControlButton.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/PlayerControlButton.java @@ -1,8 +1,9 @@ package app.revanced.extension.youtube.videoplayer; import android.view.View; -import android.view.animation.Animation; +import android.view.ViewPropertyAnimator; import android.widget.ImageView; +import android.widget.TextView; import androidx.annotation.Nullable; @@ -10,78 +11,70 @@ import java.lang.ref.WeakReference; import app.revanced.extension.shared.Logger; import app.revanced.extension.shared.Utils; +import app.revanced.extension.youtube.shared.PlayerControlsVisibility; import app.revanced.extension.youtube.shared.PlayerType; import kotlin.Unit; public class PlayerControlButton { - public interface PlayerControlButtonVisibility { + + public interface PlayerControlButtonStatus { /** * @return If the button should be shown when the player overlay is visible. */ - boolean shouldBeShown(); + boolean buttonEnabled(); } - private static final int fadeInDuration; - private static final int fadeOutDuration; - - private static final Animation fadeInAnimation; - private static final Animation fadeOutAnimation; - private static final Animation fadeOutImmediate; - - static { - fadeInDuration = Utils.getResourceInteger("fade_duration_fast"); - fadeOutDuration = Utils.getResourceInteger("fade_duration_scheduled"); - - fadeInAnimation = Utils.getResourceAnimation("fade_in"); - fadeInAnimation.setDuration(fadeInDuration); - - fadeOutAnimation = Utils.getResourceAnimation("fade_out"); - fadeOutAnimation.setDuration(fadeOutDuration); - - // Animation for the fast fade out after tapping the overlay. - // Currently not used but should be. - fadeOutImmediate = Utils.getResourceAnimation("abc_fade_out"); - fadeOutImmediate.setDuration(Utils.getResourceInteger("fade_duration_fast")); - } + private static final int fadeInDuration = Utils.getResourceInteger("fade_duration_fast"); + private static final int fadeOutDuration = Utils.getResourceInteger("fade_duration_scheduled"); + private final WeakReference containerRef; private final WeakReference buttonRef; - /** - * Empty view with the same layout size as the button. Used to fill empty space while the - * fade out animation runs. Without this the chapter titles overlapping the button when fading out. - */ - private final WeakReference placeHolderRef; - private final PlayerControlButtonVisibility visibilityCheck; + private final WeakReference textOverlayRef; + private final PlayerControlButtonStatus enabledStatus; private boolean isVisible; + private long lastTimeSetVisible; public PlayerControlButton(View controlsViewGroup, - String imageViewButtonId, - @Nullable String placeholderId, - PlayerControlButtonVisibility buttonVisibility, + String buttonId, + @Nullable String textOverlayId, + PlayerControlButtonStatus enabledStatus, View.OnClickListener onClickListener, @Nullable View.OnLongClickListener longClickListener) { - ImageView imageView = Utils.getChildViewByResourceName(controlsViewGroup, imageViewButtonId); - imageView.setVisibility(View.GONE); + this(controlsViewGroup, buttonId, buttonId, textOverlayId, + enabledStatus, onClickListener, longClickListener); + } - View tempPlaceholder = null; - if (placeholderId != null) { - tempPlaceholder = Utils.getChildViewByResourceName(controlsViewGroup, placeholderId); - tempPlaceholder.setVisibility(View.GONE); - } - placeHolderRef = new WeakReference<>(tempPlaceholder); + public PlayerControlButton(View controlsViewGroup, + String viewToHide, + String buttonId, + @Nullable String textOverlayId, + PlayerControlButtonStatus enabledStatus, + View.OnClickListener onClickListener, + @Nullable View.OnLongClickListener longClickListener) { + View containerView = Utils.getChildViewByResourceName(controlsViewGroup, viewToHide); + containerView.setVisibility(View.GONE); + containerRef = new WeakReference<>(containerView); - imageView.setOnClickListener(onClickListener); + View button = Utils.getChildViewByResourceName(controlsViewGroup, buttonId); + button.setOnClickListener(onClickListener); if (longClickListener != null) { - imageView.setOnLongClickListener(longClickListener); + button.setOnLongClickListener(longClickListener); } + buttonRef = new WeakReference<>(button); - visibilityCheck = buttonVisibility; - buttonRef = new WeakReference<>(imageView); + TextView tempTextOverlay = null; + if (textOverlayId != null) { + tempTextOverlay = Utils.getChildViewByResourceName(controlsViewGroup, textOverlayId); + } + textOverlayRef = new WeakReference<>(tempTextOverlay); + + this.enabledStatus = enabledStatus; isVisible = false; // Update the visibility after the player type changes. // This ensures that button animations are cleared and their states are updated correctly // when switching between states like minimized, maximized, or fullscreen, preventing - // "stuck" animations or incorrect visibility. Without this fix the issue is most noticable + // "stuck" animations or incorrect visibility. Without this fix the issue is most noticeable // when maximizing type 3 miniplayer. PlayerType.getOnChange().addObserver((PlayerType type) -> { playerTypeChanged(type); @@ -89,13 +82,55 @@ public class PlayerControlButton { }); } + public void setVisibilityNegatedImmediate() { + try { + Utils.verifyOnMainThread(); + if (PlayerControlsVisibility.getCurrent() != PlayerControlsVisibility.PLAYER_CONTROLS_VISIBILITY_HIDDEN) { + return; + } + + final boolean buttonEnabled = enabledStatus.buttonEnabled(); + if (!buttonEnabled) { + return; + } + + View container = containerRef.get(); + if (container == null) { + return; + } + + isVisible = false; + + ViewPropertyAnimator animate = container.animate(); + animate.cancel(); + + // If the overlay is tapped to display then immediately tapped to dismiss + // before the fade in animation finishes, then the fade out animation is + // the time between when the fade in started and now. + final long animationDuration = Math.min(fadeInDuration, + System.currentTimeMillis() - lastTimeSetVisible); + if (animationDuration <= 0) { + // Should never happen, but handle just in case. + container.setVisibility(View.GONE); + return; + } + + animate.alpha(0) + .setDuration(animationDuration) + .withEndAction(() -> container.setVisibility(View.GONE)) + .start(); + } catch (Exception ex) { + Logger.printException(() -> "setVisibilityNegatedImmediate failure", ex); + } + } + public void setVisibilityImmediate(boolean visible) { if (visible) { // Fix button flickering, by pushing this call to the back of // the main thread and letting other layout code run first. - Utils.runOnMainThread(() -> private_setVisibility(true, false)); + Utils.runOnMainThread(() -> privateSetVisibility(true, false)); } else { - private_setVisibility(false, false); + privateSetVisibility(false, false); } } @@ -103,47 +138,53 @@ public class PlayerControlButton { // Ignore this call, otherwise with full screen thumbnails the buttons are visible while seeking. if (visible && !animated) return; - private_setVisibility(visible, animated); + privateSetVisibility(visible, animated); } - private void private_setVisibility(boolean visible, boolean animated) { + private void privateSetVisibility(boolean visible, boolean animated) { try { + Utils.verifyOnMainThread(); + if (isVisible == visible) return; isVisible = visible; - View button = buttonRef.get(); - if (button == null) return; + if (visible) { + lastTimeSetVisible = System.currentTimeMillis(); + } - View placeholder = placeHolderRef.get(); - final boolean shouldBeShown = visibilityCheck.shouldBeShown(); + View container = containerRef.get(); + if (container == null) { + return; + } + + if (visible && enabledStatus.buttonEnabled()) { + ViewPropertyAnimator animate = container.animate(); + animate.cancel(); + container.setVisibility(View.VISIBLE); - if (visible && shouldBeShown) { - button.clearAnimation(); if (animated) { - button.startAnimation(PlayerControlButton.fadeInAnimation); + container.setAlpha(0); + animate.alpha(1) + .setDuration(fadeInDuration) + .start(); + } else { + container.setAlpha(1); } - button.setVisibility(View.VISIBLE); + } else if (container.getVisibility() == View.VISIBLE) { + ViewPropertyAnimator animate = container.animate(); + animate.cancel(); - if (placeholder != null) { - placeholder.setVisibility(View.GONE); - } - } else { - if (button.getVisibility() == View.VISIBLE) { - button.clearAnimation(); - if (animated) { - button.startAnimation(PlayerControlButton.fadeOutAnimation); - } - button.setVisibility(View.GONE); - } - - if (placeholder != null) { - placeholder.setVisibility(shouldBeShown - ? View.VISIBLE - : View.GONE); + if (animated) { + animate.alpha(0) + .setDuration(fadeOutDuration) + .withEndAction(() -> container.setVisibility(View.GONE)) + .start(); + } else { + container.setVisibility(View.GONE); } } } catch (Exception ex) { - Logger.printException(() -> "private_setVisibility failure", ex); + Logger.printException(() -> "privateSetVisibility failure", ex); } } @@ -151,41 +192,36 @@ public class PlayerControlButton { * Synchronizes the button state after the player state changes. */ private void playerTypeChanged(PlayerType newType) { + Utils.verifyOnMainThread(); if (newType != PlayerType.WATCH_WHILE_MINIMIZED && !newType.isMaximizedOrFullscreen()) { return; } - View button = buttonRef.get(); - if (button == null) return; + View container = containerRef.get(); + if (container == null) { + return; + } - button.clearAnimation(); - View placeholder = placeHolderRef.get(); + container.animate().cancel(); - if (visibilityCheck.shouldBeShown()) { - if (isVisible) { - button.setVisibility(View.VISIBLE); - if (placeholder != null) placeholder.setVisibility(View.GONE); - } else { - button.setVisibility(View.GONE); - if (placeholder != null) placeholder.setVisibility(View.VISIBLE); - } + if (isVisible && enabledStatus.buttonEnabled()) { + container.setVisibility(View.VISIBLE); + container.setAlpha(1); } else { - button.setVisibility(View.GONE); - if (placeholder != null) placeholder.setVisibility(View.GONE); + container.setVisibility(View.GONE); } } public void hide() { - if (!isVisible) return; - Utils.verifyOnMainThread(); - View view = buttonRef.get(); + if (!isVisible) { + return; + } + isVisible = false; + + View view = containerRef.get(); if (view == null) return; view.setVisibility(View.GONE); - - view = placeHolderRef.get(); - if (view != null) view.setVisibility(View.GONE); - isVisible = false; } /** @@ -193,50 +229,24 @@ public class PlayerControlButton { * @param resourceId Drawable identifier, or zero to hide the icon. */ public void setIcon(int resourceId) { - try { - View button = buttonRef.get(); - if (button instanceof ImageView imageButton) { - imageButton.setImageResource(resourceId); - } - } catch (Exception ex) { - Logger.printException(() -> "setIcon failure", ex); + Utils.verifyOnMainThread(); + + View button = buttonRef.get(); + if (button instanceof ImageView imageButton) { + imageButton.setImageResource(resourceId); } } /** - * Starts an animation on the button. - * @param animation The animation to apply. + * Sets the text to be displayed on the text overlay. + * @param text The text to set on the overlay, or null to clear the text. */ - public void startAnimation(Animation animation) { - try { - View button = buttonRef.get(); - if (button != null) { - button.startAnimation(animation); - } - } catch (Exception ex) { - Logger.printException(() -> "startAnimation failure", ex); - } - } + public void setTextOverlay(CharSequence text) { + Utils.verifyOnMainThread(); - /** - * Clears any animation on the button. - */ - public void clearAnimation() { - try { - View button = buttonRef.get(); - if (button != null) { - button.clearAnimation(); - } - } catch (Exception ex) { - Logger.printException(() -> "clearAnimation failure", ex); + TextView textOverlay = textOverlayRef.get(); + if (textOverlay != null) { + textOverlay.setText(text); } } - - /** - * Returns the View associated with this button. - * @return The button View. - */ - public View getView() { - return buttonRef.get(); - } } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/VideoQualityDialogButton.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/VideoQualityDialogButton.java index e0a29db5f..0c878616c 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/VideoQualityDialogButton.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/VideoQualityDialogButton.java @@ -2,9 +2,8 @@ package app.revanced.extension.youtube.videoplayer; import static app.revanced.extension.shared.StringRef.str; import static app.revanced.extension.shared.Utils.dipToPixels; -import static app.revanced.extension.youtube.patches.playback.quality.RememberVideoQualityPatch.AUTOMATIC_VIDEO_QUALITY_VALUE; -import static app.revanced.extension.youtube.patches.playback.quality.RememberVideoQualityPatch.VIDEO_QUALITY_1080P_PREMIUM_NAME; -import static app.revanced.extension.youtube.patches.playback.quality.RememberVideoQualityPatch.VideoQualityMenuInterface; +import static app.revanced.extension.youtube.patches.VideoInformation.AUTOMATIC_VIDEO_QUALITY_VALUE; +import static app.revanced.extension.youtube.patches.VideoInformation.VIDEO_QUALITY_PREMIUM_NAME; import android.app.Dialog; import android.content.Context; @@ -14,6 +13,7 @@ import android.graphics.drawable.shapes.RoundRectShape; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.style.ForegroundColorSpan; +import android.text.style.UnderlineSpan; import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; @@ -39,73 +39,25 @@ import java.util.List; import app.revanced.extension.shared.Logger; import app.revanced.extension.shared.Utils; +import app.revanced.extension.youtube.patches.VideoInformation; import app.revanced.extension.youtube.patches.playback.quality.RememberVideoQualityPatch; import app.revanced.extension.youtube.settings.Settings; +import kotlin.Unit; @SuppressWarnings("unused") public class VideoQualityDialogButton { - private static final int DRAWABLE_LD = getDrawableIdentifier("revanced_video_quality_dialog_button_ld"); - private static final int DRAWABLE_SD = getDrawableIdentifier("revanced_video_quality_dialog_button_sd"); - private static final int DRAWABLE_HD = getDrawableIdentifier("revanced_video_quality_dialog_button_hd"); - private static final int DRAWABLE_FHD = getDrawableIdentifier("revanced_video_quality_dialog_button_fhd"); - private static final int DRAWABLE_FHD_PLUS = getDrawableIdentifier("revanced_video_quality_dialog_button_fhd_plus"); - private static final int DRAWABLE_QHD = getDrawableIdentifier("revanced_video_quality_dialog_button_qhd"); - private static final int DRAWABLE_4K = getDrawableIdentifier("revanced_video_quality_dialog_button_4k"); - private static final int DRAWABLE_UNKNOWN = getDrawableIdentifier("revanced_video_quality_dialog_button_unknown"); - @Nullable private static PlayerControlButton instance; - /** - * The current resource name of the button icon. - */ - private static int currentIconResource; + @Nullable + private static CharSequence currentOverlayText; - private static int getDrawableIdentifier(String resourceName) { - final int resourceId = Utils.getResourceIdentifier(resourceName, "drawable"); - if (resourceId == 0) Logger.printException(() -> "Could not find resource: " + resourceName); - return resourceId; - } - - /** - * Updates the button icon based on the current video quality. - */ - public static void updateButtonIcon(@Nullable VideoQuality quality) { - try { - Utils.verifyOnMainThread(); - if (instance == null) return; - - final int resolution = quality == null - ? AUTOMATIC_VIDEO_QUALITY_VALUE // Video is still loading. - : quality.patch_getResolution(); - - final int iconResource = switch (resolution) { - case 144, 240, 360 -> DRAWABLE_LD; - case 480 -> DRAWABLE_SD; - case 720 -> DRAWABLE_HD; - case 1080 -> VIDEO_QUALITY_1080P_PREMIUM_NAME.equals(quality.patch_getQualityName()) - ? DRAWABLE_FHD_PLUS - : DRAWABLE_FHD; - case 1440 -> DRAWABLE_QHD; - case 2160 -> DRAWABLE_4K; - default -> DRAWABLE_UNKNOWN; - }; - - if (iconResource != currentIconResource) { - currentIconResource = iconResource; - - Utils.runOnMainThreadDelayed(() -> { - if (iconResource != currentIconResource) { - Logger.printDebug(() -> "Ignoring stale button update to: " + quality); - return; - } - instance.setIcon(iconResource); - }, 100); - } - } catch (Exception ex) { - Logger.printException(() -> "updateButtonIcon failure", ex); - } + static { + VideoInformation.onQualityChange.addObserver((@Nullable VideoQuality quality) -> { + updateButtonText(quality); + return Unit.INSTANCE; + }); } /** @@ -115,8 +67,9 @@ public class VideoQualityDialogButton { try { instance = new PlayerControlButton( controlsView, + "revanced_video_quality_dialog_button_container", "revanced_video_quality_dialog_button", - "revanced_video_quality_dialog_button_placeholder", + "revanced_video_quality_dialog_button_text", Settings.VIDEO_QUALITY_DIALOG_BUTTON::get, view -> { try { @@ -127,9 +80,8 @@ public class VideoQualityDialogButton { }, view -> { try { - VideoQuality[] qualities = RememberVideoQualityPatch.getCurrentQualities(); - VideoQualityMenuInterface menu = RememberVideoQualityPatch.getCurrentMenuInterface(); - if (qualities == null || menu == null) { + VideoQuality[] qualities = VideoInformation.getCurrentQualities(); + if (qualities == null) { Logger.printDebug(() -> "Cannot reset quality, videoQualities is null"); return true; } @@ -140,7 +92,7 @@ public class VideoQualityDialogButton { final int resolution = quality.patch_getResolution(); if (resolution != AUTOMATIC_VIDEO_QUALITY_VALUE && resolution <= defaultResolution) { Logger.printDebug(() -> "Resetting quality to: " + quality); - menu.patch_setQuality(quality); + VideoInformation.changeQuality(quality); return true; } } @@ -156,13 +108,20 @@ public class VideoQualityDialogButton { } ); - // Set initial icon. - updateButtonIcon(RememberVideoQualityPatch.getCurrentQuality()); + // Set initial text. + updateButtonText(VideoInformation.getCurrentQuality()); } catch (Exception ex) { Logger.printException(() -> "initializeButton failure", ex); } } + /** + * injection point. + */ + public static void setVisibilityNegatedImmediate() { + if (instance != null) instance.setVisibilityNegatedImmediate(); + } + /** * Injection point. */ @@ -181,13 +140,56 @@ public class VideoQualityDialogButton { } } + /** + * Updates the button text based on the current video quality. + */ + public static void updateButtonText(@Nullable VideoQuality quality) { + try { + Utils.verifyOnMainThread(); + if (instance == null) return; + + final int resolution = quality == null + ? AUTOMATIC_VIDEO_QUALITY_VALUE // Video is still loading. + : quality.patch_getResolution(); + + SpannableStringBuilder text = new SpannableStringBuilder(); + String qualityText = switch (resolution) { + case AUTOMATIC_VIDEO_QUALITY_VALUE -> ""; + case 144, 240, 360 -> "LD"; + case 480 -> "SD"; + case 720 -> "HD"; + case 1080 -> "FHD"; + case 1440 -> "QHD"; + case 2160 -> "4K"; + default -> "?"; // Should never happen. + }; + text.append(qualityText); + + if (quality != null && quality.patch_getQualityName().contains(VIDEO_QUALITY_PREMIUM_NAME)) { + // Underline the entire "FHD" text for 1080p Premium. + text.setSpan(new UnderlineSpan(), 0, qualityText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + } + + currentOverlayText = text; + Utils.runOnMainThreadDelayed(() -> { + if (currentOverlayText != text) { + Logger.printDebug(() -> "Ignoring stale button text update of: " + text); + return; + } + instance.setTextOverlay(text); + }, 100); + } catch (Exception ex) { + Logger.printException(() -> "updateButtonText failure", ex); + } + } + /** * Shows a dialog with available video qualities, excluding Auto, with a title showing the current quality. */ private static void showVideoQualityDialog(Context context) { try { - VideoQuality[] currentQualities = RememberVideoQualityPatch.getCurrentQualities(); - VideoQuality currentQuality = RememberVideoQualityPatch.getCurrentQuality(); + VideoQuality[] currentQualities = VideoInformation.getCurrentQualities(); + VideoQuality currentQuality = VideoInformation.getCurrentQuality(); if (currentQualities == null || currentQuality == null) { Logger.printDebug(() -> "Cannot show qualities dialog, videoQualities is null"); return; @@ -198,12 +200,6 @@ public class VideoQualityDialogButton { return; } - VideoQualityMenuInterface menu = RememberVideoQualityPatch.getCurrentMenuInterface(); - if (menu == null) { - Logger.printDebug(() -> "Cannot show qualities dialog, menu is null"); - return; - } - // -1 adjustment for automatic quality at first index. int listViewSelectedIndex = -1; for (VideoQuality quality : currentQualities) { @@ -317,15 +313,8 @@ public class VideoQualityDialogButton { try { final int originalIndex = which + 1; // Adjust for automatic. VideoQuality selectedQuality = currentQualities[originalIndex]; - Logger.printDebug(() -> "User clicked on quality: " + selectedQuality); - - if (RememberVideoQualityPatch.shouldRememberVideoQuality()) { - RememberVideoQualityPatch.saveDefaultQuality(selectedQuality.patch_getResolution()); - } - // Don't update button icon now. Icon will update when the actual - // quality is changed by YT. This is needed to ensure the icon is correct - // if YT ignores changing from 1080p Premium to regular 1080p. - menu.patch_setQuality(selectedQuality); + RememberVideoQualityPatch.userChangedQuality(selectedQuality.patch_getResolution()); + VideoInformation.changeQuality(selectedQuality); dialog.dismiss(); } catch (Exception ex) { @@ -356,9 +345,12 @@ public class VideoQualityDialogButton { portraitWidth = Math.min( portraitWidth, context.getResources().getDisplayMetrics().heightPixels); + // Limit height in landscape mode. + params.height = Utils.percentageHeightToPixels(80); + } else { + params.height = WindowManager.LayoutParams.WRAP_CONTENT; } params.width = portraitWidth; - params.height = WindowManager.LayoutParams.WRAP_CONTENT; window.setAttributes(params); window.setBackgroundDrawable(null); } @@ -428,6 +420,15 @@ public class VideoQualityDialogButton { } private static class CustomQualityAdapter extends ArrayAdapter { + private static final int CUSTOM_LIST_ITEM_CHECKED_ID = Utils.getResourceIdentifier( + "revanced_custom_list_item_checked", "layout"); + private static final int CHECK_ICON_ID = Utils.getResourceIdentifier( + "revanced_check_icon", "id"); + private static final int CHECK_ICON_PLACEHOLDER_ID = Utils.getResourceIdentifier( + "revanced_check_icon_placeholder", "id"); + private static final int ITEM_TEXT_ID = Utils.getResourceIdentifier( + "revanced_item_text", "id"); + private int selectedPosition = -1; public CustomQualityAdapter(@NonNull Context context, @NonNull List objects) { @@ -446,20 +447,14 @@ public class VideoQualityDialogButton { if (convertView == null) { convertView = LayoutInflater.from(getContext()).inflate( - Utils.getResourceIdentifier("revanced_custom_list_item_checked", "layout"), + CUSTOM_LIST_ITEM_CHECKED_ID, parent, false ); viewHolder = new ViewHolder(); - viewHolder.checkIcon = convertView.findViewById( - Utils.getResourceIdentifier("revanced_check_icon", "id") - ); - viewHolder.placeholder = convertView.findViewById( - Utils.getResourceIdentifier("revanced_check_icon_placeholder", "id") - ); - viewHolder.textView = convertView.findViewById( - Utils.getResourceIdentifier("revanced_item_text", "id") - ); + viewHolder.checkIcon = convertView.findViewById(CHECK_ICON_ID); + viewHolder.placeholder = convertView.findViewById(CHECK_ICON_PLACEHOLDER_ID); + viewHolder.textView = convertView.findViewById(ITEM_TEXT_ID); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); diff --git a/gradle.properties b/gradle.properties index 766fa520a..cd5e03f85 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.33.0 +version = 5.34.0-dev.13 diff --git a/patches/api/patches.api b/patches/api/patches.api index 91f78e8db..aae1502c1 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -1357,6 +1357,10 @@ public final class app/revanced/patches/youtube/layout/hide/shorts/HideShortsCom public static final fun getHideShortsComponentsPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } +public final class app/revanced/patches/youtube/layout/hide/signintotvpopup/DisableSignInToTvPatchPopupKt { + public static final fun getDisableSignInToTvPopupPatch ()Lapp/revanced/patcher/patch/BytecodePatch; +} + public final class app/revanced/patches/youtube/layout/hide/suggestedvideoendscreen/DisableSuggestedVideoEndScreenPatchKt { public static final fun getDisableSuggestedVideoEndScreenPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } @@ -1532,6 +1536,10 @@ public final class app/revanced/patches/youtube/misc/navigation/NavigationBarHoo public static final fun setHookNavigationButtonCreated (Lkotlin/jvm/functions/Function1;)V } +public final class app/revanced/patches/youtube/misc/playercontrols/PlayerControlsOverlayVisibilityPatchKt { + public static final fun getPlayerControlsOverlayVisibilityPatch ()Lapp/revanced/patcher/patch/BytecodePatch; +} + public final class app/revanced/patches/youtube/misc/playercontrols/PlayerControlsPatchKt { public static final fun getAddBottomControl ()Lkotlin/jvm/functions/Function1; public static final fun getPlayerControlsPatch ()Lapp/revanced/patcher/patch/BytecodePatch; @@ -1660,12 +1668,12 @@ public final class app/revanced/patches/youtube/video/quality/RememberVideoQuali public static final fun getRememberVideoQualityPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } -public final class app/revanced/patches/youtube/video/quality/VideoQualityPatchKt { - public static final fun getVideoQualityPatch ()Lapp/revanced/patcher/patch/BytecodePatch; +public final class app/revanced/patches/youtube/video/quality/VideoQualityDialogButtonPatchKt { + public static final fun getVideoQualityDialogButtonPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } -public final class app/revanced/patches/youtube/video/quality/button/VideoQualityDialogButtonPatchKt { - public static final fun getVideoQualityButtonPatch ()Lapp/revanced/patcher/patch/BytecodePatch; +public final class app/revanced/patches/youtube/video/quality/VideoQualityPatchKt { + public static final fun getVideoQualityPatch ()Lapp/revanced/patcher/patch/BytecodePatch; } public final class app/revanced/patches/youtube/video/speed/PlaybackSpeedPatchKt { diff --git a/patches/src/main/kotlin/app/revanced/patches/backdrops/misc/pro/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/backdrops/misc/pro/Fingerprints.kt index bbe71e8c7..f8b146622 100644 --- a/patches/src/main/kotlin/app/revanced/patches/backdrops/misc/pro/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/backdrops/misc/pro/Fingerprints.kt @@ -3,6 +3,7 @@ package app.revanced.patches.backdrops.misc.pro import app.revanced.patcher.fingerprint import com.android.tools.smali.dexlib2.Opcode +@Deprecated("Fingerprint no longer resolves and will soon be deleted.") internal val proUnlockFingerprint = fingerprint { opcodes( Opcode.INVOKE_VIRTUAL, diff --git a/patches/src/main/kotlin/app/revanced/patches/backdrops/misc/pro/ProUnlockPatch.kt b/patches/src/main/kotlin/app/revanced/patches/backdrops/misc/pro/ProUnlockPatch.kt index 70bbcd9fd..0516e1eb7 100644 --- a/patches/src/main/kotlin/app/revanced/patches/backdrops/misc/pro/ProUnlockPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/backdrops/misc/pro/ProUnlockPatch.kt @@ -6,9 +6,8 @@ import app.revanced.patcher.patch.bytecodePatch import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Suppress("unused") -val proUnlockPatch = bytecodePatch( - name = "Pro unlock", -) { +@Deprecated("This patch no longer works and will soon be deleted.") +val proUnlockPatch = bytecodePatch{ compatibleWith("com.backdrops.wallpapers") execute { diff --git a/patches/src/main/kotlin/app/revanced/patches/instagram/misc/signature/SignatureCheckPatch.kt b/patches/src/main/kotlin/app/revanced/patches/instagram/misc/signature/SignatureCheckPatch.kt index 5bc077c4b..4c755ec82 100644 --- a/patches/src/main/kotlin/app/revanced/patches/instagram/misc/signature/SignatureCheckPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/instagram/misc/signature/SignatureCheckPatch.kt @@ -8,7 +8,7 @@ val signatureCheckPatch = bytecodePatch( name = "Disable signature check", description = "Disables the signature check that causes the app to crash on startup." ) { - compatibleWith("com.instagram.android"("378.0.0.52.68")) + compatibleWith("com.instagram.android") execute { isValidSignatureMethodFingerprint diff --git a/patches/src/main/kotlin/app/revanced/patches/music/layout/compactheader/HideCategoryBar.kt b/patches/src/main/kotlin/app/revanced/patches/music/layout/compactheader/HideCategoryBar.kt index b0021b966..2128722e7 100644 --- a/patches/src/main/kotlin/app/revanced/patches/music/layout/compactheader/HideCategoryBar.kt +++ b/patches/src/main/kotlin/app/revanced/patches/music/layout/compactheader/HideCategoryBar.kt @@ -3,6 +3,7 @@ package app.revanced.patches.music.layout.compactheader import app.revanced.patcher.extensions.InstructionExtensions.addInstructions import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.bytecodePatch +import app.revanced.util.findFreeRegister import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Suppress("unused") @@ -17,13 +18,14 @@ val hideCategoryBar = bytecodePatch( constructCategoryBarFingerprint.method.apply { val insertIndex = constructCategoryBarFingerprint.patternMatch!!.startIndex val register = getInstruction(insertIndex - 1).registerA + val freeRegister = findFreeRegister(insertIndex, register) addInstructions( insertIndex, """ - const/16 v2, 0x8 - invoke-virtual {v$register, v2}, Landroid/view/View;->setVisibility(I)V - """, + const/16 v$freeRegister, 0x8 + invoke-virtual { v$register, v$freeRegister }, Landroid/view/View;->setVisibility(I)V + """ ) } } diff --git a/patches/src/main/kotlin/app/revanced/patches/nunl/ads/HideAdsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/nunl/ads/HideAdsPatch.kt index 7aef3b3b9..14d05cfbc 100644 --- a/patches/src/main/kotlin/app/revanced/patches/nunl/ads/HideAdsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/nunl/ads/HideAdsPatch.kt @@ -14,7 +14,7 @@ val hideAdsPatch = bytecodePatch( name = "Hide ads", description = "Hide ads and sponsored articles in list pages and remove pre-roll ads on videos.", ) { - compatibleWith("nl.sanomamedia.android.nu"("11.3.0")) + compatibleWith("nl.sanomamedia.android.nu") dependsOn(sharedExtensionPatch("nunl", mainActivityOnCreateHook)) diff --git a/patches/src/main/kotlin/app/revanced/patches/nunl/ads/Hooks.kt b/patches/src/main/kotlin/app/revanced/patches/nunl/ads/Hooks.kt index 9a2e28bca..e83d37322 100644 --- a/patches/src/main/kotlin/app/revanced/patches/nunl/ads/Hooks.kt +++ b/patches/src/main/kotlin/app/revanced/patches/nunl/ads/Hooks.kt @@ -4,6 +4,6 @@ import app.revanced.patches.shared.misc.extension.extensionHook internal val mainActivityOnCreateHook = extensionHook { custom { method, classDef -> - classDef.type == "Lnl/sanomamedia/android/nu/main/NUMainActivity;" && method.name == "onCreate" + classDef.endsWith("/NUApplication;") && method.name == "onCreate" } } diff --git a/patches/src/main/kotlin/app/revanced/patches/pixiv/ads/HideAdsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/pixiv/ads/HideAdsPatch.kt index 29f63e9cf..4454895b1 100644 --- a/patches/src/main/kotlin/app/revanced/patches/pixiv/ads/HideAdsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/pixiv/ads/HideAdsPatch.kt @@ -1,21 +1,15 @@ package app.revanced.patches.pixiv.ads -import app.revanced.patcher.extensions.InstructionExtensions.addInstructions import app.revanced.patcher.patch.bytecodePatch +import app.revanced.util.returnEarly @Suppress("unused") val hideAdsPatch = bytecodePatch( name = "Hide ads", ) { - compatibleWith("jp.pxv.android") + compatibleWith("jp.pxv.android"("6.141.1")) execute { - shouldShowAdsFingerprint.method.addInstructions( - 0, - """ - const/4 v0, 0x0 - return v0 - """, - ) + shouldShowAdsFingerprint.method.returnEarly(false) } } diff --git a/patches/src/main/kotlin/app/revanced/patches/twitch/ad/audio/AudioAdsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/twitch/ad/audio/AudioAdsPatch.kt index c55e15e26..a0622f281 100644 --- a/patches/src/main/kotlin/app/revanced/patches/twitch/ad/audio/AudioAdsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/twitch/ad/audio/AudioAdsPatch.kt @@ -21,7 +21,7 @@ val audioAdsPatch = bytecodePatch( addResourcesPatch, ) - compatibleWith("tv.twitch.android.app") + compatibleWith("tv.twitch.android.app"("16.9.1", "25.3.0")) execute { addResources("twitch", "ad.audio.audioAdsPatch") diff --git a/patches/src/main/kotlin/app/revanced/patches/twitch/ad/embedded/EmbeddedAdsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/twitch/ad/embedded/EmbeddedAdsPatch.kt index 18aebedc8..8519b90ce 100644 --- a/patches/src/main/kotlin/app/revanced/patches/twitch/ad/embedded/EmbeddedAdsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/twitch/ad/embedded/EmbeddedAdsPatch.kt @@ -19,7 +19,7 @@ val embeddedAdsPatch = bytecodePatch( settingsPatch, ) - compatibleWith("tv.twitch.android.app") + compatibleWith("tv.twitch.android.app"("16.9.1", "25.3.0")) execute { addResources("twitch", "ad.embedded.embeddedAdsPatch") diff --git a/patches/src/main/kotlin/app/revanced/patches/twitch/ad/video/VideoAdsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/twitch/ad/video/VideoAdsPatch.kt index 7ba753325..6665db853 100644 --- a/patches/src/main/kotlin/app/revanced/patches/twitch/ad/video/VideoAdsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/twitch/ad/video/VideoAdsPatch.kt @@ -155,7 +155,5 @@ val videoAdsPatch = bytecodePatch( }, ) - compatibleWith( - "tv.twitch.android.app", - ) + compatibleWith("tv.twitch.android.app"("16.9.1", "25.3.0")) } diff --git a/patches/src/main/kotlin/app/revanced/patches/twitch/chat/antidelete/ShowDeletedMessagesPatch.kt b/patches/src/main/kotlin/app/revanced/patches/twitch/chat/antidelete/ShowDeletedMessagesPatch.kt index 9cd9aa141..7bc35a131 100644 --- a/patches/src/main/kotlin/app/revanced/patches/twitch/chat/antidelete/ShowDeletedMessagesPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/twitch/chat/antidelete/ShowDeletedMessagesPatch.kt @@ -22,7 +22,7 @@ val showDeletedMessagesPatch = bytecodePatch( addResourcesPatch, ) - compatibleWith("tv.twitch.android.app") + compatibleWith("tv.twitch.android.app"("16.9.1", "25.3.0")) fun createSpoilerConditionInstructions(register: String = "v0") = """ invoke-static {}, Lapp/revanced/extension/twitch/patches/ShowDeletedMessagesPatch;->shouldUseSpoiler()Z diff --git a/patches/src/main/kotlin/app/revanced/patches/twitch/chat/autoclaim/AutoClaimChannelPointsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/twitch/chat/autoclaim/AutoClaimChannelPointsPatch.kt index cb6879e86..d27a11c25 100644 --- a/patches/src/main/kotlin/app/revanced/patches/twitch/chat/autoclaim/AutoClaimChannelPointsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/twitch/chat/autoclaim/AutoClaimChannelPointsPatch.kt @@ -20,7 +20,7 @@ val autoClaimChannelPointsPatch = bytecodePatch( addResourcesPatch, ) - compatibleWith("tv.twitch.android.app") + compatibleWith("tv.twitch.android.app"("16.9.1", "25.3.0")) execute { addResources("twitch", "chat.autoclaim.autoClaimChannelPointsPatch") diff --git a/patches/src/main/kotlin/app/revanced/patches/twitch/debug/DebugModePatch.kt b/patches/src/main/kotlin/app/revanced/patches/twitch/debug/DebugModePatch.kt index 8b59dd954..34967b9ca 100644 --- a/patches/src/main/kotlin/app/revanced/patches/twitch/debug/DebugModePatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/twitch/debug/DebugModePatch.kt @@ -20,7 +20,7 @@ val debugModePatch = bytecodePatch( addResourcesPatch, ) - compatibleWith("tv.twitch.android.app") + compatibleWith("tv.twitch.android.app"("16.9.1", "25.3.0")) execute { addResources("twitch", "debug.debugModePatch") diff --git a/patches/src/main/kotlin/app/revanced/patches/twitch/misc/settings/SettingsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/twitch/misc/settings/SettingsPatch.kt index d41f86a4b..f75912e1c 100644 --- a/patches/src/main/kotlin/app/revanced/patches/twitch/misc/settings/SettingsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/twitch/misc/settings/SettingsPatch.kt @@ -48,7 +48,7 @@ val settingsPatch = bytecodePatch( settingsPatch(preferences = preferences), ) - compatibleWith("tv.twitch.android.app") + compatibleWith("tv.twitch.android.app"("16.9.1")) execute { addResources("twitch", "misc.settings.settingsPatch") diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/HideButtonsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/HideButtonsPatch.kt index 667bf1608..7b368f31f 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/HideButtonsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/HideButtonsPatch.kt @@ -42,7 +42,9 @@ val hideButtonsPatch = resourcePatch( SwitchPreference("revanced_hide_ask_button"), SwitchPreference("revanced_hide_clip_button"), SwitchPreference("revanced_hide_download_button"), + SwitchPreference("revanced_hide_hype_button"), SwitchPreference("revanced_hide_like_dislike_button"), + SwitchPreference("revanced_hide_promote_button"), SwitchPreference("revanced_hide_remix_button"), SwitchPreference("revanced_hide_report_button"), SwitchPreference("revanced_hide_save_button"), diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/flyoutmenupanel/HidePlayerFlyoutMenuPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/flyoutmenupanel/HidePlayerFlyoutMenuPatch.kt index 716540a4c..b18525c4c 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/flyoutmenupanel/HidePlayerFlyoutMenuPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/flyoutmenupanel/HidePlayerFlyoutMenuPatch.kt @@ -57,6 +57,7 @@ val hidePlayerFlyoutMenuPatch = bytecodePatch( ), SwitchPreference("revanced_hide_player_flyout_watch_in_vr"), SwitchPreference("revanced_hide_player_flyout_sleep_timer"), + SwitchPreference("revanced_hide_player_flyout_video_quality"), SwitchPreference("revanced_hide_player_flyout_video_quality_footer"), ), ), diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/signintotvpopup/DisableSignInToTvPatchPopup.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/signintotvpopup/DisableSignInToTvPatchPopup.kt new file mode 100644 index 000000000..1a591c315 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/signintotvpopup/DisableSignInToTvPatchPopup.kt @@ -0,0 +1,68 @@ +package app.revanced.patches.youtube.layout.hide.signintotvpopup + +import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels +import app.revanced.patcher.patch.bytecodePatch +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.resourceMappingPatch +import app.revanced.patches.shared.misc.mapping.resourceMappings +import app.revanced.patches.shared.misc.settings.preference.SwitchPreference +import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch +import app.revanced.patches.youtube.misc.settings.PreferenceScreen +import app.revanced.patches.youtube.misc.settings.settingsPatch + +internal var mdx_seamless_tv_sign_in_drawer_fragment_title_id = -1L + private set + +private const val EXTENSION_CLASS_DESCRIPTOR = + "Lapp/revanced/extension/youtube/patches/DisableSignInToTvPopupPatch;" + +val disableSignInToTvPopupPatch = bytecodePatch( + name = "Disable sign in to TV popup", + description = "Adds an option to disable the popup asking to sign into a TV on the same local network.", +) { + dependsOn( + settingsPatch, + sharedExtensionPatch, + addResourcesPatch, + resourceMappingPatch + ) + + compatibleWith( + "com.google.android.youtube"( + "19.34.42", + "19.43.41", + "19.47.53", + "20.07.39", + "20.12.46", + "20.13.41", + ) + ) + + execute { + addResources("youtube", "layout.hide.signintotv.disableSignInToTvPopupPatch") + + PreferenceScreen.MISC.addPreferences( + SwitchPreference("revanced_disable_signin_to_tv_popup"), + ) + + mdx_seamless_tv_sign_in_drawer_fragment_title_id = resourceMappings[ + "string", + "mdx_seamless_tv_sign_in_drawer_fragment_title", + ] + + signInToTvPopupFingerprint.method.addInstructionsWithLabels( + 0, + """ + invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->disableSignInToTvPopup()Z + move-result v0 + if-eqz v0, :allow_sign_in_popup + const/4 v0, 0x0 + return v0 + :allow_sign_in_popup + nop + """ + ) + } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/signintotvpopup/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/signintotvpopup/Fingerprints.kt new file mode 100644 index 000000000..c79d4ed26 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/signintotvpopup/Fingerprints.kt @@ -0,0 +1,12 @@ +package app.revanced.patches.youtube.layout.hide.signintotvpopup + +import app.revanced.patcher.fingerprint +import app.revanced.util.literal + +internal val signInToTvPopupFingerprint = fingerprint { + returns("Z") + parameters("Ljava/lang/String;", "Z", "L") + literal { + mdx_seamless_tv_sign_in_drawer_fragment_title_id + } +} \ No newline at end of file diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/SponsorBlockPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/SponsorBlockPatch.kt index 92407e8bb..06c271b97 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/SponsorBlockPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/SponsorBlockPatch.kt @@ -202,7 +202,7 @@ val sponsorBlockPatch = bytecodePatch( """ invoke-static { v$register }, $EXTENSION_SEGMENT_PLAYBACK_CONTROLLER_CLASS_DESCRIPTOR->appendTimeWithoutSegments(Ljava/lang/String;)Ljava/lang/String; move-result-object v$register - """, + """ ) } @@ -252,15 +252,5 @@ val sponsorBlockPatch = bytecodePatch( } } ?: throw PatchException("Could not find the method which contains the replaceMeWith* strings") } - - // The vote and create segment buttons automatically change their visibility when appropriate, - // but if buttons are showing when the end of the video is reached then they will not automatically hide. - // Add a hook to forcefully hide when the end of the video is reached. - autoRepeatFingerprint.match(autoRepeatParentFingerprint.originalClassDef).method.addInstruction( - 0, - "invoke-static {}, $EXTENSION_SPONSORBLOCK_VIEW_CONTROLLER_CLASS_DESCRIPTOR->endOfVideoReached()V", - ) - - // TODO: Channel whitelisting. } } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/Fingerprints.kt index 95dbd54ec..da2137135 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/Fingerprints.kt @@ -2,14 +2,63 @@ package app.revanced.patches.youtube.misc.playercontrols import app.revanced.patcher.fingerprint import app.revanced.util.containsLiteralInstruction +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction +import app.revanced.util.indexOfFirstInstructionReversed import app.revanced.util.literal 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.MethodReference + +internal fun indexOfFocusableInTouchModeInstruction(method: Method) = + method.indexOfFirstInstruction { + getReference()?.name == "setFocusableInTouchMode" + } + +internal fun indexOfTranslationInstruction(method: Method) = + method.indexOfFirstInstructionReversed { + getReference()?.name == "setTranslationY" + } + +internal val playerControlsVisibilityEntityModelFingerprint = fingerprint { + accessFlags(AccessFlags.PUBLIC) + returns("L") + parameters() + opcodes( + Opcode.IGET, + Opcode.INVOKE_STATIC + ) + custom { method, _ -> + method.name == "getPlayerControlsVisibility" + } +} + +internal val youtubeControlsOverlayFingerprint = fingerprint { + accessFlags(AccessFlags.PRIVATE, AccessFlags.FINAL) + returns("V") + parameters() + custom { method, _ -> + indexOfFocusableInTouchModeInstruction(method) >= 0 && + method.containsLiteralInstruction(inset_overlay_view_layout_id) && + method.containsLiteralInstruction(scrim_overlay_id) + + } +} + +internal val motionEventFingerprint = fingerprint { + returns("V") + parameters("Landroid/view/MotionEvent;") + custom { method, _ -> + indexOfTranslationInstruction(method) >= 0 + } +} internal val playerTopControlsInflateFingerprint = fingerprint { accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL) returns("V") parameters() - literal { controlsLayoutStub } + literal { controls_layout_stub_id } } internal val playerControlsExtensionHookListenersExistFingerprint = fingerprint { @@ -35,7 +84,7 @@ internal val playerControlsExtensionHookFingerprint = fingerprint { internal val playerBottomControlsInflateFingerprint = fingerprint { returns("Ljava/lang/Object;") parameters() - literal { bottomUiContainerResourceId } + literal { bottom_ui_container_stub_id } } internal val overlayViewInflateFingerprint = fingerprint { @@ -43,8 +92,8 @@ internal val overlayViewInflateFingerprint = fingerprint { returns("V") parameters("Landroid/view/View;") custom { methodDef, _ -> - methodDef.containsLiteralInstruction(fullscreenButton) && - methodDef.containsLiteralInstruction(heatseekerViewstub) + methodDef.containsLiteralInstruction(fullscreen_button_id) && + methodDef.containsLiteralInstruction(heatseeker_viewstub_id) } } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/PlayerControlsOverlayVisibilityPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/PlayerControlsOverlayVisibilityPatch.kt new file mode 100644 index 000000000..e10725f76 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/PlayerControlsOverlayVisibilityPatch.kt @@ -0,0 +1,42 @@ +package app.revanced.patches.youtube.misc.playercontrols + +import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.patch.bytecodePatch +import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch +import app.revanced.util.indexOfFirstInstructionOrThrow +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction + +private const val EXTENSION_PLAYER_CONTROLS_VISIBILITY_HOOK_CLASS_DESCRIPTOR = + "Lapp/revanced/extension/youtube/patches/PlayerControlsVisibilityHookPatch;" + +val PlayerControlsOverlayVisibilityPatch = bytecodePatch { + dependsOn(sharedExtensionPatch) + + execute { + playerControlsVisibilityEntityModelFingerprint.let { + it.method.apply { + val startIndex = it.patternMatch!!.startIndex + val iGetReference = getInstruction(startIndex).reference + val staticReference = getInstruction(startIndex + 1).reference + + it.classDef.methods.find { method -> method.name == "" }?.apply { + val targetIndex = indexOfFirstInstructionOrThrow(Opcode.IPUT_OBJECT) + val targetRegister = getInstruction(targetIndex).registerA + + addInstructions( + targetIndex + 1, + """ + iget v$targetRegister, v$targetRegister, $iGetReference + invoke-static { v$targetRegister }, $staticReference + move-result-object v$targetRegister + invoke-static { v$targetRegister }, $EXTENSION_PLAYER_CONTROLS_VISIBILITY_HOOK_CLASS_DESCRIPTOR->setPlayerControlsVisibility(Ljava/lang/Enum;)V + """ + ) + } + } + } + } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/PlayerControlsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/PlayerControlsPatch.kt index 7db8de5b2..e5949586d 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/PlayerControlsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/PlayerControlsPatch.kt @@ -1,7 +1,6 @@ package app.revanced.patches.youtube.misc.playercontrols import app.revanced.patcher.extensions.InstructionExtensions.addInstruction -import app.revanced.patcher.extensions.InstructionExtensions.addInstructions import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.PatchException import app.revanced.patcher.patch.bytecodePatch @@ -40,13 +39,17 @@ internal lateinit var addTopControl: (String) -> Unit lateinit var addBottomControl: (String) -> Unit private set -internal var bottomUiContainerResourceId = -1L +internal var bottom_ui_container_stub_id = -1L private set -internal var controlsLayoutStub = -1L +internal var controls_layout_stub_id = -1L private set -internal var heatseekerViewstub = -1L +internal var heatseeker_viewstub_id = -1L private set -internal var fullscreenButton = -1L +internal var fullscreen_button_id = -1L + private set +internal var inset_overlay_view_layout_id = -1L + private set +internal var scrim_overlay_id = -1L private set val playerControlsResourcePatch = resourcePatch { @@ -65,10 +68,12 @@ val playerControlsResourcePatch = resourcePatch { execute { val targetResourceName = "youtube_controls_bottom_ui_container.xml" - bottomUiContainerResourceId = resourceMappings["id", "bottom_ui_container_stub"] - controlsLayoutStub = resourceMappings["id", "controls_layout_stub"] - heatseekerViewstub = resourceMappings["id", "heatseeker_viewstub"] - fullscreenButton = resourceMappings["id", "fullscreen_button"] + bottom_ui_container_stub_id = resourceMappings["id", "bottom_ui_container_stub"] + controls_layout_stub_id = resourceMappings["id", "controls_layout_stub"] + heatseeker_viewstub_id = resourceMappings["id", "heatseeker_viewstub"] + fullscreen_button_id = resourceMappings["id", "fullscreen_button"] + inset_overlay_view_layout_id = resourceMappings["id", "inset_overlay_view_layout"] + scrim_overlay_id = resourceMappings["id", "scrim_overlay"] bottomTargetDocument = document("res/layout/$targetResourceName") @@ -198,6 +203,13 @@ fun injectVisibilityCheckCall(descriptor: String) { visibilityImmediateInsertIndex++, "invoke-static { p0 }, $descriptor->setVisibilityImmediate(Z)V", ) + + // Patch works without this hook, but it is needed to use the correct fade out animation + // duration when tapping the overlay to dismiss. + visibilityNegatedImmediateMethod.addInstruction( + visibilityNegatedImmediateInsertIndex++, + "invoke-static { }, $descriptor->setVisibilityNegatedImmediate()V", + ) } internal const val EXTENSION_CLASS_DESCRIPTOR = @@ -220,12 +232,16 @@ private lateinit var visibilityImmediateCallbacksExistMethod : MutableMethod private lateinit var visibilityImmediateMethod: MutableMethod private var visibilityImmediateInsertIndex: Int = 0 +private lateinit var visibilityNegatedImmediateMethod: MutableMethod +private var visibilityNegatedImmediateInsertIndex: Int = 0 + val playerControlsPatch = bytecodePatch( description = "Manages the code for the player controls of the YouTube player.", ) { dependsOn( playerControlsResourcePatch, sharedExtensionPatch, + PlayerControlsOverlayVisibilityPatch ) execute { @@ -258,7 +274,7 @@ val playerControlsPatch = bytecodePatch( // Hook the fullscreen close button. Used to fix visibility // when seeking and other situations. overlayViewInflateFingerprint.method.apply { - val resourceIndex = indexOfFirstLiteralInstructionReversedOrThrow(fullscreenButton) + val resourceIndex = indexOfFirstLiteralInstructionReversedOrThrow(fullscreen_button_id) val index = indexOfFirstInstructionOrThrow(resourceIndex) { opcode == Opcode.CHECK_CAST && @@ -277,12 +293,17 @@ val playerControlsPatch = bytecodePatch( visibilityImmediateCallbacksExistMethod = playerControlsExtensionHookListenersExistFingerprint.method visibilityImmediateMethod = playerControlsExtensionHookFingerprint.method + motionEventFingerprint.match(youtubeControlsOverlayFingerprint.originalClassDef).method.apply { + visibilityNegatedImmediateMethod = this + visibilityNegatedImmediateInsertIndex = indexOfTranslationInstruction(this) + 1 + } + // A/B test for a slightly different bottom overlay controls, // that uses layout file youtube_video_exploder_controls_bottom_ui_container.xml // The change to support this is simple and only requires adding buttons to both layout files, // but for now force this different layout off since it's still an experimental test. if (is_19_35_or_greater) { - playerBottomControlsExploderFeatureFlagFingerprint.method.returnEarly() + playerBottomControlsExploderFeatureFlagFingerprint.method.returnLate(false) } // A/B test of new top overlay controls. Two different layouts can be used: @@ -299,12 +320,9 @@ val playerControlsPatch = bytecodePatch( val index = indexOfFirstInstructionOrThrow(Opcode.MOVE_RESULT_OBJECT) val register = getInstruction(index).registerA - addInstructions( + addInstruction( index + 1, - """ - invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->getPlayerTopControlsLayoutResourceName(Ljava/lang/String;)Ljava/lang/String; - move-result-object v$register - """, + "const-string v$register, \"default\"" ) } } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/video/audio/ForceOriginalAudioPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/video/audio/ForceOriginalAudioPatch.kt index 40110878c..8a3ee4e92 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/video/audio/ForceOriginalAudioPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/video/audio/ForceOriginalAudioPatch.kt @@ -70,87 +70,84 @@ val forceOriginalAudioPatch = bytecodePatch( ) } - val isDefaultAudioTrackMethod = formatStreamModelToStringFingerprint.originalMethod - .findMethodFromToString("isDefaultAudioTrack=") - val audioTrackDisplayNameMethod = formatStreamModelToStringFingerprint.originalMethod - .findMethodFromToString("audioTrackDisplayName=") - val audioTrackIdMethod = formatStreamModelToStringFingerprint.originalMethod - .findMethodFromToString("audioTrackId=") + formatStreamModelToStringFingerprint.let { + val isDefaultAudioTrackMethod = it.originalMethod.findMethodFromToString("isDefaultAudioTrack=") + val audioTrackDisplayNameMethod = it.originalMethod.findMethodFromToString("audioTrackDisplayName=") + val audioTrackIdMethod = it.originalMethod.findMethodFromToString("audioTrackId=") - proxy(classes.first { - it.type == audioTrackIdMethod.definingClass - }).mutableClass.apply { - // Add a new field to store the override. - val helperFieldName = "isDefaultAudioTrackOverride" - fields.add( - ImmutableField( - type, - helperFieldName, - "Ljava/lang/Boolean;", - // Boolean is a 100% immutable class (all fields are final) - // and safe to write to a shared field without volatile/synchronization, - // but without volatile the field can show stale data - // and the same field is calculated more than once by different threads. - AccessFlags.PRIVATE.value or AccessFlags.VOLATILE.value, + it.classDef.apply { + // Add a new field to store the override. + val helperFieldName = "patch_isDefaultAudioTrackOverride" + fields.add( + ImmutableField( + type, + helperFieldName, + "Ljava/lang/Boolean;", + // Boolean is a 100% immutable class (all fields are final) + // and safe to write to a shared field without volatile/synchronization, + // but without volatile the field can show stale data + // and the same field is calculated more than once by different threads. + AccessFlags.PRIVATE.value or AccessFlags.VOLATILE.value, + null, + null, + null + ).toMutable() + ) + + // Add a helper method because the isDefaultAudioTrack() has only 2 registers and 3 are needed. + val helperMethodClass = type + val helperMethodName = "patch_isDefaultAudioTrack" + val helperMethod = ImmutableMethod( + helperMethodClass, + helperMethodName, + listOf(ImmutableMethodParameter("Z", null, null)), + "Z", + AccessFlags.PRIVATE.value, null, null, - null - ).toMutable() - ) + MutableMethodImplementation(6), + ).toMutable().apply { + addInstructionsWithLabels( + 0, + """ + iget-object v0, p0, $helperMethodClass->$helperFieldName:Ljava/lang/Boolean; + if-eqz v0, :call_extension + invoke-virtual { v0 }, Ljava/lang/Boolean;->booleanValue()Z + move-result v3 + return v3 + + :call_extension + invoke-virtual { p0 }, $audioTrackIdMethod + move-result-object v1 + + invoke-virtual { p0 }, $audioTrackDisplayNameMethod + move-result-object v2 + + invoke-static { p1, v1, v2 }, $EXTENSION_CLASS_DESCRIPTOR->isDefaultAudioStream(ZLjava/lang/String;Ljava/lang/String;)Z + move-result v3 + + invoke-static { v3 }, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean; + move-result-object v0 + iput-object v0, p0, $helperMethodClass->$helperFieldName:Ljava/lang/Boolean; + return v3 + """ + ) + } + methods.add(helperMethod) - // Add a helper method because the isDefaultAudioTrack() has only 2 registers and 3 are needed. - val helperMethodClass = type - val helperMethodName = "patch_isDefaultAudioTrack" - val helperMethod = ImmutableMethod( - helperMethodClass, - helperMethodName, - listOf(ImmutableMethodParameter("Z", null, null)), - "Z", - AccessFlags.PRIVATE.value, - null, - null, - MutableMethodImplementation(6), - ).toMutable().apply { - addInstructionsWithLabels( - 0, - """ - iget-object v0, p0, $helperMethodClass->$helperFieldName:Ljava/lang/Boolean; - if-eqz v0, :call_extension - invoke-virtual { v0 }, Ljava/lang/Boolean;->booleanValue()Z - move-result v3 - return v3 - - :call_extension - invoke-virtual { p0 }, $audioTrackIdMethod - move-result-object v1 - - invoke-virtual { p0 }, $audioTrackDisplayNameMethod - move-result-object v2 - - invoke-static { p1, v1, v2 }, $EXTENSION_CLASS_DESCRIPTOR->isDefaultAudioStream(ZLjava/lang/String;Ljava/lang/String;)Z - move-result v3 - - invoke-static { v3 }, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean; - move-result-object v0 - iput-object v0, p0, $helperMethodClass->$helperFieldName:Ljava/lang/Boolean; - return v3 - """ - ) - } - methods.add(helperMethod) + // Modify isDefaultAudioTrack() to call extension helper method. + isDefaultAudioTrackMethod.apply { + val index = indexOfFirstInstructionOrThrow(Opcode.RETURN) + val register = getInstruction(index).registerA - // Modify isDefaultAudioTrack() to call extension helper method. - isDefaultAudioTrackMethod.apply { - val index = indexOfFirstInstructionOrThrow(Opcode.RETURN) - val register = getInstruction(index).registerA - - addInstructions( - index, - """ - invoke-direct { p0, v$register }, $helperMethodClass->$helperMethodName(Z)Z - move-result v$register - """ - ) + addInstructions( + index, + """ + invoke-direct { p0, v$register }, $helperMethodClass->$helperMethodName(Z)Z + move-result v$register + """ + ) + } } } } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/video/hdr/DisableHdrPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/video/hdr/DisableHdrPatch.kt index bfa9cbd2e..abea2c22c 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/video/hdr/DisableHdrPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/video/hdr/DisableHdrPatch.kt @@ -1,15 +1,16 @@ package app.revanced.patches.youtube.video.hdr -import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels +import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction import app.revanced.patcher.patch.bytecodePatch import app.revanced.patches.all.misc.resources.addResources import app.revanced.patches.all.misc.resources.addResourcesPatch +import app.revanced.patches.all.misc.transformation.transformInstructionsPatch import app.revanced.patches.shared.misc.settings.preference.SwitchPreference import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch import app.revanced.patches.youtube.misc.settings.PreferenceScreen import app.revanced.patches.youtube.misc.settings.settingsPatch import app.revanced.util.getReference -import app.revanced.util.indexOfFirstInstructionOrThrow +import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction import com.android.tools.smali.dexlib2.iface.reference.MethodReference private const val EXTENSION_CLASS_DESCRIPTOR = @@ -24,6 +25,31 @@ val disableHdrPatch = bytecodePatch( sharedExtensionPatch, settingsPatch, addResourcesPatch, + // Override all calls of `getSupportedHdrTypes`. + transformInstructionsPatch( + filterMap = filterMap@{ classDef, _, instruction, instructionIndex -> + if (classDef.type.startsWith("Lapp/revanced/")) { + return@filterMap null + } + + val reference = instruction.getReference() + if (reference?.definingClass =="Landroid/view/Display\$HdrCapabilities;" + && reference.name == "getSupportedHdrTypes") { + return@filterMap instruction to instructionIndex + } + return@filterMap null + }, + transform = { method, entry -> + val (instruction, index) = entry + val register = (instruction as FiveRegisterInstruction).registerC + + method.replaceInstruction( + index, + "invoke-static/range { v$register .. v$register }, $EXTENSION_CLASS_DESCRIPTOR->" + + "disableHdrVideo(Landroid/view/Display\$HdrCapabilities;)[I", + ) + } + ) ) compatibleWith( @@ -43,29 +69,5 @@ val disableHdrPatch = bytecodePatch( PreferenceScreen.VIDEO.addPreferences( SwitchPreference("revanced_disable_hdr_video") ) - - hdrCapabilityFingerprint.let { - it.originalMethod.apply { - val stringIndex = it.stringMatches!!.first().index - val navigateIndex = indexOfFirstInstructionOrThrow(stringIndex) { - val reference = getReference() - reference?.parameterTypes == listOf("I", "Landroid/view/Display;") && - reference.returnType == "Z" - } - - // Modify the HDR lookup method (Method is in the same class as the fingerprint). - navigate(this).to(navigateIndex).stop().addInstructionsWithLabels( - 0, - """ - invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->disableHDRVideo()Z - move-result v0 - if-nez v0, :useHdr - return v0 - :useHdr - nop - """ - ) - } - } } } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/video/hdr/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/video/hdr/Fingerprints.kt deleted file mode 100644 index fe8d2dce3..000000000 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/video/hdr/Fingerprints.kt +++ /dev/null @@ -1,12 +0,0 @@ -package app.revanced.patches.youtube.video.hdr - -import app.revanced.patcher.fingerprint -import com.android.tools.smali.dexlib2.AccessFlags - -internal val hdrCapabilityFingerprint = fingerprint { - accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL) - strings( - "av1_profile_main_10_hdr_10_plus_supported", - "video/av01" - ) -} \ No newline at end of file diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/video/information/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/video/information/Fingerprints.kt index 7d711aec8..74b0e0864 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/video/information/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/video/information/Fingerprints.kt @@ -133,3 +133,46 @@ internal val playbackSpeedClassFingerprint = fingerprint { ) strings("PLAYBACK_RATE_MENU_BOTTOM_SHEET_FRAGMENT") } + + +internal const val YOUTUBE_VIDEO_QUALITY_CLASS_TYPE = "Lcom/google/android/libraries/youtube/innertube/model/media/VideoQuality;" + +internal val videoQualityFingerprint = fingerprint { + accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR) + parameters( + "I", // Resolution. + "Ljava/lang/String;", // Human readable resolution: "480p", "1080p Premium", etc + "Z", + "L" + ) + custom { _, classDef -> + classDef.type == YOUTUBE_VIDEO_QUALITY_CLASS_TYPE + } +} + +internal val videoQualitySetterFingerprint = fingerprint { + accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL) + returns("V") + parameters("[L", "I", "Z") + opcodes( + Opcode.IF_EQZ, + Opcode.INVOKE_VIRTUAL, + Opcode.MOVE_RESULT_OBJECT, + Opcode.INVOKE_VIRTUAL, + Opcode.IPUT_BOOLEAN, + ) + strings("menu_item_video_quality") +} + +/** + * Matches with the class found in [videoQualitySetterFingerprint]. + */ +internal val setVideoQualityFingerprint = fingerprint { + returns("V") + parameters("L") + opcodes( + Opcode.IGET_OBJECT, + Opcode.IPUT_OBJECT, + Opcode.IGET_OBJECT, + ) +} diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/video/information/VideoInformationPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/video/information/VideoInformationPatch.kt index 99f0c75de..368aff634 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/video/information/VideoInformationPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/video/information/VideoInformationPatch.kt @@ -38,7 +38,9 @@ import com.android.tools.smali.dexlib2.util.MethodUtil private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/youtube/patches/VideoInformation;" private const val EXTENSION_PLAYER_INTERFACE = - "Lapp/revanced/extension/youtube/patches/VideoInformation${'$'}PlaybackController;" + "Lapp/revanced/extension/youtube/patches/VideoInformation\$PlaybackController;" +private const val EXTENSION_VIDEO_QUALITY_MENU_INTERFACE = + "Lapp/revanced/extension/youtube/patches/VideoInformation\$VideoQualityMenuInterface;" private lateinit var playerInitMethod: MutableMethod private var playerInitInsertIndex = -1 @@ -83,7 +85,6 @@ val videoInformationPatch = bytecodePatch( ) execute { - playerInitMethod = playerInitFingerprint.classDef.methods.first { MethodUtil.isConstructor(it) } // Find the location of the first invoke-direct call and extract the register storing the 'this' object reference. @@ -93,9 +94,6 @@ val videoInformationPatch = bytecodePatch( playerInitInsertRegister = playerInitMethod.getInstruction(initThisIndex).registerC playerInitInsertIndex = initThisIndex + 1 - // Hook the player controller for use through the extension. - onCreateHook(EXTENSION_CLASS_DESCRIPTOR, "initialize") - val seekFingerprintResultMethod = seekFingerprint.match(playerInitFingerprint.originalClassDef).method val seekRelativeFingerprintResultMethod = seekRelativeFingerprint.match(playerInitFingerprint.originalClassDef).method @@ -272,6 +270,131 @@ val videoInformationPatch = bytecodePatch( speedSelectionValueRegister = getInstruction(index).registerA } + videoQualityFingerprint.let { + // Fix bad data used by YouTube. + it.method.addInstructions( + 0, + """ + invoke-static { p2, p1 }, $EXTENSION_CLASS_DESCRIPTOR->fixVideoQualityResolution(Ljava/lang/String;I)I + move-result p1 + """ + ) + + // Add methods to access obfuscated quality fields. + it.classDef.apply { + methods.add( + ImmutableMethod( + type, + "patch_getQualityName", + listOf(), + "Ljava/lang/String;", + AccessFlags.PUBLIC.value or AccessFlags.FINAL.value, + null, + null, + MutableMethodImplementation(2), + ).toMutable().apply { + // Only one string field. + val qualityNameField = fields.single { field -> + field.type == "Ljava/lang/String;" + } + + addInstructions( + 0, + """ + iget-object v0, p0, $qualityNameField + return-object v0 + """ + ) + } + ) + + methods.add( + ImmutableMethod( + type, + "patch_getResolution", + listOf(), + "I", + AccessFlags.PUBLIC.value or AccessFlags.FINAL.value, + null, + null, + MutableMethodImplementation(2), + ).toMutable().apply { + val resolutionField = fields.single { field -> + field.type == "I" + } + + addInstructions( + 0, + """ + iget v0, p0, $resolutionField + return v0 + """ + ) + } + ) + } + } + + // Detect video quality changes and override the current quality. + setVideoQualityFingerprint.match( + videoQualitySetterFingerprint.originalClassDef + ).let { match -> + // This instruction refers to the field with the type that contains the setQuality method. + val onItemClickListenerClassReference = match.method + .getInstruction(0).reference + val setQualityFieldReference = match.method + .getInstruction(1).reference as FieldReference + + proxy( + classes.find { classDef -> + classDef.type == setQualityFieldReference.type + }!! + ).mutableClass.apply { + // Add interface and helper methods to allow extension code to call obfuscated methods. + interfaces.add(EXTENSION_VIDEO_QUALITY_MENU_INTERFACE) + + methods.add( + ImmutableMethod( + type, + "patch_setQuality", + listOf( + ImmutableMethodParameter(YOUTUBE_VIDEO_QUALITY_CLASS_TYPE, null, null) + ), + "V", + AccessFlags.PUBLIC.value or AccessFlags.FINAL.value, + null, + null, + MutableMethodImplementation(2), + ).toMutable().apply { + val setQualityMenuIndexMethod = methods.single { method -> + method.parameterTypes.firstOrNull() == YOUTUBE_VIDEO_QUALITY_CLASS_TYPE + } + + addInstructions( + 0, + """ + invoke-virtual { p0, p1 }, $setQualityMenuIndexMethod + return-void + """ + ) + } + ) + } + + videoQualitySetterFingerprint.method.addInstructions( + 0, + """ + # Get object instance to invoke setQuality method. + iget-object v0, p0, $onItemClickListenerClassReference + iget-object v0, v0, $setQualityFieldReference + + invoke-static { p1, v0, p2 }, $EXTENSION_CLASS_DESCRIPTOR->setVideoQuality([$YOUTUBE_VIDEO_QUALITY_CLASS_TYPE${EXTENSION_VIDEO_QUALITY_MENU_INTERFACE}I)I + move-result p2 + """ + ) + } + + onCreateHook(EXTENSION_CLASS_DESCRIPTOR, "initialize") videoSpeedChangedHook(EXTENSION_CLASS_DESCRIPTOR, "videoSpeedChanged") userSelectedPlaybackSpeedHook(EXTENSION_CLASS_DESCRIPTOR, "userSelectedPlaybackSpeed") } @@ -282,8 +405,8 @@ private fun addSeekInterfaceMethods(targetClass: MutableClass, seekToMethod: Met targetClass.interfaces.add(EXTENSION_PLAYER_INTERFACE) arrayOf( - Triple(seekToMethod, "seekTo", true), - Triple(seekToRelativeMethod, "seekToRelative", false), + Triple(seekToMethod, "patch_seekTo", true), + Triple(seekToRelativeMethod, "patch_seekToRelative", false), ).forEach { (method, name, returnsBoolean) -> // Add interface method. // Get enum type for the seek helper method. diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/video/quality/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/video/quality/Fingerprints.kt index f04079632..09ec88f9c 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/video/quality/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/video/quality/Fingerprints.kt @@ -5,34 +5,6 @@ import app.revanced.util.literal import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode -internal const val YOUTUBE_VIDEO_QUALITY_CLASS_TYPE = "Lcom/google/android/libraries/youtube/innertube/model/media/VideoQuality;" - -internal val videoQualityFingerprint = fingerprint { - accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR) - parameters( - "I", // Resolution. - "Ljava/lang/String;", // Human readable resolution: "480p", "1080p Premium", etc - "Z", - "L" - ) - custom { _, classDef -> - classDef.type == YOUTUBE_VIDEO_QUALITY_CLASS_TYPE - } -} - -/** - * Matches with the class found in [videoQualitySetterFingerprint]. - */ -internal val setVideoQualityFingerprint = fingerprint { - returns("V") - parameters("L") - opcodes( - Opcode.IGET_OBJECT, - Opcode.IPUT_OBJECT, - Opcode.IGET_OBJECT, - ) -} - internal val videoQualityItemOnClickParentFingerprint = fingerprint { returns("V") strings("VIDEO_QUALITIES_MENU_BOTTOM_SHEET_FRAGMENT") @@ -54,19 +26,6 @@ internal val videoQualityItemOnClickFingerprint = fingerprint { } } -internal val videoQualitySetterFingerprint = fingerprint { - accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL) - returns("V") - parameters("[L", "I", "Z") - opcodes( - Opcode.IF_EQZ, - Opcode.INVOKE_VIRTUAL, - Opcode.MOVE_RESULT_OBJECT, - Opcode.INVOKE_VIRTUAL, - Opcode.IPUT_BOOLEAN, - ) - strings("menu_item_video_quality") -} internal val videoQualityMenuOptionsFingerprint = fingerprint { accessFlags(AccessFlags.STATIC) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/video/quality/RememberVideoQualityPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/video/quality/RememberVideoQualityPatch.kt index 7a31a6b74..2f67487c8 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/video/quality/RememberVideoQualityPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/video/quality/RememberVideoQualityPatch.kt @@ -1,10 +1,8 @@ package app.revanced.patches.youtube.video.quality import app.revanced.patcher.extensions.InstructionExtensions.addInstruction -import app.revanced.patcher.extensions.InstructionExtensions.addInstructions 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.all.misc.resources.addResourcesPatch import app.revanced.patches.shared.misc.settings.preference.ListPreference @@ -15,18 +13,10 @@ import app.revanced.patches.youtube.misc.settings.settingsPatch import app.revanced.patches.youtube.shared.videoQualityChangedFingerprint import app.revanced.patches.youtube.video.information.onCreateHook import app.revanced.patches.youtube.video.information.videoInformationPatch -import com.android.tools.smali.dexlib2.AccessFlags -import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation -import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction -import com.android.tools.smali.dexlib2.iface.reference.FieldReference -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/playback/quality/RememberVideoQualityPatch;" -private const val EXTENSION_VIDEO_QUALITY_MENU_INTERFACE = - "Lapp/revanced/extension/youtube/patches/playback/quality/RememberVideoQualityPatch\$VideoQualityMenuInterface;" val rememberVideoQualityPatch = bytecodePatch { dependsOn( @@ -69,131 +59,6 @@ val rememberVideoQualityPatch = bytecodePatch { onCreateHook(EXTENSION_CLASS_DESCRIPTOR, "newVideoStarted") - videoQualityFingerprint.let { - // Fix bad data used by YouTube. - it.method.addInstructions( - 0, - """ - invoke-static { p2, p1 }, $EXTENSION_CLASS_DESCRIPTOR->fixVideoQualityResolution(Ljava/lang/String;I)I - move-result p1 - """ - ) - - // Add methods to access obfuscated quality fields. - it.classDef.apply { - methods.add( - ImmutableMethod( - type, - "patch_getQualityName", - listOf(), - "Ljava/lang/String;", - AccessFlags.PUBLIC.value or AccessFlags.FINAL.value, - null, - null, - MutableMethodImplementation(2), - ).toMutable().apply { - // Only one string field. - val qualityNameField = fields.single { field -> - field.type == "Ljava/lang/String;" - } - - addInstructions( - 0, - """ - iget-object v0, p0, $qualityNameField - return-object v0 - """ - ) - } - ) - - methods.add( - ImmutableMethod( - type, - "patch_getResolution", - listOf(), - "I", - AccessFlags.PUBLIC.value or AccessFlags.FINAL.value, - null, - null, - MutableMethodImplementation(2), - ).toMutable().apply { - val resolutionField = fields.single { field -> - field.type == "I" - } - - addInstructions( - 0, - """ - iget v0, p0, $resolutionField - return v0 - """ - ) - } - ) - } - } - - // Inject a call to set the remembered quality once a video loads. - setVideoQualityFingerprint.match( - videoQualitySetterFingerprint.originalClassDef - ).let { match -> - // This instruction refers to the field with the type that contains the setQuality method. - val instructions = match.method.implementation!!.instructions - val onItemClickListenerClassReference = - (instructions.elementAt(0) as ReferenceInstruction).reference - val setQualityFieldReference = - ((instructions.elementAt(1) as ReferenceInstruction).reference) as FieldReference - - proxy( - classes.find { classDef -> - classDef.type == setQualityFieldReference.type - }!! - ).mutableClass.apply { - // Add interface and helper methods to allow extension code to call obfuscated methods. - interfaces.add(EXTENSION_VIDEO_QUALITY_MENU_INTERFACE) - - methods.add( - ImmutableMethod( - type, - "patch_setQuality", - listOf( - ImmutableMethodParameter(YOUTUBE_VIDEO_QUALITY_CLASS_TYPE, null, null) - ), - "V", - AccessFlags.PUBLIC.value or AccessFlags.FINAL.value, - null, - null, - MutableMethodImplementation(2), - ).toMutable().apply { - val setQualityMenuIndexMethod = methods.single { method -> - method.parameterTypes.firstOrNull() == YOUTUBE_VIDEO_QUALITY_CLASS_TYPE - } - - addInstructions( - 0, - """ - invoke-virtual { p0, p1 }, $setQualityMenuIndexMethod - return-void - """ - ) - } - ) - } - - videoQualitySetterFingerprint.method.addInstructions( - 0, - """ - # Get object instance to invoke setQuality method. - iget-object v0, p0, $onItemClickListenerClassReference - iget-object v0, v0, $setQualityFieldReference - - invoke-static { p1, v0, p2 }, $EXTENSION_CLASS_DESCRIPTOR->setVideoQuality([$YOUTUBE_VIDEO_QUALITY_CLASS_TYPE${EXTENSION_VIDEO_QUALITY_MENU_INTERFACE}I)I - move-result p2 - """ - ) - } - // Inject a call to remember the selected quality for Shorts. videoQualityItemOnClickFingerprint.match( videoQualityItemOnClickParentFingerprint.classDef diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/video/quality/button/VideoQualityDialogButtonPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/video/quality/VideoQualityDialogButtonPatch.kt similarity index 70% rename from patches/src/main/kotlin/app/revanced/patches/youtube/video/quality/button/VideoQualityDialogButtonPatch.kt rename to patches/src/main/kotlin/app/revanced/patches/youtube/video/quality/VideoQualityDialogButtonPatch.kt index aaa42c827..d2618bb63 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/video/quality/button/VideoQualityDialogButtonPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/video/quality/VideoQualityDialogButtonPatch.kt @@ -1,4 +1,4 @@ -package app.revanced.patches.youtube.video.quality.button +package app.revanced.patches.youtube.video.quality import app.revanced.patcher.patch.bytecodePatch import app.revanced.patcher.patch.resourcePatch @@ -9,7 +9,6 @@ import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch import app.revanced.patches.youtube.misc.playercontrols.* import app.revanced.patches.youtube.misc.settings.PreferenceScreen import app.revanced.patches.youtube.misc.settings.settingsPatch -import app.revanced.patches.youtube.video.quality.rememberVideoQualityPatch import app.revanced.util.ResourceGroup import app.revanced.util.copyResources @@ -21,14 +20,7 @@ private val videoQualityButtonResourcePatch = resourcePatch { "qualitybutton", ResourceGroup( "drawable", - "revanced_video_quality_dialog_button_ld.xml", - "revanced_video_quality_dialog_button_sd.xml", - "revanced_video_quality_dialog_button_hd.xml", - "revanced_video_quality_dialog_button_fhd.xml", - "revanced_video_quality_dialog_button_fhd_plus.xml", - "revanced_video_quality_dialog_button_qhd.xml", - "revanced_video_quality_dialog_button_4k.xml", - "revanced_video_quality_dialog_button_unknown.xml", + "revanced_video_quality_dialog_button_rectangle.xml", ), ) @@ -39,7 +31,7 @@ private val videoQualityButtonResourcePatch = resourcePatch { private const val QUALITY_BUTTON_CLASS_DESCRIPTOR = "Lapp/revanced/extension/youtube/videoplayer/VideoQualityDialogButton;" -val videoQualityButtonPatch = bytecodePatch( +val videoQualityDialogButtonPatch = bytecodePatch( description = "Adds the option to display video quality dialog button in the video player.", ) { dependsOn( @@ -52,7 +44,7 @@ val videoQualityButtonPatch = bytecodePatch( ) execute { - addResources("youtube", "video.quality.button.videoQualityButtonPatch") + addResources("youtube", "video.quality.button.videoQualityDialogButtonPatch") PreferenceScreen.PLAYER.addPreferences( SwitchPreference("revanced_video_quality_dialog_button"), diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/video/quality/VideoQualityPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/video/quality/VideoQualityPatch.kt index 432b4f8f3..55a449647 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/video/quality/VideoQualityPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/video/quality/VideoQualityPatch.kt @@ -5,7 +5,6 @@ import app.revanced.patches.shared.misc.settings.preference.BasePreference import app.revanced.patches.shared.misc.settings.preference.PreferenceCategory import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference.Sorting import app.revanced.patches.youtube.misc.settings.PreferenceScreen -import app.revanced.patches.youtube.video.quality.button.videoQualityButtonPatch /** * Video quality settings. Used to organize all speed related settings together. @@ -20,7 +19,7 @@ val videoQualityPatch = bytecodePatch( dependsOn( rememberVideoQualityPatch, advancedVideoQualityMenuPatch, - videoQualityButtonPatch, + videoQualityDialogButtonPatch, ) compatibleWith( diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/video/speed/button/PlaybackSpeedButtonPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/video/speed/button/PlaybackSpeedButtonPatch.kt index 0ac9b0769..4885aa0fe 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/video/speed/button/PlaybackSpeedButtonPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/video/speed/button/PlaybackSpeedButtonPatch.kt @@ -9,6 +9,9 @@ import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch import app.revanced.patches.youtube.misc.playercontrols.* import app.revanced.patches.youtube.misc.settings.PreferenceScreen import app.revanced.patches.youtube.misc.settings.settingsPatch +import app.revanced.patches.youtube.video.information.userSelectedPlaybackSpeedHook +import app.revanced.patches.youtube.video.information.videoInformationPatch +import app.revanced.patches.youtube.video.information.videoSpeedChangedHook import app.revanced.patches.youtube.video.speed.custom.customPlaybackSpeedPatch import app.revanced.util.ResourceGroup import app.revanced.util.copyResources @@ -21,8 +24,8 @@ private val playbackSpeedButtonResourcePatch = resourcePatch { "speedbutton", ResourceGroup( "drawable", - "revanced_playback_speed_dialog_button.xml", - ), + "revanced_playback_speed_dialog_button_rectangle.xml" + ) ) addBottomControl("speedbutton") @@ -42,6 +45,7 @@ val playbackSpeedButtonPatch = bytecodePatch( customPlaybackSpeedPatch, playbackSpeedButtonResourcePatch, playerControlsPatch, + videoInformationPatch, ) execute { @@ -53,5 +57,8 @@ val playbackSpeedButtonPatch = bytecodePatch( initializeBottomControl(SPEED_BUTTON_CLASS_DESCRIPTOR) injectVisibilityCheckCall(SPEED_BUTTON_CLASS_DESCRIPTOR) + + videoSpeedChangedHook(SPEED_BUTTON_CLASS_DESCRIPTOR, "videoSpeedChanged") + userSelectedPlaybackSpeedHook(SPEED_BUTTON_CLASS_DESCRIPTOR, "videoSpeedChanged") } } 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 b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-af-rZA/strings.xml +++ b/patches/src/main/resources/addresources/values-af-rZA/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-am-rET/strings.xml b/patches/src/main/resources/addresources/values-am-rET/strings.xml index b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-am-rET/strings.xml +++ b/patches/src/main/resources/addresources/values-am-rET/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-ar-rSA/strings.xml b/patches/src/main/resources/addresources/values-ar-rSA/strings.xml index ba26d65f8..8143f8f83 100644 --- a/patches/src/main/resources/addresources/values-ar-rSA/strings.xml +++ b/patches/src/main/resources/addresources/values-ar-rSA/strings.xml @@ -452,6 +452,11 @@ Second \"item\" text" سيتم عرض مربع الحوار وهذا لا يتجاوز قيود السن. بل يقبلها تلقائيًا. + + تعطيل النافذة المنبثقة لتسجيل الدخول إلى التلفزيون + النافذة المنبثقة لتسجيل الدخول إلى التلفزيون معطلة + النافذة المنبثقة لتسجيل الدخول إلى التلفزيون مفعلة + تعطيل تخطي الفصل بالنقر المزدوج لا يمكن للنقر المزدوج مطلقًا أن يؤدي إلى تخطي الفصل التالي/السابق @@ -563,7 +568,7 @@ Second \"item\" text" زر إيقاف الإعلانات مخفي زر إيقاف الإعلانات معروض + This button usually only shows on live streams. --> إخفاء الإبلاغ تم إخفاء زر الإبلاغ يتم عرض زر الإبلاغ @@ -575,12 +580,21 @@ Second \"item\" text" إخفاء التنزيل تم إخفاء زر التنزيل يتم عرض زر التنزيل + + إخفاء الضجة + زر الضجة مخفي + يظهر زر الحماس + + إخفاء الترويج + زر الترويج مخفي + زر الترويج ظاهر إخفاء شكرًا تم إخفاء زر شكرًا يتم عرض زر شكرًا + This button only shows if the user ip is from specific region such as the USA or EU. --> إخفاء \"Ask\" تم إخفاء زر \"Ask\" يتم عرض زر \"Ask\" @@ -693,6 +707,9 @@ Second \"item\" text" إخفاء المشاهدة في VR تم إخفاء قائمة المشاهدة في الوضع الافتراضي يتم عرض قائمة المشاهدة في الوضع الافتراضي + إخفاء قائمة جودة الفيديو + قائمة جودة الفيديو مخفية + قائمة جودة الفيديو معروضة إخفاء تذييل قائمة جودة الفيديو تم إخفاء تذييل قائمة جودة الفيديو يتم عرض تذييل قائمة جودة الفيديو @@ -1465,7 +1482,7 @@ Second \"item\" text" الزر معروض. انقر مع الاستمرار لإعادة ضبط سرعة التشغيل إلى الوضع الافتراضي لا يتم عرض الزر - + عرض زر جودة الفيديو الزر معروض. انقر مع الاستمرار لإعادة تعيين الجودة إلى الافتراضي الزر غير معروض 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 cc515ffae..53103622e 100644 --- a/patches/src/main/resources/addresources/values-as-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-as-rIN/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -224,7 +229,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-az-rAZ/strings.xml b/patches/src/main/resources/addresources/values-az-rAZ/strings.xml index c6e99b119..fe739eb16 100644 --- a/patches/src/main/resources/addresources/values-az-rAZ/strings.xml +++ b/patches/src/main/resources/addresources/values-az-rAZ/strings.xml @@ -452,6 +452,11 @@ Bu xüsusiyyət yalnız köhnə cihazlar üçün mövcuddur" Dialoq göstərilir Bu, yaş məhdudiyyətini ötürmür. Sadəcə birbaşa qəbul edir. + + TV ani görüntüsü girişin qapat + TV ani görüntüyə giriş qapadılıb + TV ani görüntüyə giriş işləkdir + Cüt toxunuşla fəsil ötürməsini qapat Cüt toxunma heç vaxt növbəti/əvvəlki fəsilə keçidi zorlaya bilməz @@ -563,7 +568,7 @@ Ekranın sağ tərəfində düzünə sürüşdürərək səs səviyyəsini tənz Reklamları dayandır düyməsi gizlidir Reklamları dayandır düyməsi görünür + This button usually only shows on live streams. --> \"Xəbər verin\"i gizlət Xəbər ver/düyməsi gizlidir Xəbər ver/düyməsi göstərilir @@ -575,12 +580,21 @@ Ekranın sağ tərəfində düzünə sürüşdürərək səs səviyyəsini tənz \"Endirin\"i gizlət Yükləmə düyməsi gizlidir Yükləmə düyməsi göstərilir + + Coşqu Gizlət + Coşqu düyməsi gizlidir + Coşqu düyməsi görünür + + Sponsor-u Gizlət + Sponsor düyməsi gizlidir + Sponsor düyməsi görünür \"Təşəkkürlər\"i gizlət Təşəkkür düyməsi gizlidir Təşəkkür düyməsi göstərilir + This button only shows if the user ip is from specific region such as the USA or EU. --> Soruş\'u Gizlət Soruş düyməsi gizlidir \"Soruş\" düyməsi göstərilir @@ -693,6 +707,9 @@ Audio trek seçimin göstərmək üçün \"Video axınları saxtalaşdır\"ı iO \"VR-da İzləni\" gizlət VR menyusunda izləmə gizlidir VR menyusunda izləmə göstərilir + Video keyfiyyət menyusunu gizlət + Video keyfiyyət menyusu gizlidir + Video keyfiyyət menyusu görünür Video keyfiyyət menyusu alt məlumatını gizlət Video keyfiyyət menyusu alt məlumatı gizlidir Video keyfiyyət menyusu alt məlumatı göstərilir @@ -1464,7 +1481,7 @@ Bunu aktivləşdirmə daha yüksək video keyfiyyətləri əngəlin silə bilər Düymə göstərilir. Oynatma sürətin standart olaraq qaytarmaq üçün toxunub saxla Düymə göstərilmir - + Video keyfiyyəti düyməsini göstər Düymə görünür. Keyfiyyəti ilkin vəziyyətinə qaytarmaq üçün toxunub saxlayın Düymə görünmü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 c1a1c8bb1..6fefe9d2b 100644 --- a/patches/src/main/resources/addresources/values-be-rBY/strings.xml +++ b/patches/src/main/resources/addresources/values-be-rBY/strings.xml @@ -452,6 +452,11 @@ Second \"item\" text" Будзе паказана дыялогавае акно Гэта не абыходзіць узроставае абмежаванне. Ён проста прымае гэта аўтаматычна. + + Адключыць усплывальнае акно «Уваход у ТБ» + Усплывальнае акно «Уваход у ТБ» адключана + Усплывальнае акно «Уваход у ТБ» уключана + Адключыць прапуск раздзела па двайным націску Двайны націск ніколі не можа выклікаць прапуск да наступнага/папярэдняга раздзела @@ -563,7 +568,7 @@ Second \"item\" text" Кнопка \"Спыніць рэкламу\" схавана Кнопка \"Спыніць рэкламу\" паказана + This button usually only shows on live streams. --> Схаваць справаздачу Кнопка \"Паведаміць\" схавана Паказана кнопка \"Паведаміць\" @@ -575,12 +580,21 @@ Second \"item\" text" Схаваць загрузку Кнопка загрузкі схавана Паказана кнопка загрузкі + + Схаваць хайп + Кнопка Hype схаваная + Кнопка хайпу паказана + + Схаваць Рэкламу + Кнопка \"Прасоўваць\" схавана + Кнопка \"Прасоўваць\" паказана Схаваць Дзякуй Кнопка падзякі схавана Паказана кнопка падзякі + This button only shows if the user ip is from specific region such as the USA or EU. --> Схаваць кнопку «Запытацца» Кнопка «Запытацца» схаваная Кнопка «Запытацца» паказаная @@ -693,6 +707,9 @@ Second \"item\" text" Схаваць гадзіннік у VR Меню прагляду ў VR схавана Паказана меню \"Глядзець у VR\" + Схаваць меню якасці відэа + Меню якасці відэа схавана + Меню якасці відэа паказана Схаваць калонтытул меню якасці відэа Ніжні калонтытул меню якасці відэа схаваны Паказваецца ніжні калонтытул меню якасці відэа @@ -1466,7 +1483,7 @@ Second \"item\" text" Кнопка паказана. Націсніце і ўтрымлівайце, каб скінуць хуткасць прайгравання да стандартнай Кнопка не паказваецца - + Паказаць кнопку якасці відэа Кнопка паказана. Націсніце і ўтрымлівайце, каб скінуць якасць да па змаўчанні Кнопка не паказваецца 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 f49cc4365..862cfa98e 100644 --- a/patches/src/main/resources/addresources/values-bg-rBG/strings.xml +++ b/patches/src/main/resources/addresources/values-bg-rBG/strings.xml @@ -452,6 +452,11 @@ Second \"item\" text" Диалоговият прозорец ще бъде показан Тази функция не заобикаля възрастовото ограничение. Тя просто приема възрастовата граница автоматично. + + Деактивиране на изскачащия прозорец „Влизане в телевизора“ + Изскачащият прозорец „Влизане в телевизора“ е деактивиран + Изскачащият прозорец „Влизане в телевизора“ е активиран + Деактивиране на пропускане на глава с двойно докосване Двойното докосване никога не може да предизвика пропускане до следваща/предишна глава @@ -563,7 +568,7 @@ Second \"item\" text" Бутонът за спиране на реклами е скрит Бутонът за спиране на реклами е показан + This button usually only shows on live streams. --> Бутон за доклади Бутона за докладване е скрит Бутона за докладване се показва @@ -575,12 +580,21 @@ Second \"item\" text" Бутон за изтегляне Бутона за изтегляне е скрит Бутона за изтегляне се показва + + Скрий хайпа + Бутонът за хайп е скрит + Бутонът за хайп е показан + + Скриване на промоция + Бутонът за популяризиране е скрит + Бутонът за популяризиране е показан Бутон за благодарност Бутона за благодарност е скрит Бутона за благодарност се показва + This button only shows if the user ip is from specific region such as the USA or EU. --> Скриване на \"Попитай\" Бутонът \"Попитай\" е скрит Бутонът \"Попитай\" е показан @@ -693,6 +707,9 @@ Second \"item\" text" Гледайте във VR Менюто за гледане в VR е скрито Менюто за гледане в VR се показва + Скриване на менюто за качество на видеото + Менюто за качество на видеото е скрито + Менюто за качество на видеото е показано Скриване на футъра на менюто за качество на видеото Долният колонтитул на менюто за качество на видеото е скрит Долният колонтитул на менюто за качество на видеото се показва @@ -1465,7 +1482,7 @@ Second \"item\" text" Бутонът е показан. Докоснете и задръжте, за да върнете скоростта на възпроизвеждане към стойността по подразбиране Бутонът не е показан - + Покажи бутона за качество на видеото Бутонът е показан. Докоснете и задръжте, за да възстановите качеството до подразбиране Бутонът не е показан 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 bfce746b8..6e94cbe7a 100644 --- a/patches/src/main/resources/addresources/values-bn-rBD/strings.xml +++ b/patches/src/main/resources/addresources/values-bn-rBD/strings.xml @@ -448,6 +448,11 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ ডায়ালগ প্রদর্শিত হবে এটি বয়সের সীমাবদ্ধতাকে বাইপাস করে না। এটা শুধু স্বয়ংক্রিয়ভাবে গ্রহণ করে। + + টিভিতে সাইন ইন পপআপ অক্ষম করুন + টিভিতে সাইন ইন পপআপ অক্ষম করা হয়েছে + টিভিতে সাইন ইন পপআপ সক্ষম করা হয়েছে + ডাবল ট্যাপ অধ্যায় স্কিপ অক্ষম করুন ডাবল ট্যাপ কখনও পরবর্তী/পূর্ববর্তী অধ্যায়ে স্কিপ ট্রিগার করতে পারে না @@ -559,7 +564,7 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ বিজ্ঞাপন বন্ধ করুন বোতামটি লুকানো আছে বিজ্ঞাপন বন্ধ করুন বোতামটি দেখানো হচ্ছে + This button usually only shows on live streams. --> Report লুকান রিপোর্ট বাটন লুকিয়ে রয়েছে রিপোর্ট বাটন প্রদর্শিত @@ -571,12 +576,21 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ ডাউনলোডগুলো হাইড করাও ডাউনলোড বোতাম লুকানো আছে ডাউনলোড বোতাম দেখানো হয়েছে + + হাইপ লুকান + হাইপ বোতাম লুকানো আছে + হাইপ বাটন দেখানো হয়েছে + + প্রমোট লুকান + প্রোমোশন বাটন লুকানো আছে + প্রোমোশন বাটন দেখানো আছে ধন্যবাদ লুকান ধন্যবাদ বোতাম লুকানো আছে ধন্যবাদ বোতাম দেখানো হয় + This button only shows if the user ip is from specific region such as the USA or EU. --> জিজ্ঞাসা লুকান জিজ্ঞাসা বোতাম লুকানো আছে জিজ্ঞাসা বোতাম দেখানো হয়েছে @@ -689,6 +703,9 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ ভিআর-এ ঘড়ি লুকান ভিআর মেনুতে দেখুন লুকানো আছে ভিআর মেনুতে দেখুন দেখানো হয়েছে + ভিডিও গুণমান মেনু লুকান + ভিডিও মানের মেনু লুকানো আছে + ভিডিও মানের মেনু দেখানো হয়েছে ভিডিও গুণমান মেনুর ফুটার লুকান ভিডিও গুণমান মেনু ফুটার লুকানো আছে ভিডিও গুণমান মেনু ফুটার দেখানো হচ্ছে @@ -1461,7 +1478,7 @@ DeArrow সম্পর্কে আরও জানতে এখানে ট বোতামটি দেখানো হয়েছে। প্লেব্যাক স্পীড ডিফল্টে রিসেট করতে ট্যাপ করে ধরে রাখুন। বোতাম প্রদর্শিত হয়নি - + ভিডিও গুণমান বোতাম দেখান বোতামটি দেখানো হয়েছে। গুণমান ডিফল্টে রিসেট করতে ট্যাপ করে ধরে রাখুন। বোতামটি দেখানো হয়নি। 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 b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-bs-rBA/strings.xml +++ b/patches/src/main/resources/addresources/values-bs-rBA/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-ca-rES/strings.xml b/patches/src/main/resources/addresources/values-ca-rES/strings.xml index b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-ca-rES/strings.xml +++ b/patches/src/main/resources/addresources/values-ca-rES/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-cs-rCZ/strings.xml b/patches/src/main/resources/addresources/values-cs-rCZ/strings.xml index c74ddf9cf..feab83001 100644 --- a/patches/src/main/resources/addresources/values-cs-rCZ/strings.xml +++ b/patches/src/main/resources/addresources/values-cs-rCZ/strings.xml @@ -452,6 +452,11 @@ Tato funkce je dostupná pouze pro starší zařízení" Dialog bude zobrazen Tímto krokem neobcházíte věkové omezení. Pouze jej automaticky akceptujete. + + Zakázat vyskakovací okno Přihlásit se k televizi + Vyskakovací okno Přihlásit se k televizi je zakázáno + Vyskakovací okno Přihlásit se k televizi je povoleno + Zakázat přeskočení kapitoly dvojitým klepnutím Dvojité klepnutí nikdy nespustí přeskočení na další/předchozí kapitolu @@ -563,7 +568,7 @@ Hlasitost se upravuje svislým přejetím po pravé straně obrazovky" Tlačítko pro zastavení reklam je skryté Tlačítko pro zastavení reklam je zobrazeno + This button usually only shows on live streams. --> Skrýt Nahlásit Tlačítko Nahlásit je skryto Tlačítko Nahlásit je zobrazeno @@ -575,12 +580,21 @@ Hlasitost se upravuje svislým přejetím po pravé straně obrazovky" Skrýt Stáhnout Tlačítko Stáhnout je skryto Tlačítko Stáhnout je zobrazeno + + Skrýt Hype + Tlačítko Hype je skryto + Tlačítko Hype je zobrazeno + + Skrýt propagaci + Tlačítko Propagovat je skryto + Tlačítko Propagovat je zobrazeno Skrýt Poděkování Tlačítko Poděkování je skryto Tlačítko Poděkování je zobrazeno + This button only shows if the user ip is from specific region such as the USA or EU. --> Skrýt Zeptat se Tlačítko Zeptat se je skryté Tlačítko Zeptat se je zobrazeno @@ -693,6 +707,9 @@ Chcete-li zobrazit nabídku zvukové stopy, změňte možnost „Zfalšovat stre Skrýt Sledovat ve VR Menu Sledovat ve VR je skryto Menu Sledovat ve VR je zobrazeno + Skrýt nabídku kvality videa + Nabídka kvality videa je skryta + Nabídka kvality videa je zobrazena Skrýt zápatí menu kvality videa Zápatí menu kvality videa je skryto Zápatí menu kvality videa je zobrazeno @@ -1465,7 +1482,7 @@ Povolením této funkce lze odemknout vyšší kvality videa" Tlačítko je zobrazeno. Klepnutím a podržením obnovíte výchozí rychlost přehrávání Tlačítko se nezobrazuje - + Zobrazit tlačítko kvality videa Tlačítko je zobrazeno. Klepnutím a podržením obnovíte kvalitu na výchozí Tlačítko není zobrazeno. 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 2cba9544f..303d55613 100644 --- a/patches/src/main/resources/addresources/values-da-rDK/strings.xml +++ b/patches/src/main/resources/addresources/values-da-rDK/strings.xml @@ -452,6 +452,11 @@ Denne funktion er kun tilgængelig for ældre enheder" Dialog vil blive vist Dette går ikke uden om aldersbegrænsningen. Det accepterer bare det automatisk. + + Deaktiver log ind på TV-pop op + Log ind på TV-pop op er deaktiveret + Log ind på TV-pop op er aktiveret + Deaktiver dobbeltklik kapitelspring Dobbeltklik kan aldrig udløse et spring til næste/forrige kapitel @@ -563,7 +568,7 @@ Juster lydstyrken ved at swipe lodret i højre side af skærmen" Knappen \"Stop annoncer\" er skjult Knappen \"Stop annoncer\" vises + This button usually only shows on live streams. --> Skjul Rapport Rapport-knappen er skjult Rapport-knappen er vist @@ -575,12 +580,21 @@ Juster lydstyrken ved at swipe lodret i højre side af skærmen" Skjul Download Download-knappen er skjult Download-knappen vises + + Skjul Hype + Hype-knappen er skjult + Hype-knappen vises + + Skjul fremhævelse + Promoveringsknappen er skjult + Promoveringsknappen vises Skjul Tak Tak knappen er skjult Tak knappen er vist + This button only shows if the user ip is from specific region such as the USA or EU. --> Skjul Spørg Spørg-knappen er skjult Spørg-knappen vises @@ -693,6 +707,9 @@ For at vise lydspormenuen skal du ændre \"Spoof videostream\" til iOS TV"Skjul vagt i VR Se i VR-menuen er skjult Se i VR-menuen vises + Skjul menu for videokvalitet + Videokvalitetsmenuen er skjult + Videokvalitetsmenuen vises Skjul sidefod til videokvalitet Videokvalitetsmenuens sidefod er skjult Videokvalitet menu footer er vist @@ -1467,7 +1484,7 @@ Aktivering af dette kan låse op for højere videokvalitet" Knappen vises. Tryk og hold for at nulstille afspilningshastigheden til standard. Knap vises ikke - + Vis videokvalitetsknap Knap vises. Tryk og hold nede for at nulstille kvaliteten til standard Knappen vises ikke 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 698cccf97..b45989a12 100644 --- a/patches/src/main/resources/addresources/values-de-rDE/strings.xml +++ b/patches/src/main/resources/addresources/values-de-rDE/strings.xml @@ -150,9 +150,9 @@ Sie werden nicht über unerwartete Ereignisse informiert." Chips ausblenden Chips sind ausgeblendet Chips werden angezeigt - Community-Beiträge ausblenden - Community-Beiträge sind ausgeblendet - Gemeinschaftsbeiträge werden angezeigt + Communitybeiträge ausblenden + Communitybeiträge sind ausgeblendet + Communitybeiträge werden angezeigt Kompakte Banner ausblenden Kompakte Banner sind ausgeblendet Kompakte Banner werden angezeigt @@ -218,7 +218,7 @@ Wenn ein Doodle zurzeit in Ihrer Region angezeigt wird und diese Einstellung zum Senderleiste ausblenden Kanalleiste ist ausgeblendet Kanalleiste wird angezeigt - Wasserzeichen ausblenden + Kanal-Wasserzeichen ausblenden Wasserzeichen ist ausgeblendet Wasserzeichen wird angezeigt Notfall-Boxen ausblenden @@ -303,9 +303,9 @@ Wenn ein Doodle zurzeit in Ihrer Region angezeigt wird und diese Einstellung zum Mitglieder-Regal ist ausgeblendet Mitglieder-Regal wird angezeigt - Schaltfläche \'Community besuchen\' ausblenden - Schaltfläche \'Community besuchen\' ist ausgeblendet - Schaltfläche \"Community besuchen\" ist angezeigt + Schaltfläche \'Zur Community\' ausblenden + Schaltfläche \'Zur Community\' ist ausgeblendet + Schaltfläch \"Zur Community\" wird angezeigt Den \'Store besuchen\'-Button auf Kanalseiten ausblenden Schaltfläche \"Shop besuchen\" ist ausgeblendet @@ -449,6 +449,11 @@ Diese Funktion ist nur für ältere Geräte verfügbar" Dialog wird angezeigt Dies umgeht nicht die Altersbeschränkung, sondern akzeptiert sie nur automatisch. + + Pop-up \"Bei TV anmelden\" deaktivieren + Pop-up \"Bei TV anmelden\" ist deaktiviert + Pop-up \"Bei TV anmelden\" ist aktiviert + Doppeltippen zum Kapitelüberspringen deaktivieren Doppeltippen kann niemals ein Überspringen zum nächsten/vorherigen Kapitel auslösen @@ -558,7 +563,7 @@ Passen Sie die Helligkeit an, indem Sie auf der linken Seite des Bildschirms ver Schaltfläche \"Werbung stoppen\" ist ausgeblendet Schaltfläche \"Werbung stoppen\" ist sichtbar + This button usually only shows on live streams. --> Bericht ausblenden Bericht-Button ist ausgeblendet Bericht-Button wird angezeigt @@ -570,12 +575,21 @@ Passen Sie die Helligkeit an, indem Sie auf der linken Seite des Bildschirms ver Download ausblenden Download-Button ist ausgeblendet Download-Button wird angezeigt + + Hypen ausblenden + Hypen-Button ist ausgeblendet + Hypen-Button wird angezeigt + + Werbung ausblenden + Schaltfläche \"Promoten\" ist ausgeblendet + Schaltfläche \"Promoten\" ist sichtbar Dank ausblenden Dankeschön-Taste ist ausgeblendet Dankeschön Button wird angezeigt + This button only shows if the user ip is from specific region such as the USA or EU. --> Ask ausblenden Ask-Button ist ausgeblendet Ask-Button wird angezeigt @@ -688,6 +702,9 @@ Um das Audiotrack-Menü anzuzeigen, ändere \"Video-Streams fälschen\" zu iOS T Überwachung in VR ausblenden Im VR-Menü beobachten ist ausgeblendet Im VR-Menü beobachten wird angezeigt + Videoqualitätsmenü ausblenden + Videomenü ist ausgeblendet + Videomenü ist sichtbar Videoqualitätsmenüfußzeile ausblenden Video-Qualität Menü-Fußzeile ist ausgeblendet Video-Qualität Menü-Fußzeile wird angezeigt @@ -1460,7 +1477,7 @@ Durch Aktivieren dieser Option können höhere Videoqualitäten freigeschaltet w Die Schaltfläche wird angezeigt. Tippen und halten, um die Wiedergabegeschwindigkeit auf die Standardeinstellung zurückzusetzen. Button wird nicht angezeigt - + Videoqualität-Schaltfläche anzeigen Schaltfläche wird angezeigt. Tippen und halten, um die Qualität auf Standard zurückzusetzen Schaltfläche wird nicht angezeigt 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 1d8a2729b..374209ecb 100644 --- a/patches/src/main/resources/addresources/values-el-rGR/strings.xml +++ b/patches/src/main/resources/addresources/values-el-rGR/strings.xml @@ -454,6 +454,11 @@ Second \"item\" text" Εμφανίζεται Αυτό δεν παρακάμπτει τον ηλικιακό περιορισμό. Απλώς τον αποδέχεται αυτόματα. + + Απενεργοποίηση αναδυόμενου παραθύρου σύνδεσης στην τηλεόραση + Το αναδυόμενο παράθυρο σύνδεσης στην τηλεόραση είναι απενεργοποιημένο + Το αναδυόμενο παράθυρο σύνδεσης στην τηλεόραση είναι ενεργοποιημένο + Απενεργοποίηση παράλειψης κεφαλαίου με διπλό πάτημα Το διπλό πάτημα δεν παράλειπει στο επόμενο/προηγούμενο κεφάλαιο @@ -565,7 +570,7 @@ Second \"item\" text" Κρυμμένο Εμφανίζεται + This button usually only shows on live streams. --> Μενού «Αναφορά» Κρυμμένο Εμφανίζεται @@ -577,12 +582,21 @@ Second \"item\" text" Κουμπί «Λήψη» Κρυμμένο Εμφανίζεται + + Κουμπί «Hype» + Κρυμμένο + Εμφανίζεται + + Κουμπί «Προώθηση» + Κρυμμένο + Εμφανίζεται Κουμπί «Σας ευχαριστούμε» Κρυμμένο Εμφανίζεται + This button only shows if the user ip is from specific region such as the USA or EU. --> Κουμπί «Ερώτηση» Κρυμμένο Εμφανίζεται @@ -695,6 +709,9 @@ Second \"item\" text" Μενού «Προβολή σε VR» Κρυμμένο Εμφανίζεται + Μενού «Ποιότητα» + Κρυμμένο + Εμφανίζεται Οδηγίες του μενού ποιότητας βίντεο Κρυμμένες Εμφανίζονται @@ -904,7 +921,7 @@ Second \"item\" text" Dislike προσωρινά μη διαθέσιμα (καθυστέρηση API) Δεδομένα dislike μη διαθέσιμα (κατάσταση %d) - Τα dislikes δεν είναι διαθέσιμα (όριο API πελάτη) + Δεδομένα dislike μη διαθέσιμα (όριο API πελάτη) Δεδομένα dislike μη διαθέσιμα (%s) Επαναφορτώστε το βίντεο για να ψηφίσετε χρησιμοποιώντας το Return YouTube Dislike @@ -1149,7 +1166,7 @@ Second \"item\" text" Δόθηκε μη έγκυρος χρόνος Στατιστικά - Τα στατιστικά είναι προσωρινά μη διαθέσιμα (το API είναι εκτός λειτουργίας) + Στατιστικά προσωρινά μη διαθέσιμα (API εκτός λειτουργίας) Φόρτωση... Το SponsorBlock είναι απενεργοποιημένο Το όνομα χρήστη σας: <b>%s</b> @@ -1362,8 +1379,8 @@ Second \"item\" text" Μέση του βίντεο Τέλος του βίντεο - Το DeArrow είναι προσωρινά μη διαθέσιμο. (κωδικός κατάστασης: %s) - Το DeArrow είναι προσωρινά μη διαθέσιμο + DeArrow προσωρινά μη διαθέσιμο (κωδικός: %s) + DeArrow προσωρινά μη διαθέσιμο Εμφάνιση ανακοινώσεων ReVanced @@ -1464,7 +1481,7 @@ Second \"item\" text" Το κουμπί εμφανίζεται. Πατήστε παρατεταμένα για επαναφορά της ταχύτητας αναπαραγωγής στην προεπιλογή Το κουμπί δεν εμφανίζεται - + Εμφάνιση κουμπιού αλλαγής ποιότητας βίντεο Το κουμπί εμφανίζεται. Πατήστε παρατεταμένα για επαναφορά της ποιότητας στην προεπιλογή Το κουμπί δεν εμφανίζεται 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 e54453127..5b8d539ee 100644 --- a/patches/src/main/resources/addresources/values-es-rES/strings.xml +++ b/patches/src/main/resources/addresources/values-es-rES/strings.xml @@ -90,7 +90,7 @@ Toca el botón continuar y permite los cambios de optimización." Acerca de Anuncios Miniaturas alternativas - Fuente + Feed General Reproductor Barra de progreso @@ -126,9 +126,9 @@ Sin embargo, si activas esto, también se registrarán algunos datos del usuario Registrar stack traces Los registros de depuración incluyen stack trace Los registros de depuración no incluyen stack trace - Mostrar mensaje de error en ReVanced - Se muestra un mensaje si se produce un error - No se muestra un mensaje si se produce un error + Mostrar aviso de error en ReVanced + Se mostrará un aviso si se produce un error + No se mostrará un aviso si se produce un error "Desactivar los avisos de error oculta todas las notificaciones de error de ReVanced. No se le notificará de ningún evento inesperado." @@ -336,9 +336,9 @@ Si un doodle se está mostrando actualmente en tu región y este ajuste de ocult Ocultar botón \'Crear un Short\' El botón Crear un Short está oculto Se muestra el botón Crear un Short - Ocultar comentario de vista previa - El comentario de la vista previa está oculto - Vista previa del comentario se muestra + Ocultar vista previa de comentarios + La vista previa de comentarios está oculta + La vista previa de comentarios es visible Ocultar botón Gracias El botón de gracias está oculto Se muestra el botón de gracias @@ -357,14 +357,14 @@ Si un doodle se está mostrando actualmente en tu región y este ajuste de ocult Ocultar contenido de palabra clave Ocultar videos de búsqueda y feed usando filtros de palabras clave Ocultar videos domésticos por palabras clave - Los videos en la pestaña de inicio son filtrados por palabras clave - Los videos en la pestaña de inicio no son filtrados por palabras clave + Los videos en la pestaña \'Inicio\' son filtrados por palabras clave + Los videos en la pestaña \'Inicio\' no son filtrados por palabras clave Ocultar resultados de búsqueda por palabras clave Los resultados de la búsqueda son filtrados por palabras clave Los resultados de la búsqueda no son filtrados por palabras clave Ocultar vídeos de suscripción por palabras clave - Los videos en la pestaña de suscripciones son filtrados por palabras clave - Los videos en la pestaña de suscripciones no son filtrados por palabras clave + Los videos en la pestaña \'Suscripciones\' son filtrados por palabras clave + Los videos en la pestaña \'Suscripciones\' no son filtrados por palabras clave Palabras clave a ocultar @@ -388,7 +388,7 @@ Limitaciones Añadir comillas para usar palabra clave: %s La palabra clave tiene declaraciones conflictivas: %s La palabra clave es demasiado corta y requiere comillas: %s - Palabra clave ocultará todos los vídeos: %s + La palabra clave ocultará todos los vídeos: %s Ocultar estantería de la tienda del creador @@ -403,7 +403,7 @@ Limitaciones Esta función solo está disponible para dispositivos antiguos" Se muestran anuncios a pantalla completa - Ocultar anuncio solo con dispositivos viejos + Ocultar anuncios a pantalla completa solo funciona con dispositivos antiguos Ocultar anuncios generales Los anuncios generales están ocultos Se muestran anuncios generales @@ -447,10 +447,15 @@ Esta función solo está disponible para dispositivos antiguos" El botón no se muestra - Eliminar diálogo de discreción del visor - Se eliminará el diálogo + Eliminar diálogo de discreción del espectador + Se quitará el diálogo Se mostrará el diálogo - Esto no pasa por alto la restricción de edad, sino que simplemente la acepta automáticamente. + Esto no evita la restricción de edad. Solo la acepta automáticamente. + + + Desactivar la ventana emergente de Iniciar sesión en TV + La ventana emergente de Iniciar sesión en TV está desactivada + La ventana emergente de Iniciar sesión en TV está activada Deshabilitar el salto de capítulo con doble toque @@ -516,7 +521,7 @@ Ajusta el volumen deslizando verticalmente en el lado derecho de la pantalla"La cantidad de milisegundos que la superposición es visible Opacidad del fondo de la superposición de deslizamiento Valor de opacidad entre 0-100 - La opacidad de la superposición de deslizamiento debe estar entre 0 y 100 + La opacidad de superposición de deslizamiento debe ser de entre 0-100 Color del brillo de la superposición de deslizamiento El color de la barra de progreso para los controles de brillo Color del volumen de la superposición de deslizamiento @@ -563,7 +568,7 @@ Ajusta el volumen deslizando verticalmente en el lado derecho de la pantalla"El botón de detener anuncios está oculto El botón de detener anuncios está mostrado + This button usually only shows on live streams. --> Ocultar informe El botón Reportar está oculto Se muestra el botón Reportar @@ -575,12 +580,21 @@ Ajusta el volumen deslizando verticalmente en el lado derecho de la pantalla"Ocultar descarga El botón de descarga está oculto Se muestra el botón de descarga + + Ocultar Hype + El botón Hype está oculto + El botón de hype está visible + + Ocultar pestaña \'Promocionar\' + El botón de Promocionar está oculto + El botón de Promocionar está visible Ocultar Gracias El botón de gracias está oculto Se muestra el botón de gracias + This button only shows if the user ip is from specific region such as the USA or EU. --> Ocultar pregunta El botón \"Preguntar\" está oculto Se muestra el botón \"Preguntar\" @@ -597,11 +611,11 @@ Ajusta el volumen deslizando verticalmente en el lado derecho de la pantalla"Botones de navegación Ocultar o cambiar botones en la barra de navegación - Ocultar Principal + Ocultar pestaña \'Inicio\' El botón de inicio está oculto El botón de inicio es visible - Ocultar Shorts + Ocultar pestaña \'Shorts\' El botón de Shorts está oculto El botón de Shorts es visible @@ -609,34 +623,34 @@ Ajusta el volumen deslizando verticalmente en el lado derecho de la pantalla"El botón Crear está oculto Se muestra el botón Crear - Ocultar Suscripciones + Ocultar pestaña \'Suscripciones\' El botón Suscripciones está oculto Se muestra el botón Suscripciones - Ocultar notificaciones - El botón de notificaciones está oculto - Se muestra el botón de notificaciones + Ocultar Notificaciones + El botón de Notificaciones está oculto + Se muestra el botón de Notificaciones - Cambiar Crear con Notificaciones + Cambiar botón Crear con el de Notificaciones "El botón Crear se cambia por el botón Notificaciones -Nota: Habilitar esto también oculta a la fuerza los anuncios de vídeo" +Nota: Habilitar esto también ocultará forzosamente los anuncios de video" El botón Crear no se cambia con el botón de notificaciones "Deshabilitar este ajuste también deshabilitará el bloqueo de anuncios de Shorts. Si cambiar este ajuste no tiene efecto, intenta cambiar al modo incógnito." - Ocultar etiquetas de botón de navegación + Ocultar etiquetas de navegación Las etiquetas están ocultas - Las etiquetas se muestran + Las etiquetas están visibles Desactivar la barra de estado translúcida La barra de estado es opaca La barra de estado es opaca o translúcida En algunos dispositivos, habilitar esta función puede cambiar la barra de navegación del sistema a transparente. Desactivar la barra translúcida clara La barra de navegación en modo claro es opaca - La barra de navegación del modo claro es opaca o translúcida + La barra de navegación en modo claro es opaca o translúcida Desactivar la barra translúcida oscura La barra de navegación en modo oscuro es opaca - La barra de navegación del modo oscuro es opaca o translúcida + La barra de navegación en modo oscuro es opaca o translúcida Menú desplegable @@ -661,8 +675,8 @@ Si cambiar este ajuste no tiene efecto, intenta cambiar al modo incógnito."Ocultar Modo ambiente Menú de Modo ambiente oculto Se muestra el menú de Modo ambiente - Ocultar volumen estable - Se muestra el menú de volumen estable + Ocultar \'Volumen estable\' + El menú de volumen estable es visible El menú de volumen estable está oculto Ocultar Ayuda & comentarios @@ -693,6 +707,9 @@ Para mostrar el menú de la pista de audio, cambia \"Suplantar transmisiones de Ocultar reloj en VR Ver en el menú VR está oculto Ver en el menú VR se muestra + Ocultar menú de calidad de vídeo + El menú de calidad de video está oculto + El menú de calidad de video está visible Ocultar pie de página del menú de calidad de vídeo Pie de menú de calidad de vídeo oculto El pie del menú de calidad de vídeo se muestra @@ -748,14 +765,14 @@ Para mostrar el menú de la pista de audio, cambia \"Suplantar transmisiones de Reproductor de Shorts Ocultar o mostrar componentes del reproductor de Shorts - Ocultar Shorts en la página principal + Ocultar Shorts en la pestaña de Inicio Oculto en la página principal y vídeos relacionados Visible en la página principal y vídeos relacionados Ocultar Shorts en los resultados de búsqueda Ocultos en los resultados de búsqueda Mostrar en los resultados de búsqueda - Ocultar Shorts en el feed de Suscripciones + Ocultar Shorts en la pestaña de Suscripciones Oculto en el feed de Suscripciones Visible en el feed de Suscripciones Ocultar Shorts en el historial de visualización @@ -786,9 +803,9 @@ Para mostrar el menú de la pista de audio, cambia \"Suplantar transmisiones de Ocultar botones de superposición en pausa Los botones de superposición pausados están ocultos Se muestran los botones de superposición pausados - Ocultar comentario de vista previa - El comentario de vista previa está oculto - Se muestra la vista previa del comentario + Ocultar vista previa de comentarios + La vista previa de comentarios está oculta + La vista previa de comentarios es visible Ocultar el botón Guardar música El botón Guardar música está oculto Mostrar el botón de guardar música @@ -855,8 +872,8 @@ Para mostrar el menú de la pista de audio, cambia \"Suplantar transmisiones de Etiqueta de enlace de vídeo oculto Etiqueta de enlace de vídeo mostrada Ocultar barra de navegación - Barra de navegación oculta - Se muestra la barra de navegación + La barra de navegación está oculta + La barra de navegación está visible Ocultar el vídeo sugerido de la pantalla final @@ -1057,7 +1074,7 @@ Tu ID de usuario es como una contraseña y nunca debe compartirse." Un intervalo sin contenido real. Podría ser una pausa, marco estático o animación de repetición. No incluye transiciones que contengan información Tarjetas finales / Créditos Créditos o cuando aparecen las tarjetas finales de YouTube. No para conclusiones con información - Vista previa/Recapitular/Juego + Vista previa/Resumen/Enganche Colección de clips que muestran lo que viene o lo que pasó en el vídeo o en otros videos de una serie, donde toda la información se repite en otro lugar Bromas de relleno Escenas tangenciales añadidas sólo para relleno o humor que no están obligadas a entender el contenido principal del vídeo. No incluye segmentos proporcionando detalles de contexto o fondo @@ -1165,11 +1182,11 @@ Ya existe" Los datos son proporcionados por la API de SponsorBlock. Pulsa aquí para aprender más y ver las descargas para otras plataformas - Diseño del diseño factor - Defecto + Factor de forma del diseño + Predeterminado Teléfono Tableta - Automotriz + Automóvil "Los cambios incluyen: Diseño para tablets @@ -1291,8 +1308,8 @@ El minireproductor se puede arrastrar fuera de la pantalla hacia la izquierda o Opacidad de reproductor debe estar en 0 -100 - Activar la pantalla de carga del degradado - La pantalla de carga tendrá un fondo de degradado + Activar la pantalla de carga gradiente + La pantalla de carga tendrá un fondo gradiente La pantalla de carga tendrá un fondo sólido Estilo de la pantalla de presentación Color @@ -1323,9 +1340,9 @@ Habilitar esto puede solucionar las imágenes que faltan que están bloqueadas e - Pestaña + Pestaña de Inicio - Pestaña Suscripciones + Pestaña de Suscripciones Pestaña Listas de reproducción del reproductor & recomendaciones @@ -1456,7 +1473,7 @@ Habilitar esto puede desbloquear calidades de vídeo más altas" Se muestra el botón. Mantén pulsado para restablecer la velocidad de reproducción predeterminada El botón no se muestra - + Mostrar botón de calidad de video Botón visible. Toca y mantén para restablecer la calidad a los valores predeterminados Botón no visible 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 720e43dd9..12563fedd 100644 --- a/patches/src/main/resources/addresources/values-et-rEE/strings.xml +++ b/patches/src/main/resources/addresources/values-et-rEE/strings.xml @@ -452,6 +452,11 @@ See funktsioon on saadaval ainult vanemates seadmetes" Dialoog kuvatakse See ei mööda vanusepiirangust. See lihtsalt aktsepteerib seda automaatselt. + + Keela telerisse sisselogimise hüpikaken + Telerisse sisselogimise hüpikaken on keelatud + Telerisse sisselogimise hüpikaken on lubatud + Keela topeltpuudutusega peatüki vahelejätmine Topeltpuudutus ei saa kunagi käivitada järgmise/eelmise peatüki vahelejätmist @@ -563,7 +568,7 @@ Helitugevuse reguleerimiseks pühkige ekraani paremal küljel vertikaalselt"Peata reklaamide nupp on peidetud Peata reklaamide nupp on nähtav + This button usually only shows on live streams. --> Peida Teata Teata nupp on peidetud Teata nupp on nähtav @@ -575,12 +580,21 @@ Helitugevuse reguleerimiseks pühkige ekraani paremal küljel vertikaalselt"Peida Laadi alla Laadi alla nupp on peidetud Laadi alla nupp on nähtav + + Peida Hype + Hype nupp on peidetud + Hype\'i nupp on nähtav + + Peida reklaam + Reklaami nupp on peidetud + Reklaami nupp on nähtav Peida Tänan Tänan nupp on peidetud Tänan nupp on nähtav + This button only shows if the user ip is from specific region such as the USA or EU. --> Peida küsi Küsi nupp on peidetud Küsi nupp on nähtav @@ -693,6 +707,9 @@ Heliriba menüü kuvamiseks muutke valikut „Võltsitud videovoogedastus“ vä Peida Vaata VR-is Vaata VR-is menüü on peidetud Vaata VR-is menüü on nähtav + Peida videokvaliteedi menüü + Videokvaliteedi menüü on peidetud + Videokvaliteedi menüü on nähtav Peida video kvaliteedi menüü jalg Video kvaliteedi menüü jalg on peidetud Video kvaliteedi menüü jalg on nähtav @@ -1465,7 +1482,7 @@ Selle lubamine võib avada kõrgema video kvaliteedi" Nupp on nähtaval. Puudutage ja hoidke all, et taastada taasesituse kiirus vaikeväärtusele Nuppi ei kuvata - + Näita video kvaliteedi nuppu Nupp on nähtaval. Kvaliteedi lähtestamiseks vaikeseadeteks puudutage ja hoidke Nuppu ei kuvata 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 b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-eu-rES/strings.xml +++ b/patches/src/main/resources/addresources/values-eu-rES/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-fa-rIR/strings.xml b/patches/src/main/resources/addresources/values-fa-rIR/strings.xml index f95959ae4..334e19ee7 100644 --- a/patches/src/main/resources/addresources/values-fa-rIR/strings.xml +++ b/patches/src/main/resources/addresources/values-fa-rIR/strings.xml @@ -114,6 +114,8 @@ Second \"item\" text" + + @@ -131,12 +133,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -272,7 +277,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-fi-rFI/strings.xml b/patches/src/main/resources/addresources/values-fi-rFI/strings.xml index fbd4cef6a..7513f3f9b 100644 --- a/patches/src/main/resources/addresources/values-fi-rFI/strings.xml +++ b/patches/src/main/resources/addresources/values-fi-rFI/strings.xml @@ -452,6 +452,8 @@ Tämä ominaisuus on käytettävissä vain vanhemmilla laitteilla" Valintaikkuna näytetään Tämä ei ohita ikärajoitusta. Se vain hyväksyy sen automaattisesti. + + Poista videon osan ohittaminen kaksoisnapauttamalla käytöstä Kaksoisnapautus ei voi koskaan aiheuttaa siirtymistä videon seuraavaan/edelliseen osaan @@ -563,7 +565,7 @@ Säädä äänenvoimakkuutta pyyhkäisemällä pystysuoraan näytön oikealta pu Estä mainokset -painike on piilotettu Estä mainokset -painike näytetään + This button usually only shows on live streams. --> Piilota Tee ilmoitus Tee ilmoitus -painike on piilotettu Tee ilmoitus -painike näytetään @@ -575,12 +577,21 @@ Säädä äänenvoimakkuutta pyyhkäisemällä pystysuoraan näytön oikealta pu Piilota Lataa Lataa-painike on piilotettu Lataa-painike näytetään + + Piilota Hypetä + Hypetä-painike on piilotettu + Hypetä-painike näytetään + + Piilota Mainosta + Mainosta-painike on piilotettu + Mainosta-painike näytetään Piilota Kiitos Kiitos-painike on piilotettu Kiitos-painike näytetään + This button only shows if the user ip is from specific region such as the USA or EU. --> Piilota Ask Ask-painike on piilotettu Ask-painike näytetään @@ -670,8 +681,8 @@ Jos tämän asetuksen muuttaminen ei tule voimaan, kokeile vaihtaa Incognito-til Ohjeet ja palaute -valinta näytetään Piilota Toistonopeus - Toistonopeus-valikko on piilotettu - Toistonopeus-valikko näytetään + Toistonopeusvalikko on piilotettu + Toistonopeusvalikko näytetään Piilota Lisätietoja @@ -693,6 +704,9 @@ Jos haluat nähdä sen, aseta \"Naamioi videovirrat\" iOS TV:ksi" Piilota Katso VR-tilassa Katso VR-tilassa -valinta on piilotettu Katso VR-tilassa -valinta näytetään + Piilota videolaatuvalikko + Videolaatuvalikko on piilotettu + Videolaatuvalikko näytetään Piilota videolaatuvalikon alatunniste Videolaatuvalikon alatunniste on piilotettu Videolaatuvalikon alatunniste näytetään @@ -1465,7 +1479,7 @@ Tämä voi avata korkealaatuisemmat videot" Painike näytetään. Napauta ja pidä pohjassa palauttaaksesi soiton nopeuden oletukseksi Painiketta ei näytetä - + Näytä videolaatupainike Painike näkyy. Paina pitkään palauttaaksesi laadun oletukseksi Painiketta ei näytetä 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 b770c938a..1d538ff94 100644 --- a/patches/src/main/resources/addresources/values-fil-rPH/strings.xml +++ b/patches/src/main/resources/addresources/values-fil-rPH/strings.xml @@ -452,6 +452,11 @@ Ang tampok na ito ay magagamit lamang para sa mga mas lumang device" Ipapakita ang dialog Hindi nito nilalampasan ang paghihigpit sa edad. Awtomatiko lang itong tinatanggap. + + Huwag paganahin ang popup ng Pag-sign in sa TV + Hindi pinagana ang popup ng Pag-sign in sa TV + Pinagana ang popup ng Pag-sign in sa TV + Huwag paganahin ang paglaktaw ng kabanata sa doble tap Ang doble tap ay hindi kailanman maaaring mag-trigger ng paglaktaw sa susunod/nakaraang kabanata @@ -563,7 +568,7 @@ Ayusin ang volume sa pamamagitan ng pag-swipe nang patayo sa kanang bahagi ng sc Nakatago ang button ng pagtigil sa mga ad Napakita ang button ng pagtigil sa mga ad + This button usually only shows on live streams. --> Itago ang Ulat Nakatago ang button ng ulat Ang pindutan ng ulat ay ipinapakita @@ -575,12 +580,21 @@ Ayusin ang volume sa pamamagitan ng pag-swipe nang patayo sa kanang bahagi ng sc Itago ang Download Nakatago ang button sa pag-download Ang pindutan ng pag-download ay ipinapakita + + Itago ang Ingay + Nakatago ang hype button + Ipinapakita ang Hype button + + Itago ang I-promote + Nakatago ang button na Promote + Nakikita ang button na Promote Itago Salamat Nakatago ang buton ng salamat Ang pindutan ng salamat ay ipinapakita + This button only shows if the user ip is from specific region such as the USA or EU. --> Itago ang Tanong Nakatago ang button na Tanong Ipinapakita ang button na Tanong @@ -691,6 +705,9 @@ Upang ipakita ang menu ng Audio track, baguhin ang 'Spoof video streams' sa iOS Itago ang Panoorin sa VR Nakatago ang panonood sa VR menu Ang panonood sa VR menu ay ipinapakita + Itago ang menu ng kalidad ng video + Nakatago ang menu ng kalidad ng video + Ipinapakita ang menu ng kalidad ng video Itago ang footer ng menu ng kalidad ng video Nakatago ang footer ng menu ng kalidad ng video Ang footer ng menu ng kalidad ng video ay ipinapakita @@ -1463,7 +1480,7 @@ Ang pagpapagana nito ay maaaring magbukas ng mas mataas na kalidad ng video"Ipinapakita ang button. I-tap at i-hold para i-reset ang bilis ng pag-playback sa default Hindi ipinapakita ang button - + Ipakita ang button ng kalidad ng video Nakalabas ang button. Pindutin nang matagal para ibalik sa default ang kalidad Hindi ipinapakita ang buton 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 c8b02bf0f..8bd630563 100644 --- a/patches/src/main/resources/addresources/values-fr-rFR/strings.xml +++ b/patches/src/main/resources/addresources/values-fr-rFR/strings.xml @@ -452,6 +452,11 @@ Cette fonctionnalité est disponible uniquement pour les appareils anciens"Le message sera affiché Cette option ne contourne pas la vérification de l\'âge. Elle est juste confirmée automatiquement. + + Désactiver le pop-up \"Connectez-vous à la TV\" + Le pop-up \"Connectez-vous à la TV\" est désactivé + Le pop-up \"Connectez-vous à la TV\" est activé + Désactiver le double appui pour passer à un chapitre Le double appui ne peut jamais déclencher de saut vers le chapitre suivant/précédent @@ -563,7 +568,7 @@ Réglez le volume en balayant verticalement sur le côté droit de l'écran"Le bouton Zéro annonce est masqué Le bouton Zéro annonce est affiché + This button usually only shows on live streams. --> Masquer \"Signaler\" Le bouton Signaler est masqué Le bouton Signaler est affiché @@ -575,12 +580,21 @@ Réglez le volume en balayant verticalement sur le côté droit de l'écran"Masquer \"Télécharger\" Le bouton Télécharger est masqué Le bouton Télécharger est affiché + + Masquer \"Booster\" + Le bouton Booster est masqué + Le bouton Booster est affiché + + Masquer \"Promouvoir\" + Le bouton Promouvoir est masqué + Le bouton Promouvoir est affiché Masquer \"Merci\" Le bouton Merci est masqué Le bouton Merci est affiché + This button only shows if the user ip is from specific region such as the USA or EU. --> Masquer \"Demander\" Le bouton Demander est masqué Le bouton Demander est affiché @@ -693,6 +707,9 @@ Pour afficher le menu Piste audio, définissez \"Falsifier les flux vidéo\" sur Masquer \"Regarder en RV\" Le menu Regarder en RV est masqué Le menu Regarder en RV est affiché + Masquer le menu de qualité vidéo + Le menu de qualité vidéo est masqué + Le menu de qualité vidéo est affiché Masquer le pied de page du menu de qualité vidéo Le pied de page du menu de qualité vidéo est masqué Le pied de page du menu de qualité vidéo est affiché @@ -1466,7 +1483,7 @@ Activer cette option peut déverrouiller des qualités vidéo supérieures"Le bouton est affiché. Appuyez longuement dessus pour rétablir la vitesse de lecture par défaut. Le bouton n\'est pas affiché - + Afficher le bouton de qualité vidéo Le bouton est affiché. Appuyez longuement pour rétablir la qualité par défaut. Le bouton n\'est pas affiché 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 9a4fe8f46..3481ba1eb 100644 --- a/patches/src/main/resources/addresources/values-ga-rIE/strings.xml +++ b/patches/src/main/resources/addresources/values-ga-rIE/strings.xml @@ -23,8 +23,8 @@ Second \"item\" text" Theip ar sheiceálacha Oscailt láithreán gréasáin oifigiúil - Déan neamhaird de - <h5>Is cosúil nach bhfuil an aip seo paiteanta agat.</h5><br>Seans nach bhfeidhmeoidh an aip seo i gceart, <b>d\'fhéadfadh sé a bheith díobhálach nó fiú contúirteach le húsáid</b>< br><br>Tugann na seiceálacha seo le tuiscint go bhfuil an aip seo réamhphatáilte nó faighte ó dhuine éigin eile:<br><br><small>%1$s</small><br> <b>díshuiteáil an aip seo agus paiste tú féin</b> chun a chinntiú go bhfuil tú ag úsáid aip atá bailíochtaithe agus slán.<p><br>Má dhéantar neamhaird de, ní thaispeánfar an rabhadh seo ach faoi dhó. + Neamhaird + <h5>Ní cosúil gur tusa a rinne paiste ar an aip seo.</h5><br>B’fhéidir nach bhfeidhmeoidh an aip seo i gceart, <b>agus d’fhéadfadh sé a bheith díobhálach nó fiú contúirteach le húsáid</b>< br><br>.Tugann na seiceálacha seo le fios go bhfuil an aip seo patáilte roimh ré nó gur thángthas uirthi ó dhuine eile:<br><br><small>%1$s</small><br> <b>Moltar go láidir duit an aip seo a dhíshuiteáil agus í a phaisteáil leat féin</b> chun a chinntiú go bhfuil tú ag úsáid aip bailíochtaithe agus slán.<p><br>Mura ndéanann tú aird ar an rabhadh seo, ní thaispeánfar é ach faoi dhó. Paisteáilte ar ghléas eile Gan a bheith suiteáilte ag ReVanced Manager Paisteáilte níos mó ná 10 nóiméad ó shin @@ -34,12 +34,12 @@ Second \"item\" text" Socruithe An bhfuil tú cinnte gur mhaith leat dul ar aghaidh? - Athshocraigh + Athshocrú Dath a athshocrú Dath neamhbhailí - Teastaíonn atosú + Atosú ag teastáil Atosaigh an aip chun go mbeidh an t-athrú seo i bhfeidhm. - Athosaigh + Atosaigh Iompórtáil Cóipeáil Athshocraigh socruithe ReVanced go réamhshocrú @@ -76,7 +76,7 @@ Chun teangacha nua a aistriú, tabhair cuairt ar translate.revanced.app" - Suíomh Gréasáin oscailte + Oscail láithreán gréasáin "Caithfidh tú optúimíochtaí ceallraí MicroG GmsCore a dhíchumasú chun fadhbanna a sheachaint. Ní chuirfidh díghníomhachtú optúimíochtaí ceallraí do MicroG isteach ar úsáid ceallraí ar bhealach diúltach. @@ -95,9 +95,9 @@ Brúigh an cnaipe leanúnaí agus ligean athruithe optúimíochta." Seinnteoir Barra Cuardaigh Rialuithe Svaidhpeála - Éagsúla + Ilchineálach Físeán - Athshocraigh roghanna seanghléasanna + Athchóirigh sean-roghchláir socruithe Taispeántar sean-roghchláir socruithe Ní thaispeántar sean-roghchláir socruithe Taispeáin stair cuardaigh na socruithe @@ -106,13 +106,13 @@ Brúigh an cnaipe leanúnaí agus ligean athruithe optúimíochta." Díchumasaigh seinnte Cúlra Shorts - Tá súgradh cúlra Shorts díchumasaithe - Tá súgradh cúlra Shorts cumasaithe + Tá seinm chúlra Shorts díchumasaithe + Tá seinm chúlra Shorts cumasaithe - Dífhabhtaithe - Cumasaigh nó díchumasaigh roghanna dífhabhtaithe - Logáil dífhabhtaithe + Dífhabhtú + Cumasaigh nó díchumasaigh roghanna dífhabhtú + Dífhabhtú logáil Tá logaí dífhabhtaithe cumasaithe Tá logaí dífhabhtaithe díchumasaithe Maolán prótacal logála @@ -127,15 +127,15 @@ Mar sin féin, logálfaidh sé seo roinnt sonraí úsáideora freisin, mar shamp Cuimsíonn logaí dífhabhtaithe rian cruach Ní chuimsíonn logaí dífhabhtaithe rian cruach Taispeáin tósta ar earráid ReVanced - Taispeántar toast má tharlaíonn earráid - Ní thaispeántar toast má tharlaíonn earráid + Taispeántar tósta má tharlaíonn earráid + Ní thaispeántar tósta má tharlaíonn earráid "Má mhúchtar tóstaí earráide, folaítear gach fógra earráide ReVanced. Ní chuirfear ar an eolas thú faoi aon imeachtaí gan choinne." Easpórtáil logaí dífhabhtaithe Cóipeálann sé logaí dífhabhtaithe ReVanced chuig an gearrthaisce Tá logáil dífhabhtaithe díchumasaithe - Ní bhfuarthas aon loga + Níor aimsíodh aon logaí Lógaí cóipeáilte Theip ar logaí a easpórtáil: %s Glan logaí dífhabhtaithe @@ -146,10 +146,10 @@ Ní chuirfear ar an eolas thú faoi aon imeachtaí gan choinne." Folaigh cártaí albam Tá cártaí albam i bhfolach Taispeántar cártaí albam - Folaigh cártaí ealaíontóirí + Folaigh cártaí ealaíontóra Tá cártaí ealaíontóirí i bhfolach Taispeántar cártaí ealaíonta - Folaigh an seilf scagairí + Folaigh seilf sceallóga Tá seilf scagairí i bhfolach Taispeántar seilf scagairí Folaigh postálacha pobail @@ -161,13 +161,13 @@ Ní chuirfear ar an eolas thú faoi aon imeachtaí gan choinne." Folaigh bosca slua-mhaoiniú Tá bosca slua-mhaoiniú i bhfolach Taispeántar bosca slua-mhaoiniú - Folaigh cárta insínte + Folaigh cárta inleathnaithe Tá cárta insínte faoi fhíseáin i bhfolach - Tá cárta insínte faoi fhíseáin le feiceáil + Taispeántar cárta inleathnaithe faoi fhíseáin Folaigh an cnaipe micreafón ar snámh Cnaipe micreafóin ar snámh sa chuardach i bhfolach - Tá cnaipe micreafóin ar snámh sa chuardach ar taispeáint - Folaigh seilfeanna cothromán + Taispeántar cnaipe micreafóin ar snámh sa chuardach + Folaigh seilfeanna cothrománacha "Tá seilfeanna cothrománacha i bhfolach, amhail: • Nuacht is déanaí • Lean ar aghaidh ag féachaint @@ -175,11 +175,11 @@ Ní chuirfear ar an eolas thú faoi aon imeachtaí gan choinne." • Is ábhartha • Siopadóireacht • Féach arís air" - Seilfeanna cothrománacha taispeánta + Taispeántar seilfeanna cothrománacha Folaigh seilf íomhá Tá seilf íomhá i dtorthaí cuardaigh i bhfolach - Tá seilf íomhá i dtorthaí cuardaigh le feiceáil - Folaigh na postanna is déanaí + Taispeántar seilf íomhánna i dtorthaí cuardaigh + Folaigh na poist is déanaí Tá postanna is déanaí i bhfolach Taispeántar na postálacha is déanaí Folaigh seinmliostaí meascán @@ -452,6 +452,11 @@ Níl an ghné seo ar fáil ach do ghléasanna níos sine" Taispeánfar dialóg Ní sheachnaíonn sé seo an srian aoise. Ní ghlacann sé leis go huathoibríoch. + + Díchumasaigh an Aníos Sínigh Isteach sa Teilifís + Tá an Aníos Sínigh Isteach sa Teilifís díchumasaithe + Tá an Aníos Sínigh Isteach sa Teilifís cumasaithe + Díchumasaigh scipeáil caibidle le sconna dúbailte Ní féidir le sconna dúbailte scipeáil chuig an gcéad chaibidil eile/roimhe seo a spreagadh go deo @@ -563,7 +568,7 @@ Coigeartaigh an toirt trí haisceartán go hingearach ar thaobh deas an scáile Tá cnaipe stad fógraí i bhfolach Tá cnaipe stad fógraí taispeánta + This button usually only shows on live streams. --> Folaigh Tuairisc Tá an cnaipe tuairisce i bhfolach Taispeántar an cnaipe tuairisce @@ -575,12 +580,21 @@ Coigeartaigh an toirt trí haisceartán go hingearach ar thaobh deas an scáile Folaigh Íoslódáil Tá an cnaipe íosluchtaithe i bhfolach Taispeántar cnaipe íoslódáil + + Folaigh Borradh + Tá cnaipe an Hype i bhfolach + Tá an cnaipe Hype ar taispeáint + + Folaigh Cur Chun Cinn + Tá an cnaipe Cur Chun Cinn folaithe + Tá an cnaipe Cur Chun Cinn taispeánta Folaigh Go raibh maith agat Tá cnaipe buíochas i bhfolach Taispeántar cnaipe buíochas + This button only shows if the user ip is from specific region such as the USA or EU. --> Folaigh Fiafraigh Tá cnaipe Fiafraigh i bhfolach Taispeántar cnaipe Fiafraigh @@ -693,6 +707,9 @@ Chun roghchlár na rian fuaime a thaispeáint, athraigh 'Srutháin físeáin bhr Folaigh Watch i VR Tá faire i roghchlár VR i bhfolach Taispeántar an faire sa roghchlár VR + Folaigh roghchlár cáilíocht físe + Tá roghchlár cháilíocht na físeáin i bhfolach + Tá roghchlár cháilíocht na físeáin ar taispeáint Folaigh buntásc roghchlár cáilíochta físe Tá buntásc an roghchláir cáilíochta físeáin folaithe Taispeántar buntásc roghchlár cáilíochta físeáin @@ -1465,7 +1482,7 @@ Is féidir le seo caighdeáin físeáin níos airde a dhíghlasáil" Taispeántar an cnaipe. Tapáil agus coinnigh chun luas athsheinm a athshocrú go réamhshocrú Ní thaispeántar an cnaipe - + Taispeáin cnaipe cáilíochta físeáin Tá cnaipe le feiceáil. Tapáil agus coinnigh chun cáilíocht a athshocrú mar réamhshocrú Níl cnaipe le feiceáil @@ -1587,13 +1604,13 @@ Tá réiteach uasmhéideach 1080p ag AVC, níl códú fuaime Opus ar fáil, agus Socruithe Blocála Fógraí Comhrá Socruithe comhrá - Ilghnéitheach - Socruithe ilghnéitheacha + Ilchineálach + Socruithe Ilchineálach Socruithe ginearálta Socruithe eile Fógraí taobh an chliaint Fógraí surestream ar thaobh an fhreastalaí - Logáil dífhabhtaithe + Tá logaí dífhabhtú cumasaithe Tá logaí dífhabhtaithe cumasaithe Tá logaí dífhabhtaithe díchumasaithe 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 b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-gl-rES/strings.xml +++ b/patches/src/main/resources/addresources/values-gl-rES/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-gu-rIN/strings.xml b/patches/src/main/resources/addresources/values-gu-rIN/strings.xml index b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-gu-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-gu-rIN/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-hi-rIN/strings.xml b/patches/src/main/resources/addresources/values-hi-rIN/strings.xml index b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-hi-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-hi-rIN/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-hr-rHR/strings.xml b/patches/src/main/resources/addresources/values-hr-rHR/strings.xml index b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-hr-rHR/strings.xml +++ b/patches/src/main/resources/addresources/values-hr-rHR/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-hu-rHU/strings.xml b/patches/src/main/resources/addresources/values-hu-rHU/strings.xml index 47ec578cb..e4b67eae2 100644 --- a/patches/src/main/resources/addresources/values-hu-rHU/strings.xml +++ b/patches/src/main/resources/addresources/values-hu-rHU/strings.xml @@ -452,6 +452,11 @@ Ez a funkció csak régebbi eszközökön érhető el" A párbeszédpanel megjelenik Ez nem kerüli meg a korhatárt, csak automatikusan elfogadja. + + TV-bejelentkezési előugró ablak letiltása + A TV-bejelentkezési előugró ablak le van tiltva + A TV-bejelentkezési előugró ablak engedélyezve van + Dupla koppintásos fejezetátugrás letiltása A dupla koppintás soha nem indíthatja el a következő/előző fejezetre való ugrást @@ -563,7 +568,7 @@ A hangerő a képernyő jobb oldalán függőlegesen húzva állítható be"A hirdetésleállítás gomb rejtett A hirdetésleállítás gomb látható + This button usually only shows on live streams. --> Bejelentés elrejtése A bejelentés gomb el van rejtve A bejelentés gomb látható @@ -575,12 +580,21 @@ A hangerő a képernyő jobb oldalán függőlegesen húzva állítható be"Letöltés elrejtése A letöltés gomb el van rejtve A letöltés gomb látható + + Aktivitás elrejtése + A Hype gomb rejtett + A hype gomb látható + + Promóció elrejtése + A promóció gomb el van rejtve + A promóció gomb látható Köszönet elrejtése A köszönet gomb el van rejtve A köszönet gomb látható + This button only shows if the user ip is from specific region such as the USA or EU. --> Ask elrejtése Az Ask gomb el van rejtve Az Ask gomb látható @@ -693,6 +707,9 @@ Az audiosáv menü megjelenítéséhez módosítsa a \"Videófolyamok hamisítá \"Megtekintés VR-módban\" elrejtése A megtekintés VR-módban menü el van rejtve A „Megtekintés VR-módban” menü megjelenik + Videóminőség menü elrejtése + A videóminőség menü elrejtve + A videóminőség menü megjelenítve A videóminőség menü láblécének elrejtése A videóminőség menü lábléce el van rejtve Megjelenik a videóminőség menü lábléce @@ -1462,7 +1479,7 @@ Ez a beállítás lehetővé teszi a magasabb videóminőségek feloldását"A gomb látható. Tartsa lenyomva a lejátszási sebesség alapértelmezettre állításához A gomb nem látható - + Videóminőség gomb megjelenítése A gomb látható. Tartsa lenyomva a minőséget az alapértelmezettre visszaállításához A gomb nem látható 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 fa43eddd7..5b2451886 100644 --- a/patches/src/main/resources/addresources/values-hy-rAM/strings.xml +++ b/patches/src/main/resources/addresources/values-hy-rAM/strings.xml @@ -452,6 +452,11 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել Զրույցը կցուցադրվի Սա չի խուսափում տարիքային սահմանափակումից։ Այն պարզապես ավտոմատ կերպով ընդունում է այն։ + + Անջատել հեռուստացույց մուտքի պատուհանը + Հեռուստացույց մուտքի պատուհանն անջատված է + Հեռուստացույց մուտքի պատուհանը միացված է + Անջատել կրկնակի հպումով գլուխը բաց թողնելը Կրկնակի հպումը երբեք չի կարող առաջացնել հաջորդ/նախորդ գլուխն անցնելը @@ -563,7 +568,7 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել Գովազդները դադարեցնելու կոճակը թաքցված է Գովազդները դադարեցնելու կոճակը ցուցադրված է + This button usually only shows on live streams. --> Թաքցնել Report Report կոճակը թաքցված է Report կոճակը ցուցադրվում է @@ -575,12 +580,21 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել Թաքցնել Download Download կոճակը թաքցված է Download կոճակը ցուցադրվում է + + Թաքցնել Հայփը + Հայփ կոճակը թաքնված է + Հայփ կոճակը ցուցադրվում է + + Թաքցնել Գովազդը + Խթանել կոճակը թաքնված է + Խթանել կոճակը ցուցադրված է Թաքցնել Thanks Thanks կոճակը թաքցված է Thanks կոճակը ցուցադրվում է + This button only shows if the user ip is from specific region such as the USA or EU. --> Թաքցնել հարցումը Հարցման կոճակը թաքցված է Հարցման կոճակը երևում է @@ -693,6 +707,9 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել Դիտել VR-ով թաքցնել VR-ով դիտել մենյուը թաքցված է VR-ով դիտել մենյուը երևում է + Թաքցնել տեսանյութի որակի ընտրացանկը + Տեսանյութի որակի ընտրացանկը թաքնված է + Տեսանյութի որակի ընտրացանկը ցուցադրված է Տեսանյութի որակի մենյուի ստորագրությունը թաքցնել Տեսանյութի որակի մենյուի ստորագրությունը թաքցված է Տեսանյութի որակի մենյուի ստորագրությունը երևում է @@ -1466,7 +1483,7 @@ Mini-player-ը կարող է գրավվել էկրանից դուրս՝ դեպի Կոճակը ցուցադրվում է: Հպեք և պահեք՝ նվագարկման արագությունը լռելյայնի վերականգնելու համար Կոճակը չի ցուցադրվում - + Ցուցադրել տեսանյութի որակի կոճակը Կոճակը ցուցադրված է։ Հպեք և պահեք՝ որակը լռելյայնին վերականգնելու համար Կոճակը ցուցադրված չէ։ 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 5f873731c..334c98887 100644 --- a/patches/src/main/resources/addresources/values-in-rID/strings.xml +++ b/patches/src/main/resources/addresources/values-in-rID/strings.xml @@ -452,6 +452,11 @@ Fitur ini hanya tersedia untuk perangkat yang lebih lama" Dialog akan ditampilkan Ini tidak mengabaikan batasan usia. Ini hanya menerimanya secara otomatis. + + Nonaktifkan pop-up Masuk ke TV + Pop-up Masuk ke TV dinonaktifkan + Pop-up Masuk ke TV diaktifkan + Nonaktifkan lewati bab dengan ketuk dua kali Ketuk dua kali tidak akan pernah memicu lewati ke bab berikutnya/sebelumnya @@ -563,7 +568,7 @@ Menyesuaikan volume dengan mengusap secara vertikal di sisi kanan layar"Tombol hentikan iklan disembunyikan Tombol hentikan iklan ditampilkan + This button usually only shows on live streams. --> Sembunyikan Laporkan Tombol laporkan disembunyikan Tombol laporkan ditampilkan @@ -575,12 +580,21 @@ Menyesuaikan volume dengan mengusap secara vertikal di sisi kanan layar"Sembunyikan Unduhan Tombol unduh disembunyikan Tombol unduh ditampilkan + + Sembunyikan Hype + Tombol Hype disembunyikan + Tombol Hype ditampilkan + + Sembunyikan Promosi + Tombol Promosi disembunyikan + Tombol Promosi ditampilkan Sembunyikan Terima kasih Tombol terima kasih disembunyikan Tombol terima kasih ditampilkan + This button only shows if the user ip is from specific region such as the USA or EU. --> Sembunyikan Tanya Tombol Tanya disembunyikan Tombol Tanya ditampilkan @@ -693,6 +707,9 @@ Untuk menampilkan menu trek Audio, ubah 'Spoof aliran video' ke iOS TV" Sembunyikan Tonton di VR Menu tonton di VR disembunyikan Menu tonton di VR ditampilkan + Sembunyikan menu kualitas video + Menu kualitas video disembunyikan + Menu kualitas video ditampilkan Sembunyikan footer menu kualitas video Footer menu kualitas video disembunyikan Footer menu kualitas video ditampilkan @@ -1464,7 +1481,7 @@ Mengaktifkan ini dapat membuka kualitas video yang lebih tinggi" Tombol ditampilkan. Ketuk dan tahan untuk mengatur ulang kecepatan pemutaran ke bawaan Tombol tidak ditampilkan - + Tampilkan tombol kualitas video Tombol ditampilkan. Ketuk dan tahan untuk mengatur ulang kualitas ke bawaan Tombol tidak ditampilkan 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 b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-is-rIS/strings.xml +++ b/patches/src/main/resources/addresources/values-is-rIS/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-it-rIT/strings.xml b/patches/src/main/resources/addresources/values-it-rIT/strings.xml index acea8edd9..987d16c24 100644 --- a/patches/src/main/resources/addresources/values-it-rIT/strings.xml +++ b/patches/src/main/resources/addresources/values-it-rIT/strings.xml @@ -452,6 +452,11 @@ Questa funzione è disponibile solo per i dispositivi più vecchi" La finestra di dialogo verrà mostrata Questo non aggira la restrizione di età. Lo accetta solo automaticamente. + + Disabilita il popup \"Accedi alla TV\" + Il popup \"Accedi alla TV\" è disabilitato + Il popup \"Accedi alla TV\" è abilitato + Disabilita salto capitolo con doppio tocco Il doppio tocco non può mai attivare il salto al capitolo successivo/precedente @@ -563,7 +568,7 @@ Regola il volume scorrendo verticalmente sul lato destro dello schermo" Il pulsante per interrompere gli annunci è nascosto Il pulsante per interrompere gli annunci è mostrato + This button usually only shows on live streams. --> Nascondi Segnala Il pulsante Segnala è nascosto Il pulsante Segnala è visibile @@ -575,12 +580,21 @@ Regola il volume scorrendo verticalmente sul lato destro dello schermo" Nascondi Scarica Il pulsante Scarica è nascosto Il pulsante Scarica è visibile + + Nascondi Hype + Il pulsante Hype è nascosto + Pulsante Hype è mostrato + + Nascondi Promuovi + Il pulsante Promuovi è nascosto + Il pulsante Promuovi è mostrato Nascondi Grazie Grazie pulsante è nascosto Il pulsante Grazie è visibile + This button only shows if the user ip is from specific region such as the USA or EU. --> Nascondi richiesta Il pulsante Richiedi è nascosto Il pulsante Richiedi è visibile @@ -693,6 +707,9 @@ Per mostrare il menu della traccia audio, cambia \"Spoof video streams\" in iOS Nascondi Guarda in VR Il menu Guarda in VR è nascosto Il menu Guarda in VR è visibile + Nascondi menu qualità video + Il menu della qualità video è nascosto + Il menu della qualità video è visualizzato Nascondi piè di pagina del menu qualità video Il piè di pagina del menu di qualità video è nascosto Il piè di pagina del menu di qualità video è visibile @@ -1464,7 +1481,7 @@ Abilitare questa opzione può sbloccare qualità video più elevate" Il pulsante è visualizzato. Tieni premuto per ripristinare la velocità di riproduzione predefinita Il pulsante non è visibile - + Mostra il pulsante qualità video Il pulsante è visualizzato. Tocca e tieni premuto per ripristinare la qualità predefinita Il pulsante non è visibile. 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 dffb5d340..f05fcf947 100644 --- a/patches/src/main/resources/addresources/values-iw-rIL/strings.xml +++ b/patches/src/main/resources/addresources/values-iw-rIL/strings.xml @@ -452,6 +452,11 @@ Second \"item\" text" דו-שיח יוצג זה לא עוקף את מגבלת הגיל. זה רק מסכים לזה באופן אוטומטי. + + השבתת חלון קופץ של כניסה לטלוויזיה + חלון קופץ של כניסה לטלוויזיה מושבת + חלון קופץ של כניסה לטלוויזיה מופעל + ביטול דילוג פרקים בלחיצה כפולה לחיצה כפולה לעולם לא תפעיל דילוג לפרק הבא/הקודם @@ -563,7 +568,7 @@ Second \"item\" text" כפתור עצירת הפרסומות מוסתר כפתור עצירת הפרסומות מוצג + This button usually only shows on live streams. --> הסתר דיווח לחצן דיווח מוסתר לחצן דיווח מוצג @@ -575,12 +580,21 @@ Second \"item\" text" הסתר הורדה לחצן הורדה מוסתר לחצן הורדה מוצג + + הסתר הייפ + כפתור הייפ מוסתר + כפתור ההייפ מוצג + + הסתר קידום + כפתור קידום מוסתר + כפתור קידום מוצג הסתר תודה לחצן תודה מוסתר לחצן תודה מוצג + This button only shows if the user ip is from specific region such as the USA or EU. --> הסתר Ask לחצן Ask מוסתר לחצן Ask מוצג @@ -693,6 +707,9 @@ Second \"item\" text" הסתר \'צפה ב-VR\' תפריט \'צפה ב-VR\' מוסתר תפריט \'צפה ב-VR\' מוצג + הסתר תפריט איכות וידאו + תפריט איכות הסרטון מוסתר + תפריט איכות הסרטון מוצג הסתר כותרת תחתונה של תפריט איכות סרטון כותרת תחתונה של תפריט איכות סרטון מוסתרת כותרת תחתונה של תפריט איכות סרטון מוצגת @@ -1467,7 +1484,7 @@ Second \"item\" text" הלחצן מוצג. יש להקיש ולהחזיק כדי לאפס את מהירות ההפעלה לברירת מחדל הלחצן אינו מוצג - + הצג כפתור איכות וידאו הלחצן מוצג. גע והחזק כדי לאפס את האיכות לברירת מחדל הלחצן אינו מוצג 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 d6ba2831a..23d203e21 100644 --- a/patches/src/main/resources/addresources/values-ja-rJP/strings.xml +++ b/patches/src/main/resources/addresources/values-ja-rJP/strings.xml @@ -107,8 +107,8 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に ショートのバックグラウンド再生を無効化 - ショートのバックグラウンド再生は無効です - ショートのバックグラウンド再生は有効です + ショート動画のバックグラウンド再生は無効です + ショート動画のバックグラウンド再生は有効です デバッグ @@ -258,7 +258,7 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 質問セクションを非表示 質問セクションは表示されません 質問セクションは表示されます - 関連情報を非表示 + 付随情報を非表示 注目の場所 / ゲーム / 音楽 / 言及されている人物セクションは表示されません 注目の場所 / ゲーム / 音楽 / 言及されている人物セクションは表示されます チャプター セクションを非表示 @@ -270,9 +270,9 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 「ポッドキャストを検索」を非表示 「ポッドキャストを検索」セクションは表示されません 「ポッドキャストを検索」セクションは表示されます - チャンネル情報を非表示 - チャンネル情報セクションは表示されません - チャンネル情報セクションは表示されます + 情報カード セクションを非表示 + 情報カード セクションは表示されません + 情報カード セクションは表示されます 「主な概念」を非表示 主な概念セクションは表示されません 主な概念セクションが表示されます @@ -301,9 +301,9 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 「おすすめ」欄を非表示 「おすすめ」欄は表示されません 「おすすめ」欄は表示されます - リンク集のプレビューを非表示 - リンク集のプレビューは表示されません - リンク集のプレビューは表示されます + リンクのプレビューを非表示 + リンクのプレビューは表示されません + リンクのプレビューは表示されます メンバー欄を非表示 メンバー欄は表示されません メンバー欄は表示されます @@ -316,7 +316,7 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 「ストアに移動」ボタンは表示されません 「ストアに移動」ボタンは表示されます コメント - コメント セクションの設定 + コメント セクションのコンポーネントを表示または非表示にします AI による「チャットの要約」を非表示 AI による「チャットの要約」は表示されません AI による「チャットの要約」は表示されます @@ -347,30 +347,30 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に タイムスタンプ ボタンを非表示 タイムスタンプ ボタンは表示されません タイムスタンプ ボタンは表示されます - カスタムフィルタ - カスタムフィルタを使用してコンポーネントを非表示にします - カスタムフィルタを有効化 - カスタムフィルタは有効です - カスタムフィルタは無効です - カスタムフィルタ + カスタム フィルタ + カスタム フィルタを使用してコンポーネントを非表示にします + カスタム フィルタを有効化 + カスタム フィルタは有効です + カスタム フィルタは無効です + カスタム フィルタ - 非表示にしたい component の path builder string を改行区切りで入力します - 無効なカスタムフィルタ: %s - キーワード フィルタ - キーワードフィルタを使用してフィード、検索結果に表示される動画を非表示にします + 非表示にするコンポーネントの path builder string のリスト (改行区切り) + 無効なカスタム フィルタ: %s + キーワードでコンテンツを非表示 + キーワード フィルタを使用してフィード、検索結果に表示される動画を非表示にします ホームの動画をキーワードで非表示 - ホームタブの動画は、キーワードでフィルタリングされます - ホームタブの動画は、キーワードでフィルタリングされません + ホームタブの動画はキーワードでフィルタリングされます + ホームタブの動画はキーワードでフィルタリングされません 検索結果をキーワードで非表示 - 検索結果は、キーワードでフィルタリングされます - 検索結果は、キーワードでフィルタリングされません + 検索結果はキーワードでフィルタリングされます + 検索結果はキーワードでフィルタリングされません 登録チャンネルの動画をキーワードで非表示 - 登録チャンネルタブの動画は、キーワードでフィルタリングされます - 登録チャンネルタブの動画は、キーワードでフィルタリングされません + 登録チャンネルタブの動画はキーワードでフィルタリングされます + 登録チャンネルタブの動画はキーワードでフィルタリングされません キーワード - "キーワードとなる単語やフレーズを改行区切りで入力します + "キーワードとなる単語やフレーズのリスト (改行区切り) 動画のタイトルまたはチャンネル名にキーワードが含まれる動画が非表示の対象になります @@ -379,7 +379,7 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に "ホーム / 登録チャンネル / 検索結果でキーワードに合致する動画を非表示にします 制限事項 -• ショート動画はチャンネル名で除外されない +• ショート動画はチャンネル名で非表示にできない • 一部の UI コンポーネントが残ってしまう場合がある • キーワードを検索したとき、結果が表示されない場合がある" 単語全体で合致 @@ -441,12 +441,12 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に URL をクリップボードにコピーしました タイムスタンプ付きの URL がコピーされました - 「動画の URL をコピー」ボタンを表示する - ボタンはオーバーレイに表示されます。タップすると動画の URL を、長押しするとタイムスタンプ付きの URL をそれぞれコピーできます - ボタンはオーバーレイに表示されません - 「動画のタイムスタンプ付き URL をコピー」ボタンを表示する - ボタンはオーバーレイに表示されます。タップするとタイムスタンプ付きの URL を、長押しするとタイムスタンプなしの URL をそれぞれコピーできます - ボタンはオーバーレイに表示されません + 「動画の URL をコピー」ボタンを表示 + ボタンがプレーヤー オーバーレイに表示されます。タップすると動画の URL が、長押しするとタイムスタンプ付きの URL がそれぞれコピーされます + ボタンはプレーヤー オーバーレイに表示されません + 「動画のタイムスタンプ付き URL をコピー」ボタンを表示 + ボタンがプレーヤー オーバーレイに表示されます。タップするとタイムスタンプ付きの URL が、長押しするとタイムスタンプなしの URL がそれぞれコピーされます + ボタンはプレーヤー オーバーレイに表示されません 「ご自身の責任」ダイアログを削除 @@ -454,6 +454,11 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に ダイアログは表示されます この機能によって年齢制限が回避される訳ではありません。自動的に承認するだけです。 + + 「テレビでログイン」ポップアップを無効化 + 「テレビでログイン」ポップアップは無効です + 「テレビでログイン」ポップアップは有効です + ダブルタップ時のチャプター スキップを無効化 ダブルタップしたときに、次または前のチャプターへスキップしてしまうことはありません @@ -462,11 +467,11 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 外部ダウンロード 外部ダウンローダーの設定 - 外部ダウンロード ボタンを表示する - 外部ダウンロード ボタンはオーバーレイに表示されます - 外部ダウンロード ボタンはオーバーレイに表示されません + 外部ダウンロード ボタンを表示 + 外部ダウンロード ボタンがプレーヤー オーバーレイに表示されます + 外部ダウンロード ボタンはプレーヤー オーバーレイに表示されません - オフライン ボタンの動作を上書きする + オフライン ボタンの動作を上書き オフライン ボタンは外部ダウンローダーを呼び出します オフライン ボタンはアプリ内のダウンローダーを呼び出します 外部ダウンローダーのパッケージ名 @@ -544,13 +549,13 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 自動字幕表示を無効化 - 動画を開いた際の自動字幕表示は無効です - 動画を開いた際の自動字幕表示は有効です + 自動字幕表示は無効です\n\n動画を開いた際にデフォルトで字幕は表示されません + 自動字幕表示は有効です\n\n動画を開いた際にデフォルトで字幕が表示される場合があります アクション ボタン - プレーヤー画面下のボタンの設定 - 高評価とチャンネル登録のエフェクトを無効にする + プレーヤー画面下のボタンを表示または非表示にします + 高評価とチャンネル登録のエフェクトを無効化 高評価ボタンとチャンネル登録ボタンのエフェクトは無効です 高評価ボタンとチャンネル登録ボタンのエフェクトは有効です 高評価ボタンと低評価ボタンを非表示 @@ -565,7 +570,7 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 「広告を停止」ボタンは表示されません 「広告を停止」ボタンは表示されます + This button usually only shows on live streams. --> 報告ボタンを非表示 報告ボタンは表示されません 報告ボタンは表示されます @@ -577,12 +582,21 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に オフライン ボタンを非表示 オフライン ボタンは表示されません オフライン ボタンは表示されます + + ハイプボタンを非表示 + ハイプボタンは表示されません + ハイプボタンは表示されます + + プロモート ボタンを非表示 + プロモート ボタンは表示されません + プロモート ボタンは表示されます Thanks ボタンを非表示 Thanks ボタンは表示されません Thanks ボタンは表示されます + This button only shows if the user ip is from specific region such as the USA or EU. --> 質問ボタンを非表示 質問ボタンは表示されません 質問ボタンは表示されます @@ -619,17 +633,17 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 通知ボタンは表示されます 「作成」と「通知」を入れ替え - "作成ボタンと通知ボタンを入れ替えます + "作成ボタンと通知ボタンが入れ替わります 注: これにより、動画広告も強制的に非表示になります" - 作成ボタンと通知ボタンを入れ替えます\n\n注: これにより、動画広告も強制的に非表示になります + 作成ボタンと通知ボタンは入れ替わりません "この設定を無効にすると、ショート動画の広告ブロックも無効になります。 この設定を変更しても効果がない場合は、シークレット モードに切り替えてみてください。" ボタンをアイコンのみで表示 ナビゲーション ボタンはアイコンのみで表示されます ナビゲーション ボタンはアイコンと文字で表示されます - ステータスバーの半透明化を無効にする + ステータスバーの半透明化を無効化 ステータスバーは常に透けません ステータスバーは状況に応じて透けます 一部のデバイスでは、この機能を有効にすると、システムのナビゲーション バーが半透明になりアプリ内のコンポーネントに重なってしまう可能性があります。 @@ -642,7 +656,7 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に フライアウト メニュー - オーバーレイ上の歯車アイコンから表示されるメニューの設定 + プレーヤー オーバーレイの歯車ボタンから呼び出されるフライアウト メニューの項目を表示または非表示にします 「字幕」を非表示 「字幕」は表示されません @@ -695,35 +709,38 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 「VR で見る」を非表示 「VR で見る」は表示されません 「VR で見る」は表示されます - 画質設定メニューの脚注を非表示 - 画質設定メニューの脚注は表示されません - 画質設定メニューの脚注は表示されます + 「画質」を非表示 + 「画質」は表示されません + 「画質」は表示されます + 画質メニューの脚注を非表示 + 画質メニューの脚注は表示されません + 画質メニューの脚注は表示されます 自動再生ボタンを非表示 - 自動再生ボタンはオーバーレイに表示されません - 自動再生ボタンはオーバーレイに表示されます + プレーヤー オーバーレイの自動再生ボタンは表示されません + プレーヤー オーバーレイの自動再生ボタンは表示されます 字幕ボタンを非表示 - 字幕ボタンはオーバーレイに表示されません - 字幕ボタンはオーバーレイに表示されます + プレーヤー オーバーレイの字幕ボタンは表示されません + プレーヤー オーバーレイの字幕ボタンは表示されます キャストボタンを非表示 - キャストボタンはオーバーレイに表示されません - キャストボタンはオーバーレイに表示されます - プレーヤーのコントロールの背景を非表示 - プレーヤーのコントロールの背景は表示されません - プレーヤーのコントロールの背景は表示されます + プレーヤー オーバーレイのキャストボタンは表示されません + プレーヤー オーバーレイのキャストボタンは表示されます + プレーヤー コントロールの背景を非表示 + プレーヤー コントロールの背景は表示されません + プレーヤー コントロールの背景は表示されます 前の動画ボタンと次の動画ボタンを非表示 前の動画ボタンと次の動画ボタンは表示されません 前の動画ボタンと次の動画ボタンは表示されます - 動画の終了画面を非表示 - 動画の終了画面は表示されません - 動画の終了画面は表示されます + 終了画面カードを非表示 + 終了画面カードは表示されません + 終了画面カードは表示されます - 全画面表示中のアンビエント モードを無効にする + 全画面表示中のアンビエント モードを無効化 全画面表示中のアンビエント モードは無効です 全画面表示中のアンビエント モードは有効です @@ -733,9 +750,9 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 情報カードはプレーヤー画面に表示されます - 数字のアニメーションを無効にする - 数字のアニメーションは無効です - 数字のアニメーションは有効です + 数字の回転アニメーションを無効化 + 数字の回転アニメーションは無効です + 数字の回転アニメーションは有効です 動画プレーヤーのシークバーを非表示 @@ -747,20 +764,20 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に フィードや再生履歴などの動画のサムネイルのシークバーは表示されます - ショート動画プレーヤー + ショート プレーヤー ショート プレーヤーのコンポーネントを表示または非表示にします ホームフィードでショートを非表示 - ホームフィードおよび関連動画にショートは表示されません - ホームフィードおよび関連動画にショートが表示されます - 検索結果でショート動画を非表示 + ホームフィードおよび関連動画にショート動画は表示されません + ホームフィードおよび関連動画にショート動画が表示されます + 検索結果でショートを非表示 検索結果にショート動画は表示されません 検索結果にショート動画が表示されます 登録チャンネル フィードでショートを非表示 - 登録チャンネル フィードにショートは表示されません - 登録チャンネル フィードにショートが表示されます - 再生履歴でショート動画を非表示 + 登録チャンネル フィードにショート動画は表示されません + 登録チャンネル フィードにショート動画が表示されます + 再生履歴でショートを非表示 再生履歴にショート動画は表示されません 再生履歴にショート動画が表示されます 「Super Thanks を購入する」ボタンを非表示 @@ -769,9 +786,9 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 効果ボタンを非表示 効果ボタンは表示されません 効果ボタンは表示されます - グリーンスクリーン ボタンを非表示 - グリーンスクリーン ボタンは表示されません - グリーンスクリーン ボタンは表示されます + グリーン スクリーン ボタンを非表示 + グリーン スクリーン ボタンは表示されません + グリーン スクリーン ボタンは表示されます ハッシュタグ ボタンを非表示 ハッシュタグ ボタンは表示されません ハッシュタグ ボタンは表示されます @@ -785,18 +802,18 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 「新しい投稿」ボタンを非表示 「新しい投稿」ボタンは表示されません 「新しい投稿」ボタンは表示されます - 一時停止中のオーバーレイ上のボタンを非表示 - 一時停止中のオーバーレイ上のボタンは表示されません - 一時停止中のオーバーレイ上のボタンは表示されます + 一時停止オーバーレイのボタンを非表示 + 一時停止オーバーレイのボタンは表示されません + 一時停止オーバーレイのボタンは表示されます コメントのプレビューを非表示 コメントのプレビューは表示されません コメントのプレビューは表示されます 「音楽を保存」ボタンを非表示 「音楽を保存」ボタンは表示されません 「音楽を保存」ボタンは表示されます - 検索候補ボタンを非表示 - 検索候補ボタンは表示されません - 検索候補ボタンは表示されます + 検索候補を非表示 + 検索候補は表示されません + 検索候補は表示されます ショップ ボタンを非表示 ショップ ボタンは表示されません ショップ ボタンは表示されます @@ -827,9 +844,9 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 低評価ボタンを非表示 低評価ボタンは表示されません 低評価ボタンは表示されます - コメント ボタンを非表示 - コメント ボタンは表示されません - コメント ボタンは表示されます + コメントボタンを非表示 + コメントボタンは表示されません + コメントボタンは表示されます 共有ボタンを非表示 共有ボタンは表示されません @@ -838,9 +855,9 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に リミックス ボタンを非表示 リミックス ボタンは表示されません リミックス ボタンは表示されます - サウンド ボタンを非表示 - サウンド ボタンは表示されません - サウンド ボタンは表示されます + サウンドボタンを非表示 + サウンドボタンは表示されません + サウンドボタンは表示されます 情報パネルを非表示 情報パネルは表示されません 情報パネルは表示されます @@ -861,12 +878,12 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に ナビゲーション バーは表示されます - 再生終了時の「関連動画」オーバーレイを非表示 - "再生終了時に、「関連動画」オーバーレイはプレーヤー画面に表示されませんが、自動再生がオンの場合は次の動画が自動で再生されます + 再生終了時の「関連動画」を非表示 + "再生が終了したときに、「関連動画」はプレーヤー画面に表示されませんが、自動再生がオンの場合は次の動画が自動で再生されます 自動再生の設定は YouTube の設定で変更できます: 設定 → 再生 → 次の動画を自動再生" - 再生終了時に、「関連動画」オーバーレイがプレーヤー画面に表示されます + 再生が終了したときに「関連動画」がプレーヤー画面に表示されます 関連動画オーバーレイを非表示 @@ -880,11 +897,11 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に プレーヤー ポップアップ パネルを非表示 - 動画を開いた際のプレイリストやチャット欄などのプレーヤー ポップアップ パネルは表示されません - 動画を開いた際のプレイリストやチャット欄などのプレーヤー ポップアップ パネルは表示されます + プレーヤー ポップアップ パネルは表示されません\n\nプレイリストやチャット欄などを閉じた状態で動画を開きます + プレーヤー ポップアップ パネルは表示されます\n\nプレイリストやチャット欄などを展開した状態で動画を開きます - 再生終了時に全画面表示を解除する + 再生終了時に全画面表示を解除 無効 縦画面 横画面 @@ -896,9 +913,9 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に 通常表示で動画を開きます - オーバーレイの透明度 + プレーヤー オーバーレイの透明度 透明度の範囲は 0-100 で、0 が透明です - 動画プレーヤー: 透明度の範囲は 0-100 です + プレーヤー: 透明度の範囲は 0-100 です @@ -1190,15 +1207,15 @@ Automotive レイアウト • フィードがトピックやチャンネルごとに分類された形で表示される" - アプリのバージョンを偽装する + アプリのバージョンを偽装 アプリのバージョンは偽装されています アプリのバージョンは偽装されていません "アプリのバージョンを YouTube の古いバージョンに偽装します。 アプリの外観と機能が変化しますが、予期せぬ副作用が発生する可能性があります。 -再び無効にする場合には、UI のバグを防ぐためにアプリデータを消去することをお勧めします。" - アプリバージョン +再び偽装を無効にする場合は、UI のバグを防ぐためにアプリデータを消去することをお勧めします。" + アプリバージョンの偽装先 19.35.36 - 古いショート プレーヤーのアイコンを復元 19.01.34 - 古いナビゲーション アイコンを復元 @@ -1229,29 +1246,29 @@ Automotive レイアウト 後で見る 自分のクリップ スタート画面の変更を常時適用 - "スタート画面の変更は、常時適用されます + "スタート画面の変更は常時適用されます 制限事項: ツールバーの [戻る] ボタンが機能しない可能性があります" - スタート画面の変更は、アプリ起動時にのみ適用されます + スタート画面の変更はアプリの起動時にのみ適用されます - ショート動画プレーヤーの再開を無効にする - ショート動画プレーヤーは、アプリ起動時に再開されます - ショート動画プレーヤーは、アプリの起動時に再開されません + ショート プレーヤーの再開を無効化 + アプリ起動時にショート プレーヤーは再開されません + アプリ起動時にショート プレーヤーが再開されます ショート動画を開くプレーヤー - ショート動画プレーヤー - 通常の動画プレーヤー - 通常の動画プレーヤー (全画面) + ショート プレーヤー + 通常のプレーヤー + 通常のプレーヤー (全画面) ショート動画の自動再生 ショート動画は自動再生されます ショート動画はループ再生されます ショート動画の自動再生(バックグラウンド) - ショート動画はバックグラウンドで自動再生されます - ショート動画はバックグラウンドでループ再生されます + バックグラウンドのショート動画は自動再生されます + バックグラウンドのショート動画はループ再生されます ミニプレーヤー @@ -1265,24 +1282,24 @@ Automotive レイアウト モダン 2 モダン 3 モダン 4 - 角を丸くする + 丸角を有効化 ミニプレーヤーの角は丸角です ミニプレーヤーの角は直角です - 「ダブルタップとピンチでサイズ変更」を有効にする + 「ダブルタップとピンチでサイズ変更」を有効化 "「ダブルタップとピンチでサイズ変更」は有効です • ダブルタップすると、ミニプレーヤーのサイズが大きくなる • もう一度ダブルタップすると、元のサイズに戻る" 「 ダブルタップとピンチでサイズ変更」は無効です - ドラッグ&ドロップを有効にする + ドラッグ&ドロップを有効化 "ドラッグ&ドロップは有効です ミニプレーヤーを画面の四隅に移動できます" ドラッグ&ドロップは無効です - 横方向ドラッグ ジェスチャーを有効にする + 横方向ドラッグ ジェスチャーを有効化 "横方向ドラッグ ジェスチャーは有効です -ミニプレーヤーを画面の左端または右端までドラッグすると最小化できます" +ミニプレーヤーを画面の左端または右端までドラッグすると最小化されます" 横方向ドラッグ ジェスチャーは無効です オーバーレイ ボタンを非表示 オーバーレイ ボタンは表示されません @@ -1301,7 +1318,7 @@ Automotive レイアウト ミニプレーヤー: 透明度の範囲は 0-100 です - グラデーションの読み込み画面を使用する + グラデーションの読み込み画面を有効化 画面読み込み時にグラデーションの背景が表示されます 画面読み込み時に通常の背景が表示されます スプラッシュ画面のスタイル @@ -1462,13 +1479,13 @@ Automotive レイアウト 再生速度設定ボタンを表示 - ボタンがオーバーレイに表示されます。長押しすると、再生速度がデフォルトの値にリセットされます - ボタンはオーバーレイに表示されません + ボタンがプレーヤー オーバーレイに表示されます。長押しすると、再生速度がデフォルトの値にリセットされます + ボタンはプレーヤー オーバーレイに表示されません - + 画質設定ボタンを表示 - ボタンがオーバーレイに表示されます。長押しすると、画質がデフォルトの値にリセットされます - ボタンはオーバーレイに表示されません + ボタンがプレーヤー オーバーレイに表示されます。長押しすると、画質がデフォルトの値にリセットされます + ボタンはプレーヤー オーバーレイに表示されません カスタム再生速度メニュー @@ -1502,7 +1519,7 @@ Automotive レイアウト 画質の詳細設定メニューを表示 - 画質メニューとして詳細設定メニューが表示されます + 詳細設定メニューが画質メニューとして表示されます 通常の画質メニューが表示されます 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 b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-ka-rGE/strings.xml +++ b/patches/src/main/resources/addresources/values-ka-rGE/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-kk-rKZ/strings.xml b/patches/src/main/resources/addresources/values-kk-rKZ/strings.xml index b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-kk-rKZ/strings.xml +++ b/patches/src/main/resources/addresources/values-kk-rKZ/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-km-rKH/strings.xml b/patches/src/main/resources/addresources/values-km-rKH/strings.xml index b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-km-rKH/strings.xml +++ b/patches/src/main/resources/addresources/values-km-rKH/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-kn-rIN/strings.xml b/patches/src/main/resources/addresources/values-kn-rIN/strings.xml index b02eb2746..b52af3207 100644 --- a/patches/src/main/resources/addresources/values-kn-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-kn-rIN/strings.xml @@ -82,6 +82,8 @@ Second \"item\" text" + + @@ -99,12 +101,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -237,7 +242,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-ko-rKR/strings.xml b/patches/src/main/resources/addresources/values-ko-rKR/strings.xml index b00e3ac5d..26e27fab7 100644 --- a/patches/src/main/resources/addresources/values-ko-rKR/strings.xml +++ b/patches/src/main/resources/addresources/values-ko-rKR/strings.xml @@ -81,7 +81,7 @@ Second \"item\" text" MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배터리 사용량에 부정적인 영향을 미치지 않습니다. -앱 배터리 최적화를 비활성화(제한 없음)하려면 '계속하기' 버튼을 누르세요." +앱 배터리 최적화를 비활성화(제한 없음)하려면 '계속하기' 버튼을 탭하세요." 계속하기 @@ -105,9 +105,9 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 설정 검색 기록을 표시하지 않습니다 - Shorts PIP 모드 비활성화하기 - Shorts PIP 모드를 비활성화합니다 - Shorts PIP 모드를 활성화합니다 + Shorts 백그라운드 재생 비활성화하기 + Shorts 백그라운드 재생을 비활성화합니다 + Shorts 백그라운드 재생을 활성화합니다\n\n알림: Shorts 백그라운드 재생은 PIP 모드를 통해서만 사용할 수 있습니다 디버깅 @@ -442,10 +442,10 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 URL을 클립보드에 복사하였습니다 타임스탬프가 표기된 URL을 클립보드에 복사하였습니다 동영상 URL 복사 버튼 표시하기 - 버튼을 표시합니다\n\n• 버튼을 눌러서 동영상 URL을 복사할 수 있습니다\n• 길게 누르면 타임스탬스가 표기된 동영상 URL이 복사됩니다 + 버튼을 표시합니다\n\n• 버튼을 탭하여 동영상 URL을 복사할 수 있습니다\n• 길게 탭하면 타임스탬스가 표기된 동영상 URL이 복사됩니다 버튼을 표시하지 않습니다 타임스탬프가 표기된 URL 복사 버튼 표시하기 - 버튼을 표시합니다\n\n• 버튼을 눌러서 타임스탬프가 표기된 동영상 URL을 복사할 수 있습니다\n• 길게 누르면 타임스탬프가 표기되지 않은 동영상 URL이 복사됩니다 + 버튼을 표시합니다\n\n• 버튼을 탭하여 타임스탬프가 표기된 동영상 URL을 복사할 수 있습니다\n• 길게 탭하면 타임스탬프가 표기되지 않은 동영상 URL이 복사됩니다 버튼을 표시하지 않습니다 @@ -454,10 +454,15 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 다음 동영상을 시청하기 전에 표시되는 시청 경고 다이얼로그를 삭제하지 않습니다:\n• 연령 제한 동영상\n• 자살 또는 자해와 관련된 동영상, etc. 이 설정은 다이얼로그를 자동으로 허용하기만 하며 연령 제한(성인인증 절차)을 우회할 수 없습니다. + + \'TV에 로그인\' 팝업 비활성화하기 + \'TV에 로그인\' 팝업을 비활성화합니다 + \'TV에 로그인\' 팝업을 활성화합니다 + - 두 번 눌러서 챕터 건너뛰기 비활성화하기 - 두 번 눌러서 다음/이전 챕터로 건너뛰기가 절대 트리거될 수 없습니다 - 두 번 눌러서 다음/이전 챕터로 건너뛰기가 가끔 트리거될 수 있습니다 + 두 번 탭하여 챕터 건너뛰기 비활성화하기 + 두 번 탭하여 다음/이전 챕터로 건너뛰기가 절대 트리거될 수 없습니다 + 두 번 탭하여 다음/이전 챕터로 건너뛰기가 가끔 트리거될 수 있습니다 외부 다운로드 @@ -497,9 +502,9 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 스와이프 제스처로 볼륨 조절 활성화하기 "전체 화면 오른쪽에서 위로/아래로 스와이프하여 볼륨 조절합니다" 전체 화면 오른쪽에서 위로/아래로 스와이프하여 볼륨 조절하지 않습니다 - 길게 눌러서 스와이프 제스처 사용하기 - 화면을 길게 눌러서 스와이프 제스처를 사용합니다 - 화면을 짧게 눌러서 스와이프 제스처를 사용합니다 + 길게 탭하여 스와이프 제스처 사용하기 + 화면을 길게 탭하여 스와이프 제스처를 사용합니다 + 화면을 짧게 탭하여 스와이프 제스처를 사용합니다 진동 피드백 활성화하기 진동 피드백을 활성화합니다 진동 피드백을 비활성화합니다 @@ -561,7 +566,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 광고 중지 버튼이 숨겨집니다 광고 중지 버튼이 표시됩니다 + This button usually only shows on live streams. --> 신고 버튼 숨기기 신고 버튼이 숨겨집니다 신고 버튼이 표시됩니다 @@ -573,12 +578,21 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 오프라인 저장 버튼 숨기기 오프라인 저장 버튼이 숨겨집니다 오프라인 저장 버튼이 표시됩니다 + + Hype 버튼 숨기기 + Hype 버튼이 숨겨집니다 + Hype 버튼이 표시됩니다 + + 프로모션 버튼 숨기기 + 프로모션 버튼이 숨겨집니다 + 프로모션 버튼이 표시됩니다 Thanks 버튼 숨기기 Thanks 버튼이 숨겨집니다 Thanks 버튼이 표시됩니다 + This button only shows if the user ip is from specific region such as the USA or EU. --> \'질문하기\' 버튼 숨기기 \'질문하기\' 버튼이 숨겨집니다 \'질문하기\' 버튼이 표시됩니다 @@ -692,6 +706,9 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 VR로 보기 메뉴 숨기기 VR로 보기 메뉴가 숨겨집니다 VR로 보기 메뉴가 표시됩니다 + 동영상 화질 메뉴 숨기기 + 동영상 화질 메뉴가 숨겨집니다 + 동영상 화질 메뉴가 표시됩니다 화질 설정 메뉴에서 하단 설명 숨기기 화질 설정 메뉴에서 하단 설명이 숨겨집니다 화질 설정 메뉴에서 하단 설명이 표시됩니다 @@ -928,7 +945,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 API 사용 불가 메시지 표시하기 ReturnYouTubeDislike를 사용할 수 없을 경우에 팝업 메시지를 표시합니다 ReturnYouTubeDislike를 사용할 수 없을 경우에 팝업 메시지를 표시하지 않습니다 - 싫어요 수의 데이터는 Return YouTube Dislike API에 의해 제공됩니다. 자세한 내용을 보려면 여기를 누르세요 + 싫어요 수의 데이터는 Return YouTube Dislike API에 의해 제공됩니다. 자세한 내용을 보려면 여기를 탭하세요 이 기기의 ReturnYouTubeDislike API 사용 통계 평균 API 응답 시간 @@ -987,7 +1004,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 건너뛰기 버튼 표시 시간 건너뛰기 및 하이라이트로 건너뛰기 버튼이 자동으로 숨겨지기 전까지 표시되는 시간을 설정할 수 있습니다 건너뛰기 취소 메시지 표시하기 - 구간을 자동으로 건너뛰는 경우에 팝업 메시지를 표시합니다\n\n팝업 메시지를 눌러서 건너뛰기를 취소할 수 있습니다 + 구간을 자동으로 건너뛰는 경우에 팝업 메시지를 표시합니다\n\n팝업 메시지를 탭하여 건너뛰기를 취소할 수 있습니다 팝업 메시지를 표시하지 않습니다 건너뛰기 취소 메시지 표시 시간 건너뛰기 취소 팝업 메시지가 표시되는 시간을 설정할 수 있습니다 @@ -1009,7 +1026,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 플레이어에서 구간 추가 버튼을 표시합니다 플레이어에서 구간 추가 버튼을 표시하지 않습니다 구간 추가 시 최소 슬라이더 단위 설정 - 새로운 구간 추가 시에 시간 앞으로 버튼 또는 뒤로 버튼을 눌렀을 때 이동하는 최소 시간으로, 단위는 밀리초입니다 + 새로운 구간 추가 시에 시간 앞으로 버튼 또는 뒤로 버튼을 탭하였을 때 이동하는 최소 시간으로, 단위는 밀리초입니다 값은 양수여야 합니다 가이드라인 보기 구간 제출 시의 주의사항에 대한 내용을 포함하고 있습니다 @@ -1143,7 +1160,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 이렇게 제출하시겠습니까?" 구간의 시작 또는 끝을 잘못 설정하였습니다 먼저 재생바에서 시작 지점과 끝 지점을 표시하세요 - 구간 미리 보기 버튼을 눌러서 설정한 구간이 정상적으로 건너뛰기가 되는지 확인하세요 + 구간 미리 보기 버튼을 탭하여 설정한 구간이 정상적으로 건너뛰기가 되는지 확인하세요 직접 시간 구간 편집하기 구간의 시작이나 끝을 편집하시겠습니까? 잘못된 시간 형식입니다 @@ -1153,16 +1170,16 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 불러오는 중 ... SponsorBlock을 비활성화하였습니다 사용자 이름: <b>%s</b> - 사용자 이름을 변경하려면 여기를 누르세요 + 사용자 이름을 변경하려면 여기를 탭하세요 사용자 이름을 변경할 수 없습니다. 상태 코드: %1$d %2$s 사용자 이름을 성공적으로 변경하였습니다 사용자의 평판: <b>%.2f</b> 제출 횟수: <b>%s</b> - 구간을 보려면 여기를 누르세요 + 구간을 보려면 여기를 탭하세요 SponsorBlock 리더보드 다른 분들이 <b>%s</b>개의 구간을 건너뛸 수 있게 해주셨습니다 - 글로벌 기록 또는 상위 기여자를 확인하려면 여기를 누르세요 - 이는 <b>%s</b>에 해당됩니다.<br>리더보드를 보려면 여기를 누르세요 + 글로벌 기록 또는 상위 기여자를 확인하려면 여기를 탭하세요 + 이는 <b>%s</b>에 해당됩니다.<br>리더보드를 보려면 여기를 탭하세요 구간 <b>%s</b>개를 건너뛰었습니다 이는 <b>%s</b>에 해당됩니다 건너뛴 횟수 기록을 초기화하시겠습니까? @@ -1172,11 +1189,11 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 불투명도: 색상: 정보 - 건너뛸 구간의 데이터는 SponsorBlock API에 의해 제공됩니다. 자세한 내용을 보려면 여기를 누르세요 + 건너뛸 구간의 데이터는 SponsorBlock API에 의해 제공됩니다. 자세한 내용을 보려면 여기를 탭하세요 레이아웃 폼 팩터 변경하기 - 기기 기본값 사용 + 기본값 태블릿 오토모티브 @@ -1195,7 +1212,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 앱 버전을 변경하지 않습니다 "앱 버전을 YouTube 이전 앱 버전으로 변경합니다. -이 경우 앱 레이아웃과 기능이 변경되지만 알려지지 않은 문제점이 발생할 수 있습니다. +이 경우 앱 레이아웃과 기능이 변경되지만 알려지지 않은 부작용이 발생할 수 있습니다. 나중에 이 설정을 비활성화하면 앱 레이아웃 버그를 방지하기 위해 앱 데이터를 지우는 것이 좋습니다." 변경할 앱 버전 @@ -1204,7 +1221,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 앱 시작 페이지 변경하기 - 홈 (기본값) + 기본값 모든 구독 채널 채널 둘러보기 학습 프로그램 @@ -1250,16 +1267,16 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 Shorts 자동재생 Shorts가 자동넘김됩니다 Shorts가 반복재생됩니다 - Shorts PIP 모드 자동넘김 - PIP 모드에서 Shorts가 자동넘김됩니다 - PIP 모드에서 Shorts가 반복재생됩니다 + Shorts 백그라운드 재생 자동넘김 + Shorts 백그라운드 재생이 자동넘김됩니다 + Shorts 백그라운드 재생이 반복재생됩니다 미니 플레이어 앱 내에서 최소화된 플레이어의 스타일을 변경할 수 있습니다 미니 플레이어 유형 사용 안함 - 기기 기본값 사용 + 기본값 최소화 태블릿 모던 스타일 1 @@ -1269,12 +1286,12 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 둥근 모서리 활성화하기 모서리를 둥글게 활성화합니다 모서리를 각지게 활성화합니다 - \'두 번 누르기\' 및 \'핀치하여 크기 조정\' 활성화하기 - "'두 번 누르기 동작' 및 '핀치하여 크기 조정'을 활성화합니다 + \'두 번 탭하기\' 및 \'핀치하여 크기 조정\' 활성화하기 + "'두 번 탭하기 동작' 및 '핀치하여 크기 조정'을 활성화합니다 -• 두 번 눌러서 미니 플레이어 크기를 늘릴 수 있습니다 -• 다시 두 번 누르면 원래 크기로 복원됩니다" - \'두 번 누르기 동작\' 및 \'핀치하여 크기 조정\'을 비활성화합니다 +• 두 번 탭하여 미니 플레이어 크기를 늘릴 수 있습니다 +• 다시 두 번 탭하면 원래 크기로 복원됩니다" + \'두 번 탭하기 동작\' 및 \'핀치하여 크기 조정\'을 비활성화합니다 드래그 & 드롭 활성화하기 "드래그 & 드롭을 활성화합니다 @@ -1354,7 +1371,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배 이 설정을 활성화하면 동영상 URL이 API 서버로 전송되며, 다른 데이터는 전송되지 않습니다. 동영상에 DeArrow 썸네일이 없는 경우에는 원본 썸네일 또는 스틸 컷 썸네일이 표시됩니다 -DeArrow에 대해 자세히 알아보려면 여기를 누르세요" +DeArrow에 대해 자세히 알아보려면 여기를 탭하세요" API 사용 불가 메시지 표시하기 DeArrow를 사용할 수 없을 경우에 팝업 메시지를 표시합니다 DeArrow를 사용할 수 없을 경우에 팝업 메시지를 표시하지 않습니다 @@ -1395,11 +1412,11 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요" 기기 크기 정보 변경하기 "기기 크기 정보를 변경합니다 -이 설정을 활성화하면 더 높은 화질 동영상 값을 잠금 해제할 수 있지만, 동영상 재생이 끊기거나 배터리 수명이 단축될 수 있으며, 알려지지 않은 문제점도 발생할 수 있습니다" +이 설정을 활성화하면 더 높은 화질 동영상 값을 잠금 해제할 수 있지만, 동영상 재생이 끊기거나 배터리 수명이 단축될 수 있으며, 알려지지 않은 부작용도 발생할 수 있습니다" "기기 크기 정보를 변경하지 않습니다 이 설정을 활성화하면 더 높은 화질 동영상 값을 잠금 해제할 수 있습니다" - 이 설정을 활성화하면 동영상 재생이 끊기거나 배터리 수명이 단축되고 알려지지 않은 문제점이 발생할 수 있습니다. + 이 설정을 활성화하면 동영상 재생이 끊기거나 배터리 수명이 단축되고 알려지지 않은 부작용이 발생할 수 있습니다. GmsCore 설정 @@ -1450,16 +1467,16 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요" 자동 동영상 화질 저장 활성화하기 - 동영상 화질 값이 변경될 때마다 기본 동영상 화질으로 저장합니다 - 동영상 화질 값이 변경될 때마다 기본 동영상 화질으로 저장하지 않습니다 + 동영상 화질 값을 변경할 때마다 기본 동영상 화질으로 저장합니다 + 동영상 화질 값을 변경할 때마다 기본 동영상 화질으로 저장하지 않습니다 동영상 화질 변경 메시지 표시하기 - 기본 동영상 화질 값이 변경될 때마다 팝업 메시지를 표시합니다 - 기본 동영상 화질 값이 변경될 때마다 팝업 메시지를 표시하지 않습니다 + 기본 동영상 화질 값을 변경할 때마다 팝업 메시지를 표시합니다 + 기본 동영상 화질 값을 변경할 때마다 팝업 메시지를 표시하지 않습니다 Wi-Fi 이용 시 기본 동영상 화질 모바일 네트워크 이용 시 기본 동영상 화질 Shorts 화질 저장 활성화하기 - Shorts 화질 값이 변경될 때마다 기본 Shorts 화질으로 저장합니다 - Shorts 화질 값이 변경될 때마다 기본 Shorts 화질으로 저장하지 않습니다 + Shorts 화질 값을 변경할 때마다 기본 Shorts 화질으로 저장합니다 + Shorts 화질 값을 변경할 때마다 기본 Shorts 화질으로 저장하지 않습니다 Wi-Fi 이용 시 기본 Shorts 화질 모바일 네트워크 이용 시 기본 Shorts 화질 모바일 네트워크 @@ -1469,12 +1486,12 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요" 동영상 재생 속도 다이얼로그 버튼 표시하기 - 버튼을 표시합니다\n\n• 버튼을 길게 누르면 동영상 재생 속도가 기본값으로 초기화됩니다 + 버튼을 표시합니다\n\n• 버튼을 길게 탭하면 동영상 재생 속도가 기본값으로 초기화됩니다 버튼을 표시하지 않습니다 - + 동영상 화질 버튼 표시하기 - 버튼을 표시합니다\n\n• 버튼을 길게 누르면 화질이 기본값으로 초기화됩니다 + 버튼을 표시합니다\n\n• 버튼을 길게 탭하면 화질이 기본값으로 초기화됩니다 버튼을 표시하지 않습니다 @@ -1489,16 +1506,16 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요" 재생 속도 값은 %s배속보다 작아야 합니다 잘못된 사용자 정의 재생 속도 값입니다 자동 - 사용자 정의 길게 눌러서 동영상 재생 속도 - 화면을 길게 누르는 동안에 변경되는 동영상 재생 속도를 0-8 사이에서 지정할 수 있습니다 + 사용자 정의 길게 탭하여 동영상 재생 속도 + 화면을 길게 탭하는 동안에 변경되는 동영상 재생 속도를 0-8 사이에서 지정할 수 있습니다 동영상 재생 속도 저장 활성화하기 - 동영상 재생 속도 값이 변경될 때마다 기본 동영상 재생 속도로 저장합니다 - 동영상 재생 속도 값이 변경될 때마다 기본 동영상 재생 속도로 저장하지 않습니다 + 동영상 재생 속도 값을 변경할 때마다 기본 동영상 재생 속도로 저장합니다 + 동영상 재생 속도 값을 변경할 때마다 기본 동영상 재생 속도로 저장하지 않습니다 동영상 재생 속도 변경 메시지 표시하기 - 기본 동영상 재생 속도 값이 변경될 때마다 팝업 메시지를 표시합니다 - 기본 동영상 재생 속도 값이 변경될 때마다 팝업 메시지를 표시하지 않습니다 + 기본 동영상 재생 속도 값을 변경할 때마다 팝업 메시지를 표시합니다 + 기본 동영상 재생 속도 값을 변경할 때마다 팝업 메시지를 표시하지 않습니다 기본 동영상 재생 속도 기본 동영상 재생 속도 값을 %s 로 변경하였습니다 @@ -1532,11 +1549,11 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요" "이 설정를 활성화하면 배터리 수명이 향상되고, 동영상 재생 끊김 문제가 해결될 수 있습니다. AVC의 최대 화질 값은 1080p이고, OPUS 코덱을 사용불가 및 HDR 동영상을 재생할 수 없으며, 동영상을 재생했을 경우에는 VP9 또는 AV1보다 더 많은 모바일 데이터를 사용되오니 주의하세요." - iOS 변경에 대한 알려진 문제점 + iOS 변경에 따른 부작용 "• 영화 또는 유료 동영상이 재생되지 않을 수 있습니다 • 안정적인 볼륨을 사용할 수 없습니다 • 동영상이 1초 일찍 종료될 수 있습니다" - Android 변경에 대한 알려진 문제점 + Android 변경에 따른 부작용 "• 오디오 트랙 메뉴가 표시되지 않습니다 • 안정적인 볼륨을 사용할 수 없습니다 • 원본 오디오 트랙를 강제로 활성화할 수 없습니다" 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 b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-ky-rKG/strings.xml +++ b/patches/src/main/resources/addresources/values-ky-rKG/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-lo-rLA/strings.xml b/patches/src/main/resources/addresources/values-lo-rLA/strings.xml index b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-lo-rLA/strings.xml +++ b/patches/src/main/resources/addresources/values-lo-rLA/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-lt-rLT/strings.xml b/patches/src/main/resources/addresources/values-lt-rLT/strings.xml index 20e2d8801..0f5168e48 100644 --- a/patches/src/main/resources/addresources/values-lt-rLT/strings.xml +++ b/patches/src/main/resources/addresources/values-lt-rLT/strings.xml @@ -452,6 +452,11 @@ Apribojimai Dialogas bus rodomas Tai neaplenkia amžiaus apribojimo. Jis tiesiog jį automatiškai priima. + + Išjungti prisijungimo prie TV iškylantįjį langą + Prisijungimo prie TV iškylantysis langas išjungtas + Prisijungimo prie TV iškylantysis langas įjungtas + Išjungti dvigubo bakstelėjimo skyriaus praleidimą Dvigubas bakstelėjimas niekada negali suaktyvinti praleidimo į kitą/ankstesnį skyrių @@ -563,7 +568,7 @@ Reguliuokite garsumą braukdami vertikaliai dešinėje ekrano pusėje" Skelbimų stabdymo mygtukas paslėptas Skelbimų stabdymo mygtukas rodomas + This button usually only shows on live streams. --> Slėpti Pranešti Pranešimo mygtukas paslėptas Pranešimo mygtukas rodomas @@ -575,12 +580,21 @@ Reguliuokite garsumą braukdami vertikaliai dešinėje ekrano pusėje" Slėpti Atsisiųsti Atsisiuntimo mygtukas paslėptas Atsisiuntimo mygtukas rodomas + + Slėpti Ažiotažą + „Hype“ mygtukas paslėptas + Haipo mygtukas rodomas + + Slėpti reklamą + Reklamos mygtukas paslėptas + Reklamos mygtukas rodomas Slėpti Ačiū Ačiū mygtukas paslėptas Ačiū mygtukas rodomas + This button only shows if the user ip is from specific region such as the USA or EU. --> Slėpti klausimą Klausimo mygtukas yra paslėptas Klausimo mygtukas rodomas @@ -691,6 +705,9 @@ Jei pakeitus šį nustatymą neįsigalioja, pabandykite perjungti į inkognito r Slėpti Žiūrėti VR Žiūrėti VR meniu yra paslėptas Žiūrėti VR meniu yra rodomas + Slėpti vaizdo kokybės meniu + Vaizdo kokybės meniu yra paslėptas + Vaizdo kokybės meniu yra rodomas Slėpti vaizdo kokybės meniu apatinę juostą Vaizdo kokybės meniu apatinė juosta yra paslėpta Vaizdo kokybės meniu apatinė juosta yra rodoma @@ -1464,7 +1481,7 @@ Gali būti atrakinta aukštesnės vaizdo įrašų kokybės, bet galite patirti v Mygtukas rodomas. Palieskite ir palaikykite, kad atkūrimo greitį nustatytumėte į numatytąjį. Mygtukas nerodomas - + Rodyti vaizdo kokybės mygtuką Mygtukas rodomas. Palaikykite nuspaudę, kad atstatytumėte kokybę į numatytąją Mygtukas nerodomas 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 a9189360f..9a282ec96 100644 --- a/patches/src/main/resources/addresources/values-lv-rLV/strings.xml +++ b/patches/src/main/resources/addresources/values-lv-rLV/strings.xml @@ -452,6 +452,11 @@ Ierobežojumi Dialogs tiks rādīts Tas neapiet vecuma ierobežojumu. Tas vienkārši automātiski to pieņem. + + Atspējot uznirstošo paziņojumu Pierakstīties televizorā + Uznirstošais paziņojums Pierakstīties televizorā ir atspējots + Uznirstošais paziņojums Pierakstīties televizorā ir iespējots + Atspējot divkāršu pieskārienu nodaļas izlaišanai Divkāršs pieskāriens nekad nevar iedarbināt izlaišanu uz nākamo/iepriekšējo nodaļu @@ -563,7 +568,7 @@ Regulējiet skaļumu, velkot vertikāli ekrāna labajā pusē" Apturēt reklāmas poga ir paslēpta Apturēt reklāmas poga ir redzama + This button usually only shows on live streams. --> Paslēpt Ziņot Ziņot poga ir paslēpta Ziņot poga ir redzama @@ -575,12 +580,21 @@ Regulējiet skaļumu, velkot vertikāli ekrāna labajā pusē" Paslēpt Lejupielādēt Lejupielādēt poga ir paslēpta Lejupielādēt poga ir redzama + + Paslēpt ažiotāžu + Poga \ + Hype poga tiek rādīta + + Slēpt Reklamēt + Reklāmas poga ir paslēpta + Reklāmas poga ir redzama Paslēpt Paldies Paldies poga ir paslēpta Paldies poga ir redzama + This button only shows if the user ip is from specific region such as the USA or EU. --> Paslēpt jautājumu Jautājuma poga ir paslēpta Jautājuma poga ir redzama @@ -693,6 +707,9 @@ Lai parādītu audio celiņu izvēlni, mainiet \"Video straumju viltošana\" uz Paslēpt Skatīties VR Skatīties VR izvēlne ir paslēpta Skatīties VR izvēlne ir redzama + Paslēpt video kvalitātes izvēlni + Video kvalitātes izvēlne ir paslēpta + Video kvalitātes izvēlne ir redzama Paslēpt video kvalitātes izvēlnes apakšējo daļu Video kvalitātes izvēlnes apakšējā daļa ir paslēpta Video kvalitātes izvēlnes apakšējā daļa ir redzama @@ -1466,7 +1483,7 @@ Var tikt atbloķētas augstākas video kvalitātes, taču var rasties video atsk Poga ir redzama. Pieskarieties un turiet, lai atiestatītu atskaņošanas ātrumu uz noklusējuma Poga netiek rādīta - + Rādīt video kvalitātes pogu Poga tiek rādīta. Pieskarieties un turiet, lai atiestatītu kvalitāti uz noklusējuma Poga netiek rādīta 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 b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-mk-rMK/strings.xml +++ b/patches/src/main/resources/addresources/values-mk-rMK/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-ml-rIN/strings.xml b/patches/src/main/resources/addresources/values-ml-rIN/strings.xml index b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-ml-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-ml-rIN/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-mn-rMN/strings.xml b/patches/src/main/resources/addresources/values-mn-rMN/strings.xml index b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-mn-rMN/strings.xml +++ b/patches/src/main/resources/addresources/values-mn-rMN/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-mr-rIN/strings.xml b/patches/src/main/resources/addresources/values-mr-rIN/strings.xml index b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-mr-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-mr-rIN/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-ms-rMY/strings.xml b/patches/src/main/resources/addresources/values-ms-rMY/strings.xml index 8a05db94e..55ea888c7 100644 --- a/patches/src/main/resources/addresources/values-ms-rMY/strings.xml +++ b/patches/src/main/resources/addresources/values-ms-rMY/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -223,7 +228,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-my-rMM/strings.xml b/patches/src/main/resources/addresources/values-my-rMM/strings.xml index b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-my-rMM/strings.xml +++ b/patches/src/main/resources/addresources/values-my-rMM/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-nb-rNO/strings.xml b/patches/src/main/resources/addresources/values-nb-rNO/strings.xml index b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-nb-rNO/strings.xml +++ b/patches/src/main/resources/addresources/values-nb-rNO/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-ne-rIN/strings.xml b/patches/src/main/resources/addresources/values-ne-rIN/strings.xml index 8289dca4e..a4d92aec7 100644 --- a/patches/src/main/resources/addresources/values-ne-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-ne-rIN/strings.xml @@ -69,6 +69,8 @@ Second \"item\" text" + + @@ -86,12 +88,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -224,7 +229,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-nl-rNL/strings.xml b/patches/src/main/resources/addresources/values-nl-rNL/strings.xml index 43ddc32b8..bd265ead6 100644 --- a/patches/src/main/resources/addresources/values-nl-rNL/strings.xml +++ b/patches/src/main/resources/addresources/values-nl-rNL/strings.xml @@ -452,6 +452,11 @@ Deze functie is alleen beschikbaar voor oudere apparaten" Dialog wordt getoond Dit omzeilt de leeftijdsbeperking niet. Het accepteert het alleen automatisch. + + Pop-up \'Inloggen op tv\' uitschakelen + Pop-up \'Inloggen op tv\' is uitgeschakeld + Pop-up \'Inloggen op tv\' is ingeschakeld + Dubbeltik om hoofdstukken over te slaan uitschakelen Dubbeltikken kan nooit leiden tot het overslaan naar het volgende/vorige hoofdstuk. @@ -563,7 +568,7 @@ Pas het volume aan door verticaal over de rechterkant van het scherm te vegen"Knop \"Advertenties stoppen\" is verborgen Knop \"Advertenties stoppen\" is zichtbaar + This button usually only shows on live streams. --> Melden verbergen Melden is verborgen Melden wordt weergegeven @@ -575,12 +580,21 @@ Pas het volume aan door verticaal over de rechterkant van het scherm te vegen"Downloaden verbergen Downloaden knop is verborgen Downloaden knop wordt weergegeven + + Verberg Hype + Hype-knop is verborgen + Hype-knop is zichtbaar + + Promotie verbergen + Promootknop is verborgen + Promootknop is weergegeven Bedankt verbergen Bedankt-knop is verborgen Bedankt-knop wordt weergegeven + This button only shows if the user ip is from specific region such as the USA or EU. --> Vraag verbergen Knop \"Vraag\" is verborgen Knop \"Vraag\" wordt weergegeven @@ -693,6 +707,9 @@ Om het audiotrackmenu weer te geven, wijzigt u 'Videostreams vervalsen' in iOS T Verberg Bekijk in VR Menu Bekijk in VR is verborgen Menu Bekijk in VR wordt weergegeven + Videokwaliteitsmenu verbergen + Videokwaliteitsmenu is verborgen + Videokwaliteitsmenu is zichtbaar Verberg voettekst van video-kwaliteitsmenu Voettekst van video-kwaliteitsmenu is verborgen Voettekst van video-kwaliteitsmenu wordt weergegeven @@ -1463,7 +1480,7 @@ Het inschakelen hiervan kan hogere videokwaliteiten ontgrendelen" De knop wordt weergegeven. Tik en houd vast om de afspeelsnelheid terug te zetten naar de standaardwaarde Knop wordt niet weergegeven - + Toon videokwaliteitknop Knop wordt weergegeven. Tik en houd vast om de kwaliteit terug te zetten naar standaard Knop wordt niet weergegeven 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 b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-or-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-or-rIN/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-pa-rIN/strings.xml b/patches/src/main/resources/addresources/values-pa-rIN/strings.xml index b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-pa-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-pa-rIN/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-pl-rPL/strings.xml b/patches/src/main/resources/addresources/values-pl-rPL/strings.xml index 76e5de4ac..6c72ec9eb 100644 --- a/patches/src/main/resources/addresources/values-pl-rPL/strings.xml +++ b/patches/src/main/resources/addresources/values-pl-rPL/strings.xml @@ -448,6 +448,11 @@ Ta funkcja jest dostępna tylko dla starszych urządzeń" Okno dialogowe zostanie wyświetlone To nie pomija ograniczeń wiekowych i akceptuje je automatycznie. + + Wyłącz wyskakujące okienko Zaloguj się do telewizora + Wyskakujące okienko Zaloguj się do telewizora jest wyłączone + Wyskakujące okienko Zaloguj się do telewizora jest włączone + Wyłącz pomijanie rozdziałów dwukrotnym stuknięciem Dwukrotne stuknięcie nigdy nie spowoduje przejścia do następnego/poprzedniego rozdziału @@ -559,7 +564,7 @@ Dostosuj głośność, przesuwając pionowo po prawej stronie ekranu" Przycisk zatrzymania reklam jest ukryty Przycisk zatrzymania reklam jest widoczny + This button usually only shows on live streams. --> Przycisk od zgłaszania Przycisk zgłaszania jest ukryty Przycisk zgłaszania jest widoczny @@ -571,12 +576,21 @@ Dostosuj głośność, przesuwając pionowo po prawej stronie ekranu" Przycisk od pobierania Przycisk pobierania jest ukryty Przycisk pobierania jest widoczny + + Ukryj Hype + Przycisk Hype jest ukryty + Przycisk Hype jest wyświetlony + + Ukryj Promuj + Przycisk promocji jest ukryty + Przycisk promocji jest widoczny Przycisk od dziękowania Przycisk od dziękowania jest ukryty Przycisk od dziękowania jest widoczny + This button only shows if the user ip is from specific region such as the USA or EU. --> Ukryj Zapytaj Przycisk Zapytaj jest ukryty Przycisk Zapytaj jest widoczny @@ -689,6 +703,9 @@ Aby pokazać menu ścieżki audio, zmień opcję „Fałszuj strumienie wideo” Menu oglądania w VR Menu oglądania w VR jest ukryte Menu oglądania w VR jest widoczne + Ukryj menu jakości wideo + Menu jakości wideo jest ukryte + Menu jakości wideo jest wyświetlane Opis menu jakości filmu Opis menu jakości filmu jest ukryty Opis menu jakości filmu jest widoczny @@ -1461,7 +1478,7 @@ Włączenie tego może odblokować wyższe jakości wideo" Przycisk jest widoczny. Dotknij i przytrzymaj, aby zresetować prędkość odtwarzania do domyślnej Przycisk nie jest widoczny - + Pokaż przycisk jakości wideo Przycisk jest widoczny. Dotknij i przytrzymaj, aby zresetować jakość do wartości domyślnych Przycisk nie jest widoczny 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 ecaebb0ab..7d41182b5 100644 --- a/patches/src/main/resources/addresources/values-pt-rBR/strings.xml +++ b/patches/src/main/resources/addresources/values-pt-rBR/strings.xml @@ -452,6 +452,11 @@ Este recurso está disponível apenas para dispositivos mais antigos" O diálogo vai ser mostrado Isto não ignora a restrição de idade, apenas a aceita automaticamente. + + Desativar pop-up de fazer login na TV + O pop-up de fazer login na TV está desativado + O pop-up de fazer login na TV está ativado + Desativar pulo de capítulo com toque duplo O toque duplo nunca pode acionar um pulo para o capítulo seguinte/anterior @@ -563,7 +568,7 @@ Ajuste o volume deslizando verticalmente no lado direito da tela" O botão Parar anúncios está oculto O botão Parar anúncios é exibido + This button usually only shows on live streams. --> Ocultar Denúncia Botão de denúncia está oculto O botão de denúncia é mostrado @@ -575,12 +580,21 @@ Ajuste o volume deslizando verticalmente no lado direito da tela" Ocultar Download Botão download está oculto O botão download é mostrado + + Ocultar Hype + Botão Hype está oculto + O botão Hype é exibido + + Ocultar Promoções + Botão de promoção está oculto + Botão de promoção está visível Ocultar Valeu Botão valeu está oculto O botão valeu é mostrado + This button only shows if the user ip is from specific region such as the USA or EU. --> Ocultar \"Perguntar\" Botão \"Perguntar\" oculto O botão \"Perguntar\" é mostrado @@ -693,6 +707,9 @@ Para exibir o menu da faixa de áudio, altere \"Spoof video streams\" para iOS T Ocultar Assistir no VR Menu assistir no VR está oculto Menu assistir no VR não está oculto + Esconder menu de qualidade de vídeo + O menu de qualidade de vídeo está oculto + O menu de qualidade de vídeo é exibido Ocultar rodapé do menu de qualidade de vídeo O rodapé do menu de qualidade de vídeo está oculto Rodapé do menu de qualidade de vídeo não está ocultos @@ -1464,7 +1481,7 @@ Habilitar isso pode desbloquear qualidades de vídeo mais altas" O botão é exibido. Toque e mantenha pressionado para redefinir a velocidade de reprodução para o padrão Botão não está visível - + Mostrar botão de qualidade de vídeo O botão é exibido. Toque e segure para redefinir a qualidade para o padrão O botão não é exibido 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 e8a9d139a..9a8ad98d5 100644 --- a/patches/src/main/resources/addresources/values-pt-rPT/strings.xml +++ b/patches/src/main/resources/addresources/values-pt-rPT/strings.xml @@ -452,6 +452,11 @@ Tính năng này chỉ khả dụng cho các thiết bị cũ" A caixa de diálogo será exibida Isto não ignora a restrição de idade, apenas a aceita automaticamente. + + Desativar o pop-up Entrar na TV + O pop-up Entrar na TV está desativado + O pop-up Entrar na TV está ativado + Desativar o salto de capítulo com toque duplo O toque duplo nunca acionará um salto para o capítulo seguinte/anterior @@ -563,7 +568,7 @@ Ajuste o volume deslizando verticalmente no lado direito da tela" O botão Parar anúncios está oculto O botão Parar anúncios está exibido + This button usually only shows on live streams. --> Esconder relatório O botão de relatório está escondido Botão de relatório é visível @@ -575,12 +580,21 @@ Ajuste o volume deslizando verticalmente no lado direito da tela" Esconder Transferir O botão transferir está escondido O botão transferir está visível + + Ocultar Hype + O botão Hype está oculto + O botão Hype está exibido + + Ocultar Promover + O botão Promover está oculto + O botão Promover está exibido Esconder Obrigado O botão de agradecimento está escondido O botão Obrigado é visível + This button only shows if the user ip is from specific region such as the USA or EU. --> Ocultar Perguntar O botão Perguntar está oculto O botão Perguntar está visível @@ -693,6 +707,9 @@ Para mostrar o menu da faixa de áudio, altere \"Spoof video streams\" para iOS Esconder relógio no VR Assista no menu VR está escondido Assistir no menu VR é visível + Ocultar menu de qualidade do vídeo + O menu de qualidade de vídeo está oculto + O menu de qualidade de vídeo está exibido Esconder rodapé do menu de qualidade de vídeo O rodapé do menu de qualidade de vídeo está oculto Cabeçalho do menu de qualidade de vídeo mostrado @@ -1465,7 +1482,7 @@ Bật tính năng này có thể mở khóa chất lượng video cao hơn"O botão é mostrado. Toque e segure para redefinir a velocidade de reprodução para o padrão O botão não está visível - + Mostrar botão de qualidade de vídeo O botão é exibido. Toque e segure para redefinir a qualidade para o padrão O botão não é exibido 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 8d9601519..65ea04996 100644 --- a/patches/src/main/resources/addresources/values-ro-rRO/strings.xml +++ b/patches/src/main/resources/addresources/values-ro-rRO/strings.xml @@ -452,6 +452,11 @@ Această funcție este disponibilă numai pentru dispozitivele mai vechi"Va fi afișat catalogul Aceasta nu ocolește restricția de vârstă. O acceptă automat. + + Dezactivare pop-up Conectare la televizor + Pop-up-ul Conectare la televizor este dezactivat + Pop-up-ul Conectare la televizor este activat + Dezactivare omisiune capitol prin atingere dublă Atingerea dublă nu va declanșa niciodată sărirea la capitolul următor/anterior @@ -563,7 +568,7 @@ Reglați volumul glisând vertical pe partea dreaptă a ecranului" Butonul de oprire a reclamelor este ascuns Butonul de oprire a reclamelor este afișat + This button usually only shows on live streams. --> Ascunde raportul Butonul de raportare este ascuns Butonul de raportare este afișat @@ -575,12 +580,21 @@ Reglați volumul glisând vertical pe partea dreaptă a ecranului" Ascunde Descărcare Butonul de descărcare este ascuns Butonul Descărcare este afișat + + Ascunde Freamătul + Butonul de Hype este ascuns + Butonul Hype este afișat + + Ascundeți Promovare + Butonul de promovare este ascuns + Butonul de promovare este afișat Ascunde mulţumirile Butonul de multumire este ascuns Butonul de multumire este afisat + This button only shows if the user ip is from specific region such as the USA or EU. --> Ascunde \"Întreabă\" Butonul Întreabă este ascuns Butonul Întreabă este afișat @@ -693,6 +707,9 @@ Pentru a afișa meniul pentru pista audio, schimbați opțiunea „Falsifică fl Ascunde ceas în VR Vizionarea în meniul VR este ascunsă Vizionați în meniul VR este afișat + Ascunde meniul de calitate video + Meniul calității video este ascuns + Meniul calității video este afișat Ascunde subsol meniu calitate video Subsolul meniului calităţii video este ascuns Subsolul meniului calității video este afișat @@ -1464,7 +1481,7 @@ Activarea acestei opțiuni poate debloca calități video mai mari" Butonul este afișat. Atingeți și mențineți apăsat pentru a reseta viteza de redare la cea implicită Butonul nu este afișat - + Afișați butonul de calitate video Butonul este afișat. Atingeți și mențineți apăsat pentru a reseta calitatea la valoarea implicită Butonul nu este afișat. 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 0c25ad385..1419dd685 100644 --- a/patches/src/main/resources/addresources/values-ru-rRU/strings.xml +++ b/patches/src/main/resources/addresources/values-ru-rRU/strings.xml @@ -452,6 +452,11 @@ Second \"item\" text" Диалоговое окно о нежелательном контенте показано Данная опция не обходит возрастное ограничение. Она только принимает возрастное ограничение автоматически. + + Отключить всплывающее окно \"Вход на ТВ\" + Всплывающее окно \"Вход на ТВ\" отключено + Всплывающее окно \"Вход на ТВ\" включено + Отключить пропуск главы по двойному касанию Двойное касание никогда не приведет к переходу к следующей/предыдущей главе @@ -563,7 +568,7 @@ Second \"item\" text" Кнопка \"Не показывать рекламу\" скрыта Кнопка \"Не показывать рекламу\" показана + This button usually only shows on live streams. --> Скрыть кнопку \"Пожаловаться\" Кнопка \"Пожаловаться\" под плеером скрыта Кнопка \"Пожаловаться\" под плеером показана @@ -575,12 +580,21 @@ Second \"item\" text" Скрыть кнопку \"Скачать\" Кнопка \"Скачать\" под плеером скрыта Кнопка \"Скачать\" под плеером показана + + Скрыть кнопку \"Хайп\" + Кнопка \"Хайп\" скрыта + Кнопка \"Хайп\" показана + + Скрыть кнопку \"Рекламировать\" + Кнопка \"Рекламировать\" скрыта + Кнопка \"Рекламировать\" показана Скрыть кнопку \"Спасибо\" Кнопка \"Спасибо\" под плеером скрыта Кнопка \"Спасибо\" под плеером показана + This button only shows if the user ip is from specific region such as the USA or EU. --> Скрыть кнопку \"Спросить\" Кнопка \"Спросить\" скрыта Кнопка \"Спросить\" показана @@ -693,6 +707,9 @@ Second \"item\" text" Скрыть пункт \"Смотреть в VR-режиме\" Пункт \"Смотреть в VR-режиме\" в выдвижном меню плеера скрыт Пункт \"Смотреть в VR-режиме\" в выдвижном меню плеера показан + Скрыть меню качества видео + Меню качества видео скрыто + Меню качества видео показано Скрыть колонтитул меню качества видео Нижний колонтитул старого меню качества видео в выдвижном меню плеера скрыт Нижний колонтитул старого меню качества видео в выдвижном меню плеера показан @@ -1472,7 +1489,7 @@ Second \"item\" text" Кнопка показана. Нажмите и удерживайте, чтобы сбросить скорость воспроизведения до значения по умолчанию Кнопка выбора скорости воспроизведения скрыта - + Показать кнопку качества видео Кнопка показана. Нажмите и удерживайте, чтобы сбросить качество до значения по умолчанию Кнопка выбора скорости воспроизведения скрыта 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 b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-si-rLK/strings.xml +++ b/patches/src/main/resources/addresources/values-si-rLK/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-sk-rSK/strings.xml b/patches/src/main/resources/addresources/values-sk-rSK/strings.xml index 7edf222f5..768e31a5b 100644 --- a/patches/src/main/resources/addresources/values-sk-rSK/strings.xml +++ b/patches/src/main/resources/addresources/values-sk-rSK/strings.xml @@ -450,6 +450,11 @@ Táto funkcia je dostupná len pre staršie zariadenia" Zobrazí sa dialógové okno Neobchádza sa tým ani vekové obmedzenie. Len to automaticky akceptuje. + + Zakázať vyskakovacie okno Prihlásiť sa do TV + Vyskakovacie okno Prihlásiť sa do TV je zakázané + Vyskakovacie okno Prihlásiť sa do TV je povolené + Zakázať preskočenie kapitoly dvojitým klepnutím Dvojité klepnutie nikdy nespustí preskočenie na ďalšiu/predchádzajúcu kapitolu @@ -561,7 +566,7 @@ Upravte hlasitosť posúvaním vertikálne na pravej strane obrazovky" Tlačidlo Zastaviť reklamy je skryté Tlačidlo Zastaviť reklamy je zobrazené + This button usually only shows on live streams. --> Skryť prehľad Tlačidlo nahlásiť je skryté Zobrazí sa tlačidlo Ohlásiť @@ -573,12 +578,21 @@ Upravte hlasitosť posúvaním vertikálne na pravej strane obrazovky" Skryť stiahnutie Tlačidlo Stiahnuť je skryté Zobrazí sa tlačidlo Stiahnuť + + Skryť Hype + Tlačidlo Hype je skryté + Tlačidlo Hype je zobrazené + + Skryť propagáciu + Tlačidlo Propagovať je skryté + Tlačidlo Propagovať je zobrazené Skryť Ďakujem Tlačidlo poďakovania je skryté Zobrazí sa tlačidlo Ďakujem + This button only shows if the user ip is from specific region such as the USA or EU. --> Skryť možnosť Opýtať sa Tlačidlo Opýtať sa je skryté Zobrazí sa tlačidlo Opýtať sa @@ -691,6 +705,9 @@ Ak chcete zobraziť ponuku zvukovej stopy, zmeňte možnosť „Oklamať videost Skryť hodinky vo VR Sledovanie v ponuke VR je skryté Zobrazí sa ponuka Sledovať vo VR + Skryť ponuku kvality videa + Ponuka kvality videa je skrytá + Ponuka kvality videa je zobrazená Skryť pätu ponuky kvality videa Päta ponuky kvality videa je skrytá Zobrazí sa päta ponuky kvality videa @@ -1458,7 +1475,7 @@ Povolením tejto možnosti môžete odomknúť vyššie kvality videa" Zobrazuje sa tlačidlo. Ťuknite a podržte, ak chcete obnoviť predvolenú rýchlosť prehrávania Tlačidlo nie je zobrazené - + Zobraziť tlačidlo kvality videa Tlačidlo sa zobrazí. Klepnite a podržte pre resetovanie kvality na predvolenú Tlačidlo sa nezobrazuje 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 503ce3a85..541dcb6f0 100644 --- a/patches/src/main/resources/addresources/values-sl-rSI/strings.xml +++ b/patches/src/main/resources/addresources/values-sl-rSI/strings.xml @@ -452,6 +452,11 @@ Ta funkcija je na voljo samo za starejše naprave" Opozorilo bo prikazano To ne obide starostne omejitve. Samo samodejno jo sprejme. + + Onemogoči pojavno okno za prijavo v TV + Pojavno okno za prijavo v TV je onemogočeno + Pojavno okno za prijavo v TV je omogočeno + Onemogoči preskok poglavja z dvojnim dotikom Dvojni dotik nikoli ne more sprožiti preskoka na naslednje/prejšnje poglavje @@ -563,7 +568,7 @@ Prilagodite glasnost s potegom navpično na desni strani zaslona" Gumb za zaustavitev oglasov je skrit Gumb za zaustavitev oglasov je prikazan + This button usually only shows on live streams. --> Skrij Prijavi Gumb Prijavi je skrit Gumb Prijavi je prikazan @@ -575,12 +580,21 @@ Prilagodite glasnost s potegom navpično na desni strani zaslona" Skrij Prenesi Gumb Prenesi je skrit Gumb Prenesi je prikazan + + Skrij Hype + Gumb Hype je skrit + Gumb Hype je prikazan + + Skrij Promocijo + Gumb za promocijo je skrit + Gumb za promocijo je prikazan Skrij Hvala Gumb Hvala je skrit Gumb Hvala je prikazan + This button only shows if the user ip is from specific region such as the USA or EU. --> Skrij Vprašaj Gumb Vprašaj je skrit Gumb Vprašaj je prikazan @@ -693,6 +707,9 @@ Opomba: Omogočanje tega tudi prisilno skrije video oglase" Skrij gledanje v VR Meni z gledanjem v VR je skrit Meni z gledanjem v VR je prikazan + Skrij meni kakovosti videa + Meni kakovosti videa je skrit + Meni kakovosti videa je prikazan Skrij nogo menija s kakovostjo videa Noga menija s kakovostjo videa je skrita Noga menija s kakovostjo videa je prikazana @@ -1465,7 +1482,7 @@ Omogočanje tega lahko odklene višje kakovosti videa" Gumb je prikazan. Dotaknite se ga in ga pridržite, da ponastavite hitrost predvajanja na privzeto. Gumb ni prikazan - + Prikaži gumb za kakovost videa Prikazan je gumb. Dotaknite se in držite, da ponastavite kakovost na privzeto Gumb ni prikazan 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 fefafa9d4..40b0d0db8 100644 --- a/patches/src/main/resources/addresources/values-sq-rAL/strings.xml +++ b/patches/src/main/resources/addresources/values-sq-rAL/strings.xml @@ -452,6 +452,11 @@ Kjo veçori është e disponueshme vetëm për pajisje më të vjetra" Kutia e dialogut do të shfaqet Kjo nuk e anashkalon kufizimin e moshës. Thjesht e pranon atë automatikisht. + + Çaktivizo dritaren kërcyese Hyr në TV + Dritarja kërcyese Hyr në TV është çaktivizuar + Dritarja kërcyese Hyr në TV është aktivizuar + Çaktivizo anashkalimin e kapitullit me prekje të dyfishtë Prekja e dyfishtë nuk mund të shkaktojë kurrë një anashkalim te kapitulli tjetër/i mëparshëm @@ -563,7 +568,7 @@ Përshtate shkëlqimin duke rrëshqitur vertikalisht në anën e majtë të ekra Butoni Ndalo reklamat është i fshehur Butoni Ndalo reklamat është i shfaqur + This button usually only shows on live streams. --> Fsheh \"Raporton\" Butoni \"Raporton\" është i fshehur Butoni \"Raporton\" është i dukshëm @@ -575,12 +580,21 @@ Përshtate shkëlqimin duke rrëshqitur vertikalisht në anën e majtë të ekra Fsheh \"Shkarko\" Butoni \"Shkarko\" është i fshehur Butoni \"Shkarko\" është i dukshëm + + Fsheh Zhurmën + Butoni Hype është i fshehur + Butoni Hype është i shfaqur + + Fshihe Promovo + Butoni i promovimit është fshehur + Butoni i promovimit është shfaqur Fsheh \"Faleminderit\" Butoni \"Faleminderit\" është i fshehur Butoni \"Faleminderit\" është i dukshëm + This button only shows if the user ip is from specific region such as the USA or EU. --> Fshih Pyet Butoni Pyet është i fshehur Butoni Pyet shfaqet @@ -693,6 +707,9 @@ Për të shfaqur menunë e pistës audio, ndryshoni 'Falsifiko transmetimet vide Fsheh \"Shikoni në VR\" Menyja \"Shikoni në VR\" është e fshehur Menyja \"Shikoni në VR\" është e dukshme + Fshih menunë e cilësisë së videos + Menyja e cilësisë së videos është fshehur + Menyja e cilësisë së videos është shfaqur Fsheh fundin e menusë së cilësisë së videos Funda e menusë së cilësisë së videos është e fshehur Funda e menusë së cilësisë së videos është e dukshme @@ -1463,7 +1480,7 @@ Aktivizimi i kësaj mund të zhbllokojë cilësi më të larta video" Butoni shfaqet. Prekni dhe mbani për të rivendosur shpejtësinë e riprodhimit në atë të parazgjedhur Butoni nuk shfaqet - + Shfaq butonin e cilësisë së videos Butoni shfaqet. Prekni dhe mbani shtypur për të rivendosur cilësinë në parazgjedhur Butoni nuk shfaqet 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 f562a083f..a78822bb9 100644 --- a/patches/src/main/resources/addresources/values-sr-rCS/strings.xml +++ b/patches/src/main/resources/addresources/values-sr-rCS/strings.xml @@ -452,6 +452,11 @@ Ova funkcija je dostupna samo za starije uređaje" Dijalog o diskreciji gledaoca će biti prikazan Ovo ne zaobilazi starosno ograničenje. Samo ga automatski prihvata. + + Onemogući iskačući prozor „Prijava na TV” + Iskačući prozor „Prijava na TV” je onemogućen + Iskačući prozor „Prijava na TV” je omogućen + Onemogući preskakanje poglavlja dvostrukim dodirom Dvostruki dodir nikada ne može pokrenuti preskakanje na sledeće/prethodno poglavlje @@ -563,7 +568,7 @@ Podesite jačinu zvuka prevlačenjem vertikalno na desnoj strani ekrana"Dugme „Zaustavi oglase” je skriveno Dugme „Zaustavi oglase” je prikazano + This button usually only shows on live streams. --> Sakrij dugme „Prijavi” Dugme „Prijavi” je skriveno Dugme „Prijavi” je prikazano @@ -575,12 +580,21 @@ Podesite jačinu zvuka prevlačenjem vertikalno na desnoj strani ekrana"Sakrij dugme „Preuzmi” Dugme „Preuzmi” je skriveno Dugme „Preuzmi” je prikazano + + Sakrij dugme „Hajp” + Dugme „Hajp” je skriveno + Dugme „Hajp” je prikazano + + Sakrij dugme „Promoviši” + Dugme „Promoviši” je skriveno + Dugme „Promoviši” je prikazano Sakrij dugme „Hvala” Dugme „Hvala” je skriveno Dugme „Hvala” je prikazano + This button only shows if the user ip is from specific region such as the USA or EU. --> Sakrij dugme „Pitaj” Dugme „Pitaj” je skriveno Dugme „Pitaj” je prikazano @@ -693,6 +707,9 @@ Da biste prikazali meni „Audio snimak”, promenite opciju „Lažirani video Sakrij dugme „Gledaj u VR” Dugme „Gledaj u VR” je skriveno Dugme „Gledaj u VR” je prikazano + Sakrij meni kvaliteta videa + Meni kvaliteta videa je skriven + Meni kvaliteta videa je prikazan Sakrij podnožje menija kvaliteta videa Podnožje menija kvaliteta videa je skriveno Podnožje menija kvaliteta videa je prikazano @@ -1464,9 +1481,9 @@ Ako ovo omogućite, mogu biti otključani viši kvaliteti videa" Dugme je prikazano. Dodirnite i zadržite da biste vratili brzinu reprodukcije na podrazumevanu vrednost Dugme dijaloga za brzinu nije prikazano - - Prikaži dugme za kvalitet video zapisa - Dugme je prikazano. Dodirnite i zadržite za resetovanje kvaliteta na podrazumevano + + Prikaži dugme kvaliteta videa + Dugme je prikazano. Dodirnite i zadržite da biste vratili kvalitet videa na podrazumevanu vrednost Dugme nije prikazano 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 16d76c8a2..a24f4ba57 100644 --- a/patches/src/main/resources/addresources/values-sr-rSP/strings.xml +++ b/patches/src/main/resources/addresources/values-sr-rSP/strings.xml @@ -452,6 +452,11 @@ Second \"item\" text" Дијалог о дискрецији гледаоца ће бити приказан Ово не заобилази старосно ограничење. Само га аутоматски прихвата. + + Онемогући искачући прозор „Пријава на ТВ” + Искачући прозор „Пријава на ТВ” је онемогућен + Искачући прозор „Пријава на ТВ” је омогућен + Онемогући прескакање поглавља двоструким додиром Двоструки додир никада не може покренути прескакање на следеће/претходно поглавље @@ -563,7 +568,7 @@ Second \"item\" text" Дугме „Заустави огласе” је скривено Дугме „Заустави огласе” је приказано + This button usually only shows on live streams. --> Сакриј дугме „Пријави” Дугме „Пријави” је скривено Дугме „Пријави” је приказано @@ -575,12 +580,21 @@ Second \"item\" text" Сакриј дугме „Преузми” Дугме „Преузми” је скривено Дугме „Преузми” је приказано + + Сакриј дугме „Хајп” + Дугме „Хајп” је скривено + Дугме „Хајп” је приказано + + Сакриј дугме „Промовиши” + Дугме „Промовиши” је скривено + Дугме „Промовиши” је приказано Сакриј дугме „Хвала” Дугме „Хвала” је скривено Дугме „Хвала” је приказано + This button only shows if the user ip is from specific region such as the USA or EU. --> Сакриј дугме „Питај” Дугме „Питај” је скривено Дугме „Питај” је приказано @@ -693,6 +707,9 @@ Second \"item\" text" Сакриј дугме „Гледај у ВР” Дугме „Гледај у ВР” је скривено Дугме „Гледај у ВР” је приказано + Сакриј мени квалитета видеа + Мени квалитета видеа је скривен + Мени квалитета видеа је приказан Сакриј подножје менија квалитета видеа Подножје менија квалитета видеа је скривено Подножје менија квалитета видеа је приказано @@ -1467,9 +1484,9 @@ Second \"item\" text" Дугме је приказано. Додирните и задржите да бисте вратили брзину репродукције на подразумевану вредност Дугме дијалога за брзину није приказано - - Прикажи дугме за квалитет видеа - Дугме је приказано. Притисните и држите да бисте ресетовали квалитет на подразумевани + + Прикажи дугме квалитета видеа + Дугме је приказано. Додирните и задржите да бисте вратили квалитет видеа на подразумевану вредност Дугме није приказано 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 cc580ebd3..6a8d09a56 100644 --- a/patches/src/main/resources/addresources/values-sv-rSE/strings.xml +++ b/patches/src/main/resources/addresources/values-sv-rSE/strings.xml @@ -452,6 +452,11 @@ Den här funktionen är endast tillgänglig för äldre enheter" Dialogrutan visas Detta kringgår inte åldersbegränsningen. Det bara godkänner automatiskt. + + Inaktivera \"Logga in på TV\"-popup + \"Logga in på TV\"-popup är inaktiverad + \"Logga in på TV\"-popup är aktiverad + Inaktivera dubbeltryck för att hoppa över kapitel Dubbeltryck kan aldrig utlösa ett hopp till nästa/föregående kapitel @@ -563,7 +568,7 @@ Justera volymen genom att svepa vertikalt till höger på skärmen" Knappen Stoppa annonser är dold Knappen Stoppa annonser visas + This button usually only shows on live streams. --> Dölj Rapportera Knappen Rapportera är dold Knappen Rapportera visas @@ -575,12 +580,21 @@ Justera volymen genom att svepa vertikalt till höger på skärmen" Dölj Ladda ned Knappen Ladda ned är dold Knappen Ladda ned visas + + Dölj Hajp + Hype-knappen är dold + Knappen Hype visas + + Dölj Marknadsför + Knappen Marknadsför är dold + Knappen Marknadsför visas Dölj Thanks Knappen Thanks är dold Knappen Thanks visas + This button only shows if the user ip is from specific region such as the USA or EU. --> Dölj Fråga Knappen Fråga är dold Knappen Fråga visas @@ -693,6 +707,9 @@ För att visa menyn Ljudspår, ändra \"Förfalska videoströmmar\" till iOS TV" Dölj Titta i VR Menyn Titta i VR är dold Menyn Titta i VR visas + Dölj videokvalitetsmeny + Menyn för videokvalitet är dold + Menyn för videokvalitet visas Dölj sidfot på videokvalitetsmeny Sidfoten på videokvalitetsmenyn är dold Sidfoten på videokvalitetsmenyn visas @@ -1464,7 +1481,7 @@ Om du aktiverar detta kan högre videokvaliteter låsas upp" Knappen visas. Tryck länge för att återställa uppspelningshastigheten till standardhastigheten Knappen visas inte - + Visa videokvalitetsknapp Knappen visas. Tryck länge för att återställa kvaliteten till standardkvaliteten Knappen visas inte 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 b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-sw-rKE/strings.xml +++ b/patches/src/main/resources/addresources/values-sw-rKE/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-ta-rIN/strings.xml b/patches/src/main/resources/addresources/values-ta-rIN/strings.xml index b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-ta-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-ta-rIN/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-te-rIN/strings.xml b/patches/src/main/resources/addresources/values-te-rIN/strings.xml index b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-te-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-te-rIN/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-th-rTH/strings.xml b/patches/src/main/resources/addresources/values-th-rTH/strings.xml index a4245b734..4b17bf4e4 100644 --- a/patches/src/main/resources/addresources/values-th-rTH/strings.xml +++ b/patches/src/main/resources/addresources/values-th-rTH/strings.xml @@ -452,6 +452,11 @@ Second \"item\" text" กล่องโต้ตอบจะแสดง สิ่งนี้ไม่ได้ข้ามข้อจำกัดอายุ มันแค่ยอมรับอายุโดยอัตโนมัติ + + ปิดใช้งานป๊อปอัปเข้าสู่ระบบไปยังทีวี + ปิดใช้งานป๊อปอัปเข้าสู่ระบบไปยังทีวีแล้ว + เปิดใช้งานป๊อปอัปเข้าสู่ระบบไปยังทีวีแล้ว + ปิดใช้งานการแตะสองครั้งเพื่อข้ามบท การแตะสองครั้งจะไม่สามารถเรียกให้เกิดการข้ามไปยังบทถัดไป/ก่อนหน้าได้ @@ -561,7 +566,7 @@ Second \"item\" text" ปุ่มหยุดโฆษณาถูกซ่อน ปุ่มหยุดโฆษณาถูกแสดง + This button usually only shows on live streams. --> ซ่อนรายงาน ปุ่มรายงานถูกซ่อน ปุ่มรายงานถูกแสดง @@ -573,12 +578,21 @@ Second \"item\" text" ซ่อนดาวน์โหลด ปุ่มดาวน์โหลดถูกซ่อน ปุ่มดาวน์โหลดถูกแสดง + + ซ่อนกระแส + ปุ่ม Hype ถูกซ่อนอยู่ + ปุ่ม Hype กำลังแสดง + + ซ่อนโปรโมต + ปุ่มโปรโมทถูกซ่อน + ปุ่มโปรโมทแสดงอยู่ ซ่อนขอบคุณ ปุ่มขอบคุณถูกซ่อน ปุ่มขอบคุณถูกแสดง + This button only shows if the user ip is from specific region such as the USA or EU. --> ซ่อนปุ่มถาม ปุ่มถามถูกซ่อนอยู่ ปุ่มถามแสดงอยู่ @@ -691,6 +705,9 @@ Second \"item\" text" ซ่อนดูใน VR เมนูดูใน VR ซ่อนอยู่ เมนูดูใน VR แสดงอยู่ + ซ่อนเมนูคุณภาพวิดีโอ + เมนูคุณภาพวิดีโอถูกซ่อน + เมนูคุณภาพวิดีโอแสดงอยู่ ซ่อนส่วนท้ายเมนูคุณภาพวิดีโอ ส่วนท้ายเมนูคุณภาพวิดีโอซ่อนอยู่ ส่วนท้ายเมนูคุณภาพวิดีโอแสดงอยู่ @@ -1467,7 +1484,7 @@ User id ของคุณเหมือนกับรหัสผ่าน ปุ่มจะปรากฏขึ้น แตะค้างไว้เพื่อรีเซ็ตความเร็วในการเล่นเป็นค่าเริ่มต้น ไม่แสดงปุ่ม - + แสดงปุ่มคุณภาพวิดีโอ แสดงปุ่มแล้ว แตะค้างไว้เพื่อรีเซ็ตคุณภาพเป็นค่าเริ่มต้น ไม่ได้แสดงปุ่ม 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 362176aee..e98108462 100644 --- a/patches/src/main/resources/addresources/values-tr-rTR/strings.xml +++ b/patches/src/main/resources/addresources/values-tr-rTR/strings.xml @@ -452,6 +452,11 @@ Bu özellik yalnızca eski cihazlarda kullanılabilir" İletişim kutusu gösterilecek Bu, yaş kısıtlamasını atlamaz. Sadece otomatik olarak kabul eder. + + TV\'de oturum açma penceresini devre dışı bırak + TV\'de oturum açma açılır penceresi devre dışı + TV\'de oturum açma açılır penceresi etkin + Çift dokunuşla bölüm atlamayı devre dışı bırak Çift dokunuş asla bir sonraki/önceki bölüme atlamayı tetikleyemez @@ -563,7 +568,7 @@ Ekranın sağ tarafında dikey olarak kaydırarak sesi ayarlayın" Reklamları durdur düğmesi gizli Reklamları durdur düğmesi görünür + This button usually only shows on live streams. --> Bildir\'i gizle Bildir düğmesi gizli Bildir düğmesi görünür @@ -575,12 +580,21 @@ Ekranın sağ tarafında dikey olarak kaydırarak sesi ayarlayın" İndir\'i gizle İndir düğmesi gizli İndir düğmesi görünür + + Abartıyı Gizle + Coşku düğmesi gizli + Hype düğmesi görünür + + Tanıt\'ı Gizle + Tanıt düğmesi gizli + Tanıt düğmesi görünür Teşekkürler\'i gizle Teşekkürler düğmesi gizli Teşekkürler düğmesi görünür + This button only shows if the user ip is from specific region such as the USA or EU. --> Sor\'u gizle Sor düğmesi gizli Sor düğmesi görünür @@ -693,6 +707,9 @@ Ses parçası menüsünü göstermek için 'Video akışlarını taklit et' ayar VR modunda izlemeyi gizle VR modunda izle menüsü gizli VR modunda izle menüsü görünür + Video kalite menüsünü gizle + Video kalite menüsü gizli + Video kalite menüsü görünür Video kalite menüsü alt bilgisini gizle Video kalite menüsü alt bilgisi gizli Video kalite menüsü alt bilgisi görünür @@ -1472,7 +1489,7 @@ Bunu etkinleştirmek daha yüksek video kalitelerini açabilir" Düğme görünür. Oynatma hızını varsayılana sıfırlamak için dokunup basılı tutun Düğme gösterilmez - + Video kalitesi düğmesini göster Düğme görünür. Kaliteyi varsayılana sıfırlamak için dokunup basılı tutun Düğme gösterilmez 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 b9f11c10d..2826e0724 100644 --- a/patches/src/main/resources/addresources/values-uk-rUA/strings.xml +++ b/patches/src/main/resources/addresources/values-uk-rUA/strings.xml @@ -452,6 +452,11 @@ Second \"item\" text" Діалогове вікно про неприйнятний контент буде показуватися Це не обходить вікові обмеження, а просто приймає їх автоматично. + + Вимкнути вікно \"Увійти на телевізорі\" + Спливаюче вікно \"Увійти на телевізорі\" вимкнено + Спливаюче вікно \"Увійти на телевізорі\" увімкнено + Вимкнути пропуск розділу подвійним натисканням Подвійне натискання двома пальцями ніколи не викличе пропуск до наступного/попереднього розділу @@ -563,7 +568,7 @@ Second \"item\" text" Кнопку \"Зупинити показ оголошень\" приховано Кнопка \"Зупинити показ оголошень\" показується + This button usually only shows on live streams. --> Приховати \"Поскаржитися\" Кнопку \"Поскаржитися\" приховано Кнопка \"Поскаржитися\" показується @@ -575,12 +580,21 @@ Second \"item\" text" Приховати \"Завантажити\" Кнопку \"Завантажити\" приховано Кнопка \"Завантажити\" показується + + Приховати \"Хайп\" + Кнопку \"Хайп\" приховано + Кнопка \"Хайп\" показується + + Приховати \"Рекламувати\" + Кнопку \"Рекламувати\" приховано + Кнопка \"Рекламувати\" показується Приховати \"Дякую\" Кнопку \"Дякую\" приховано Кнопка \"Дякую\" показується + This button only shows if the user ip is from specific region such as the USA or EU. --> Приховати \"Запитати\" Кнопку \"Запитати\" приховано Кнопка \"Запитати\" показується @@ -693,6 +707,9 @@ Second \"item\" text" Приховати \"Дивитись у VR\" Пункт меню \"Дивитись у VR\" приховано Пункт меню \"Дивитись у VR\" показується + Приховати меню якості відео + Меню якості відео приховано + Меню якості відео показується Приховати колонтитул меню якості відео Нижній колонтитул меню якості відео приховано Нижній колонтитул меню якості відео показується @@ -1464,7 +1481,7 @@ Second \"item\" text" Кнопка показується. Натисніть і утримуйте, щоб відновити стандартну швидкість відтворення Кнопка швидкості відтворення не показується - + Кнопка якості відео Кнопка показується. Натисніть і утримуйте, щоб відновити стандартну якість Кнопка швидкості відтворення не показується diff --git a/patches/src/main/resources/addresources/values-ur-rIN/strings.xml b/patches/src/main/resources/addresources/values-ur-rIN/strings.xml index b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-ur-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-ur-rIN/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-uz-rUZ/strings.xml b/patches/src/main/resources/addresources/values-uz-rUZ/strings.xml index b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-uz-rUZ/strings.xml +++ b/patches/src/main/resources/addresources/values-uz-rUZ/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values-vi-rVN/strings.xml b/patches/src/main/resources/addresources/values-vi-rVN/strings.xml index 2b95d56a0..cfec1375a 100644 --- a/patches/src/main/resources/addresources/values-vi-rVN/strings.xml +++ b/patches/src/main/resources/addresources/values-vi-rVN/strings.xml @@ -47,7 +47,7 @@ Second \"item\" text" Nhập thất bại: %s Tìm kiếm Không tìm thấy kết quả nào cho \'%s\' - Thử một từ khóa khác + Thử từ khóa khác Xóa khỏi lịch sử tìm kiếm? Hiện biểu tượng cài đặt ReVanced Các biểu tượng cài đặt được hiển thị @@ -57,8 +57,8 @@ Second \"item\" text" Để dịch các ngôn ngữ mới, hãy truy cập translate.revanced.app" Ngôn ngữ ứng dụng - Nhập / Xuất - Nhập / Xuất cài đặt ReVanced + Nhập hoặc Xuất + Nhập hoắc xuất các cài đặt ReVanced Bạn đang dùng ReVanced Patches phiên bản <i>%s</i> Lưu ý @@ -153,8 +153,8 @@ Bạn sẽ không được thông báo khi xẩy ra lỗi bất ngờ." Kệ danh mục được đề xuất đã bị ẩn Kệ danh mục được đề xuất đượ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 được hiển thị + Các bài đăng cộng đồng đã bị ẩn + Các 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 được hiển thị @@ -169,7 +169,7 @@ Bạn sẽ không được thông báo khi xẩy ra lỗi bất ngờ." Nút micro nổi trong tìm kiếm đang hiển thị Ẩn kệ ngang "Các kệ ngang đã bị ẩn, chẳng hạn như: -• Tin tức nổi bật +• Tin nổi bật • Tiếp tục xem • Khám phá các chủ đề khác • Phù hợp nhất @@ -199,8 +199,8 @@ Bạn sẽ không được thông báo khi xẩy ra lỗi bất ngờ." Ẩn nút \'Hiện thêm\' - Nút hiện thêm trong kết quả tìm kiếm đã bị ẩn - Nút hiện thêm trong kết quả tìm kiếm được hiển thị + Nút hiện thêm đã bị ẩn trong kết quả tìm kiếm + Nút hiện thêm được hiển thị trong kết quả tìm kiếm Ẩn khảo sát Khảo sát bị ẩn Khảo sát được hiển thị @@ -238,12 +238,12 @@ Nếu cài đặt này được bật và Doodle đang hiển thị tại khu v Ẩn bảng thông tin y tế Bảng thông tin y tế đã bị ẩn Bảng thông tin y tế được hiển thị - Ẩn tác vụ nhanh - Các tác vụ nhanh ở chế độ toàn màn hình đã bị ẩn - Các tác vụ nhanh ở chế độ toàn màn hình được hiển thị + Ẩn bảng thao tác nhanh + Bảng thao tác nhanh ở chế độ toàn màn hình đã bị ẩn + Bảng thao tác nhanh ở chế độ toàn màn hình được hiển thị Ẩn video liên quan - Video liên quan trong tác vụ nhanh đã bị ẩn - Video liên quan trong tác vụ nhanh được hiển thị + Video liên quan trong bảng thao tác nhanh đã bị ẩn + Video liên quan trong bảng thao tác nhanh đượ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 dành cho người đăng ký được hiển thị @@ -315,10 +315,10 @@ Nếu cài đặt này được bật và Doodle đang hiển thị tại khu v Nút Chuyển đến cửa hàng được hiển thị 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 AI đã bị ẩn - Tóm tắt trò chuyện AI được hiển thị - Ẩn tóm tắt Bình luận AI + Ẩn tóm tắt cuộc trò chuyện AI + Tóm tắt cuộc trò chuyện AI đã bị ẩn + Tóm tắt cuộc trò chuyện AI được hiển thị + Ẩn tóm tắt bình luận AI Tóm tắt bình luận AI đã bị ẩn Tóm tắt bình luận AI được hiển thị Ẩn nguyên tắc kênh @@ -354,7 +354,7 @@ Nếu cài đặt này được bật và Doodle đang hiển thị tại khu v Danh sách các chuỗi dựng đường dẫn thành phần để lọc được ngăn cách bởi dòng mới Bộ lọc tuỳ chỉnh không hợp lệ: %s - Ẩn nội dung từ khóa + Ẩn nội dung theo từ khóa Ẩn video trong trang video và tìm kiếm bằng bộ lọc từ khóa Ẩn video Trang chủ theo từ khóa Video trong thẻ Trang chủ được lọc theo từ khóa @@ -452,6 +452,11 @@ Tính năng này chỉ khả dụng trên các thiết bị cũ" Hộp thoại sẽ được hiển thị Tuỳ chọn này chỉ tự động chấp nhận mà không bỏ qua giới hạn độ tuổi. + + Tắt cửa sổ Đăng nhập vào TV + Cửa sổ Đăng nhập vào TV đã tắt + Cửa sổ Đăng nhập vào TV đã bật + Tắt bỏ qua chương bằng cách chạm hai lần Chạm hai lần không bao giờ có thể kích hoạt bỏ qua đến chương tiếp theo/trước đó @@ -546,7 +551,7 @@ Vui lòng kiểm tra lại tên gói và đảm bảo ứng dụng đã được Phụ đề tự động đã bật - Nút tác vụ + Nút thao tác Ẩn hoặc hiển thị các nút bên dưới video Tắt hiệu ứng phát sáng nút Thích và Đăng ký Nút Thích và Đăng ký sẽ không phát sáng khi được tương tác @@ -563,7 +568,7 @@ Vui lòng kiểm tra lại tên gói và đảm bảo ứng dụng đã được Nút ngừng quảng cáo đã bị ẩn Nút ngừng quảng cáo được hiển thị + This button usually only shows on live streams. --> Ẩn Báo cáo Nút báo cáo đã bị ẩn Nút báo cáo được hiển thị @@ -575,12 +580,21 @@ Vui lòng kiểm tra lại tên gói và đảm bảo ứng dụng đã được Ẩn Tải xuống Nút tải xuống đã bị ẩn Nút tải xuống được hiển thị + + Ẩn Khuấy động + Nút khuấy động đã bị ẩn + Nút khuấy động được hiển thị + + Ẩn Quảng bá + Nút Quảng bá đã bị ẩn + Nút Quảng bá được hiển thị Ẩn Cảm ơn Nút cảm ơn đã bị ẩn Nút cảm ơn được hiển thị + This button only shows if the user ip is from specific region such as the USA or EU. --> Ẩn Đặt câu hỏi Nút đặt câu hỏi đã bị ẩn Nút đặt câu hỏi được hiển thị @@ -639,35 +653,35 @@ Nếu thay đổi cài đặt này không có hiệu lực, hãy thử chuyển Thanh điều hướng ở chế độ tối có thể mờ hoặc trong suốt - Trình đơn nổi - Ẩn hoặc hiện các mục trình đơn nổi + Trình đơn tuỳ chọn + Ẩn hoặc hiện các mục trình đơn tuỳ chọn trên trình phát Ẩn Phụ đề 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 đã bị ẩn - Trình đơn cài đặt bổ sung được hiển thị + Ẩn Chế độ cài đặt khác + Trình đơn chế độ cài đặt khác đã bị ẩn + Trình đơn chế độ cài đặt khác được hiển thị Ẩn Hẹn giờ ngủ Trình đơn hẹn giờ ngủ đã bị ẩn Trình đơn hẹn giờ ngủ được hiển thị - Ẩn lặp lại video - Trình đơn lặp lại video đã bị ẩn - Trình đơn lặp lại video được hiển thị + Ẩn Cho video lặp lại + Trình đơn cho video lặp lại đã bị ẩn + Trình đơn cho video lặp lại được hiển thị - Ẩn Chế độ môi trường - Trình đơn chế độ môi trường đã bị ẩn - Trình đơn chế độ môi trường được hiển thị + Ẩn Chế độ môi trường xung quanh + Trình đơn chế độ môi trường xung quanh đã bị ẩn + Trình đơn chế độ môi trường xung quanh được hiển thị Ẩn Âm lượng ổn định 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 đã bị ẩn - Trình đơn trợ giúp & phản hồi được hiển thị + Ẩn Trợ giúp và phản hồi + Trình đơn trợ giúp và phản hồi đã bị ẩn + Trình đơn trợ giúp và phản hồi được hiển thị Ẩn Tốc độ phát Trình đơn tốc độ phát đã bị ẩn @@ -683,17 +697,20 @@ Nếu thay đổi cài đặt này không có hiệu lực, hãy thử chuyể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 đã 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 được hiển thị "Trình đơn bản âm thanh đã bị ẩn -Để hiển thị trình đơn bản âm thanh, hãy đổi 'Giả mạo luồng video' thành iOS TV" +Để hiển thị bản âm thanh, hãy đổi 'Giả mạo luồng video' thành iOS TV" Ẩn Xem ở chế độ thực tế ảo Trình đơn xem ở chế độ thực tế ảo đã bị ẩn Trình đơn xem ở chế độ thực tế ảo được hiển thị - Ẩn chân trình đơn chất lượng video + Ẩn Chất lượng video + Trình đơn chất lượng video đã bị ẩn + Trình đơn chất lượng video được hiển thị + Ẩn chân trình đơn Chất lượng video Chân trình đơn chất lượng video đã bị ẩn Chân trình đơn chất lượng video được hiển thị @@ -963,9 +980,9 @@ Hạn chế: Số lượt không thích có thể không xuất hiện ở chế Hình thu nhỏ thanh tiến trình sẽ sử dụng cùng chất lượng với video hiện tại. Hoạt động tốt nhất với chất lượng video 720p trở xuống và khi sử dụng kết nối internet tốc độ cao." - Khôi phục thanh tiến trình hình thu nhỏ kiểu cũ - Thanh tiến trình hình thu nhỏ sẽ xuất hiện phía trên thanh tiến trình - Thanh tiến trình hình thu nhỏ sẽ xuất hiện trong chế độ toàn màn hình + Khôi phục hình thu nhỏ thanh tiến trình cũ + Hình thu nhỏ sẽ xuất hiện phía trên thanh tiến trình + Hình thu nhỏ sẽ xuất hiện trong chế độ toàn màn hình Bật SponsorBlock @@ -1045,7 +1062,7 @@ Hoạt động tốt nhất với chất lượng video 720p trở xuống và k "Cài đặt của bạn có chứa ID người dùng SponsorBlock riêng tư. ID người dùng của bạn giống như mật khẩu và không bao giờ được chia sẻ." - Không hiện lại + Không hiện lại nữa Thay đổi hành vi phân đoạn Nhà tài trợ Quảng cáo trả phí, giới thiệu trả phí và quảng cáo trực tiếp. Không phải tự quảng cáo hoặc quảng bá miễn phí cho các tổ chức/nhà sáng tạo/trang web/sản phẩm mà họ yêu thích @@ -1471,7 +1488,7 @@ Bật tính năng này có thể mở khóa chất lượng video cao hơn"Nút đã được hiển thị. Nhấn và giữ để đặt lại tốc độ phát về mặc định Nút không được hiển thị - + Hiện nút chất lượng video Nút đã được hiển thị. Nhấn và giữ để đặt lại chất lượng về mặc định Nút không được hiển thị @@ -1481,8 +1498,8 @@ Bật tính năng này có thể mở khóa chất lượng video cao hơ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ị Khôi phục trình đơn tốc độ phát cũ - Trình đơn tốc độ cũ được hiển thị - Trình đơn tốc độ hiện đại được hiển thị + Trình đơn tốc độ phát cũ được hiển thị + Trình đơn tốc độ phát hiện đại đượ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 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 6386f8b49..668961e65 100644 --- a/patches/src/main/resources/addresources/values-zh-rCN/strings.xml +++ b/patches/src/main/resources/addresources/values-zh-rCN/strings.xml @@ -452,6 +452,11 @@ Second \"item\" text" 「观看须知」对话框将会显示 这并不会绕过年龄限制,只是自动按下接受按钮。 + + 禁用登录电视弹出窗口 + 登录电视弹出窗口已禁用 + 登录电视弹出窗口已启用 + 禁用双击章节跳过 双击永远不会触发跳到下一/上一章节 @@ -563,7 +568,7 @@ Second \"item\" text" 停止广告按钮已隐藏 停止广告按钮已显示 + This button usually only shows on live streams. --> 隐藏「举报」 举报按钮已隐藏 举报按钮已显示 @@ -575,12 +580,21 @@ Second \"item\" text" 隐藏「下载」按钮 下载按钮已隐藏 下载按钮已显示 + + 隐藏热度 + 浮夸按钮已隐藏 + 热度按钮已显示 + + 隐藏推广 + 推广按钮已隐藏 + 推广按钮已显示 隐藏「感谢」按钮 感谢按钮已隐藏 感谢按钮已显示 + This button only shows if the user ip is from specific region such as the USA or EU. --> 隐藏“提问” “提问”按钮已隐藏 “提问”按钮已显示 @@ -693,6 +707,9 @@ Second \"item\" text" 隐藏「在 VR 模式下观看」 在 VR 模式下观看已隐藏 在 VR 模式下观看已显示 + 隐藏视频质量菜单 + 视频质量菜单已隐藏 + 视频质量菜单已显示 隐藏「画质」选单下的提示页脚 画质选单页脚已隐藏 画质选单页脚已显示 @@ -1470,7 +1487,7 @@ Second \"item\" text" 按钮已显示。点住即可将播放速度重置为默认值 按钮未显示 - + 显示视频质量按钮 按钮已显示。点按并按住以将画质重置为默认值 按钮未显示 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 d82cf6bf9..fadc1dd18 100644 --- a/patches/src/main/resources/addresources/values-zh-rTW/strings.xml +++ b/patches/src/main/resources/addresources/values-zh-rTW/strings.xml @@ -452,6 +452,11 @@ Second \"item\" text" 將顯示對話方塊 這不會繞過年齡限制,只會自動按下同意。 + + 停用「登入電視」彈出視窗 + 「登入電視」彈出視窗已停用 + 「登入電視」彈出視窗已啟用 + 停用按兩下跳過章節功能 按兩下永遠不會觸發跳至下一/上一章節 @@ -563,7 +568,7 @@ Second \"item\" text" 「停止廣告」按鈕已隱藏 「停止廣告」按鈕已顯示 + This button usually only shows on live streams. --> 隱藏檢舉 已隱藏「檢舉」按鈕 已顯示「檢舉」按鈕 @@ -575,12 +580,15 @@ Second \"item\" text" 隱藏下載 已隱藏「下載」按鈕 已顯示「下載」按鈕 + + 隱藏感謝 已隱藏「感謝」按鈕 已顯示「感謝」按鈕 + This button only shows if the user ip is from specific region such as the USA or EU. --> 隱藏詢問 詢問按鈕已隱藏 詢問按鈕已顯示 @@ -693,6 +701,9 @@ Second \"item\" text" 隱藏「以 VR 模式觀看」 已隱藏「以 VR 模式觀看」 已顯示「以 VR 模式觀看」 + 隱藏影片畫質選單 + 影片畫質選單已隱藏 + 影片畫質選單已顯示 隱藏影片畫質選單頁尾 已隱藏影片畫質選單頁尾 已顯示影片畫質選單頁尾 @@ -1475,7 +1486,10 @@ Second \"item\" text" 按鈕已顯示。長按可將播放速度重設為預設值 不顯示按鈕 - + + 顯示畫質切換按鈕 + 按鈕已顯示。長按可重設為預設畫質 + 按鈕未顯示 自訂播放速度選單 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 b64730dc0..9c4e2aa79 100644 --- a/patches/src/main/resources/addresources/values-zu-rZA/strings.xml +++ b/patches/src/main/resources/addresources/values-zu-rZA/strings.xml @@ -67,6 +67,8 @@ Second \"item\" text" + + @@ -84,12 +86,15 @@ Second \"item\" text" + This button usually only shows on live streams. --> + + + This button only shows if the user ip is from specific region such as the USA or EU. --> @@ -222,7 +227,7 @@ Second \"item\" text" - + diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml index 3624d7f22..d63f43d55 100644 --- a/patches/src/main/resources/addresources/values/strings.xml +++ b/patches/src/main/resources/addresources/values/strings.xml @@ -515,6 +515,11 @@ This feature is only available for older devices" Dialog will be shown This does not bypass the age restriction. It just accepts it automatically. + + Disable Sign in to TV popup + Sign in to TV popup is disabled + Sign in to TV popup is enabled + Disable double tap chapter skip Double tap can never trigger a skip to the next/previous chapter @@ -626,7 +631,7 @@ Adjust volume by swiping vertically on the right side of the screen" Stop ads button is hidden Stop ads button is shown + This button usually only shows on live streams. --> Hide Report Report button is hidden Report button is shown @@ -638,12 +643,21 @@ Adjust volume by swiping vertically on the right side of the screen" Hide Download Download button is hidden Download button is shown + + Hide Hype + Hype button is hidden + Hype button is shown + + Hide Promote + Promote button is hidden + Promote button is shown Hide Thanks Thanks button is hidden Thanks button is shown + This button only shows if the user ip is from specific region such as the USA or EU. --> Hide Ask Ask button is hidden Ask button is shown @@ -756,6 +770,9 @@ To show the Audio track menu, change \'Spoof video streams\' to iOS TV" Hide Watch in VR Watch in VR menu is hidden Watch in VR menu is shown + Hide video quality menu + Video quality menu is hidden + Video quality menu is shown Hide video quality menu footer Video quality menu footer is hidden Video quality menu footer is shown @@ -1543,7 +1560,7 @@ Enabling this can unlock higher video qualities" Button is shown. Tap and hold to reset playback speed to default Button is not shown - + Show video quality button Button is shown. Tap and hold to reset quality to default Button is not shown diff --git a/patches/src/main/resources/copyvideourl/host/layout/youtube_controls_bottom_ui_container.xml b/patches/src/main/resources/copyvideourl/host/layout/youtube_controls_bottom_ui_container.xml index 34093f120..1dd0e3dc1 100644 --- a/patches/src/main/resources/copyvideourl/host/layout/youtube_controls_bottom_ui_container.xml +++ b/patches/src/main/resources/copyvideourl/host/layout/youtube_controls_bottom_ui_container.xml @@ -18,14 +18,6 @@ yt:layout_constraintBottom_toTopOf="@+id/quick_actions_container" yt:layout_constraintRight_toLeftOf="@+id/fullscreen_button" /> - - - - diff --git a/patches/src/main/resources/downloads/host/layout/youtube_controls_bottom_ui_container.xml b/patches/src/main/resources/downloads/host/layout/youtube_controls_bottom_ui_container.xml index eb9c2d779..a243eea71 100644 --- a/patches/src/main/resources/downloads/host/layout/youtube_controls_bottom_ui_container.xml +++ b/patches/src/main/resources/downloads/host/layout/youtube_controls_bottom_ui_container.xml @@ -18,12 +18,4 @@ android:src="@drawable/revanced_yt_download_button" yt:layout_constraintBottom_toTopOf="@+id/quick_actions_container" yt:layout_constraintRight_toLeftOf="@+id/fullscreen_button" /> - - diff --git a/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_4k.xml b/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_4k.xml deleted file mode 100644 index 22051e3fb..000000000 --- a/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_4k.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_fhd.xml b/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_fhd.xml deleted file mode 100644 index b7a8f5c73..000000000 --- a/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_fhd.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_fhd_plus.xml b/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_fhd_plus.xml deleted file mode 100644 index 18e163ca2..000000000 --- a/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_fhd_plus.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_hd.xml b/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_hd.xml deleted file mode 100644 index db2bad1b1..000000000 --- a/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_hd.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_ld.xml b/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_ld.xml deleted file mode 100644 index a49f5a200..000000000 --- a/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_ld.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_qhd.xml b/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_qhd.xml deleted file mode 100644 index 7609d368e..000000000 --- a/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_qhd.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_rectangle.xml b/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_rectangle.xml new file mode 100644 index 000000000..2791f1990 --- /dev/null +++ b/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_rectangle.xml @@ -0,0 +1,9 @@ + + + diff --git a/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_sd.xml b/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_sd.xml deleted file mode 100644 index 150ede850..000000000 --- a/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_sd.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_unknown.xml b/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_unknown.xml deleted file mode 100644 index 4e5750cfe..000000000 --- a/patches/src/main/resources/qualitybutton/drawable/revanced_video_quality_dialog_button_unknown.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/patches/src/main/resources/qualitybutton/host/layout/youtube_controls_bottom_ui_container.xml b/patches/src/main/resources/qualitybutton/host/layout/youtube_controls_bottom_ui_container.xml index deb534fba..ab5da7e36 100644 --- a/patches/src/main/resources/qualitybutton/host/layout/youtube_controls_bottom_ui_container.xml +++ b/patches/src/main/resources/qualitybutton/host/layout/youtube_controls_bottom_ui_container.xml @@ -6,22 +6,32 @@ android:layout_height="wrap_content" android:layoutDirection="ltr"> - + yt:layout_constraintRight_toLeftOf="@+id/fullscreen_button"> - + + + + diff --git a/patches/src/main/resources/speedbutton/drawable/revanced_playback_speed_dialog_button.xml b/patches/src/main/resources/speedbutton/drawable/revanced_playback_speed_dialog_button.xml deleted file mode 100644 index 114da2a5d..000000000 --- a/patches/src/main/resources/speedbutton/drawable/revanced_playback_speed_dialog_button.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - diff --git a/patches/src/main/resources/speedbutton/drawable/revanced_playback_speed_dialog_button_rectangle.xml b/patches/src/main/resources/speedbutton/drawable/revanced_playback_speed_dialog_button_rectangle.xml new file mode 100644 index 000000000..2791f1990 --- /dev/null +++ b/patches/src/main/resources/speedbutton/drawable/revanced_playback_speed_dialog_button_rectangle.xml @@ -0,0 +1,9 @@ + + + diff --git a/patches/src/main/resources/speedbutton/host/layout/youtube_controls_bottom_ui_container.xml b/patches/src/main/resources/speedbutton/host/layout/youtube_controls_bottom_ui_container.xml index c0109ebc5..2541113c5 100644 --- a/patches/src/main/resources/speedbutton/host/layout/youtube_controls_bottom_ui_container.xml +++ b/patches/src/main/resources/speedbutton/host/layout/youtube_controls_bottom_ui_container.xml @@ -6,23 +6,32 @@ android:layout_height="wrap_content" android:layoutDirection="ltr"> - + yt:layout_constraintRight_toLeftOf="@+id/fullscreen_button"> - + + + +