diff --git a/CHANGELOG.md b/CHANGELOG.md index d662cf797..bb3612b58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,71 @@ +# [5.2.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.2.0-dev.6...v5.2.0-dev.7) (2024-11-27) + + +### Bug Fixes + +* **YouTube - Settings:** Do not clip settings menus when using an Android 15 device ([#3999](https://github.com/ReVanced/revanced-patches/issues/3999)) ([7382a02](https://github.com/ReVanced/revanced-patches/commit/7382a020b8322a7abc016a4569bc15f9caf05546)) + +# [5.2.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.2.0-dev.5...v5.2.0-dev.6) (2024-11-27) + + +### Features + +* **YouTube:** Support version `19.46.42` ([#4010](https://github.com/ReVanced/revanced-patches/issues/4010)) ([122aac6](https://github.com/ReVanced/revanced-patches/commit/122aac6aee8ef0737f18564f11bbc2a6addf4a6b)) + +# [5.2.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.2.0-dev.4...v5.2.0-dev.5) (2024-11-27) + + +### Bug Fixes + +* **YouTube - Spoof video streams:** Log out the iOS client to restore kids videos playback ([#4000](https://github.com/ReVanced/revanced-patches/issues/4000)) ([cc2ac4e](https://github.com/ReVanced/revanced-patches/commit/cc2ac4e4cd15ca2a23d60abd160d915bc98f99b4)) + + +### Features + +* **TikTok:** Add ReVanced settings about screen ([#4009](https://github.com/ReVanced/revanced-patches/issues/4009)) ([12ea26b](https://github.com/ReVanced/revanced-patches/commit/12ea26b10ddea5ad39da1d35e2b8fd0b48c15d88)) + +# [5.2.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.2.0-dev.3...v5.2.0-dev.4) (2024-11-26) + + +### Bug Fixes + +* **YouTube - Playback speed:** Allow long press 2x speed when using custom playback speeds ([#3990](https://github.com/ReVanced/revanced-patches/issues/3990)) ([79a543a](https://github.com/ReVanced/revanced-patches/commit/79a543a57470638f983862c61270e046f3ac5cb7)) + +# [5.2.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.2.0-dev.2...v5.2.0-dev.3) (2024-11-26) + + +### Features + +* **VSCO:** Remove non functional `Unlock pro` patch ([4fddb19](https://github.com/ReVanced/revanced-patches/commit/4fddb1930bc7adeee3b60ae9cd346b143e88bd42)) + +# [5.2.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.2.0-dev.1...v5.2.0-dev.2) (2024-11-26) + + +### Bug Fixes + +* **YouTube - Settings:** Show navigation back button in setting sub menus ([#3991](https://github.com/ReVanced/revanced-patches/issues/3991)) ([e61686c](https://github.com/ReVanced/revanced-patches/commit/e61686c1039ae29e443273e4da4ec63956216841)) + +# [5.2.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.1.1-dev.2...v5.2.0-dev.1) (2024-11-25) + + +### Features + +* **YouTube - Theme:** Apply custom seekbar color to splash screen animation ([#3978](https://github.com/ReVanced/revanced-patches/issues/3978)) ([98d57e2](https://github.com/ReVanced/revanced-patches/commit/98d57e28af7206099867474b7aa3760cd4fe333f)) + +## [5.1.1-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.1.1-dev.1...v5.1.1-dev.2) (2024-11-25) + + +### Bug Fixes + +* **YouTube - Hide Shorts components:** Add missing options to patch ([65f62fc](https://github.com/ReVanced/revanced-patches/commit/65f62fcd5ac340616a96542c64faf2af2a60df28)) + +## [5.1.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.1.0...v5.1.1-dev.1) (2024-11-24) + + +### Bug Fixes + +* **My Expenses - Unlock pro:** Constrain compatible version to working version ([#3974](https://github.com/ReVanced/revanced-patches/issues/3974)) ([ba3bf69](https://github.com/ReVanced/revanced-patches/commit/ba3bf69df07ec8dab46868c3940ebd56db0cd137)) + # [5.1.0](https://github.com/ReVanced/revanced-patches/compare/v5.0.2...v5.1.0) (2024-11-24) diff --git a/extensions/shared/src/main/java/app/revanced/extension/shared/settings/preference/AbstractPreferenceFragment.java b/extensions/shared/src/main/java/app/revanced/extension/shared/settings/preference/AbstractPreferenceFragment.java index b7be999ff..b7dd65063 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/shared/settings/preference/AbstractPreferenceFragment.java +++ b/extensions/shared/src/main/java/app/revanced/extension/shared/settings/preference/AbstractPreferenceFragment.java @@ -1,21 +1,35 @@ package app.revanced.extension.shared.settings.preference; +import static app.revanced.extension.shared.StringRef.str; +import static app.revanced.extension.shared.Utils.getResourceIdentifier; + import android.annotation.SuppressLint; import android.app.AlertDialog; +import android.app.Dialog; import android.content.Context; import android.content.SharedPreferences; +import android.graphics.Insets; +import android.graphics.drawable.Drawable; +import android.os.Build; import android.os.Bundle; import android.preference.*; +import android.util.TypedValue; +import android.view.ViewGroup; +import android.view.WindowInsets; +import android.widget.TextView; +import android.widget.Toolbar; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import java.util.Objects; + import app.revanced.extension.shared.Logger; import app.revanced.extension.shared.Utils; import app.revanced.extension.shared.settings.BaseSettings; import app.revanced.extension.shared.settings.BooleanSetting; import app.revanced.extension.shared.settings.Setting; - -import static app.revanced.extension.shared.StringRef.str; +import app.revanced.extension.youtube.ThemeHelper; @SuppressWarnings("deprecation") public abstract class AbstractPreferenceFragment extends PreferenceFragment { @@ -71,6 +85,15 @@ public abstract class AbstractPreferenceFragment extends PreferenceFragment { } }; + @SuppressLint("UseCompatLoadingForDrawables") + public static Drawable getBackButtonDrawable() { + final int backButtonResource = getResourceIdentifier(ThemeHelper.isDarkTheme() + ? "yt_outline_arrow_left_white_24" + : "yt_outline_arrow_left_black_24", + "drawable"); + return Utils.getContext().getResources().getDrawable(backButtonResource); + } + /** * Initialize this instance, and do any custom behavior. *

