mirror of
https://github.com/revanced/revanced-patches.git
synced 2025-12-10 19:33:55 +01:00
Compare commits
28 Commits
v5.1.0-dev
...
v5.2.0-dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
77aea074a9 | ||
|
|
fe15213cf9 | ||
|
|
046bd3ec88 | ||
|
|
d6bc998365 | ||
|
|
545e16913a | ||
|
|
fafed099c5 | ||
|
|
a65bbebfdb | ||
|
|
1a910a2cf6 | ||
|
|
6d23a4e000 | ||
|
|
5c3c68406e | ||
|
|
b0c3709be7 | ||
|
|
cd19f976e7 | ||
|
|
c181135cc1 | ||
|
|
7f6775950e | ||
|
|
4b2abaf17e | ||
|
|
677b18c41a | ||
|
|
736b6a96b8 | ||
|
|
8c371d8579 | ||
|
|
abcaa6336a | ||
|
|
11537526a4 | ||
|
|
403116f591 | ||
|
|
a1d14cffe9 | ||
|
|
10f221f374 | ||
|
|
ba1aab6d4d | ||
|
|
01cc8e0abf | ||
|
|
518958350d | ||
|
|
a625309d1f | ||
|
|
a7fc08a491 |
86
CHANGELOG.md
86
CHANGELOG.md
@@ -1,3 +1,89 @@
|
||||
# [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)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Change header:** Apply header changes to A/B layout ([#3907](https://github.com/ReVanced/revanced-patches/issues/3907)) ([6ccf114](https://github.com/ReVanced/revanced-patches/commit/6ccf11426ec9e9cd9c8e89a2443f0d0645cc78b1))
|
||||
* **YouTube - Hide Shorts components:** Do not hide Shorts action buttons on app first launch ([#3933](https://github.com/ReVanced/revanced-patches/issues/3933)) ([0d78815](https://github.com/ReVanced/revanced-patches/commit/0d78815e33bf2ae216e519f067fb773df0f2084e))
|
||||
* **YouTube - Playback speed:** Add 'Auto' speed. Always override speed if default is set to 1.0x ([#3914](https://github.com/ReVanced/revanced-patches/issues/3914)) ([497739e](https://github.com/ReVanced/revanced-patches/commit/497739e8ce6933c1f1ea46edffc102e56b985623))
|
||||
* **YouTube - SponsorBlock:** Fix create new segment crash on tablet custom roms ([#3946](https://github.com/ReVanced/revanced-patches/issues/3946)) ([a0da377](https://github.com/ReVanced/revanced-patches/commit/a0da377ba8f90ba39e905ed9730b3e819633bd50))
|
||||
* **YouTube - Spoof app version:** Adjust legacy spoof targets ([#3934](https://github.com/ReVanced/revanced-patches/issues/3934)) ([f5794c1](https://github.com/ReVanced/revanced-patches/commit/f5794c1f896c331d76fdfc299e31a2773f2209ca))
|
||||
* **YouTube - Spoof app version:** Remove broken spoof targets when patching 19.25+ ([#3915](https://github.com/ReVanced/revanced-patches/issues/3915)) ([9e18eca](https://github.com/ReVanced/revanced-patches/commit/9e18ecab1877dd33a3ad0fe216e6b91a8daaf1f8))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Miniplayer:** Add option to disable miniplayer ([#3961](https://github.com/ReVanced/revanced-patches/issues/3961)) ([e565cdb](https://github.com/ReVanced/revanced-patches/commit/e565cdb583aacfc0052d12c430f56fd9abd5bf00))
|
||||
* **YouTube:** Support version `19.45.38` ([#3938](https://github.com/ReVanced/revanced-patches/issues/3938)) ([7c4e3fe](https://github.com/ReVanced/revanced-patches/commit/7c4e3fe97e8cbbb8cf16a2fb95f64223ca2bd7ef))
|
||||
|
||||
# [5.1.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.1.0-dev.2...v5.1.0-dev.3) (2024-11-22)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Miniplayer:** Add option to disable miniplayer ([#3961](https://github.com/ReVanced/revanced-patches/issues/3961)) ([e565cdb](https://github.com/ReVanced/revanced-patches/commit/e565cdb583aacfc0052d12c430f56fd9abd5bf00))
|
||||
|
||||
# [5.1.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.1.0-dev.1...v5.1.0-dev.2) (2024-11-21)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - SponsorBlock:** Fix create new segment crash on tablet custom roms ([#3946](https://github.com/ReVanced/revanced-patches/issues/3946)) ([a0da377](https://github.com/ReVanced/revanced-patches/commit/a0da377ba8f90ba39e905ed9730b3e819633bd50))
|
||||
|
||||
# [5.1.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.0.3-dev.5...v5.1.0-dev.1) (2024-11-20)
|
||||
|
||||
|
||||
|
||||
@@ -1,21 +1,33 @@
|
||||
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.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.preference.*;
|
||||
import android.util.TypedValue;
|
||||
import android.view.ViewGroup;
|
||||
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 +83,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.
|
||||
* <p>
|
||||
@@ -98,7 +119,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 +282,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 +295,44 @@ 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();
|
||||
|
||||
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;
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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("<img style=\"width: 100px; height: 100px;\" "
|
||||
// Hide the image if it does not load.
|
||||
+ "onerror=\"this.style.display='none';\" "
|
||||
+ "src=\"https://revanced.app/favicon.ico\" />");
|
||||
+ "src=\"").append(AboutLinksRoutes.aboutLogoUrl).append("\" />");
|
||||
}
|
||||
|
||||
String patchesVersion = Utils.getPatchesReleaseVersion();
|
||||
@@ -103,29 +113,29 @@ public class ReVancedAboutPreference extends Preference {
|
||||
|
||||
builder.append("<p>")
|
||||
// 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("</p>");
|
||||
|
||||
// Add a disclaimer if using a dev release.
|
||||
if (patchesVersion.contains("dev")) {
|
||||
builder.append("<h3>")
|
||||
// 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("</h3>");
|
||||
|
||||
builder.append("<p>")
|
||||
.append(str("revanced_settings_about_links_dev_body"))
|
||||
.append(getString("revanced_settings_about_links_dev_body"))
|
||||
.append("</p>");
|
||||
}
|
||||
|
||||
builder.append("<h2 style=\"margin-top: 30px;\">")
|
||||
.append(str("revanced_settings_about_links_header"))
|
||||
.append(getString("revanced_settings_about_links_header"))
|
||||
.append("</h2>");
|
||||
|
||||
builder.append("<div>");
|
||||
for (WebLink social : socialLinks) {
|
||||
for (WebLink link : aboutLinks) {
|
||||
builder.append("<div style=\"margin-bottom: 20px;\">");
|
||||
builder.append(String.format("<a href=\"%s\">%s</a>", social.url, social.name));
|
||||
builder.append(String.format("<a href=\"%s\">%s</a>", link.url, link.name));
|
||||
builder.append("</div>");
|
||||
}
|
||||
builder.append("</div>");
|
||||
@@ -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<WebLink> 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);
|
||||
|
||||
@@ -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<String, String> aboutStrings = Map.of(
|
||||
"revanced_settings_about_links_body", "You are using ReVanced Patches version <i>%s</i>",
|
||||
"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);
|
||||
}
|
||||
}
|
||||
@@ -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.",
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,9 +24,20 @@ public final class MiniplayerPatch {
|
||||
* Mini player type. Null fields indicates to use the original un-patched value.
|
||||
*/
|
||||
public enum MiniplayerType {
|
||||
/**
|
||||
* Disabled. When swiped down the miniplayer is immediately closed.
|
||||
* Only available with 19.43+
|
||||
*/
|
||||
DISABLED(false, null),
|
||||
/** Unmodified type, and same as un-patched. */
|
||||
ORIGINAL(null, null),
|
||||
/**
|
||||
* Exactly the same as MINIMAL, and only here for migration of user settings.
|
||||
* Eventually this should be deleted.
|
||||
*/
|
||||
@Deprecated
|
||||
PHONE(false, null),
|
||||
MINIMAL(false, null),
|
||||
TABLET(true, null),
|
||||
MODERN_1(null, 1),
|
||||
MODERN_2(null, 2),
|
||||
@@ -164,6 +175,18 @@ public final class MiniplayerPatch {
|
||||
OPACITY_LEVEL = (opacity * 255) / 100;
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*
|
||||
* Enables a handler that immediately closes the miniplayer when the video is minimized,
|
||||
* effectively disabling the miniplayer.
|
||||
*/
|
||||
public static boolean getMiniplayerOnCloseHandler(boolean original) {
|
||||
return CURRENT_TYPE == ORIGINAL
|
||||
? original
|
||||
: CURRENT_TYPE == DISABLED;
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
|
||||
@@ -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.
|
||||
* <p>
|
||||
* <b> Used exclusively by {@link RememberPlaybackSpeedPatch} </b>
|
||||
*/
|
||||
public static void overridePlaybackSpeed(float speedOverride) {
|
||||
if (playbackSpeed != speedOverride) {
|
||||
Logger.printDebug(() -> "Overriding playback speed to: " + speedOverride);
|
||||
playbackSpeed = speedOverride;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
* <p>
|
||||
* 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<String, StreamingDataRequest> 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<ByteBuffer> future;
|
||||
|
||||
private StreamingDataRequest(String videoId, Map<String, String> playerHeaders) {
|
||||
Objects.requireNonNull(playerHeaders);
|
||||
this.videoId = videoId;
|
||||
this.future = Utils.submitOnBackgroundThread(() -> fetch(videoId, playerHeaders));
|
||||
}
|
||||
|
||||
public static void fetchRequest(String videoId, Map<String, String> 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<ByteBuffer> future;
|
||||
|
||||
private StreamingDataRequest(String videoId, Map<String, String> playerHeaders) {
|
||||
Objects.requireNonNull(playerHeaders);
|
||||
this.videoId = videoId;
|
||||
this.future = Utils.submitOnBackgroundThread(() -> fetch(videoId, playerHeaders));
|
||||
}
|
||||
|
||||
public boolean fetchCompleted() {
|
||||
return future.isDone();
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -272,7 +271,7 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting SPOOF_DEVICE_DIMENSIONS = new BooleanSetting("revanced_spoof_device_dimensions", FALSE, true,
|
||||
"revanced_spoof_device_dimensions_user_dialog_message");
|
||||
public static final BooleanSetting BYPASS_URL_REDIRECTS = new BooleanSetting("revanced_bypass_url_redirects", TRUE);
|
||||
public static final BooleanSetting ANNOUNCEMENTS = new BooleanSetting("revanced_announcements", TRUE);
|
||||
public static final BooleanSetting ANNOUNCEMENTS = new BooleanSetting("revanced_announcements", TRUE, false, false);
|
||||
public static final BooleanSetting SPOOF_VIDEO_STREAMS = new BooleanSetting("revanced_spoof_video_streams", TRUE, true,"revanced_spoof_video_streams_user_dialog_message");
|
||||
public static final BooleanSetting SPOOF_VIDEO_STREAMS_IOS_FORCE_AVC = new BooleanSetting("revanced_spoof_video_streams_ios_force_avc", FALSE, true,
|
||||
"revanced_spoof_video_streams_ios_force_avc_user_dialog_message", new SpoofVideoStreamsPatch.ForceiOSAVCAvailability());
|
||||
@@ -375,15 +374,20 @@ public class Settings extends BaseSettings {
|
||||
|
||||
migrateOldSettingToNew(DEPRECATED_SB_UUID_OLD_MIGRATION_SETTING, SB_PRIVATE_USER_ID);
|
||||
|
||||
migrateOldSettingToNew(DEPRECATED_HIDE_PLAYER_BUTTONS, HIDE_PLAYER_PREVIOUS_NEXT_BUTTONS);
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
migrateOldSettingToNew(DEPRECATED_HIDE_PLAYER_BUTTONS, HIDE_PLAYER_PREVIOUS_NEXT_BUTTONS);
|
||||
|
||||
migrateOldSettingToNew(DEPRECATED_HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER, HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER);
|
||||
// Migrate renamed enum type.
|
||||
if (MINIPLAYER_TYPE.get() == PHONE) {
|
||||
MINIPLAYER_TYPE.save(MINIMAL);
|
||||
}
|
||||
|
||||
// endregion
|
||||
}
|
||||
|
||||
@@ -107,12 +107,13 @@ public final class NewSegmentLayout extends FrameLayout {
|
||||
*/
|
||||
private void initializeButton(final Context context, final String resourceIdentifierName,
|
||||
final ButtonOnClickHandlerFunction handler, final String debugMessage) {
|
||||
final ImageButton button = findViewById(getResourceIdentifier(context, resourceIdentifierName, "id"));
|
||||
ImageButton button = findViewById(getResourceIdentifier(context, resourceIdentifierName, "id"));
|
||||
|
||||
// Add ripple effect
|
||||
button.setBackgroundResource(rippleEffectId);
|
||||
RippleDrawable rippleDrawable = (RippleDrawable) button.getBackground();
|
||||
rippleDrawable.setColor(rippleColorStateList);
|
||||
RippleDrawable rippleDrawable = new RippleDrawable(
|
||||
rippleColorStateList, null, null
|
||||
);
|
||||
button.setBackground(rippleDrawable);
|
||||
|
||||
button.setOnClickListener((v) -> {
|
||||
handler.apply();
|
||||
@@ -121,7 +122,7 @@ public final class NewSegmentLayout extends FrameLayout {
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
public interface ButtonOnClickHandlerFunction {
|
||||
private interface ButtonOnClickHandlerFunction {
|
||||
void apply();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
|
||||
org.gradle.parallel = true
|
||||
android.useAndroidX = true
|
||||
kotlin.code.style = official
|
||||
version = 5.1.0-dev.1
|
||||
version = 5.2.0-dev.5
|
||||
|
||||
@@ -503,6 +503,10 @@ public final class app/revanced/patches/reddit/customclients/sync/syncforreddit/
|
||||
public static final fun getUseUserEndpointPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/reddit/customclients/sync/syncforreddit/fix/video/FixVideoDownloadsPatchKt {
|
||||
public static final fun getFixVideoDownloadsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/reddit/customclients/syncforreddit/fix/video/FixVideoDownloadsPatchKt {
|
||||
public static final fun getFixVideoDownloadsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -1324,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 {
|
||||
@@ -1365,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
|
||||
}
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.reddit.customclients.syncforreddit.fix.video
|
||||
package app.revanced.patches.reddit.customclients.sync.syncforreddit.fix.video
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
@@ -0,0 +1,56 @@
|
||||
package app.revanced.patches.reddit.customclients.sync.syncforreddit.fix.video
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.reddit.customclients.sync.syncforreddit.extension.sharedExtensionPatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/syncforreddit/FixRedditVideoDownloadPatch;"
|
||||
private const val GET_LINKS_METHOD = "getLinks([B)[Ljava/lang/String;"
|
||||
|
||||
@Suppress("unused")
|
||||
val fixVideoDownloadsPatch = bytecodePatch(
|
||||
name = "Fix video downloads",
|
||||
description = "Fixes a bug in Sync's MPD parser resulting in only the audio-track being saved.",
|
||||
) {
|
||||
dependsOn(sharedExtensionPatch)
|
||||
|
||||
compatibleWith(
|
||||
"com.laurencedawson.reddit_sync",
|
||||
"com.laurencedawson.reddit_sync.pro",
|
||||
"com.laurencedawson.reddit_sync.dev",
|
||||
)
|
||||
|
||||
execute {
|
||||
val scanResult = parseRedditVideoNetworkResponseFingerprint.patternMatch!!
|
||||
val newInstanceIndex = scanResult.startIndex
|
||||
val invokeDirectIndex = scanResult.endIndex - 1
|
||||
|
||||
val buildResponseInstruction =
|
||||
parseRedditVideoNetworkResponseFingerprint.method.getInstruction<Instruction35c>(invokeDirectIndex)
|
||||
|
||||
parseRedditVideoNetworkResponseFingerprint.method.addInstructions(
|
||||
newInstanceIndex + 1,
|
||||
"""
|
||||
# Get byte array from response.
|
||||
iget-object v2, p1, Lcom/android/volley/NetworkResponse;->data:[B
|
||||
|
||||
# Parse the videoUrl and audioUrl from the byte array.
|
||||
invoke-static { v2 }, $EXTENSION_CLASS_DESCRIPTOR->$GET_LINKS_METHOD
|
||||
move-result-object v2
|
||||
|
||||
# Get videoUrl (Index 0).
|
||||
const/4 v5, 0x0
|
||||
aget-object v${buildResponseInstruction.registerE}, v2, v5
|
||||
|
||||
# Get audioUrl (Index 1).
|
||||
const/4 v6, 0x1
|
||||
aget-object v${buildResponseInstruction.registerF}, v2, v6
|
||||
|
||||
# Register E and F are used to build the response.
|
||||
""",
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -1,56 +1,18 @@
|
||||
package app.revanced.patches.reddit.customclients.syncforreddit.fix.video
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.reddit.customclients.sync.syncforreddit.extension.sharedExtensionPatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/syncforreddit/FixRedditVideoDownloadPatch;"
|
||||
private const val GET_LINKS_METHOD = "getLinks([B)[Ljava/lang/String;"
|
||||
|
||||
@Deprecated(
|
||||
message = "Patch was move to a different package",
|
||||
ReplaceWith("app.revanced.patches.reddit.customclients.sync.syncforreddit.fix.video.fixVideoDownloadsPatch")
|
||||
)
|
||||
@Suppress("unused")
|
||||
val fixVideoDownloadsPatch = bytecodePatch(
|
||||
name = "Fix video downloads",
|
||||
description = "Fixes a bug in Sync's MPD parser resulting in only the audio-track being saved.",
|
||||
) {
|
||||
dependsOn(sharedExtensionPatch)
|
||||
val fixVideoDownloadsPatch = bytecodePatch {
|
||||
dependsOn(app.revanced.patches.reddit.customclients.sync.syncforreddit.fix.video.fixVideoDownloadsPatch)
|
||||
|
||||
compatibleWith(
|
||||
"com.laurencedawson.reddit_sync",
|
||||
"com.laurencedawson.reddit_sync.pro",
|
||||
"com.laurencedawson.reddit_sync.dev",
|
||||
)
|
||||
|
||||
execute {
|
||||
val scanResult = parseRedditVideoNetworkResponseFingerprint.patternMatch!!
|
||||
val newInstanceIndex = scanResult.startIndex
|
||||
val invokeDirectIndex = scanResult.endIndex - 1
|
||||
|
||||
val buildResponseInstruction =
|
||||
parseRedditVideoNetworkResponseFingerprint.method.getInstruction<Instruction35c>(invokeDirectIndex)
|
||||
|
||||
parseRedditVideoNetworkResponseFingerprint.method.addInstructions(
|
||||
newInstanceIndex + 1,
|
||||
"""
|
||||
# Get byte array from response.
|
||||
iget-object v2, p1, Lcom/android/volley/NetworkResponse;->data:[B
|
||||
|
||||
# Parse the videoUrl and audioUrl from the byte array.
|
||||
invoke-static { v2 }, $EXTENSION_CLASS_DESCRIPTOR->$GET_LINKS_METHOD
|
||||
move-result-object v2
|
||||
|
||||
# Get videoUrl (Index 0).
|
||||
const/4 v5, 0x0
|
||||
aget-object v${buildResponseInstruction.registerE}, v2, v5
|
||||
|
||||
# Get audioUrl (Index 1).
|
||||
const/4 v6, 0x1
|
||||
aget-object v${buildResponseInstruction.registerF}, v2, v6
|
||||
|
||||
# Register E and F are used to build the response.
|
||||
""",
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"))
|
||||
|
||||
@@ -192,6 +192,9 @@ val hideShortsComponentsPatch = bytecodePatch(
|
||||
),
|
||||
)
|
||||
|
||||
hideShortsAppShortcutOption()
|
||||
hideShortsWidgetOption()
|
||||
|
||||
execute {
|
||||
// region Hide the Shorts shelf.
|
||||
|
||||
|
||||
@@ -43,6 +43,7 @@ internal const val MINIPLAYER_DRAG_DROP_FEATURE_KEY = 45628752L
|
||||
internal const val MINIPLAYER_HORIZONTAL_DRAG_FEATURE_KEY = 45658112L
|
||||
internal const val MINIPLAYER_ROUNDED_CORNERS_FEATURE_KEY = 45652224L
|
||||
internal const val MINIPLAYER_INITIAL_SIZE_FEATURE_KEY = 45640023L
|
||||
internal const val MINIPLAYER_DISABLED_FEATURE_KEY = 45657015L
|
||||
|
||||
internal val miniplayerModernConstructorFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
|
||||
@@ -50,6 +51,12 @@ internal val miniplayerModernConstructorFingerprint = fingerprint {
|
||||
literal { 45623000L }
|
||||
}
|
||||
|
||||
internal val miniplayerOnCloseHandlerFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("Z")
|
||||
literal { MINIPLAYER_DISABLED_FEATURE_KEY }
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches using the class found in [miniplayerModernViewParentFingerprint].
|
||||
*/
|
||||
|
||||
@@ -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,
|
||||
@@ -147,8 +146,7 @@ val miniplayerPatch = bytecodePatch(
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.youtube"(
|
||||
"18.38.44",
|
||||
"18.49.37",
|
||||
// 18.49.37 // Could be supported, but no reason when 19.16 exists and has modern types.
|
||||
// 19.14.43 // Incomplete code for modern miniplayers.
|
||||
// 19.15.36 // Different code for handling subtitle texts and not worth supporting.
|
||||
"19.16.39", // First with modern miniplayers.
|
||||
@@ -179,58 +177,60 @@ val miniplayerPatch = bytecodePatch(
|
||||
|
||||
val preferences = mutableSetOf<BasePreference>()
|
||||
|
||||
if (!is_19_16_or_greater) {
|
||||
preferences += ListPreference(
|
||||
"revanced_miniplayer_type",
|
||||
summaryKey = null,
|
||||
entriesKey = "revanced_miniplayer_type_legacy_entries",
|
||||
entryValuesKey = "revanced_miniplayer_type_legacy_entry_values",
|
||||
)
|
||||
} else {
|
||||
preferences += ListPreference(
|
||||
"revanced_miniplayer_type",
|
||||
summaryKey = null,
|
||||
)
|
||||
|
||||
if (is_19_25_or_greater) {
|
||||
if (!is_19_29_or_greater) {
|
||||
preferences += SwitchPreference("revanced_miniplayer_double_tap_action")
|
||||
}
|
||||
preferences += SwitchPreference("revanced_miniplayer_drag_and_drop")
|
||||
}
|
||||
|
||||
preferences +=
|
||||
if (is_19_43_or_greater) {
|
||||
preferences += SwitchPreference("revanced_miniplayer_horizontal_drag")
|
||||
}
|
||||
|
||||
if (is_19_36_or_greater) {
|
||||
preferences += SwitchPreference("revanced_miniplayer_rounded_corners")
|
||||
}
|
||||
|
||||
preferences += SwitchPreference("revanced_miniplayer_hide_subtext")
|
||||
|
||||
preferences += if (is_19_26_or_greater) {
|
||||
SwitchPreference("revanced_miniplayer_hide_expand_close")
|
||||
ListPreference(
|
||||
"revanced_miniplayer_type",
|
||||
summaryKey = null,
|
||||
)
|
||||
} else {
|
||||
SwitchPreference(
|
||||
key = "revanced_miniplayer_hide_expand_close",
|
||||
titleKey = "revanced_miniplayer_hide_expand_close_legacy_title",
|
||||
summaryOnKey = "revanced_miniplayer_hide_expand_close_legacy_summary_on",
|
||||
summaryOffKey = "revanced_miniplayer_hide_expand_close_legacy_summary_off",
|
||||
ListPreference(
|
||||
"revanced_miniplayer_type",
|
||||
summaryKey = null,
|
||||
entriesKey = "revanced_miniplayer_type_legacy_entries",
|
||||
entryValuesKey = "revanced_miniplayer_type_legacy_entry_values",
|
||||
)
|
||||
}
|
||||
|
||||
if (!is_19_26_or_greater) {
|
||||
preferences += SwitchPreference("revanced_miniplayer_hide_rewind_forward")
|
||||
if (is_19_25_or_greater) {
|
||||
if (!is_19_29_or_greater) {
|
||||
preferences += SwitchPreference("revanced_miniplayer_double_tap_action")
|
||||
}
|
||||
|
||||
if (is_19_26_or_greater) {
|
||||
preferences += TextPreference("revanced_miniplayer_width_dip", inputType = InputType.NUMBER)
|
||||
}
|
||||
|
||||
preferences += TextPreference("revanced_miniplayer_opacity", inputType = InputType.NUMBER)
|
||||
preferences += SwitchPreference("revanced_miniplayer_drag_and_drop")
|
||||
}
|
||||
|
||||
if (is_19_43_or_greater) {
|
||||
preferences += SwitchPreference("revanced_miniplayer_horizontal_drag")
|
||||
}
|
||||
|
||||
if (is_19_36_or_greater) {
|
||||
preferences += SwitchPreference("revanced_miniplayer_rounded_corners")
|
||||
}
|
||||
|
||||
preferences += SwitchPreference("revanced_miniplayer_hide_subtext")
|
||||
|
||||
preferences += if (is_19_26_or_greater) {
|
||||
SwitchPreference("revanced_miniplayer_hide_expand_close")
|
||||
} else {
|
||||
SwitchPreference(
|
||||
key = "revanced_miniplayer_hide_expand_close",
|
||||
titleKey = "revanced_miniplayer_hide_expand_close_legacy_title",
|
||||
summaryOnKey = "revanced_miniplayer_hide_expand_close_legacy_summary_on",
|
||||
summaryOffKey = "revanced_miniplayer_hide_expand_close_legacy_summary_off",
|
||||
)
|
||||
}
|
||||
|
||||
if (!is_19_26_or_greater) {
|
||||
preferences += SwitchPreference("revanced_miniplayer_hide_rewind_forward")
|
||||
}
|
||||
|
||||
if (is_19_26_or_greater) {
|
||||
preferences += TextPreference("revanced_miniplayer_width_dip", inputType = InputType.NUMBER)
|
||||
}
|
||||
|
||||
preferences += TextPreference("revanced_miniplayer_opacity", inputType = InputType.NUMBER)
|
||||
|
||||
PreferenceScreen.PLAYER.addPreferences(
|
||||
PreferenceScreenPreference(
|
||||
key = "revanced_miniplayer_screen",
|
||||
@@ -350,11 +350,6 @@ val miniplayerPatch = bytecodePatch(
|
||||
it.method.insertLegacyTabletMiniplayerOverride(it.patternMatch!!.endIndex)
|
||||
}
|
||||
|
||||
if (!is_19_16_or_greater) {
|
||||
// Return here, as patch below is only for the current versions of the app.
|
||||
return@execute
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region Enable modern miniplayer.
|
||||
@@ -380,13 +375,6 @@ val miniplayerPatch = bytecodePatch(
|
||||
)
|
||||
}
|
||||
|
||||
if (is_19_43_or_greater) {
|
||||
miniplayerModernConstructorFingerprint.insertLiteralValueBooleanOverride(
|
||||
MINIPLAYER_HORIZONTAL_DRAG_FEATURE_KEY,
|
||||
"setHorizontalDrag",
|
||||
)
|
||||
}
|
||||
|
||||
if (is_19_25_or_greater) {
|
||||
miniplayerModernConstructorFingerprint.insertLiteralValueBooleanOverride(
|
||||
MINIPLAYER_MODERN_FEATURE_LEGACY_KEY,
|
||||
@@ -443,6 +431,18 @@ val miniplayerPatch = bytecodePatch(
|
||||
)
|
||||
}
|
||||
|
||||
if (is_19_43_or_greater) {
|
||||
miniplayerOnCloseHandlerFingerprint.insertLiteralValueBooleanOverride(
|
||||
MINIPLAYER_DISABLED_FEATURE_KEY,
|
||||
"getMiniplayerOnCloseHandler"
|
||||
)
|
||||
|
||||
miniplayerModernConstructorFingerprint.insertLiteralValueBooleanOverride(
|
||||
MINIPLAYER_HORIZONTAL_DRAG_FEATURE_KEY,
|
||||
"setHorizontalDrag",
|
||||
)
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region Fix 19.16 using mixed up drawables for tablet modern.
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<String>, 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("<?xml version=\"1.0\" encoding=\"utf-8\"?>")
|
||||
append("<resources>\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(
|
||||
"""
|
||||
<style name="splash_seekbar_color_style_$name">
|
||||
<item name="$splashSeekbarColorAttributeName">$color</item>
|
||||
</style>
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
append("</resources>")
|
||||
}.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<OneRegisterInstruction>(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<OneRegisterInstruction>(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<MethodReference>()
|
||||
reference?.definingClass == "Landroid/widget/ImageView;"
|
||||
&& reference.name == "getDrawable"
|
||||
}
|
||||
val checkCastIndex = indexOfFirstInstructionOrThrow(drawableIndex, Opcode.CHECK_CAST)
|
||||
val drawableRegister = getInstruction<OneRegisterInstruction>(checkCastIndex).registerA
|
||||
|
||||
addInstruction(
|
||||
checkCastIndex + 1,
|
||||
"invoke-static { v$drawableRegister }, $EXTENSION_CLASS_DESCRIPTOR->" +
|
||||
"setSplashAnimationDrawableTheme(Landroid/graphics/drawable/AnimatedVectorDrawable;)V"
|
||||
)
|
||||
}
|
||||
|
||||
lithoColorOverrideHook(EXTENSION_CLASS_DESCRIPTOR, "getLithoColor")
|
||||
// endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,7 +56,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",
|
||||
)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TwoRegisterInstruction>(speedSelectionValueInstructionIndex).registerA
|
||||
|
||||
setPlaybackSpeedClassFieldReference =
|
||||
getInstruction<ReferenceInstruction>(speedSelectionValueInstructionIndex + 1).reference.toString()
|
||||
setPlaybackSpeedMethodReference =
|
||||
getInstruction<ReferenceInstruction>(speedSelectionValueInstructionIndex + 2).reference.toString()
|
||||
getInstruction<ReferenceInstruction>(speedSelectionValueInstructionIndex + 2).reference as MethodReference
|
||||
setPlaybackSpeedClassFieldReference =
|
||||
getInstruction<ReferenceInstruction>(speedSelectionValueInstructionIndex + 1).reference as FieldReference
|
||||
setPlaybackSpeedContainerClassFieldReference =
|
||||
getReference(speedSelectionMethodInstructions, -1, Opcode.IF_EQZ)
|
||||
getInstruction<ReferenceInstruction>(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<TwoRegisterInstruction>(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<BuilderInstruction>, 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",
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -1010,8 +1010,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">المشغل المصغر</string>
|
||||
<string name="revanced_miniplayer_screen_summary">تغيير نمط المشغل المصغر داخل التطبيق</string>
|
||||
<string name="revanced_miniplayer_type_title">نوع المشغل المصغر</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">معطّل</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">الأصلي</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">الجوّال</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">الحد الأدنى</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">الجهاز اللوحي</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">حديث 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">حديث 2</string>
|
||||
@@ -1146,7 +1147,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">تم تمكين الاهتزاز</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">جودة تلقائية</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">تلقائي</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">تذكر تغييرات جودة الفيديو</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">تنطبق تغييرات الجودة على جميع مقاطع الفيديو</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">تنطبق تغييرات الجودة على الفيديو الحالي فقط</string>
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -1010,8 +1010,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Kiçik oynadıcı</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Tətbiqdə kiçildilən oynadıcı üslubunu dəyişdir</string>
|
||||
<string name="revanced_miniplayer_type_title">Kiçik oynadıcı növü</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Qeyri-aktivdir</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Orijinal</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Telefon</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Ən kiçik</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Planşet</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Müasir 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Müasir 2</string>
|
||||
@@ -1146,7 +1147,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Toxunuş əks-əlaqəsi aktivdir</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Avtomatik keyfiyyət</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Avtomatik</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Video keyfiyyəti dəyişikliklərini xatırla</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Keyfiyyət dəyişiklikləri bütün videolara tətbiq edilir</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Keyfiyyət dəyişiklikləri yalnız cari videoya tətbiq edilir</string>
|
||||
|
||||
@@ -914,8 +914,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Міні-плэер</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Змяніце стыль мінімізаванага плэера ў праграме</string>
|
||||
<string name="revanced_miniplayer_type_title">Тып мініплэера</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Інваліды</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Арыгінал</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Тэлефон</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Планшэт</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Сучасны 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Сучасны 2</string>
|
||||
@@ -1029,7 +1029,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Тактыльныя сігналы ўключаны</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Аўтаматычнае якасць</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Аўто</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Запомніце змены якасці відэа</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Змены якасці распаўсюджваюцца на ўсе відэа</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Змены якасці прымяняюцца толькі да бягучага відэа</string>
|
||||
|
||||
@@ -87,6 +87,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||
<string name="revanced_shorts_disable_background_playback_title">Възпроизвеждане на Shorts в фонов режим</string>
|
||||
<string name="revanced_shorts_disable_background_playback_summary_on">Фоновото възпроизвеждане на Shorts е деактивирано</string>
|
||||
<string name="revanced_shorts_disable_background_playback_summary_off">Фоновото възпроизвеждане на Shorts е активирано</string>
|
||||
</patch>
|
||||
<patch id="misc.debugging.enableDebuggingPatch">
|
||||
<string name="revanced_debug_screen_title">Отстраняване на грешки</string>
|
||||
@@ -960,6 +962,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- It is ideal, but not required, if the text here appears is alphabetically after the text used for 'revanced_spoof_app_version_title'.
|
||||
This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
|
||||
<string name="revanced_spoof_app_version_target_title">Подлъгване за версията на</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_1">18.38.44 - Възстановете старите икони на Shorts в плейъра</string>
|
||||
<!-- 'RYD' is 'Return YouTube Dislike' -->
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_1">18.33.40 - Възстановете RYD в режим „инкогнито“ на Shorts</string>
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_2">18.20.39 - Възстановяване на видео скорост & в менюто за качество</string>
|
||||
@@ -1007,8 +1010,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Минимизиран екран за възпроизвеждане</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Променете стила на минимизирания екран за възпроизвеждане</string>
|
||||
<string name="revanced_miniplayer_type_title">Минимизиран тип екран за гледане</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Деактивирано</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Оригинал</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Телефон</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Минимално</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Таблет</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Модерен 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Модерен 2</string>
|
||||
@@ -1143,7 +1147,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Вибрациите са активирани</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Автоматично качество</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Авто</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Запомни промените в качеството на видеото</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Промените в качеството се отнасят за всички видеоклипове</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Промените в качеството се отнасят само за текущия видеоклип</string>
|
||||
|
||||
@@ -906,8 +906,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">মিনিপ্লেয়ার</string>
|
||||
<string name="revanced_miniplayer_screen_summary">অ্যাপের মধ্যকার মিনিমাইজড প্লেয়ার এর ধরণ পরিবর্তন করুন</string>
|
||||
<string name="revanced_miniplayer_type_title">মিনিপ্লেয়ার ধরণ</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">নিষ্ক্রিয় হয়েছে</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">আসল</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">ফোন</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">ট্যাবলেট</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">মর্ডান ১</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">মর্ডান ২</string>
|
||||
@@ -1017,7 +1017,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">কম্পন সক্রিয় করা হয়েছে</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">স্বয়ংক্রিয় গুণমান</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">স্বতস্ফূর্তভাবে</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">ভিডিও গুণমান পরিবর্তন মনে রাখুন</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">গুণমান পরিবর্তন সব ভিডিওতে প্রয়োগ করা হয়েছে</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">গুণমান পরিবর্তন বর্তমান ভিডিওতে প্রয়োগ করা হয়েছে</string>
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -183,6 +183,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
</patch>
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_type_entry_0">Desactivat</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
@@ -216,6 +217,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -1011,8 +1011,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Minipřehrávač</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Změnit styl přehrávače minimalizovaného nastavení</string>
|
||||
<string name="revanced_miniplayer_type_title">Typ minipřehrávače</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Vypnuto</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Původní</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Telefon</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Minimální</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Tablet</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Moderní 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Moderní 2</string>
|
||||
@@ -1147,7 +1148,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Hmatové úlohy jsou povoleny</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Automatická kvalita</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Automaticky</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Zapamatovat změny kvality videa</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Změny kvality platí pro všechna videa</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Změny kvality se vztahují pouze na aktuální video</string>
|
||||
|
||||
@@ -993,8 +993,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Miniplayer</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Ændre stilen for den i app minimeret afspiller</string>
|
||||
<string name="revanced_miniplayer_type_title">Type af miniplayer</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Deaktiveret</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Oprindelig</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Telefon</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Minimal</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Tablet</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Moderne 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Moderne 2</string>
|
||||
@@ -1129,7 +1130,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Haptics er aktiveret</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Automatisk kvalitet</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Automatisk</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Husk ændringer i videokvalitet</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Kvalitetsændringer gælder for alle videoer</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Kvalitetsændringer gælder kun for den aktuelle video</string>
|
||||
|
||||
@@ -33,7 +33,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<resources>
|
||||
<app id="shared">
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
<string name="revanced_check_environment_failed_title">Überprüfungen fehlgeschlagen</string>
|
||||
<string name="revanced_check_environment_failed_title">Überprüfung fehlgeschlagen</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">Offizielle Webseite öffnen</string>
|
||||
<string name="revanced_check_environment_dialog_ignore_button">Ignorieren</string>
|
||||
<string name="revanced_check_environment_failed_message"><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.</string>
|
||||
@@ -1011,8 +1011,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Miniplayer</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Ändere den Stil des in App minimierten Players</string>
|
||||
<string name="revanced_miniplayer_type_title">Minispielertyp</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Deaktiviert</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Original</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Telefon</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Minimal</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Tablets</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Modern 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Modern 2</string>
|
||||
@@ -1147,7 +1148,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Haptik ist aktiviert</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Automatische Qualität</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Auto</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Änderungen der Videoqualität merken</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Qualitätsänderungen gelten für alle Videos</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Qualitätsänderungen gelten nur für das aktuelle Video</string>
|
||||
|
||||
@@ -1010,12 +1010,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Ελαχιστοποιημένη οθόνη αναπαραγωγής</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Αλλάξτε το στυλ της ελαχιστοποιημένης οθόνης αναπαραγωγής</string>
|
||||
<string name="revanced_miniplayer_type_title">Τύπος ελαχιστοποιημένης οθόνης αναπαραγωγής</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Ανενεργή</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Αρχικός</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Τηλεφώνου</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Ελάχιστη</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Ταμπλετ</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Μοντέρνος 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Μοντέρνος 2</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">Μοντέρνος 3</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Μοντέρνα 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Μοντέρνα 2</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">Μοντέρνα 3</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_title">Στρογγυλεμένες γωνίες</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Οι γωνίες είναι στρογγυλεμένες</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Οι γωνίες είναι τετράγωνες</string>
|
||||
@@ -1146,7 +1147,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Η απόκριση δόνησης είναι ενεργοποιημένη</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Αυτόματη ποιότητα</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Αυτόματη</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Απομνημόνευση αλλαγών ποιότητας βίντεο</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Οι αλλαγές ποιότητας θα ισχύουν για όλα τα βίντεο</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Οι αλλαγές ποιότητας θα ισχύουν μόνο για το τρέχον βίντεο</string>
|
||||
|
||||
@@ -1010,8 +1010,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Minireproductor</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Cambiar el estilo del reproductor minimizado de la aplicación</string>
|
||||
<string name="revanced_miniplayer_type_title">Tipo de minreproductor</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Desactivado</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Original</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Teléfono</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Mínimo</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Tablet</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Moderna 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Moderna 2</string>
|
||||
@@ -1084,7 +1085,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">Toast no se muestra si DeFlecha no está disponible</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_api_url_title">DeArrow API endpoint</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_api_url_summary">La URL del final de la caché en miniatura de DeArrow</string>
|
||||
<string name="revanced_alt_thumbnail_stills_about_title">Todavía captura de vídeo</string>
|
||||
<string name="revanced_alt_thumbnail_stills_about_title">Capturas estáticas de vídeo</string>
|
||||
<string name="revanced_alt_thumbnail_stills_about_summary">Las capturas se toman desde el principio/medio/final de cada vídeo. Estas imágenes están incorporadas en YouTube y no se utiliza ninguna API externa</string>
|
||||
<string name="revanced_alt_thumbnail_stills_fast_title">Usar capturas aún rápidas</string>
|
||||
<string name="revanced_alt_thumbnail_stills_fast_summary_on">Usar captura de calidad media todavía. Las miniaturas se cargarán más rápido, pero streams en vivo, no liberados o vídeos muy antiguos pueden mostrar miniaturas en blanco</string>
|
||||
@@ -1146,7 +1147,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Haptics están habilitados</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Calidad automática</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Auto</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Recordar cambios de calidad de vídeo</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Los cambios de calidad se aplican a todos los vídeos</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Los cambios de calidad sólo se aplican al vídeo actual</string>
|
||||
|
||||
@@ -177,6 +177,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
</patch>
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_type_entry_0">Väljas</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
@@ -210,6 +211,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -176,6 +176,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
</patch>
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_type_entry_0">غیرفعال شده</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
@@ -209,6 +210,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -293,7 +293,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_keyword_content_subscriptions_title">Piilota tilaukset-videoita avainsanojen mukaan</string>
|
||||
<string name="revanced_hide_keyword_content_subscriptions_summary_on">Tilaukset-välilehden videoita suodatetaan avainsanojen mukaan</string>
|
||||
<string name="revanced_hide_keyword_content_subscriptions_summary_off">Tilaukset-välilehden videoita ei suodateta avainsanojen mukaan</string>
|
||||
<string name="revanced_hide_keyword_content_search_title">Piilota hakutuloksia avainsanojen muakan</string>
|
||||
<string name="revanced_hide_keyword_content_search_title">Piilota hakutuloksia avainsanojen mukaan</string>
|
||||
<string name="revanced_hide_keyword_content_search_summary_on">Hakutuloksia suodatetaan avainsanojen mukaan</string>
|
||||
<string name="revanced_hide_keyword_content_search_summary_off">Hakutuloksia ei suodateta avainsanojen mukaan</string>
|
||||
<string name="revanced_hide_keyword_content_phrases_title">Piilotettavat avainsanat</string>
|
||||
@@ -1012,8 +1012,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Minisoitin</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Muuta sovelluksen tyyliä pienennetyssä soittimessa</string>
|
||||
<string name="revanced_miniplayer_type_title">Minisoittimen tyyppi</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Pois käytöstä</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Alkuperäinen</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Puhelin</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Minimaali</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Tabletti</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Moderni 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Moderni 2</string>
|
||||
@@ -1148,7 +1149,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Tärinä on käytössä</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Automaattinen laatu</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Automaattinen</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Muista videolaadun muutokset</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Laatumuutokset koskevat kaikkia videoita</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Laatumuutokset koskevat vain nykyistä videota</string>
|
||||
@@ -1164,11 +1166,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Painiketta ei näytetä</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_speed_menu_title">Mukautettu soiton nopeusvalikko</string>
|
||||
<string name="revanced_custom_speed_menu_title">Mukautetun toistonopeuden valikko</string>
|
||||
<string name="revanced_custom_speed_menu_summary_on">Mukautettu nopeusvalikko näkyy</string>
|
||||
<string name="revanced_custom_speed_menu_summary_off">Mukautettua nopeusvalikkoa ei näytetä</string>
|
||||
<string name="revanced_custom_playback_speeds_title">Mukautetut toistonopeudet</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">Lisää tai muuta mukautettuja soiton nopeuksia</string>
|
||||
<string name="revanced_custom_playback_speeds_summary">Lisää tai muuta mukautettuja toistonopeuksia</string>
|
||||
<string name="revanced_custom_playback_speeds_invalid">Mukautettujen nopeuksien on oltava alle %s. Käytetään oletusarvoja.</string>
|
||||
<string name="revanced_custom_playback_speeds_parse_exception">Virheelliset mukautetut toistonopeudet. Käytetään oletusarvoja.</string>
|
||||
<string name="revanced_custom_playback_speeds_auto">Automaattinen</string>
|
||||
|
||||
@@ -907,8 +907,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_screen_summary">Baguhin ang istilo ng in app minimized na player</string>
|
||||
<string name="revanced_miniplayer_type_title">Uri ng miniplayer</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Hindi</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Orihinal</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Telepono</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Tableta</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Moderno 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Moderno 2</string>
|
||||
@@ -1017,7 +1017,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Pinagana ang Haptics</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Awtomatikong kalidad</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Tandaan ang mga pagbabago sa kalidad ng video</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Nalalapat ang mga pagbabago sa kalidad sa lahat ng video</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Nalalapat lang ang mga pagbabago sa kalidad sa kasalukuyang video</string>
|
||||
|
||||
@@ -1011,8 +1011,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Lecteur réduit</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Changer le style du lecteur réduit dans l\'application</string>
|
||||
<string name="revanced_miniplayer_type_title">Type de Miniplayer</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Désactivé</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Original</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Téléphone</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Minimal</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Tablette</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Moderne 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Moderne 2</string>
|
||||
@@ -1147,7 +1148,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Haptics sont activés</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Qualité automatique</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Automatique</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Mémoriser les changements de qualité vidéo</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Les changements de qualité s\'appliquent à toutes les vidéos</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Les changements de qualité ne s\'appliquent qu\'à la vidéo actuelle</string>
|
||||
|
||||
@@ -1010,8 +1010,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Miniplayer</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Athraigh stíl an imreora íoslaghdaithe san aip</string>
|
||||
<string name="revanced_miniplayer_type_title">Cineál Miniplayer</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Díchumasaithe</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Bunaidh</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Fón</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Íosta</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Táibléad</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Nua-aimseartha 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Nua-Aimseartha 2</string>
|
||||
@@ -1146,7 +1147,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Tá Haptics cumasaithe</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Cáilíocht uathoibríoch</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Auto</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Cuimhnigh athruithe ar cháilíocht</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Baineann athruithe cáilíochta le gach físeán</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Ní bhaineann athruithe cáilíochta ach leis an bhfíseán reatha</string>
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -183,6 +183,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
</patch>
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_type_entry_0">निष्क्रिय</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
@@ -217,6 +218,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -176,6 +176,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
</patch>
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_type_entry_0">Onemogućeno</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
@@ -209,6 +210,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -1010,8 +1010,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Minilejátszó</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Módosítsa az alkalmazáson belüli kisméretű lejátszó stílusát</string>
|
||||
<string name="revanced_miniplayer_type_title">Minilejátszó típus</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Kikapcsolva</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Eredeti</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Telefon</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Tablet</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Modern 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Modern 2</string>
|
||||
@@ -1146,7 +1146,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">A haptikus zoom engedélyezve</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Automatikus felbontás</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Automatikus</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Felbontás változtatások mentése</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Felbontás változtatások alkalmazása az összes videóra</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Felbontás változtatások alkalmazása a jelenlegi videóra</string>
|
||||
|
||||
@@ -176,6 +176,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
</patch>
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_type_entry_0">Անջատված է</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
@@ -209,6 +210,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -1010,8 +1010,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Pemutar Mini</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Mengubah gaya pemutar aplikasi saat diciuitkan</string>
|
||||
<string name="revanced_miniplayer_type_title">Jenis pemutar mini</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Nonaktif</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Asli</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Ponsel</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Minimal</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Tablet</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Modern 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Modern 2</string>
|
||||
@@ -1044,7 +1045,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_width_dip_summary">Awal pada ukuran layar, dalam piksel</string>
|
||||
<string name="revanced_miniplayer_width_dip_invalid_toast">Ukuran piksel harus antara %1$s dan %2$s</string>
|
||||
<string name="revanced_miniplayer_opacity_title">Opasitas hamparan</string>
|
||||
<string name="revanced_miniplayer_opacity_summary">Nilai opasitas antara 0-100, di mana 0 adalah transparan</string>
|
||||
<string name="revanced_miniplayer_opacity_summary">Nilai opasitas antara 0-100, dimana 0 adalah transparan</string>
|
||||
<string name="revanced_miniplayer_opacity_invalid_toast">Opasitas hamparan pemutar mini antara 0-100</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
@@ -1146,7 +1147,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Sentuh getar diaktifkan</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Kualitas otomatis</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Otomatis</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Ingat perubahan kualitas video</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Perubahan kualitas diatur ke semua video</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Perubahan kualitas hanya diatur di video saat ini</string>
|
||||
|
||||
@@ -176,6 +176,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
</patch>
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_type_entry_0">Óvirkt</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
@@ -209,6 +210,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -245,6 +245,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
</patch>
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_type_entry_0">הושבת</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
@@ -280,6 +281,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">אוטומטי</string>
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -990,8 +990,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">ミニプレイヤー</string>
|
||||
<string name="revanced_miniplayer_screen_summary">アプリの最小化プレイヤーのスタイルを変更する</string>
|
||||
<string name="revanced_miniplayer_type_title">ミニプレーヤータイプ</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">無効</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">オリジナル</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">携帯</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">最小</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">タブレット</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">モダン 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">モダン 2</string>
|
||||
@@ -1124,7 +1125,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">触覚機能は有効です</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">自動品質</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">自動</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">ビデオ画質の変更を記憶する</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">品質の変更はすべてのビデオに適用されます</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">品質の変更は現在のビデオにのみ適用されます</string>
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -176,6 +176,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
</patch>
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_type_entry_0">Сөндірулі</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
@@ -209,6 +210,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -176,6 +176,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
</patch>
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_type_entry_0">បានផ្ដាច់</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
@@ -209,6 +210,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -373,7 +373,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_remove_viewer_discretion_dialog_title">시청 경고 다이얼로그 제거하기</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_summary_on">다이얼로그가 숨겨집니다</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_summary_off">다이얼로그가 표시됩니다</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">• 이 설정은 다이얼로그를 자동으로 허용하기만 하며 연령 제한(성인인증 절차)을 우회할 수 없습니다\n• 즉, 성인인증이 필요한 동영상에서 인증을 하려 할 때, 휴대폰 번호가 필요하다고 알려주는 소형 팝업창(다이얼로그) 없이 바로 휴대폰 번호 인증 페이지가 표시됩니다\n• \'당신은 혼자가 아닙니다\' 페이지에서 \'확인하기\' 버튼이 표시되지 않는다면 이 설정이 아닌 플레이어 설정에서 \'정보 패널 숨기기\'를 비활성화해야 합니다</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">• 이 설정은 다이얼로그를 자동으로 허용하기만 하며 연령 제한(성인인증 절차)을 우회할 수 없습니다\n• 즉, 성인인증이 필요한 동영상에서 인증을 하려 할 때, 휴대폰 번호가 필요하다고 알려주는 소형 팝업창(다이얼로그) 없이 바로 휴대폰 번호 인증 페이지가 표시됩니다\n• \'당신은 혼자가 아닙니다\' 페이지는 제거할 수 없으며, 해당 페이지에서 \'확인하기\' 버튼이 표시되지 않는다면 이 설정이 아닌 플레이어 설정에서 \'정보 패널 숨기기\'를 비활성화해야 합니다</string>
|
||||
</patch>
|
||||
<patch id="interaction.downloads.downloadsResourcePatch">
|
||||
<string name="revanced_external_downloader_screen_title">외부 다운로드</string>
|
||||
@@ -968,7 +968,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_1">18.33.40 - 시크릿 모드에서 Shorts RYD를 복원합니다</string>
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_2">18.20.39 - 넓은 동영상 재생 속도 & 화질 메뉴를 복원합니다</string>
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_3">16.09.39 - 이전 보관함 탭을 복원합니다 (내 페이지 탭을 비활성화합니다)</string>
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_4">17.33.42 - 이전 재생목록 선반으로 복원합니다</string>
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_4">17.33.42 - 이전 재생목록 선반을 복원합니다</string>
|
||||
</patch>
|
||||
<patch id="layout.startpage.changeStartPagePatch">
|
||||
<string name="revanced_change_start_page_title">앱 시작 페이지 변경하기</string>
|
||||
@@ -1011,8 +1011,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">미니 플레이어</string>
|
||||
<string name="revanced_miniplayer_screen_summary">앱 내에서 최소화된 플레이어의 스타일을 변경할 수 있습니다</string>
|
||||
<string name="revanced_miniplayer_type_title">미니 플레이어 유형 설정</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">비활성화됨</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">기기 기본값 사용</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">폰</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">최소화</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">태블릿</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">최신 스타일 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">최신 스타일 2</string>
|
||||
@@ -1147,6 +1148,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">진동 피드백을 활성화합니다</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">자동</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">동영상 화질 저장 활성화하기</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">동영상 화질 값을 변경할 때마다 저장합니다</string>
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -180,6 +180,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
</patch>
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_type_entry_0">Išjungta</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
@@ -213,6 +214,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -177,6 +177,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
</patch>
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_type_entry_0">Atspējots</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
@@ -210,6 +211,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -176,6 +176,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
</patch>
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_type_entry_0">Dimatikan</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
@@ -209,6 +210,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -176,6 +176,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
</patch>
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_type_entry_0">ခွင့်မပြုထားပါ / အသုံးမပြုထားပါ</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
@@ -208,6 +209,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -983,8 +983,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Smittespiller</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Endre stil på appen til den minimerte spilleren</string>
|
||||
<string name="revanced_miniplayer_type_title">Type Minispiller</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Deaktivert</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Opprinnelig</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Telefon</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Minimalt</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Nettbrett</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Moderne 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Moderne 2</string>
|
||||
@@ -1116,7 +1117,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Hapetikk er aktivert</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Automatisk kvalitet</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Automatisk</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Husk endringer i videokvalitet</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Kvalitetsendringer gjelder for alle videoer</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Kvalitetsendringer gjelder kun for gjeldende video</string>
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -995,8 +995,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Minispeler</string>
|
||||
<string name="revanced_miniplayer_screen_summary">De stijl van de in de app geminimaliseerde speler wijzigen</string>
|
||||
<string name="revanced_miniplayer_type_title">Miniplayer type</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Uitgeschakeld</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Origineel</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Telefoonnummer</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Minimaal</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Telefoon</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Moderne 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Moderne 2</string>
|
||||
@@ -1131,7 +1132,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Haptics zijn ingeschakeld</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Automatische kwaliteit</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Automatisch</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Videokwaliteitswijzigingen onthouden</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Kwaliteitswijzigingen zijn van toepassing op alle video\'s</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Kwaliteitswijzigingen zijn alleen van toepassing op de huidige video</string>
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -57,7 +57,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_pref_import_export_title">Zaimportuj / Wyeksportuj</string>
|
||||
<string name="revanced_pref_import_export_summary">Zaimportuj / Wyeksportuj ustawienia ReVanced</string>
|
||||
<!-- Settings about dialog. -->
|
||||
<string name="revanced_settings_about_links_body">Używasz wersji łatek ReVanced <i>%s</i></string>
|
||||
<string name="revanced_settings_about_links_body">Używasz łatek ReVanced w wersji <i>%s</i></string>
|
||||
<string name="revanced_settings_about_links_dev_header">Notka</string>
|
||||
<string name="revanced_settings_about_links_dev_body">Ta wersja jest wersją wstępną i mogą wystąpić nieoczekiwane problemy</string>
|
||||
<string name="revanced_settings_about_links_header">Oficjalne linki</string>
|
||||
@@ -81,22 +81,22 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_settings_screen_03_feed_title">Strona główna</string>
|
||||
<string name="revanced_settings_screen_04_player_title">Odtwarzacz</string>
|
||||
<string name="revanced_settings_screen_05_general_title">Ogólny układ</string>
|
||||
<string name="revanced_settings_screen_07_seekbar_title">Pasek wyszukiwania</string>
|
||||
<string name="revanced_settings_screen_08_swipe_controls_title">Sterowanie gestami</string>
|
||||
<string name="revanced_settings_screen_07_seekbar_title">Pasek postępu filmu</string>
|
||||
<string name="revanced_settings_screen_08_swipe_controls_title">Sterowanie przesuwaniem</string>
|
||||
<string name="revanced_settings_screen_11_misc_title">Pozostałe</string>
|
||||
<string name="revanced_settings_screen_12_video_title">Film</string>
|
||||
</patch>
|
||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||
<string name="revanced_shorts_disable_background_playback_title">Wyłącz odtwarzanie Shorts\'ów w tle</string>
|
||||
<string name="revanced_shorts_disable_background_playback_summary_on">Odtwarzanie w tle Shorts\'ów jest wyłączone</string>
|
||||
<string name="revanced_shorts_disable_background_playback_summary_off">Odtwarzanie w tle Shorts\'ów jest włączone</string>
|
||||
<string name="revanced_shorts_disable_background_playback_title">Wyłącz odtwarzanie Shortsów w tle</string>
|
||||
<string name="revanced_shorts_disable_background_playback_summary_on">Odtwarzanie w tle Shortsów jest wyłączone</string>
|
||||
<string name="revanced_shorts_disable_background_playback_summary_off">Odtwarzanie w tle Shortsów jest włączone</string>
|
||||
</patch>
|
||||
<patch id="misc.debugging.enableDebuggingPatch">
|
||||
<string name="revanced_debug_screen_title">Debugowanie</string>
|
||||
<string name="revanced_debug_screen_summary">Włącz lub wyłącz opcje debugowania</string>
|
||||
<string name="revanced_debug_title">Logi do debugowania</string>
|
||||
<string name="revanced_debug_summary_on">Włączone</string>
|
||||
<string name="revanced_debug_summary_off">Wyłączone</string>
|
||||
<string name="revanced_debug_summary_on">Logi debugowania są włączone</string>
|
||||
<string name="revanced_debug_summary_off">Logi debugowania są wyłączone</string>
|
||||
<string name="revanced_debug_protobuffer_title">Logi protokołu bufora</string>
|
||||
<string name="revanced_debug_protobuffer_summary_on">Logi do debugowania zawierają bufory</string>
|
||||
<string name="revanced_debug_protobuffer_summary_off">Logi do debugowania nie zawierają buforów</string>
|
||||
@@ -109,59 +109,59 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_debug_toast_on_error_user_dialog_message">Wyłączanie komunikatów ukrywa wszystkie komunikaty o błędach ReVanced.\n\nNie będziesz powiadamiany o żadnych nieoczekiwanych zdarzeniach.</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_disable_like_subscribe_glow_title">Podświetlenie przycisków polubienia i subskrypcji</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_on">Przycisk polubienia i subskrypcji nie podświetlą się po użyciu</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_off">Przycisk polubienia i subskrypcji podświetlą się po użyciu</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_title">Poświata przycisków polubienia i subskrypcji</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_on">Poświata przycisku polubienia i subskrypcji jest ukryta</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_off">Poświata przycisku polubienia i subskrypcji jest widoczna</string>
|
||||
<string name="revanced_hide_album_cards_title">Karty albumów</string>
|
||||
<string name="revanced_hide_album_cards_summary_on">Karty albumów są ukryte</string>
|
||||
<string name="revanced_hide_album_cards_summary_off">Karty albumów są widoczne</string>
|
||||
<string name="revanced_hide_crowdfunding_box_title">Ramki ze zbiórkami</string>
|
||||
<string name="revanced_hide_crowdfunding_box_summary_on">Ramki ze zbiórkami są ukryte</string>
|
||||
<string name="revanced_hide_crowdfunding_box_summary_off">Ramki ze zbiórkami są widoczne</string>
|
||||
<string name="revanced_hide_floating_microphone_button_title">Pływający przycisk mikrofonu</string>
|
||||
<string name="revanced_hide_floating_microphone_button_summary_on">Przycisk mikrofonu ukryty</string>
|
||||
<string name="revanced_hide_floating_microphone_button_summary_off">Przycisk mikrofonu widoczny</string>
|
||||
<string name="revanced_hide_floating_microphone_button_title">Dolny przycisk od mikrofonu</string>
|
||||
<string name="revanced_hide_floating_microphone_button_summary_on">Przycisk mikrofonu jest ukryty</string>
|
||||
<string name="revanced_hide_floating_microphone_button_summary_off">Przycisk mikrofonu jest widoczny</string>
|
||||
<string name="revanced_hide_channel_watermark_title">Znaki wodne kanałów</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_on">Ukryte</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">Widoczne</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_on">Znaki wodne są ukryte</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">Znaki wodne są widoczne</string>
|
||||
<string name="revanced_hide_horizontal_shelves_title">Poziome półki</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">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</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">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</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">Pociski są widoczne</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
<string name="revanced_hide_join_membership_button_title">Przycisk \'Dołącz\'</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_on">Ukryty</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_off">Widoczny</string>
|
||||
<string name="revanced_hide_join_membership_button_title">Przycisk od sponsorowania</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_on">Przycisk jest ukryty</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_off">Przycisk jest widoczny</string>
|
||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">Półka \'Dla ciebie\' na stronach kanałów</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Ukryta</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">Widoczna</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Półka jest ukryta</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">Półka jest widoczna</string>
|
||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
||||
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||
<string name="revanced_hide_notify_me_button_title">Przycisk \'Powiadom mnie\'</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_on">Ukryty</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_off">Widoczny</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_on">Przycisk jest ukryty</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_off">Przycisk jest widoczny</string>
|
||||
<!-- 'People also watch' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_search_result_recommendations_title">Rekomendacje \'Inni widzowie obejrzeli też ten film\'</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_on">Ukryte</string>
|
||||
<string name="revanced_hide_search_result_recommendations_title">Rekomendacje \'Inne osoby również obejrzały\'</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_on">Rekomendacje są ukryte</string>
|
||||
<string name="revanced_hide_search_result_recommendations_summary_off">Rekomendacje są widoczne</string>
|
||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears when searching for a YT creator. -->
|
||||
<string name="revanced_hide_show_more_button_title">Przycisk \'Pokaż więcej\'</string>
|
||||
<string name="revanced_hide_show_more_button_summary_on">Ukryty</string>
|
||||
<string name="revanced_hide_show_more_button_summary_off">Widoczny</string>
|
||||
<string name="revanced_hide_show_more_button_summary_on">Przycisk jest ukryty</string>
|
||||
<string name="revanced_hide_show_more_button_summary_off">Przycisk jest widoczny</string>
|
||||
<string name="revanced_hide_timed_reactions_title">Reakcje czasowe</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_on">Reakcje czasowe są ukryte</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_off">Reakcje czasowe są widoczne</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_title">Półki z nagłówkami w wynikach wyszukiwania</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_title">Półki z nagłówkiem w wynikach wyszukiwania</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_summary_on">Półki z nagłówkiem są ukryte</string>
|
||||
<string name="revanced_hide_search_result_shelf_header_summary_off">Półki z nagłówkiem są widoczne</string>
|
||||
<string name="revanced_hide_channel_guidelines_title">Wytyczne kanału</string>
|
||||
<string name="revanced_hide_channel_guidelines_summary_on">Wytyczne kanału są ukryte</string>
|
||||
<string name="revanced_hide_channel_guidelines_summary_off">Wytyczne kanału są widoczne</string>
|
||||
<string name="revanced_hide_chips_shelf_title">Rozszerzalne półki</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_on">Rozszerzalne półki są ukryte</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_off">Rozszerzalne półki są widoczne</string>
|
||||
<string name="revanced_hide_chips_shelf_title">Paski z kategoriami</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_on">Paski z kategoriami są ukryte</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_off">Paski z kategoriami są widoczne</string>
|
||||
<string name="revanced_hide_expandable_chip_title">Produkty i rozdziały pod filmami</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_on">Produkty i rozdziały są ukryte</string>
|
||||
<string name="revanced_hide_expandable_chip_summary_off">Produkty i rozdziały są widoczne</string>
|
||||
@@ -207,9 +207,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_related_videos_title">Powiązane filmy w szybkich akcjach</string>
|
||||
<string name="revanced_hide_related_videos_summary_on">Powiązane filmy są ukryte</string>
|
||||
<string name="revanced_hide_related_videos_summary_off">Powiązane filmy są widoczne</string>
|
||||
<string name="revanced_hide_image_shelf_title">Półka z obrazami w wynikach wyszukiwania</string>
|
||||
<string name="revanced_hide_image_shelf_summary_on">Półka z obrazami jest ukryta</string>
|
||||
<string name="revanced_hide_image_shelf_summary_off">Półka z obrazami jest widoczna</string>
|
||||
<string name="revanced_hide_image_shelf_title">Półka ze zdjeciami w wynikach wyszukiwania</string>
|
||||
<string name="revanced_hide_image_shelf_summary_on">Półka ze zdjęciami jest ukryta</string>
|
||||
<string name="revanced_hide_image_shelf_summary_off">Półka ze zdjęciami jest widoczna</string>
|
||||
<string name="revanced_hide_latest_posts_ads_title">Najnowsze posty</string>
|
||||
<string name="revanced_hide_latest_posts_ads_summary_on">Najnowsze posty są ukryte</string>
|
||||
<string name="revanced_hide_latest_posts_ads_summary_off">Najnowsze posty są widoczne</string>
|
||||
@@ -217,7 +217,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_mix_playlists_summary_on">Playlisty mix są ukryte</string>
|
||||
<string name="revanced_hide_mix_playlists_summary_off">Playlisty mix są widoczne</string>
|
||||
<string name="revanced_hide_artist_cards_title">Karty artystów</string>
|
||||
<string name="revanced_hide_artist_cards_summary_on">Karty wykonawcy są ukryte</string>
|
||||
<string name="revanced_hide_artist_cards_summary_on">Karty artystów są ukryte</string>
|
||||
<string name="revanced_hide_artist_cards_summary_off">Karty artystów są widoczne</string>
|
||||
<string name="revanced_hide_attributes_section_title">Sekcja atrybutów</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">Sekcje wyróżnionych miejsc, gier i muzyki są ukryte</string>
|
||||
@@ -239,41 +239,41 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_transcript_section_summary_off">Sekcja transkrypcji jest widoczna</string>
|
||||
<string name="revanced_hide_description_components_screen_title">Opis filmu</string>
|
||||
<string name="revanced_hide_description_components_screen_summary">Ukryj lub pokaż elementy opisu filmu</string>
|
||||
<string name="revanced_hide_filter_bar_screen_title">Pasek filtra</string>
|
||||
<string name="revanced_hide_filter_bar_screen_summary">Ukryj lub pokazuj pasek z filtrami na stronie głównej, nad wynikami wyszukiwania i powiązanymi filmami</string>
|
||||
<string name="revanced_hide_filter_bar_screen_title">Pasek filtrowania</string>
|
||||
<string name="revanced_hide_filter_bar_screen_summary">Ukryj lub pokazuj pasek filtrowania na stronie głównej, w wynikach wyszukiwania i powiązanych filmach</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_feed_title">Na stronie głównej</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Ukryte na stronie głównej</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Widoczne na stronie głównej</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_search_title">W wyszukiwarce</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Ukryte w wyszukiwaniu</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Ukryte w wyszukiwarce</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Widoczne w wyszukiwarce</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_title">W powiązanych filmach</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">Ukryte w powiązanych filmach</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">Widoczne w powiązanych filmach</string>
|
||||
<string name="revanced_comments_screen_title">Komentarze</string>
|
||||
<string name="revanced_comments_screen_summary">Ukryj lub pokazuj komentarze</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">Nagłówek sponsora w komentarzach</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">Nagłówek sponsora do komentarza jest ukryty</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">Nagłówek sponsora do komentarza jest widoczny</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">Nagłówki z komentarzami sponsorów</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">Nagłówki z komentarzami sponsorów są ukryte</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">Nagłówki z komentarzami sponsorów są widoczne</string>
|
||||
<string name="revanced_hide_comments_section_title">Sekcja komentarzy</string>
|
||||
<string name="revanced_hide_comments_section_summary_on">Sekcja komentarzy jest ukryta</string>
|
||||
<string name="revanced_hide_comments_section_summary_off">Sekcja komentarzy jest widoczna</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_title">Przycisk tworzenia Shorts\'a</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_on">Przycisk tworzenia Shorts\'a jest ukryty</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">Przycisk tworzenia Shorts\'a jest widoczny</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_title">Przycisk od tworzenia Shortsów</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_on">Przycisk od tworzenia Shortsów jest ukryty</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">Przycisk od tworzenia Shortsów jest widoczny</string>
|
||||
<string name="revanced_hide_comments_preview_comment_title">Wyróżnione komentarze</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_on">Wyróżnione komentarze są ukryte</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_off">Wyróżnione komentarze są widoczne</string>
|
||||
<string name="revanced_hide_comments_thanks_button_title">Przycisk do dziękowania</string>
|
||||
<string name="revanced_hide_comments_thanks_button_summary_on">Przycisk dziękowania jest ukryty</string>
|
||||
<string name="revanced_hide_comments_thanks_button_summary_off">Przycisk dziękowania jest widoczny</string>
|
||||
<string name="revanced_hide_comments_thanks_button_title">Przycisk od dziękowania</string>
|
||||
<string name="revanced_hide_comments_thanks_button_summary_on">Przycisk od dziękowania jest ukryty</string>
|
||||
<string name="revanced_hide_comments_thanks_button_summary_off">Przycisk od dziękowania jest widoczny</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_title">Czas i przyciski od emotikon</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_on">Czas i przyciski od emotikon są ukryte</string>
|
||||
<string name="revanced_hide_comments_timestamp_and_emoji_buttons_summary_off">Czas i przyciski od emotikon są widoczne</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">YouTube Doodles</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Pasek wyszukiwania z Doodles jest ukryty</string>
|
||||
<string name="revanced_hide_doodles_summary_off">Pasek wyszukiwania z Doodles jest widoczny</string>
|
||||
<string name="revanced_hide_doodles_summary_on">YouTube Doodles jest ukryty</string>
|
||||
<string name="revanced_hide_doodles_summary_off">YouTube Doodles jest widoczny</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">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.</string>
|
||||
<string name="revanced_custom_filter_screen_title">Własny filtr</string>
|
||||
<string name="revanced_custom_filter_screen_summary">Ukryj komponenty za pomocą własnego filtra</string>
|
||||
@@ -282,28 +282,28 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_custom_filter_summary_off">Filtr niestandardowy jest wyłączony</string>
|
||||
<string name="revanced_custom_filter_strings_title">Własny filtr</string>
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<string name="revanced_custom_filter_strings_summary">Lista ciągów budujących ścieżki komponentu do filtrowania, oddzielonych nową linią</string>
|
||||
<string name="revanced_custom_filter_strings_summary">Lista tekstów tworzących ścieżkę komponentów do filtrowania, która musi być oddzielona nowymi liniami</string>
|
||||
<string name="revanced_custom_filter_toast_invalid_syntax">Nieprawidłowy niestandardowy filtr: %s</string>
|
||||
<string name="revanced_hide_keyword_content_screen_title">Ukryj zawartość słowa</string>
|
||||
<string name="revanced_hide_keyword_content_screen_title">Filtrowanie słów</string>
|
||||
<string name="revanced_hide_keyword_content_screen_summary">Ukryj wyszukiwanie i filmy na stronie głównej za pomocą filtrów słów</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">Ukryj filmy na stronie głównej słowami</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">Filmy na stronie głównej</string>
|
||||
<string name="revanced_hide_keyword_content_home_summary_on">Filmy na stronie głównej są filtrowane przez słowa</string>
|
||||
<string name="revanced_hide_keyword_content_home_summary_off">Filmy na stronie głównej nie są filtrowane przez słowa</string>
|
||||
<string name="revanced_hide_keyword_content_subscriptions_title">Ukryj filmy na stronie subskrypcji słowami</string>
|
||||
<string name="revanced_hide_keyword_content_subscriptions_summary_on">Filmy w zakładce Subskrypcji są filtrowane przez słowa</string>
|
||||
<string name="revanced_hide_keyword_content_subscriptions_summary_off">Filmy w zakładce Subskrypcji nie są filtrowane przez słowa</string>
|
||||
<string name="revanced_hide_keyword_content_search_title">Wyniki wyszukiwania za pomocą słów</string>
|
||||
<string name="revanced_hide_keyword_content_subscriptions_title">Filmy na stronie subskrypcji</string>
|
||||
<string name="revanced_hide_keyword_content_subscriptions_summary_on">Filmy na stronie subskrypcji są filtrowane przez słowa</string>
|
||||
<string name="revanced_hide_keyword_content_subscriptions_summary_off">Filmy na stronie subskrypcji nie są filtrowane przez słowa</string>
|
||||
<string name="revanced_hide_keyword_content_search_title">W wynikach wyszukiwania</string>
|
||||
<string name="revanced_hide_keyword_content_search_summary_on">Wyniki wyszukiwania są filtrowane przez słowa</string>
|
||||
<string name="revanced_hide_keyword_content_search_summary_off">Wyniki wyszukiwania nie są filtrowane przez słowa</string>
|
||||
<string name="revanced_hide_keyword_content_phrases_title">Słowa do ukrycia</string>
|
||||
<!-- For localization it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">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)</string>
|
||||
<string name="revanced_hide_keyword_content_phrases_summary">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)</string>
|
||||
<string name="revanced_hide_keyword_content_about_title">O filtrowaniu słów</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">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</string>
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_title">Dopasuj całe słowa</string>
|
||||
<string name="revanced_hide_keyword_content_about_summary">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</string>
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_title">Uwzględnij całe wyrazy</string>
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_summary">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></string>
|
||||
<string name="revanced_hide_keyword_content_about_whole_words_summary">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></string>
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_hide_keyword_toast_invalid_common">Nie można użyć słowa: %s</string>
|
||||
<string name="revanced_hide_keyword_toast_invalid_common_whole_word_required">Dodaj cudzysłowy, aby użyć słowa: %s</string>
|
||||
@@ -315,7 +315,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_general_ads_title">Reklamy ogólne</string>
|
||||
<string name="revanced_hide_general_ads_summary_on">Ogólne reklamy są ukryte</string>
|
||||
<string name="revanced_hide_general_ads_summary_off">Ogólne reklamy są widoczne</string>
|
||||
<string name="revanced_hide_fullscreen_ads_title">Reklamy w trybie pełnoekranowym</string>
|
||||
<string name="revanced_hide_fullscreen_ads_title">Reklamy pełnoekranowe</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">Reklamy pełnoekranowe są ukryte\n\nTa funkcja jest dostępna tylko dla starszych urządzeń</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_off">Reklamy pełnoekranowe są widoczne</string>
|
||||
<string name="revanced_hide_buttoned_ads_title">Reklamy z przyciskami</string>
|
||||
@@ -327,10 +327,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_self_sponsor_ads_title">Karty z autopromocją</string>
|
||||
<string name="revanced_hide_self_sponsor_ads_summary_on">Karty z autopromocją są ukryte</string>
|
||||
<string name="revanced_hide_self_sponsor_ads_summary_off">Karty z autopromocją są widoczne</string>
|
||||
<string name="revanced_hide_products_banner_title">Baner do wyświetlania produktów</string>
|
||||
<string name="revanced_hide_products_banner_summary_on">Baner jest ukryty</string>
|
||||
<string name="revanced_hide_products_banner_summary_off">Baner jest pokazany</string>
|
||||
<string name="revanced_hide_player_store_shelf_title">Półki sklepowe gracza</string>
|
||||
<string name="revanced_hide_products_banner_title">Banery z produktami</string>
|
||||
<string name="revanced_hide_products_banner_summary_on">Banery są ukryte</string>
|
||||
<string name="revanced_hide_products_banner_summary_off">Banery są widoczne</string>
|
||||
<string name="revanced_hide_player_store_shelf_title">Półki sklepowe w odtwarzaczu</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_on">Półki sklepowe są ukryte</string>
|
||||
<string name="revanced_hide_player_store_shelf_summary_off">Półki sklepowe są widoczne</string>
|
||||
<string name="revanced_hide_shopping_links_title">Linki do zakupów w opisie filmu</string>
|
||||
@@ -362,10 +362,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="interaction.copyvideourl.copyVideoUrlResourcePatch">
|
||||
<string name="revanced_share_copy_url_success">Adres URL skopiowany do schowka</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">URL ze znacznikiem czasu skopiowany</string>
|
||||
<string name="revanced_copy_video_url_title">Przycisk kopiowania URL filmu</string>
|
||||
<string name="revanced_copy_video_url_title">Przycisk od kopiowania URL filmu</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Przycisk jest widoczny. Dotknij, aby skopiować adres URL wideo. Dotknij i przytrzymaj aby skopiować adres wideo ze znacznikiem czasu</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Przycisk nie jest widoczny</string>
|
||||
<string name="revanced_copy_video_url_timestamp_title">Przycisk do kopiowania URL filmu z czasem</string>
|
||||
<string name="revanced_copy_video_url_timestamp_title">Przycisk od kopiowania URL filmu z czasem</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Przycisk jest widoczny. Dotknij, aby skopiować URL filmu ze znacznikiem czasu. Dotknij i przytrzymaj, aby skopiować film bez znacznika czasu</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Przycisk nie jest widoczny</string>
|
||||
</patch>
|
||||
@@ -376,13 +376,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">To nie pomija ograniczeń wiekowych i akceptuje je automatycznie.</string>
|
||||
</patch>
|
||||
<patch id="interaction.downloads.downloadsResourcePatch">
|
||||
<string name="revanced_external_downloader_screen_title">Pobieranie zewnętrzne</string>
|
||||
<string name="revanced_external_downloader_screen_title">Zewnętrzna aplikacja od pobierania</string>
|
||||
<string name="revanced_external_downloader_screen_summary">Ustawienia dla zewnętrznej aplikacji</string>
|
||||
<string name="revanced_external_downloader_title">Przycisk zewnętrznego pobierania</string>
|
||||
<string name="revanced_external_downloader_summary_on">Przycisk pobierania jest widoczny w odtwarzaczu</string>
|
||||
<string name="revanced_external_downloader_summary_off">Przycisk pobierania nie jest widoczny w odtwarzaczu</string>
|
||||
<!-- 'download action button' should be translated using the same wording as the translation of 'revanced_hide_download_button_title' -->
|
||||
<string name="revanced_external_downloader_action_button_title">Przycisk akcji pobierania</string>
|
||||
<string name="revanced_external_downloader_action_button_title">Nadpisz przycisk od pobierania</string>
|
||||
<string name="revanced_external_downloader_action_button_summary_on">Przycisk pobierania otwiera zewnętrzną aplikację</string>
|
||||
<string name="revanced_external_downloader_action_button_summary_off">Przycisk pobierania otwiera natywne pobieranie w aplikacji</string>
|
||||
<string name="revanced_external_downloader_name_title">Nazwa pakietu aplikacji od pobierania</string>
|
||||
@@ -406,14 +406,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_swipe_volume_title">Gest głośności</string>
|
||||
<string name="revanced_swipe_volume_summary_on">Przesunięcie głośności jest włączone</string>
|
||||
<string name="revanced_swipe_volume_summary_off">Przesunięcie głośności jest wyłączone</string>
|
||||
<string name="revanced_swipe_press_to_engage_title">Gest naciśnięcia na przesunięcie</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_on">Gest naciśnięcia na przesunięcie jest włączony</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_off">Gest naciśnięcia na przesunięcie jest wyłączony</string>
|
||||
<string name="revanced_swipe_press_to_engage_title">Naciśnij, by przesunąć</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_on">Gest naciśnięcia jest włączony</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_off">Gest naciśnięcia jest wyłączony</string>
|
||||
<string name="revanced_swipe_haptic_feedback_title">Wibracje</string>
|
||||
<string name="revanced_swipe_haptic_feedback_summary_on">Wibracje są włączone</string>
|
||||
<string name="revanced_swipe_haptic_feedback_summary_off">Wibracje są wyłączone</string>
|
||||
<string name="revanced_swipe_save_and_restore_brightness_title">Zapisz i przywróć jasność</string>
|
||||
<string name="revanced_swipe_save_and_restore_brightness_summary_on">Zapisz i przywróć jasność podczas zamykania lub wchodzenia w tryb pełnoekranowy</string>
|
||||
<string name="revanced_swipe_save_and_restore_brightness_title">Zapisywanie i przywracanie jasności</string>
|
||||
<string name="revanced_swipe_save_and_restore_brightness_summary_on">Zapisuj i przywracaj jasność podczas zamykania lub wchodzenia w tryb pełnoekranowy</string>
|
||||
<string name="revanced_swipe_save_and_restore_brightness_summary_off">Nie zapisuj i nie przywracaj jasności podczas zamykania lub wchodzenia w tryb pełnoekranowy</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_title">Gest automatycznej jasności</string>
|
||||
<string name="revanced_swipe_lowest_value_enable_auto_brightness_summary_on">Przesunięcie w dół do najniższej wartości gestu jasności włącza automatyczną jasność</string>
|
||||
@@ -436,32 +436,32 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.buttons.action.hideButtonsPatch">
|
||||
<string name="revanced_hide_buttons_screen_title">Przyciski akcji</string>
|
||||
<string name="revanced_hide_buttons_screen_summary">Ukryj lub pokaż przyciski pod filmami</string>
|
||||
<string name="revanced_hide_like_dislike_button_title">Przycisk do łapek w górę i w dół</string>
|
||||
<string name="revanced_hide_like_dislike_button_title">Przycisk od łapek w górę i w dół</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_on">Przyciski łapki w górę i w dół są ukryte</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_off">Przyciski łapki w górę i w dół są widoczne</string>
|
||||
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_share_button_title">Przycisk do udostępniania</string>
|
||||
<string name="revanced_hide_share_button_title">Przycisk od udostępniania</string>
|
||||
<string name="revanced_hide_share_button_summary_on">Przycisk udostępniania jest ukryty</string>
|
||||
<string name="revanced_hide_share_button_summary_off">Przycisk udostępniania jest widoczny</string>
|
||||
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears only on live streams. -->
|
||||
<string name="revanced_hide_report_button_title">Przycisk do zgłaszania</string>
|
||||
<string name="revanced_hide_report_button_title">Przycisk od zgłaszania</string>
|
||||
<string name="revanced_hide_report_button_summary_on">Przycisk zgłaszania jest ukryty</string>
|
||||
<string name="revanced_hide_report_button_summary_off">Przycisk zgłaszania jest widoczny</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_remix_button_title">Przycisk do remiksu</string>
|
||||
<string name="revanced_hide_remix_button_title">Przycisk od remiksu</string>
|
||||
<string name="revanced_hide_remix_button_summary_on">Przycisk remiksu jest ukryty</string>
|
||||
<string name="revanced_hide_remix_button_summary_off">Przycisk remiksu jest widoczny</string>
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_download_button_title">Przycisk do pobierania</string>
|
||||
<string name="revanced_hide_download_button_title">Przycisk od pobierania</string>
|
||||
<string name="revanced_hide_download_button_summary_on">Przycisk pobierania jest ukryty</string>
|
||||
<string name="revanced_hide_download_button_summary_off">Przycisk pobierania jest widoczny</string>
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_thanks_button_title">Przycisk do dziękowania</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Przycisk dziękowania jest ukryty</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Przycisk dziękowania jest widoczny</string>
|
||||
<string name="revanced_hide_thanks_button_title">Przycisk od dziękowania</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Przycisk od dziękowania jest ukryty</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Przycisk od dziękowania jest widoczny</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Przycisk do klipu</string>
|
||||
<string name="revanced_hide_clip_button_title">Przycisk od klipów</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Przycisk tworzenia klipów jest ukryty</string>
|
||||
<string name="revanced_hide_clip_button_summary_off">Przycisk tworzenia klipów jest widoczny</string>
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
@@ -473,19 +473,19 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_navigation_buttons_screen_title">Przyciski nawigacyjne</string>
|
||||
<string name="revanced_navigation_buttons_screen_summary">Ukryj lub zmień przyciski na pasku nawigacji</string>
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the tab. -->
|
||||
<string name="revanced_hide_home_button_title">Przycisk do strony głównej</string>
|
||||
<string name="revanced_hide_home_button_title">Przycisk od głównej</string>
|
||||
<string name="revanced_hide_home_button_summary_on">Przycisk strony głównej jest ukryty</string>
|
||||
<string name="revanced_hide_home_button_summary_off">Przycisk strony głównej jest widoczny</string>
|
||||
<!-- 'Shorts' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_hide_shorts_button_title">Przycisk do Shorts\'ów</string>
|
||||
<string name="revanced_hide_shorts_button_summary_on">Przycisk Shorts\'ów jest ukryty</string>
|
||||
<string name="revanced_hide_shorts_button_summary_off">Przycisk Shorts\'ów jest widoczny</string>
|
||||
<string name="revanced_hide_shorts_button_title">Przycisk od Shortsów</string>
|
||||
<string name="revanced_hide_shorts_button_summary_on">Przycisk Shortsów jest ukryty</string>
|
||||
<string name="revanced_hide_shorts_button_summary_off">Przycisk Shortsów jest widoczny</string>
|
||||
<!-- The Create button has no display name. Translate normally. -->
|
||||
<string name="revanced_hide_create_button_title">Przycisk do przesyłania</string>
|
||||
<string name="revanced_hide_create_button_title">Przycisk od przesyłania</string>
|
||||
<string name="revanced_hide_create_button_summary_on">Przycisk przesyłania jest ukryty</string>
|
||||
<string name="revanced_hide_create_button_summary_off">Przycisk przesyłania jest widoczny</string>
|
||||
<!-- 'Subscriptions' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_hide_subscriptions_button_title">Przycisk do subskrypcji</string>
|
||||
<string name="revanced_hide_subscriptions_button_title">Przycisk od strony subskrypcji</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_on">Przycisk subskrypcji jest ukryty</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">Przycisk subskrypcji jest widoczny</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
@@ -497,54 +497,54 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_navigation_button_labels_summary_off">Etykiety są widoczne</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.player.flyoutmenupanel.hidePlayerFlyoutMenuPatch">
|
||||
<string name="revanced_hide_player_flyout_title">Menu ustawień filmu</string>
|
||||
<string name="revanced_hide_player_flyout_summary">Ukryj lub pokaż elementy menu ustawień filmu</string>
|
||||
<string name="revanced_hide_player_flyout_title">Menu ustawień</string>
|
||||
<string name="revanced_hide_player_flyout_summary">Ukryj lub pokaż elementy menu ustawień</string>
|
||||
<!-- 'Captions' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_captions_title">Menu do napisów</string>
|
||||
<string name="revanced_hide_player_flyout_captions_title">Menu napisów</string>
|
||||
<string name="revanced_hide_player_flyout_captions_summary_on">Menu napisów jest ukryte</string>
|
||||
<string name="revanced_hide_player_flyout_captions_summary_off">Menu napisów jest widoczne</string>
|
||||
<!-- 'Additional settings' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_additional_settings_title">Menu do dodatkowych ustawień</string>
|
||||
<string name="revanced_hide_player_flyout_additional_settings_title">Menu dodatkowych ustawień</string>
|
||||
<string name="revanced_hide_player_flyout_additional_settings_summary_on">Menu dodatkowych ustawień jest ukryte</string>
|
||||
<string name="revanced_hide_player_flyout_additional_settings_summary_off">Menu dodatkowych ustawień jest widoczne</string>
|
||||
<!-- 'Sleep timer' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_title">Menu do wyłącznika czasowego</string>
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_title">Menu wyłącznika czasowego</string>
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_summary_on">Menu wyłącznika czasowego jest ukryte</string>
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_summary_off">Menu wyłącznika czasowego jest widoczne</string>
|
||||
<!-- 'Loop video' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_loop_video_title">Menu do pętli filmu</string>
|
||||
<string name="revanced_hide_player_flyout_loop_video_title">Menu pętli filmu</string>
|
||||
<string name="revanced_hide_player_flyout_loop_video_summary_on">Menu pętli filmu jest ukryte</string>
|
||||
<string name="revanced_hide_player_flyout_loop_video_summary_off">Menu pętli filmu jest widoczne</string>
|
||||
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_title">Menu do oświetlenia kinowego</string>
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_title">Menu oświetlenia kinowego</string>
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_summary_on">Menu oświetlenia kinowego jest ukryte</string>
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_summary_off">Menu oświetlenia kinowego jest widoczne</string>
|
||||
<string name="revanced_hide_player_flyout_stable_volume_title">Menu do stabilnej głośności</string>
|
||||
<string name="revanced_hide_player_flyout_stable_volume_title">Menu stabilnej głośności</string>
|
||||
<string name="revanced_hide_player_flyout_stable_volume_summary_off">Menu stabilnej głośności jest widoczne</string>
|
||||
<string name="revanced_hide_player_flyout_stable_volume_summary_on">Menu stabilnej głośności jest ukryte</string>
|
||||
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_help_title">Menu do pomocy i opinii</string>
|
||||
<string name="revanced_hide_player_flyout_help_title">Menu pomocy i opinii</string>
|
||||
<string name="revanced_hide_player_flyout_help_summary_on">Menu pomocy i opinii jest ukryte</string>
|
||||
<string name="revanced_hide_player_flyout_help_summary_off">Menu pomocy i opinii jest widoczne</string>
|
||||
<!-- 'Playback speed' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_speed_title">Menu do prędkości odtwarzania</string>
|
||||
<string name="revanced_hide_player_flyout_speed_title">Menu prędkości odtwarzania</string>
|
||||
<string name="revanced_hide_player_flyout_speed_summary_on">Menu prędkości odtwarzania jest ukryte</string>
|
||||
<string name="revanced_hide_player_flyout_speed_summary_off">Menu prędkości odtwarzania jest widoczne</string>
|
||||
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
|
||||
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
|
||||
<string name="revanced_hide_player_flyout_more_info_title">Menu do większej ilości informacji</string>
|
||||
<string name="revanced_hide_player_flyout_more_info_title">Menu większej ilości informacji</string>
|
||||
<string name="revanced_hide_player_flyout_more_info_summary_on">Menu większej ilości informacji jest ukryte</string>
|
||||
<string name="revanced_hide_player_flyout_more_info_summary_off">Menu większej ilości informacji jest widoczne</string>
|
||||
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_lock_screen_title">Menu do blokady ekranu</string>
|
||||
<string name="revanced_hide_player_flyout_lock_screen_title">Menu blokady ekranu</string>
|
||||
<string name="revanced_hide_player_flyout_lock_screen_summary_on">Menu blokady ekranu jest ukryte</string>
|
||||
<string name="revanced_hide_player_flyout_lock_screen_summary_off">Menu blokady ekranu jest widoczne</string>
|
||||
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_audio_track_title">Menu do ścieżki dźwiękowej</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_title">Menu ścieżki dźwiękowej</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_on">Menu ścieżki dźwiękowej jest ukryte</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_off">Menu ścieżki dźwiękowej jest widoczne</string>
|
||||
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_title">Menu do oglądania w VR</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_title">Menu oglądania w VR</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Menu oglądania w VR jest ukryte</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Menu oglądania w VR jest widoczne</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_title">Opis menu jakości filmu</string>
|
||||
@@ -552,14 +552,14 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Opis menu jakości filmu jest widoczny</string>
|
||||
</patch>
|
||||
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
|
||||
<string name="revanced_hide_player_previous_next_buttons_title">Przyciski do poprzedniego i następnego filmu</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_title">Przyciski od poprzedniego i następnego filmu</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_on">Przyciski są ukryte</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_off">Przyciski są widoczne</string>
|
||||
<string name="revanced_hide_cast_button_title">Przycisk do powielania</string>
|
||||
<string name="revanced_hide_cast_button_title">Przycisk od powielania</string>
|
||||
<string name="revanced_hide_cast_button_summary_on">Przycisk powielania jest ukryty</string>
|
||||
<string name="revanced_hide_cast_button_summary_off">Przycisk powielania jest widoczny</string>
|
||||
<!-- This button does not display any text, but 'captions' should be translated using the same wording used as the translation of 'revanced_hide_player_flyout_captions_title' -->
|
||||
<string name="revanced_hide_captions_button_title">Przycisk do napisów</string>
|
||||
<string name="revanced_hide_captions_button_title">Przycisk od napisów</string>
|
||||
<string name="revanced_hide_captions_button_summary_on">Przycisk napisów jest ukryty</string>
|
||||
<string name="revanced_hide_captions_button_summary_off">Przycisk napisów jest widoczny</string>
|
||||
<string name="revanced_hide_autoplay_button_title">Przycisk automatycznego odtwarzania</string>
|
||||
@@ -590,24 +590,24 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_hide_seekbar_title">Pasek postępu filmu w odtwarzaczu</string>
|
||||
<string name="revanced_hide_seekbar_summary_on">Pasek postępu w odtwarzaczu jest ukryty</string>
|
||||
<string name="revanced_hide_seekbar_summary_off">Pasek postępu w odtwarzaczu jest widoczny</string>
|
||||
<string name="revanced_hide_seekbar_thumbnail_title">Paski postępu filmów w miniaturkach</string>
|
||||
<string name="revanced_hide_seekbar_thumbnail_title">Pasek postępu filmu w miniaturkach</string>
|
||||
<string name="revanced_hide_seekbar_thumbnail_summary_on">Pasek postępu jest ukryty</string>
|
||||
<string name="revanced_hide_seekbar_thumbnail_summary_off">Pasek postępu jest widoczny</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.shorts.hideShortsComponentsResourcePatch">
|
||||
<string name="revanced_shorts_player_screen_title">Odtwarzacz Shortsów</string>
|
||||
<string name="revanced_shorts_player_screen_summary">Ukryj lub pokazuj przyciski w odtwarzaczu Shorts\'ów</string>
|
||||
<string name="revanced_shorts_player_screen_summary">Ukryj lub pokaż przyciski w odtwarzaczu Shortsów</string>
|
||||
<!-- 'home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
<string name="revanced_hide_shorts_home_title">Shorts\'y na stronie głównej</string>
|
||||
<string name="revanced_hide_shorts_home_summary_on">Shorts\'y na stronie głównej są ukryte</string>
|
||||
<string name="revanced_hide_shorts_home_summary_off">Shorts\'y na stronie głównej są widoczne</string>
|
||||
<string name="revanced_hide_shorts_home_title">Shortsy na stronie głównej</string>
|
||||
<string name="revanced_hide_shorts_home_summary_on">Shortsy na stronie głównej są ukryte</string>
|
||||
<string name="revanced_hide_shorts_home_summary_off">Shortsy na stronie głównej są widoczne</string>
|
||||
<!-- 'subscription' should be translated using the same localized wording YouTube displays for the subscription tab. -->
|
||||
<string name="revanced_hide_shorts_subscriptions_title">Shorts\'y na stronie subskrypcji</string>
|
||||
<string name="revanced_hide_shorts_subscriptions_summary_on">Shorts\'y na stronie subskrypcji są ukryte</string>
|
||||
<string name="revanced_hide_shorts_subscriptions_summary_off">Shorts\'y na stronie subskrypcji są widoczne</string>
|
||||
<string name="revanced_hide_shorts_search_title">Shorts\'y w wynikach wyszukiwania</string>
|
||||
<string name="revanced_hide_shorts_search_summary_on">Shorts\'y w wynikach wyszukiwania są ukryte</string>
|
||||
<string name="revanced_hide_shorts_search_summary_off">Shorts\'y w wynikach wyszukiwania są widoczne</string>
|
||||
<string name="revanced_hide_shorts_subscriptions_title">Shortsy na stronie subskrypcji</string>
|
||||
<string name="revanced_hide_shorts_subscriptions_summary_on">Shortsy na stronie subskrypcji są ukryte</string>
|
||||
<string name="revanced_hide_shorts_subscriptions_summary_off">Shortsy na stronie subskrypcji są widoczne</string>
|
||||
<string name="revanced_hide_shorts_search_title">Shortsy w wynikach wyszukiwania</string>
|
||||
<string name="revanced_hide_shorts_search_summary_on">Shortsy w wynikach wyszukiwania są ukryte</string>
|
||||
<string name="revanced_hide_shorts_search_summary_off">Shortsy w wynikach wyszukiwania są widoczne</string>
|
||||
<!-- 'join' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
<string name="revanced_hide_shorts_join_button_title">Przycisk od sponsorowania</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_on">Przycisk od sponsorowania jest ukryty</string>
|
||||
@@ -724,10 +724,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Odśwież film, aby zagłosować za pomocą Return YouTube Dislike</string>
|
||||
<string name="revanced_ryd_enable_summary_on">Łapki w dół są widoczne</string>
|
||||
<string name="revanced_ryd_enable_summary_off">Łapki w dół są ukryte</string>
|
||||
<string name="revanced_ryd_shorts_title">Pokaż łapki w dół na Shorts\'ach</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">Łapki w dół widoczne na Shorts\'ach</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">Łapki w dół wyświetlane na Shorts\n\nOgraniczenie: łapki w dół mogą się nie wyświetlać w trybie incognito</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">Łapki w dół ukryte na Shorts\'ach</string>
|
||||
<string name="revanced_ryd_shorts_title">Łapki w dół na Shortsach</string>
|
||||
<string name="revanced_ryd_shorts_summary_on">Łapki w dół widoczne na Shortsach</string>
|
||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">Łapki w dół widoczne na Shortsach\n\nOgraniczenie: łapki w dół mogą się nie wyświetlać w trybie incognito</string>
|
||||
<string name="revanced_ryd_shorts_summary_off">Łapki w dół ukryte na Shortsach</string>
|
||||
<string name="revanced_ryd_dislike_percentage_title">Łapki w dół jako procent</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_on">Łapki w dół wyświetlane jako procent</string>
|
||||
<string name="revanced_ryd_dislike_percentage_summary_off">Łapki w dół wyświetlane jako liczba</string>
|
||||
@@ -735,7 +735,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_ryd_compact_layout_title">Kompaktowy przycisk polubienia</string>
|
||||
<string name="revanced_ryd_compact_layout_summary_on">Przycisk łapki stylizowany dla minimalnej szerokości</string>
|
||||
<string name="revanced_ryd_compact_layout_summary_off">Przycisk łapki stylizowany dla najlepszego wyglądu</string>
|
||||
<string name="revanced_ryd_toast_on_connection_error_title">Pokaż komunikat o niedostępności API</string>
|
||||
<string name="revanced_ryd_toast_on_connection_error_title">Komunikat o niedostępności API</string>
|
||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">Komunikat jest wyświetlany, jeśli Return YouTube Dislike nie jest dostępny</string>
|
||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">Komunikat nie jest wyświetlany, jeśli Return YouTube Dislike nie jest dostępny</string>
|
||||
<string name="revanced_ryd_about">O programie</string>
|
||||
@@ -771,24 +771,24 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_legacy_summary_off">Pełnoekranowy podgląd filmu w średniej jakości</string>
|
||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">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.</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_title">Stare miniatury paska nawigacji</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Podgląd filmu pojawi pojawią się nad paskiem postępu</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">Podgląd filmu pojawi się na pełnym ekranie</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Podgląd filmu pojawia się nad paskiem postępu filmów</string>
|
||||
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">Podgląd filmu pojawia się w trybie pełnoekranowym</string>
|
||||
</patch>
|
||||
<patch id="layout.sponsorblock.sponsorBlockResourcePatch">
|
||||
<string name="revanced_sb_enable_sb">Włącz SponsorBlock\'a</string>
|
||||
<string name="revanced_sb_enable_sb">SponsorBlock</string>
|
||||
<string name="revanced_sb_enable_sb_sum">SponsorBlock to system oparty na społeczności, który umożliwia pomijanie irytujących części filmów na YouTube</string>
|
||||
<string name="revanced_sb_appearance_category">Wygląd</string>
|
||||
<string name="revanced_sb_enable_voting">Przycisk głosowania</string>
|
||||
<string name="revanced_sb_enable_voting_sum_on">Przycisk głosowania jest wyświetlany</string>
|
||||
<string name="revanced_sb_enable_voting_sum_off">Przycisk głosowania nie jest wyświetlany</string>
|
||||
<string name="revanced_sb_enable_voting_sum_on">Przycisk głosowania jest widoczny</string>
|
||||
<string name="revanced_sb_enable_voting_sum_off">Przycisk głosowania nie jest widoczny</string>
|
||||
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title' -->
|
||||
<string name="revanced_sb_enable_compact_skip_button">Styl przycisku od pomijania</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button_sum_on">Przycisk od pomijania stylizowany dla minimalnej szerokości</string>
|
||||
<string name="revanced_sb_enable_compact_skip_button_sum_off">Przycisk od pomijania stylizowany dla najlepszego wyglądu</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Automatycznie ukryj przycisk od pomijania</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Automatycznie ukryj przycisk pomijania</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Przycisk od pomijania ukrywa się po kilku sekundach</string>
|
||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Przycisk od pomijania wyświetlany dla całego segmentu</string>
|
||||
<string name="revanced_sb_general_skiptoast">Pokaż komunikat podczas automatycznego pominięcia</string>
|
||||
<string name="revanced_sb_general_skiptoast">Komunikat podczas automatycznego pominięcia</string>
|
||||
<string name="revanced_sb_general_skiptoast_sum_on">Komunikat jest wyświetlany, gdy segment zostanie automatycznie pominięty. Dotknij tutaj, aby zobaczyć przykład</string>
|
||||
<string name="revanced_sb_general_skiptoast_sum_off">Komunikat nie jest wyświetlany. Dotknij tutaj, aby zobaczyć przykład</string>
|
||||
<string name="revanced_sb_general_time_without">Długość filmu bez segmentów</string>
|
||||
@@ -820,7 +820,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_general_uuid">Twój prywatny identyfikator użytkownika</string>
|
||||
<string name="revanced_sb_general_uuid_sum">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</string>
|
||||
<string name="revanced_sb_general_uuid_invalid">Identyfikator użytkownika prywatnego musi mieć co najmniej 30 znaków</string>
|
||||
<string name="revanced_sb_general_api_url">Zmień link API</string>
|
||||
<string name="revanced_sb_general_api_url">Zmień adres URL API</string>
|
||||
<string name="revanced_sb_general_api_url_sum">Adres, który jest używany przez SponsorBlock do wykonywania połączeń z serwerem</string>
|
||||
<string name="revanced_sb_api_url_reset">Zresetuj adres API</string>
|
||||
<string name="revanced_sb_api_url_invalid">Adres API jest nieprawidłowy</string>
|
||||
@@ -940,8 +940,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_sb_stats_saved">Uchroniłeś ludzi przed <b>%s</b> segmentami</string>
|
||||
<string name="revanced_sb_stats_saved_sum_zero">Dotknij tutaj, aby zobaczyć globalne statystyki i najlepszych współtwórców</string>
|
||||
<string name="revanced_sb_stats_saved_sum">To <b>%s</b> ich życia.<br>Dotknij tutaj, aby zobaczyć tabelę wyników</string>
|
||||
<string name="revanced_sb_stats_self_saved">Pominąłeś <b>%s</b> segmentów</string>
|
||||
<string name="revanced_sb_stats_self_saved_sum">To jest <b>%s</b></string>
|
||||
<string name="revanced_sb_stats_self_saved">Pominąłeś(aś) <b>%s</b> segmentów</string>
|
||||
<string name="revanced_sb_stats_self_saved_sum">To <b>%s</b></string>
|
||||
<string name="revanced_sb_stats_self_saved_reset_title">Czy chcesz zresetować ilość pominiętych segmentów?</string>
|
||||
<string name="revanced_sb_stats_saved_hour_format">%1$s godzin %2$s minut</string>
|
||||
<string name="revanced_sb_stats_saved_minute_format">%1$s minut %2$s sekund</string>
|
||||
@@ -963,12 +963,12 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<!-- It is ideal, but not required, if the text here appears is alphabetically after the text used for 'revanced_spoof_app_version_title'.
|
||||
This is because the 'General layout' menu uses alphabetic sorting, and it functionally works better if the spoof target selector appears below the 'Spoof app version' UI switch -->
|
||||
<string name="revanced_spoof_app_version_target_title">Docelowa oszukiwana wersja aplikacji</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_1">18.38.44 - Przywróć stare ikony gracza Shorts</string>
|
||||
<string name="revanced_spoof_app_version_target_entry_1">18.38.44 - Przywróć stare ikony odtwarzacza Shortsów</string>
|
||||
<!-- 'RYD' is 'Return YouTube Dislike' -->
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_1">18.33.40 - Przywróć RYD (Return YouTube Dislike) w trybie incognito</string>
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_1">18.33.40 - Przywróć RYD w trybie incognito Shortsów</string>
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_2">18.20.39 - Przywracanie szerokiej prędkości wideo & menu jakości</string>
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_3">18.09.39 - Przywróć kartę bibliotek</string>
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_4">17.33.42 - Przywróć starą półkę na liście odtwarzania</string>
|
||||
<string name="revanced_spoof_app_version_target_legacy_entry_4">17.33.42 - Przywróć stary układ playlisty</string>
|
||||
</patch>
|
||||
<patch id="layout.startpage.changeStartPagePatch">
|
||||
<string name="revanced_change_start_page_title">Strona startowa</string>
|
||||
@@ -989,17 +989,17 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_change_start_page_entry_watch_later">Do obejrzenia</string>
|
||||
</patch>
|
||||
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
||||
<string name="revanced_disable_resuming_shorts_player_title">Wznawianie odtwarzacza Shorts\'ów</string>
|
||||
<string name="revanced_disable_resuming_shorts_player_summary_on">Odtwarzacz Shorts\'ów nie będzie wznawiany przy starcie aplikacji</string>
|
||||
<string name="revanced_disable_resuming_shorts_player_summary_off">Odtwarzacz Shorts\'ów zostanie wznowiony przy starcie aplikacji</string>
|
||||
<string name="revanced_disable_resuming_shorts_player_title">Wznawianie odtwarzacza Shortsów</string>
|
||||
<string name="revanced_disable_resuming_shorts_player_summary_on">Odtwarzacz Shortsów nie będzie wznawiany przy starcie aplikacji</string>
|
||||
<string name="revanced_disable_resuming_shorts_player_summary_off">Odtwarzacz Shortsów zostanie wznowiony przy starcie aplikacji</string>
|
||||
</patch>
|
||||
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
|
||||
<string name="revanced_shorts_autoplay_title">Autoodtwarzanie Shorts</string>
|
||||
<string name="revanced_shorts_autoplay_summary_on">Shorts\'y będą odtwarzane automatycznie</string>
|
||||
<string name="revanced_shorts_autoplay_summary_off">Shorts\'y będą odtwarzane automatycznie</string>
|
||||
<string name="revanced_shorts_autoplay_background_title">Automatyczne odtwarzanie w tle Shorts\'ów</string>
|
||||
<string name="revanced_shorts_autoplay_background_summary_on">Odtwarzanie w tle Shorts\'ów będzie automatycznie odtwarzane</string>
|
||||
<string name="revanced_shorts_autoplay_background_summary_off">Odtwarzanie w tle Shorts\'ów będzie się powtarzać</string>
|
||||
<string name="revanced_shorts_autoplay_title">Autoodtwarzanie Shortsów</string>
|
||||
<string name="revanced_shorts_autoplay_summary_on">Shortsy będą odtwarzane automatycznie</string>
|
||||
<string name="revanced_shorts_autoplay_summary_off">Shortsy będą się powtarzać</string>
|
||||
<string name="revanced_shorts_autoplay_background_title">Autoodtwarzanie Shortsów w tle</string>
|
||||
<string name="revanced_shorts_autoplay_background_summary_on">Odtwarzanie w tle Shortsów będzie automatyczne</string>
|
||||
<string name="revanced_shorts_autoplay_background_summary_off">Odtwarzanie w tle Shortsów będzie się powtarzać</string>
|
||||
</patch>
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
<string name="revanced_tablet_layout_title">Układ tabletu</string>
|
||||
@@ -1011,21 +1011,22 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Miniodtwarzacz</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Zmień styl zminimalizowanego odtwarzacza aplikacji</string>
|
||||
<string name="revanced_miniplayer_type_title">Typ miniodtwarzacza</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Oryginał</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Telefon</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Tablet</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Wyłączony</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Oryginalny</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Minimalny</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Tabletowy</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Nowoczesny 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Nowoczesny 2</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">Nowoczesny 3</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_title">Zaokrąglone narożniki</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Zaokrąglone</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Kwadratowe</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Narożniki są zaokrąglone</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Narożniki są kwadratowe</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">Podwójne stuknięcie i uszczypnięcie, aby zmienić rozmiar</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">Włączone\n\n• Dwukrotnie dotknij, aby zwiększyć rozmiar miniodtwarzacza\n• Dwukrotnie dotknij ponownie, aby przywrócić oryginalny rozmiar</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">Wyłączone</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">Przeciągnij i upuść</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">Włączone\n\nMiniodtwarzacz można przeciągnąć do dowolnego rogu ekranu</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">Wyłączone</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">Gest przeciągnięcia i upuszczenia</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">Gest przeciągnięcia i upuszczenia włączony\n\nMiniodtwarzacz można przeciągnąć do dowolnego rogu ekranu</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">Gest przeciągnięcia i upuszczenia wyłączony</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">Gest przeciągania w poziomie</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">Włączony\n\nMiniodtwarzacz można przeciągnąć poza ekran w lewo lub prawo</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Gest przeciągania w poziomie jest wyłączony</string>
|
||||
@@ -1035,9 +1036,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_title">Przyciski rozszerzania i zamykania</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_on">Przycisk są ukryte\n\nPrzesuń palcem, aby rozszerzyć lub zamknąć</string>
|
||||
<string name="revanced_miniplayer_hide_expand_close_legacy_summary_off">Widoczne</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_title">Ukryj napisy</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_on">Napisy są ukryte</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_off">Napisy są widoczne</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_title">Podteksty</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_on">Podteksty są ukryte</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_off">Podteksty są widoczne</string>
|
||||
<string name="revanced_miniplayer_hide_rewind_forward_title">Przyciski przewijania do przodu i do tyłu</string>
|
||||
<string name="revanced_miniplayer_hide_rewind_forward_summary_on">Przyciski przewijania do przodu i do tyłu są ukryte</string>
|
||||
<string name="revanced_miniplayer_hide_rewind_forward_summary_off">Przyciski przewijania do przodu i do tyłu są widoczne</string>
|
||||
@@ -1068,13 +1069,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
|
||||
<string name="revanced_alt_thumbnail_home_title">Strona główna</string>
|
||||
<string name="revanced_alt_thumbnail_home_title">Na stronie głównej</string>
|
||||
<!-- 'Subscription' should be translated using the same localized wording YouTube displays for the subscription tab. -->
|
||||
<string name="revanced_alt_thumbnail_subscription_title">Strona subskrypcji</string>
|
||||
<string name="revanced_alt_thumbnail_subscription_title">Na stronie subskrypcji</string>
|
||||
<!-- 'You' should be translated using the same localized wording YouTube displays for the You (library) tab. -->
|
||||
<string name="revanced_alt_thumbnail_library_title">Na stronie Ty</string>
|
||||
<string name="revanced_alt_thumbnail_player_title">W playlistach, rekomendacjach</string>
|
||||
<string name="revanced_alt_thumbnail_search_title">Wyniki wyszukiwania</string>
|
||||
<string name="revanced_alt_thumbnail_search_title">W wynikach wyszukiwania</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_1">Oryginalne miniaturki</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow i oryginalne miniatury</string>
|
||||
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow i miniaturki przechwycone z filmu</string>
|
||||
@@ -1085,11 +1086,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">Komunikat nie jest wyświetlany, jeśli DeArrow nie jest dostępny</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_api_url_title">Punkt końcowy API DeArrow</string>
|
||||
<string name="revanced_alt_thumbnail_dearrow_api_url_summary">Adres URL punktu końcowego do miniaturek DeArrow</string>
|
||||
<string name="revanced_alt_thumbnail_stills_about_title">Przechwytywanie wideo</string>
|
||||
<string name="revanced_alt_thumbnail_stills_about_title">Miniaturki przechwycone z filmu</string>
|
||||
<string name="revanced_alt_thumbnail_stills_about_summary">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</string>
|
||||
<string name="revanced_alt_thumbnail_stills_fast_title">Szybkie przechwytywanie miniaturek z filmu</string>
|
||||
<string name="revanced_alt_thumbnail_stills_fast_summary_on">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.</string>
|
||||
<string name="revanced_alt_thumbnail_stills_fast_summary_off">Używasz wysokiej jakości przechwytywania</string>
|
||||
<string name="revanced_alt_thumbnail_stills_fast_summary_on">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</string>
|
||||
<string name="revanced_alt_thumbnail_stills_fast_summary_off">Używasz przechwytywania wysokiej jakości</string>
|
||||
<string name="revanced_alt_thumbnail_stills_time_title">Czas, z którego ma być przechwycona miniaturka z filmu</string>
|
||||
<string name="revanced_alt_thumbnail_stills_time_entry_1">Początek filmu</string>
|
||||
<string name="revanced_alt_thumbnail_stills_time_entry_2">Środek filmu</string>
|
||||
@@ -1099,9 +1100,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_alt_thumbnail_dearrow_error_generic">DeArrow tymczasowo niedostępny</string>
|
||||
</patch>
|
||||
<patch id="misc.announcements.announcementsPatch">
|
||||
<string name="revanced_announcements_title">Pokaż ogłoszenia ReVanced</string>
|
||||
<string name="revanced_announcements_summary_on">Włączone</string>
|
||||
<string name="revanced_announcements_summary_off">Wyłączone</string>
|
||||
<string name="revanced_announcements_title">Ogłoszenia ReVanced</string>
|
||||
<string name="revanced_announcements_summary_on">Ogłoszenia są wyświetlane przy starcie</string>
|
||||
<string name="revanced_announcements_summary_off">Ogłoszenia nie są wyświetlane przy starcie</string>
|
||||
<string name="revanced_announcements_enabled_summary">Ogłoszenia przy starcie</string>
|
||||
<string name="revanced_announcements_connection_failed">Nie udało się połączyć z dostawcą ogłoszeń</string>
|
||||
<string name="revanced_announcements_dialog_dismiss">Odrzuć</string>
|
||||
@@ -1113,13 +1114,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="misc.autorepeat.autoRepeatPatch">
|
||||
<string name="revanced_auto_repeat_title">Automatyczne powtarzanie</string>
|
||||
<string name="revanced_auto_repeat_summary_on">Włączone</string>
|
||||
<string name="revanced_auto_repeat_summary_off">Wyłączone</string>
|
||||
<string name="revanced_auto_repeat_summary_on">Automatyczne powtarzanie jest włączone</string>
|
||||
<string name="revanced_auto_repeat_summary_off">Automatyczne powtarzanie jest wyłączone</string>
|
||||
</patch>
|
||||
<patch id="misc.dimensions.spoof.spoofDeviceDimensionsPatch">
|
||||
<string name="revanced_spoof_device_dimensions_title">Oszukaj rozdzielczość urządzenia</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">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</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">Wyłączone\n\nWłączenie tej opcji umożliwia ustawienie wyższej jakości filmu niż zwykle</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_on">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</string>
|
||||
<string name="revanced_spoof_device_dimensions_summary_off">Oszukiwanie rozdzielczości wyłączone\n\nWłączenie tej opcji umożliwia ustawienie wyższej jakości filmu niż zwykle</string>
|
||||
<string name="revanced_spoof_device_dimensions_user_dialog_message">Włączenie tego może spowodować zacinanie się odtwarzanego filmu, pogorszenie żywotności baterii i nieznane efekty uboczne.</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
@@ -1127,7 +1128,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="microg_settings_summary">Ustawienia GmsCore</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">Obejście przekierowań URL</string>
|
||||
<string name="revanced_bypass_url_redirects_title">Omijanie przekierowań URL</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_on">Przekierowanie URL jest omijane</string>
|
||||
<string name="revanced_bypass_url_redirects_summary_off">Przekierowanie URL nie jest omijane</string>
|
||||
</patch>
|
||||
@@ -1147,23 +1148,24 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Haptyka jest włączona</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Automatycznie</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Auto</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Zapamiętaj zmiany jakości filmu</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Zmiany jakości dotyczą wszystkich filmów</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Zmiany jakości dotyczą tylko bieżącego filmu</string>
|
||||
<string name="revanced_video_quality_default_wifi_title">Domyślna jakość wideo w sieci Wi-Fi</string>
|
||||
<string name="revanced_video_quality_default_mobile_title">Domyślna jakość wideo w sieci komórkowej</string>
|
||||
<string name="revanced_video_quality_default_wifi_title">Domyślna jakość filmu w sieci Wi-Fi</string>
|
||||
<string name="revanced_video_quality_default_mobile_title">Domyślna jakość filmu w sieci komórkowej</string>
|
||||
<string name="revanced_remember_video_quality_mobile">Dane mobilne</string>
|
||||
<string name="revanced_remember_video_quality_wifi">Wi-Fi</string>
|
||||
<string name="revanced_remember_video_quality_toast">Zmieniono domyślną jakość %1$s na: %2$s</string>
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
<string name="revanced_playback_speed_dialog_button_title">Przycisk prędkości</string>
|
||||
<string name="revanced_playback_speed_dialog_button_title">Przycisk od prędkości</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Przycisk jest widoczny</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Przycisk nie jest widoczny</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_speed_menu_title">Własne menu prędkości odtwarzania</string>
|
||||
<string name="revanced_custom_speed_menu_title">Niestandardowe menu prędkości odtwarzania</string>
|
||||
<string name="revanced_custom_speed_menu_summary_on">Niestandardowe menu prędkości jest widoczne</string>
|
||||
<string name="revanced_custom_speed_menu_summary_off">Niestandardowe menu prędkości nie jest widoczne</string>
|
||||
<string name="revanced_custom_playback_speeds_title">Niestandardowe prędkości odtwarzania</string>
|
||||
@@ -1181,13 +1183,13 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="video.videoqualitymenu.restoreOldVideoQualityMenuResourcePatch">
|
||||
<string name="revanced_restore_old_video_quality_menu_title">Stare menu jakości filmu</string>
|
||||
<string name="revanced_restore_old_video_quality_menu_summary_on">Stare menu jakości wideo jest wyświelane</string>
|
||||
<string name="revanced_restore_old_video_quality_menu_summary_off">Stare menu jakości wideo nie jest wyświetlane</string>
|
||||
<string name="revanced_restore_old_video_quality_menu_summary_on">Stare menu jakości filmu jest widoczne</string>
|
||||
<string name="revanced_restore_old_video_quality_menu_summary_off">Stare menu jakości filmu nie jest widoczne</string>
|
||||
</patch>
|
||||
<patch id="interaction.seekbar.enableSlideToSeekPatch">
|
||||
<string name="revanced_slide_to_seek_title">Przesuwanie do przewijania</string>
|
||||
<string name="revanced_slide_to_seek_summary_on">Włączone</string>
|
||||
<string name="revanced_slide_to_seek_summary_off">Wyłączone</string>
|
||||
<string name="revanced_slide_to_seek_title">Przesuń, by przewinąć</string>
|
||||
<string name="revanced_slide_to_seek_summary_on">Gest przesuwania jest włączony</string>
|
||||
<string name="revanced_slide_to_seek_summary_off">Przesuń, aby przeszukiwać nie jest włączony</string>
|
||||
</patch>
|
||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||
<string name="revanced_spoof_video_streams_screen_title">Oszukaj strumienie filmu</string>
|
||||
@@ -1229,19 +1231,19 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
</patch>
|
||||
<patch id="chat.antidelete.showDeletedMessagesPatch">
|
||||
<string name="revanced_deleted_msg">wiadomość usunięta</string>
|
||||
<string name="revanced_show_deleted_messages_title">Pokaż usunięte wiadomości</string>
|
||||
<string name="revanced_show_deleted_messages_title">Usunięte wiadomości</string>
|
||||
<string name="revanced_show_deleted_messages_entry_1">Nie pokazuj usuniętych wiadomości</string>
|
||||
<string name="revanced_show_deleted_messages_entry_2">Ukryj usunięte wiadomości za spoilerem</string>
|
||||
<string name="revanced_show_deleted_messages_entry_3">Pokaż usunięte wiadomości jako przekreślony tekst</string>
|
||||
</patch>
|
||||
<patch id="chat.autoclaim.autoClaimChannelPointsPatch">
|
||||
<string name="revanced_auto_claim_channel_points_title">Automatycznie odbieranie punktów kanału</string>
|
||||
<string name="revanced_auto_claim_channel_points_summary_on">Punkty kanału są automatycznie odebrane</string>
|
||||
<string name="revanced_auto_claim_channel_points_summary_off">Punkty kanału nie są automatycznie odebrane</string>
|
||||
<string name="revanced_auto_claim_channel_points_title">Automatyczne przyznawanie punktów kanału</string>
|
||||
<string name="revanced_auto_claim_channel_points_summary_on">Punkty kanału są przyznawane automatycznie</string>
|
||||
<string name="revanced_auto_claim_channel_points_summary_off">Punkty kanału nie są przyznawane automatycznie</string>
|
||||
</patch>
|
||||
<patch id="debug.debugModePatch">
|
||||
<!-- Twitch specific internal debug mode, and not the same as 'revanced_debug_title' -->
|
||||
<string name="revanced_twitch_debug_mode_title">Tryb debugowania </string>
|
||||
<string name="revanced_twitch_debug_mode_title">Tryb debugowania</string>
|
||||
<string name="revanced_twitch_debug_mode_summary_on">Tryb debugowania jest włączony (niezalecane)</string>
|
||||
<string name="revanced_twitch_debug_mode_summary_off">Tryb debugowania jest wyłączony</string>
|
||||
</patch>
|
||||
|
||||
@@ -1011,8 +1011,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Miniplayer</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Alterar o estilo do player minimizado no aplicativo</string>
|
||||
<string name="revanced_miniplayer_type_title">Tipo de miniplayer</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Desativado</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Original</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Smartphone</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Tablet</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Moderno 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Moderno 2</string>
|
||||
@@ -1147,7 +1147,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Zoom tátil está desativado</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Qualidade automática</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Automático</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Lembrar mudanças na qualidade do vídeo</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Mudança na qualidade se aplicam a todos os vídeos</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Mudança na qualidade só se aplicam ao vídeo atual</string>
|
||||
|
||||
@@ -1009,8 +1009,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Minijogador</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Alterar o estilo do player minimizado no aplicativo</string>
|
||||
<string name="revanced_miniplayer_type_title">Tipo de minijogador</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Desativado</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Original</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Smartphone</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Mínimo</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Tábua</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Moderno 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Moderno 2</string>
|
||||
@@ -1145,7 +1146,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Hábitos estão ativados</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Qualidade automática</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Automático</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Lembrar mudanças na qualidade do vídeo</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Alterações de qualidade se aplicam a todos os vídeos</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">As alterações de qualidade só se aplicam ao vídeo atual</string>
|
||||
|
||||
@@ -1002,8 +1002,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Minijucător</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Schimbă stilul aplicaţiei minimizat jucătorul</string>
|
||||
<string name="revanced_miniplayer_type_title">Tip minijucător</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Dezactivat</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Originală</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Telefon</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Minimă</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Tabletă</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Modern 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Modern 2</string>
|
||||
@@ -1138,7 +1139,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Haptic-urile sunt activate</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Calitate automată</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Automat</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Memorează modificările calității video</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Modificările de calitate se aplică tuturor videoclipurilor</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Modificările de calitate se aplică numai video-ului curent</string>
|
||||
|
||||
@@ -1011,8 +1011,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Мини-плеер</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Стиль свернутого мини-плеера </string>
|
||||
<string name="revanced_miniplayer_type_title">Тип мини-плеера</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Отключено</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Оригинал</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Телефон</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Минимальный</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Планшет</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Современный 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Современный 2</string>
|
||||
@@ -1147,7 +1148,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Виброотклик при масштабировании включен</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Автоматическое качество</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Автоматически</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Запоминание изменений качества</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Изменения качества воспроизведения применяются ко всем видео</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Изменения качества воспроизведения применяются только к текущему видео</string>
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -918,8 +918,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Miniprehrávač</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Zmeňte štýl minimalizovaného prehrávača v aplikácii</string>
|
||||
<string name="revanced_miniplayer_type_title">Typ miniprehrávača</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Vypnuté</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Originál</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Telefón</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Moderné 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Moderné 2</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">Moderné 3</string>
|
||||
@@ -1029,7 +1029,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Haptika je povolená</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Automatická kvalita</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Pamätajte na zmeny kvality videa</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Zmeny kvality sa vzťahujú na všetky videá</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Zmeny kvality sa vzťahujú iba na aktuálne video</string>
|
||||
|
||||
@@ -189,6 +189,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
</patch>
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_type_entry_0">Onemogočeno</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
@@ -223,6 +224,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -176,6 +176,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
</patch>
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_type_entry_0">E ç\'aktivizuar</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
@@ -209,6 +210,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -1011,8 +1011,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Mini-plejer</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Promenite stil minimiziranog plejera u aplikaciji</string>
|
||||
<string name="revanced_miniplayer_type_title">Tip mini-plejera</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Onemogućeno</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Originalni</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Telefon</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Minimalan</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Tablet</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Moderan 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Moderan 2</string>
|
||||
@@ -1147,7 +1148,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Vibracija pri uveličavanju je omogućena</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Automatski kvalitet</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Automatski</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Zapamti promene kvaliteta videa</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Promene kvaliteta se primenjuju na sve videe</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Promene kvaliteta se primenjuju samo na trenutni video</string>
|
||||
|
||||
@@ -1011,8 +1011,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Мини-плејер</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Промените стил минимизираног плејера у апликацији</string>
|
||||
<string name="revanced_miniplayer_type_title">Тип мини-плејера</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Онемогућено</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Оригинални</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Телефон</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Минималан</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Таблет</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Модеран 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Модеран 2</string>
|
||||
@@ -1147,7 +1148,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Вибрација при увеличавању је омогућена</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Аутоматски квалитет</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Аутоматски</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Запамти промене квалитета видеа</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Промене квалитета се примењују на све видее</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Промене квалитета се примењују само на тренутни видео</string>
|
||||
|
||||
@@ -1010,8 +1010,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_miniplayer_screen_title">Minispelare</string>
|
||||
<string name="revanced_miniplayer_screen_summary">Ändra stilen på appen minimerad spelare</string>
|
||||
<string name="revanced_miniplayer_type_title">Miniplayer typ</string>
|
||||
<string name="revanced_miniplayer_type_entry_0">Inaktiverad</string>
|
||||
<string name="revanced_miniplayer_type_entry_1">Ursprunglig</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Telefon</string>
|
||||
<string name="revanced_miniplayer_type_entry_2">Minimal</string>
|
||||
<string name="revanced_miniplayer_type_entry_3">Surfplatta</string>
|
||||
<string name="revanced_miniplayer_type_entry_4">Modern 1</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Modern 2</string>
|
||||
@@ -1146,7 +1147,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<string name="revanced_disable_zoom_haptics_summary_off">Haptikerna är aktiverade</string>
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<string name="revanced_video_quality_default_entry_1">Automatisk kvalitet</string>
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
<string name="revanced_video_quality_default_entry_1">Automatiskt</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_title">Kom ihåg förändringar i videokvaliteten</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_on">Kvalitetsändringar gäller för alla videor</string>
|
||||
<string name="revanced_remember_video_quality_last_selected_summary_off">Kvalitetsförändringar gäller endast för den aktuella videon</string>
|
||||
|
||||
@@ -208,6 +208,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -189,6 +189,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
</patch>
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_type_entry_0">முடக்கப்பட்டது</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
@@ -222,6 +223,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
@@ -176,6 +176,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="layout.tablet.enableTabletLayoutPatch">
|
||||
</patch>
|
||||
<patch id="layout.miniplayer.miniplayerPatch">
|
||||
<string name="revanced_miniplayer_type_entry_0">రద్దు చేయబడింది</string>
|
||||
</patch>
|
||||
<patch id="layout.theme.themePatch">
|
||||
</patch>
|
||||
@@ -209,6 +210,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
</patch>
|
||||
<patch id="video.quality.rememberVideoQualityPatch">
|
||||
<!-- Translations should use the same text as revanced_custom_playback_speeds_auto -->
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
</patch>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user