@@ -98,7 +121,7 @@ public abstract class AbstractPreferenceFragment extends PreferenceFragment { showingUserDialogMessage = true; new AlertDialog.Builder(context) .setTitle(confirmDialogTitle) - .setMessage(setting.userDialogMessage.toString()) + .setMessage(Objects.requireNonNull(setting.userDialogMessage).toString()) .setPositiveButton(android.R.string.ok, (dialog, id) -> { if (setting.rebootApp) { showRestartDialog(context); @@ -261,6 +284,7 @@ public abstract class AbstractPreferenceFragment extends PreferenceFragment { // causes a callback to the listener even though nothing changed. initialize(); updateUIToSettingValues(); + setPreferenceScreenToolbar(getPreferenceScreen()); preferenceManager.getSharedPreferences().registerOnSharedPreferenceChangeListener(listener); } catch (Exception ex) { @@ -273,4 +297,56 @@ public abstract class AbstractPreferenceFragment extends PreferenceFragment { getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(listener); super.onDestroy(); } + + private void setPreferenceScreenToolbar(PreferenceScreen parentScreen) { + for (int i = 0, preferenceCount = parentScreen.getPreferenceCount(); i < preferenceCount; i++) { + Preference childPreference = parentScreen.getPreference(i); + if (childPreference instanceof PreferenceScreen) { + // Recursively set sub preferences. + setPreferenceScreenToolbar((PreferenceScreen) childPreference); + + childPreference.setOnPreferenceClickListener( + childScreen -> { + Dialog preferenceScreenDialog = ((PreferenceScreen) childScreen).getDialog(); + ViewGroup rootView = (ViewGroup) preferenceScreenDialog + .findViewById(android.R.id.content) + .getParent(); + + // Fix required for Android 15 and YT 19.45+ + // FIXME: + // On Android 15 the text layout is not aligned the same as the parent + // screen and it looks a little off. Otherwise this works. + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + rootView.setOnApplyWindowInsetsListener((v, insets) -> { + Insets statusInsets = insets.getInsets(WindowInsets.Type.statusBars()); + v.setPadding(0, statusInsets.top, 0, 0); + return insets; + }); + } + + Toolbar toolbar = new Toolbar(childScreen.getContext()); + toolbar.setTitle(childScreen.getTitle()); + toolbar.setNavigationIcon(getBackButtonDrawable()); + toolbar.setNavigationOnClickListener(view -> preferenceScreenDialog.dismiss()); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + final int margin = (int) TypedValue.applyDimension( + TypedValue.COMPLEX_UNIT_DIP, 16, getResources().getDisplayMetrics() + ); + toolbar.setTitleMargin(margin, 0, margin, 0); + } + + TextView toolbarTextView = Utils.getChildView(toolbar, + true, TextView.class::isInstance); + if (toolbarTextView != null) { + toolbarTextView.setTextColor(ThemeHelper.getForegroundColor()); + } + + rootView.addView(toolbar, 0); + return false; + } + ); + } + } + } } diff --git a/extensions/shared/src/main/java/app/revanced/extension/shared/settings/preference/ReVancedAboutPreference.java b/extensions/shared/src/main/java/app/revanced/extension/shared/settings/preference/ReVancedAboutPreference.java index 89fbe80e9..c3db3b4b0 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/shared/settings/preference/ReVancedAboutPreference.java +++ b/extensions/shared/src/main/java/app/revanced/extension/shared/settings/preference/ReVancedAboutPreference.java @@ -1,6 +1,5 @@ package app.revanced.extension.shared.settings.preference; -import static app.revanced.extension.shared.StringRef.sf; import static app.revanced.extension.shared.StringRef.str; import static app.revanced.extension.youtube.requests.Route.Method.GET; @@ -13,6 +12,8 @@ import android.content.res.Configuration; import android.graphics.Color; import android.net.Uri; import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; import android.preference.Preference; import android.util.AttributeSet; import android.view.Window; @@ -37,7 +38,7 @@ import app.revanced.extension.youtube.requests.Requester; import app.revanced.extension.youtube.requests.Route; /** - * Opens a dialog showing the links from {@link SocialLinksRoutes}. + * Opens a dialog showing official links. */ @SuppressWarnings({"unused", "deprecation"}) public class ReVancedAboutPreference extends Preference { @@ -72,7 +73,16 @@ public class ReVancedAboutPreference extends Preference { return Color.BLACK; } - private String createDialogHtml(WebLink[] socialLinks) { + /** + * Apps that do not support bundling resources must override this. + * + * @return A localized string to display for the key. + */ + protected String getString(String key, Object ... args) { + return str(key, args); + } + + private String createDialogHtml(WebLink[] aboutLinks) { final boolean isNetworkConnected = Utils.isNetworkConnected(); StringBuilder builder = new StringBuilder(); @@ -91,7 +101,7 @@ public class ReVancedAboutPreference extends Preference { builder.append(""); + + "src=\"").append(AboutLinksRoutes.aboutLogoUrl).append("\" />"); } String patchesVersion = Utils.getPatchesReleaseVersion(); @@ -103,29 +113,29 @@ public class ReVancedAboutPreference extends Preference { builder.append("

") // Replace hyphens with non breaking dashes so the version number does not break lines. - .append(useNonBreakingHyphens(str("revanced_settings_about_links_body", patchesVersion))) + .append(useNonBreakingHyphens(getString("revanced_settings_about_links_body", patchesVersion))) .append("

"); // Add a disclaimer if using a dev release. if (patchesVersion.contains("dev")) { builder.append("

") // English text 'Pre-release' can break lines. - .append(useNonBreakingHyphens(str("revanced_settings_about_links_dev_header"))) + .append(useNonBreakingHyphens(getString("revanced_settings_about_links_dev_header"))) .append("

"); builder.append("

") - .append(str("revanced_settings_about_links_dev_body")) + .append(getString("revanced_settings_about_links_dev_body")) .append("

"); } builder.append("

") - .append(str("revanced_settings_about_links_header")) + .append(getString("revanced_settings_about_links_header")) .append("

"); builder.append("
"); - for (WebLink social : socialLinks) { + for (WebLink link : aboutLinks) { builder.append("
"); - builder.append(String.format("%s", social.url, social.name)); + builder.append(String.format("%s", link.url, link.name)); builder.append("
"); } builder.append("
"); @@ -137,25 +147,44 @@ public class ReVancedAboutPreference extends Preference { { setOnPreferenceClickListener(pref -> { // Show a progress spinner if the social links are not fetched yet. - if (!SocialLinksRoutes.hasFetchedLinks() && Utils.isNetworkConnected()) { + if (!AboutLinksRoutes.hasFetchedLinks() && Utils.isNetworkConnected()) { + // Show a progress spinner, but only if the api fetch takes more than a half a second. + final long delayToShowProgressSpinner = 500; ProgressDialog progress = new ProgressDialog(getContext()); progress.setProgressStyle(ProgressDialog.STYLE_SPINNER); - progress.show(); - Utils.runOnBackgroundThread(() -> fetchLinksAndShowDialog(progress)); + + Handler handler = new Handler(Looper.getMainLooper()); + Runnable showDialogRunnable = progress::show; + handler.postDelayed(showDialogRunnable, delayToShowProgressSpinner); + + Utils.runOnBackgroundThread(() -> + fetchLinksAndShowDialog(handler, showDialogRunnable, progress)); } else { // No network call required and can run now. - fetchLinksAndShowDialog(null); + fetchLinksAndShowDialog(null, null, null); } return false; }); } - private void fetchLinksAndShowDialog(@Nullable ProgressDialog progress) { - WebLink[] socialLinks = SocialLinksRoutes.fetchSocialLinks(); - String htmlDialog = createDialogHtml(socialLinks); + private void fetchLinksAndShowDialog(@Nullable Handler handler, + Runnable showDialogRunnable, + @Nullable ProgressDialog progress) { + WebLink[] links = AboutLinksRoutes.fetchAboutLinks(); + String htmlDialog = createDialogHtml(links); + + // Enable to randomly force a delay to debug the spinner logic. + final boolean debugSpinnerDelayLogic = false; + //noinspection ConstantConditions + if (debugSpinnerDelayLogic && handler != null && Math.random() < 0.5f) { + Utils.doNothingForDuration((long) (Math.random() * 4000)); + } Utils.runOnMainThreadNowOrLater(() -> { + if (handler != null) { + handler.removeCallbacks(showDialogRunnable); + } if (progress != null) { progress.dismiss(); } @@ -224,7 +253,7 @@ class WebViewDialog extends Dialog { class WebLink { final boolean preferred; - final String name; + String name; final String url; WebLink(JSONObject json) throws JSONException { @@ -243,7 +272,7 @@ class WebLink { @NonNull @Override public String toString() { - return "ReVancedSocialLink{" + + return "WebLink{" + "preferred=" + preferred + ", name='" + name + '\'' + ", url='" + url + '\'' + @@ -251,25 +280,21 @@ class WebLink { } } -class SocialLinksRoutes { +class AboutLinksRoutes { /** - * Simple link to the website donate page, - * rather than fetching and parsing the donation links using the API. + * Backup icon url if the API call fails. */ - public static final WebLink DONATE_LINK = new WebLink(true, - sf("revanced_settings_about_links_donate").toString(), - "https://revanced.app/donate"); + public static volatile String aboutLogoUrl = "https://revanced.app/favicon.ico"; /** * Links to use if fetch links api call fails. */ private static final WebLink[] NO_CONNECTION_STATIC_LINKS = { - new WebLink(true, "ReVanced.app", "https://revanced.app"), - DONATE_LINK, + new WebLink(true, "ReVanced.app", "https://revanced.app") }; - private static final String SOCIAL_LINKS_PROVIDER = "https://api.revanced.app/v2"; - private static final Route.CompiledRoute GET_SOCIAL = new Route(GET, "/socials").compile(); + private static final String SOCIAL_LINKS_PROVIDER = "https://api.revanced.app/v4"; + private static final Route.CompiledRoute GET_SOCIAL = new Route(GET, "/about").compile(); @Nullable private static volatile WebLink[] fetchedLinks; @@ -278,7 +303,7 @@ class SocialLinksRoutes { return fetchedLinks != null; } - static WebLink[] fetchSocialLinks() { + static WebLink[] fetchAboutLinks() { try { if (hasFetchedLinks()) return fetchedLinks; @@ -298,11 +323,22 @@ class SocialLinksRoutes { } JSONObject json = Requester.parseJSONObjectAndDisconnect(connection); - JSONArray socials = json.getJSONArray("socials"); + aboutLogoUrl = json.getJSONObject("branding").getString("logo"); List links = new ArrayList<>(); - links.add(DONATE_LINK); // Show donate link first. + JSONArray donations = json.getJSONObject("donations").getJSONArray("links"); + for (int i = 0, length = donations.length(); i < length; i++) { + WebLink link = new WebLink(donations.getJSONObject(i)); + if (link.preferred) { + // This could be localized, but TikTok does not support localized resources. + // All link names returned by the api are also non localized. + link.name = "Donate"; + links.add(link); + } + } + + JSONArray socials = json.getJSONArray("socials"); for (int i = 0, length = socials.length(); i < length; i++) { WebLink link = new WebLink(socials.getJSONObject(i)); links.add(link); diff --git a/extensions/shared/src/main/java/app/revanced/extension/tiktok/settings/preference/ReVancedTikTokAboutPreference.java b/extensions/shared/src/main/java/app/revanced/extension/tiktok/settings/preference/ReVancedTikTokAboutPreference.java new file mode 100644 index 000000000..f20a0b635 --- /dev/null +++ b/extensions/shared/src/main/java/app/revanced/extension/tiktok/settings/preference/ReVancedTikTokAboutPreference.java @@ -0,0 +1,56 @@ +package app.revanced.extension.tiktok.settings.preference; + +import android.content.Context; +import android.util.AttributeSet; + +import java.util.Map; + +import app.revanced.extension.shared.Logger; +import app.revanced.extension.shared.settings.preference.ReVancedAboutPreference; + +@SuppressWarnings("unused") +public class ReVancedTikTokAboutPreference extends ReVancedAboutPreference { + + /** + * Because resources cannot be added to TikTok, + * these strings are copied from the shared strings.xml file. + * + * Changes here must also be made in strings.xml + */ + private final Map aboutStrings = Map.of( + "revanced_settings_about_links_body", "You are using ReVanced Patches version %s", + "revanced_settings_about_links_dev_header", "Note", + "revanced_settings_about_links_dev_body", "This version is a pre-release and you may experience unexpected issues", + "revanced_settings_about_links_header", "Official links" + ); + + { + //noinspection deprecation + setTitle("About"); + } + + public ReVancedTikTokAboutPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + public ReVancedTikTokAboutPreference(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + public ReVancedTikTokAboutPreference(Context context, AttributeSet attrs) { + super(context, attrs); + } + public ReVancedTikTokAboutPreference(Context context) { + super(context); + } + + @Override + protected String getString(String key, Object ... args) { + String format = aboutStrings.get(key); + + if (format == null) { + Logger.printException(() -> "Unknown key: " + key); + return ""; + } + + return String.format(format, args); + } +} diff --git a/extensions/shared/src/main/java/app/revanced/extension/tiktok/settings/preference/categories/ExtensionPreferenceCategory.java b/extensions/shared/src/main/java/app/revanced/extension/tiktok/settings/preference/categories/ExtensionPreferenceCategory.java index ad49df688..60d7983ea 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/tiktok/settings/preference/categories/ExtensionPreferenceCategory.java +++ b/extensions/shared/src/main/java/app/revanced/extension/tiktok/settings/preference/categories/ExtensionPreferenceCategory.java @@ -4,13 +4,14 @@ import android.content.Context; import android.preference.PreferenceScreen; import app.revanced.extension.shared.settings.BaseSettings; +import app.revanced.extension.tiktok.settings.preference.ReVancedTikTokAboutPreference; import app.revanced.extension.tiktok.settings.preference.TogglePreference; @SuppressWarnings("deprecation") public class ExtensionPreferenceCategory extends ConditionalPreferenceCategory { public ExtensionPreferenceCategory(Context context, PreferenceScreen screen) { super(context, screen); - setTitle("Extension"); + setTitle("Miscellaneous"); } @Override @@ -20,6 +21,8 @@ public class ExtensionPreferenceCategory extends ConditionalPreferenceCategory { @Override public void addPreferences(Context context) { + addPreference(new ReVancedTikTokAboutPreference(context)); + addPreference(new TogglePreference(context, "Enable debug log", "Show extension debug log.", diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/ThemeHelper.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/ThemeHelper.java index 6e0ea5974..9606587dd 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/ThemeHelper.java +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/ThemeHelper.java @@ -82,4 +82,12 @@ public class ThemeHelper { } return Utils.getResourceColor(colorString); } + + public static int getBackgroundColor() { + return isDarkTheme() ? getDarkThemeColor() : getLightThemeColor(); + } + + public static int getForegroundColor() { + return isDarkTheme() ? getLightThemeColor() : getDarkThemeColor(); + } } diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/VideoInformation.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/VideoInformation.java index 6b64ade12..6df9a9095 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/VideoInformation.java +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/VideoInformation.java @@ -1,14 +1,14 @@ package app.revanced.extension.youtube.patches; import androidx.annotation.NonNull; -import app.revanced.extension.youtube.patches.playback.speed.RememberPlaybackSpeedPatch; -import app.revanced.extension.youtube.shared.VideoState; -import app.revanced.extension.shared.Logger; -import app.revanced.extension.shared.Utils; import java.lang.ref.WeakReference; import java.util.Objects; +import app.revanced.extension.shared.Logger; +import app.revanced.extension.shared.Utils; +import app.revanced.extension.youtube.shared.VideoState; + /** * Hooking class for the current playing video. * @noinspection unused @@ -120,6 +120,16 @@ public final class VideoInformation { } } + /** + * Injection point. + */ + public static void videoSpeedChanged(float currentVideoSpeed) { + if (playbackSpeed != currentVideoSpeed) { + Logger.printDebug(() -> "Video speed changed: " + currentVideoSpeed); + playbackSpeed = currentVideoSpeed; + } + } + /** * Injection point. * Called when user selects a playback speed. @@ -131,18 +141,6 @@ public final class VideoInformation { playbackSpeed = userSelectedPlaybackSpeed; } - /** - * Overrides the current playback speed. - *

- * Used exclusively by {@link RememberPlaybackSpeedPatch} - */ - public static void overridePlaybackSpeed(float speedOverride) { - if (playbackSpeed != speedOverride) { - Logger.printDebug(() -> "Overriding playback speed to: " + speedOverride); - playbackSpeed = speedOverride; - } - } - /** * Injection point. * diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/playback/speed/RememberPlaybackSpeedPatch.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/playback/speed/RememberPlaybackSpeedPatch.java index 3c504df5d..a6c86477c 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/playback/speed/RememberPlaybackSpeedPatch.java +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/playback/speed/RememberPlaybackSpeedPatch.java @@ -12,6 +12,8 @@ public final class RememberPlaybackSpeedPatch { private static final long TOAST_DELAY_MILLISECONDS = 750; + private static volatile boolean newVideoStarted; + private static long lastTimeSpeedChanged; /** @@ -19,7 +21,7 @@ public final class RememberPlaybackSpeedPatch { */ public static void newVideoStarted(VideoInformation.PlaybackController ignoredPlayerController) { Logger.printDebug(() -> "newVideoStarted"); - VideoInformation.overridePlaybackSpeed(Settings.PLAYBACK_SPEED_DEFAULT.get()); + newVideoStarted = true; } /** @@ -29,42 +31,56 @@ public final class RememberPlaybackSpeedPatch { * @param playbackSpeed The playback speed the user selected */ public static void userSelectedPlaybackSpeed(float playbackSpeed) { - if (Settings.REMEMBER_PLAYBACK_SPEED_LAST_SELECTED.get()) { - // With the 0.05x menu, if the speed is set by integrations to higher than 2.0x - // then the menu will allow increasing without bounds but the max speed is - // still capped to under 8.0x. - playbackSpeed = Math.min(playbackSpeed, CustomPlaybackSpeedPatch.PLAYBACK_SPEED_MAXIMUM - 0.05f); + try { + if (Settings.REMEMBER_PLAYBACK_SPEED_LAST_SELECTED.get()) { + // With the 0.05x menu, if the speed is set by integrations to higher than 2.0x + // then the menu will allow increasing without bounds but the max speed is + // still capped to under 8.0x. + playbackSpeed = Math.min(playbackSpeed, CustomPlaybackSpeedPatch.PLAYBACK_SPEED_MAXIMUM - 0.05f); - // Prevent toast spamming if using the 0.05x adjustments. - // Show exactly one toast after the user stops interacting with the speed menu. - final long now = System.currentTimeMillis(); - lastTimeSpeedChanged = now; + // Prevent toast spamming if using the 0.05x adjustments. + // Show exactly one toast after the user stops interacting with the speed menu. + final long now = System.currentTimeMillis(); + lastTimeSpeedChanged = now; - final float finalPlaybackSpeed = playbackSpeed; - Utils.runOnMainThreadDelayed(() -> { - if (lastTimeSpeedChanged != now) { - // The user made additional speed adjustments and this call is outdated. - return; - } + final float finalPlaybackSpeed = playbackSpeed; + Utils.runOnMainThreadDelayed(() -> { + if (lastTimeSpeedChanged != now) { + // The user made additional speed adjustments and this call is outdated. + return; + } - if (Settings.PLAYBACK_SPEED_DEFAULT.get() == finalPlaybackSpeed) { - // User changed to a different speed and immediately changed back. - // Or the user is going past 8.0x in the glitched out 0.05x menu. - return; - } - Settings.PLAYBACK_SPEED_DEFAULT.save(finalPlaybackSpeed); + if (Settings.PLAYBACK_SPEED_DEFAULT.get() == finalPlaybackSpeed) { + // User changed to a different speed and immediately changed back. + // Or the user is going past 8.0x in the glitched out 0.05x menu. + return; + } + Settings.PLAYBACK_SPEED_DEFAULT.save(finalPlaybackSpeed); - Utils.showToastLong(str("revanced_remember_playback_speed_toast", (finalPlaybackSpeed + "x"))); - }, TOAST_DELAY_MILLISECONDS); + Utils.showToastLong(str("revanced_remember_playback_speed_toast", (finalPlaybackSpeed + "x"))); + }, TOAST_DELAY_MILLISECONDS); + } + } catch (Exception ex) { + Logger.printException(() -> "userSelectedPlaybackSpeed failure", ex); } } /** * Injection point. - * Overrides the video speed. Called after video loads, and immediately after user selects a different playback speed + * Overrides the video speed. Called after video loads, + * and immediately after the user selects a different playback speed. */ public static float getPlaybackSpeedOverride() { - return VideoInformation.getPlaybackSpeed(); + if (newVideoStarted) { + newVideoStarted = false; + + final float defaultSpeed = Settings.PLAYBACK_SPEED_DEFAULT.get(); + if (defaultSpeed > 0) { + return defaultSpeed; + } + } + + return -2.0f; } -} +} \ No newline at end of file diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/spoof/ClientType.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/spoof/ClientType.java index de6a2a12c..2c1f0d55f 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/spoof/ClientType.java +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/spoof/ClientType.java @@ -8,6 +8,17 @@ import android.os.Build; import androidx.annotation.Nullable; public enum ClientType { + // Specific purpose for age restricted, or private videos, because the iOS client is not logged in. + ANDROID_VR(28, + "Quest 3", + "12", + "com.google.android.apps.youtube.vr.oculus/1.56.21 (Linux; U; Android 12; GB) gzip", + "32", // Android 12.1 + "1.56.21", + "ANDROID_VR", + true + ), + // Specific for kids videos. // https://dumps.tadiphone.dev/dumps/oculus/eureka IOS(5, // iPhone 15 supports AV1 hardware decoding. @@ -25,14 +36,9 @@ public enum ClientType { null, // Version number should be a valid iOS release. // https://www.ipa4fun.com/history/185230 - "19.10.7" - ), - ANDROID_VR(28, - "Quest 3", - "12", - "com.google.android.apps.youtube.vr.oculus/1.56.21 (Linux; U; Android 12; GB) gzip", - "32", // Android 12.1 - "1.56.21" + "19.10.7", + "IOS", + false ); /** @@ -44,7 +50,7 @@ public enum ClientType { /** * Device model, equivalent to {@link Build#MODEL} (System property: ro.product.model) */ - public final String model; + public final String deviceModel; /** * Device OS version. @@ -63,17 +69,37 @@ public enum ClientType { @Nullable public final String androidSdkVersion; + /** + * Client name. + */ + public final String clientName; + /** * App version. */ - public final String appVersion; + public final String clientVersion; - ClientType(int id, String model, String osVersion, String userAgent, @Nullable String androidSdkVersion, String appVersion) { + /** + * If the client can access the API logged in. + */ + public final boolean canLogin; + + ClientType(int id, + String deviceModel, + String osVersion, + String userAgent, + @Nullable String androidSdkVersion, + String clientVersion, + String clientName, + boolean canLogin + ) { this.id = id; - this.model = model; + this.deviceModel = deviceModel; this.osVersion = osVersion; this.userAgent = userAgent; this.androidSdkVersion = androidSdkVersion; - this.appVersion = appVersion; + this.clientVersion = clientVersion; + this.clientName = clientName; + this.canLogin = canLogin; } } diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/spoof/requests/PlayerRoutes.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/spoof/requests/PlayerRoutes.java index 364dc173a..3388892cc 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/spoof/requests/PlayerRoutes.java +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/spoof/requests/PlayerRoutes.java @@ -12,15 +12,13 @@ import app.revanced.extension.youtube.requests.Requester; import app.revanced.extension.youtube.requests.Route; final class PlayerRoutes { - private static final String YT_API_URL = "https://youtubei.googleapis.com/youtubei/v1/"; - static final Route.CompiledRoute GET_STREAMING_DATA = new Route( Route.Method.POST, "player" + "?fields=streamingData" + "&alt=proto" ).compile(); - + private static final String YT_API_URL = "https://youtubei.googleapis.com/youtubei/v1/"; /** * TCP connection and HTTP read timeout */ @@ -30,15 +28,15 @@ final class PlayerRoutes { } static String createInnertubeBody(ClientType clientType) { - JSONObject innerTubeBody = new JSONObject(); + JSONObject innerTubeBody = new JSONObject(); try { JSONObject context = new JSONObject(); JSONObject client = new JSONObject(); client.put("clientName", clientType.name()); - client.put("clientVersion", clientType.appVersion); - client.put("deviceModel", clientType.model); + client.put("clientVersion", clientType.clientVersion); + client.put("deviceModel", clientType.deviceModel); client.put("osVersion", clientType.osVersion); if (clientType.androidSdkVersion != null) { client.put("androidSdkVersion", clientType.androidSdkVersion); @@ -57,7 +55,9 @@ final class PlayerRoutes { return innerTubeBody.toString(); } - /** @noinspection SameParameterValue*/ + /** + * @noinspection SameParameterValue + */ static HttpURLConnection getPlayerResponseConnectionFromRoute(Route.CompiledRoute route, ClientType clientType) throws IOException { var connection = Requester.getConnectionFromCompiledRoute(YT_API_URL, route); diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/spoof/requests/StreamingDataRequest.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/spoof/requests/StreamingDataRequest.java index e66f4d885..0c09e0fa7 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/spoof/requests/StreamingDataRequest.java +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/spoof/requests/StreamingDataRequest.java @@ -28,7 +28,7 @@ import app.revanced.extension.youtube.settings.Settings; /** * Video streaming data. Fetching is tied to the behavior YT uses, * where this class fetches the streams only when YT fetches. - * + *

* Effectively the cache expiration of these fetches is the same as the stock app, * since the stock app would not use expired streams and therefor * the extension replace stream hook is called only if YT @@ -37,38 +37,20 @@ import app.revanced.extension.youtube.settings.Settings; public class StreamingDataRequest { private static final ClientType[] CLIENT_ORDER_TO_USE; - - static { - ClientType[] allClientTypes = ClientType.values(); - ClientType preferredClient = Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get(); - - CLIENT_ORDER_TO_USE = new ClientType[allClientTypes.length]; - CLIENT_ORDER_TO_USE[0] = preferredClient; - - int i = 1; - for (ClientType c : allClientTypes) { - if (c != preferredClient) { - CLIENT_ORDER_TO_USE[i++] = c; - } - } - } - + private static final String AUTHORIZATION_HEADER = "Authorization"; private static final String[] REQUEST_HEADER_KEYS = { - "Authorization", // Available only to logged in users. + AUTHORIZATION_HEADER, // Available only to logged-in users. "X-GOOG-API-FORMAT-VERSION", "X-Goog-Visitor-Id" }; - /** * TCP connection and HTTP read timeout. */ private static final int HTTP_TIMEOUT_MILLISECONDS = 10 * 1000; - /** * Any arbitrarily large value, but must be at least twice {@link #HTTP_TIMEOUT_MILLISECONDS} */ private static final int MAX_MILLISECONDS_TO_WAIT_FOR_FETCH = 20 * 1000; - private static final Map cache = Collections.synchronizedMap( new LinkedHashMap<>(100) { /** @@ -86,8 +68,32 @@ public class StreamingDataRequest { } }); + static { + ClientType[] allClientTypes = ClientType.values(); + ClientType preferredClient = Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get(); + + CLIENT_ORDER_TO_USE = new ClientType[allClientTypes.length]; + CLIENT_ORDER_TO_USE[0] = preferredClient; + + int i = 1; + for (ClientType c : allClientTypes) { + if (c != preferredClient) { + CLIENT_ORDER_TO_USE[i++] = c; + } + } + } + + private final String videoId; + private final Future future; + + private StreamingDataRequest(String videoId, Map playerHeaders) { + Objects.requireNonNull(playerHeaders); + this.videoId = videoId; + this.future = Utils.submitOnBackgroundThread(() -> fetch(videoId, playerHeaders)); + } + public static void fetchRequest(String videoId, Map fetchHeaders) { - // Always fetch, even if there is a existing request for the same video. + // Always fetch, even if there is an existing request for the same video. cache.put(videoId, new StreamingDataRequest(videoId, fetchHeaders)); } @@ -119,6 +125,10 @@ public class StreamingDataRequest { connection.setReadTimeout(HTTP_TIMEOUT_MILLISECONDS); for (String key : REQUEST_HEADER_KEYS) { + if (!clientType.canLogin && key.equals(AUTHORIZATION_HEADER)) { + continue; + } + String value = playerHeaders.get(key); if (value != null) { connection.setRequestProperty(key, value); @@ -186,15 +196,6 @@ public class StreamingDataRequest { return null; } - private final String videoId; - private final Future future; - - private StreamingDataRequest(String videoId, Map playerHeaders) { - Objects.requireNonNull(playerHeaders); - this.videoId = videoId; - this.future = Utils.submitOnBackgroundThread(() -> fetch(videoId, playerHeaders)); - } - public boolean fetchCompleted() { return future.isDone(); } diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/theme/SeekbarColorPatch.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/theme/SeekbarColorPatch.java index aea5c227c..e89086cc6 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/theme/SeekbarColorPatch.java +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/theme/SeekbarColorPatch.java @@ -2,9 +2,12 @@ package app.revanced.extension.youtube.patches.theme; import static app.revanced.extension.shared.StringRef.str; +import android.content.res.Resources; import android.graphics.Color; +import android.graphics.drawable.AnimatedVectorDrawable; import java.util.Arrays; +import java.util.Locale; import app.revanced.extension.shared.Logger; import app.revanced.extension.shared.Utils; @@ -16,7 +19,8 @@ public final class SeekbarColorPatch { private static final boolean SEEKBAR_CUSTOM_COLOR_ENABLED = Settings.SEEKBAR_CUSTOM_COLOR.get(); /** - * Default color of the seekbar. + * Default color of the litho seekbar. + * Differs slightly from the default custom seekbar color setting. */ private static final int ORIGINAL_SEEKBAR_COLOR = 0xFFFF0000; @@ -72,12 +76,76 @@ public final class SeekbarColorPatch { return seekbarColor; } + /** + * Injection point + */ public static boolean playerSeekbarGradientEnabled(boolean original) { if (SEEKBAR_CUSTOM_COLOR_ENABLED) return false; return original; } + /** + * Injection point + */ + public static boolean useLotteLaunchSplashScreen(boolean original) { + Logger.printDebug(() -> "useLotteLaunchSplashScreen original: " + original); + + if (SEEKBAR_CUSTOM_COLOR_ENABLED) return false; + + return original; + } + + private static int colorChannelTo3Bits(int channel8Bits) { + final float channel3Bits = channel8Bits * 7 / 255f; + + // If a color channel is near zero, then allow rounding up so values between + // 0x12 and 0x23 will show as 0x24. But always round down when the channel is + // near full saturation, otherwise rounding to nearest will cause all values + // between 0xEC and 0xFE to always show as full saturation (0xFF). + return channel3Bits < 6 + ? Math.round(channel3Bits) + : (int) channel3Bits; + } + + private static String get9BitStyleIdentifier(int color24Bit) { + final int r3 = colorChannelTo3Bits(Color.red(color24Bit)); + final int g3 = colorChannelTo3Bits(Color.green(color24Bit)); + final int b3 = colorChannelTo3Bits(Color.blue(color24Bit)); + + return String.format(Locale.US, "splash_seekbar_color_style_%d_%d_%d", r3, g3, b3); + } + + /** + * Injection point + */ + public static void setSplashAnimationDrawableTheme(AnimatedVectorDrawable vectorDrawable) { + // Alternatively a ColorMatrixColorFilter can be used to change the color of the drawable + // without using any styles, but a color filter cannot selectively change the seekbar + // while keeping the red YT logo untouched. + // Even if the seekbar color xml value is changed to a completely different color (such as green), + // a color filter still cannot be selectively applied when the drawable has more than 1 color. + try { + String seekbarStyle = get9BitStyleIdentifier(seekbarColor); + Logger.printDebug(() -> "Using splash seekbar style: " + seekbarStyle); + + final int styleIdentifierDefault = Utils.getResourceIdentifier( + seekbarStyle, + "style" + ); + if (styleIdentifierDefault == 0) { + throw new RuntimeException("Seekbar style not found: " + seekbarStyle); + } + + Resources.Theme theme = Utils.getContext().getResources().newTheme(); + theme.applyStyle(styleIdentifierDefault, true); + + vectorDrawable.applyTheme(theme); + } catch (Exception ex) { + Logger.printException(() -> "setSplashAnimationDrawableTheme failure", ex); + } + } + /** * Injection point. * @@ -189,4 +257,4 @@ public final class SeekbarColorPatch { private static float clamp(float value, float lower, float upper) { return Math.max(lower, Math.min(value, upper)); } -} +} \ No newline at end of file diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/LicenseActivityHook.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/LicenseActivityHook.java index acf565712..51409e2e4 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/LicenseActivityHook.java +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/LicenseActivityHook.java @@ -7,6 +7,7 @@ import android.view.ViewGroup; import android.widget.ImageButton; import android.widget.TextView; import app.revanced.extension.shared.Logger; +import app.revanced.extension.shared.settings.preference.AbstractPreferenceFragment; import app.revanced.extension.youtube.ThemeHelper; import app.revanced.extension.youtube.settings.preference.ReVancedPreferenceFragment; import app.revanced.extension.youtube.settings.preference.ReturnYouTubeDislikePreferenceFragment; @@ -39,7 +40,7 @@ public class LicenseActivityHook { PreferenceFragment fragment; String toolbarTitleResourceName; - String dataString = licenseActivity.getIntent().getDataString(); + String dataString = Objects.requireNonNull(licenseActivity.getIntent().getDataString()); switch (dataString) { case "revanced_sb_settings_intent": toolbarTitleResourceName = "revanced_sb_settings_title"; @@ -59,12 +60,14 @@ public class LicenseActivityHook { } setToolbarTitle(licenseActivity, toolbarTitleResourceName); + + //noinspection deprecation licenseActivity.getFragmentManager() .beginTransaction() .replace(getResourceIdentifier("revanced_settings_fragments", "id"), fragment) .commit(); } catch (Exception ex) { - Logger.printException(() -> "onCreate failure", ex); + Logger.printException(() -> "initialize failure", ex); } } @@ -80,11 +83,7 @@ public class LicenseActivityHook { ViewGroup toolbar = activity.findViewById(getToolbarResourceId()); ImageButton imageButton = Objects.requireNonNull(getChildView(toolbar, false, view -> view instanceof ImageButton)); - final int backButtonResource = getResourceIdentifier(ThemeHelper.isDarkTheme() - ? "yt_outline_arrow_left_white_24" - : "yt_outline_arrow_left_black_24", - "drawable"); - imageButton.setImageDrawable(activity.getResources().getDrawable(backButtonResource)); + imageButton.setImageDrawable(AbstractPreferenceFragment.getBackButtonDrawable()); imageButton.setOnClickListener(view -> activity.onBackPressed()); } diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/Settings.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/Settings.java index 9b7232368..e12cdf258 100644 --- a/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/Settings.java +++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/Settings.java @@ -20,7 +20,6 @@ import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.StillIm import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.ThumbnailOption; import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.ThumbnailStillTime; import app.revanced.extension.youtube.patches.spoof.ClientType; -import app.revanced.extension.youtube.patches.spoof.SpoofAppVersionPatch; import app.revanced.extension.youtube.patches.spoof.SpoofVideoStreamsPatch; import app.revanced.extension.youtube.sponsorblock.SponsorBlockSettings; @@ -380,7 +379,7 @@ public class Settings extends BaseSettings { migrateOldSettingToNew(DEPRECATED_HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER, HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER); // Old spoof versions that no longer work reliably. - if (SpoofAppVersionPatch.isSpoofingToLessThan(SPOOF_APP_VERSION_TARGET.defaultValue)) { + if (SPOOF_APP_VERSION_TARGET.get().compareTo(SPOOF_APP_VERSION_TARGET.defaultValue) < 0) { Logger.printInfo(() -> "Resetting spoof app version target"); SPOOF_APP_VERSION_TARGET.resetToDefault(); } diff --git a/gradle.properties b/gradle.properties index 5b4b1aa29..77b90438c 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.1.0 +version = 5.2.0-dev.7 diff --git a/patches/api/patches.api b/patches/api/patches.api index 1da26f5b2..2ba4d9a4e 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -1328,6 +1328,7 @@ public final class app/revanced/patches/youtube/misc/playservice/VersionCheckPat public static final fun is_19_36_or_greater ()Z public static final fun is_19_41_or_greater ()Z public static final fun is_19_43_or_greater ()Z + public static final fun is_19_46_or_greater ()Z } public final class app/revanced/patches/youtube/misc/privacy/RemoveTrackingQueryParameterPatchKt { @@ -1369,11 +1370,9 @@ public final class app/revanced/patches/youtube/shared/FingerprintsKt { } public final class app/revanced/patches/youtube/video/information/VideoInformationPatchKt { - public static final fun getSetPlaybackSpeedClassFieldReference ()Ljava/lang/String; - public static final fun getSetPlaybackSpeedContainerClassFieldReference ()Ljava/lang/String; - public static final fun getSetPlaybackSpeedMethodReference ()Ljava/lang/String; public static final fun getVideoInformationPatch ()Lapp/revanced/patcher/patch/BytecodePatch; public static final fun userSelectedPlaybackSpeedHook (Ljava/lang/String;Ljava/lang/String;)V + public static final fun videoSpeedChangedHook (Ljava/lang/String;Ljava/lang/String;)V public static final fun videoTimeHook (Ljava/lang/String;Ljava/lang/String;)V } diff --git a/patches/src/main/kotlin/app/revanced/patches/myexpenses/misc/pro/UnlockProPatch.kt b/patches/src/main/kotlin/app/revanced/patches/myexpenses/misc/pro/UnlockProPatch.kt index 4365c2c2c..e8720d712 100644 --- a/patches/src/main/kotlin/app/revanced/patches/myexpenses/misc/pro/UnlockProPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/myexpenses/misc/pro/UnlockProPatch.kt @@ -7,7 +7,7 @@ import app.revanced.patcher.patch.bytecodePatch val unlockProPatch = bytecodePatch( name = "Unlock pro", ) { - compatibleWith("org.totschnig.myexpenses") + compatibleWith("org.totschnig.myexpenses"("3.4.9")) execute { isEnabledFingerprint.method.addInstructions( diff --git a/patches/src/main/kotlin/app/revanced/patches/vsco/misc/pro/UnlockProPatch.kt b/patches/src/main/kotlin/app/revanced/patches/vsco/misc/pro/UnlockProPatch.kt index 2135b1ec4..be0278dd9 100644 --- a/patches/src/main/kotlin/app/revanced/patches/vsco/misc/pro/UnlockProPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/vsco/misc/pro/UnlockProPatch.kt @@ -3,9 +3,9 @@ package app.revanced.patches.vsco.misc.pro import app.revanced.patcher.extensions.InstructionExtensions.addInstruction import app.revanced.patcher.patch.bytecodePatch +@Deprecated("This patch is deprecated because it does not work anymore and will be removed in the future.") @Suppress("unused") val unlockProPatch = bytecodePatch( - name = "Unlock pro", description = "Unlocks pro features.", ) { compatibleWith("com.vsco.cam"("345")) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/ad/general/HideAdsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/ad/general/HideAdsPatch.kt index 3a061d7ba..88e01f0be 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/ad/general/HideAdsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/ad/general/HideAdsPatch.kt @@ -76,6 +76,7 @@ val hideAdsPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/HideGetPremiumPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/HideGetPremiumPatch.kt index 000d697b0..11bad3c65 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/HideGetPremiumPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/HideGetPremiumPatch.kt @@ -32,6 +32,7 @@ val hideGetPremiumPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/ad/video/VideoAdsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/ad/video/VideoAdsPatch.kt index 878bc9a49..dbbca9ac0 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/ad/video/VideoAdsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/ad/video/VideoAdsPatch.kt @@ -30,6 +30,7 @@ val videoAdsPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/copyvideourl/CopyVideoUrlPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/copyvideourl/CopyVideoUrlPatch.kt index 9bb977e30..81fd32e41 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/copyvideourl/CopyVideoUrlPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/copyvideourl/CopyVideoUrlPatch.kt @@ -60,6 +60,7 @@ val copyVideoUrlPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/dialog/RemoveViewerDiscretionDialogPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/dialog/RemoveViewerDiscretionDialogPatch.kt index d48783191..aaa754e06 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/dialog/RemoveViewerDiscretionDialogPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/dialog/RemoveViewerDiscretionDialogPatch.kt @@ -31,6 +31,7 @@ val removeViewerDiscretionDialogPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/downloads/DownloadsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/downloads/DownloadsPatch.kt index 8fa2dc77f..b108f9642 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/downloads/DownloadsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/downloads/DownloadsPatch.kt @@ -75,6 +75,7 @@ val downloadsPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/DisablePreciseSeekingGesturePatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/DisablePreciseSeekingGesturePatch.kt index 0a85ba3b0..5cabd23ad 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/DisablePreciseSeekingGesturePatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/DisablePreciseSeekingGesturePatch.kt @@ -30,6 +30,7 @@ val disablePreciseSeekingGesturePatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSeekbarTappingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSeekbarTappingPatch.kt index 1e0afe342..75a09507b 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSeekbarTappingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSeekbarTappingPatch.kt @@ -33,6 +33,7 @@ val enableSeekbarTappingPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSlideToSeekPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSlideToSeekPatch.kt index 7becb4995..d947bc6de 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSlideToSeekPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSlideToSeekPatch.kt @@ -43,6 +43,7 @@ val enableSlideToSeekPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/SeekbarThumbnailsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/SeekbarThumbnailsPatch.kt index eff45fd4b..9f0fea460 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/SeekbarThumbnailsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/SeekbarThumbnailsPatch.kt @@ -36,6 +36,7 @@ val seekbarThumbnailsPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ) ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/SwipeControlsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/SwipeControlsPatch.kt index 494d8f262..546027d3e 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/SwipeControlsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/SwipeControlsPatch.kt @@ -72,6 +72,7 @@ val swipeControlsPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/AutoCaptionsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/AutoCaptionsPatch.kt index 16d357716..6a2306eef 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/AutoCaptionsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/AutoCaptionsPatch.kt @@ -29,6 +29,7 @@ val autoCaptionsPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt index ea60215cc..e2549145d 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/CustomBrandingPatch.kt @@ -50,6 +50,7 @@ val customBrandingPatch = resourcePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt index c6750bb56..a69291c9e 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/branding/header/ChangeHeaderPatch.kt @@ -48,6 +48,7 @@ val changeHeaderPatch = resourcePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ) ) 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 abb0ecec3..e8e191aea 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 @@ -29,6 +29,7 @@ val hideButtonsPatch = resourcePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/NavigationButtonsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/NavigationButtonsPatch.kt index cc49eb05a..3fd159933 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/NavigationButtonsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/NavigationButtonsPatch.kt @@ -43,6 +43,7 @@ val navigationButtonsPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/overlay/HidePlayerOverlayButtonsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/overlay/HidePlayerOverlayButtonsPatch.kt index 6fed17b09..d59fe095e 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/overlay/HidePlayerOverlayButtonsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/overlay/HidePlayerOverlayButtonsPatch.kt @@ -61,6 +61,7 @@ val hidePlayerOverlayButtonsPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/HideEndscreenCardsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/HideEndscreenCardsPatch.kt index 3a21a5080..f3aff15ec 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/HideEndscreenCardsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/HideEndscreenCardsPatch.kt @@ -63,6 +63,7 @@ val hideEndscreenCardsPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/fullscreenambientmode/DisableFullscreenAmbientModePatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/fullscreenambientmode/DisableFullscreenAmbientModePatch.kt index 12fdc7500..83ab67c44 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/fullscreenambientmode/DisableFullscreenAmbientModePatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/fullscreenambientmode/DisableFullscreenAmbientModePatch.kt @@ -36,6 +36,7 @@ val disableFullscreenAmbientModePatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/general/HideLayoutComponentsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/general/HideLayoutComponentsPatch.kt index 5f59fca55..64fd674ad 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/general/HideLayoutComponentsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/general/HideLayoutComponentsPatch.kt @@ -129,6 +129,7 @@ val hideLayoutComponentsPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/HideInfoCardsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/HideInfoCardsPatch.kt index 8ce56962e..d714566b3 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/HideInfoCardsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/HideInfoCardsPatch.kt @@ -64,6 +64,7 @@ val hideInfoCardsPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) 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 674eabc14..3477000b1 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 @@ -31,6 +31,7 @@ val hidePlayerFlyoutMenuPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/rollingnumber/DisableRollingNumberAnimationPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/rollingnumber/DisableRollingNumberAnimationPatch.kt index 3260b3e01..df7e8d9ba 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/rollingnumber/DisableRollingNumberAnimationPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/rollingnumber/DisableRollingNumberAnimationPatch.kt @@ -36,6 +36,7 @@ val disableRollingNumberAnimationPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/seekbar/HideSeekbarPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/seekbar/HideSeekbarPatch.kt index b37fc8de9..2bf4745b2 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/seekbar/HideSeekbarPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/seekbar/HideSeekbarPatch.kt @@ -32,6 +32,7 @@ val hideSeekbarPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/HideShortsComponentsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/HideShortsComponentsPatch.kt index d28b0e7d4..d00b1dab5 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/HideShortsComponentsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/HideShortsComponentsPatch.kt @@ -189,9 +189,13 @@ val hideShortsComponentsPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) + hideShortsAppShortcutOption() + hideShortsWidgetOption() + execute { // region Hide the Shorts shelf. diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/suggestedvideoendscreen/DisableSuggestedVideoEndScreenPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/suggestedvideoendscreen/DisableSuggestedVideoEndScreenPatch.kt index 06d529632..a416b8670 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/suggestedvideoendscreen/DisableSuggestedVideoEndScreenPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/suggestedvideoendscreen/DisableSuggestedVideoEndScreenPatch.kt @@ -61,6 +61,7 @@ val disableSuggestedVideoEndScreenPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/HideTimestampPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/HideTimestampPatch.kt index a68339cbd..ad1fdcdc9 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/HideTimestampPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/HideTimestampPatch.kt @@ -28,6 +28,7 @@ val hideTimestampPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/miniplayer/MiniplayerPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/miniplayer/MiniplayerPatch.kt index cd5610096..2112c1b40 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/miniplayer/MiniplayerPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/miniplayer/MiniplayerPatch.kt @@ -135,8 +135,7 @@ private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/youtube/ @Suppress("unused") val miniplayerPatch = bytecodePatch( name = "Miniplayer", - description = "Adds options to change the in app minimized player. " + - "Patching target 19.16+ adds modern miniplayers.", + description = "Adds options to change the in app minimized player." ) { dependsOn( sharedExtensionPatch, @@ -170,6 +169,7 @@ val miniplayerPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/panels/popup/PlayerPopupPanelsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/panels/popup/PlayerPopupPanelsPatch.kt index b26ce1937..40ee1a47e 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/panels/popup/PlayerPopupPanelsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/panels/popup/PlayerPopupPanelsPatch.kt @@ -28,6 +28,7 @@ val playerPopupPanelsPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/player/background/PlayerControlsBackgroundPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/player/background/PlayerControlsBackgroundPatch.kt index 78a9936ce..32f5dd689 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/player/background/PlayerControlsBackgroundPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/player/background/PlayerControlsBackgroundPatch.kt @@ -19,6 +19,7 @@ val playerControlsBackgroundPatch = resourcePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/player/overlay/CustomPlayerOverlayOpacityPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/player/overlay/CustomPlayerOverlayOpacityPatch.kt index c8b48e82a..ad37c1d5f 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/player/overlay/CustomPlayerOverlayOpacityPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/player/overlay/CustomPlayerOverlayOpacityPatch.kt @@ -59,6 +59,7 @@ val customPlayerOverlayOpacityPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/ReturnYouTubeDislikePatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/ReturnYouTubeDislikePatch.kt index 05bcb7065..bc80fd14f 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/ReturnYouTubeDislikePatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/ReturnYouTubeDislikePatch.kt @@ -60,6 +60,7 @@ val returnYouTubeDislikePatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/WideSearchbarPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/WideSearchbarPatch.kt index 9a44779e6..9c8274ed1 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/WideSearchbarPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/WideSearchbarPatch.kt @@ -36,6 +36,7 @@ val wideSearchbarPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/Fingerprints.kt index 67a6b017d..ec9fd440c 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/Fingerprints.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/Fingerprints.kt @@ -48,3 +48,17 @@ internal val lithoLinearGradientFingerprint = fingerprint { returns("Landroid/graphics/LinearGradient;") parameters("F", "F", "F", "F", "[I", "[F") } + +internal const val launchScreenLayoutTypeLotteFeatureFlag = 268507948L + +internal val launchScreenLayoutTypeFingerprint = fingerprint { + accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR) + returns("V") + custom { method, _ -> + val firstParameter = method.parameterTypes.firstOrNull() + // 19.25 - 19.45 + (firstParameter == "Lcom/google/android/apps/youtube/app/watchwhile/MainActivity;" + || firstParameter == "Landroid/app/Activity;") // 19.46+ + && method.containsLiteralInstruction(launchScreenLayoutTypeLotteFeatureFlag) + } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/SeekbarColorPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/SeekbarColorPatch.kt index 49a5444ab..a2f079792 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/SeekbarColorPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/SeekbarColorPatch.kt @@ -13,15 +13,24 @@ import app.revanced.patches.shared.misc.mapping.resourceMappings import app.revanced.patches.youtube.layout.theme.lithoColorHookPatch import app.revanced.patches.youtube.layout.theme.lithoColorOverrideHook import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch -import app.revanced.patches.youtube.misc.playservice.is_19_23_or_greater +import app.revanced.patches.youtube.misc.playservice.is_19_25_or_greater +import app.revanced.patches.youtube.misc.playservice.is_19_46_or_greater import app.revanced.patches.youtube.misc.playservice.versionCheckPatch import app.revanced.patches.youtube.misc.settings.settingsPatch +import app.revanced.patches.youtube.shared.mainActivityOnCreateFingerprint +import app.revanced.util.copyXmlNode +import app.revanced.util.findElementByAttributeValueOrThrow +import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstructionOrThrow import app.revanced.util.indexOfFirstLiteralInstructionOrThrow +import app.revanced.util.inputStreamFromBundledResource import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference import org.w3c.dom.Element +import java.io.ByteArrayInputStream +import kotlin.use internal var reelTimeBarPlayedColorId = -1L private set @@ -30,6 +39,8 @@ internal var inlineTimeBarColorizedBarPlayedColorDarkId = -1L internal var inlineTimeBarPlayedNotHighlightedColorId = -1L private set +internal const val splashSeekbarColorAttributeName = "splash_custom_seekbar_color" + private val seekbarColorResourcePatch = resourcePatch { dependsOn( settingsPatch, @@ -51,9 +62,8 @@ private val seekbarColorResourcePatch = resourcePatch { "inline_time_bar_played_not_highlighted_color", ] - // Edit the resume playback drawable and replace the progress bar with a custom drawable + // Modify the resume playback drawable and replace the progress bar with a custom drawable. document("res/drawable/resume_playback_progressbar_drawable.xml").use { document -> - val layerList = document.getElementsByTagName("layer-list").item(0) as Element val progressNode = layerList.getElementsByTagName("item").item(1) as Element if (!progressNode.getAttributeNode("android:id").value.endsWith("progress")) { @@ -66,9 +76,102 @@ private val seekbarColorResourcePatch = resourcePatch { ) scaleNode.replaceChild(replacementNode, shapeNode) } + + + if (!is_19_25_or_greater) { + return@execute + } + + // Add attribute and styles for splash screen custom color. + // Using a style is the only way to selectively change just the seekbar fill color. + // + // Because the style colors must be hard coded for all color possibilities, + // instead of allowing 24 bit color the style is restricted to 9-bit (3 bits per color channel) + // and the style color closest to the users custom color is used for the splash screen. + arrayOf( + inputStreamFromBundledResource("seekbar/values", "attrs.xml")!! to "res/values/attrs.xml", + ByteArrayInputStream(create9BitSeekbarColorStyles().toByteArray()) to "res/values/styles.xml" + ).forEach { (source, destination) -> + "resources".copyXmlNode( + document(source), + document(destination), + ).close() + } + + fun setSplashDrawablePathFillColor(xmlFileNames: Iterable, vararg resourceNames: String) { + xmlFileNames.forEach { xmlFileName -> + document(xmlFileName).use { document -> + resourceNames.forEach { elementId -> + val element = document.childNodes.findElementByAttributeValueOrThrow( + "android:name", + elementId + ) + + val attribute = "android:fillColor" + if (!element.hasAttribute(attribute)) { + throw PatchException("Could not find $attribute for $elementId") + } + + element.setAttribute(attribute, "?attr/$splashSeekbarColorAttributeName") + } + } + } + } + + setSplashDrawablePathFillColor( + listOf( + "res/drawable/\$startup_animation_light__0.xml", + "res/drawable/\$startup_animation_dark__0.xml" + ), + "_R_G_L_10_G_D_0_P_0" + ) + + if (!is_19_46_or_greater) { + // Resources removed in 19.46+ + setSplashDrawablePathFillColor( + listOf( + "res/drawable/\$buenos_aires_animation_light__0.xml", + "res/drawable/\$buenos_aires_animation_dark__0.xml" + ), + "_R_G_L_8_G_D_0_P_0" + ) + } } } +/** + * Generate a style xml with all combinations of 9-bit colors. + */ +private fun create9BitSeekbarColorStyles(): String = StringBuilder().apply { + append("") + append("\n") + + for (red in 0..7) { + for (green in 0..7) { + for (blue in 0..7) { + val name = "${red}_${green}_${blue}" + + fun roundTo3BitHex(channel8Bits: Int) = + (channel8Bits * 255 / 7).toString(16).padStart(2, '0') + val r = roundTo3BitHex(red) + val g = roundTo3BitHex(green) + val b = roundTo3BitHex(blue) + val color = "#ff$r$g$b" + + append( + """ + + """ + ) + } + } + } + + append("") +}.toString() + private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/youtube/patches/theme/SeekbarColorPatch;" val seekbarColorPatch = bytecodePatch( @@ -117,27 +220,73 @@ val seekbarColorPatch = bytecodePatch( } } - if (is_19_23_or_greater) { - playerSeekbarGradientConfigFingerprint.method.apply { - val literalIndex = indexOfFirstLiteralInstructionOrThrow(PLAYER_SEEKBAR_GRADIENT_FEATURE_FLAG) + lithoColorOverrideHook(EXTENSION_CLASS_DESCRIPTOR, "getLithoColor") + + if (!is_19_25_or_greater) { + return@execute + } + + // 19.25+ changes + + playerSeekbarGradientConfigFingerprint.method.apply { + val literalIndex = indexOfFirstLiteralInstructionOrThrow(PLAYER_SEEKBAR_GRADIENT_FEATURE_FLAG) + val resultIndex = indexOfFirstInstructionOrThrow(literalIndex, Opcode.MOVE_RESULT) + val register = getInstruction(resultIndex).registerA + + addInstructions( + resultIndex + 1, + """ + invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->playerSeekbarGradientEnabled(Z)Z + move-result v$register + """ + ) + } + + lithoLinearGradientFingerprint.method.addInstruction( + 0, + "invoke-static/range { p4 .. p5 }, $EXTENSION_CLASS_DESCRIPTOR->setLinearGradient([I[F)V" + ) + + + // region apply seekbar custom color to splash screen animation. + + // Don't use the lotte splash screen layout if using custom seekbar. + arrayOf( + launchScreenLayoutTypeFingerprint, + mainActivityOnCreateFingerprint + ).forEach { fingerprint -> + fingerprint.method.apply { + val literalIndex = indexOfFirstLiteralInstructionOrThrow(launchScreenLayoutTypeLotteFeatureFlag) val resultIndex = indexOfFirstInstructionOrThrow(literalIndex, Opcode.MOVE_RESULT) val register = getInstruction(resultIndex).registerA addInstructions( resultIndex + 1, """ - invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->playerSeekbarGradientEnabled(Z)Z + invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->useLotteLaunchSplashScreen(Z)Z move-result v$register - """, + """ ) } + } - lithoLinearGradientFingerprint.method.addInstruction( - 0, - "invoke-static/range { p4 .. p5 }, $EXTENSION_CLASS_DESCRIPTOR->setLinearGradient([I[F)V", + // Hook the splash animation drawable to set the a seekbar color theme. + mainActivityOnCreateFingerprint.method.apply { + val drawableIndex = indexOfFirstInstructionOrThrow { + val reference = getReference() + reference?.definingClass == "Landroid/widget/ImageView;" + && reference.name == "getDrawable" + } + val checkCastIndex = indexOfFirstInstructionOrThrow(drawableIndex, Opcode.CHECK_CAST) + val drawableRegister = getInstruction(checkCastIndex).registerA + + addInstruction( + checkCastIndex + 1, + "invoke-static { v$drawableRegister }, $EXTENSION_CLASS_DESCRIPTOR->" + + "setSplashAnimationDrawableTheme(Landroid/graphics/drawable/AnimatedVectorDrawable;)V" ) } - lithoColorOverrideHook(EXTENSION_CLASS_DESCRIPTOR, "getLithoColor") + // endregion } } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/shortsautoplay/ShortsAutoplayPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/shortsautoplay/ShortsAutoplayPatch.kt index 72c81db4c..d667729e9 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/shortsautoplay/ShortsAutoplayPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/shortsautoplay/ShortsAutoplayPatch.kt @@ -38,6 +38,7 @@ val shortsAutoplayPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) @@ -56,7 +57,7 @@ val shortsAutoplayPatch = bytecodePatch( // Main activity is used to check if app is in pip mode. mainActivityOnCreateFingerprint.method.addInstructions( - 0, + 1, "invoke-static/range { p0 .. p0 }, $EXTENSION_CLASS_DESCRIPTOR->" + "setMainActivity(Landroid/app/Activity;)V", ) 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 e959788af..7dd6c3acc 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 @@ -118,6 +118,7 @@ val sponsorBlockPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/SpoofAppVersionPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/SpoofAppVersionPatch.kt index 5b96809bd..f5bda2d51 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/SpoofAppVersionPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/SpoofAppVersionPatch.kt @@ -39,6 +39,7 @@ val spoofAppVersionPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/startpage/ChangeStartPagePatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/startpage/ChangeStartPagePatch.kt index 0dabd8568..22f2e99f5 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/startpage/ChangeStartPagePatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/startpage/ChangeStartPagePatch.kt @@ -36,6 +36,7 @@ val changeStartPagePatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/startupshortsreset/DisableResumingShortsOnStartupPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/startupshortsreset/DisableResumingShortsOnStartupPatch.kt index 819d9c50d..f636d364f 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/startupshortsreset/DisableResumingShortsOnStartupPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/startupshortsreset/DisableResumingShortsOnStartupPatch.kt @@ -38,6 +38,7 @@ val disableResumingShortsOnStartupPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/tablet/EnableTabletLayoutPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/tablet/EnableTabletLayoutPatch.kt index 0ec65b780..2b71b8f80 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/tablet/EnableTabletLayoutPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/tablet/EnableTabletLayoutPatch.kt @@ -33,6 +33,7 @@ val enableTabletLayoutPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/theme/ThemePatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/theme/ThemePatch.kt index e5113071f..c658ee676 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/theme/ThemePatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/theme/ThemePatch.kt @@ -201,6 +201,7 @@ val themePatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/thumbnails/AlternativeThumbnailsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/thumbnails/AlternativeThumbnailsPatch.kt index 6c455d279..6d814cb6d 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/thumbnails/AlternativeThumbnailsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/thumbnails/AlternativeThumbnailsPatch.kt @@ -40,6 +40,7 @@ val alternativeThumbnailsPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/thumbnails/BypassImageRegionRestrictionsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/thumbnails/BypassImageRegionRestrictionsPatch.kt index 5443d9333..3c3b9cb43 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/layout/thumbnails/BypassImageRegionRestrictionsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/layout/thumbnails/BypassImageRegionRestrictionsPatch.kt @@ -34,6 +34,7 @@ val bypassImageRegionRestrictionsPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/announcements/AnnouncementsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/announcements/AnnouncementsPatch.kt index 33ad5d472..f318d838a 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/announcements/AnnouncementsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/announcements/AnnouncementsPatch.kt @@ -30,6 +30,7 @@ val announcementsPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/AutoRepeatPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/AutoRepeatPatch.kt index 098cf6cb2..a4d0bc82c 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/AutoRepeatPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/AutoRepeatPatch.kt @@ -31,6 +31,7 @@ val autoRepeatPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/BackgroundPlaybackPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/BackgroundPlaybackPatch.kt index a5cbd62a6..c9fa36d98 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/BackgroundPlaybackPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/backgroundplayback/BackgroundPlaybackPatch.kt @@ -55,6 +55,7 @@ val backgroundPlaybackPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/debugging/EnableDebuggingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/debugging/EnableDebuggingPatch.kt index 1c921e3fa..55fc04e39 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/debugging/EnableDebuggingPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/debugging/EnableDebuggingPatch.kt @@ -36,6 +36,7 @@ val enableDebuggingPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/dimensions/spoof/SpoofDeviceDimensionsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/dimensions/spoof/SpoofDeviceDimensionsPatch.kt index 3a5580345..bd6b11764 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/dimensions/spoof/SpoofDeviceDimensionsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/dimensions/spoof/SpoofDeviceDimensionsPatch.kt @@ -31,6 +31,7 @@ val spoofDeviceDimensionsPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/dns/CheckWatchHistoryDomainNameResolutionPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/dns/CheckWatchHistoryDomainNameResolutionPatch.kt index 1502783f6..6437b1299 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/dns/CheckWatchHistoryDomainNameResolutionPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/dns/CheckWatchHistoryDomainNameResolutionPatch.kt @@ -24,6 +24,7 @@ val checkWatchHistoryDomainNameResolutionPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/SpoofVideoStreamsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/SpoofVideoStreamsPatch.kt index 4cb6fb93a..515536b8f 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/SpoofVideoStreamsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/SpoofVideoStreamsPatch.kt @@ -44,6 +44,7 @@ val spoofVideoStreamsPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/gms/GmsCoreSupportPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/gms/GmsCoreSupportPatch.kt index 496dd77e6..bb86b663f 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/gms/GmsCoreSupportPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/gms/GmsCoreSupportPatch.kt @@ -42,6 +42,7 @@ val gmsCoreSupportPatch = gmsCoreSupportPatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/links/BypassURLRedirectsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/links/BypassURLRedirectsPatch.kt index 4e87613a4..509b0735d 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/links/BypassURLRedirectsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/links/BypassURLRedirectsPatch.kt @@ -37,6 +37,7 @@ val bypassURLRedirectsPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/links/OpenLinksExternallyPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/links/OpenLinksExternallyPatch.kt index 76e2455ee..520eb3c64 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/links/OpenLinksExternallyPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/links/OpenLinksExternallyPatch.kt @@ -48,6 +48,7 @@ val openLinksExternallyPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playservice/VersionCheckPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playservice/VersionCheckPatch.kt index 0598a77bd..f989ce16c 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playservice/VersionCheckPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/playservice/VersionCheckPatch.kt @@ -37,6 +37,8 @@ var is_19_41_or_greater = false private set var is_19_43_or_greater = false private set +var is_19_46_or_greater = false + private set val versionCheckPatch = resourcePatch( description = "Uses the Play Store service version to find the major/minor version of the YouTube target app.", @@ -68,5 +70,6 @@ val versionCheckPatch = resourcePatch( is_19_36_or_greater = 243705000 <= playStoreServicesVersion is_19_41_or_greater = 244305000 <= playStoreServicesVersion is_19_43_or_greater = 244405000 <= playStoreServicesVersion + is_19_46_or_greater = 244705000 <= playStoreServicesVersion } } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/privacy/RemoveTrackingQueryParameterPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/privacy/RemoveTrackingQueryParameterPatch.kt index cdac6f89d..e9169fdaf 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/privacy/RemoveTrackingQueryParameterPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/privacy/RemoveTrackingQueryParameterPatch.kt @@ -37,6 +37,7 @@ val removeTrackingQueryParameterPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/zoomhaptics/ZoomHapticsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/zoomhaptics/ZoomHapticsPatch.kt index db658e320..3d32a5ca3 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/misc/zoomhaptics/ZoomHapticsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/misc/zoomhaptics/ZoomHapticsPatch.kt @@ -28,6 +28,7 @@ val zoomHapticsPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) 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 a44e371bf..a22934d1c 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 @@ -20,13 +20,13 @@ import app.revanced.util.getReference import app.revanced.util.indexOfFirstInstructionOrThrow import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode -import com.android.tools.smali.dexlib2.builder.BuilderInstruction import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation import com.android.tools.smali.dexlib2.iface.Method import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.FieldReference import com.android.tools.smali.dexlib2.iface.reference.MethodReference import com.android.tools.smali.dexlib2.immutable.ImmutableMethod import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter @@ -57,12 +57,16 @@ private lateinit var speedSelectionInsertMethod: MutableMethod private var speedSelectionInsertIndex = -1 private var speedSelectionValueRegister = -1 +// Change playback speed method. +private lateinit var setPlaybackSpeedMethod: MutableMethod +private var setPlaybackSpeedMethodIndex = -1 + // Used by other patches. -lateinit var setPlaybackSpeedContainerClassFieldReference: String +internal lateinit var setPlaybackSpeedContainerClassFieldReference: FieldReference private set -lateinit var setPlaybackSpeedClassFieldReference: String +internal lateinit var setPlaybackSpeedClassFieldReference: FieldReference private set -lateinit var setPlaybackSpeedMethodReference: String +internal lateinit var setPlaybackSpeedMethodReference: MethodReference private set val videoInformationPatch = bytecodePatch( @@ -164,24 +168,27 @@ val videoInformationPatch = bytecodePatch( videoTimeHook(EXTENSION_CLASS_DESCRIPTOR, "setVideoTime") /* - * Hook the user playback speed selection + * Hook the user playback speed selection. */ onPlaybackSpeedItemClickFingerprint.method.apply { - val speedSelectionMethodInstructions = implementation!!.instructions - val speedSelectionValueInstructionIndex = speedSelectionMethodInstructions.indexOfFirst { - it.opcode == Opcode.IGET - } + val speedSelectionValueInstructionIndex = indexOfFirstInstructionOrThrow(Opcode.IGET) + legacySpeedSelectionInsertMethod = this legacySpeedSelectionInsertIndex = speedSelectionValueInstructionIndex + 1 legacySpeedSelectionValueRegister = getInstruction(speedSelectionValueInstructionIndex).registerA - setPlaybackSpeedClassFieldReference = - getInstruction(speedSelectionValueInstructionIndex + 1).reference.toString() setPlaybackSpeedMethodReference = - getInstruction(speedSelectionValueInstructionIndex + 2).reference.toString() + getInstruction(speedSelectionValueInstructionIndex + 2).reference as MethodReference + setPlaybackSpeedClassFieldReference = + getInstruction(speedSelectionValueInstructionIndex + 1).reference as FieldReference setPlaybackSpeedContainerClassFieldReference = - getReference(speedSelectionMethodInstructions, -1, Opcode.IF_EQZ) + getInstruction(indexOfFirstInstructionOrThrow(Opcode.IF_EQZ) - 1).reference as FieldReference + + setPlaybackSpeedMethod = + proxy(classes.first { it.type == setPlaybackSpeedMethodReference.definingClass }) + .mutableClass.methods.first { it.name == setPlaybackSpeedMethodReference.name } + setPlaybackSpeedMethodIndex = 0 } // Handle new playback speed menu. @@ -195,6 +202,7 @@ val videoInformationPatch = bytecodePatch( speedSelectionValueRegister = getInstruction(index).registerA } + videoSpeedChangedHook(EXTENSION_CLASS_DESCRIPTOR, "videoSpeedChanged") userSelectedPlaybackSpeedHook(EXTENSION_CLASS_DESCRIPTOR, "userSelectedPlaybackSpeed") } } @@ -295,9 +303,14 @@ fun videoTimeHook(targetMethodClass: String, targetMethodName: String) = "$targetMethodClass->$targetMethodName(J)V", ) -private fun getReference(instructions: List, offset: Int, opcode: Opcode) = - (instructions[instructions.indexOfFirst { it.opcode == opcode } + offset] as ReferenceInstruction) - .reference.toString() +/** + * Hook when the video speed is changed for any reason _except when the user manually selects a new speed_. + */ +fun videoSpeedChangedHook(targetMethodClass: String, targetMethodName: String) = + setPlaybackSpeedMethod.addInstruction( + setPlaybackSpeedMethodIndex++, + "invoke-static { p1 }, $targetMethodClass->$targetMethodName(F)V" + ) /** * Hook the video speed selected by the user. @@ -312,4 +325,4 @@ fun userSelectedPlaybackSpeedHook(targetMethodClass: String, targetMethodName: S speedSelectionInsertIndex++, "invoke-static { v$speedSelectionValueRegister }, $targetMethodClass->$targetMethodName(F)V", ) -} +} \ No newline at end of file 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 3e81a0d90..7a267574c 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 @@ -42,6 +42,7 @@ val rememberVideoQualityPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/video/speed/PlaybackSpeedPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/video/speed/PlaybackSpeedPatch.kt index 880081c51..668c517ec 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/video/speed/PlaybackSpeedPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/video/speed/PlaybackSpeedPatch.kt @@ -26,6 +26,7 @@ val playbackSpeedPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) } diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/video/videoqualitymenu/RestoreOldVideoQualityMenuPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/video/videoqualitymenu/RestoreOldVideoQualityMenuPatch.kt index 0358d13dd..7f6c91021 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/video/videoqualitymenu/RestoreOldVideoQualityMenuPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/video/videoqualitymenu/RestoreOldVideoQualityMenuPatch.kt @@ -81,6 +81,7 @@ val restoreOldVideoQualityMenuPatch = bytecodePatch( "19.34.42", "19.43.41", "19.45.38", + "19.46.42", ), ) diff --git a/patches/src/main/kotlin/app/revanced/util/ResourceUtils.kt b/patches/src/main/kotlin/app/revanced/util/ResourceUtils.kt index 3faf55a8f..7a1496afc 100644 --- a/patches/src/main/kotlin/app/revanced/util/ResourceUtils.kt +++ b/patches/src/main/kotlin/app/revanced/util/ResourceUtils.kt @@ -114,7 +114,6 @@ fun String.copyXmlNode( target: Document, ): AutoCloseable { val hostNodes = source.getElementsByTagName(this).item(0).childNodes - val destinationNode = target.getElementsByTagName(this).item(0) for (index in 0 until hostNodes.length) { 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 4fc7a8aab..91ed73878 100644 --- a/patches/src/main/resources/addresources/values-af-rZA/strings.xml +++ b/patches/src/main/resources/addresources/values-af-rZA/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 4fc7a8aab..91ed73878 100644 --- a/patches/src/main/resources/addresources/values-am-rET/strings.xml +++ b/patches/src/main/resources/addresources/values-am-rET/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 d4030aa89..5ba32c82b 100644 --- a/patches/src/main/resources/addresources/values-ar-rSA/strings.xml +++ b/patches/src/main/resources/addresources/values-ar-rSA/strings.xml @@ -60,7 +60,8 @@ This is because Crowdin requires temporarily flattening this file and removing t ملاحظة هذا الإصدار هو إصدار مسبق، وقد تواجه مشاكل غير متوقعة الروابط الرسمية - تبرع + @@ -1204,9 +1205,9 @@ This is because Crowdin requires temporarily flattening this file and removing t لا يحتوي جهازك على فك تشفير الأجهزة VP9، وهذا الإعداد يعمل دائما عند تمكين تزييف العميل قد يؤدي تمكين هذا إلى تحسين عمر البطارية وإصلاح مشكلة تقطيع التشغيل.\n\nيتمتع تنسيق AVC بدقة قصوى تبلغ 1080P، وسيستخدم تشغيل الفيديو المزيد من بيانات الإنترنت مقارنةً بتنسيق VP9 أو AV1. التأثيرات الجانبية لمحاكاة iOS - • قد لا يتم تشغيل الأفلام أو الفيديوهات المدفوعة\n• تبدأ البثوث المباشرة من البداية\n• قد تنتهي الفيديوهات قبل النهاية بثانية واحدة\n• لا يوجد ترميز الصوت Opus + • قد لا تشغل مقاطع فيديو الأطفال الخاصون\n• تبدأ Livestreams من البداية\n• قد تنتهي مقاطع الفيديو ثانية واحدة في أوائل\n• لا يوجد رمز صوتي opus التأثيرات الجانبية لمحاكاة Android VR - • قائمة المقطع الصوتي مفقودة\n• مستوى الصوت الثابت غير متوفر + • قد لا تشغل مقاطع فيديو الأطفال\n• قائمة المسار الصوتي مفقودة\n• مستوى الصوت المستقر غير متوفر 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 4fc7a8aab..91ed73878 100644 --- a/patches/src/main/resources/addresources/values-as-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-as-rIN/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 3314bc7c3..a3075427a 100644 --- a/patches/src/main/resources/addresources/values-az-rAZ/strings.xml +++ b/patches/src/main/resources/addresources/values-az-rAZ/strings.xml @@ -60,7 +60,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Qeyd Bu versiya ilkin buraxılışdır və gözlənilməz problemlərlə üzləşə bilərsiniz Rəsmi bağlantılar - İanə ver + @@ -1012,6 +1013,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Kiçik oynadıcı növü Qeyri-aktivdir Orijinal + Ən kiçik Planşet Müasir 1 Müasir 2 @@ -1203,9 +1205,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Cihazınızın VP9 hardware decoding\'i yoxdur və bu seçim, \"Qəbuledicini saxtalaşdırma\" aktivləşdikdə həmişəlikdir Bunu aktivləşdirmə batareya ömrünü yaxşılaşdıra və oynatma donmasını düzəldə bilər.\n\nAVC maksimum 1080p görüntü imkanına malikdir və video oynadılması VP9 və ya AV1-dən daha çox internet məlumatı istifadə edəcək. iOS saxtakarlığı yan təsirləri - • Filmlər və ya ödənişli videolar oynadılmaya bilər\n• Canlı yayımlar əvvəldən başlayır\n• Videolar 1 saniyə tez bitə bilər\n• Opus səs kodlama yoxdur Android VR saxtakarlığı yan təsirləri - • Səs axını menyusu əskikdir\n• Stabil səs səviyyəsi əlçatan deyil 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 d8abff278..406cdf61a 100644 --- a/patches/src/main/resources/addresources/values-be-rBY/strings.xml +++ b/patches/src/main/resources/addresources/values-be-rBY/strings.xml @@ -51,6 +51,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Нататка Гэтая версія з\"яўляецца папярэдняй версіяй, і вы можаце сутыкнуцца з непрадбачанымі праблемамі Афіцыйныя спасылкі + 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 958ecc14a..5a53a5259 100644 --- a/patches/src/main/resources/addresources/values-bg-rBG/strings.xml +++ b/patches/src/main/resources/addresources/values-bg-rBG/strings.xml @@ -60,7 +60,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Забележка Тази версия е предварителна, така че може да срещнете неочаквани проблеми Официални линкове - Дарение + @@ -1012,6 +1013,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Минимизиран тип екран за гледане Деактивирано Оригинал + Минимално Таблет Модерен 1 Модерен 2 @@ -1203,9 +1205,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Вашето устройство няма хардуерно VP9 декодиране и тази настройка винаги е активирана, когато е активно подправяне на клиента Активирането на това може да подобри живота на батерията и да коригира прекъсванията при възпроизвеждане.\n\nAVC има максимална разделителна способност от 1080p и възпроизвеждането на видео ще използва повече интернет данни от VP9 или AV1. Cтранични ефекти от подмяната на iOS - • Филми или платени видеоклипове може да не се възпроизвеждат\n• Потоците на живо започват отначало\n• Видеоклиповете може да завършват 1 секунда по-рано\n• Няма аудиокодек Opus Странични ефекти от подправяне на Android VR - • Липсва менюто за избор аудио\n• Не е налична стабилна сила на звука 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 11a8533b0..1e96ccff8 100644 --- a/patches/src/main/resources/addresources/values-bn-rBD/strings.xml +++ b/patches/src/main/resources/addresources/values-bn-rBD/strings.xml @@ -59,7 +59,8 @@ This is because Crowdin requires temporarily flattening this file and removing t দ্রষ্টব্য এই সংস্করণ একটি প্রাক-প্রকাশনা এবং এতে আপনি অনাকাঙ্খিত সমস্যার সম্মুখিন হতে পারেন অফিশ্যাল লিংকসমূহ - দান করুন + 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 4fc7a8aab..91ed73878 100644 --- a/patches/src/main/resources/addresources/values-bs-rBA/strings.xml +++ b/patches/src/main/resources/addresources/values-bs-rBA/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 c040804fd..fb88431ce 100644 --- a/patches/src/main/resources/addresources/values-ca-rES/strings.xml +++ b/patches/src/main/resources/addresources/values-ca-rES/strings.xml @@ -37,6 +37,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Restablir + 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 6a0847948..e86697d1e 100644 --- a/patches/src/main/resources/addresources/values-cs-rCZ/strings.xml +++ b/patches/src/main/resources/addresources/values-cs-rCZ/strings.xml @@ -61,7 +61,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Poznámka Tato verze je předběžná verze a můžete zaznamenat neočekávané problémy Oficiální odkazy - Přispět + @@ -1205,9 +1206,9 @@ This is because Crowdin requires temporarily flattening this file and removing t Vaše zařízení nemá hardwarové dekódování VP9 a toto nastavení je vždy zapnuto, když je aktivní spoofování klienta Povolení této funkce může zlepšit životnost baterie a opravit stahování přehrávání.\n\nAVC má maximální rozlišení 1080p a video přehrávání bude používat více dat než VP9 nebo AV1. Boční efekty iOS - • Filmy nebo placená videa nemusí přehrávat\n• Živočišné rekony začínající od začátku\n• Videa mohou skončit 1 sekundu na začátku\n• Žádný opus audio kodek + • Soukromá dětská videa nemusí přehrávat\n• Živočišná zvířata začínající od začátku\n• Videa mohou skončit 1 sekundu na začátku\n• Žádný opus zvukový kodek Boční efekty Android VR - • Menu zvukové stopy chybí\n• Stabilní hlasitost není k dispozici + • Dětská videa nemusí přehrát\n• Menu zvukové stopy chybí\n• Stabilní hlasitost není k dispozici 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 8e4469097..f1abb52ba 100644 --- a/patches/src/main/resources/addresources/values-da-rDK/strings.xml +++ b/patches/src/main/resources/addresources/values-da-rDK/strings.xml @@ -61,7 +61,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Bemærkning Denne version er en pre-release og du kan opleve uventede problemer Officielle links - Donér + @@ -1187,9 +1188,9 @@ This is because Crowdin requires temporarily flattening this file and removing t Din enhed har ikke VP9 hardwareafkodning, og denne indstilling er altid tændt, når Client spoofing er aktiveret Aktivering af dette kan forbedre batteriets levetid og rette afspilningsstuttering.\n\nAVC har en maksimal opløsning på 1080p, og videoafspilning vil bruge flere internetdata end VP9 eller AV1. iOS forfalskning bivirkninger - • Film eller betalte videoer kan ikke afspille\n• Livestreams starter fra begyndelsen\n• Videoer kan ende 1 sekund tidlig\n• Ingen opus lydkode + • Private børn videoer kan ikke afspille\n• Livestreams starter fra begyndelsen\n• Videoer kan ende 1 sekund tidlig\n• Ingen opus audio codec Android VR spoofing bivirkninger - • Menuen Lydspor mangler\n• Stabil lydstyrke er ikke tilgængelig + • Kids videoer afspiller muligvis ikke\n• Menuen for lydspor mangler\n• Stabil lydstyrke er ikke tilgængelig 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 a1afb8b23..badd1406f 100644 --- a/patches/src/main/resources/addresources/values-de-rDE/strings.xml +++ b/patches/src/main/resources/addresources/values-de-rDE/strings.xml @@ -33,7 +33,7 @@ This is because Crowdin requires temporarily flattening this file and removing t - Überprüfungen fehlgeschlagen + Überprüfung fehlgeschlagen Offizielle Webseite öffnen Ignorieren <h5>Diese App wurde offenbar nicht von Ihnen gepatcht.</h5><br>Diese App funktioniert möglicherweise nicht richtig, <b>könnte schädlich oder sogar gefährlich in der Verwendung sein</b>.< br><br>Diese Prüfungen deuten darauf hin, dass diese App vorab gepatcht wurde oder von jemandem bezogen wurde sonst:<br><br><small>%1$s</small><br>Es wird dringend empfohlen, <b>diese App zu deinstallieren und selbst zu patchen</b> um sicherzustellen, dass Sie eine validierte und sichere App verwenden.<p><br>Wenn Sie diese Warnung ignorieren, wird sie nur zweimal angezeigt. @@ -61,7 +61,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Notiz Diese Version ist eine Vorabversion und du könntest unerwartete Probleme haben Offizielle Links - Spenden + @@ -1205,9 +1206,9 @@ This is because Crowdin requires temporarily flattening this file and removing t Ihr Gerät hat keine VP9-Hardware-Dekodierung, und diese Einstellung ist immer aktiviert, wenn Client-Spoofing aktiviert ist Das Aktivieren kann die Akkulaufzeit verbessern und die Wiedergabe-Stutting beheben.\n\nAVC hat eine maximale Auflösung von 1080p, und die Videowiedergabe wird mehr Internet-Daten als VP9 oder AV1 verwenden. iOS Spoofing Nebeneffekte - • Filme oder bezahlte Videos werden möglicherweise nicht abgespielt\n• Livestreams starten von Anfang an\n• Videos enden möglicherweise 1 Sekunde früher\n• kein Opus-Audiocodec + • Videos für Privatkinder dürfen nicht\nabspielen • Livestreams beginnen von Anfang an\n• Videos können 1 Sekunde früher\n• Kein opus Audio Codec Android VR Spoofing Nebeneffekte - • Audio Track Menü fehlt\n• Stabile Lautstärke ist nicht verfügbar + • Kindervideos dürfen nicht\nabspielen • Audiospurmenü fehlt\n• Stabile Lautstärke ist nicht verfügbar 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 5e59528ab..0c1b681c8 100644 --- a/patches/src/main/resources/addresources/values-el-rGR/strings.xml +++ b/patches/src/main/resources/addresources/values-el-rGR/strings.xml @@ -60,7 +60,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Σημείωση Αυτή η έκδοση είναι σε πρώιμο στάδιο, επομένως πιθανότατα να αντιμετωπίσετε απρόοπτα προβλήματα Επίσημοι σύνδεσμοι - Δωρεά + @@ -1010,13 +1011,13 @@ This is because Crowdin requires temporarily flattening this file and removing t Ελαχιστοποιημένη οθόνη αναπαραγωγής Αλλάξτε το στυλ της ελαχιστοποιημένης οθόνης αναπαραγωγής Τύπος ελαχιστοποιημένης οθόνης αναπαραγωγής - Ανενεργό + Ανενεργή Αρχικός - Ελάχιστα + Ελάχιστη Ταμπλετ - Μοντέρνος 1 - Μοντέρνος 2 - Μοντέρνος 3 + Μοντέρνα 1 + Μοντέρνα 2 + Μοντέρνα 3 Στρογγυλεμένες γωνίες Οι γωνίες είναι στρογγυλεμένες Οι γωνίες είναι τετράγωνες @@ -1204,9 +1205,9 @@ This is because Crowdin requires temporarily flattening this file and removing t Η συσκευή σας δεν διαθέτει αποκωδικοποίηση υλικού VP9, και αυτή η ρύθμιση είναι πάντα ενεργή όταν είναι ενεργοποιημένη η παραποίηση προγράμματος πελάτη Ενεργοποιώντας αυτόν τον κωδικοποιητή ίσως να βελτιώσει κατανάλωση ενέργειας και ίσως διορθώσει κολλήματα αναπαραγωγής.\n\nΟ AVC έχει μέγιστη ανάλυση 1080p, και καταναλώνει περισσότερα δεδομένα internet από τον VP9 ή τον AV1. Παρενέργειες παραποίησης σε iOS - • Οι ταινίες ή τα επί πληρωμή βίντεο ενδέχεται να μην αναπαράγονται\n• Οι ζωντανές μεταδόσεις ξεκινούν από την αρχή κατά την αναπαραγωγή\n• Τα βίντεο μπορεί να τελειώνουν 1 δευτερόλεπτο νωρίτερα\n• Ο κωδικοποιητής ήχου opus δεν είναι διαθέσιμος + • Τα ιδιωτικά βίντεο για παιδιά μπορεί να μην παίζουν\n• Livestreams ξεκινούν από την αρχή\n• Τα βίντεο μπορεί να λήξουν 1 δευτερόλεπτο\n• Δεν υπάρχει κωδικοποιητής ήχου opus Παρενέργειες παραποίησης σε Android VR - • Το μενού «Κομμάτι ήχου» λείπει\n• Η λειτουργία «Σταθερή ένταση» δεν είναι διαθέσιμη + • Τα βίντεο για παιδιά μπορεί να μην αναπαράγονται\n• Το μενού κομματιών ήχου λείπει\n• Η σταθερή ένταση δεν είναι διαθέσιμη 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 ba7b715b7..6fd0f6054 100644 --- a/patches/src/main/resources/addresources/values-es-rES/strings.xml +++ b/patches/src/main/resources/addresources/values-es-rES/strings.xml @@ -60,7 +60,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Nota Esta versión es un pre-lanzamiento y puede que experimentes problemas inesperados Enlaces oficiales - Donar + @@ -1204,9 +1205,9 @@ This is because Crowdin requires temporarily flattening this file and removing t Su dispositivo no tiene decodificación de hardware VP9, y esta configuración siempre está encendida cuando el cliente spoofing está habilitado Activar esto puede mejorar la vida de la batería y corregir el retraso en la reproducción.\n\nAVC tiene una resolución máxima de 1080p, y la reproducción de vídeo utilizará más datos de Internet que VP9 o AV1. Efectos secundarios para la falsificación de iOS - • Las películas o vídeos de pago pueden no reproducirse\n• Los directos empiezan desde el principio\n• Los vídeos pueden terminar 1 segundo antes\n• No hay códec de audio de Opus + • Los vídeos de niños privados no pueden reproducir\n• Livestreams comienzan desde el principio\n• Los vídeos pueden terminar 1 segundo antes de\n• No hay código de audio de opus Efectos secundarios para la falsificación de Android RV - • Falta el menú de pista de audio\n• El volumen estable no está disponible + • Los vídeos infantiles no pueden reproducir\n• Falta el menú de pista de audio\n• El volumen estable no está disponible 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 5406a426f..b14c1e322 100644 --- a/patches/src/main/resources/addresources/values-et-rEE/strings.xml +++ b/patches/src/main/resources/addresources/values-et-rEE/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 4fc7a8aab..91ed73878 100644 --- a/patches/src/main/resources/addresources/values-eu-rES/strings.xml +++ b/patches/src/main/resources/addresources/values-eu-rES/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 2bb17bfb2..644c21720 100644 --- a/patches/src/main/resources/addresources/values-fa-rIR/strings.xml +++ b/patches/src/main/resources/addresources/values-fa-rIR/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 3ab5cace5..95721c4ff 100644 --- a/patches/src/main/resources/addresources/values-fi-rFI/strings.xml +++ b/patches/src/main/resources/addresources/values-fi-rFI/strings.xml @@ -61,7 +61,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Huomautus Tämä versio on ennakkojulkaisuversio, joten voit kokea odottamattomia ongelmia Viralliset linkit - Lahjoita + @@ -293,7 +294,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Piilota tilaukset-videoita avainsanojen mukaan Tilaukset-välilehden videoita suodatetaan avainsanojen mukaan Tilaukset-välilehden videoita ei suodateta avainsanojen mukaan - Piilota hakutuloksia avainsanojen muakan + Piilota hakutuloksia avainsanojen mukaan Hakutuloksia suodatetaan avainsanojen mukaan Hakutuloksia ei suodateta avainsanojen mukaan Piilotettavat avainsanat @@ -1166,11 +1167,11 @@ This is because Crowdin requires temporarily flattening this file and removing t Painiketta ei näytetä - Mukautettu soiton nopeusvalikko + Mukautetun toistonopeuden valikko Mukautettu nopeusvalikko näkyy Mukautettua nopeusvalikkoa ei näytetä Mukautetut toistonopeudet - Lisää tai muuta mukautettuja soiton nopeuksia + Lisää tai muuta mukautettuja toistonopeuksia Mukautettujen nopeuksien on oltava alle %s. Käytetään oletusarvoja. Virheelliset mukautetut toistonopeudet. Käytetään oletusarvoja. Automaattinen @@ -1206,9 +1207,9 @@ This is because Crowdin requires temporarily flattening this file and removing t Laitteessasi ei ole VP9-laitteiston dekoodausta, ja tämä asetus on aina päällä, kun asiakkaan spoofing on käytössä Tämän käyttöönotto voi parantaa akun kestoa ja korjata toistoa stuttering.\n\nAVC on suurin resoluutio 1080p, ja videon toisto käyttää enemmän internet-tietoja kuin VP9 tai AV1. iOS-naamioinnin haittavaikutukset - • Elokuvat tai maksetut videot eivät välttämättä toistu\n• Suoratoistot alkavat alusta\n• Videot saattavat päättyä 1 sekuntia etuajassa\n• Ei Opus-äänikoodekkia + • Yksityiset lapset videot eivät välttämättä pelaa\n• Livestreams alusta alkaen\n• Videot saattavat päättyä 1 sekunnin alkupuolella\n• Ei opus-äänikoodekkia Android VR -naamioinnin haittavaikutukset - • Ääniraitavalikko puuttuu\n• Tasainen äänenvoimakkuus ei ole käytettävissä + • Lapset videot eivät välttämättä soita\n• Ääniraidan valikko puuttuu\n• Vakaa äänenvoimakkuus ei ole käytettävissä 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 f1eb4bc4c..d780ab5a0 100644 --- a/patches/src/main/resources/addresources/values-fil-rPH/strings.xml +++ b/patches/src/main/resources/addresources/values-fil-rPH/strings.xml @@ -51,6 +51,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Tandaan Ang bersyon na ito ay isang pre-release at maaari kang makaranas ng mga hindi inaasahang isyu Mga opisyal na link + 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 921b726f7..47406631e 100644 --- a/patches/src/main/resources/addresources/values-fr-rFR/strings.xml +++ b/patches/src/main/resources/addresources/values-fr-rFR/strings.xml @@ -61,7 +61,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Note Cette version est une pré-version et vous pourriez rencontrer des problèmes inattendus Liens officiels - Faire un don + @@ -1205,9 +1206,9 @@ This is because Crowdin requires temporarily flattening this file and removing t Votre appareil ne possède pas de décodage matériel VP9, et ce paramètre est toujours activé lorsque la falsification du client est activée Activer ceci peut améliorer la durée de vie de la batterie et corriger les erreurs de lecture.\n\nAVC a une résolution maximale de 1080p, et la lecture vidéo utilisera plus de données internet que VP9 ou AV1. Effets secondaires d\'usurpation iOS - • Les films ou les vidéos payantes ne peuvent pas lire\n• Les Livestreams commencent depuis le début\n• Les vidéos peuvent se terminer 1 seconde tôt\n• Pas de codec audio opus + • Les vidéos privées des enfants ne peuvent pas être lues\n• Les live reams commencent à partir de\n• Les vidéos peuvent se terminer 1 seconde tôt\n• Aucun codec audio opus Effets secondaires de l\'usurpation VR Android - • Le menu de la piste audio manque\n• Le volume stable n\'est pas disponible + • Les vidéos des enfants peuvent ne pas lire\n• Le menu de la piste audio manque\n• Le volume stable n\'est pas disponible 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 d4b588afc..5c4f65b27 100644 --- a/patches/src/main/resources/addresources/values-ga-rIE/strings.xml +++ b/patches/src/main/resources/addresources/values-ga-rIE/strings.xml @@ -60,7 +60,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Nóta Is réamh-eisiúint é an leagan seo agus d\'fhéadfadh fadhbanna gan choinne a bheith agat Naisc oifigiúla - Síntiúis + @@ -1012,6 +1013,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Cineál Miniplayer Díchumasaithe Bunaidh + Íosta Táibléad Nua-aimseartha 1 Nua-Aimseartha 2 @@ -1203,9 +1205,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Níl díchódú crua-earraí VP9 ar do ghléas, agus bíonn an socrú seo ar siúl i gcónaí nuair atá spoofing Cliant cumasaithe Má dhéantar é seo a chumasú, d\'fhéadfadh sé go bhfeabhsófaí saol na gceallraí agus go n-athshocraigh sé stopáil athsheinm.\n\nTá uas-taifeach 1080p ag AVC, agus úsáidfidh athsheinm físe níos mó sonraí idirlín ná mar a úsáideann VP9 nó AV1. Fo-iarsmaí spoofing iOS - • Ní féidir le scannáin nó físeáin íoctha a sheinm\n• Tosaíonn sruthanna beo ón tús\n• Seans go gcríochnóidh físeáin 1 soicind go luath\n• Gan codec fuaime opus Fo-iarsmaí spoofing Android VR - • Tá roghchlár rian fuaime in easnamh\n• Níl an toirt cobhsaí ar fáil 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 4fc7a8aab..91ed73878 100644 --- a/patches/src/main/resources/addresources/values-gl-rES/strings.xml +++ b/patches/src/main/resources/addresources/values-gl-rES/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 4fc7a8aab..91ed73878 100644 --- a/patches/src/main/resources/addresources/values-gu-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-gu-rIN/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 81f100e18..1a40a8c60 100644 --- a/patches/src/main/resources/addresources/values-hi-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-hi-rIN/strings.xml @@ -37,6 +37,8 @@ This is because Crowdin requires temporarily flattening this file and removing t रीसेट करें + 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 69c85d0f4..bed50c2df 100644 --- a/patches/src/main/resources/addresources/values-hr-rHR/strings.xml +++ b/patches/src/main/resources/addresources/values-hr-rHR/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 4d568cce0..320c725da 100644 --- a/patches/src/main/resources/addresources/values-hu-rHU/strings.xml +++ b/patches/src/main/resources/addresources/values-hu-rHU/strings.xml @@ -60,7 +60,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Megjegyzés Ez a verzió egy előzetes kiadás, és nem kívánt hibákat tapasztalhat Hivatalos linkek - Támogatás + @@ -1203,9 +1204,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Eszközén nincs VP9 hardveres dekódolás, és ez a beállítás mindig be van kapcsolva, ha az ügyfélhamisítás engedélyezve van Ennek engedélyezése javíthatja az akkumulátor élettartamát, és kijavíthatja a lejátszás akadozását.\n\nAz AVC maximális felbontása 1080p, és a videolejátszás több internetadatot használ, mint a VP9 vagy az AV1. iOS hamisítási mellékhatások - • Előfordulhat, hogy a filmeket és a fizetős videókat nem lehet lejátszani\n• Az élő közvetítések elölről kezdődnek.\n• A videók 1 másodperccel korábban véget érhetnek\n• Nincs opus audiokodek Android VR-hamisítási mellékhatások - • Hiányzik a hangsáv menü\n• A stabil hangerő nem érhető el 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 d910a229b..83ffb23b0 100644 --- a/patches/src/main/resources/addresources/values-hy-rAM/strings.xml +++ b/patches/src/main/resources/addresources/values-hy-rAM/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 a4fc866b6..592771b83 100644 --- a/patches/src/main/resources/addresources/values-in-rID/strings.xml +++ b/patches/src/main/resources/addresources/values-in-rID/strings.xml @@ -60,7 +60,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Catatan Versi ini adalah pra-rilis dan Anda mungkin mengalami masalah yang tidak terduga Tautan resmi - Donasi + @@ -1012,6 +1013,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Jenis pemutar mini Nonaktif Asli + Minimal Tablet Modern 1 Modern 2 @@ -1044,7 +1046,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Awal pada ukuran layar, dalam piksel Ukuran piksel harus antara %1$s dan %2$s Opasitas hamparan - Nilai opasitas antara 0-100, di mana 0 adalah transparan + Nilai opasitas antara 0-100, dimana 0 adalah transparan Opasitas hamparan pemutar mini antara 0-100 @@ -1203,9 +1205,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Perangkat Anda tidak memiliki dekode perangkat keras VP9, ​​dan pengaturan ini selalu aktif saat pemalsuan Klien diaktifkan Menyalakan ini dapat meningkatkan masa pakai baterai dan memperbaiki gangguan pemutaran.\n\nAVC memiliki resolusi maksimum 1080p, dan pemutaran video akan menggunakan lebih banyak data internet daripada VP9 atau AV1. Efek samping pemalsuan iOS - • Film atau video berbayar mungkin tidak dapat diputar\n• Siaran langsung dimulai dari awal\n• Video mungkin berakhir 1 detik lebih awal\n• Tidak ada codec audio opus Efek samping pemalsuan Android VR - • Menu trek audio hilang\n• Volume stabil tidak tersedia 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 7cd72d1fa..ebaeec424 100644 --- a/patches/src/main/resources/addresources/values-is-rIS/strings.xml +++ b/patches/src/main/resources/addresources/values-is-rIS/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 c2ef16024..113d0ef5d 100644 --- a/patches/src/main/resources/addresources/values-it-rIT/strings.xml +++ b/patches/src/main/resources/addresources/values-it-rIT/strings.xml @@ -33,14 +33,14 @@ This is because Crowdin requires temporarily flattening this file and removing t - Controlli falliti + Controlli non riusciti Apri sito ufficiale Ignora <h5>Quest\'app non sembra essere stata patchata da te.</h5><br>Quest\'app potrebbe non funzionare correttamente, <b>potrebbe essere dannosa o addirittura pericolosa</b>.<br><br>Questi controlli implicano che quest\'app sia pre-patchata o ottenuta da qualcun altro:<br><br><small>%1$s</small><br>Si consiglia vivamente di <b>disinstallare quest\'app</b> per assicurarsi di utilizzare un\'app valida e sicura.<p><br>Se ignorato, questo avviso verrà visualizzato solo due volte. Patchato su un altro dispositivo Non installato da ReVanced Manager - Patched more than 10 minutes ago - Patched %s days ago + Patchato da più di 10 minuti fa + Patchato %s giorni fa La data di compilazione APK è corrotta @@ -50,9 +50,9 @@ This is because Crowdin requires temporarily flattening this file and removing t Riavvia Importa Copia - Impostazioni di default + Reimposta le impostazioni di ReVanced quelle predefinite Importate %d impostazioni - Importazione fallita: %s + Importazione non riuscita: %s Importa / Esporta Importa / Esporta impostazioni ReVanced @@ -60,14 +60,15 @@ This is because Crowdin requires temporarily flattening this file and removing t Nota Questa versione è una pre-release e potresti riscontrare problemi inaspettati Link ufficiali - Dona + MicroG GmsCore non è installato. Installalo. Azione necessaria - MicroG GmsCore non ha il permesso di funzionare in background.\n\nSegui la guida \"Non chiudere l\'app\" per il tuo telefono e segui le istruzioni per l\'installazione di MicroG.\n\nQuesto è necessario perché l\'app funzioni. - Apri sito + MicroG GmsCore non ha il permesso di funzionare in background.\n\nSegui la guida \"Don\'t kill my app\" per il tuo telefono e segui le istruzioni per l\'installazione di MicroG.\n\nQuesto è necessario perché l\'app funzioni. + Apri sito web Le ottimizzazioni della batteria MicroG GmsCore devono essere disabilitate per evitare problemi.\n\nTocca il pulsante continua e disabilita le ottimizzazioni della batteria. Continua @@ -75,25 +76,25 @@ This is because Crowdin requires temporarily flattening this file and removing t Informazioni - Annunci + Pubblicità Miniature alternative - Contenuti - Riproduttore + Feed + Player Interfaccia generale Barra di avanzamento - Controlli a scorrimento + Controlli a gesti Varie Video Disattiva riproduzione Shorts in background - Riproduzione Shorts in sottofondo disabilitata - Riproduzione Shorts in sottofondo abilitata + La riproduzione in background degli Shorts è disattivata + La riproduzione in background degli Shorts è abilitata Debugging Abilita o disabilita impostazioni di debug - Logging di debug + Log di debug I log di debug sono abilitati I log di debug sono disabilitati Buffer di protocollo per log @@ -102,113 +103,113 @@ This is because Crowdin requires temporarily flattening this file and removing t Registra stack trace I log di debug includono lo stack trace I log di debug non includono lo stack trace - Mostra messaggio per errore ReVanced - Messaggio mostrato se si verifica un errore - Messaggio non mostrato se si verifica un errore + Mostra notifica per errore di ReVanced + Notifica mostrata se si verifica un errore + Notifica non mostrata se si verifica un errore Disattivando i messaggi di errore si nascondono tutte le notifiche di errore di ReVanced.\n\nNon sarai avvisato di alcun evento inatteso. Disabilita il bagliore del pulsante mi piace / iscriviti - Come e il pulsante iscriviti non si illuminerà quando menzionato - Come e il pulsante iscriviti si illuminerà quando menzionato + Mi piace ed il pulsante Iscriviti non si illuminerà quando menzionato + Mi piace ed il pulsante Iscriviti si illuminerà quando menzionato Nascondi schede album - Le schede degli album sono nascoste + Le schede album sono nascoste Le schede degli album sono visibili - Nascondi box crowdfunding - Crowdfunding box è nascosto - Crowdfunding box è visibile + Nascondi il riquadro Raccolta fondi + Il riquadro Raccolta fondii è nascosto + Il riquadro Raccolta fondi è visibile Nascondi il pulsante del microfono fluttuante Pulsante microfono nascosto Pulsante microfono visibile Nascondi la filigrana del canale - Filigrana nascosta - Filigrana visibile + La filigrana è nascosta + La filigrana è visibile Nascondi sezioni orizzontali Le sezioni sono nascoste come per esempio:\n• Ultime notizie\n• Continua a guardare\n• Esplora altri canali\n• Shopping\n• Guarda di nuovo Le sezioni sono visibili - Nascondi il bottone \'Unisci\' - Il bottone è nascosto - Il bottone è visibile + Nascondi il pulsante \'Unisci\' + Il pulsante è nascosto + Il pulsante è visibile Nascondi la sezione \'Per te\' nella pagina del canale Sezione \'Per te\' nascosta Sezione \'Per te\' visibile - Nascondi il pulsante \'Notifica\' - Il bottone è nascosto - Il bottone è visibile + Nascondi il pulsante \'Notificami\' + Il pulsante è nascosto + Il pulsante è visibile Nascondi le raccomandazioni \'Altri hanno guardato anche\' - Suggerimenti nascosti - Suggerimenti visibili + Le raccomandazioni sono nascoste + Le raccomandazioni sono visibili Nascondi il pulsante \'Mostra di più\' - Il bottone è nascosto - Il bottone è visibile + Il pulsante è nascosto + Il pulsante è visibile Nascondi le reazioni a tempo - Reazioni a tempo nascoste - Reazioni a tempo visibili + Le reazioni a tempo sono nascoste + Le reazioni a tempo sono visibili Nascondi intestazione dei risultati di ricerca Le intestazioni sono nascoste - Intestazioni visibili - Nascondi linee guida del canale - Linee guida del canale nascoste - Linee guida del canale visibili - Nascondi scaffale chip - Lo scaffale di chip è nascosto - Lo scaffale delle fiches è mostrato - Nascondi il frammento espandibile sotto i video - Frammenti espandibili nascosti - Frammenti espandibili visibili + L\'intestazione è visibile + Nascondi le linee guida dei canali + Le linee guida del canale sono nascoste + Le linee guida del canale sono visibili + Nascondi la sezione chip + La sezione dei chip è nascosta + La sezione dei chip è visibile + Nascondi i chip espandibili sotto i video + I chip espandibili sono nascosti + I chip espandibili sono visibili Nascondi i post della community - Post della community nascosti - Post della community visibili + I post della community sono nascosti + I post della community sono visibili Nascondi i banner compatti - Banner compatti nascosti - Banner compatti visibili - Nascondi sezione film - Sezione film nascosta - Sezione film visibile + I banner compatti sono nascosti + I banner compatti sono visibili + Nascondi la sezione film + La sezione film è nascosta + La sezione film è visibile Nascondi sondaggi nel feed - Sondaggi nel feed nascosti - Sondaggi nel feed visibili - Nascondi linee guida della community - Linee guida della community nascoste - Linee guida della community visibili - Nascondi le linee guida della comunità degli abbonati - Le linee guida della comunità degli abbonati sono nascoste - Le linee guida della comunità degli abbonati sono mostrate - Nascondi entrata dei membri del canale - Entrata dei membri del canale nascosta - Entrata dei membri del canale visibile + I sondaggi nel feed sono nascosti + I sondaggi nel feed sono visibili + Nascondi le linee guida della community + Le linee guida della community sono nascoste + Le linee guida della community sono visibili + Nascondi le linee guida degli iscritti alla community + Le linee guida degli iscritti alla community sono nascoste + Le linee guida degli iscritti alla community sono visibili + Nascondi la lista dei membri del canale + La lista dei membri del canale è visibile + La sezione dei membri del canale è visibile Nascondi riquadri di emergenza - Riquadri di emergenza nascosti - Riquadri di emergenza visibili - Nascondi pannello delle info - Pannelli delle info nascosti - Pannelli delle info visibili - Nascondi pannelli medici - Pannelli medici nascosti - Pannelli medici visibili + I riquadri di emergenza sono nascosti + I riquadri di emergenza sono visibili + Nascondi i pannelli informativi + I pannelli informativi sono nascosti + I pannelli informativi sono visibili + Nascondi i pannelli medici + I pannelli medici sono nascosti + I pannelli medici sono visibili Nascondi barra del canale - Barra del canale nascosta - Barra del canale visibile + La barra del canale è nascosta + La barra dei canali è visibile Nascondi Sala Giochi - I riproducibili sono nascosti - I riproducibili sono mostrati - Nascondi azioni rapide in schermo interno - Azioni rapide nascoste - Azioni rapide visibili + I giochi sono nascosti + I giochi sono visibili + Nascondi azioni rapide a schermo intero + Le azioni rapide sono nascoste + Le azioni rapide sono visibili Nascondi video correlati nelle azioni rapide Video correlati nascosti Video correlati visibili - Nascondi lo scaffale immagine nei risultati di ricerca - Lo scaffale dell\'immagine è nascosto - Lo scaffale immagine è mostrato + Nascondi pubblicità con immagini nei risultati di ricerca + Le pubblicità con immagini sono nascoste + Le pubblicità con immagini sono visibili Nascondi i post più recenti Gli ultimi post sono nascosti Gli ultimi post sono mostrati @@ -227,111 +228,111 @@ This is because Crowdin requires temporarily flattening this file and removing t Nascondi la sezione \'Esplora il podcast\' La sezione \'Esplora il podcast\' è nascosta La sezione \'Esplora il podcast\' è visibile - Nascondi sezione schede info - La sezione delle schede informative è nascosta - La sezione delle schede informative è mostrata - Nascondi la sezione \'Concetti chiave\' + Nascondi la sezione Schede Informative + La sezione Schede Informative è nascosta + La sezione Schede Informative è visibile + Nascondi la sezione \"Momenti Chiave\" La sezione \'Concetti chiave\' è nascosta - La sezione \'Concetti chiave\' è visibile + La sezione \'Momenti Chiave\' è visibile Nascondi la sezione Trascrizione - La sezione della trascrizione è nascosta - La sezione della trascrizione è mostrata - Descrizione video - Nascondi o mostra i componenti della descrizione video + La sezione Trascrizione è nascosta + La sezione Trascrizione è visibile + Descrizione del video + Mostra o nascondi i componenti della descrizione del video Barra dei filtri Nascondi o mostra la barra dei filtri nel feed, nella ricerca e nei video correlati Nascondi nel feed Nascosto nel feed - Mostrato nel feed + È visibile nel feed Nascondi nella ricerca Nascosto nella ricerca - Mostrato nella ricerca + È visibile nella ricerca Nascondi nei video correlati Nascosto nei video correlati - Mostrato in video correlati + È visibile nei video correlati Commenti - Nascondi o mostra i componenti della sezione commenti + Mostra o nascondi i componenti della sezione commenti Nascondi l\'intestazione \'Commenti dai membri\' - \'Commenti dei membri\' intestazione è nascosta - L\'intestazione \'Commenti dei membri\' è mostrata - Nascondi sezione commenti - La sezione commenti è nascosta - La sezione Commenti è mostrata - Nascondi il pulsante \'Crea un Short\' + L\'intestazione \'Commenti dai membri\' è nascosta + L\'intestazione \'Commenti dai membri\' è visibile + Nascondi la sezione Commenti + La sezione Commenti è nascosta + La sezione Commenti è visibile + Nascondi il pulsante \'Crea uno Short\' Il pulsante \'Crea uno Short\' è nascosto Il pulsante \'Crea uno Short\' è visibile - Nascondi commento anteprima - Il commento nell\'anteprima è nascosto - Anteprima commento mostrata - Nascondi pulsante grazie - Grazie pulsante è nascosto - Il pulsante di ringraziamento è mostrato + Nascondi il commento di anteprima + Il commento di anteprima è nascosto + Il commento di anteprima è visibile + Nascondi il pulsante Grazie + Il pulsante Grazie è nascosto + Il pulsante Grazie è visibile Nascondi i pulsanti timestamp ed emoji I pulsanti Timestamp ed emoji sono nascosti I pulsanti Timestamp ed emoji sono visibili - Nascondi Doodles Di YouTube - Barra di ricerca Doodles sono nascosti - Barra di ricerca Le Doodles sono mostrate - YouTube Doodles si presenta un paio di giorni ogni anno.\n\nSe un Doodle è attualmente in mostra nella tua regione e questa impostazione di nascondimento è attiva, poi la barra dei filtri sotto la barra di ricerca sarà anche nascosta. + Nascondi Doodles di YouTube + I Doodle nella barra di ricerca sono nascosti + I Doodle nella barra di ricerca sono visibili + I Doodle di YouTube compaiono in un paio di giorni ogni anno.\n\nSe un Doodle di YouTube è attualmente mostrato nella tua regione e questa impostazione è attiva, allora anche la barra dei filtri sotto la barra di ricerca sarà nascosta. Filtro personalizzato - Nascondi componenti utilizzando filtri personalizzati - Abilita filtro personalizzato - Filtro personalizzato abilitato - Il filtro personalizzato è disabilitato + Nascondi i componenti usando i filtri personalizzati + Attiva il filtro personalizzato + Il filtro personalizzato è attivato + Il filtro personalizzato è disattivato Filtro personalizzato - Elenco delle stringhe di generatore di percorsi componenti da filtrare separate da una nuova riga + L\'elenco dei componenti da filtrare separati da nuove righe Filtro personalizzato non valido: %s Nascondi contenuto di parole chiave - Nascondi la ricerca e alimenta i video usando i filtri per le parole chiave - Nascondi i video home per parole chiave - I video nella scheda home sono filtrati per parole chiave - I video nella scheda home non sono filtrati per parole chiave - Nascondi video in abbonamento per parole chiave - I video nella scheda abbonamenti sono filtrati per parole chiave - I video nella scheda abbonamenti non sono filtrati per parole chiave + Nascondi la ricerca e proponi video usando i filtri per le parole chiave + Nascondi i video della Home in base alle parole chiave + I video nella scheda Home sono filtrati per parole chiave + I video nella scheda Home non sono filtrati per parole chiave + Nascondi i video della scheda Iscrizioni in base alle parole chiave + I video nella scheda Iscrizioni sono filtrati per parole chiave + I video nella scheda Iscrizioni non sono filtrati per parole chiave Nascondi i risultati della ricerca per parole chiave I risultati della ricerca sono filtrati per parole chiave I risultati della ricerca non sono filtrati per parole chiave Parole chiave da nascondere - Parole chiave e frasi da nascondere, separate da nuove righe\n\nLe parole chiave possono essere nomi di canali o qualsiasi testo mostrato nei titoli video\n\nLe parole con lettere maiuscole nel centro devono essere inserite con il contenitore (es: iPhone, TikTok, LeBlanc) + Parole chiave e frasi da nascondere, separate da nuove righe\n\nLe parole chiave possono essere nomi di canali o qualsiasi testo mostrato nei titoli video\n\nLe parole con lettere maiuscole nel centro devono essere inserite con la maiuscola (es: iPhone, TikTok, LeBlanc) Informazioni sul filtro delle parole chiave - Home/Iscrizioni/Risultati di ricerca sono filtrati per nascondere i contenuti che soddisfano parole chiave o frasi\n\nLimitazioni\n• Gli Shorts non possono essere nascosti per nome canale\n• Alcuni componenti dell\'interfaccia potrebbero non essere nascosti\n• La ricerca di una parola chiave potrebbe non visualizzare risultati - Corrispondenza parole intere + Home/Iscrizioni/Risultati di ricerca sono filtrati per nascondere i contenuti che soddisfano parole chiave o frasi\n\nLimitazioni\n• Gli Shorts non possono essere nascosti per nome del canale\n• Alcuni componenti dell\'interfaccia potrebbero non essere nascosti\n• La ricerca di una parola chiave potrebbe non visualizzare risultati + Solo parole intere - Circondare una parola chiave/frase con doppie virgolette impedirà partite parziali di titoli video e nomi di canali<br><br>Per esempio,<br><b>\"ai\"</b> nasconderà il video: <b>How does AI work?</b><br>ma non si nasconde: <b>What does fair use mean?</b> + Racchiudendo una parola chiave o frase tra virgolette doppie si impediranno corrispondenze parziali dei titoli dei video e dei nomi dei canali<br><br>Ad esempio:<br><b>\"ia\"</b> nasconderà il video <b>\"Come funziona la IA?\"</b><br>Ma non nasconderà il video <b>\"Cosa significa imparzialità?\"</b> Impossibile usare la parola chiave: %s - Aggiungi preventivi per usare la parola chiave: %s + Aggiungi le virgolette per usare la parola chiave: %s La parola chiave ha dichiarazioni in conflitto: %s - Parola chiave troppo corta e richiede preventivi: %s - Parola chiave nasconderà tutti i video: %s + La parola chiave è troppo corta e richiede le virgolette: %s + La parola chiave nasconderà tutti i video: %s - Nascondi gli annunci generali - Gli annunci generali sono nascosti - Gli annunci generali sono mostrati - Nascondi gli annunci a schermo intero + Nascondi pubblicità generali + Le pubblicità generali sono nascoste + Le pubblicità generali sono visibili + Nascondi le pubblicità a schermo intero Gli annunci a schermo intero sono nascosti\n\nQuesta funzione è disponibile solo per i vecchi dispositivi - Gli annunci a schermo intero sono mostrati - Nascondi gli annunci pulsante - Gli annunci a bottoni sono nascosti - Gli annunci a bottoni sono mostrati + Le pubblicità a schermo intero sono visibili + Nascondi le pubblicità a pulsante + Le pubblicità a pulsante sono nascoste + Le pubblicità a pulsante sono visibili Nascondi etichetta promozione a pagamento - L\'etichetta promozionale a pagamento è nascosta - L\'etichetta promozionale pagata è mostrata + L\'etichetta della promozione a pagamento è nascosta + L\'etichetta della promozione a pagamento è visibile Nascondi le carte autosponsorizzate Le carte autosponsorizzate sono nascoste Vengono mostrate le carte autosponsorizzate Nascondi banner per visualizzare i prodotti Banner nascosto - Banner mostrato - Nascondi lo scaffale dello shopping + Il banner è visibile + Nascondi la sezione Negozio Lo scaffale è nascosto - Lo scaffale è mostrato + La sezione negozio è visibile Nascondi link agli acquisti nella descrizione del video I link commerciali sono nascosti I collegamenti commerciali sono mostrati @@ -354,119 +355,119 @@ This is because Crowdin requires temporarily flattening this file and removing t Le promozioni di YouTube Premium sotto il lettore video sono mostrate - Nascondi annunci video - Gli annunci video sono nascosti - Gli annunci video sono mostrati + Nascondi le pubblicità del video + Le pubblicità del video sono nascoste + Le pubblicità del video sono visibili URL copiato negli appunti URL con timestamp copiato Mostra il pulsante URL di copia video Il pulsante è visualizzato. Tocca per copiare l\'URL del video. Tocca e tieni premuto per copiare l\'URL del video con timestamp - Il pulsante non è mostrato + Il pulsante non è visibile Mostra il pulsante URL timestamp copia Il pulsante è visualizzato. Tocca per copiare l\'URL del video con timestamp. Tocca e tieni premuto per copiare il video senza timestamp - Il pulsante non è mostrato + Il pulsante non è visibile - Rimuovi la finestra di discrezionalità del visualizzatore + Rimuovi la finestra sulla discrezione dello spettatore La finestra di dialogo verrà rimossa - Verrà visualizzata la finestra + La finestra di dialogo verrà mostrata Questo non aggira la restrizione di età. Lo accetta solo automaticamente. Download esterni Impostazioni per l\'utilizzo di un downloader esterno - Mostra il pulsante di download esterno - Pulsante download mostrato nel giocatore - Pulsante download non mostrato nel giocatore + Mostra il pulsante Scarica esterno + Il pulsante Scarica è visibile nel player + Il pulsante Scarica non è visibile nel player - Sovrascrivi il pulsante azione download + Sovrascrivi il pulsante azione Scarica Il pulsante Scarica apre il tuo downloader esterno - Il pulsante di download apre il nativo in-app downloader - Nome pacchetto Downloader - Nome del pacchetto dell\'applicazione esterna di downloader installata, come NewPipe o Seal + Il pulsante Scarica apre il nativo in-app downloader + Nome pacchetto downloader + Nome del pacchetto dell\'applicazione esterna di download installata, come NewPipe o Seal %s non è installato. Installalo. Disabilita il gesto di ricerca preciso Il gesto è disabilitato - Gesture abilitata + Il gesto è abilitato - Abilita toccando la seekbar - Tocco barra di ricerca è abilitato - Tocco barra di ricerca disabilitato + Attiva il tocco della barra di avanzamento + Il tocco della barra di avanzamento è attivato + Il tocco della barra di avanzamento è disattivato - Abilita gesto luminosità - Lo scorrimento della luminosità è abilitato - Lo scorrimento della luminosità è disabilitato - Abilita gesto volume - Scorrimento del volume abilitato - Scorrimento del volume è disabilitato - Abilita il gesto di scorrimento - Press-to-swipe è abilitato - Press-to-swipe è disabilitato - Abilita feedback tattile + Attiva il gesto per modificare la luminosità + Il gesto per modificare la luminosità è attivato + Il gesto per modificare la luminosità è disattivato + Attiva il gesto per modificare il volume + Il gesto del volume è attivato + Il gesto del volume è disattivato + Attiva il gesto Premi-per-Scorrere + Premi-per-Scorrere è attivato + Premi-per-Scorrere è disattivato + Abilita il feedback aptico Il feedback aptico è abilitato Il feedback aptico è disabilitato Salva e ripristina la luminosità - Salva e ripristina la luminosità quando esci o entra a schermo intero - Non salvare e ripristinare la luminosità quando si esce o si entra a schermo intero - Abilita gesto di luminosità automatica + Salva e ripristina la luminosità quando esci o entri a schermo intero + Non salvare e ripristinare la luminosità quando esci o entri a schermo intero + Attiva il gesto della luminosità automatica Scorri verso il basso fino al valore più basso del gesto luminosità per abilitare la luminosità automatica Scorrendo verso il basso, il valore più basso non abilita la luminosità automatica Automatico - Timeout sovrapposizione swipe - La quantità di millisecondi la sovrapposizione è visibile - Scorri la dimensione del testo sovrapposta + Timeout sovrapposizione dello scorrimento + La visibilità in millisecondi della sovrapposizione + Dimensione del testo sovrapposto dello scorrimento La dimensione del testo per la sovrapposizione dello scorrimento - Visibilità scorrimento sfondo - La visibilità dello scorrimento sullo sfondo - Soglia magnitudine scorrimento - La quantità di soglia per lo scorrimento che si verifica + Visibilità sfondo durante lo scorrimento + La visibilità dello sfondo in sovrapposizione durante lo scorrimento + Ampiezza limite della soglia di scorrimento + Il limite di ampiezza entro cui deve avvenire lo scorrimento - Disabilita didascalie automatiche - Le didascalie automatiche sono disabilitate - Le didascalie automatiche sono abilitate + Disabilita i sottotitoli automatici + I sottotitoli automatici sono disabilitati + I sottotitoli automatici sono abilitati Pulsanti azione - Nascondi o mostra i pulsanti sotto i video - Nascondi Mi piace e Dispiace - I pulsanti Mi piace e Dislike sono nascosti - I pulsanti Mi piace e Dispiace sono mostrati + Mostra o nascondi i pulsanti sotto i video + Nascondi Mi Piace e Non Mi Piace + I pulsanti Mi Piace e Non Mi Piace sono nascosti + I pulsanti Mi Piace e Non Mi Piace sono visibili - Nascondi Condivisione - Il pulsante di condivisione è nascosto - Il pulsante di condivisione è mostrato + Nascondi Condividi + Il pulsante Condividi è nascosto + Il pulsante Condividi è visibile - Nascondi Report - Il pulsante Report è nascosto - Il pulsante Report è mostrato + Nascondi Segnala + Il pulsante Segnala è nascosto + Il pulsante Segnala è visibile Nascondi Remix Il pulsante Remix è nascosto - Il pulsante Remix è mostrato + Il pulsante Remix è visibile - Nascondi Download - Il pulsante di download è nascosto - Il pulsante di download è mostrato + Nascondi Scarica + Il pulsante Scarica è nascosto + Il pulsante Scarica è visibile Nascondi Grazie Grazie pulsante è nascosto - Il pulsante di ringraziamento è mostrato + Il pulsante Grazie è visibile Nascondi Clip Il pulsante clip è nascosto - Il pulsante clip è mostrato + Il pulsante Clip è visibile Nascondi Salva nella playlist Il pulsante Salva nella playlist è nascosto - Il pulsante Salva nella playlist è mostrato + Il pulsante Salva nella playlist è visibile Navigation buttons @@ -474,7 +475,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Nascondi Home Il pulsante Home è nascosto - Il pulsante Home è mostrato + Il pulsante Home è visibile Nascondi Shorts Il pulsante Shorts è nascosto @@ -482,14 +483,14 @@ This is because Crowdin requires temporarily flattening this file and removing t Nascondi Crea Il pulsante Crea è nascosto - Il pulsante Crea è mostrato + Il pulsante Crea è visibile Nascondi Abbonamenti Il pulsante di sottoscrizioni è nascosto - Il pulsante di sottoscrizioni è mostrato + Il pulsante Iscrizioni è visibile Cambia Crea con le notifiche - Il pulsante Crea viene scambiato con il pulsante Notifiche\n\nNota: Abilitando questo nasconde anche gli annunci video + Il pulsante Crea viene scambiato con il pulsante Notifiche\n\nNota: Abilitando questo nasconde anche le pubblicità video Il pulsante Crea non è cambiato con il pulsante Notifiche Nascondi etichette dei pulsanti di navigazione Le etichette sono nascoste @@ -497,82 +498,82 @@ This is because Crowdin requires temporarily flattening this file and removing t Flyout menu - Nascondi o mostra le voci del menu di flyout del giocatore + Mostra o nascondi le voci del menu di flyout del player - Nascondi Didascalie - Il menu delle didascalie è nascosto - Il menu delle didascalie è mostrato + Nascondi Sottotitoli + Il menu Sottotitoli è nascosto + Il menu Sottotitoli è visibile - Nascondi impostazioni aggiuntive - Il menu delle impostazioni aggiuntive è nascosto - Viene mostrato il menu impostazioni aggiuntive + Nascondi Impostazioni aggiuntive + Il menu Impostazioni aggiuntive è nascosto + Il menu Impostazioni aggiuntive è visibile - Nascondi timer di sospensione - Il menu del timer di spegnimento è nascosto - Viene mostrato il menù del timer di spegnimento + Nascondi Timer di sospensione + Il menu Timer di sospensione è nascosto + Il menu Timer di sospensione è visibile - Nascondi video Loop - Il menu video Loop è nascosto - Viene mostrato il menu video Loop + Nascondi Loop del video + Il menu Loop del video è nascosto + Il menu Loop del video è visibile Nascondi la modalità Ambient - Il menu della modalità Ambient è nascosto - Viene mostrato il menu della modalità Ambient - Nascondi volume stabile - Viene mostrato il menu volume stabile - Il menu volume stabile è nascosto + Il menu Modalità Ambient è nascosto + Il menu Modalità Ambient è visibile + Nascondi Volume Stabile + Il menu Volume Stabile è visibile + Il menu Volume Stabile è nascosto - Nascondi Aiuto & feedback - Aiuto & menu di feedback è nascosto - Il menu di feedback di Aiuto & è mostrato + Nascondi Guida e feedback + Il menu Guida e Feedback è nascosto + Il menu Guida e feedback è visibile - Nascondi velocità di riproduzione - Il menu della velocità di riproduzione è nascosto - Il menu della velocità di riproduzione è mostrato + Nascondi Velocità di riproduzione + Il menu Velocità di riproduzione è nascosto + Il menu Velocità di riproduzione è visibile - Nascondi maggiori informazioni - Più info menu è nascosto - Più info menu è mostrato + Nascondi Maggiori Informazioni + Il menu Maggiori Informazioni è nascosto + Il menu Maggiori Informazioni è visibile - Nascondi schermata di blocco - Il menu della schermata di blocco è nascosto - Il menu della schermata di blocco è mostrato + Nascondi Blocca schermo + Il menu Blocca Schermo è nascosto + Il menu Blocca Schermo è visibile - Nascondi traccia audio - Il menu traccia audio è nascosto - Il menu traccia audio è mostrato + Nascondi Traccia audio + Il menu Traccia audio è nascosto + Il menu Traccia audio è visibile - Nascondi orologio in VR - Guarda nel menu VR è nascosto - Guarda nel menu VR + Nascondi Guarda in VR + Il menu Guarda in VR è nascosto + Il menu Guarda in VR è visibile Nascondi piè di pagina del menu qualità video Il piè di pagina del menu di qualità video è nascosto - Viene mostrato il piè di pagina del menu qualità video + Il piè di pagina del menu di qualità video è visibile - Nascondi i pulsanti video precedenti & + Nascondi i pulsanti video precedenti & successivi I pulsanti sono nascosti - I pulsanti sono mostrati + I pulsanti sono visibili Nascondi pulsante cast Il pulsante Trasmetti è nascosto Il pulsante Trasmetti è visibile - Nascondi il pulsante didascalie - Il pulsante sottotitoli è nascosto - Il pulsante sottotitoli è mostrato - Nascondi pulsante autoplay - Il pulsante Autoplay è nascosto - Il pulsante Autoplay è mostrato + Nascondi il pulsante Sottotitoli + Il pulsante Sottotitoli è nascosto + Il pulsante Sottotitoli è visibile + Nascondi il pulsante Riproduzione Automatica + Il pulsante Riproduzione Automatica è nascosto + Il pulsante Riproduzione Automatica è visibile - Nascondi schede di fine schermo - Le schede di fine schermo sono nascoste - Vengono mostrate le schede di fine schermo + Nascondi le schede della schermata finale + Le schede della schermata finale sono nascoste + Le schede della schermata finale sono visibili - Disabilita la modalità ambiente a schermo intero - Modalità ambiente disabilitata + Disabilita la Modalità Ambient a schermo intero + Modalità Ambient disabilitata Modalità Ambient abilitata @@ -589,249 +590,249 @@ This is because Crowdin requires temporarily flattening this file and removing t Nascondi la barra di ricerca nel lettore video La barra di ricerca del lettore video è nascosta La barra di ricerca del lettore video è mostrata - Nascondi la barra di ricerca nelle miniature video - La barra di ricerca delle miniature è nascosta - Barra di ricerca miniature mostrata + Nascondi la barra di avanzamento nelle miniature video + La barra di avanzamento nelle miniature dei video è nascosta + La barra di avanzamento nelle miniature dei video è visibile - Riproduttore Shorts - Nascondi o mostra i componenti nel riproduttore Shorts + Player Shorts + Mostra o nascondi i componenti nel player Shorts Nascondi Shorts nella scheda Home - Gli Shorts nella schermata principale sono nascosti - Gli Shorts nella schermata principale sono visibili + Gli Shorts nella schermata Home sono nascosti + Gli Shorts nella schermata Home sono visibili - Nascondi Shorts nel feed di abbonamento - Shorts in abbonamento feed sono nascosti - Gli Shorts nella schermata abbonamento sono visibili - Nascondi i Video Short nei risultati delle ricerche - Shorts nei risultati di ricerca sono nascosti + Nascondi gli Shorts della scheda Iscrizioni + Gli Shorts della schermata Iscrizioni sono nascosti + Gli Shorts della schermata Iscrizioni sono visibili + Nascondi gli Shorts dei risultati di ricerca + Gli Shorts nei risultati di ricerca sono nascosti Vengono visualizzati gli Shorts nei risultati di ricerca - Nascondi pulsante join - Il pulsante Entra è nascosto - Il pulsante di accesso è mostrato + Nascondi il pulsante Abbonati + Il pulsante Abbonati è nascosto + Il pulsante Abbonati è visibile - Nascondi pulsante di sottoscrizione - Il pulsante di sottoscrizione è nascosto - Il pulsante di sottoscrizione è mostrato - Nascondi pulsanti di sovrapposizione in pausa + Nascondi il pulsante Iscriviti + Il pulsante Iscriviti è nascosto + Il pulsante Iscriviti è visibile + Nascondi i pulsanti di sovrapposizione quando il video è in pausa I pulsanti di sovrapposizione in pausa sono nascosti - I pulsanti di sovrapposizione in pausa sono mostrati - Nascondi pulsante negozio - Il pulsante del negozio è nascosto - Il pulsante del negozio è mostrato - Nascondi il pulsante super grazie - Il pulsante super grazie è nascosto - Il pulsante super grazie è visibile - Nascondi prodotti taggati - Prodotti etichettati sono nascosti + I pulsanti di sovrapposizione in pausa sono visibili + Nascondi il pulsante Negozio + Il pulsante Negozio è nascosto + Il pulsante Negozio è visibile + Nascondi il pulsante Super Grazie + Il pulsante Super Grazie è nascosto + Il pulsante Super Grazie è visibile + Nascondi i prodotti etichettati + I prodotti etichettati sono nascosti Prodotti etichettati sono mostrati - Nascondi etichetta posizione - L\'etichetta di localizzazione è nascosta - L\'etichetta di posizione è mostrata - Nascondi il pulsante per salvare musica - Il pulsante Salva musica è nascosto - Il pulsante Salva musica è mostrato - Nascondi il pulsante modello di utilizzo - Il pulsante Usa modello è nascosto - Il pulsante Usa modello è mostrato - Nascondi il pulsante imminente - Il prossimo pulsante è nascosto - Prossimo pulsante è mostrato - Nascondi pulsante schermo verde - Il pulsante dello schermo verde è nascosto - Il pulsante schermo verde è mostrato + Nascondi etichetta di posizione + L\'etichetta di posizione è nascosta + L\'etichetta di posizione è visibile + Nascondi il pulsante Salva traccia + Il pulsante Salva traccia è nascosto + Il pulsante Salva traccia è visibile + Nascondi il pulsante Utilizza modello + Il pulsante Utilizza modello è nascosto + Il pulsante Utilizza modello è visibile + Nascondi il pulsante Imminente + Il pulsante Imminente è nascosto + Il pulsante Imminente è visibile + Nascondi il pulsante Schermo verde + Il pulsante Schermo verde è nascosto + Il pulsante Schermo verde è visibile Nascondi pulsante hashtag Il pulsante Hashtag è nascosto - Il pulsante Hashtag è mostrato - Nascondi suggerimenti di ricerca + Il pulsante Hashtag è visibile + Nascondi i suggerimenti di ricerca I suggerimenti di ricerca sono nascosti - I suggerimenti di ricerca sono mostrati + I suggerimenti di ricerca sono visibili Nascondi adesivi Gli adesivi sono nascosti - Gli adesivi sono mostrati - Nascondi come fontana - Come l\'animazione della fontana del pulsante è nascosta - Come l\'animazione del pulsante fontana è mostrata - Nascondi pulsante come - Il pulsante simile è nascosto - Il pulsante simile è mostrato - Nascondi pulsante dissimile - Il pulsante Dislike è nascosto - Il pulsante Dislike è mostrato - Pulsante Nascondi commenti - Il pulsante commenti è nascosto - Il pulsante Commenti è mostrato + Gli adesivi sono visibili + Nascondi fontana di Mi Piace + L\'animazione della fontana di Mi Piace è nascosta + L\'animazione della fontana di Mi Piace è visibile + Nascondi il pulsante Mi Piace + Il pulsante Mi Piace è nascosto + Il pulsante Mi Piace è visibile + Nascondi il pulsante Non Mi Piace + Il pulsante Non Mi Piace è nascosto + Il pulsante Non Mi Piace è visibile + Nascondi il pulsante Commenti + Il pulsante Commenti è nascosto + Il pulsante Commenti è visibile Nascondi pulsante remix Il pulsante Remix è nascosto - Il pulsante Remix è mostrato + Il pulsante Remix è visibile - Nascondi pulsante di condivisione - Il pulsante di condivisione è nascosto - Il pulsante di condivisione è mostrato - Nascondi pannello informazioni - Il pannello informazioni è nascosto - Pannello informazioni mostrato + Nascondi il pulsante Condividi + Il pulsante Condividi è nascosto + Il pulsante Condividi è visibile + Nascondi pannello Informazioni + Il pannello Informazioni è nascosto + Il pannello Informazioni è visibile Nascondi barra del canale - Barra del canale nascosta - Barra del canale visibile + La barra del canale è nascosta + La barra dei canali è visibile Nascondi il titolo del video Il titolo è nascosto - Il titolo è mostrato + Il titolo è visibile Nascondi etichetta dei metadati sonori - Etichetta dei metadati nascosta - Etichetta dei metadati mostrata - Nascondi l\'etichetta completa del collegamento video - Etichetta link video nascosta - Etichetta link video mostrata - Nascondi pulsante audio - Il pulsante audio è nascosto - Il pulsante audio è mostrato - Nascondi barra di navigazione + L\'etichetta dei metadati è nascosta + L\'etichetta dei metadati è visibile + Nascondi l\'etichetta del link del video + L\'etichetta del link del video è nascosta + L\'etichetta del link del video è visibile + Nascondi il pulsante Suono + Il pulsante Suono è nascosto + Il pulsante Suono è visibile + Nascondi la barra di navigazione La barra di navigazione è nascosta - Barra di navigazione mostrata + La barra di navigazione è visibile - Disabilita la schermata finale del video suggerita + Disabilita i video suggeriti alla fine del video I video suggeriti saranno disabilitati Verranno mostrati i video suggeriti Nascondi timestamp video Il timestamp è nascosto - Marcatura oraria mostrata + Il timestamp è visibile - Nascondi i pannelli popup del giocatore - I pannelli popup del giocatore sono nascosti - I pannelli popup del giocatore sono mostrati + Nascondi i pannelli popup del player + I pannelli popup del player sono nascosti + I pannelli popup del player sono visibili - Opacità sovrapposizione del giocatore - Valore di opacità tra 0-100, dove 0 è trasparente + Opacità sovrapposizione del player + Il valore dell\'opacità compreso tra 0 e 100, dove 0 è trasparente L\'opacità della sovrapposizione del lettore deve essere compresa tra 0-100 - API dei Dislike temporaneamente non disponibile - Non piace (stato %d) - Dislikes not available (client API limit reached) - Dislikes not available (%s) + Non Mi Piace temporaneamente non disponibili (API scaduto) + Non Mi Piace non disponibili (stato: %d) + I Non Mi Piace non sono disponibili (il limite del client API è stato raggiunto) + Non Mi Piace non disponibili (%s) - Ricarica il video per votare utilizzando Return YouTube Dislike - I dislikes sono mostrati - Non sono mostrati i dislikes - Mostra i dislikes su Shorts - Dislikes visualizzati su Shorts + Ricarica il video per votare usando Return YouTube Dislike + I Non Mi Piace sono visibili + I Non Mi Piace non sono visibili + Mostra i Non Mi Piace degli Shorts + I Non Mi Piace degli Shorts sono visibili I non mi piace sono visibili su Shorts\n\nLimitazione: I non mi piace potrebbero non apparire in modalità incognito - Non piace nascosto su Shorts - Non piace come percentuale - Dislikes mostrati come percentuale - Dislikes mostrati come numero + I Non Mi Piace degli Shorts sono nascosti + I Non Mi piace in percentuale + I Non Mi Piace sono mostrati come percentuale + I Non Mi Piace sono mostrati come numero Pulsante compatto - Pulsante simile per larghezza minima - Come pulsante in stile per la migliore apparenza + Pulsante Mi Piace riadattato per una larghezza minima + Pulsante Mi Piace riadattato per la migliore visualizzazione Mostra un toast se l\'API non è disponibile - Il toast è mostrato se Restituisce YouTube Dislike non è disponibile - Il toast non è mostrato se Restituisce YouTube Dislike non è disponibile + Una notifica è mostrata se Return YouTube Dislike non è disponibile + Nessuna notifica è mostrata se Return YouTube Dislike non è disponibile Informazioni - I dati sono forniti dall\'API Return YouTube Dislike YouTube. Tocca qui per saperne di più + I dati vengono forniti dall\'API Return YouTube Dislike. Tocca qui per saperne di più - Restituisce le statistiche API di YouTubeDislike di questo dispositivo - Tempo di risposta API, media - Tempo di risposta API, minimo - Tempo di risposta API, massimo - Tempo di risposta API, ultimo video - Dislikes temporarily not available - Client API rate limit in effect - Voti API, numero di chiamate + Statistiche dell\'API di ReturnYouTubeDislike per questo dispositivo + Tempo di risposta dell\'API, media + Tempo di risposta dell\'API, minimo + Tempo di risposta dell\'API, massimo + Tempo di risposta dell\'API, ultimo video + Non Mi Piace temporaneamente non disponibile - Limite di velocità dell\'API client in vigore + Fetch API, numero di chiamate Nessuna chiamata di rete effettuata - Chiamate di rete %d effettuate - Voti API, numero di timeout + %d chiamate di rete effettuate + Fetch API, numero di timeout Nessuna chiamata di rete scaduta Chiamate di rete %d scadute - Limiti di frequenza client API - Nessun limite di tasso client riscontrato + Limiti di velocità client API + Nessun limite di velocità client riscontrato Limite di velocità client rilevato %d volte %d millisecondi - Abilita barra di ricerca larga - La barra di ricerca ampia è abilitata - L\'ampia barra di ricerca è disabilitata + Attiva la barra di ricerca estesa + La barra di ricerca estesa è abilitata + La barra di ricerca estesa è disabilitata Abilita miniature di alta qualità - Le miniature di Seekbar sono di alta qualità - Le miniature di Seekbar sono di media qualità - Le miniature della barra di ricerca a schermo intero sono di alta qualità - Le miniature della barra di ricerca a schermo intero sono di media qualità - Questo ripristinerà anche le miniature sui livestreams che non hanno miniature nella barra di ricerca. Le miniature\n\nSeekbar useranno la stessa qualità del video corrente.\n\nQuesta funzione funziona al meglio con una qualità video di 720p o inferiore e quando si utilizza una connessione internet molto veloce. - Ripristina vecchie miniature della barra di ricerca - Le miniature della barra di ricerca appariranno sopra la barra di ricerca - Le miniature della barra di ricerca appariranno a schermo intero + Le miniature della barra di avanzamento sono di alta qualità + Le miniature della barra di avanzamento sono di media qualità + Le miniature della barra di avanzamento a schermo intero sono di alta qualità + Le miniature della barra di avanzamento a schermo intero sono di media qualità + Questo ripristinerà anche le miniature nelle dirette che non hanno miniature nella barra di avanzamento.\n\nLe miniature della berra di avanzamento useranno la stessa qualità del video corrente.\n\nQuesta funzione funziona al meglio con una qualità video di 720p o inferiore e quando si utilizza una connessione internet molto veloce. + Ripristina vecchie miniature della barra di avanzamento + Le miniature della barra di avanzamento appariranno sopra la barra di avanzamento + Le miniature della barra di avanzamento appariranno a schermo intero Abilita SponsorBlock - SponsorBlock è un sistema crowd-sourced per saltare parti fastidiose dei video di YouTube + SponsorBlock è un sistema collaborativo creato per saltare le parti fastidiose nei video di YouTube Aspetto - Mostra pulsante di voto - Il pulsante di voto del segmento è mostrato - Il pulsante di voto del segmento non è mostrato + Mostra il pulsante di voto + Il pulsante di voto del segmento è visibile + Il pulsante di voto del segmento è nascosto - Usa il tasto salto compatto - Tasto salta in stile per una larghezza minima - Pulsante salta in stile per il miglior aspetto - Nascondi automaticamente il pulsante Salto + Utilizza il pulsante Salta compatto + Pulsante Salta riadattato per una larghezza minima + Pulsante Salta riadattato per la migliore visualizzazione + Nascondi automaticamente il pulsante Salta Il pulsante Salta si nasconde dopo alcuni secondi - Pulsante salta visualizzato per l\'intero segmento - Mostra un toast quando si salta automaticamente - Il toast viene mostrato quando un segmento viene saltato automaticamente. Tocca qui per vedere un esempio - Il Toast non è mostrato. Tocca qui per vedere un esempio - Mostra lunghezza video senza segmenti - Lunghezza video meno tutti i segmenti, mostrati tra parentesi accanto alla lunghezza completa del video - Lunghezza completa del video mostrata - Creare nuovi segmenti - Mostra il pulsante crea un nuovo segmento - Il pulsante Crea nuovo segmento è mostrato - Il pulsante Crea un nuovo segmento non è mostrato - Regola il nuovo passo di segmento - Numero di millisecondi i pulsanti di regolazione del tempo si muovono quando si creano nuovi segmenti + Il pulsante Salta è visibile per tutta la durata del segmento + Mostra una notifica quando un segmento è saltato automaticamente + La notifica è visibile quando un segmento è saltato automaticamente. Tocca qui per vedere un esempio + La notifica è nascosta. Tocca qui per vedere un esempio + Mostra la durata del video senza segmenti + La durata del video meno tutti gli eventuali segmenti, visibile tra parentesi accanto alla durata del video completo + La durata totale del video è visibile + Creazione di nuovi segmenti + Mostra il pulsante Crea Nuovo Segmento + Il pulsante Crea nuovo segmento è visibile + Il pulsante Crea nuovo segmento non è visibile + Regola passo del nuovo segmento + Il tempo in millisecondi che spostano i pulsanti quando si creano nuovi segmenti Il valore deve essere un numero positivo - Leggi linee guida + Leggi le linee guida Le linee guida contengono regole e suggerimenti per la creazione di nuovi segmenti - Seguire le linee guida + Segui le linee guida Leggi le linee guida di SponsorBlock prima di creare nuovi segmenti Già lette Mostramele Generale - Mostra un toast se l\'API non è disponibile - Il toast è mostrato se SponsorBlock non è disponibile - Il toast non è mostrato se SponsorBlock non è disponibile - Abilita tracciamento conteggio salti - Consente alla classifica di SponsorBlock di sapere quanto tempo viene salvato. Viene inviato un messaggio alla classifica ogni volta che un segmento viene saltato - Il tracciamento del contatore Skip non è abilitato - Durata minima segmento + Mostra una notifica se l\'API non è disponibile + La notifica è mostrata se SponsorBlock non è disponibile + La notifica è nascosta se SponsorBlock non è disponibile + Attiva il monitoraggio del conteggio dei salti + Quanto permette al sistema di classifica di SponsorBlock di sapere quanto tempo le persone hanno risparmiato. Viene inviato un messaggio al server ogni volta che salti un segmento + Il monitoraggio del contatore dei salti è disattivato + Durata minima del segmento I segmenti più corti di questo valore (in secondi) non verranno mostrati o saltati Durata del tempo non valida - Id utente privato + Il tuo ID utente privato Questo dovrebbe essere tenuto privato. Questo è come una password e non dovrebbe essere condiviso con nessuno. Se qualcuno possiede questo ID, ti può impersonare - L\'id utente privato deve essere lungo almeno 30 caratteri - Modifica URL API - L\'indirizzo SponsorBlock utilizza per effettuare chiamate al server - URL API reimpostato - URL API non valido - URL API modificato - Importa/Esporta Impostazioni + L\'ID utente privato deve essere lungo almeno 30 caratteri + Modifica l\'URL dell\'API + L\'indirizzo SponsorBlock usato per contattare il server + Reimposta l\'URL dell\'API + URL dell\'API non è valido + URL dell\'API modificato + Importa/Esporta impostazioni Copia - La tua configurazione di SponsorBlock JSON che può essere importata/esportata in ReVanced e altre piattaforme di SponsorBlock + La tua configurazione di SponsorBlock in JSON può essere importata/esportata su ReVanced ed altre piattaforme SponsorBlock La tua configurazione di SponsorBlock JSON che può essere importata/esportata in piattaforme ReVanced e altre SponsorBlock. Questo include il tuo id utente privato. Assicurati di condividere questo saggiamente Impostazioni importate con successo Importazione non riuscita: %s Esportazione non riuscita: %s - Le tue impostazioni contengono un utente privato SponsorBlock.\n\nIl tuo id utente è come una password e non dovrebbe mai essere condiviso.\n + Le tue impostazioni contengono un id utente privato SponsorBlock.\n\nIl tuo id utente è come una password e non dovrebbe mai essere condiviso.\n Non mostrare più Cambia il comportamento del segmento Sponsorizzazione @@ -850,53 +851,53 @@ This is because Crowdin requires temporarily flattening this file and removing t Raccolta di clip che mostrano ciò che è in arrivo o ciò che è successo nel video o in altri video di una serie, dove tutte le informazioni sono ripetute altrove Riempitivi irrilevanti/Battute Scene tangenziali aggiunte solo per riempitivo o umorismo che non sono tenuti a capire il contenuto principale del video. Non comprende i segmenti che forniscono dettagli sul contesto o sullo sfondo - Musica: sezione non musicale + Musica: Sezione Non-Musicale Solo per l\'uso in video musicali. Sezioni di video musicali senza musica, che non sono già coperti da un\'altra categoria Salta - Evidenzia + Momento saliente Salta sponsor - Salta promo - Salta interagire - Salta per evidenziare + Salta promozione + Salta promemoria + Salta al momento saliente Salta introduzione - Salta l\'intermissione - Salta l\'intermissione - Skip outro + Salta intermezzo + Salta intermezzo + Salta conclusione Salta anteprima Salta anteprima - Salta recap + Salta riepilogo Salta riempimento Salta non-musica Salta segmento Sponsorizzazione saltata Autopromozione saltata Promemoria indesiderato saltato - Saltato per evidenziare + Passato al momento saliente Introduzione saltata - Intermissione saltata - Intermissione saltata + Intermezzo saltato + Intermezzo saltato Conclusione saltata Anteprima saltata Anteprima saltata Riepilogo saltato - Filler saltato + Riempitivo saltato Sezione non-musicale saltata Segmento non inviato saltato Segmenti multipli saltati Salta automaticamente Salta automaticamente una volta Mostra un pulsante per saltare - Mostra nella barra di ricerca + Mostra nella barra di avanzamento Disabilita Impossibile inviare il segmento: %s - SponsorBlock è temporaneamente giù + SponsorBlock è temporaneamente non disponibile Impossibile inviare il segmento (stato: %1$d %2$s) - Impossibile inviare il segmento.\nRate Limited (troppi dello stesso utente o IP) + Impossibile inviare il segmento.\nVelocità limitata (troppi dallo stesso utente o IP) Impossibile inviare il segmento: %s Impossibile inviare il segmento.\nEsiste già Segmento inviato con successo - API di Sponsorblock temporaneamente non disponibile + SponsorBlock temporaneamente non disponibile (API scaduto) SponsorBlock temporaneamente non disponibile (stato %d) SponsorBlock temporaneamente non disponibile Impossibile votare per il segmento (API scaduta) @@ -905,7 +906,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Mi piace Non mi piace Modifica categoria - Non ci sono segmenti per i quali votare + Non ci sono segmenti da votare Scegli la categoria del segmento La categoria è disabilitata nelle impostazioni. Abilita la categoria da inviare. Nuovo segmento di SponsorBlock @@ -919,13 +920,13 @@ This is because Crowdin requires temporarily flattening this file and removing t Il segmento parte da\n\n%1$s\na\n%2$s\n\n(%3$s)\n\nPronto per l\'invio? L\'inizio deve essere prima della fine Segna prima due posizioni sulla barra di avanzamento - Anteprima del segmento e assicurarsi che salti senza problemi + Guarda l\'anteprima del segmento e verifica che lo salti senza problemi Modifica manualmente i tempi del segmento Vuoi modificare il tempo di l\'inizio o la fine del segmento? Minutaggio fornito non valido Statistiche - Statistiche temporaneamente non disponibili (API è giù) + Statistiche temporaneamente non disponibili (API non risponde) Caricamento... SponsorBlock è disabilitato Il tuo nome utente: <b>%s</b> @@ -962,9 +963,9 @@ This is because Crowdin requires temporarily flattening this file and removing t Spoof destinazione versione app - 18.38.44 - Ripristinare vecchie icone del giocatore Shorts + 18.38.44 - Ripristinare vecchie icone del player Shorts - 18.33.40 - Ripristina RYD su modalità incognito Shorts + 18.33.40 - Ripristina RYD negli Shorts in modalità incognito 18.20.39 - Ripristina velocità video larga & menu qualità 18.09.39 - Ripristina scheda libreria 17.33.42 - Ripristina vecchi ripiani playlist @@ -974,23 +975,23 @@ This is because Crowdin requires temporarily flattening this file and removing t Predefinito Sfoglia canali Esplora - Gioco - Storico + Giochi + Cronologia Libreria - Piaciuti video + Video piaciuti Live Film Musica Cerca Sport - Abbonamenti + Iscrizioni Tendenze Guarda più tardi - Disabilita il ripristino del giocatore Shorts - Il giocatore Shorts non riprenderà all\'avvio dell\'app - Il giocatore Shorts riprenderà all\'avvio dell\'app + Disabilita la ripresa del player Shorts + Il player Shorts non riprenderà all\'avvio dell\'app + Il player Shorts riprenderà all\'avvio dell\'app Riproduci automaticamente gli Short @@ -1012,7 +1013,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Tipo di Miniplayer Disattivato Originale - Minimo + Minimale Tablet Moderno 1 Moderno 2 @@ -1031,7 +1032,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Gesto di trascinamento orizzontale disabilitato Nascondi pulsante di chiusura Il pulsante di chiusura è nascosto - Il pulsante Chiudi è mostrato + Il pulsante Chiudi è visibile Nascondi i pulsanti espandi e chiudi I pulsanti sono nascosti Scorrimento\n\nper espandere o chiudere I pulsanti Espandi e chiudi sono visibili @@ -1049,21 +1050,21 @@ This is because Crowdin requires temporarily flattening this file and removing t L\'opacità della sovrapposizione Miniplayer deve essere compresa tra 0-100 - Abilita schermata di caricamento gradiente - Lo schermo di caricamento avrà uno sfondo gradiente - Lo schermo di caricamento avrà uno sfondo solido + Abilita la schermata di caricamento col gradiente + La schermata di caricamento avrà uno sfondo col gradiente + La schermata di caricamento avrà uno sfondo a tinta unita - Abilita colore personalizzato della barra di ricerca - Il colore personalizzato della barra di ricerca è mostrato - Il colore originale della barra di ricerca è mostrato - Colore della barra di ricerca personalizzato - Il colore della barra di ricerca - Valore colore seekbar non valido + Abilita colore personalizzato della barra di avanzamento + Il colore personalizzato della barra di avanzamento è visibile + Il colore originale della barra di avanzamento è visibile + Colore della barra di avanzamento personalizzato + Il colore della barra di avanzamento + Valore colore barra di avanzamento non valido - Bypass restrizioni regione immagine - Uso host immagine yt4.ggpht.com + Aggira le restrizioni regionali delle immagini + Usando l\'host yt4.ggpht.com per le immagini Usando l\'host immagine originale\n\nAbilitando questo si possono correggere le immagini mancanti bloccate in alcune regioni @@ -1080,26 +1081,26 @@ This is because Crowdin requires temporarily flattening this file and removing t DeArrow & Cattura ancora Catture ancora DeArrow fornisce miniature di origine folla per i video di YouTube. Queste miniature sono spesso più rilevanti di quelle fornite da YouTube\n\nSe abilitato, URL video verranno inviati al server API e non vengono inviati altri dati. Se un video non dispone di miniature DeArrow, poi le acquisizioni originali o ancora vengono mostrate\n\nTocca qui per saperne di più su DeArrow - Mostra un toast se l\'API non è disponibile - Il toast è mostrato se DeArrow non è disponibile - Il toast non è mostrato se DeArrow non è disponibile - DeArrow API endpoint - L\'URL dell\'endpoint cache delle miniature DeArrow - Catture video ancora - Le acquisizioni sono prese dall\'inizio/mezzo/fine di ogni video. Queste immagini sono integrate in YouTube e non viene utilizzata alcuna API esterna - Usa ancora cattura veloci - Utilizzando catture di media qualità. Le miniature caricheranno più velocemente, ma i flussi live, i video non rilasciati o molto vecchi possono mostrare le miniature vuote - Utilizzando ancora cattura di alta qualità - Tempo di ripresa video da + Mostra una notifica se l\'API non è disponibile + Una notifica è visibile se DeArrow non è disponibile + Nessuna notifica è visibile se DeArrow non è disponibile + Endpoint API di DeArrow + L\'URL dell\'endpoint della cache delle miniature di DeArrow + Istantanea + Le istantanee sono prese all\'inizio, metà o fine di ogni video. Queste immagini sono integrate in YouTube e non viene usato nessun API esterno + Usa istantanee veloci + Utilizzando le istantanee di media qualità le miniature caricheranno più velocemente, ma le dirette, i video non rilasciati o molto vecchi possono mostrare miniature vuote + Utilizzando istantanee di alta qualità + Il tempo del video da cui prendere l\'istantanea Inizio del video - Medio di video + Metà del video Fine del video - DeArrow temporaneamente non disponibile (codice %s) + DeArrow temporaneamente non disponibile (codice: %s) DeArrow temporaneamente non disponibile - Mostra annunci commentati + Mostra annunci ReVanced Gli annunci sono mostrati all\'avvio Gli annunci non sono mostrati all\'avvio Mostra annunci all\'avvio @@ -1108,7 +1109,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Attenzione - La cronologia dell\'orologio non è stata salvata.<br><br>Questo molto probabilmente è causato da un blocco annunci DNS o da un proxy di rete.<br><br>Per risolvere questo problema, whitelist <b>s.youtube.com</b> o disattiva tutti i DNS bloccanti e proxy. + La tua cronologia di visualizzazione non è stata salvata.<br><br>Questo è molto probabilmente dovuto da un blocco annunci DNS o da un proxy di rete.<br><br>Per risolvere questo problema, inserisci nella whitelist <b>s.youtube.com</b> o disattiva tutti i DNS bloccanti e proxy. Non mostrare più @@ -1117,41 +1118,41 @@ This is because Crowdin requires temporarily flattening this file and removing t La ripetizione automatica è disattivata - Dimensioni del dispositivo + Camuffa le dimensioni del dispositivo Dimensioni del dispositivo simulate\n\nLe qualità video più elevate potrebbero essere sbloccate, ma si possono verificare stuttering nella riproduzione video, peggiore durata della batteria ed effetti collaterali sconosciuti Dimensioni dispositivo non simulate\n\nAbilitare questo può sbloccare qualità video superiori Abilitando questo può causare stuttering nella riproduzione video, peggiore durata della batteria ed effetti collaterali sconosciuti. - Impostazioni GmsCore + Impostazioni di GmsCore Impostazioni per GmsCore - Reindirizza gli URL di bypass - I reindirizzamenti URL sono bypassati + Aggira reindirizzamenti dell\'URL + I reindirizzamenti URL sono aggirati I reindirizzamenti URL non sono aggirati Apri link nel browser - Apertura dei collegamenti esternamente - Apertura link nell\'app + Apertura dei link esternamente + Apertura dei link nell\'app - Rimuovere il parametro di tracking query + Rimuovi il parametro di tracciamento della query Il parametro di tracciamento della query viene rimosso dai link Il parametro di tracciamento della query non viene rimosso dai link - Disabilita zoom haptics - Haptics sono disabilitati - Haptics sono abilitati + Disabilita zoom aptico + Il feedback aptico è disabilitato + Il feedback aptico è abilitato Automatico - Ricorda i cambiamenti di qualità video - I cambiamenti di qualità si applicano a tutti i video - I cambiamenti di qualità si applicano solo al video corrente + Ricorda le modifiche della qualità del video + Le modifiche della qualità si applicano a tutti i video + Le modifiche della qualità si applicano solo al video corrente Qualità video predefinita sulla rete Wi-Fi Qualità video predefinita sulla rete mobile mobile @@ -1160,13 +1161,13 @@ This is because Crowdin requires temporarily flattening this file and removing t Mostra il pulsante Velocità Video - Il bottone è visibile - Il pulsante non è mostrato + Il pulsante è visibile + Il pulsante non è visibile Menu di velocità di riproduzione personalizzato - Viene mostrato il menu di velocità personalizzato - Il menu di velocità personalizzato non è mostrato + Il menu di velocità personalizzato è visibile + Il menu di velocità personalizzato non è visibile Velocità di riproduzione personalizzate Aggiungi o modifica la velocità di riproduzione personalizzata Le velocità personalizzate devono essere inferiori a %s. Utilizzando i valori predefiniti. @@ -1182,13 +1183,13 @@ This is because Crowdin requires temporarily flattening this file and removing t Ripristina il vecchio menu di qualità video - Viene mostrato il vecchio menu di qualità video - Il vecchio menu di qualità video non è mostrato + Il vecchio menu di qualità video è visibile + Il vecchio menu di qualità video non è visibile - Abilita la diapositiva da cercare - La diapositiva per cercare è abilitata - La diapositiva per cercare non è abilitata + Abilita scorri per avanzare + Scorri per avanzare è abilitato + Scorri per avanzare non è abilitato Spoof flussi video @@ -1196,68 +1197,68 @@ This is because Crowdin requires temporarily flattening this file and removing t Spoof flussi video I flussi video sono spoofed I flussi video non sono spoofed\n\nLa riproduzione video potrebbe non funzionare - Disattivare questa impostazione potrebbe causare problemi di riproduzione video. + Disattivando questa impostazione potrebbe causare problemi di riproduzione video. Client predefinito Forza AVC (H.264) Il codec video è AVC (H.264) Il codec video è VP9 o AV1 - Il tuo dispositivo non ha la decodifica hardware VP9, e questa impostazione è sempre attiva quando lo spoofing client è abilitato - Abilitando questo si potrebbe migliorare la durata della batteria e correggere la riproduzione della balbuzia.\n\nAVC ha una risoluzione massima di 1080p, e la riproduzione video utilizzerà più dati internet di VP9 o AV1. - iOS spoofing effetti collaterali - • I film o i video a pagamento potrebbero non riprodurre\n• Livestreams start from the start\n• I video potrebbero terminare 1 secondo presto\n• Nessun opus codec audio - Android VR spoofing effetti collaterali - • Il menu traccia audio è mancante\n• Volume stabile non disponibile + Il tuo dispositivo non ha la decodifica hardware VP9 e questa impostazione è sempre attiva quando lo spoof del client è abilitato + L\'attivazione di questa impostazione potrebbe migliorare la durata della batteria e risolvere il problema della riproduzione a scatti.\n\nNota: AVC ha una risoluzione massima di 1080p e la riproduzione userà più dati internet rispetto a VP9 o AV1. + Effetti collaterali spoofing iOS + • I video privati per bambini potrebbero non riprodurre\n• Livestreams start from the start\n• I video potrebbero terminare 1 secondo presto\n• Nessun opus codec audio + Effetti collaterali spoofing Android VR + • I video per bambini potrebbero non riprodurre\n• Il menu traccia audio è mancante\n• Volume stabile non è disponibile - Blocca annunci audio - Gli annunci audio sono bloccati - Gli annunci audio sono sbloccati + Blocca le pubblicità audio + Le pubblicità audio sono bloccate + Le pubblicità audio sono sbloccate - %s non è disponibile. Gli annunci potrebbero mostrare. Prova a passare ad un altro servizio di blocco annunci nelle impostazioni. - Il server %s ha restituito un errore. Gli annunci potrebbero mostrare. Prova a passare ad un altro servizio di blocco annunci nelle impostazioni. - Blocca annunci video incorporati - Disattivato + %s non è disponibile. Le pubblicità potrebbero apparire. Prova a passare ad un altro servizio di blocco pubblicità nelle impostazioni. + Il server %s ha restituito un errore. Le pubblicità potrebbero apparire. Prova a passare ad un altro servizio di blocco pubblicità nelle impostazioni. + Blocca pubblicità video incorporata + Disabilitato Luminous proxy PurpleAdBlock proxy - Blocca annunci video - Gli annunci video sono bloccati - Annunci video sbloccati + Blocca pubblicità video + Le pubblicità video sono bloccate + Le pubblicità video sono sbloccate messaggio eliminato Mostra messaggi eliminati Non mostrare i messaggi eliminati Nascondi i messaggi eliminati dietro uno spoiler - Mostra i messaggi eliminati come testo eliminato + Mostra i messaggi eliminati come testo sbarrato - Richiama automaticamente i punti del canale - I punti del canale vengono rivendicati automaticamente - I punti del canale non vengono rivendicati automaticamente + Riscatta automaticamente i punti del canale + I punti del canale vengono riscattati automaticamente + I punti del canale non vengono riscattati automaticamente - Abilita la modalità debug Twitch - La modalità debug Twitch è abilitata (non consigliato) - La modalità debug Twitch è disabilitata + Abilita la modalità debug di Twitch + La modalità debug di Twitch è abilitata (non consigliato) + La modalità debug di Twitch è disabilitata - Impostazioni Avanzate - Annunci + Impostazioni di ReVanced + Pubblicità Impostazioni blocco pubblicità Chat - Impostazioni chat + Impostazioni della chat Varie Impostazioni varie Impostazioni generali Altre impostazioni - Annunci lato client - Pubblicità surestremismo lato server + Pubblicità lato client + Pubblicità surestream lato server Log di debug I log di debug sono abilitati I log di debug sono disabilitati 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 993dd15af..a897207c2 100644 --- a/patches/src/main/resources/addresources/values-iw-rIL/strings.xml +++ b/patches/src/main/resources/addresources/values-iw-rIL/strings.xml @@ -43,6 +43,8 @@ This is because Crowdin requires temporarily flattening this file and removing t יבוא/ ייצוא יבוא/ ייצוא הגדרות ReVanced + 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 afc6cedde..0952e6af0 100644 --- a/patches/src/main/resources/addresources/values-ja-rJP/strings.xml +++ b/patches/src/main/resources/addresources/values-ja-rJP/strings.xml @@ -58,7 +58,8 @@ This is because Crowdin requires temporarily flattening this file and removing t メモ このバージョンはプレリリースで、予期しない問題が発生する可能性があります。 公式リンク - 寄付 + @@ -1182,9 +1183,7 @@ This is because Crowdin requires temporarily flattening this file and removing t お使いのデバイスにはVP9ハードウェアデコードがありません。この設定はクライアントのスプーフィングが有効になっているときに常に有効になります これを有効にするとバッテリー寿命と再生の途切れが改善する可能性があります。\n\nAVCの最大解像度は1080pで、ビデオ再生はVP9やAV1よりも多くの通信量を使用します。 iOSのクライアント偽装での副作用 - • 映画や有料動画は再生できない場合があります\n•ライブは最初から再生されます\n• 動画が 1 秒早く終了する場合があります\n• Opus オーディオは使用できません。 Android-VR クライアント偽装の副作用 - •「音声トラック」メニューは表示されません\n•「一定音量」は使用できません 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 4fc7a8aab..91ed73878 100644 --- a/patches/src/main/resources/addresources/values-ka-rGE/strings.xml +++ b/patches/src/main/resources/addresources/values-ka-rGE/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 ade67c4e2..3c7a7e561 100644 --- a/patches/src/main/resources/addresources/values-kk-rKZ/strings.xml +++ b/patches/src/main/resources/addresources/values-kk-rKZ/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 90c1d950e..29efa3385 100644 --- a/patches/src/main/resources/addresources/values-km-rKH/strings.xml +++ b/patches/src/main/resources/addresources/values-km-rKH/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 4fc7a8aab..91ed73878 100644 --- a/patches/src/main/resources/addresources/values-kn-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-kn-rIN/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 864f9bf16..7dc6a5862 100644 --- a/patches/src/main/resources/addresources/values-ko-rKR/strings.xml +++ b/patches/src/main/resources/addresources/values-ko-rKR/strings.xml @@ -61,7 +61,8 @@ This is because Crowdin requires temporarily flattening this file and removing t 알림 개발자 버전이므로<br>알려지지 않은 문제점이<br>발생할 수 있습니다 공식 링크 - 후원 + @@ -373,7 +374,7 @@ This is because Crowdin requires temporarily flattening this file and removing t 시청 경고 다이얼로그 제거하기 다이얼로그가 숨겨집니다 다이얼로그가 표시됩니다 - • 이 설정은 다이얼로그를 자동으로 허용하기만 하며 연령 제한(성인인증 절차)을 우회할 수 없습니다\n• 즉, 성인인증이 필요한 동영상에서 인증을 하려 할 때, 휴대폰 번호가 필요하다고 알려주는 소형 팝업창(다이얼로그) 없이 바로 휴대폰 번호 인증 페이지가 표시됩니다\n• \'당신은 혼자가 아닙니다\' 페이지에서 \'확인하기\' 버튼이 표시되지 않는다면 이 설정이 아닌 플레이어 설정에서 \'정보 패널 숨기기\'를 비활성화해야 합니다 + • 이 설정은 다이얼로그를 자동으로 허용하기만 하며 연령 제한(성인인증 절차)을 우회할 수 없습니다\n• 즉, 성인인증이 필요한 동영상에서 인증을 하려 할 때, 휴대폰 번호가 필요하다고 알려주는 소형 팝업창(다이얼로그) 없이 바로 휴대폰 번호 인증 페이지가 표시됩니다\n• \'당신은 혼자가 아닙니다\' 페이지는 제거할 수 없으며, 해당 페이지에서 \'확인하기\' 버튼이 표시되지 않는다면 이 설정이 아닌 플레이어 설정에서 \'정보 패널 숨기기\'를 비활성화해야 합니다 외부 다운로드 @@ -968,7 +969,7 @@ This is because Crowdin requires temporarily flattening this file and removing t 18.33.40 - 시크릿 모드에서 Shorts RYD를 복원합니다 18.20.39 - 넓은 동영상 재생 속도 & 화질 메뉴를 복원합니다 16.09.39 - 이전 보관함 탭을 복원합니다 (내 페이지 탭을 비활성화합니다) - 17.33.42 - 이전 재생목록 선반으로 복원합니다 + 17.33.42 - 이전 재생목록 선반을 복원합니다 앱 시작 페이지 변경하기 @@ -1013,6 +1014,7 @@ This is because Crowdin requires temporarily flattening this file and removing t 미니 플레이어 유형 설정 비활성화됨 기기 기본값 사용 + 최소화 태블릿 최신 스타일 1 최신 스타일 2 @@ -1204,9 +1206,7 @@ This is because Crowdin requires temporarily flattening this file and removing t 이 기기는 VP9 하드웨어 디코딩을 지원하지 않습니다. 그러므로 \'클라이언트 변경하기\'가 활성화된 경우에는 이 설정은 항상 켜져 있습니다 이 설정을 활성화하면 배터리 수명이 향상되고 재생 끊김 현상이 해결될 수 있습니다\n\nAVC의 최대 화질 값은 1080p이며 동영상을 재생하면 VP9 또는 AV1보다 더 많은 모바일 데이터가 사용되오니 주의하세요. \'iOS로 변경\'의 알려진 문제점 - • 영화 또는 회원 전용 동영상과 같은 유료 동영상이 재생되지 않을 수 있습니다\n• 일부 실시간 스트림이 처음부터 재생될 수 있습니다\n• 동영상이 1초 일찍 종료될 수 있습니다\n• OPUS 오디오 코덱이 지원되지 않습니다 \'Android VR로 변경\'의 알려진 문제점 - • 오디오 트랙 메뉴가 표시되지 않습니다\n• 안정적인 볼륨 메뉴가 비활성화된 채로 잠겨있습니다 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 4fc7a8aab..91ed73878 100644 --- a/patches/src/main/resources/addresources/values-ky-rKG/strings.xml +++ b/patches/src/main/resources/addresources/values-ky-rKG/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 4fc7a8aab..91ed73878 100644 --- a/patches/src/main/resources/addresources/values-lo-rLA/strings.xml +++ b/patches/src/main/resources/addresources/values-lo-rLA/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 5b4ccc00c..11a332f98 100644 --- a/patches/src/main/resources/addresources/values-lt-rLT/strings.xml +++ b/patches/src/main/resources/addresources/values-lt-rLT/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 ae13efb77..ebbcd586a 100644 --- a/patches/src/main/resources/addresources/values-lv-rLV/strings.xml +++ b/patches/src/main/resources/addresources/values-lv-rLV/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 4fc7a8aab..91ed73878 100644 --- a/patches/src/main/resources/addresources/values-mk-rMK/strings.xml +++ b/patches/src/main/resources/addresources/values-mk-rMK/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 4fc7a8aab..91ed73878 100644 --- a/patches/src/main/resources/addresources/values-ml-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-ml-rIN/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 4fc7a8aab..91ed73878 100644 --- a/patches/src/main/resources/addresources/values-mn-rMN/strings.xml +++ b/patches/src/main/resources/addresources/values-mn-rMN/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 4fc7a8aab..91ed73878 100644 --- a/patches/src/main/resources/addresources/values-mr-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-mr-rIN/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 be8871149..13c885612 100644 --- a/patches/src/main/resources/addresources/values-ms-rMY/strings.xml +++ b/patches/src/main/resources/addresources/values-ms-rMY/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 4a8e8fd2a..9a1d0171d 100644 --- a/patches/src/main/resources/addresources/values-my-rMM/strings.xml +++ b/patches/src/main/resources/addresources/values-my-rMM/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 210518136..0657b402c 100644 --- a/patches/src/main/resources/addresources/values-nb-rNO/strings.xml +++ b/patches/src/main/resources/addresources/values-nb-rNO/strings.xml @@ -60,7 +60,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Notat Denne versjonen er en forhåndsutgivelse, og du kan oppleve uventede problemer Offisielle lenker - Doner + @@ -1174,9 +1175,9 @@ This is because Crowdin requires temporarily flattening this file and removing t Din enhet har ikke VP9, dekotering av maskinvare og denne innstillingen er alltid på når spoofing av klient er aktivert Aktivering av dette kan forbedre batterilevetiden og korrigere avspilling med avvik.\n\nAVC har en maksimal oppløsning på 1080p, og videoavspilling vil bruke flere Internettdata enn VP9 eller AV1. iOS med bivirkninger - • Filmer eller betalte videoer spiller kanskje ikke\n• Livestreams start fra begynnelsen\n• Videoer kan avslutte 1 andre tidlig\n• Ingen opus lydkodek + • Private kids-videoer spiller kanskje ikke\n• Livestreams start fra begynnelsen\n• Videoer kan ende 1 sekund av\n• Ingen opus lydkodek Android VR opplever bivirkninger - • Lydspormeny mangler\n• Stabil volum er ikke tilgjengelig + • Barn kan ikke spille\n• Lydspormeny mangler\n• Stabilt volum er ikke tilgjengelig 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 4fc7a8aab..91ed73878 100644 --- a/patches/src/main/resources/addresources/values-ne-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-ne-rIN/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 8de864c21..a91631b8f 100644 --- a/patches/src/main/resources/addresources/values-nl-rNL/strings.xml +++ b/patches/src/main/resources/addresources/values-nl-rNL/strings.xml @@ -61,7 +61,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Notitie Deze versie is een pre-release en je kunt onverwachte problemen ondervinden Officiële links - Doneren + @@ -997,6 +998,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Miniplayer type Uitgeschakeld Origineel + Minimaal Telefoon Moderne 1 Moderne 2 @@ -1188,9 +1190,9 @@ This is because Crowdin requires temporarily flattening this file and removing t Je apparaat heeft geen VP9 hardware-decodering en deze instelling is altijd ingeschakeld wanneer \'Client spoofing\' is ingeschakeld Het inschakelen hiervan kan de batterijduur verbeteren en het terugspringen corrigeren.\n\nAVC heeft een maximale resolutie van 1080p, en het afspelen van video\'s zal meer internetgegevens gebruiken dan VP9 of AV1. iOS vervalste bijwerkingen - • Films of betaalde video\'s kunnen mogelijk niet afspelen\n• Livestreams beginnen vanaf het begin\n• Video\'s kunnen 1 seconde vroeg eindigen\n• Geen opus audio codec + • Privé-kinderen video\'s kunnen mogelijk niet afspelen\n• Livestreams beginnen vanaf het begin\n• Video\'s kunnen 1 seconde vroeg eindigen\n• Geen opus audiocodec Android VR vervalste bijeffecten - • Audio track menu ontbreekt\n• Stabiel volume is niet beschikbaar + • Kids video\'s mogen niet afspelen\n• Audio track menu ontbreekt\n• Stabiel volume is niet beschikbaar 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 4fc7a8aab..91ed73878 100644 --- a/patches/src/main/resources/addresources/values-or-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-or-rIN/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 4fc7a8aab..91ed73878 100644 --- a/patches/src/main/resources/addresources/values-pa-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-pa-rIN/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 6e50d2b44..6e0762316 100644 --- a/patches/src/main/resources/addresources/values-pl-rPL/strings.xml +++ b/patches/src/main/resources/addresources/values-pl-rPL/strings.xml @@ -57,11 +57,12 @@ This is because Crowdin requires temporarily flattening this file and removing t Zaimportuj / Wyeksportuj Zaimportuj / Wyeksportuj ustawienia ReVanced - Używasz wersji łatek ReVanced <i>%s</i> + Używasz łatek ReVanced w wersji <i>%s</i> Notka Ta wersja jest wersją wstępną i mogą wystąpić nieoczekiwane problemy Oficjalne linki - Wesprzyj + @@ -81,22 +82,22 @@ This is because Crowdin requires temporarily flattening this file and removing t Strona główna Odtwarzacz Ogólny układ - Pasek wyszukiwania - Sterowanie gestami + Pasek postępu filmu + Sterowanie przesuwaniem Pozostałe Film - Wyłącz odtwarzanie Shorts\'ów w tle - Odtwarzanie w tle Shorts\'ów jest wyłączone - Odtwarzanie w tle Shorts\'ów jest włączone + Wyłącz odtwarzanie Shortsów w tle + Odtwarzanie w tle Shortsów jest wyłączone + Odtwarzanie w tle Shortsów jest włączone Debugowanie Włącz lub wyłącz opcje debugowania Logi do debugowania - Włączone - Wyłączone + Logi debugowania są włączone + Logi debugowania są wyłączone Logi protokołu bufora Logi do debugowania zawierają bufory Logi do debugowania nie zawierają buforów @@ -109,59 +110,59 @@ This is because Crowdin requires temporarily flattening this file and removing t Wyłączanie komunikatów ukrywa wszystkie komunikaty o błędach ReVanced.\n\nNie będziesz powiadamiany o żadnych nieoczekiwanych zdarzeniach. - Podświetlenie przycisków polubienia i subskrypcji - Przycisk polubienia i subskrypcji nie podświetlą się po użyciu - Przycisk polubienia i subskrypcji podświetlą się po użyciu + Poświata przycisków polubienia i subskrypcji + Poświata przycisku polubienia i subskrypcji jest ukryta + Poświata przycisku polubienia i subskrypcji jest widoczna Karty albumów Karty albumów są ukryte Karty albumów są widoczne Ramki ze zbiórkami Ramki ze zbiórkami są ukryte Ramki ze zbiórkami są widoczne - Pływający przycisk mikrofonu - Przycisk mikrofonu ukryty - Przycisk mikrofonu widoczny + Dolny przycisk od mikrofonu + Przycisk mikrofonu jest ukryty + Przycisk mikrofonu jest widoczny Znaki wodne kanałów - Ukryte - Widoczne + Znaki wodne są ukryte + Znaki wodne są widoczne Poziome półki - Ukryte są półki:\n• Z najnowszymi informacjami\n• Z filmów, które nie zostały dokończone\n• Od odkrywania kanałów\n• Od kupowania\n• Z filmów, które zostały obejrzane + Ukryte są półki:\n• Z najnowszymi informacjami\n• Z filmami, które nie zostały dokończone\n• Od odkrywania kanałów\n• Od kupowania\n• Z filmami, które zostały obejrzane Pociski są widoczne - Przycisk \'Dołącz\' - Ukryty - Widoczny + Przycisk od sponsorowania + Przycisk jest ukryty + Przycisk jest widoczny Półka \'Dla ciebie\' na stronach kanałów - Ukryta - Widoczna + Półka jest ukryta + Półka jest widoczna Przycisk \'Powiadom mnie\' - Ukryty - Widoczny + Przycisk jest ukryty + Przycisk jest widoczny - Rekomendacje \'Inni widzowie obejrzeli też ten film\' - Ukryte + Rekomendacje \'Inne osoby również obejrzały\' + Rekomendacje są ukryte Rekomendacje są widoczne Przycisk \'Pokaż więcej\' - Ukryty - Widoczny + Przycisk jest ukryty + Przycisk jest widoczny Reakcje czasowe Reakcje czasowe są ukryte Reakcje czasowe są widoczne - Półki z nagłówkami w wynikach wyszukiwania + Półki z nagłówkiem w wynikach wyszukiwania Półki z nagłówkiem są ukryte Półki z nagłówkiem są widoczne Wytyczne kanału Wytyczne kanału są ukryte Wytyczne kanału są widoczne - Rozszerzalne półki - Rozszerzalne półki są ukryte - Rozszerzalne półki są widoczne + Paski z kategoriami + Paski z kategoriami są ukryte + Paski z kategoriami są widoczne Produkty i rozdziały pod filmami Produkty i rozdziały są ukryte Produkty i rozdziały są widoczne @@ -207,9 +208,9 @@ This is because Crowdin requires temporarily flattening this file and removing t Powiązane filmy w szybkich akcjach Powiązane filmy są ukryte Powiązane filmy są widoczne - Półka z obrazami w wynikach wyszukiwania - Półka z obrazami jest ukryta - Półka z obrazami jest widoczna + Półka ze zdjeciami w wynikach wyszukiwania + Półka ze zdjęciami jest ukryta + Półka ze zdjęciami jest widoczna Najnowsze posty Najnowsze posty są ukryte Najnowsze posty są widoczne @@ -217,7 +218,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Playlisty mix są ukryte Playlisty mix są widoczne Karty artystów - Karty wykonawcy są ukryte + Karty artystów są ukryte Karty artystów są widoczne Sekcja atrybutów Sekcje wyróżnionych miejsc, gier i muzyki są ukryte @@ -239,41 +240,41 @@ This is because Crowdin requires temporarily flattening this file and removing t Sekcja transkrypcji jest widoczna Opis filmu Ukryj lub pokaż elementy opisu filmu - Pasek filtra - Ukryj lub pokazuj pasek z filtrami na stronie głównej, nad wynikami wyszukiwania i powiązanymi filmami + Pasek filtrowania + Ukryj lub pokazuj pasek filtrowania na stronie głównej, w wynikach wyszukiwania i powiązanych filmach Na stronie głównej Ukryte na stronie głównej Widoczne na stronie głównej W wyszukiwarce - Ukryte w wyszukiwaniu + Ukryte w wyszukiwarce Widoczne w wyszukiwarce W powiązanych filmach Ukryte w powiązanych filmach Widoczne w powiązanych filmach Komentarze Ukryj lub pokazuj komentarze - Nagłówek sponsora w komentarzach - Nagłówek sponsora do komentarza jest ukryty - Nagłówek sponsora do komentarza jest widoczny + Nagłówki z komentarzami sponsorów + Nagłówki z komentarzami sponsorów są ukryte + Nagłówki z komentarzami sponsorów są widoczne Sekcja komentarzy Sekcja komentarzy jest ukryta Sekcja komentarzy jest widoczna - Przycisk tworzenia Shorts\'a - Przycisk tworzenia Shorts\'a jest ukryty - Przycisk tworzenia Shorts\'a jest widoczny + Przycisk od tworzenia Shortsów + Przycisk od tworzenia Shortsów jest ukryty + Przycisk od tworzenia Shortsów jest widoczny Wyróżnione komentarze Wyróżnione komentarze są ukryte Wyróżnione komentarze są widoczne - Przycisk do dziękowania - Przycisk dziękowania jest ukryty - Przycisk dziękowania jest widoczny + Przycisk od dziękowania + Przycisk od dziękowania jest ukryty + Przycisk od dziękowania jest widoczny Czas i przyciski od emotikon Czas i przyciski od emotikon są ukryte Czas i przyciski od emotikon są widoczne YouTube Doodles - Pasek wyszukiwania z Doodles jest ukryty - Pasek wyszukiwania z Doodles jest widoczny + YouTube Doodles jest ukryty + YouTube Doodles jest widoczny YouTube Doodles pojawia się co roku na kilka dni.\n\nJeśli Doodle wyświetlą się w Twoim regionie, a to ustawienie jest włączone, to pasek filtrowania poniżej paska wyszukiwania również zostanie ukryty. Własny filtr Ukryj komponenty za pomocą własnego filtra @@ -282,28 +283,28 @@ This is because Crowdin requires temporarily flattening this file and removing t Filtr niestandardowy jest wyłączony Własny filtr - Lista ciągów budujących ścieżki komponentu do filtrowania, oddzielonych nową linią + Lista tekstów tworzących ścieżkę komponentów do filtrowania, która musi być oddzielona nowymi liniami Nieprawidłowy niestandardowy filtr: %s - Ukryj zawartość słowa + Filtrowanie słów Ukryj wyszukiwanie i filmy na stronie głównej za pomocą filtrów słów - Ukryj filmy na stronie głównej słowami + Filmy na stronie głównej Filmy na stronie głównej są filtrowane przez słowa Filmy na stronie głównej nie są filtrowane przez słowa - Ukryj filmy na stronie subskrypcji słowami - Filmy w zakładce Subskrypcji są filtrowane przez słowa - Filmy w zakładce Subskrypcji nie są filtrowane przez słowa - Wyniki wyszukiwania za pomocą słów + Filmy na stronie subskrypcji + Filmy na stronie subskrypcji są filtrowane przez słowa + Filmy na stronie subskrypcji nie są filtrowane przez słowa + W wynikach wyszukiwania Wyniki wyszukiwania są filtrowane przez słowa Wyniki wyszukiwania nie są filtrowane przez słowa Słowa do ukrycia - Słowa i frazy do ukrycia, oddzielone nowymi wierszami\n\nSłowa mogą być nazwami kanałów lub dowolnymi tekstami pokazanymi w tytułach wideo\n\nSłowa z wielkimi literami w środku muszą być wpisane z odpowiednią wielkością liter (np. iPhone, TikTok, LeBlanc) + Słowa i frazy do ukrycia, oddzielone nowymi liniami\n\nSłowami mogą być nazwy kanałów, jak też jakikolwiek tekst z tytułu filmu\n\nSłowa z wielkimi literami w środku muszą być wpisane z odpowiednią wielkością liter (np. iPhone, TikTok, LeBlanc) O filtrowaniu słów - Strona główna/Subskrypcje/Wyniki wyszukiwania są filtrowane, aby ukryć treści pasujące do fraz kluczowych\n\nOgraniczenia\n• Shorts\'y nie mogą zostać ukryte według nazwy kanału\n• Niektóre elementy interfejsu mogą nie zostać ukryte\n• Wyszukiwanie słowa może nie zwrócić wyników - Dopasuj całe słowa + Strona główna/Subskrypcje/Wyniki wyszukiwania są filtrowane, aby ukryć treści pasujące do fraz kluczowych\n\nOgraniczenia\n• Shortsy nie mogą zostać ukryte według nazwy kanału\n• Niektóre elementy interfejsu mogą nie zostać ukryte\n• Wyszukiwanie słowa może nie zwrócić wyników + Uwzględnij całe wyrazy - Otoczenie słowa/frazy cudzysłowami zapobiegnie częściowym dopasowaniom tytułów filmów i nazw kanałów<br><br>Na przykład,<br><b>\"ai\"</b> ukryje film: <b>Jak działa AI?</b><br>ale nie ukryje: <b>Co oznacza aikido?</b> + Otoczenie słowa/frazy podwójnym cudzysłowem może zapobiec częściowemu dopasowywaniu tytułów filmów i nazw kanałów<br><br>Dla przykładu,<br><b>\"ai\"</b> ukryje film: <b>Jak działa AI?</b><br>lecz nie ukryje: <b>Co oznacza aikido?</b> Nie można użyć słowa: %s Dodaj cudzysłowy, aby użyć słowa: %s @@ -315,7 +316,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Reklamy ogólne Ogólne reklamy są ukryte Ogólne reklamy są widoczne - Reklamy w trybie pełnoekranowym + Reklamy pełnoekranowe Reklamy pełnoekranowe są ukryte\n\nTa funkcja jest dostępna tylko dla starszych urządzeń Reklamy pełnoekranowe są widoczne Reklamy z przyciskami @@ -327,10 +328,10 @@ This is because Crowdin requires temporarily flattening this file and removing t Karty z autopromocją Karty z autopromocją są ukryte Karty z autopromocją są widoczne - Baner do wyświetlania produktów - Baner jest ukryty - Baner jest pokazany - Półki sklepowe gracza + Banery z produktami + Banery są ukryte + Banery są widoczne + Półki sklepowe w odtwarzaczu Półki sklepowe są ukryte Półki sklepowe są widoczne Linki do zakupów w opisie filmu @@ -362,10 +363,10 @@ This is because Crowdin requires temporarily flattening this file and removing t Adres URL skopiowany do schowka URL ze znacznikiem czasu skopiowany - Przycisk kopiowania URL filmu + Przycisk od kopiowania URL filmu Przycisk jest widoczny. Dotknij, aby skopiować adres URL wideo. Dotknij i przytrzymaj aby skopiować adres wideo ze znacznikiem czasu Przycisk nie jest widoczny - Przycisk do kopiowania URL filmu z czasem + Przycisk od kopiowania URL filmu z czasem Przycisk jest widoczny. Dotknij, aby skopiować URL filmu ze znacznikiem czasu. Dotknij i przytrzymaj, aby skopiować film bez znacznika czasu Przycisk nie jest widoczny @@ -376,13 +377,13 @@ This is because Crowdin requires temporarily flattening this file and removing t To nie pomija ograniczeń wiekowych i akceptuje je automatycznie. - Pobieranie zewnętrzne + Zewnętrzna aplikacja od pobierania Ustawienia dla zewnętrznej aplikacji Przycisk zewnętrznego pobierania Przycisk pobierania jest widoczny w odtwarzaczu Przycisk pobierania nie jest widoczny w odtwarzaczu - Przycisk akcji pobierania + Nadpisz przycisk od pobierania Przycisk pobierania otwiera zewnętrzną aplikację Przycisk pobierania otwiera natywne pobieranie w aplikacji Nazwa pakietu aplikacji od pobierania @@ -406,14 +407,14 @@ This is because Crowdin requires temporarily flattening this file and removing t Gest głośności Przesunięcie głośności jest włączone Przesunięcie głośności jest wyłączone - Gest naciśnięcia na przesunięcie - Gest naciśnięcia na przesunięcie jest włączony - Gest naciśnięcia na przesunięcie jest wyłączony + Naciśnij, by przesunąć + Gest naciśnięcia jest włączony + Gest naciśnięcia jest wyłączony Wibracje Wibracje są włączone Wibracje są wyłączone - Zapisz i przywróć jasność - Zapisz i przywróć jasność podczas zamykania lub wchodzenia w tryb pełnoekranowy + Zapisywanie i przywracanie jasności + Zapisuj i przywracaj jasność podczas zamykania lub wchodzenia w tryb pełnoekranowy Nie zapisuj i nie przywracaj jasności podczas zamykania lub wchodzenia w tryb pełnoekranowy Gest automatycznej jasności Przesunięcie w dół do najniższej wartości gestu jasności włącza automatyczną jasność @@ -436,32 +437,32 @@ This is because Crowdin requires temporarily flattening this file and removing t Przyciski akcji Ukryj lub pokaż przyciski pod filmami - Przycisk do łapek w górę i w dół + Przycisk od łapek w górę i w dół Przyciski łapki w górę i w dół są ukryte Przyciski łapki w górę i w dół są widoczne - Przycisk do udostępniania + Przycisk od udostępniania Przycisk udostępniania jest ukryty Przycisk udostępniania jest widoczny - Przycisk do zgłaszania + Przycisk od zgłaszania Przycisk zgłaszania jest ukryty Przycisk zgłaszania jest widoczny - Przycisk do remiksu + Przycisk od remiksu Przycisk remiksu jest ukryty Przycisk remiksu jest widoczny - Przycisk do pobierania + Przycisk od pobierania Przycisk pobierania jest ukryty Przycisk pobierania jest widoczny - Przycisk do dziękowania - Przycisk dziękowania jest ukryty - Przycisk dziękowania jest widoczny + Przycisk od dziękowania + Przycisk od dziękowania jest ukryty + Przycisk od dziękowania jest widoczny - Przycisk do klipu + Przycisk od klipów Przycisk tworzenia klipów jest ukryty Przycisk tworzenia klipów jest widoczny @@ -473,19 +474,19 @@ This is because Crowdin requires temporarily flattening this file and removing t Przyciski nawigacyjne Ukryj lub zmień przyciski na pasku nawigacji - Przycisk do strony głównej + Przycisk od głównej Przycisk strony głównej jest ukryty Przycisk strony głównej jest widoczny - Przycisk do Shorts\'ów - Przycisk Shorts\'ów jest ukryty - Przycisk Shorts\'ów jest widoczny + Przycisk od Shortsów + Przycisk Shortsów jest ukryty + Przycisk Shortsów jest widoczny - Przycisk do przesyłania + Przycisk od przesyłania Przycisk przesyłania jest ukryty Przycisk przesyłania jest widoczny - Przycisk do subskrypcji + Przycisk od strony subskrypcji Przycisk subskrypcji jest ukryty Przycisk subskrypcji jest widoczny @@ -497,54 +498,54 @@ This is because Crowdin requires temporarily flattening this file and removing t Etykiety są widoczne - Menu ustawień filmu - Ukryj lub pokaż elementy menu ustawień filmu + Menu ustawień + Ukryj lub pokaż elementy menu ustawień - Menu do napisów + Menu napisów Menu napisów jest ukryte Menu napisów jest widoczne - Menu do dodatkowych ustawień + Menu dodatkowych ustawień Menu dodatkowych ustawień jest ukryte Menu dodatkowych ustawień jest widoczne - Menu do wyłącznika czasowego + Menu wyłącznika czasowego Menu wyłącznika czasowego jest ukryte Menu wyłącznika czasowego jest widoczne - Menu do pętli filmu + Menu pętli filmu Menu pętli filmu jest ukryte Menu pętli filmu jest widoczne - Menu do oświetlenia kinowego + Menu oświetlenia kinowego Menu oświetlenia kinowego jest ukryte Menu oświetlenia kinowego jest widoczne - Menu do stabilnej głośności + Menu stabilnej głośności Menu stabilnej głośności jest widoczne Menu stabilnej głośności jest ukryte - Menu do pomocy i opinii + Menu pomocy i opinii Menu pomocy i opinii jest ukryte Menu pomocy i opinii jest widoczne - Menu do prędkości odtwarzania + Menu prędkości odtwarzania Menu prędkości odtwarzania jest ukryte Menu prędkości odtwarzania jest widoczne - Menu do większej ilości informacji + Menu większej ilości informacji Menu większej ilości informacji jest ukryte Menu większej ilości informacji jest widoczne - Menu do blokady ekranu + Menu blokady ekranu Menu blokady ekranu jest ukryte Menu blokady ekranu jest widoczne - Menu do ścieżki dźwiękowej + Menu ścieżki dźwiękowej Menu ścieżki dźwiękowej jest ukryte Menu ścieżki dźwiękowej jest widoczne - Menu do oglądania w VR + Menu oglądania w VR Menu oglądania w VR jest ukryte Menu oglądania w VR jest widoczne Opis menu jakości filmu @@ -552,14 +553,14 @@ This is because Crowdin requires temporarily flattening this file and removing t Opis menu jakości filmu jest widoczny - Przyciski do poprzedniego i następnego filmu + Przyciski od poprzedniego i następnego filmu Przyciski są ukryte Przyciski są widoczne - Przycisk do powielania + Przycisk od powielania Przycisk powielania jest ukryty Przycisk powielania jest widoczny - Przycisk do napisów + Przycisk od napisów Przycisk napisów jest ukryty Przycisk napisów jest widoczny Przycisk automatycznego odtwarzania @@ -590,24 +591,24 @@ This is because Crowdin requires temporarily flattening this file and removing t Pasek postępu filmu w odtwarzaczu Pasek postępu w odtwarzaczu jest ukryty Pasek postępu w odtwarzaczu jest widoczny - Paski postępu filmów w miniaturkach + Pasek postępu filmu w miniaturkach Pasek postępu jest ukryty Pasek postępu jest widoczny Odtwarzacz Shortsów - Ukryj lub pokazuj przyciski w odtwarzaczu Shorts\'ów + Ukryj lub pokaż przyciski w odtwarzaczu Shortsów - Shorts\'y na stronie głównej - Shorts\'y na stronie głównej są ukryte - Shorts\'y na stronie głównej są widoczne + Shortsy na stronie głównej + Shortsy na stronie głównej są ukryte + Shortsy na stronie głównej są widoczne - Shorts\'y na stronie subskrypcji - Shorts\'y na stronie subskrypcji są ukryte - Shorts\'y na stronie subskrypcji są widoczne - Shorts\'y w wynikach wyszukiwania - Shorts\'y w wynikach wyszukiwania są ukryte - Shorts\'y w wynikach wyszukiwania są widoczne + Shortsy na stronie subskrypcji + Shortsy na stronie subskrypcji są ukryte + Shortsy na stronie subskrypcji są widoczne + Shortsy w wynikach wyszukiwania + Shortsy w wynikach wyszukiwania są ukryte + Shortsy w wynikach wyszukiwania są widoczne Przycisk od sponsorowania Przycisk od sponsorowania jest ukryty @@ -724,10 +725,10 @@ This is because Crowdin requires temporarily flattening this file and removing t Odśwież film, aby zagłosować za pomocą Return YouTube Dislike Łapki w dół są widoczne Łapki w dół są ukryte - Pokaż łapki w dół na Shorts\'ach - Łapki w dół widoczne na Shorts\'ach - Łapki w dół wyświetlane na Shorts\n\nOgraniczenie: łapki w dół mogą się nie wyświetlać w trybie incognito - Łapki w dół ukryte na Shorts\'ach + Łapki w dół na Shortsach + Łapki w dół widoczne na Shortsach + Łapki w dół widoczne na Shortsach\n\nOgraniczenie: łapki w dół mogą się nie wyświetlać w trybie incognito + Łapki w dół ukryte na Shortsach Łapki w dół jako procent Łapki w dół wyświetlane jako procent Łapki w dół wyświetlane jako liczba @@ -735,7 +736,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Kompaktowy przycisk polubienia Przycisk łapki stylizowany dla minimalnej szerokości Przycisk łapki stylizowany dla najlepszego wyglądu - Pokaż komunikat o niedostępności API + Komunikat o niedostępności API Komunikat jest wyświetlany, jeśli Return YouTube Dislike nie jest dostępny Komunikat nie jest wyświetlany, jeśli Return YouTube Dislike nie jest dostępny O programie @@ -771,24 +772,24 @@ This is because Crowdin requires temporarily flattening this file and removing t Pełnoekranowy podgląd filmu w średniej jakości Spowoduje to również przywrócenie miniatur na transmisjach na żywo, które nie mają podglądu filmu.\n\nPodglądy filmów będą miały taką samą jakość jak bieżący film.\n\nTa funkcja działa najlepiej przy jakości 720p lub niższej oraz przy bardzo szybkim połączeniu internetowym. Stare miniatury paska nawigacji - Podgląd filmu pojawi pojawią się nad paskiem postępu - Podgląd filmu pojawi się na pełnym ekranie + Podgląd filmu pojawia się nad paskiem postępu filmów + Podgląd filmu pojawia się w trybie pełnoekranowym - Włącz SponsorBlock\'a + SponsorBlock SponsorBlock to system oparty na społeczności, który umożliwia pomijanie irytujących części filmów na YouTube Wygląd Przycisk głosowania - Przycisk głosowania jest wyświetlany - Przycisk głosowania nie jest wyświetlany + Przycisk głosowania jest widoczny + Przycisk głosowania nie jest widoczny Styl przycisku od pomijania Przycisk od pomijania stylizowany dla minimalnej szerokości Przycisk od pomijania stylizowany dla najlepszego wyglądu - Automatycznie ukryj przycisk od pomijania + Automatycznie ukryj przycisk pomijania Przycisk od pomijania ukrywa się po kilku sekundach Przycisk od pomijania wyświetlany dla całego segmentu - Pokaż komunikat podczas automatycznego pominięcia + Komunikat podczas automatycznego pominięcia Komunikat jest wyświetlany, gdy segment zostanie automatycznie pominięty. Dotknij tutaj, aby zobaczyć przykład Komunikat nie jest wyświetlany. Dotknij tutaj, aby zobaczyć przykład Długość filmu bez segmentów @@ -820,7 +821,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Twój prywatny identyfikator użytkownika Ta informacja jest poufna i działa jak hasło. Użytkownik, który ma do niej dostęp, może zgłaszać treści jako ty Identyfikator użytkownika prywatnego musi mieć co najmniej 30 znaków - Zmień link API + Zmień adres URL API Adres, który jest używany przez SponsorBlock do wykonywania połączeń z serwerem Zresetuj adres API Adres API jest nieprawidłowy @@ -940,8 +941,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Uchroniłeś ludzi przed <b>%s</b> segmentami Dotknij tutaj, aby zobaczyć globalne statystyki i najlepszych współtwórców To <b>%s</b> ich życia.<br>Dotknij tutaj, aby zobaczyć tabelę wyników - Pominąłeś <b>%s</b> segmentów - To jest <b>%s</b> + Pominąłeś(aś) <b>%s</b> segmentów + To <b>%s</b> Czy chcesz zresetować ilość pominiętych segmentów? %1$s godzin %2$s minut %1$s minut %2$s sekund @@ -963,9 +964,9 @@ This is because Crowdin requires temporarily flattening this file and removing t Docelowa oszukiwana wersja aplikacji - 18.38.44 - Przywróć stare ikony gracza Shorts + 18.38.44 - Przywróć stare ikony odtwarzacza Shortsów - 18.33.40 - Przywróć RYD (Return YouTube Dislike) w trybie incognito + 18.33.40 - Przywróć RYD w trybie incognito Shortsów 18.20.39 - Przywracanie szerokiej prędkości wideo & menu jakości 18.09.39 - Przywróć kartę bibliotek 17.33.42 - Przywróć stary układ playlisty @@ -989,17 +990,17 @@ This is because Crowdin requires temporarily flattening this file and removing t Do obejrzenia - Wznawianie odtwarzacza Shorts\'ów - Odtwarzacz Shorts\'ów nie będzie wznawiany przy starcie aplikacji - Odtwarzacz Shorts\'ów zostanie wznowiony przy starcie aplikacji + Wznawianie odtwarzacza Shortsów + Odtwarzacz Shortsów nie będzie wznawiany przy starcie aplikacji + Odtwarzacz Shortsów zostanie wznowiony przy starcie aplikacji - Autoodtwarzanie Shorts - Shorts\'y będą odtwarzane automatycznie - Shorts\'y będą odtwarzane automatycznie - Automatyczne odtwarzanie w tle Shorts\'ów - Odtwarzanie w tle Shorts\'ów będzie automatycznie odtwarzane - Odtwarzanie w tle Shorts\'ów będzie się powtarzać + Autoodtwarzanie Shortsów + Shortsy będą odtwarzane automatycznie + Shortsy będą się powtarzać + Autoodtwarzanie Shortsów w tle + Odtwarzanie w tle Shortsów będzie automatyczne + Odtwarzanie w tle Shortsów będzie się powtarzać Układ tabletu @@ -1011,22 +1012,22 @@ This is because Crowdin requires temporarily flattening this file and removing t Miniodtwarzacz Zmień styl zminimalizowanego odtwarzacza aplikacji Typ miniodtwarzacza - Nieaktywne - Oryginał + Wyłączony + Oryginalny Minimalny - Tablet + Tabletowy Nowoczesny 1 Nowoczesny 2 Nowoczesny 3 Zaokrąglone narożniki - Zaokrąglone - Kwadratowe + Narożniki są zaokrąglone + Narożniki są kwadratowe Podwójne stuknięcie i uszczypnięcie, aby zmienić rozmiar Włączone\n\n• Dwukrotnie dotknij, aby zwiększyć rozmiar miniodtwarzacza\n• Dwukrotnie dotknij ponownie, aby przywrócić oryginalny rozmiar Wyłączone - Przeciągnij i upuść - Włączone\n\nMiniodtwarzacz można przeciągnąć do dowolnego rogu ekranu - Wyłączone + Gest przeciągnięcia i upuszczenia + Gest przeciągnięcia i upuszczenia włączony\n\nMiniodtwarzacz można przeciągnąć do dowolnego rogu ekranu + Gest przeciągnięcia i upuszczenia wyłączony Gest przeciągania w poziomie Włączony\n\nMiniodtwarzacz można przeciągnąć poza ekran w lewo lub prawo Gest przeciągania w poziomie jest wyłączony @@ -1036,9 +1037,9 @@ This is because Crowdin requires temporarily flattening this file and removing t Przyciski rozszerzania i zamykania Przycisk są ukryte\n\nPrzesuń palcem, aby rozszerzyć lub zamknąć Widoczne - Ukryj napisy - Napisy są ukryte - Napisy są widoczne + Podteksty + Podteksty są ukryte + Podteksty są widoczne Przyciski przewijania do przodu i do tyłu Przyciski przewijania do przodu i do tyłu są ukryte Przyciski przewijania do przodu i do tyłu są widoczne @@ -1069,13 +1070,13 @@ This is because Crowdin requires temporarily flattening this file and removing t - Strona główna + Na stronie głównej - Strona subskrypcji + Na stronie subskrypcji Na stronie Ty W playlistach, rekomendacjach - Wyniki wyszukiwania + W wynikach wyszukiwania Oryginalne miniaturki DeArrow i oryginalne miniatury DeArrow i miniaturki przechwycone z filmu @@ -1086,11 +1087,11 @@ This is because Crowdin requires temporarily flattening this file and removing t Komunikat nie jest wyświetlany, jeśli DeArrow nie jest dostępny Punkt końcowy API DeArrow Adres URL punktu końcowego do miniaturek DeArrow - Przechwytywanie wideo + Miniaturki przechwycone z filmu Przechwytywanie jest nadal pobierane od początku/środka/końca każdego filmu. Te obrazy są wbudowane w YouTube i żadne zewnętrzne API nie jest używane Szybkie przechwytywanie miniaturek z filmu - Używasz przechwytywania średniej jakości. Miniaturki będą ładować się szybciej, lecz mogą pozostać puste w przypadku transmisji na żywo, niewydanych i bardzo starych filmów. - Używasz wysokiej jakości przechwytywania + Używasz przechwytywania średniej jakości. Miniaturki będą ładować się szybciej, lecz mogą pozostać puste w przypadku transmisji na żywo, niewydanych i bardzo starych filmów + Używasz przechwytywania wysokiej jakości Czas, z którego ma być przechwycona miniaturka z filmu Początek filmu Środek filmu @@ -1100,9 +1101,9 @@ This is because Crowdin requires temporarily flattening this file and removing t DeArrow tymczasowo niedostępny - Pokaż ogłoszenia ReVanced - Włączone - Wyłączone + Ogłoszenia ReVanced + Ogłoszenia są wyświetlane przy starcie + Ogłoszenia nie są wyświetlane przy starcie Ogłoszenia przy starcie Nie udało się połączyć z dostawcą ogłoszeń Odrzuć @@ -1114,13 +1115,13 @@ This is because Crowdin requires temporarily flattening this file and removing t Automatyczne powtarzanie - Włączone - Wyłączone + Automatyczne powtarzanie jest włączone + Automatyczne powtarzanie jest wyłączone Oszukaj rozdzielczość urządzenia - Włączone\n\nMogą zostać odblokowane wyższe jakości filmów, ale możesz doświadczyć zacinania się odtwarzanego filmu, pogorszenia żywotności baterii oraz nieznanych efektów ubocznych - Wyłączone\n\nWłączenie tej opcji umożliwia ustawienie wyższej jakości filmu niż zwykle + Oszukiwanie rozdzielczości włączone\n\nMogą zostać odblokowane wyższe jakości filmów, ale możesz doświadczyć zacinania się odtwarzanego filmu, pogorszenia żywotności baterii oraz nieznanych efektów ubocznych + Oszukiwanie rozdzielczości wyłączone\n\nWłączenie tej opcji umożliwia ustawienie wyższej jakości filmu niż zwykle Włączenie tego może spowodować zacinanie się odtwarzanego filmu, pogorszenie żywotności baterii i nieznane efekty uboczne. @@ -1128,7 +1129,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Ustawienia GmsCore - Obejście przekierowań URL + Omijanie przekierowań URL Przekierowanie URL jest omijane Przekierowanie URL nie jest omijane @@ -1153,19 +1154,19 @@ This is because Crowdin requires temporarily flattening this file and removing t Zapamiętaj zmiany jakości filmu Zmiany jakości dotyczą wszystkich filmów Zmiany jakości dotyczą tylko bieżącego filmu - Domyślna jakość wideo w sieci Wi-Fi - Domyślna jakość wideo w sieci komórkowej + Domyślna jakość filmu w sieci Wi-Fi + Domyślna jakość filmu w sieci komórkowej Dane mobilne Wi-Fi Zmieniono domyślną jakość %1$s na: %2$s - Przycisk prędkości + Przycisk od prędkości Przycisk jest widoczny Przycisk nie jest widoczny - Własne menu prędkości odtwarzania + Niestandardowe menu prędkości odtwarzania Niestandardowe menu prędkości jest widoczne Niestandardowe menu prędkości nie jest widoczne Niestandardowe prędkości odtwarzania @@ -1183,13 +1184,13 @@ This is because Crowdin requires temporarily flattening this file and removing t Stare menu jakości filmu - Stare menu jakości wideo jest wyświelane - Stare menu jakości wideo nie jest wyświetlane + Stare menu jakości filmu jest widoczne + Stare menu jakości filmu nie jest widoczne - Przesuwanie do przewijania - Włączone - Wyłączone + Przesuń, by przewinąć + Gest przesuwania jest włączony + Przesuń, aby przeszukiwać nie jest włączony Oszukaj strumienie filmu @@ -1205,9 +1206,9 @@ This is because Crowdin requires temporarily flattening this file and removing t Twoje urządzenie nie posiada sprzętowego dekodowania VP9, a ta opcja jest zawsze włączona, gdy spoofing klienta jest aktywny Włączenie tej opcji może poprawić żywotność baterii i wyeliminować zacinanie się odtwarzania.\n\nAVC ma maksymalną rozdzielczość 1080p, a odtwarzanie wideo zużywa więcej danych internetowych niż VP9 czy AV1. Efekty uboczne spoofingu iOS - • Filmy kinowe lub płatne filmy mogą się nie odtwarzać\n• Transmisje na żywo rozpoczynają się od początku\n• Filmy mogą zakończyć się o sekundę wcześniej\n• Kodek opus jest niedostępny + • Filmy wideo dla prywatnych dzieci mogą nie odtwarzać\n• Livestreams zaczynają się od początku\n• Filmy mogą kończyć 1 sekundę\n• Żaden kodek audio opus Efekty uboczne spoofingu Android VR - • Brakuje menu ścieżki dźwiękowej\n• Stabilna głośność nie jest dostępna + • Filmy dziecięce mogą nie odtwarzać\n• Brakuje menu ścieżki dźwiękowej\n• Stabilna głośność nie jest dostępna @@ -1231,19 +1232,19 @@ This is because Crowdin requires temporarily flattening this file and removing t wiadomość usunięta - Pokaż usunięte wiadomości + Usunięte wiadomości Nie pokazuj usuniętych wiadomości Ukryj usunięte wiadomości za spoilerem Pokaż usunięte wiadomości jako przekreślony tekst - Automatycznie odbieranie punktów kanału - Punkty kanału są automatycznie odebrane - Punkty kanału nie są automatycznie odebrane + Automatyczne przyznawanie punktów kanału + Punkty kanału są przyznawane automatycznie + Punkty kanału nie są przyznawane automatycznie - Tryb debugowania + Tryb debugowania Tryb debugowania jest włączony (niezalecane) Tryb debugowania jest wyłączony 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 5bd0ca7fd..30d3b1a5c 100644 --- a/patches/src/main/resources/addresources/values-pt-rBR/strings.xml +++ b/patches/src/main/resources/addresources/values-pt-rBR/strings.xml @@ -61,7 +61,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Observação Esta versão é um pré-lançamento e você pode ter problemas inesperados Links oficiais - Doar + @@ -1204,9 +1205,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Seu dispositivo não possui decodificação de VP9 por hardware, e esta configuração está sempre ligada quando o spoofing do cliente está ativado Ativar isso pode melhorar a duração da bateria e corrigir falhas na reprodução.\n\nO AVC tem uma resolução máxima de 1080p, e a reprodução de vídeo usará mais dados de internet do que o VP9 ou o AV1. Efeitos colaterais do spoofing de iOS - • Filmes ou vídeos pagos podem não reproduzir\n• Livestreams iniciam do começo\n• Vídeos podem terminar 1 segundo antes do fim\n• Codec de áudio Opus não está disponível Efeitos colaterais do spoofing de Android VR - • Menu de Faixa de Áudio não está disponível\n• Opção Volume Estável não está disponível 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 6ccff28ab..0e78b7bb9 100644 --- a/patches/src/main/resources/addresources/values-pt-rPT/strings.xml +++ b/patches/src/main/resources/addresources/values-pt-rPT/strings.xml @@ -60,7 +60,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Observação Esta versão é um pré-lançamento e você pode ter problemas inesperados Links oficiais - Doar + @@ -962,6 +963,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Destaque de versão do app + 18.38.44 - Restaurar os icones antigos do reprodutor dos Shorts 18.33.40 - Restaurar RYD em Modo Curto Incógnito 18.20.39 - Restaurar menu de qualidade de vídeo & @@ -1203,9 +1205,9 @@ This is because Crowdin requires temporarily flattening this file and removing t Seu dispositivo não possui decodificação por hardware VP9, e esta configuração está sempre ligada quando o spoofing do cliente está ativado Habilitar isso pode melhorar a duração da bateria e corrigir travamentos na reprodução.\n\nAVC tem uma resolução máxima de 1080p, e a reprodução de vídeo usará mais dados na internet do que VP9 ou AV1. Efeitos colaterais de iOS - • Filmes ou vídeos pagos podem não reproduzir\n• Livestreams iniciados desde o início\n• Vídeos podem terminar de 1 segundo cedo\n• Nenhum codec de áudio de opus + • Crianças privadas podem não reproduzir\n• Livestreams iniciados desde o início\n• Vídeos podem terminar 1 segundo segundo segundo\n• Nenhum codec de áudio de opus Android VR efeito de spoofing side - • Falta o menu de faixa de áudio\n• Volume estável não está disponível + • As crianças podem não reproduzir\n• O menu da faixa de áudio está faltando\n• Volume estável não está disponível 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 d15c6c6b2..0c5141efd 100644 --- a/patches/src/main/resources/addresources/values-ro-rRO/strings.xml +++ b/patches/src/main/resources/addresources/values-ro-rRO/strings.xml @@ -61,7 +61,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Notă Această versiune este o pre-lansare și este posibil să întâmpinați probleme neașteptate Link-uri oficiale - Donează + @@ -1196,9 +1197,9 @@ This is because Crowdin requires temporarily flattening this file and removing t Dispozitivul dvs. nu are decodare hardware VP9 și această setare este întotdeauna activată atunci când este activată lingerea clientului Activarea acestei funcții ar putea îmbunătăți durata de viață a bateriei și repara blocajul de redare.\n\nAVC are o rezoluție maximă de 1080p, iar redarea video va folosi mai multe date internet decât VP9 sau AV1. Reacţii adverse de lingere iOS - • Este posibil ca filmele sau videoclipurile plătite să nu redea\n• Livestream-urile încep de la începutul\n• Videoclipurile se pot termina cu 1 secundă\n• Nici un codec audio opus + • Este posibil ca videoclipurile private pentru copii să nu se redea\n• Livestream-urile încep de la începutul lui\n• Videoclipurile pot să se termine cu 1 secundă\n• Nici un cod audio opus Reacţii adverse de spoofing Android VR - • Meniul piesei audio lipsește\n• Volum stabil nu este disponibil + • Videoclipurile pentru copii ar putea să nu redea\n• Meniul piesei audio lipsește\n• Volumul stabil nu este disponibil 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 f43de3589..7fa8e7cf5 100644 --- a/patches/src/main/resources/addresources/values-ru-rRU/strings.xml +++ b/patches/src/main/resources/addresources/values-ru-rRU/strings.xml @@ -61,7 +61,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Примечание Эта версия является предварительным релизом, могут возникать непредвиденные ошибки Официальные ссылки - Пожертвовать + @@ -1205,9 +1206,7 @@ This is because Crowdin requires temporarily flattening this file and removing t На вашем устройстве нет аппаратного декодирования VP9, и эта настройка всегда активна при включенной подмене клиента Активация данной опции может улучшить время работы батареи и исправить задержки воспроизведения.\n\nAVC имеет максимальное разрешение 1080p, воспроизведение видео будет использовать больше интернет данных в сравнении с VP9 или AV1. Побочные эффекты подмены на iOS - • Фильмы или платные видео могут не воспроизводиться\n• Прямые трансляции начинаются с самого начала\n• Видео может закончиться на 1 секунду раньше\n• Отсутствует аудиокодек opus Побочные эффекты подмены на Android VR - • Пункт меню \"Звуковая дорожка\" отсутствует\n• Пункт меню \"Постоянный уровень громкости\" недоступен 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 4fc7a8aab..91ed73878 100644 --- a/patches/src/main/resources/addresources/values-si-rLK/strings.xml +++ b/patches/src/main/resources/addresources/values-si-rLK/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 d8c313876..9e843cb6d 100644 --- a/patches/src/main/resources/addresources/values-sk-rSK/strings.xml +++ b/patches/src/main/resources/addresources/values-sk-rSK/strings.xml @@ -51,6 +51,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Poznámka Táto verzia je predbežná a môžu sa vyskytnúť neočakávané problémy Oficiálne odkazy + 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 6c606abce..1503ce3f0 100644 --- a/patches/src/main/resources/addresources/values-sl-rSI/strings.xml +++ b/patches/src/main/resources/addresources/values-sl-rSI/strings.xml @@ -41,6 +41,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Ponovni zagon Uvoz + 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 3244541fb..79edca19f 100644 --- a/patches/src/main/resources/addresources/values-sq-rAL/strings.xml +++ b/patches/src/main/resources/addresources/values-sq-rAL/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 b5cf9ac65..3a59463d1 100644 --- a/patches/src/main/resources/addresources/values-sr-rCS/strings.xml +++ b/patches/src/main/resources/addresources/values-sr-rCS/strings.xml @@ -61,7 +61,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Napomena Ova verzija je predizdanje i možda ćete imati neočekivane probleme Zvanični linkovi - Donacija + @@ -986,7 +987,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Sport Praćenja U trendu - Gledaj kasnije + Za kasnije Onemogući nastavak reprodukcije Shorts plejera @@ -1013,6 +1014,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Tip mini-plejera Onemogućeno Originalni + Minimalan Tablet Moderan 1 Moderan 2 @@ -1204,9 +1206,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Vaš uređaj nema VP9 hardversko dekodiranje, i ova opcija je uvek uključena kada je omogućeno lažiranje klijenta Ako ovo omogućite, možda će se produžiti trajanje baterije i popraviti zastoj pri reprodukciji.\n\nAVC ima maksimalnu rezoluciju od 1080p, a reprodukcija videa će koristiti više internet podataka nego VP9 ili AV1. Neželjeni efekti lažiranja na iOS - • Filmovi ili plaćeni videi se možda neće puštati\n• Strimovi uživo počinju od početka\n• Videi će se možda završiti 1 sekundu ranije\n• Nema audio kodeka opus Neželjeni efekti lažiranja na Android VR - • Meni „Audio snimak” nedostaje\n• Opcija „Ujednačena jačina zvuka” nije dostupna 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 76e5761ea..2ea794a53 100644 --- a/patches/src/main/resources/addresources/values-sr-rSP/strings.xml +++ b/patches/src/main/resources/addresources/values-sr-rSP/strings.xml @@ -61,7 +61,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Напомена Ова верзија је предиздање и можда ћете имати неочекиване проблеме Званични линкови - Донација + @@ -986,7 +987,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Спорт Праћења У тренду - Гледај касније + За касније Онемогући наставак репродукције Shorts плејера @@ -1013,6 +1014,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Тип мини-плејера Онемогућено Оригинални + Минималан Таблет Модеран 1 Модеран 2 @@ -1204,9 +1206,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Ваш уређај нема VP9 хардверско декодирање, и ова опција је увек укључена када је омогућено лажирање клијента Ако ово омогућите, можда ће се продужити трајање батерије и поправити застој при репродукцији.\n\nAVC има максималну резолуцију од 1080p, а репродукција видеа ће користити више интернет података него VP9 или AV1. Нежељени ефекти лажирања на iOS - • Филмови или плаћени видеи се можда неће пуштати\n• Стримови уживо почињу од почетка\n• Видеи ће се можда завршити 1 секунду раније\n• Нема аудио кодека opus Нежељени ефекти лажирања на Android VR - • Мени „Аудио снимак” недостаје\n• Опција „Уједначена јачина звука” није доступна 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 da93711a6..d799f4d2e 100644 --- a/patches/src/main/resources/addresources/values-sv-rSE/strings.xml +++ b/patches/src/main/resources/addresources/values-sv-rSE/strings.xml @@ -61,7 +61,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Anteckning Denna version är en pre-release och du kan uppleva oväntade problem Officiella länkar - Donera + @@ -1204,9 +1205,9 @@ This is because Crowdin requires temporarily flattening this file and removing t Din enhet har inte VP9 hårdvaruavkodning, och denna inställning är alltid på när klientförfalskning är aktiverad Aktivering av detta kan förbättra batteriets livslängd och åtgärda uppspelningshjälp.\n\nAVC har en maximal upplösning på 1080p, och videouppspelning kommer att använda mer internetdata än VP9 eller AV1. iOS förfalskning biverkningar - • Filmer eller betalda videor kanske inte spelar\n• Livestreams startar från början\n• Videor kan sluta 1 sekund tidigt\n• Ingen opus-ljud-codec + • Privata barnvideor kanske inte spelar\n• Livestreams börjar från början\n• Videor kan sluta 1 sekund tidigt\n• Ingen opus-ljud-codec Android VR förfalskning biverkningar - • Ljudspårsmenyn saknar\n• Stabil volym är inte tillgänglig + • Barnvideor kanske inte spelar\n• Ljudspårsmenyn saknas\n• Stabil volym är inte tillgänglig 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 4fc7a8aab..91ed73878 100644 --- a/patches/src/main/resources/addresources/values-sw-rKE/strings.xml +++ b/patches/src/main/resources/addresources/values-sw-rKE/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 f92b7f625..620fdd409 100644 --- a/patches/src/main/resources/addresources/values-ta-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-ta-rIN/strings.xml @@ -42,6 +42,8 @@ This is because Crowdin requires temporarily flattening this file and removing t இறக்கு நகலெடு + 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 e80f63ca3..eb805b4c1 100644 --- a/patches/src/main/resources/addresources/values-te-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-te-rIN/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 4d2239505..a47cc39aa 100644 --- a/patches/src/main/resources/addresources/values-th-rTH/strings.xml +++ b/patches/src/main/resources/addresources/values-th-rTH/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 e5ae5e6b5..a59dcbef7 100644 --- a/patches/src/main/resources/addresources/values-tr-rTR/strings.xml +++ b/patches/src/main/resources/addresources/values-tr-rTR/strings.xml @@ -60,7 +60,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Not Bu bir ön-sürümdür ve beklenmeyen sorunlar yaşayabilirsiniz Resmi bağlantılar - Bağış yap + @@ -1012,6 +1013,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Mini oynatıcı tipi Devre dışı Orijinal + Minimal Tablet Modern 1 Modern 2 @@ -1203,9 +1205,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Cihazınız VP9 donanım çözme özelliği yok ve bu ayar istemci taklit etme açık iken her zaman açıktır Bunu etkinleştirmek batarya ömrünü uzatabilir ve oynatma takılmalarını çözebilir.\n\nAVC en fazla 1080p çözünürlüğe sahiptir ve video oynatımı VP9 veya AV1\'e göre daha fazla internet harcayacaktır. iOS taklidi yan etkileri - • Filmler ve paralı videolar oynatılmayabilir\n• Canlı yayınlar baştan başlar\n• Videolar 1 saniye erken bitebilir\n• Opus ses kodeği yok Android VR taklidi yan etkileri - • Ses parçası menüsü eksik\n• Sabit ses kullanılamaz 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 353f99450..22d5320c4 100644 --- a/patches/src/main/resources/addresources/values-uk-rUA/strings.xml +++ b/patches/src/main/resources/addresources/values-uk-rUA/strings.xml @@ -60,7 +60,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Примітка Ця версія є передрелізною, тому у Вас можуть виникати несподівані проблеми Офіційні посилання - Підтримати + @@ -1012,7 +1013,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Тип мініплеєра Вимкнуто Оригінальний - Мінімальні + Мінімальний Планшетний Новітній 1 Новітній 2 @@ -1204,9 +1205,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Ваш пристрій не має апаратного декодування VP9, ​​тому це налаштування завжди ввімкнено, коли ввімкнено підробку відеопотоків Увімкнення цієї опції може збільшити час роботи від акумулятора та виправити затримки відтворення.\n\nAVC має максимальну роздільну здатність 1080p, а відтворення відео використовуватиме більше інтернет-даних, ніж на кодеках VP9 або AV1. Побічні ефекти підробки iOS: - • Фільми чи платні відео можуть не відтворюватися\n• Прямі трансляції починаються з початку\n• Відео можуть закінчуватися на 1 секунду раніше\n• Відсутній аудіокодек Opus Побічні ефекти підробки Android VR: - • Меню звукової доріжки відсутнє\n• Меню стабілізації гучності недоступне 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 4fc7a8aab..91ed73878 100644 --- a/patches/src/main/resources/addresources/values-ur-rIN/strings.xml +++ b/patches/src/main/resources/addresources/values-ur-rIN/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 7f1e4ae3e..d0a2fb7b0 100644 --- a/patches/src/main/resources/addresources/values-uz-rUZ/strings.xml +++ b/patches/src/main/resources/addresources/values-uz-rUZ/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + 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 4bcbad725..4954f4d54 100644 --- a/patches/src/main/resources/addresources/values-vi-rVN/strings.xml +++ b/patches/src/main/resources/addresources/values-vi-rVN/strings.xml @@ -60,7 +60,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Lưu ý Đây là phiên bản tiền phát hành và bạn có thể gặp phải sự cố không mong muốn Các liên kết chính thức - Quyên góp + @@ -1012,6 +1013,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Loại trình phát thu nhỏ Đã tắt Nguyên bản + Máy tính bảng Hiện đại 1 Hiện đại 2 @@ -1203,9 +1205,7 @@ This is because Crowdin requires temporarily flattening this file and removing t Thiết bị của bạn không có phần cứng giải mã VP9, và thiết lập này luôn bật khi Giả mạo máy khách bật Bật chức năng này có thể tăng cường thời lượng pin và sửa lỗi phát lặp.\n\nAVC có độ phân giải tối đa 1080p, và video phát sẽ dùng nhiều dữ liệu mạng hơn VP9 hoặc AV1. Tác dụng phụ của giả mạo iOS - • Phim hoặc video trả tiền có thể không phát được\n• Luồng phát trực tiếp có thể phát từ đầu\n• Video có thể kết thúc sớm trước 1 giây\n• Không có bộ giải mã âm thanh opus Tác dụng phụ của giả mạo Android VR - • Trình đơn bản âm thanh bị mất\n• Âm lượng thích ứng không hữu dụng 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 c30918ec2..127824708 100644 --- a/patches/src/main/resources/addresources/values-zh-rCN/strings.xml +++ b/patches/src/main/resources/addresources/values-zh-rCN/strings.xml @@ -59,7 +59,8 @@ This is because Crowdin requires temporarily flattening this file and removing t 说明 此版本是预发布版本,您可能会遇到意外问题 官方链接 - 捐助 + @@ -995,6 +996,7 @@ This is because Crowdin requires temporarily flattening this file and removing t 最小播放器类型 已禁用 原始文件 + 最小化 平板电脑 现代1 现代2 @@ -1186,7 +1188,7 @@ This is because Crowdin requires temporarily flattening this file and removing t 启用此功能可能会改善电池续航力并修复播放卡顿问题。\n\nAVC 的最大解析度为 1080p,且影片播放将使用比 VP9 或 AV1 更多的网路数据。 iOS 伪装副作用 Android VR 伪装副作用 - • 音轨菜单缺少\n• 稳定音量不可用 + • 儿童视频可能无法播放\n• 音轨菜单丢失\n• 稳定音量 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 9a6af83e2..d671cfd97 100644 --- a/patches/src/main/resources/addresources/values-zh-rTW/strings.xml +++ b/patches/src/main/resources/addresources/values-zh-rTW/strings.xml @@ -60,7 +60,8 @@ This is because Crowdin requires temporarily flattening this file and removing t 說明 此版本是預覽版,您可能會遇到意外問題 官方連結 - 捐贈 + @@ -350,8 +351,8 @@ This is because Crowdin requires temporarily flattening this file and removing t 隱藏 YouTube Premium 推廣 - 已隱藏影片播放器下方的 YouTube Premium 推廣 - 已顯示影片播放器下方的 YouTube Premium 推廣 + 已隱藏影片播放器下方 YouTube Premium 推廣 + 已顯示影片播放器下方 YouTube Premium 推廣 隱藏影片廣告 @@ -394,9 +395,9 @@ This is because Crowdin requires temporarily flattening this file and removing t 已啟用手勢 - 啟用進度列點擊 - 已啟用進度列點擊 - 已停用進度列點擊 + 啟用拖拽欄點擊 + 已啟用拖拽欄點擊 + 已停用拖拽欄點擊 啟用亮度手勢 @@ -586,12 +587,12 @@ This is because Crowdin requires temporarily flattening this file and removing t 動畫滾動數字 - 隱藏影片播放器進度列 - 已隱藏影片播放器進度列 - 已顯示影片播放器進度列 - 在縮圖中隱藏進度列 - 已隱藏縮圖進度列 - 已顯示縮圖進度列 + 隱藏影片播放器拖拽欄 + 已隱藏影片播放器拖拽欄 + 已顯示影片播放器拖拽欄 + 在縮圖中隱藏拖拽欄 + 已隱藏縮圖拖拽欄 + 已顯示縮圖拖拽欄 Shorts 播放器 @@ -725,7 +726,7 @@ This is because Crowdin requires temporarily flattening this file and removing t 未顯示「不喜歡」數 在 Shorts 中顯示「不喜歡」數 已在 Shorts 中顯示「不喜歡」數 - 顯示 Shorts「不喜歡」數\n\n限制性:在無痕模式中可能不會出現「不喜歡」數 + 顯示 Shorts「不喜歡」數\n\n限制:在無痕模式中可能不會出現「不喜歡」數 已在 Shorts 中隱藏「不喜歡」數 「不喜歡」數比例 顯示「不喜歡」數為比例 @@ -738,7 +739,7 @@ This is because Crowdin requires temporarily flattening this file and removing t 若 Return YouTube Dislike 無法使用,顯示提示 若 Return YouTube Dislike 無法使用,不顯示提示 關於 - 資料由 Return YouTube Dislike API 提供。點選瞭解更多資訊 + 資料由 Return YouTube Dislike API 提供。點擊此處來瞭解更多資訊 回傳此裝置的 ReturnYouTubeDislike API 統計資料 平均 API 回應時間 @@ -769,9 +770,9 @@ This is because Crowdin requires temporarily flattening this file and removing t 已設定全螢幕拖拽欄為高畫質縮圖 已設定全螢幕拖拽欄為中畫質縮圖 此操作將復原沒有拖拽欄的即時串流縮圖\n\n拖拽欄縮圖將使用與目前影片的同等畫質。\n\n此功能在您使用高速網際網路,並使用在 720p 或更低的畫質時為最佳狀態。 - 還原舊版進度列縮圖 - 進度列縮圖將出現在進度列上 - 進度列縮圖將出現在全螢幕畫面 + 還原舊版拖拽欄縮圖 + 拖拽欄縮圖將出現在拖拽欄上 + 拖拽欄縮圖將出現在全螢幕畫面 啟用 SponsorBlock @@ -886,7 +887,7 @@ This is because Crowdin requires temporarily flattening this file and removing t 自動跳過 自動跳過一次 顯示跳過按鈕 - 在進度列顯示 + 在拖拽欄顯示 停用 無法提交片段:%s SponsorBlock 暫時離線 @@ -1012,6 +1013,7 @@ This is because Crowdin requires temporarily flattening this file and removing t 迷你播放器類型 已停用 原始 + 最小化 平板 現代樣式 1 現代樣式 2 @@ -1054,17 +1056,17 @@ This is because Crowdin requires temporarily flattening this file and removing t 載入畫面將有純色背景 - 啟用自訂進度列顏色 - 已顯示自訂進度列顏色 - 已顯示原版進度列顏色 - 自訂進度列顏色 - 進度列顏色 + 啟用自訂拖拽欄顏色 + 已顯示自訂拖拽欄顏色 + 已顯示原版拖拽欄顏色 + 自訂拖拽欄顏色 + 拖拽欄顏色 滑動桿色彩值無效 繞過圖片區域限制 使用圖片主機 yt4.ggpht.com - 使用原始圖片主機\n\n啟用此功能可以修正在某些區域被封鎖的遺失圖片 + 使用原始圖片主機\n\n啟用此功能可以修正在某些區域被封鎖遺失圖片 @@ -1204,9 +1206,7 @@ This is because Crowdin requires temporarily flattening this file and removing t 您的裝置不支援 VP9 硬體解碼,當啟用用戶端欺騙時,此設定將始終保持開啟 啟用此功能可能會改善電池續航力並修復播放卡頓問題。\n\nAVC 的最大解析度為 1080p,且影片播放將使用比 VP9 或 AV1 更多的網路數據。 iOS 欺騙副作用 - • 電影或付費影片可能無法播放\n• 直播從頭開始播放\n• 影片可能會提前 1 秒結束\n• 無 opus 音訊編解碼器 Android VR 欺騙副作用 - • 音訊軌道選單缺失\n• 穩定音量不可用 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 4fc7a8aab..91ed73878 100644 --- a/patches/src/main/resources/addresources/values-zu-rZA/strings.xml +++ b/patches/src/main/resources/addresources/values-zu-rZA/strings.xml @@ -36,6 +36,8 @@ This is because Crowdin requires temporarily flattening this file and removing t + diff --git a/patches/src/main/resources/addresources/values/arrays.xml b/patches/src/main/resources/addresources/values/arrays.xml index 7dbc76b2c..508e9381f 100644 --- a/patches/src/main/resources/addresources/values/arrays.xml +++ b/patches/src/main/resources/addresources/values/arrays.xml @@ -176,7 +176,7 @@ - + @string/revanced_block_embedded_ads_entry_1 @string/revanced_block_embedded_ads_entry_2 diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml index 86fb2405c..0b1a2df63 100644 --- a/patches/src/main/resources/addresources/values/strings.xml +++ b/patches/src/main/resources/addresources/values/strings.xml @@ -60,7 +60,8 @@ This is because Crowdin requires temporarily flattening this file and removing t Note This version is a pre-release and you may experience unexpected issues Official links - Donate + @@ -1224,9 +1225,9 @@ This is because Crowdin requires temporarily flattening this file and removing t Your device does not have VP9 hardware decoding, and this setting is always on when Client spoofing is enabled Enabling this might improve battery life and fix playback stuttering.\n\nAVC has a maximum resolution of 1080p, and video playback will use more internet data than VP9 or AV1. iOS spoofing side effects - • Movies or paid videos may not play\n• Livestreams start from the beginning\n• Videos may end 1 second early\n• No opus audio codec + • Private kids videos may not play\n• Livestreams start from the beginning\n• Videos may end 1 second early\n• No opus audio codec Android VR spoofing side effects - • Audio track menu is missing\n• Stable volume is not available + • Kids videos may not play\n• Audio track menu is missing\n• Stable volume is not available diff --git a/patches/src/main/resources/seekbar/values/attrs.xml b/patches/src/main/resources/seekbar/values/attrs.xml new file mode 100644 index 000000000..2bf349f0d --- /dev/null +++ b/patches/src/main/resources/seekbar/values/attrs.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file