mirror of
https://github.com/revanced/revanced-patches.git
synced 2025-12-07 18:03:55 +01:00
Compare commits
27 Commits
v5.23.0-de
...
v5.24.0-de
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c4fd1f0146 | ||
|
|
4cd0ae9b92 | ||
|
|
9548d581c1 | ||
|
|
a2fe3af6be | ||
|
|
6ef6504d41 | ||
|
|
e58290839f | ||
|
|
e18260bd65 | ||
|
|
b2fcd5a846 | ||
|
|
e68cd70f66 | ||
|
|
14a8f4fb96 | ||
|
|
2593c004f4 | ||
|
|
db68c41d5e | ||
|
|
a4f9cb3cef | ||
|
|
9aec1999bb | ||
|
|
26ecbe646e | ||
|
|
46ba0d8a2e | ||
|
|
f454183646 | ||
|
|
d2b440d800 | ||
|
|
494c5f04a4 | ||
|
|
48d5fdf7e1 | ||
|
|
887c9f0d75 | ||
|
|
7de4c9d41d | ||
|
|
7d3b8d9c42 | ||
|
|
25e1a965d6 | ||
|
|
b29c01cee1 | ||
|
|
639850471b | ||
|
|
796c118fe1 |
81
CHANGELOG.md
81
CHANGELOG.md
@@ -1,3 +1,84 @@
|
|||||||
|
# [5.24.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.24.0-dev.6...v5.24.0-dev.7) (2025-05-17)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **YouTube - Hide layout components:** Add `Hide ticket shelf` ([#4969](https://github.com/ReVanced/revanced-patches/issues/4969)) ([6436af7](https://github.com/ReVanced/revanced-patches/commit/6436af7e77c77d2034dfceba8bc51132ad7632be))
|
||||||
|
|
||||||
|
# [5.24.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.24.0-dev.5...v5.24.0-dev.6) (2025-05-17)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **YouTube - Hide description components:** Add `Hide Ask` ([#4972](https://github.com/ReVanced/revanced-patches/issues/4972)) ([ebc94a5](https://github.com/ReVanced/revanced-patches/commit/ebc94a5da6214b67399c9c01515689bd4b20547c))
|
||||||
|
|
||||||
|
# [5.24.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.24.0-dev.4...v5.24.0-dev.5) (2025-05-17)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **Spotify - Fix third party launchers widgets:** Add missing compatibility annotation ([0493f80](https://github.com/ReVanced/revanced-patches/commit/0493f8035b26b90c5f8e42be2e2a5ce73d8685a5))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **YouTube - Settings:** Add ability to search in settings ([#4881](https://github.com/ReVanced/revanced-patches/issues/4881)) ([aca8b20](https://github.com/ReVanced/revanced-patches/commit/aca8b207c15f254bcc9ad94bc7dfb895f21d4058))
|
||||||
|
|
||||||
|
# [5.24.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.24.0-dev.3...v5.24.0-dev.4) (2025-05-16)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **Spotify:** Add `Fix third party launchers widgets` patch ([#4893](https://github.com/ReVanced/revanced-patches/issues/4893)) ([23bfdc9](https://github.com/ReVanced/revanced-patches/commit/23bfdc98fbbcc8ecf0ffbf8704f58dd2272e4af2))
|
||||||
|
|
||||||
|
# [5.24.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.24.0-dev.2...v5.24.0-dev.3) (2025-05-14)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **YouTube - Hide layout components:** Fix `Hide video recommendation labels` ([#4956](https://github.com/ReVanced/revanced-patches/issues/4956)) ([ae05ac3](https://github.com/ReVanced/revanced-patches/commit/ae05ac38151ebd3197953af97ca0dd847a04cc2d))
|
||||||
|
|
||||||
|
# [5.24.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.24.0-dev.1...v5.24.0-dev.2) (2025-05-14)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **GmsCore support:** Open vendor specific DontKillMyApp if available ([#4952](https://github.com/ReVanced/revanced-patches/issues/4952)) ([b89927a](https://github.com/ReVanced/revanced-patches/commit/b89927a10e3b909a3c37fbb75c16a7abbce44560))
|
||||||
|
* **YouTube - Hide player components:** Hide related video overlay in fullscreen ([#4938](https://github.com/ReVanced/revanced-patches/issues/4938)) ([ac9be97](https://github.com/ReVanced/revanced-patches/commit/ac9be9760c9965e54df196b227a310d64ead4bf5))
|
||||||
|
|
||||||
|
# [5.24.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.23.0...v5.24.0-dev.1) (2025-05-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **NU.nl:** Support version `11.3.0` ([#4925](https://github.com/ReVanced/revanced-patches/issues/4925)) ([bedde60](https://github.com/ReVanced/revanced-patches/commit/bedde60fc1a52b0fd491174b3b5b887435eb621a))
|
||||||
|
|
||||||
|
# [5.23.0](https://github.com/ReVanced/revanced-patches/compare/v5.22.0...v5.23.0) (2025-05-10)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Correct incorrect fingerprint ([c3bab89](https://github.com/ReVanced/revanced-patches/commit/c3bab89fc4189e38c10eee0caa36289de7e29dfa))
|
||||||
|
* Fix incorrect fingerprints ([#4917](https://github.com/ReVanced/revanced-patches/issues/4917)) ([49ca329](https://github.com/ReVanced/revanced-patches/commit/49ca3290a726cdba7bc9b62ffcd8d46e6f04778e))
|
||||||
|
* **Spotify - Unlock Spotify Premium:** Remove pop up premium ads ([#4842](https://github.com/ReVanced/revanced-patches/issues/4842)) ([00aa200](https://github.com/ReVanced/revanced-patches/commit/00aa2000ba2eef15a0dd827c2bd84c2e85c412e0))
|
||||||
|
* **YouTube:** Improve litho filtering performance ([#4904](https://github.com/ReVanced/revanced-patches/issues/4904)) ([7b43986](https://github.com/ReVanced/revanced-patches/commit/7b43986871a68e5cb43331d2fb2fdb9ef67438ad))
|
||||||
|
* **YouTube:** Simplify litho filtering patch ([#4910](https://github.com/ReVanced/revanced-patches/issues/4910)) ([bd53955](https://github.com/ReVanced/revanced-patches/commit/bd53955df738bb7b819eb91a3e776e9d2ca5c74a))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **Lightroom:** Constrain patches to last working version ([efef03b](https://github.com/ReVanced/revanced-patches/commit/efef03b80da21552d0d8be6913faba64e4fb5ed1))
|
||||||
|
* **Pandora:** Add `Disable audio ads` and `Unlimited skips` patch ([#4841](https://github.com/ReVanced/revanced-patches/issues/4841)) ([0cf7a4c](https://github.com/ReVanced/revanced-patches/commit/0cf7a4c6be615ed0a52a6bacf87592f5f43ff575))
|
||||||
|
* **Prime Video:** Add `Skip ads` patch ([#4824](https://github.com/ReVanced/revanced-patches/issues/4824)) ([bb672c4](https://github.com/ReVanced/revanced-patches/commit/bb672c4674ddc201b8b2648c3906cfc31ef43f10))
|
||||||
|
* **Spotify:** Add `Sanitize sharing links` patch ([#4829](https://github.com/ReVanced/revanced-patches/issues/4829)) ([2e3511d](https://github.com/ReVanced/revanced-patches/commit/2e3511d03c8198bbdb9336888df038a33fb3ab8c))
|
||||||
|
|
||||||
|
# [5.23.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.23.0-dev.6...v5.23.0-dev.7) (2025-05-06)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Fix incorrect fingerprints ([#4917](https://github.com/ReVanced/revanced-patches/issues/4917)) ([49ca329](https://github.com/ReVanced/revanced-patches/commit/49ca3290a726cdba7bc9b62ffcd8d46e6f04778e))
|
||||||
|
|
||||||
# [5.23.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.23.0-dev.5...v5.23.0-dev.6) (2025-05-06)
|
# [5.23.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.23.0-dev.5...v5.23.0-dev.6) (2025-05-06)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ public class HideAdsPatch {
|
|||||||
|
|
||||||
// Filter HeaderBlock with known ads until next HeaderBlock.
|
// Filter HeaderBlock with known ads until next HeaderBlock.
|
||||||
if (currentBlock instanceof HeaderBlock headerBlock) {
|
if (currentBlock instanceof HeaderBlock headerBlock) {
|
||||||
StyledText headerText = headerBlock.component20();
|
StyledText headerText = headerBlock.getTitle();
|
||||||
if (headerText != null) {
|
if (headerText != null) {
|
||||||
skipFullHeader = false;
|
skipFullHeader = false;
|
||||||
for (String blockedHeaderBlock : blockedHeaderBlocks) {
|
for (String blockedHeaderBlock : blockedHeaderBlocks) {
|
||||||
|
|||||||
@@ -3,8 +3,7 @@ package nl.nu.performance.api.client.objects;
|
|||||||
import nl.nu.performance.api.client.interfaces.Block;
|
import nl.nu.performance.api.client.interfaces.Block;
|
||||||
|
|
||||||
public class HeaderBlock extends Block {
|
public class HeaderBlock extends Block {
|
||||||
// returns title
|
public final StyledText getTitle() {
|
||||||
public final StyledText component20() {
|
|
||||||
throw new UnsupportedOperationException("Stub");
|
throw new UnsupportedOperationException("Stub");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package app.revanced.extension.shared;
|
package app.revanced.extension.shared;
|
||||||
|
|
||||||
import static app.revanced.extension.shared.StringRef.str;
|
import static app.revanced.extension.shared.StringRef.str;
|
||||||
|
import static app.revanced.extension.shared.requests.Route.Method.GET;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
@@ -15,10 +16,16 @@ import android.os.Build;
|
|||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.RequiresApi;
|
import androidx.annotation.RequiresApi;
|
||||||
|
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import app.revanced.extension.shared.requests.Requester;
|
||||||
|
import app.revanced.extension.shared.requests.Route;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public class GmsCoreSupport {
|
public class GmsCoreSupport {
|
||||||
@@ -29,10 +36,24 @@ public class GmsCoreSupport {
|
|||||||
= getGmsCoreVendorGroupId() + ".android.gms";
|
= getGmsCoreVendorGroupId() + ".android.gms";
|
||||||
private static final Uri GMS_CORE_PROVIDER
|
private static final Uri GMS_CORE_PROVIDER
|
||||||
= Uri.parse("content://" + getGmsCoreVendorGroupId() + ".android.gsf.gservices/prefix");
|
= Uri.parse("content://" + getGmsCoreVendorGroupId() + ".android.gsf.gservices/prefix");
|
||||||
private static final String DONT_KILL_MY_APP_LINK
|
private static final String DONT_KILL_MY_APP_URL
|
||||||
= "https://dontkillmyapp.com";
|
= "https://dontkillmyapp.com/";
|
||||||
|
private static final Route DONT_KILL_MY_APP_MANUFACTURER_API
|
||||||
|
= new Route(GET, "/api/v2/{manufacturer}.json");
|
||||||
|
private static final String DONT_KILL_MY_APP_NAME_PARAMETER
|
||||||
|
= "?app=MicroG";
|
||||||
|
private static final String BUILD_MANUFACTURER
|
||||||
|
= Build.MANUFACTURER.toLowerCase(Locale.ROOT).replace(" ", "-");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If a manufacturer specific page exists on DontKillMyApp.
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
private static volatile Boolean DONT_KILL_MY_APP_MANUFACTURER_SUPPORTED;
|
||||||
|
|
||||||
private static void open(String queryOrLink) {
|
private static void open(String queryOrLink) {
|
||||||
|
Logger.printInfo(() -> "Opening link: " + queryOrLink);
|
||||||
|
|
||||||
Intent intent;
|
Intent intent;
|
||||||
try {
|
try {
|
||||||
// Check if queryOrLink is a valid URL.
|
// Check if queryOrLink is a valid URL.
|
||||||
@@ -86,7 +107,7 @@ public class GmsCoreSupport {
|
|||||||
|
|
||||||
// Do not exit. If the app exits before launch completes (and without
|
// Do not exit. If the app exits before launch completes (and without
|
||||||
// opening another activity), then on some devices such as Pixel phone Android 10
|
// opening another activity), then on some devices such as Pixel phone Android 10
|
||||||
// no toast will be shown and the app will continually be relaunched
|
// no toast will be shown and the app will continually relaunch
|
||||||
// with the appearance of a hung app.
|
// with the appearance of a hung app.
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,11 +143,12 @@ public class GmsCoreSupport {
|
|||||||
try (var client = context.getContentResolver().acquireContentProviderClient(GMS_CORE_PROVIDER)) {
|
try (var client = context.getContentResolver().acquireContentProviderClient(GMS_CORE_PROVIDER)) {
|
||||||
if (client == null) {
|
if (client == null) {
|
||||||
Logger.printInfo(() -> "GmsCore is not running in the background");
|
Logger.printInfo(() -> "GmsCore is not running in the background");
|
||||||
|
checkIfDontKillMyAppSupportsManufacturer();
|
||||||
|
|
||||||
showBatteryOptimizationDialog(context,
|
showBatteryOptimizationDialog(context,
|
||||||
"gms_core_dialog_not_whitelisted_not_allowed_in_background_message",
|
"gms_core_dialog_not_whitelisted_not_allowed_in_background_message",
|
||||||
"gms_core_dialog_open_website_text",
|
"gms_core_dialog_open_website_text",
|
||||||
(dialog, id) -> open(DONT_KILL_MY_APP_LINK));
|
(dialog, id) -> openDontKillMyApp());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
@@ -141,6 +163,48 @@ public class GmsCoreSupport {
|
|||||||
activity.startActivityForResult(intent, 0);
|
activity.startActivityForResult(intent, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void checkIfDontKillMyAppSupportsManufacturer() {
|
||||||
|
Utils.runOnBackgroundThread(() -> {
|
||||||
|
try {
|
||||||
|
final long start = System.currentTimeMillis();
|
||||||
|
HttpURLConnection connection = Requester.getConnectionFromRoute(
|
||||||
|
DONT_KILL_MY_APP_URL, DONT_KILL_MY_APP_MANUFACTURER_API, BUILD_MANUFACTURER);
|
||||||
|
connection.setConnectTimeout(5000);
|
||||||
|
connection.setReadTimeout(5000);
|
||||||
|
|
||||||
|
final boolean supported = connection.getResponseCode() == 200;
|
||||||
|
Logger.printInfo(() -> "Manufacturer is " + (supported ? "" : "NOT ")
|
||||||
|
+ "listed on DontKillMyApp: " + BUILD_MANUFACTURER
|
||||||
|
+ " fetch took: " + (System.currentTimeMillis() - start) + "ms");
|
||||||
|
DONT_KILL_MY_APP_MANUFACTURER_SUPPORTED = supported;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Logger.printInfo(() -> "Could not check if manufacturer is listed on DontKillMyApp: "
|
||||||
|
+ BUILD_MANUFACTURER, ex);
|
||||||
|
DONT_KILL_MY_APP_MANUFACTURER_SUPPORTED = null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void openDontKillMyApp() {
|
||||||
|
final Boolean manufacturerSupported = DONT_KILL_MY_APP_MANUFACTURER_SUPPORTED;
|
||||||
|
|
||||||
|
String manufacturerPageToOpen;
|
||||||
|
if (manufacturerSupported == null) {
|
||||||
|
// Fetch has not completed yet. Only happens on extremely slow internet connections
|
||||||
|
// and the user spends less than 1 second reading what's on screen.
|
||||||
|
// Instead of waiting for the fetch (which may timeout),
|
||||||
|
// open the website without a vendor.
|
||||||
|
manufacturerPageToOpen = "";
|
||||||
|
} else if (manufacturerSupported) {
|
||||||
|
manufacturerPageToOpen = BUILD_MANUFACTURER;
|
||||||
|
} else {
|
||||||
|
// No manufacturer specific page exists. Open the general page.
|
||||||
|
manufacturerPageToOpen = "general";
|
||||||
|
}
|
||||||
|
|
||||||
|
open(DONT_KILL_MY_APP_URL + manufacturerPageToOpen + DONT_KILL_MY_APP_NAME_PARAMETER);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return If GmsCore is not whitelisted from battery optimizations.
|
* @return If GmsCore is not whitelisted from battery optimizations.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -371,7 +371,7 @@ public class Utils {
|
|||||||
if (language != AppLanguage.DEFAULT) {
|
if (language != AppLanguage.DEFAULT) {
|
||||||
// Create a new context with the desired language.
|
// Create a new context with the desired language.
|
||||||
Logger.printDebug(() -> "Using app language: " + language);
|
Logger.printDebug(() -> "Using app language: " + language);
|
||||||
Configuration config = appContext.getResources().getConfiguration();
|
Configuration config = new Configuration(appContext.getResources().getConfiguration());
|
||||||
config.setLocale(language.getLocale());
|
config.setLocale(language.getLocale());
|
||||||
context = appContext.createConfigurationContext(config);
|
context = appContext.createConfigurationContext(config);
|
||||||
}
|
}
|
||||||
@@ -391,16 +391,47 @@ public class Utils {
|
|||||||
private static Boolean isRightToLeftTextLayout;
|
private static Boolean isRightToLeftTextLayout;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If the device language uses right to left text layout (hebrew, arabic, etc)
|
* @return If the device language uses right to left text layout (Hebrew, Arabic, etc).
|
||||||
|
* If this should match any ReVanced language override then instead use
|
||||||
|
* {@link #isRightToLeftLocale(Locale)} with {@link BaseSettings#REVANCED_LANGUAGE}.
|
||||||
|
* This is the default locale of the device, which may differ if
|
||||||
|
* {@link BaseSettings#REVANCED_LANGUAGE} is set to a different language.
|
||||||
*/
|
*/
|
||||||
public static boolean isRightToLeftTextLayout() {
|
public static boolean isRightToLeftLocale() {
|
||||||
if (isRightToLeftTextLayout == null) {
|
if (isRightToLeftTextLayout == null) {
|
||||||
String displayLanguage = Locale.getDefault().getDisplayLanguage();
|
isRightToLeftTextLayout = isRightToLeftLocale(Locale.getDefault());
|
||||||
isRightToLeftTextLayout = new Bidi(displayLanguage, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT).isRightToLeft();
|
|
||||||
}
|
}
|
||||||
return isRightToLeftTextLayout;
|
return isRightToLeftTextLayout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return If the locale uses right to left text layout (Hebrew, Arabic, etc).
|
||||||
|
*/
|
||||||
|
public static boolean isRightToLeftLocale(Locale locale) {
|
||||||
|
String displayLanguage = locale.getDisplayLanguage();
|
||||||
|
return new Bidi(displayLanguage, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT).isRightToLeft();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return A UTF8 string containing a left-to-right or right-to-left
|
||||||
|
* character of the device locale. If this should match any ReVanced language
|
||||||
|
* override then instead use {@link #getTextDirectionString(Locale)} with
|
||||||
|
* {@link BaseSettings#REVANCED_LANGUAGE}.
|
||||||
|
*/
|
||||||
|
public static String getTextDirectionString() {
|
||||||
|
return getTextDirectionString(isRightToLeftLocale());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getTextDirectionString(Locale locale) {
|
||||||
|
return getTextDirectionString(isRightToLeftLocale(locale));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String getTextDirectionString(boolean isRightToLeft) {
|
||||||
|
return isRightToLeft
|
||||||
|
? "\u200F" // u200F = right to left character.
|
||||||
|
: "\u200E"; // u200E = left to right character.
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return if the text contains at least 1 number character,
|
* @return if the text contains at least 1 number character,
|
||||||
* including any unicode numbers such as Arabic.
|
* including any unicode numbers such as Arabic.
|
||||||
@@ -692,9 +723,10 @@ public class Utils {
|
|||||||
/**
|
/**
|
||||||
* Strips all punctuation and converts to lower case. A null parameter returns an empty string.
|
* Strips all punctuation and converts to lower case. A null parameter returns an empty string.
|
||||||
*/
|
*/
|
||||||
public static String removePunctuationConvertToLowercase(@Nullable CharSequence original) {
|
public static String removePunctuationToLowercase(@Nullable CharSequence original) {
|
||||||
if (original == null) return "";
|
if (original == null) return "";
|
||||||
return punctuationPattern.matcher(original).replaceAll("").toLowerCase();
|
return punctuationPattern.matcher(original).replaceAll("")
|
||||||
|
.toLowerCase(BaseSettings.REVANCED_LANGUAGE.get().getLocale());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -726,7 +758,7 @@ public class Utils {
|
|||||||
final String sortValue;
|
final String sortValue;
|
||||||
switch (preferenceSort) {
|
switch (preferenceSort) {
|
||||||
case BY_TITLE:
|
case BY_TITLE:
|
||||||
sortValue = removePunctuationConvertToLowercase(preference.getTitle());
|
sortValue = removePunctuationToLowercase(preference.getTitle());
|
||||||
break;
|
break;
|
||||||
case BY_KEY:
|
case BY_KEY:
|
||||||
sortValue = preference.getKey();
|
sortValue = preference.getKey();
|
||||||
@@ -810,4 +842,12 @@ public class Utils {
|
|||||||
}
|
}
|
||||||
return getResourceColor(colorString);
|
return getResourceColor(colorString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int clamp(int value, int lower, int upper) {
|
||||||
|
return Math.max(lower, Math.min(value, upper));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static float clamp(float value, float lower, float upper) {
|
||||||
|
return Math.max(lower, Math.min(value, upper));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -89,9 +89,11 @@ public enum AppLanguage {
|
|||||||
ZU;
|
ZU;
|
||||||
|
|
||||||
private final String language;
|
private final String language;
|
||||||
|
private final Locale locale;
|
||||||
|
|
||||||
AppLanguage() {
|
AppLanguage() {
|
||||||
language = name().toLowerCase(Locale.US);
|
language = name().toLowerCase(Locale.US);
|
||||||
|
locale = Locale.forLanguageTag(language);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -112,6 +114,6 @@ public enum AppLanguage {
|
|||||||
return Locale.getDefault();
|
return Locale.getDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
return Locale.forLanguageTag(language);
|
return locale;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,10 @@ public class NoTitlePreferenceCategory extends PreferenceCategory {
|
|||||||
super(context, attrs, defStyleAttr);
|
super(context, attrs, defStyleAttr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public NoTitlePreferenceCategory(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||||
|
super(context, attrs, defStyleAttr, defStyleRes);
|
||||||
|
}
|
||||||
|
|
||||||
public NoTitlePreferenceCategory(Context context) {
|
public NoTitlePreferenceCategory(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,107 @@
|
|||||||
|
package app.revanced.extension.shared.settings.preference;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.preference.ListPreference;
|
||||||
|
import android.util.AttributeSet;
|
||||||
|
import android.util.Pair;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.SortedMap;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
|
||||||
|
import app.revanced.extension.shared.Utils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PreferenceList that sorts itself.
|
||||||
|
* By default the first entry is preserved in its original position,
|
||||||
|
* and all other entries are sorted alphabetically.
|
||||||
|
*
|
||||||
|
* Ideally the 'keep first entries to preserve' is an xml parameter,
|
||||||
|
* but currently that's not so simple since Extensions code cannot use
|
||||||
|
* generated code from the Patches repo (which is required for custom xml parameters).
|
||||||
|
*
|
||||||
|
* If any class wants to use a different getFirstEntriesToPreserve value,
|
||||||
|
* it needs to subclass this preference and override {@link #getFirstEntriesToPreserve}.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({"unused", "deprecation"})
|
||||||
|
public class SortedListPreference extends ListPreference {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sorts the current list entries.
|
||||||
|
*
|
||||||
|
* @param firstEntriesToPreserve The number of entries to preserve in their original position.
|
||||||
|
*/
|
||||||
|
public void sortEntryAndValues(int firstEntriesToPreserve) {
|
||||||
|
CharSequence[] entries = getEntries();
|
||||||
|
CharSequence[] entryValues = getEntryValues();
|
||||||
|
if (entries == null || entryValues == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final int entrySize = entries.length;
|
||||||
|
if (entrySize != entryValues.length) {
|
||||||
|
// Xml array declaration has a missing/extra entry.
|
||||||
|
throw new IllegalStateException();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Pair<CharSequence, CharSequence>> firstEntries = new ArrayList<>(firstEntriesToPreserve);
|
||||||
|
SortedMap<String, Pair<CharSequence, CharSequence>> lastEntries = new TreeMap<>();
|
||||||
|
|
||||||
|
for (int i = 0; i < entrySize; i++) {
|
||||||
|
Pair<CharSequence, CharSequence> pair = new Pair<>(entries[i], entryValues[i]);
|
||||||
|
if (i < firstEntriesToPreserve) {
|
||||||
|
firstEntries.add(pair);
|
||||||
|
} else {
|
||||||
|
lastEntries.put(Utils.removePunctuationToLowercase(pair.first), pair);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CharSequence[] sortedEntries = new CharSequence[entrySize];
|
||||||
|
CharSequence[] sortedEntryValues = new CharSequence[entrySize];
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
for (Pair<CharSequence, CharSequence> pair : firstEntries) {
|
||||||
|
sortedEntries[i] = pair.first;
|
||||||
|
sortedEntryValues[i] = pair.second;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Pair<CharSequence, CharSequence> pair : lastEntries.values()) {
|
||||||
|
sortedEntries[i] = pair.first;
|
||||||
|
sortedEntryValues[i] = pair.second;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
super.setEntries(sortedEntries);
|
||||||
|
super.setEntryValues(sortedEntryValues);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected int getFirstEntriesToPreserve() {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SortedListPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||||
|
super(context, attrs, defStyleAttr, defStyleRes);
|
||||||
|
|
||||||
|
sortEntryAndValues(getFirstEntriesToPreserve());
|
||||||
|
}
|
||||||
|
|
||||||
|
public SortedListPreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||||
|
super(context, attrs, defStyleAttr);
|
||||||
|
|
||||||
|
sortEntryAndValues(getFirstEntriesToPreserve());
|
||||||
|
}
|
||||||
|
|
||||||
|
public SortedListPreference(Context context, AttributeSet attrs) {
|
||||||
|
super(context, attrs);
|
||||||
|
|
||||||
|
sortEntryAndValues(getFirstEntriesToPreserve());
|
||||||
|
}
|
||||||
|
|
||||||
|
public SortedListPreference(Context context) {
|
||||||
|
super(context);
|
||||||
|
|
||||||
|
sortEntryAndValues(getFirstEntriesToPreserve());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,10 +1,18 @@
|
|||||||
package app.revanced.extension.youtube;
|
package app.revanced.extension.youtube;
|
||||||
|
|
||||||
|
import static app.revanced.extension.shared.Utils.clamp;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.graphics.Canvas;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
|
import android.graphics.Paint;
|
||||||
|
import android.graphics.RectF;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
import android.text.style.ReplacementSpan;
|
||||||
|
import android.text.TextPaint;
|
||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import app.revanced.extension.shared.Logger;
|
import app.revanced.extension.shared.Logger;
|
||||||
@@ -121,4 +129,43 @@ public class ThemeHelper {
|
|||||||
window.setNavigationBarContrastEnforced(true);
|
window.setNavigationBarContrastEnforced(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adjusts the brightness of a color by lightening or darkening it based on the given factor.
|
||||||
|
* <p>
|
||||||
|
* If the factor is greater than 1, the color is lightened by interpolating toward white (#FFFFFF).
|
||||||
|
* If the factor is less than or equal to 1, the color is darkened by scaling its RGB components toward black (#000000).
|
||||||
|
* The alpha channel remains unchanged.
|
||||||
|
*
|
||||||
|
* @param color The input color to adjust, in ARGB format.
|
||||||
|
* @param factor The adjustment factor. Use values > 1.0f to lighten (e.g., 1.11f for slight lightening)
|
||||||
|
* or values <= 1.0f to darken (e.g., 0.95f for slight darkening).
|
||||||
|
* @return The adjusted color in ARGB format.
|
||||||
|
*/
|
||||||
|
public static int adjustColorBrightness(int color, float factor) {
|
||||||
|
final int alpha = Color.alpha(color);
|
||||||
|
int red = Color.red(color);
|
||||||
|
int green = Color.green(color);
|
||||||
|
int blue = Color.blue(color);
|
||||||
|
|
||||||
|
if (factor > 1.0f) {
|
||||||
|
// Lighten: Interpolate toward white (255)
|
||||||
|
final float t = 1.0f - (1.0f / factor); // Interpolation parameter
|
||||||
|
red = Math.round(red + (255 - red) * t);
|
||||||
|
green = Math.round(green + (255 - green) * t);
|
||||||
|
blue = Math.round(blue + (255 - blue) * t);
|
||||||
|
} else {
|
||||||
|
// Darken or no change: Scale toward black
|
||||||
|
red = (int) (red * factor);
|
||||||
|
green = (int) (green * factor);
|
||||||
|
blue = (int) (blue * factor);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure values are within [0, 255]
|
||||||
|
red = clamp(red, 0, 255);
|
||||||
|
green = clamp(green, 0, 255);
|
||||||
|
blue = clamp(blue, 0, 255);
|
||||||
|
|
||||||
|
return Color.argb(alpha, red, green, blue);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package app.revanced.extension.youtube.patches;
|
||||||
|
|
||||||
|
import app.revanced.extension.youtube.settings.Settings;
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public final class HideRelatedVideoOverlayPatch {
|
||||||
|
/**
|
||||||
|
* Injection point.
|
||||||
|
*/
|
||||||
|
public static boolean hideRelatedVideoOverlay() {
|
||||||
|
return Settings.HIDE_RELATED_VIDEO_OVERLAY.get();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -18,7 +18,6 @@ import app.revanced.extension.shared.Logger;
|
|||||||
import app.revanced.extension.shared.Utils;
|
import app.revanced.extension.shared.Utils;
|
||||||
import app.revanced.extension.youtube.patches.components.ReturnYouTubeDislikeFilterPatch;
|
import app.revanced.extension.youtube.patches.components.ReturnYouTubeDislikeFilterPatch;
|
||||||
import app.revanced.extension.youtube.returnyoutubedislike.ReturnYouTubeDislike;
|
import app.revanced.extension.youtube.returnyoutubedislike.ReturnYouTubeDislike;
|
||||||
import app.revanced.extension.youtube.returnyoutubedislike.requests.ReturnYouTubeDislikeApi;
|
|
||||||
import app.revanced.extension.youtube.settings.Settings;
|
import app.revanced.extension.youtube.settings.Settings;
|
||||||
import app.revanced.extension.youtube.shared.PlayerType;
|
import app.revanced.extension.youtube.shared.PlayerType;
|
||||||
|
|
||||||
@@ -69,13 +68,6 @@ public class ReturnYouTubeDislikePatch {
|
|||||||
@Nullable
|
@Nullable
|
||||||
private static volatile String lastPrefetchedVideoId;
|
private static volatile String lastPrefetchedVideoId;
|
||||||
|
|
||||||
public static void onRYDStatusChange(boolean rydEnabled) {
|
|
||||||
ReturnYouTubeDislikeApi.resetRateLimits();
|
|
||||||
// Must remove all values to protect against using stale data
|
|
||||||
// if the user enables RYD while a video is on screen.
|
|
||||||
clearData();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void clearData() {
|
private static void clearData() {
|
||||||
currentVideoData = null;
|
currentVideoData = null;
|
||||||
lastLithoShortsVideoData = null;
|
lastLithoShortsVideoData = null;
|
||||||
@@ -274,7 +266,7 @@ public class ReturnYouTubeDislikePatch {
|
|||||||
Logger.printDebug(() -> "Adding rolling number TextView changes");
|
Logger.printDebug(() -> "Adding rolling number TextView changes");
|
||||||
view.setCompoundDrawablePadding(ReturnYouTubeDislike.leftSeparatorShapePaddingPixels);
|
view.setCompoundDrawablePadding(ReturnYouTubeDislike.leftSeparatorShapePaddingPixels);
|
||||||
ShapeDrawable separator = ReturnYouTubeDislike.getLeftSeparatorDrawable();
|
ShapeDrawable separator = ReturnYouTubeDislike.getLeftSeparatorDrawable();
|
||||||
if (Utils.isRightToLeftTextLayout()) {
|
if (Utils.isRightToLeftLocale()) {
|
||||||
view.setCompoundDrawables(null, null, separator, null);
|
view.setCompoundDrawables(null, null, separator, null);
|
||||||
} else {
|
} else {
|
||||||
view.setCompoundDrawables(separator, null, null, null);
|
view.setCompoundDrawables(separator, null, null, null);
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ public final class WideSearchbarPatch {
|
|||||||
final int paddingStart = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
|
final int paddingStart = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
|
||||||
8, Resources.getSystem().getDisplayMetrics());
|
8, Resources.getSystem().getDisplayMetrics());
|
||||||
|
|
||||||
if (Utils.isRightToLeftTextLayout()) {
|
if (Utils.isRightToLeftLocale()) {
|
||||||
searchBarView.setPadding(paddingLeft, paddingTop, paddingStart, paddingBottom);
|
searchBarView.setPadding(paddingLeft, paddingTop, paddingStart, paddingBottom);
|
||||||
} else {
|
} else {
|
||||||
searchBarView.setPadding(paddingStart, paddingTop, paddingRight, paddingBottom);
|
searchBarView.setPadding(paddingStart, paddingTop, paddingRight, paddingBottom);
|
||||||
|
|||||||
@@ -177,10 +177,7 @@ public final class AdsFilter extends Filter {
|
|||||||
boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
|
boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
|
||||||
StringFilterGroup matchedGroup, FilterContentType contentType, int contentIndex) {
|
StringFilterGroup matchedGroup, FilterContentType contentType, int contentIndex) {
|
||||||
if (matchedGroup == playerShoppingShelf) {
|
if (matchedGroup == playerShoppingShelf) {
|
||||||
if (contentIndex == 0 && playerShoppingShelfBuffer.check(protobufBufferArray).isFiltered()) {
|
return contentIndex == 0 && playerShoppingShelfBuffer.check(protobufBufferArray).isFiltered();
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for the index because of likelihood of false positives.
|
// Check for the index because of likelihood of false positives.
|
||||||
@@ -198,13 +195,10 @@ public final class AdsFilter extends Filter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (matchedGroup == channelProfile) {
|
if (matchedGroup == channelProfile) {
|
||||||
if (visitStoreButton.check(protobufBufferArray).isFiltered()) {
|
return visitStoreButton.check(protobufBufferArray).isFiltered();
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -99,29 +99,23 @@ final class ButtonsFilter extends Filter {
|
|||||||
boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
|
boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
|
||||||
StringFilterGroup matchedGroup, FilterContentType contentType, int contentIndex) {
|
StringFilterGroup matchedGroup, FilterContentType contentType, int contentIndex) {
|
||||||
if (matchedGroup == likeSubscribeGlow) {
|
if (matchedGroup == likeSubscribeGlow) {
|
||||||
if ((path.startsWith(VIDEO_ACTION_BAR_PATH_PREFIX) || path.startsWith(COMPACT_CHANNEL_BAR_PATH_PREFIX))
|
return (path.startsWith(VIDEO_ACTION_BAR_PATH_PREFIX) || path.startsWith(COMPACT_CHANNEL_BAR_PATH_PREFIX))
|
||||||
&& path.contains(ANIMATED_VECTOR_TYPE_PATH)) {
|
&& path.contains(ANIMATED_VECTOR_TYPE_PATH);
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the current matched group is the action bar group,
|
// If the current matched group is the action bar group,
|
||||||
// in case every filter group is enabled, hide the action bar.
|
// in case every filter group is enabled, hide the action bar.
|
||||||
if (matchedGroup == actionBarGroup) {
|
if (matchedGroup == actionBarGroup) {
|
||||||
if (!isEveryFilterGroupEnabled()) {
|
return isEveryFilterGroupEnabled();
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else if (matchedGroup == bufferFilterPathGroup) {
|
|
||||||
// Make sure the current path is the right one
|
|
||||||
// to avoid false positives.
|
|
||||||
if (!path.startsWith(VIDEO_ACTION_BAR_PATH)) return false;
|
|
||||||
|
|
||||||
// In case the group list has no match, return false.
|
|
||||||
if (!bufferButtonsGroupList.check(protobufBufferArray).isFiltered()) return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
if (matchedGroup == bufferFilterPathGroup) {
|
||||||
|
// Make sure the current path is the right one
|
||||||
|
// to avoid false positives.
|
||||||
|
return path.startsWith(VIDEO_ACTION_BAR_PATH)
|
||||||
|
&& bufferButtonsGroupList.check(protobufBufferArray).isFiltered();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,22 +88,15 @@ final class CommentsFilter extends Filter {
|
|||||||
if (matchedGroup == commentComposer) {
|
if (matchedGroup == commentComposer) {
|
||||||
// To completely hide the emoji buttons (and leave no empty space), the timestamp button is
|
// To completely hide the emoji buttons (and leave no empty space), the timestamp button is
|
||||||
// also hidden because the buffer is exactly the same and there's no way selectively hide.
|
// also hidden because the buffer is exactly the same and there's no way selectively hide.
|
||||||
if (contentIndex == 0
|
return contentIndex == 0
|
||||||
&& path.endsWith(TIMESTAMP_OR_EMOJI_BUTTONS_ENDS_WITH_PATH)
|
&& path.endsWith(TIMESTAMP_OR_EMOJI_BUTTONS_ENDS_WITH_PATH)
|
||||||
&& emojiPickerBufferGroup.check(protobufBufferArray).isFiltered()) {
|
&& emojiPickerBufferGroup.check(protobufBufferArray).isFiltered();
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (matchedGroup == filterChipBar) {
|
if (matchedGroup == filterChipBar) {
|
||||||
if (aiCommentsSummary.check(protobufBufferArray).isFiltered()) {
|
return aiCommentsSummary.check(protobufBufferArray).isFiltered();
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -153,9 +153,11 @@ final class CustomFilter extends Filter {
|
|||||||
if (custom.startsWith && contentIndex != 0) {
|
if (custom.startsWith && contentIndex != 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (custom.bufferSearch != null && !custom.bufferSearch.matches(protobufBufferArray)) {
|
|
||||||
return false;
|
if (custom.bufferSearch == null) {
|
||||||
|
return true; // No buffer filter, only path filtering.
|
||||||
}
|
}
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
|
||||||
|
return custom.bufferSearch.matches(protobufBufferArray);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -28,6 +28,11 @@ final class DescriptionComponentsFilter extends Filter {
|
|||||||
"cell_expandable_metadata.eml"
|
"cell_expandable_metadata.eml"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
final StringFilterGroup askSection = new StringFilterGroup(
|
||||||
|
Settings.HIDE_ASK_SECTION,
|
||||||
|
"youchat_entrypoint.eml"
|
||||||
|
);
|
||||||
|
|
||||||
final StringFilterGroup attributesSection = new StringFilterGroup(
|
final StringFilterGroup attributesSection = new StringFilterGroup(
|
||||||
Settings.HIDE_ATTRIBUTES_SECTION,
|
Settings.HIDE_ATTRIBUTES_SECTION,
|
||||||
"gaming_section",
|
"gaming_section",
|
||||||
@@ -73,6 +78,7 @@ final class DescriptionComponentsFilter extends Filter {
|
|||||||
|
|
||||||
addPathCallbacks(
|
addPathCallbacks(
|
||||||
aiGeneratedVideoSummarySection,
|
aiGeneratedVideoSummarySection,
|
||||||
|
askSection,
|
||||||
attributesSection,
|
attributesSection,
|
||||||
infoCardsSection,
|
infoCardsSection,
|
||||||
howThisWasMadeSection,
|
howThisWasMadeSection,
|
||||||
@@ -88,13 +94,9 @@ final class DescriptionComponentsFilter extends Filter {
|
|||||||
if (exceptions.matches(path)) return false;
|
if (exceptions.matches(path)) return false;
|
||||||
|
|
||||||
if (matchedGroup == macroMarkersCarousel) {
|
if (matchedGroup == macroMarkersCarousel) {
|
||||||
if (contentIndex == 0 && macroMarkersCarouselGroupList.check(protobufBufferArray).isFiltered()) {
|
return contentIndex == 0 && macroMarkersCarouselGroupList.check(protobufBufferArray).isFiltered();
|
||||||
return super.isFiltered(path, identifier, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.isFiltered(path, identifier, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,9 +6,6 @@ import java.util.ArrayList;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import app.revanced.extension.shared.Logger;
|
|
||||||
import app.revanced.extension.shared.settings.BaseSettings;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filters litho based components.
|
* Filters litho based components.
|
||||||
*
|
*
|
||||||
@@ -62,10 +59,7 @@ abstract class Filter {
|
|||||||
* Called after an enabled filter has been matched.
|
* Called after an enabled filter has been matched.
|
||||||
* Default implementation is to always filter the matched component and log the action.
|
* Default implementation is to always filter the matched component and log the action.
|
||||||
* Subclasses can perform additional or different checks if needed.
|
* Subclasses can perform additional or different checks if needed.
|
||||||
* <p>
|
*
|
||||||
* If the content is to be filtered, subclasses should always
|
|
||||||
* call this method (and never return a plain 'true').
|
|
||||||
* That way the logs will always show when a component was filtered and which filter hide it.
|
|
||||||
* <p>
|
* <p>
|
||||||
* Method is called off the main thread.
|
* Method is called off the main thread.
|
||||||
*
|
*
|
||||||
@@ -76,14 +70,6 @@ abstract class Filter {
|
|||||||
*/
|
*/
|
||||||
boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
|
boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
|
||||||
StringFilterGroup matchedGroup, FilterContentType contentType, int contentIndex) {
|
StringFilterGroup matchedGroup, FilterContentType contentType, int contentIndex) {
|
||||||
if (BaseSettings.DEBUG.get()) {
|
|
||||||
String filterSimpleName = getClass().getSimpleName();
|
|
||||||
if (contentType == FilterContentType.IDENTIFIER) {
|
|
||||||
Logger.printDebug(() -> filterSimpleName + " Filtered identifier: " + identifier);
|
|
||||||
} else {
|
|
||||||
Logger.printDebug(() -> filterSimpleName + " Filtered path: " + path);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -576,7 +576,7 @@ final class KeywordContentFilter extends Filter {
|
|||||||
MutableReference<String> matchRef = new MutableReference<>();
|
MutableReference<String> matchRef = new MutableReference<>();
|
||||||
if (bufferSearch.matches(protobufBufferArray, matchRef)) {
|
if (bufferSearch.matches(protobufBufferArray, matchRef)) {
|
||||||
updateStats(true, matchRef.value);
|
updateStats(true, matchRef.value);
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
updateStats(false, null);
|
updateStats(false, null);
|
||||||
|
|||||||
@@ -34,12 +34,11 @@ public final class LayoutComponentsFilter extends Filter {
|
|||||||
private final StringFilterGroup notifyMe;
|
private final StringFilterGroup notifyMe;
|
||||||
private final StringFilterGroup singleItemInformationPanel;
|
private final StringFilterGroup singleItemInformationPanel;
|
||||||
private final StringFilterGroup expandableMetadata;
|
private final StringFilterGroup expandableMetadata;
|
||||||
private final ByteArrayFilterGroup searchResultRecommendations;
|
|
||||||
private final StringFilterGroup searchResultVideo;
|
|
||||||
private final StringFilterGroup compactChannelBarInner;
|
private final StringFilterGroup compactChannelBarInner;
|
||||||
private final StringFilterGroup compactChannelBarInnerButton;
|
private final StringFilterGroup compactChannelBarInnerButton;
|
||||||
private final ByteArrayFilterGroup joinMembershipButton;
|
private final ByteArrayFilterGroup joinMembershipButton;
|
||||||
private final StringFilterGroup horizontalShelves;
|
private final StringFilterGroup horizontalShelves;
|
||||||
|
private final ByteArrayFilterGroup ticketShelf;
|
||||||
|
|
||||||
public LayoutComponentsFilter() {
|
public LayoutComponentsFilter() {
|
||||||
exceptions.addPatterns(
|
exceptions.addPatterns(
|
||||||
@@ -233,14 +232,9 @@ public final class LayoutComponentsFilter extends Filter {
|
|||||||
"mixed_content_shelf"
|
"mixed_content_shelf"
|
||||||
);
|
);
|
||||||
|
|
||||||
searchResultVideo = new StringFilterGroup(
|
final var searchResultRecommendationLabels = new StringFilterGroup(
|
||||||
Settings.HIDE_SEARCH_RESULT_RECOMMENDATIONS,
|
Settings.HIDE_SEARCH_RESULT_RECOMMENDATION_LABELS,
|
||||||
"search_video_with_context.eml"
|
"endorsement_header_footer.eml"
|
||||||
);
|
|
||||||
|
|
||||||
searchResultRecommendations = new ByteArrayFilterGroup(
|
|
||||||
Settings.HIDE_SEARCH_RESULT_RECOMMENDATIONS,
|
|
||||||
"endorsement_header_footer"
|
|
||||||
);
|
);
|
||||||
|
|
||||||
horizontalShelves = new StringFilterGroup(
|
horizontalShelves = new StringFilterGroup(
|
||||||
@@ -251,6 +245,11 @@ public final class LayoutComponentsFilter extends Filter {
|
|||||||
"horizontal_tile_shelf.eml"
|
"horizontal_tile_shelf.eml"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
ticketShelf = new ByteArrayFilterGroup(
|
||||||
|
Settings.HIDE_TICKET_SHELF,
|
||||||
|
"ticket"
|
||||||
|
);
|
||||||
|
|
||||||
addPathCallbacks(
|
addPathCallbacks(
|
||||||
expandableMetadata,
|
expandableMetadata,
|
||||||
inFeedSurvey,
|
inFeedSurvey,
|
||||||
@@ -258,7 +257,7 @@ public final class LayoutComponentsFilter extends Filter {
|
|||||||
compactChannelBar,
|
compactChannelBar,
|
||||||
communityPosts,
|
communityPosts,
|
||||||
paidPromotion,
|
paidPromotion,
|
||||||
searchResultVideo,
|
searchResultRecommendationLabels,
|
||||||
latestPosts,
|
latestPosts,
|
||||||
channelWatermark,
|
channelWatermark,
|
||||||
communityGuidelines,
|
communityGuidelines,
|
||||||
@@ -293,50 +292,29 @@ public final class LayoutComponentsFilter extends Filter {
|
|||||||
// From 2025, the medical information panel is no longer shown in the search results.
|
// From 2025, the medical information panel is no longer shown in the search results.
|
||||||
// Therefore, this identifier does not filter when the search bar is activated.
|
// Therefore, this identifier does not filter when the search bar is activated.
|
||||||
if (matchedGroup == singleItemInformationPanel) {
|
if (matchedGroup == singleItemInformationPanel) {
|
||||||
if (PlayerType.getCurrent().isMaximizedOrFullscreen() || !NavigationBar.isSearchBarActive()) {
|
return PlayerType.getCurrent().isMaximizedOrFullscreen() || !NavigationBar.isSearchBarActive();
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (matchedGroup == searchResultVideo) {
|
|
||||||
if (searchResultRecommendations.check(protobufBufferArray).isFiltered()) {
|
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// The groups are excluded from the filter due to the exceptions list below.
|
// The groups are excluded from the filter due to the exceptions list below.
|
||||||
// Filter them separately here.
|
// Filter them separately here.
|
||||||
if (matchedGroup == notifyMe || matchedGroup == inFeedSurvey || matchedGroup == expandableMetadata)
|
if (matchedGroup == notifyMe || matchedGroup == inFeedSurvey || matchedGroup == expandableMetadata) {
|
||||||
{
|
return true;
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (exceptions.matches(path)) return false; // Exceptions are not filtered.
|
if (exceptions.matches(path)) return false; // Exceptions are not filtered.
|
||||||
|
|
||||||
if (matchedGroup == compactChannelBarInner) {
|
if (matchedGroup == compactChannelBarInner) {
|
||||||
if (compactChannelBarInnerButton.check(path).isFiltered()) {
|
return compactChannelBarInnerButton.check(path).isFiltered()
|
||||||
// The filter may be broad, but in the context of a compactChannelBarInnerButton,
|
// The filter may be broad, but in the context of a compactChannelBarInnerButton,
|
||||||
// it's safe to assume that the button is the only thing that should be hidden.
|
// it's safe to assume that the button is the only thing that should be hidden.
|
||||||
if (joinMembershipButton.check(protobufBufferArray).isFiltered()) {
|
&& joinMembershipButton.check(protobufBufferArray).isFiltered();
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (matchedGroup == horizontalShelves) {
|
if (matchedGroup == horizontalShelves) {
|
||||||
if (contentIndex == 0 && hideShelves()) {
|
return contentIndex == 0 && (hideShelves() || ticketShelf.check(protobufBufferArray).isFiltered());
|
||||||
return super.isFiltered(path, identifier, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import java.nio.ByteBuffer;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import app.revanced.extension.shared.Logger;
|
import app.revanced.extension.shared.Logger;
|
||||||
|
import app.revanced.extension.shared.settings.BaseSettings;
|
||||||
import app.revanced.extension.youtube.StringTrieSearch;
|
import app.revanced.extension.youtube.StringTrieSearch;
|
||||||
import app.revanced.extension.youtube.settings.Settings;
|
import app.revanced.extension.youtube.settings.Settings;
|
||||||
|
|
||||||
@@ -114,12 +115,29 @@ public final class LithoFilterPatch {
|
|||||||
if (!group.includeInSearch()) {
|
if (!group.includeInSearch()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (String pattern : group.filters) {
|
for (String pattern : group.filters) {
|
||||||
pathSearchTree.addPattern(pattern, (textSearched, matchedStartIndex, matchedLength, callbackParameter) -> {
|
String filterSimpleName = filter.getClass().getSimpleName();
|
||||||
|
|
||||||
|
pathSearchTree.addPattern(pattern, (textSearched, matchedStartIndex,
|
||||||
|
matchedLength, callbackParameter) -> {
|
||||||
if (!group.isEnabled()) return false;
|
if (!group.isEnabled()) return false;
|
||||||
|
|
||||||
LithoFilterParameters parameters = (LithoFilterParameters) callbackParameter;
|
LithoFilterParameters parameters = (LithoFilterParameters) callbackParameter;
|
||||||
return filter.isFiltered(parameters.identifier, parameters.path, parameters.protoBuffer,
|
final boolean isFiltered = filter.isFiltered(parameters.identifier,
|
||||||
group, type, matchedStartIndex);
|
parameters.path, parameters.protoBuffer, group, type, matchedStartIndex);
|
||||||
|
|
||||||
|
if (isFiltered && BaseSettings.DEBUG.get()) {
|
||||||
|
if (type == Filter.FilterContentType.IDENTIFIER) {
|
||||||
|
Logger.printDebug(() -> "Filtered " + filterSimpleName
|
||||||
|
+ " identifier: " + parameters.identifier);
|
||||||
|
} else {
|
||||||
|
Logger.printDebug(() -> "Filtered " + filterSimpleName
|
||||||
|
+ " path: " + parameters.path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return isFiltered;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ public class PlayerFlyoutMenuItemsFilter extends Filter {
|
|||||||
boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
|
boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
|
||||||
StringFilterGroup matchedGroup, FilterContentType contentType, int contentIndex) {
|
StringFilterGroup matchedGroup, FilterContentType contentType, int contentIndex) {
|
||||||
if (matchedGroup == videoQualityMenuFooter) {
|
if (matchedGroup == videoQualityMenuFooter) {
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (contentIndex != 0) {
|
if (contentIndex != 0) {
|
||||||
@@ -111,11 +111,6 @@ public class PlayerFlyoutMenuItemsFilter extends Filter {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flyoutFilterGroupList.check(protobufBufferArray).isFiltered()) {
|
return flyoutFilterGroupList.check(protobufBufferArray).isFiltered();
|
||||||
// Super class handles logging.
|
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -278,27 +278,18 @@ public final class ShortsFilter extends Filter {
|
|||||||
if (contentType == FilterContentType.PATH) {
|
if (contentType == FilterContentType.PATH) {
|
||||||
if (matchedGroup == subscribeButton || matchedGroup == joinButton || matchedGroup == paidPromotionButton) {
|
if (matchedGroup == subscribeButton || matchedGroup == joinButton || matchedGroup == paidPromotionButton) {
|
||||||
// Selectively filter to avoid false positive filtering of other subscribe/join buttons.
|
// Selectively filter to avoid false positive filtering of other subscribe/join buttons.
|
||||||
if (path.startsWith(REEL_CHANNEL_BAR_PATH) || path.startsWith(REEL_METAPANEL_PATH)) {
|
return path.startsWith(REEL_CHANNEL_BAR_PATH) || path.startsWith(REEL_METAPANEL_PATH);
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (matchedGroup == shortsCompactFeedVideoPath) {
|
if (matchedGroup == shortsCompactFeedVideoPath) {
|
||||||
if (shouldHideShortsFeedItems() && shortsCompactFeedVideoBuffer.check(protobufBufferArray).isFiltered()) {
|
return shouldHideShortsFeedItems() && shortsCompactFeedVideoBuffer.check(protobufBufferArray).isFiltered();
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Video action buttons (comment, share, remix) have the same path.
|
// Video action buttons (comment, share, remix) have the same path.
|
||||||
// Like and dislike are separate path filters and don't require buffer searching.
|
// Like and dislike are separate path filters and don't require buffer searching.
|
||||||
if (matchedGroup == shortsActionBar) {
|
if (matchedGroup == shortsActionBar) {
|
||||||
if (actionButton.check(path).isFiltered()
|
return actionButton.check(path).isFiltered()
|
||||||
&& videoActionButtonGroupList.check(protobufBufferArray).isFiltered()) {
|
&& videoActionButtonGroupList.check(protobufBufferArray).isFiltered();
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (matchedGroup == suggestedAction) {
|
if (matchedGroup == suggestedAction) {
|
||||||
@@ -306,28 +297,23 @@ public final class ShortsFilter extends Filter {
|
|||||||
// This has a secondary effect of hiding all new un-identified actions
|
// This has a secondary effect of hiding all new un-identified actions
|
||||||
// under the assumption that the user wants all suggestions hidden.
|
// under the assumption that the user wants all suggestions hidden.
|
||||||
if (isEverySuggestedActionFilterEnabled()) {
|
if (isEverySuggestedActionFilterEnabled()) {
|
||||||
return super.isFiltered(path, identifier, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (suggestedActionsGroupList.check(protobufBufferArray).isFiltered()) {
|
return suggestedActionsGroupList.check(protobufBufferArray).isFiltered();
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
return true;
|
||||||
// Feed/search identifier components.
|
|
||||||
if (matchedGroup == shelfHeader) {
|
|
||||||
// Because the header is used in watch history and possibly other places, check for the index,
|
|
||||||
// which is 0 when the shelf header is used for Shorts.
|
|
||||||
if (contentIndex != 0) return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!shouldHideShortsFeedItems()) return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Super class handles logging.
|
// Feed/search identifier components.
|
||||||
return super.isFiltered(identifier, path, protobufBufferArray, matchedGroup, contentType, contentIndex);
|
if (matchedGroup == shelfHeader) {
|
||||||
|
// Because the header is used in watch history and possibly other places, check for the index,
|
||||||
|
// which is 0 when the shelf header is used for Shorts.
|
||||||
|
if (contentIndex != 0) return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return shouldHideShortsFeedItems();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean shouldHideShortsFeedItems() {
|
private static boolean shouldHideShortsFeedItems() {
|
||||||
|
|||||||
@@ -1,16 +1,12 @@
|
|||||||
package app.revanced.extension.youtube.patches.playback.speed;
|
package app.revanced.extension.youtube.patches.playback.speed;
|
||||||
|
|
||||||
import static app.revanced.extension.shared.StringRef.sf;
|
|
||||||
import static app.revanced.extension.shared.StringRef.str;
|
import static app.revanced.extension.shared.StringRef.str;
|
||||||
|
|
||||||
import android.preference.ListPreference;
|
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.ViewParent;
|
import android.view.ViewParent;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
import app.revanced.extension.shared.Logger;
|
import app.revanced.extension.shared.Logger;
|
||||||
@@ -21,8 +17,6 @@ import app.revanced.extension.youtube.settings.Settings;
|
|||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public class CustomPlaybackSpeedPatch {
|
public class CustomPlaybackSpeedPatch {
|
||||||
|
|
||||||
private static final float PLAYBACK_SPEED_AUTO = Settings.PLAYBACK_SPEED_DEFAULT.defaultValue;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maximum playback speed, exclusive value. Custom speeds must be less than this value.
|
* Maximum playback speed, exclusive value. Custom speeds must be less than this value.
|
||||||
* <p>
|
* <p>
|
||||||
@@ -47,11 +41,6 @@ public class CustomPlaybackSpeedPatch {
|
|||||||
*/
|
*/
|
||||||
private static long lastTimeOldPlaybackMenuInvoked;
|
private static long lastTimeOldPlaybackMenuInvoked;
|
||||||
|
|
||||||
/**
|
|
||||||
* PreferenceList entries and values, of all available playback speeds.
|
|
||||||
*/
|
|
||||||
private static String[] preferenceListEntries, preferenceListEntryValues;
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
final float holdSpeed = Settings.SPEED_TAP_AND_HOLD.get();
|
final float holdSpeed = Settings.SPEED_TAP_AND_HOLD.get();
|
||||||
|
|
||||||
@@ -117,33 +106,6 @@ public class CustomPlaybackSpeedPatch {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize a settings preference list with the available playback speeds.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public static void initializeListPreference(ListPreference preference) {
|
|
||||||
if (preferenceListEntries == null) {
|
|
||||||
final int numberOfEntries = customPlaybackSpeeds.length + 1;
|
|
||||||
preferenceListEntries = new String[numberOfEntries];
|
|
||||||
preferenceListEntryValues = new String[numberOfEntries];
|
|
||||||
|
|
||||||
// Auto speed (same behavior as unpatched).
|
|
||||||
preferenceListEntries[0] = sf("revanced_custom_playback_speeds_auto").toString();
|
|
||||||
preferenceListEntryValues[0] = String.valueOf(PLAYBACK_SPEED_AUTO);
|
|
||||||
|
|
||||||
int i = 1;
|
|
||||||
for (float speed : customPlaybackSpeeds) {
|
|
||||||
String speedString = String.valueOf(speed);
|
|
||||||
preferenceListEntries[i] = speedString + "x";
|
|
||||||
preferenceListEntryValues[i] = speedString;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
preference.setEntries(preferenceListEntries);
|
|
||||||
preference.setEntryValues(preferenceListEntryValues);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Injection point.
|
* Injection point.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package app.revanced.extension.youtube.patches.theme;
|
package app.revanced.extension.youtube.patches.theme;
|
||||||
|
|
||||||
import static app.revanced.extension.shared.StringRef.str;
|
import static app.revanced.extension.shared.StringRef.str;
|
||||||
|
import static app.revanced.extension.shared.Utils.clamp;
|
||||||
|
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
@@ -378,14 +379,4 @@ public final class SeekbarColorPatch {
|
|||||||
return originalColor;
|
return originalColor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @noinspection SameParameterValue */
|
|
||||||
private static int clamp(int value, int lower, int upper) {
|
|
||||||
return Math.max(lower, Math.min(value, upper));
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @noinspection SameParameterValue */
|
|
||||||
private static float clamp(float value, float lower, float upper) {
|
|
||||||
return Math.max(lower, Math.min(value, upper));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -235,7 +235,7 @@ public class ReturnYouTubeDislike {
|
|||||||
final boolean compactLayout = Settings.RYD_COMPACT_LAYOUT.get();
|
final boolean compactLayout = Settings.RYD_COMPACT_LAYOUT.get();
|
||||||
|
|
||||||
if (!compactLayout) {
|
if (!compactLayout) {
|
||||||
String leftSeparatorString = getTextDirectionString();
|
String leftSeparatorString = Utils.getTextDirectionString();
|
||||||
final Spannable leftSeparatorSpan;
|
final Spannable leftSeparatorSpan;
|
||||||
if (isRollingNumber) {
|
if (isRollingNumber) {
|
||||||
leftSeparatorSpan = new SpannableString(leftSeparatorString);
|
leftSeparatorSpan = new SpannableString(leftSeparatorString);
|
||||||
@@ -279,12 +279,6 @@ public class ReturnYouTubeDislike {
|
|||||||
return new SpannableString(builder);
|
return new SpannableString(builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static @NonNull String getTextDirectionString() {
|
|
||||||
return Utils.isRightToLeftTextLayout()
|
|
||||||
? "\u200F" // u200F = right to left character
|
|
||||||
: "\u200E"; // u200E = left to right character
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return If the text is likely for a previously created likes/dislikes segmented span.
|
* @return If the text is likely for a previously created likes/dislikes segmented span.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package app.revanced.extension.youtube.returnyoutubedislike.ui;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.util.AttributeSet;
|
||||||
|
|
||||||
|
import app.revanced.extension.youtube.settings.preference.UrlLinkPreference;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows tapping the RYD about preference to open the website.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public class ReturnYouTubeDislikeAboutPreference extends UrlLinkPreference {
|
||||||
|
{
|
||||||
|
externalUrl = "https://returnyoutubedislike.com";
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReturnYouTubeDislikeAboutPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||||
|
super(context, attrs, defStyleAttr, defStyleRes);
|
||||||
|
}
|
||||||
|
public ReturnYouTubeDislikeAboutPreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||||
|
super(context, attrs, defStyleAttr);
|
||||||
|
}
|
||||||
|
public ReturnYouTubeDislikeAboutPreference(Context context, AttributeSet attrs) {
|
||||||
|
super(context, attrs);
|
||||||
|
}
|
||||||
|
public ReturnYouTubeDislikeAboutPreference(Context context) {
|
||||||
|
super(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,126 @@
|
|||||||
|
package app.revanced.extension.youtube.returnyoutubedislike.ui;
|
||||||
|
|
||||||
|
import static app.revanced.extension.shared.StringRef.str;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.preference.Preference;
|
||||||
|
import android.preference.PreferenceCategory;
|
||||||
|
import android.util.AttributeSet;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import app.revanced.extension.shared.Logger;
|
||||||
|
import app.revanced.extension.shared.settings.BaseSettings;
|
||||||
|
import app.revanced.extension.youtube.returnyoutubedislike.requests.ReturnYouTubeDislikeApi;
|
||||||
|
|
||||||
|
@SuppressWarnings({"unused", "deprecation"})
|
||||||
|
public class ReturnYouTubeDislikeDebugStatsPreferenceCategory extends PreferenceCategory {
|
||||||
|
|
||||||
|
private static final boolean SHOW_RYD_DEBUG_STATS = BaseSettings.DEBUG.get();
|
||||||
|
|
||||||
|
private static String createSummaryText(int value, String summaryStringZeroKey, String summaryStringOneOrMoreKey) {
|
||||||
|
if (value == 0) {
|
||||||
|
return str(summaryStringZeroKey);
|
||||||
|
}
|
||||||
|
return str(summaryStringOneOrMoreKey, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String createMillisecondStringFromNumber(long number) {
|
||||||
|
return String.format(str("revanced_ryd_statistics_millisecond_text"), number);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReturnYouTubeDislikeDebugStatsPreferenceCategory(Context context, AttributeSet attrs) {
|
||||||
|
super(context, attrs);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReturnYouTubeDislikeDebugStatsPreferenceCategory(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||||
|
super(context, attrs, defStyleAttr);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReturnYouTubeDislikeDebugStatsPreferenceCategory(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||||
|
super(context, attrs, defStyleAttr, defStyleRes);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected View onCreateView(ViewGroup parent) {
|
||||||
|
if (!SHOW_RYD_DEBUG_STATS) {
|
||||||
|
// Use an empty view to hide without removing.
|
||||||
|
return new View(getContext());
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.onCreateView(parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void onAttachedToActivity() {
|
||||||
|
try {
|
||||||
|
super.onAttachedToActivity();
|
||||||
|
if (!SHOW_RYD_DEBUG_STATS) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger.printDebug(() -> "Updating stats preferences");
|
||||||
|
removeAll();
|
||||||
|
|
||||||
|
addStatisticPreference(
|
||||||
|
"revanced_ryd_statistics_getFetchCallResponseTimeAverage_title",
|
||||||
|
createMillisecondStringFromNumber(ReturnYouTubeDislikeApi.getFetchCallResponseTimeAverage())
|
||||||
|
);
|
||||||
|
|
||||||
|
addStatisticPreference(
|
||||||
|
"revanced_ryd_statistics_getFetchCallResponseTimeMin_title",
|
||||||
|
createMillisecondStringFromNumber(ReturnYouTubeDislikeApi.getFetchCallResponseTimeMin())
|
||||||
|
);
|
||||||
|
|
||||||
|
addStatisticPreference(
|
||||||
|
"revanced_ryd_statistics_getFetchCallResponseTimeMax_title",
|
||||||
|
createMillisecondStringFromNumber(ReturnYouTubeDislikeApi.getFetchCallResponseTimeMax())
|
||||||
|
);
|
||||||
|
|
||||||
|
String fetchCallTimeWaitingLastSummary;
|
||||||
|
final long fetchCallTimeWaitingLast = ReturnYouTubeDislikeApi.getFetchCallResponseTimeLast();
|
||||||
|
if (fetchCallTimeWaitingLast == ReturnYouTubeDislikeApi.FETCH_CALL_RESPONSE_TIME_VALUE_RATE_LIMIT) {
|
||||||
|
fetchCallTimeWaitingLastSummary = str("revanced_ryd_statistics_getFetchCallResponseTimeLast_rate_limit_summary");
|
||||||
|
} else {
|
||||||
|
fetchCallTimeWaitingLastSummary = createMillisecondStringFromNumber(fetchCallTimeWaitingLast);
|
||||||
|
}
|
||||||
|
addStatisticPreference(
|
||||||
|
"revanced_ryd_statistics_getFetchCallResponseTimeLast_title",
|
||||||
|
fetchCallTimeWaitingLastSummary
|
||||||
|
);
|
||||||
|
|
||||||
|
addStatisticPreference(
|
||||||
|
"revanced_ryd_statistics_getFetchCallCount_title",
|
||||||
|
createSummaryText(ReturnYouTubeDislikeApi.getFetchCallCount(),
|
||||||
|
"revanced_ryd_statistics_getFetchCallCount_zero_summary",
|
||||||
|
"revanced_ryd_statistics_getFetchCallCount_non_zero_summary"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
addStatisticPreference(
|
||||||
|
"revanced_ryd_statistics_getFetchCallNumberOfFailures_title",
|
||||||
|
createSummaryText(ReturnYouTubeDislikeApi.getFetchCallNumberOfFailures(),
|
||||||
|
"revanced_ryd_statistics_getFetchCallNumberOfFailures_zero_summary",
|
||||||
|
"revanced_ryd_statistics_getFetchCallNumberOfFailures_non_zero_summary"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
addStatisticPreference(
|
||||||
|
"revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_title",
|
||||||
|
createSummaryText(ReturnYouTubeDislikeApi.getNumberOfRateLimitRequestsEncountered(),
|
||||||
|
"revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_zero_summary",
|
||||||
|
"revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_non_zero_summary"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Logger.printException(() -> "onAttachedToActivity failure", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addStatisticPreference(String titleKey, String SummaryText) {
|
||||||
|
Preference statisticPreference = new Preference(getContext());
|
||||||
|
statisticPreference.setSelectable(false);
|
||||||
|
statisticPreference.setTitle(str(titleKey));
|
||||||
|
statisticPreference.setSummary(SummaryText);
|
||||||
|
addPreference(statisticPreference);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,8 +11,6 @@ import android.view.ViewGroup;
|
|||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toolbar;
|
import android.widget.Toolbar;
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import app.revanced.extension.shared.Logger;
|
import app.revanced.extension.shared.Logger;
|
||||||
import app.revanced.extension.shared.Utils;
|
import app.revanced.extension.shared.Utils;
|
||||||
import app.revanced.extension.shared.settings.AppLanguage;
|
import app.revanced.extension.shared.settings.AppLanguage;
|
||||||
@@ -21,8 +19,6 @@ import app.revanced.extension.youtube.ThemeHelper;
|
|||||||
import app.revanced.extension.youtube.patches.VersionCheckPatch;
|
import app.revanced.extension.youtube.patches.VersionCheckPatch;
|
||||||
import app.revanced.extension.youtube.patches.spoof.SpoofAppVersionPatch;
|
import app.revanced.extension.youtube.patches.spoof.SpoofAppVersionPatch;
|
||||||
import app.revanced.extension.youtube.settings.preference.ReVancedPreferenceFragment;
|
import app.revanced.extension.youtube.settings.preference.ReVancedPreferenceFragment;
|
||||||
import app.revanced.extension.youtube.settings.preference.ReturnYouTubeDislikePreferenceFragment;
|
|
||||||
import app.revanced.extension.youtube.settings.preference.SponsorBlockPreferenceFragment;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hooks LicenseActivity.
|
* Hooks LicenseActivity.
|
||||||
@@ -88,28 +84,15 @@ public class LicenseActivityHook {
|
|||||||
licenseActivity.setContentView(getResourceIdentifier(
|
licenseActivity.setContentView(getResourceIdentifier(
|
||||||
"revanced_settings_with_toolbar", "layout"));
|
"revanced_settings_with_toolbar", "layout"));
|
||||||
|
|
||||||
PreferenceFragment fragment;
|
// Sanity check.
|
||||||
String toolbarTitleResourceName;
|
String dataString = licenseActivity.getIntent().getDataString();
|
||||||
String dataString = Objects.requireNonNull(licenseActivity.getIntent().getDataString());
|
if (!"revanced_settings_intent".equals(dataString)) {
|
||||||
switch (dataString) {
|
Logger.printException(() -> "Unknown intent: " + dataString);
|
||||||
case "revanced_sb_settings_intent":
|
return;
|
||||||
toolbarTitleResourceName = "revanced_sb_settings_title";
|
|
||||||
fragment = new SponsorBlockPreferenceFragment();
|
|
||||||
break;
|
|
||||||
case "revanced_ryd_settings_intent":
|
|
||||||
toolbarTitleResourceName = "revanced_ryd_settings_title";
|
|
||||||
fragment = new ReturnYouTubeDislikePreferenceFragment();
|
|
||||||
break;
|
|
||||||
case "revanced_settings_intent":
|
|
||||||
toolbarTitleResourceName = "revanced_settings_title";
|
|
||||||
fragment = new ReVancedPreferenceFragment();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
Logger.printException(() -> "Unknown setting: " + dataString);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
createToolbar(licenseActivity, toolbarTitleResourceName);
|
PreferenceFragment fragment = new ReVancedPreferenceFragment();
|
||||||
|
createToolbar(licenseActivity, fragment);
|
||||||
|
|
||||||
//noinspection deprecation
|
//noinspection deprecation
|
||||||
licenseActivity.getFragmentManager()
|
licenseActivity.getFragmentManager()
|
||||||
@@ -122,7 +105,7 @@ public class LicenseActivityHook {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("UseCompatLoadingForDrawables")
|
@SuppressLint("UseCompatLoadingForDrawables")
|
||||||
private static void createToolbar(Activity activity, String toolbarTitleResourceName) {
|
private static void createToolbar(Activity activity, PreferenceFragment fragment) {
|
||||||
// Replace dummy placeholder toolbar.
|
// Replace dummy placeholder toolbar.
|
||||||
// This is required to fix submenu title alignment issue with Android ASOP 15+
|
// This is required to fix submenu title alignment issue with Android ASOP 15+
|
||||||
ViewGroup toolBarParent = activity.findViewById(
|
ViewGroup toolBarParent = activity.findViewById(
|
||||||
@@ -134,8 +117,7 @@ public class LicenseActivityHook {
|
|||||||
Toolbar toolbar = new Toolbar(toolBarParent.getContext());
|
Toolbar toolbar = new Toolbar(toolBarParent.getContext());
|
||||||
toolbar.setBackgroundColor(ThemeHelper.getToolbarBackgroundColor());
|
toolbar.setBackgroundColor(ThemeHelper.getToolbarBackgroundColor());
|
||||||
toolbar.setNavigationIcon(ReVancedPreferenceFragment.getBackButtonDrawable());
|
toolbar.setNavigationIcon(ReVancedPreferenceFragment.getBackButtonDrawable());
|
||||||
toolbar.setNavigationOnClickListener(view -> activity.onBackPressed());
|
toolbar.setTitle(getResourceIdentifier("revanced_settings_title", "string"));
|
||||||
toolbar.setTitle(getResourceIdentifier(toolbarTitleResourceName, "string"));
|
|
||||||
|
|
||||||
final int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 16,
|
final int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 16,
|
||||||
Utils.getContext().getResources().getDisplayMetrics());
|
Utils.getContext().getResources().getDisplayMetrics());
|
||||||
@@ -148,6 +130,11 @@ public class LicenseActivityHook {
|
|||||||
}
|
}
|
||||||
setToolbarLayoutParams(toolbar);
|
setToolbarLayoutParams(toolbar);
|
||||||
|
|
||||||
|
// Add Search Icon and EditText for ReVancedPreferenceFragment only.
|
||||||
|
if (fragment instanceof ReVancedPreferenceFragment) {
|
||||||
|
SearchViewController.addSearchViewComponents(activity, toolbar, (ReVancedPreferenceFragment) fragment);
|
||||||
|
}
|
||||||
|
|
||||||
toolBarParent.addView(toolbar, 0);
|
toolBarParent.addView(toolbar, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,381 @@
|
|||||||
|
package app.revanced.extension.youtube.settings;
|
||||||
|
|
||||||
|
import static app.revanced.extension.shared.StringRef.str;
|
||||||
|
import static app.revanced.extension.shared.Utils.getResourceIdentifier;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.drawable.GradientDrawable;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.inputmethod.InputMethodManager;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.AutoCompleteTextView;
|
||||||
|
import android.widget.FrameLayout;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.SearchView;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toolbar;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Deque;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import app.revanced.extension.shared.Logger;
|
||||||
|
import app.revanced.extension.shared.Utils;
|
||||||
|
import app.revanced.extension.shared.settings.AppLanguage;
|
||||||
|
import app.revanced.extension.shared.settings.BaseSettings;
|
||||||
|
import app.revanced.extension.shared.settings.StringSetting;
|
||||||
|
import app.revanced.extension.youtube.ThemeHelper;
|
||||||
|
import app.revanced.extension.youtube.settings.preference.ReVancedPreferenceFragment;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controller for managing the search view in ReVanced settings.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({"deprecated", "DiscouragedApi"})
|
||||||
|
public class SearchViewController {
|
||||||
|
private static final int MAX_HISTORY_SIZE = 5;
|
||||||
|
|
||||||
|
private final SearchView searchView;
|
||||||
|
private final FrameLayout searchContainer;
|
||||||
|
private final Toolbar toolbar;
|
||||||
|
private final Activity activity;
|
||||||
|
private boolean isSearchActive;
|
||||||
|
private final CharSequence originalTitle;
|
||||||
|
private final Deque<String> searchHistory;
|
||||||
|
private final AutoCompleteTextView autoCompleteTextView;
|
||||||
|
private final boolean showSettingsSearchHistory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a background drawable for the SearchView with rounded corners.
|
||||||
|
*/
|
||||||
|
private static GradientDrawable createBackgroundDrawable(Context context) {
|
||||||
|
GradientDrawable background = new GradientDrawable();
|
||||||
|
background.setShape(GradientDrawable.RECTANGLE);
|
||||||
|
background.setCornerRadius(28 * context.getResources().getDisplayMetrics().density); // 28dp corner radius.
|
||||||
|
int baseColor = ThemeHelper.getBackgroundColor();
|
||||||
|
int adjustedColor = ThemeHelper.isDarkTheme()
|
||||||
|
? ThemeHelper.adjustColorBrightness(baseColor, 1.11f) // Lighten for dark theme.
|
||||||
|
: ThemeHelper.adjustColorBrightness(baseColor, 0.95f); // Darken for light theme.
|
||||||
|
background.setColor(adjustedColor);
|
||||||
|
return background;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a background drawable for suggestion items with rounded corners.
|
||||||
|
*/
|
||||||
|
private static GradientDrawable createSuggestionBackgroundDrawable(Context context) {
|
||||||
|
GradientDrawable background = new GradientDrawable();
|
||||||
|
background.setShape(GradientDrawable.RECTANGLE);
|
||||||
|
background.setCornerRadius(8 * context.getResources().getDisplayMetrics().density); // 8dp corner radius.
|
||||||
|
return background;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds search view components to the activity.
|
||||||
|
*/
|
||||||
|
public static void addSearchViewComponents(Activity activity, Toolbar toolbar, ReVancedPreferenceFragment fragment) {
|
||||||
|
new SearchViewController(activity, toolbar, fragment);
|
||||||
|
}
|
||||||
|
|
||||||
|
private SearchViewController(Activity activity, Toolbar toolbar, ReVancedPreferenceFragment fragment) {
|
||||||
|
this.activity = activity;
|
||||||
|
this.toolbar = toolbar;
|
||||||
|
this.originalTitle = toolbar.getTitle();
|
||||||
|
this.showSettingsSearchHistory = Settings.SETTINGS_SEARCH_HISTORY.get();
|
||||||
|
this.searchHistory = new LinkedList<>();
|
||||||
|
StringSetting searchEntries = Settings.SETTINGS_SEARCH_ENTRIES;
|
||||||
|
if (showSettingsSearchHistory) {
|
||||||
|
String entries = searchEntries.get();
|
||||||
|
if (!entries.isBlank()) {
|
||||||
|
searchHistory.addAll(Arrays.asList(entries.split("\n")));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Clear old saved history if the user turns off the feature.
|
||||||
|
searchEntries.resetToDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retrieve SearchView and container from XML.
|
||||||
|
searchView = activity.findViewById(getResourceIdentifier(
|
||||||
|
"revanced_search_view", "id"));
|
||||||
|
searchContainer = activity.findViewById(getResourceIdentifier(
|
||||||
|
"revanced_search_view_container", "id"));
|
||||||
|
|
||||||
|
// Initialize AutoCompleteTextView.
|
||||||
|
autoCompleteTextView = searchView.findViewById(
|
||||||
|
searchView.getContext().getResources().getIdentifier(
|
||||||
|
"android:id/search_src_text", null, null));
|
||||||
|
|
||||||
|
// Set background and query hint.
|
||||||
|
searchView.setBackground(createBackgroundDrawable(toolbar.getContext()));
|
||||||
|
searchView.setQueryHint(str("revanced_settings_search_hint"));
|
||||||
|
|
||||||
|
// Configure RTL support based on app language.
|
||||||
|
AppLanguage appLanguage = BaseSettings.REVANCED_LANGUAGE.get();
|
||||||
|
if (Utils.isRightToLeftLocale(appLanguage.getLocale())) {
|
||||||
|
searchView.setTextDirection(View.TEXT_DIRECTION_RTL);
|
||||||
|
searchView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set up search history suggestions.
|
||||||
|
if (showSettingsSearchHistory) {
|
||||||
|
setupSearchHistory();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set up query text listener.
|
||||||
|
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onQueryTextSubmit(String query) {
|
||||||
|
try {
|
||||||
|
String queryTrimmed = query.trim();
|
||||||
|
if (!queryTrimmed.isEmpty()) {
|
||||||
|
saveSearchQuery(queryTrimmed);
|
||||||
|
}
|
||||||
|
// Hide suggestions on submit.
|
||||||
|
if (showSettingsSearchHistory && autoCompleteTextView != null) {
|
||||||
|
autoCompleteTextView.dismissDropDown();
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Logger.printException(() -> "onQueryTextSubmit failure", ex);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onQueryTextChange(String newText) {
|
||||||
|
try {
|
||||||
|
Logger.printDebug(() -> "Search query: " + newText);
|
||||||
|
fragment.filterPreferences(newText);
|
||||||
|
// Prevent suggestions from showing during text input.
|
||||||
|
if (showSettingsSearchHistory && autoCompleteTextView != null) {
|
||||||
|
if (!newText.isEmpty()) {
|
||||||
|
autoCompleteTextView.dismissDropDown();
|
||||||
|
autoCompleteTextView.setThreshold(Integer.MAX_VALUE); // Disable autocomplete suggestions.
|
||||||
|
} else {
|
||||||
|
autoCompleteTextView.setThreshold(1); // Re-enable for empty input.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Logger.printException(() -> "onQueryTextChange failure", ex);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Set menu and search icon.
|
||||||
|
final int actionSearchId = getResourceIdentifier("action_search", "id");
|
||||||
|
toolbar.inflateMenu(getResourceIdentifier("revanced_search_menu", "menu"));
|
||||||
|
MenuItem searchItem = toolbar.getMenu().findItem(actionSearchId);
|
||||||
|
searchItem.setIcon(getResourceIdentifier(ThemeHelper.isDarkTheme()
|
||||||
|
? "yt_outline_search_white_24"
|
||||||
|
: "yt_outline_search_black_24",
|
||||||
|
"drawable")).setTooltipText(null);
|
||||||
|
|
||||||
|
// Set menu item click listener.
|
||||||
|
toolbar.setOnMenuItemClickListener(item -> {
|
||||||
|
try {
|
||||||
|
if (item.getItemId() == actionSearchId) {
|
||||||
|
if (!isSearchActive) {
|
||||||
|
openSearch();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Logger.printException(() -> "menu click failure", ex);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Set navigation click listener.
|
||||||
|
toolbar.setNavigationOnClickListener(view -> {
|
||||||
|
try {
|
||||||
|
if (isSearchActive) {
|
||||||
|
closeSearch();
|
||||||
|
} else {
|
||||||
|
activity.onBackPressed();
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Logger.printException(() -> "navigation click failure", ex);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets up the search history suggestions for the SearchView with custom adapter.
|
||||||
|
*/
|
||||||
|
private void setupSearchHistory() {
|
||||||
|
if (autoCompleteTextView != null) {
|
||||||
|
SearchHistoryAdapter adapter = new SearchHistoryAdapter(activity, new ArrayList<>(searchHistory));
|
||||||
|
autoCompleteTextView.setAdapter(adapter);
|
||||||
|
autoCompleteTextView.setThreshold(1); // Initial threshold for empty input.
|
||||||
|
autoCompleteTextView.setLongClickable(true);
|
||||||
|
|
||||||
|
// Show suggestions only when search bar is active and query is empty.
|
||||||
|
autoCompleteTextView.setOnFocusChangeListener((v, hasFocus) -> {
|
||||||
|
if (hasFocus && isSearchActive && autoCompleteTextView.getText().length() == 0) {
|
||||||
|
autoCompleteTextView.showDropDown();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves a search query to the search history.
|
||||||
|
* @param query The search query to save.
|
||||||
|
*/
|
||||||
|
private void saveSearchQuery(String query) {
|
||||||
|
if (!showSettingsSearchHistory) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
searchHistory.remove(query); // Remove if already exists to update position.
|
||||||
|
searchHistory.addFirst(query); // Add to the most recent.
|
||||||
|
|
||||||
|
// Remove extra old entries.
|
||||||
|
while (searchHistory.size() > MAX_HISTORY_SIZE) {
|
||||||
|
String last = searchHistory.removeLast();
|
||||||
|
Logger.printDebug(() -> "Removing search history query: " + last);
|
||||||
|
}
|
||||||
|
|
||||||
|
saveSearchHistory();
|
||||||
|
|
||||||
|
updateSearchHistoryAdapter();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a search query from the search history.
|
||||||
|
* @param query The search query to remove.
|
||||||
|
*/
|
||||||
|
private void removeSearchQuery(String query) {
|
||||||
|
searchHistory.remove(query);
|
||||||
|
|
||||||
|
saveSearchHistory();
|
||||||
|
|
||||||
|
updateSearchHistoryAdapter();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save the search history to the shared preferences.
|
||||||
|
*/
|
||||||
|
private void saveSearchHistory() {
|
||||||
|
Logger.printDebug(() -> "Saving search history: " + searchHistory);
|
||||||
|
|
||||||
|
Settings.SETTINGS_SEARCH_ENTRIES.save(
|
||||||
|
String.join("\n", searchHistory)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the search history adapter with the latest history.
|
||||||
|
*/
|
||||||
|
private void updateSearchHistoryAdapter() {
|
||||||
|
if (autoCompleteTextView == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchHistoryAdapter adapter = (SearchHistoryAdapter) autoCompleteTextView.getAdapter();
|
||||||
|
if (adapter != null) {
|
||||||
|
adapter.clear();
|
||||||
|
adapter.addAll(searchHistory);
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens the search view and shows the keyboard.
|
||||||
|
*/
|
||||||
|
private void openSearch() {
|
||||||
|
isSearchActive = true;
|
||||||
|
toolbar.getMenu().findItem(getResourceIdentifier(
|
||||||
|
"action_search", "id")).setVisible(false);
|
||||||
|
toolbar.setTitle("");
|
||||||
|
searchContainer.setVisibility(View.VISIBLE);
|
||||||
|
searchView.requestFocus();
|
||||||
|
|
||||||
|
// Show keyboard.
|
||||||
|
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
imm.showSoftInput(searchView, InputMethodManager.SHOW_IMPLICIT);
|
||||||
|
|
||||||
|
// Show suggestions with a slight delay.
|
||||||
|
if (showSettingsSearchHistory && autoCompleteTextView != null && autoCompleteTextView.getText().length() == 0) {
|
||||||
|
searchView.postDelayed(() -> {
|
||||||
|
if (isSearchActive && autoCompleteTextView.getText().length() == 0) {
|
||||||
|
autoCompleteTextView.showDropDown();
|
||||||
|
}
|
||||||
|
}, 100); // 100ms delay to ensure focus is stable.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the search view and hides the keyboard.
|
||||||
|
*/
|
||||||
|
private void closeSearch() {
|
||||||
|
isSearchActive = false;
|
||||||
|
toolbar.getMenu().findItem(getResourceIdentifier(
|
||||||
|
"action_search", "id"))
|
||||||
|
.setIcon(getResourceIdentifier(ThemeHelper.isDarkTheme()
|
||||||
|
? "yt_outline_search_white_24"
|
||||||
|
: "yt_outline_search_black_24",
|
||||||
|
"drawable")
|
||||||
|
).setVisible(true);
|
||||||
|
toolbar.setTitle(originalTitle);
|
||||||
|
searchContainer.setVisibility(View.GONE);
|
||||||
|
searchView.setQuery("", false);
|
||||||
|
|
||||||
|
// Hide keyboard.
|
||||||
|
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom ArrayAdapter for search history.
|
||||||
|
*/
|
||||||
|
private class SearchHistoryAdapter extends ArrayAdapter<String> {
|
||||||
|
public SearchHistoryAdapter(Context context, List<String> history) {
|
||||||
|
super(context, 0, history);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public View getView(int position, View convertView, @NonNull android.view.ViewGroup parent) {
|
||||||
|
if (convertView == null) {
|
||||||
|
convertView = LinearLayout.inflate(getContext(), getResourceIdentifier(
|
||||||
|
"revanced_search_suggestion_item", "layout"), null);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply rounded corners programmatically.
|
||||||
|
convertView.setBackground(createSuggestionBackgroundDrawable(getContext()));
|
||||||
|
String query = getItem(position);
|
||||||
|
|
||||||
|
// Set query text.
|
||||||
|
TextView textView = convertView.findViewById(getResourceIdentifier(
|
||||||
|
"suggestion_text", "id"));
|
||||||
|
if (textView != null) {
|
||||||
|
textView.setText(query);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set click listener for inserting query into SearchView.
|
||||||
|
convertView.setOnClickListener(v -> {
|
||||||
|
searchView.setQuery(query, true); // Insert selected query and submit.
|
||||||
|
});
|
||||||
|
|
||||||
|
// Set long click listener for deletion confirmation.
|
||||||
|
convertView.setOnLongClickListener(v -> {
|
||||||
|
new AlertDialog.Builder(activity)
|
||||||
|
.setTitle(query)
|
||||||
|
.setMessage(str("revanced_settings_search_remove_message"))
|
||||||
|
.setPositiveButton(android.R.string.ok,
|
||||||
|
(dialog, which) -> removeSearchQuery(query))
|
||||||
|
.setNegativeButton(android.R.string.cancel, null)
|
||||||
|
.show();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
return convertView;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -25,6 +25,8 @@ import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehavi
|
|||||||
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.MANUAL_SKIP;
|
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.MANUAL_SKIP;
|
||||||
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.SKIP_AUTOMATICALLY;
|
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.SKIP_AUTOMATICALLY;
|
||||||
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.SKIP_AUTOMATICALLY_ONCE;
|
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.SKIP_AUTOMATICALLY_ONCE;
|
||||||
|
|
||||||
|
import app.revanced.extension.shared.settings.preference.SharedPrefCategory;
|
||||||
import app.revanced.extension.youtube.swipecontrols.SwipeControlsConfigurationProvider.SwipeOverlayStyle;
|
import app.revanced.extension.youtube.swipecontrols.SwipeControlsConfigurationProvider.SwipeOverlayStyle;
|
||||||
|
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
@@ -103,8 +105,9 @@ public class Settings extends BaseSettings {
|
|||||||
public static final BooleanSetting HIDE_MOVIES_SECTION = new BooleanSetting("revanced_hide_movies_section", TRUE);
|
public static final BooleanSetting HIDE_MOVIES_SECTION = new BooleanSetting("revanced_hide_movies_section", TRUE);
|
||||||
public static final BooleanSetting HIDE_NOTIFY_ME_BUTTON = new BooleanSetting("revanced_hide_notify_me_button", TRUE);
|
public static final BooleanSetting HIDE_NOTIFY_ME_BUTTON = new BooleanSetting("revanced_hide_notify_me_button", TRUE);
|
||||||
public static final BooleanSetting HIDE_PLAYABLES = new BooleanSetting("revanced_hide_playables", TRUE);
|
public static final BooleanSetting HIDE_PLAYABLES = new BooleanSetting("revanced_hide_playables", TRUE);
|
||||||
public static final BooleanSetting HIDE_SEARCH_RESULT_RECOMMENDATIONS = new BooleanSetting("revanced_hide_search_result_recommendations", TRUE);
|
public static final BooleanSetting HIDE_SEARCH_RESULT_RECOMMENDATION_LABELS = new BooleanSetting("revanced_hide_search_result_recommendation_labels", TRUE);
|
||||||
public static final BooleanSetting HIDE_SHOW_MORE_BUTTON = new BooleanSetting("revanced_hide_show_more_button", TRUE, true);
|
public static final BooleanSetting HIDE_SHOW_MORE_BUTTON = new BooleanSetting("revanced_hide_show_more_button", TRUE, true);
|
||||||
|
public static final BooleanSetting HIDE_TICKET_SHELF = new BooleanSetting("revanced_hide_ticket_shelf", FALSE);
|
||||||
// Alternative thumbnails
|
// Alternative thumbnails
|
||||||
public static final EnumSetting<ThumbnailOption> ALT_THUMBNAIL_HOME = new EnumSetting<>("revanced_alt_thumbnail_home", ThumbnailOption.ORIGINAL);
|
public static final EnumSetting<ThumbnailOption> ALT_THUMBNAIL_HOME = new EnumSetting<>("revanced_alt_thumbnail_home", ThumbnailOption.ORIGINAL);
|
||||||
public static final EnumSetting<ThumbnailOption> ALT_THUMBNAIL_SUBSCRIPTIONS = new EnumSetting<>("revanced_alt_thumbnail_subscription", ThumbnailOption.ORIGINAL);
|
public static final EnumSetting<ThumbnailOption> ALT_THUMBNAIL_SUBSCRIPTIONS = new EnumSetting<>("revanced_alt_thumbnail_subscription", ThumbnailOption.ORIGINAL);
|
||||||
@@ -139,6 +142,7 @@ public class Settings extends BaseSettings {
|
|||||||
public static final BooleanSetting HIDE_EMERGENCY_BOX = new BooleanSetting("revanced_hide_emergency_box", TRUE);
|
public static final BooleanSetting HIDE_EMERGENCY_BOX = new BooleanSetting("revanced_hide_emergency_box", TRUE);
|
||||||
public static final BooleanSetting HIDE_ENDSCREEN_CARDS = new BooleanSetting("revanced_hide_endscreen_cards", FALSE);
|
public static final BooleanSetting HIDE_ENDSCREEN_CARDS = new BooleanSetting("revanced_hide_endscreen_cards", FALSE);
|
||||||
public static final BooleanSetting HIDE_END_SCREEN_SUGGESTED_VIDEO = new BooleanSetting("revanced_end_screen_suggested_video", FALSE, true);
|
public static final BooleanSetting HIDE_END_SCREEN_SUGGESTED_VIDEO = new BooleanSetting("revanced_end_screen_suggested_video", FALSE, true);
|
||||||
|
public static final BooleanSetting HIDE_RELATED_VIDEO_OVERLAY = new BooleanSetting("revanced_hide_related_video_overlay", FALSE, true);
|
||||||
public static final BooleanSetting HIDE_HIDE_CHANNEL_GUIDELINES = new BooleanSetting("revanced_hide_channel_guidelines", TRUE);
|
public static final BooleanSetting HIDE_HIDE_CHANNEL_GUIDELINES = new BooleanSetting("revanced_hide_channel_guidelines", TRUE);
|
||||||
public static final BooleanSetting HIDE_INFO_PANELS = new BooleanSetting("revanced_hide_info_panels", TRUE);
|
public static final BooleanSetting HIDE_INFO_PANELS = new BooleanSetting("revanced_hide_info_panels", TRUE);
|
||||||
public static final BooleanSetting HIDE_INFO_CARDS = new BooleanSetting("revanced_hide_info_cards", FALSE);
|
public static final BooleanSetting HIDE_INFO_CARDS = new BooleanSetting("revanced_hide_info_cards", FALSE);
|
||||||
@@ -182,6 +186,7 @@ public class Settings extends BaseSettings {
|
|||||||
public static final BooleanSetting HIDE_COMMENTS_THANKS_BUTTON = new BooleanSetting("revanced_hide_comments_thanks_button", TRUE);
|
public static final BooleanSetting HIDE_COMMENTS_THANKS_BUTTON = new BooleanSetting("revanced_hide_comments_thanks_button", TRUE);
|
||||||
// Description
|
// Description
|
||||||
public static final BooleanSetting HIDE_AI_GENERATED_VIDEO_SUMMARY_SECTION = new BooleanSetting("revanced_hide_ai_generated_video_summary_section", FALSE);
|
public static final BooleanSetting HIDE_AI_GENERATED_VIDEO_SUMMARY_SECTION = new BooleanSetting("revanced_hide_ai_generated_video_summary_section", FALSE);
|
||||||
|
public static final BooleanSetting HIDE_ASK_SECTION = new BooleanSetting("revanced_hide_ask_section", FALSE);
|
||||||
public static final BooleanSetting HIDE_ATTRIBUTES_SECTION = new BooleanSetting("revanced_hide_attributes_section", FALSE);
|
public static final BooleanSetting HIDE_ATTRIBUTES_SECTION = new BooleanSetting("revanced_hide_attributes_section", FALSE);
|
||||||
public static final BooleanSetting HIDE_CHAPTERS_SECTION = new BooleanSetting("revanced_hide_chapters_section", TRUE);
|
public static final BooleanSetting HIDE_CHAPTERS_SECTION = new BooleanSetting("revanced_hide_chapters_section", TRUE);
|
||||||
public static final BooleanSetting HIDE_HOW_THIS_WAS_MADE_SECTION = new BooleanSetting("revanced_hide_how_this_was_made_section", FALSE);
|
public static final BooleanSetting HIDE_HOW_THIS_WAS_MADE_SECTION = new BooleanSetting("revanced_hide_how_this_was_made_section", FALSE);
|
||||||
@@ -217,6 +222,8 @@ public class Settings extends BaseSettings {
|
|||||||
|
|
||||||
// General layout
|
// General layout
|
||||||
public static final BooleanSetting RESTORE_OLD_SETTINGS_MENUS = new BooleanSetting("revanced_restore_old_settings_menus", FALSE, true);
|
public static final BooleanSetting RESTORE_OLD_SETTINGS_MENUS = new BooleanSetting("revanced_restore_old_settings_menus", FALSE, true);
|
||||||
|
public static final BooleanSetting SETTINGS_SEARCH_HISTORY = new BooleanSetting("revanced_settings_search_history", TRUE, true);
|
||||||
|
public static final StringSetting SETTINGS_SEARCH_ENTRIES = new StringSetting("revanced_settings_search_entries", "", true);
|
||||||
public static final EnumSetting<FormFactor> CHANGE_FORM_FACTOR = new EnumSetting<>("revanced_change_form_factor", FormFactor.DEFAULT, true, "revanced_change_form_factor_user_dialog_message");
|
public static final EnumSetting<FormFactor> CHANGE_FORM_FACTOR = new EnumSetting<>("revanced_change_form_factor", FormFactor.DEFAULT, true, "revanced_change_form_factor_user_dialog_message");
|
||||||
public static final BooleanSetting BYPASS_IMAGE_REGION_RESTRICTIONS = new BooleanSetting("revanced_bypass_image_region_restrictions", FALSE, true);
|
public static final BooleanSetting BYPASS_IMAGE_REGION_RESTRICTIONS = new BooleanSetting("revanced_bypass_image_region_restrictions", FALSE, true);
|
||||||
public static final BooleanSetting GRADIENT_LOADING_SCREEN = new BooleanSetting("revanced_gradient_loading_screen", FALSE, true);
|
public static final BooleanSetting GRADIENT_LOADING_SCREEN = new BooleanSetting("revanced_gradient_loading_screen", FALSE, true);
|
||||||
@@ -340,19 +347,17 @@ public class Settings extends BaseSettings {
|
|||||||
public static final BooleanSetting SWIPE_LOWEST_VALUE_ENABLE_AUTO_BRIGHTNESS = new BooleanSetting("revanced_swipe_lowest_value_enable_auto_brightness", FALSE, true, parent(SWIPE_BRIGHTNESS));
|
public static final BooleanSetting SWIPE_LOWEST_VALUE_ENABLE_AUTO_BRIGHTNESS = new BooleanSetting("revanced_swipe_lowest_value_enable_auto_brightness", FALSE, true, parent(SWIPE_BRIGHTNESS));
|
||||||
|
|
||||||
// ReturnYoutubeDislike
|
// ReturnYoutubeDislike
|
||||||
public static final BooleanSetting RYD_ENABLED = new BooleanSetting("ryd_enabled", TRUE);
|
public static final BooleanSetting RYD_ENABLED = new BooleanSetting("revanced_ryd_enabled", TRUE);
|
||||||
public static final StringSetting RYD_USER_ID = new StringSetting("ryd_user_id", "", false, false);
|
public static final StringSetting RYD_USER_ID = new StringSetting("revanced_ryd_user_id", "", false, false);
|
||||||
public static final BooleanSetting RYD_SHORTS = new BooleanSetting("ryd_shorts", TRUE, parent(RYD_ENABLED));
|
public static final BooleanSetting RYD_SHORTS = new BooleanSetting("revanced_ryd_shorts", TRUE, parent(RYD_ENABLED));
|
||||||
public static final BooleanSetting RYD_DISLIKE_PERCENTAGE = new BooleanSetting("ryd_dislike_percentage", FALSE, parent(RYD_ENABLED));
|
public static final BooleanSetting RYD_DISLIKE_PERCENTAGE = new BooleanSetting("revanced_ryd_dislike_percentage", FALSE, true, parent(RYD_ENABLED));
|
||||||
public static final BooleanSetting RYD_COMPACT_LAYOUT = new BooleanSetting("ryd_compact_layout", FALSE, parent(RYD_ENABLED));
|
public static final BooleanSetting RYD_COMPACT_LAYOUT = new BooleanSetting("revanced_ryd_compact_layout", FALSE, true, parent(RYD_ENABLED));
|
||||||
public static final BooleanSetting RYD_ESTIMATED_LIKE = new BooleanSetting("ryd_estimated_like", TRUE, parent(RYD_ENABLED));
|
public static final BooleanSetting RYD_ESTIMATED_LIKE = new BooleanSetting("revanced_ryd_estimated_like", TRUE, true, parent(RYD_ENABLED));
|
||||||
public static final BooleanSetting RYD_TOAST_ON_CONNECTION_ERROR = new BooleanSetting("ryd_toast_on_connection_error", TRUE, parent(RYD_ENABLED));
|
public static final BooleanSetting RYD_TOAST_ON_CONNECTION_ERROR = new BooleanSetting("revanced_ryd_toast_on_connection_error", TRUE, parent(RYD_ENABLED));
|
||||||
|
|
||||||
// SponsorBlock
|
// SponsorBlock
|
||||||
public static final BooleanSetting SB_ENABLED = new BooleanSetting("sb_enabled", TRUE);
|
public static final BooleanSetting SB_ENABLED = new BooleanSetting("sb_enabled", TRUE);
|
||||||
/**
|
/** Do not use id setting directly. Instead use {@link SponsorBlockSettings}. */
|
||||||
* Do not use directly, instead use {@link SponsorBlockSettings}
|
|
||||||
*/
|
|
||||||
public static final StringSetting SB_PRIVATE_USER_ID = new StringSetting("sb_private_user_id_Do_Not_Share", "");
|
public static final StringSetting SB_PRIVATE_USER_ID = new StringSetting("sb_private_user_id_Do_Not_Share", "");
|
||||||
public static final IntegerSetting SB_CREATE_NEW_SEGMENT_STEP = new IntegerSetting("sb_create_new_segment_step", 150, parent(SB_ENABLED));
|
public static final IntegerSetting SB_CREATE_NEW_SEGMENT_STEP = new IntegerSetting("sb_create_new_segment_step", 150, parent(SB_ENABLED));
|
||||||
public static final BooleanSetting SB_VOTING_BUTTON = new BooleanSetting("sb_voting_button", FALSE, parent(SB_ENABLED));
|
public static final BooleanSetting SB_VOTING_BUTTON = new BooleanSetting("sb_voting_button", FALSE, parent(SB_ENABLED));
|
||||||
@@ -416,12 +421,10 @@ public class Settings extends BaseSettings {
|
|||||||
// region Migration
|
// region Migration
|
||||||
|
|
||||||
migrateOldSettingToNew(DEPRECATED_HIDE_PLAYER_BUTTONS, HIDE_PLAYER_PREVIOUS_NEXT_BUTTONS);
|
migrateOldSettingToNew(DEPRECATED_HIDE_PLAYER_BUTTONS, HIDE_PLAYER_PREVIOUS_NEXT_BUTTONS);
|
||||||
|
|
||||||
migrateOldSettingToNew(DEPRECATED_HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER, HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER);
|
migrateOldSettingToNew(DEPRECATED_HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER, HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER);
|
||||||
|
|
||||||
migrateOldSettingToNew(DEPRECATED_DISABLE_SUGGESTED_VIDEO_END_SCREEN, HIDE_END_SCREEN_SUGGESTED_VIDEO);
|
migrateOldSettingToNew(DEPRECATED_DISABLE_SUGGESTED_VIDEO_END_SCREEN, HIDE_END_SCREEN_SUGGESTED_VIDEO);
|
||||||
|
|
||||||
migrateOldSettingToNew(DEPRECATED_RESTORE_OLD_VIDEO_QUALITY_MENU, ADVANCED_VIDEO_QUALITY_MENU);
|
migrateOldSettingToNew(DEPRECATED_RESTORE_OLD_VIDEO_QUALITY_MENU, ADVANCED_VIDEO_QUALITY_MENU);
|
||||||
|
migrateOldSettingToNew(DEPRECATED_AUTO_CAPTIONS, DISABLE_AUTO_CAPTIONS);
|
||||||
|
|
||||||
// Migrate renamed enum.
|
// Migrate renamed enum.
|
||||||
//noinspection deprecation
|
//noinspection deprecation
|
||||||
@@ -464,10 +467,15 @@ public class Settings extends BaseSettings {
|
|||||||
SPOOF_APP_VERSION_TARGET.resetToDefault();
|
SPOOF_APP_VERSION_TARGET.resetToDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!DEPRECATED_AUTO_CAPTIONS.isSetToDefault()) {
|
// RYD requires manually migrating old settings since the lack of
|
||||||
DISABLE_AUTO_CAPTIONS.save(true);
|
// a "revanced_" on the old setting causes duplicate key exceptions during export.
|
||||||
DEPRECATED_AUTO_CAPTIONS.resetToDefault();
|
SharedPrefCategory revancedPrefs = Setting.preferences;
|
||||||
}
|
Setting.migrateFromOldPreferences(revancedPrefs, RYD_USER_ID, "ryd_user_id");
|
||||||
|
Setting.migrateFromOldPreferences(revancedPrefs, RYD_ENABLED, "ryd_enabled");
|
||||||
|
Setting.migrateFromOldPreferences(revancedPrefs, RYD_DISLIKE_PERCENTAGE, "ryd_dislike_percentage");
|
||||||
|
Setting.migrateFromOldPreferences(revancedPrefs, RYD_COMPACT_LAYOUT, "ryd_compact_layout");
|
||||||
|
Setting.migrateFromOldPreferences(revancedPrefs, RYD_ESTIMATED_LIKE, "ryd_estimated_like");
|
||||||
|
Setting.migrateFromOldPreferences(revancedPrefs, RYD_TOAST_ON_CONNECTION_ERROR, "ryd_toast_on_connection_error");
|
||||||
|
|
||||||
// endregion
|
// endregion
|
||||||
|
|
||||||
@@ -478,4 +486,3 @@ public class Settings extends BaseSettings {
|
|||||||
// endregion
|
// endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,23 +1,15 @@
|
|||||||
package app.revanced.extension.youtube.settings.preference;
|
package app.revanced.extension.youtube.settings.preference;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
|
||||||
import android.net.Uri;
|
|
||||||
import android.preference.Preference;
|
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows tapping the DeArrow about preference to open the DeArrow website.
|
* Allows tapping the DeArrow about preference to open the DeArrow website.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings({"unused", "deprecation"})
|
@SuppressWarnings("unused")
|
||||||
public class AlternativeThumbnailsAboutDeArrowPreference extends Preference {
|
public class AlternativeThumbnailsAboutDeArrowPreference extends UrlLinkPreference {
|
||||||
{
|
{
|
||||||
setOnPreferenceClickListener(pref -> {
|
externalUrl = "https://dearrow.ajay.app";
|
||||||
Intent i = new Intent(Intent.ACTION_VIEW);
|
|
||||||
i.setData(Uri.parse("https://dearrow.ajay.app"));
|
|
||||||
pref.getContext().startActivity(i);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public AlternativeThumbnailsAboutDeArrowPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
public AlternativeThumbnailsAboutDeArrowPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
package app.revanced.extension.youtube.settings.preference;
|
||||||
|
|
||||||
|
import static app.revanced.extension.shared.StringRef.sf;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.preference.ListPreference;
|
||||||
|
import android.util.AttributeSet;
|
||||||
|
|
||||||
|
import app.revanced.extension.youtube.patches.playback.speed.CustomPlaybackSpeedPatch;
|
||||||
|
import app.revanced.extension.youtube.settings.Settings;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom video speeds used by {@link CustomPlaybackSpeedPatch}.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({"unused", "deprecation"})
|
||||||
|
public final class CustomVideoSpeedListPreference extends ListPreference {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize a settings preference list with the available playback speeds.
|
||||||
|
*/
|
||||||
|
private void initializeEntryValues() {
|
||||||
|
float[] customPlaybackSpeeds = CustomPlaybackSpeedPatch.customPlaybackSpeeds;
|
||||||
|
final int numberOfEntries = customPlaybackSpeeds.length + 1;
|
||||||
|
String[] preferenceListEntries = new String[numberOfEntries];
|
||||||
|
String[] preferenceListEntryValues = new String[numberOfEntries];
|
||||||
|
|
||||||
|
// Auto speed (same behavior as unpatched).
|
||||||
|
preferenceListEntries[0] = sf("revanced_custom_playback_speeds_auto").toString();
|
||||||
|
preferenceListEntryValues[0] = String.valueOf(Settings.PLAYBACK_SPEED_DEFAULT.defaultValue);
|
||||||
|
|
||||||
|
int i = 1;
|
||||||
|
for (float speed : customPlaybackSpeeds) {
|
||||||
|
String speedString = String.valueOf(speed);
|
||||||
|
preferenceListEntries[i] = speedString + "x";
|
||||||
|
preferenceListEntryValues[i] = speedString;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
setEntries(preferenceListEntries);
|
||||||
|
setEntryValues(preferenceListEntryValues);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
initializeEntryValues();
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomVideoSpeedListPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||||
|
super(context, attrs, defStyleAttr, defStyleRes);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomVideoSpeedListPreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||||
|
super(context, attrs, defStyleAttr);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomVideoSpeedListPreference(Context context, AttributeSet attrs) {
|
||||||
|
super(context, attrs);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomVideoSpeedListPreference(Context context) {
|
||||||
|
super(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,12 +19,15 @@ public class HtmlPreference extends Preference {
|
|||||||
public HtmlPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
public HtmlPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||||
super(context, attrs, defStyleAttr, defStyleRes);
|
super(context, attrs, defStyleAttr, defStyleRes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public HtmlPreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
public HtmlPreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||||
super(context, attrs, defStyleAttr);
|
super(context, attrs, defStyleAttr);
|
||||||
}
|
}
|
||||||
|
|
||||||
public HtmlPreference(Context context, AttributeSet attrs) {
|
public HtmlPreference(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
public HtmlPreference(Context context) {
|
public HtmlPreference(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package app.revanced.extension.youtube.settings.preference;
|
package app.revanced.extension.youtube.settings.preference;
|
||||||
|
|
||||||
|
import static app.revanced.extension.shared.StringRef.str;
|
||||||
import static app.revanced.extension.shared.Utils.getResourceIdentifier;
|
import static app.revanced.extension.shared.Utils.getResourceIdentifier;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
@@ -9,34 +10,66 @@ import android.graphics.drawable.Drawable;
|
|||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.preference.ListPreference;
|
import android.preference.ListPreference;
|
||||||
import android.preference.Preference;
|
import android.preference.Preference;
|
||||||
|
import android.preference.PreferenceCategory;
|
||||||
|
import android.preference.PreferenceGroup;
|
||||||
import android.preference.PreferenceScreen;
|
import android.preference.PreferenceScreen;
|
||||||
import android.util.Pair;
|
import android.preference.SwitchPreference;
|
||||||
|
import android.text.SpannableStringBuilder;
|
||||||
|
import android.text.TextUtils;
|
||||||
|
import android.text.style.BackgroundColorSpan;
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.WindowInsets;
|
import android.view.WindowInsets;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toolbar;
|
import android.widget.Toolbar;
|
||||||
|
|
||||||
|
import androidx.annotation.CallSuper;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import java.util.ArrayDeque;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Deque;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import app.revanced.extension.shared.Logger;
|
import app.revanced.extension.shared.Logger;
|
||||||
import app.revanced.extension.shared.Utils;
|
import app.revanced.extension.shared.Utils;
|
||||||
import app.revanced.extension.shared.settings.BaseSettings;
|
import app.revanced.extension.shared.settings.BaseSettings;
|
||||||
import app.revanced.extension.shared.settings.EnumSetting;
|
|
||||||
import app.revanced.extension.shared.settings.preference.AbstractPreferenceFragment;
|
import app.revanced.extension.shared.settings.preference.AbstractPreferenceFragment;
|
||||||
|
import app.revanced.extension.shared.settings.preference.NoTitlePreferenceCategory;
|
||||||
import app.revanced.extension.youtube.ThemeHelper;
|
import app.revanced.extension.youtube.ThemeHelper;
|
||||||
import app.revanced.extension.youtube.patches.playback.speed.CustomPlaybackSpeedPatch;
|
|
||||||
import app.revanced.extension.youtube.settings.LicenseActivityHook;
|
import app.revanced.extension.youtube.settings.LicenseActivityHook;
|
||||||
import app.revanced.extension.youtube.settings.Settings;
|
import app.revanced.extension.youtube.sponsorblock.ui.SponsorBlockPreferenceGroup;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Preference fragment for ReVanced settings.
|
* Preference fragment for ReVanced settings.
|
||||||
*
|
|
||||||
* @noinspection deprecation
|
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
public class ReVancedPreferenceFragment extends AbstractPreferenceFragment {
|
public class ReVancedPreferenceFragment extends AbstractPreferenceFragment {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The main PreferenceScreen used to display the current set of preferences.
|
||||||
|
* This screen is manipulated during initialization and filtering to show or hide preferences.
|
||||||
|
*/
|
||||||
|
private PreferenceScreen preferenceScreen;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A copy of the original PreferenceScreen created during initialization.
|
||||||
|
* Used to restore the preference structure to its initial state after filtering or other modifications.
|
||||||
|
*/
|
||||||
|
private PreferenceScreen originalPreferenceScreen;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used for searching preferences. A Collection of all preferences including nested preferences.
|
||||||
|
* Root preferences are excluded (no need to search what's on the root screen),
|
||||||
|
* but their sub preferences are included.
|
||||||
|
*/
|
||||||
|
private final List<AbstractPreferenceSearchData<?>> allPreferences = new ArrayList<>();
|
||||||
|
|
||||||
@SuppressLint("UseCompatLoadingForDrawables")
|
@SuppressLint("UseCompatLoadingForDrawables")
|
||||||
public static Drawable getBackButtonDrawable() {
|
public static Drawable getBackButtonDrawable() {
|
||||||
final int backButtonResource = getResourceIdentifier(ThemeHelper.isDarkTheme()
|
final int backButtonResource = getResourceIdentifier(ThemeHelper.isDarkTheme()
|
||||||
@@ -47,85 +80,140 @@ public class ReVancedPreferenceFragment extends AbstractPreferenceFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sorts a preference list by menu entries, but preserves the first value as the first entry.
|
* Initializes the preference fragment, copying the original screen to allow full restoration.
|
||||||
*
|
|
||||||
* @noinspection SameParameterValue
|
|
||||||
*/
|
*/
|
||||||
private static void sortListPreferenceByValues(ListPreference listPreference, int firstEntriesToPreserve) {
|
|
||||||
CharSequence[] entries = listPreference.getEntries();
|
|
||||||
CharSequence[] entryValues = listPreference.getEntryValues();
|
|
||||||
final int entrySize = entries.length;
|
|
||||||
|
|
||||||
if (entrySize != entryValues.length) {
|
|
||||||
// Xml array declaration has a missing/extra entry.
|
|
||||||
throw new IllegalStateException();
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Pair<String, String>> firstPairs = new ArrayList<>(firstEntriesToPreserve);
|
|
||||||
List<Pair<String, String>> pairsToSort = new ArrayList<>(entrySize);
|
|
||||||
|
|
||||||
for (int i = 0; i < entrySize; i++) {
|
|
||||||
Pair<String, String> pair = new Pair<>(entries[i].toString(), entryValues[i].toString());
|
|
||||||
if (i < firstEntriesToPreserve) {
|
|
||||||
firstPairs.add(pair);
|
|
||||||
} else {
|
|
||||||
pairsToSort.add(pair);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pairsToSort.sort((pair1, pair2)
|
|
||||||
-> pair1.first.compareToIgnoreCase(pair2.first));
|
|
||||||
|
|
||||||
CharSequence[] sortedEntries = new CharSequence[entrySize];
|
|
||||||
CharSequence[] sortedEntryValues = new CharSequence[entrySize];
|
|
||||||
|
|
||||||
int i = 0;
|
|
||||||
for (Pair<String, String> pair : firstPairs) {
|
|
||||||
sortedEntries[i] = pair.first;
|
|
||||||
sortedEntryValues[i] = pair.second;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Pair<String, String> pair : pairsToSort) {
|
|
||||||
sortedEntries[i] = pair.first;
|
|
||||||
sortedEntryValues[i] = pair.second;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
listPreference.setEntries(sortedEntries);
|
|
||||||
listPreference.setEntryValues(sortedEntryValues);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void initialize() {
|
protected void initialize() {
|
||||||
super.initialize();
|
super.initialize();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
setPreferenceScreenToolbar(getPreferenceScreen());
|
preferenceScreen = getPreferenceScreen();
|
||||||
|
Utils.sortPreferenceGroups(preferenceScreen);
|
||||||
|
|
||||||
// If the preference was included, then initialize it based on the available playback speed.
|
// Store the original structure for restoration after filtering.
|
||||||
Preference preference = findPreference(Settings.PLAYBACK_SPEED_DEFAULT.key);
|
originalPreferenceScreen = getPreferenceManager().createPreferenceScreen(getContext());
|
||||||
if (preference instanceof ListPreference playbackPreference) {
|
for (int i = 0, count = preferenceScreen.getPreferenceCount(); i < count; i++) {
|
||||||
CustomPlaybackSpeedPatch.initializeListPreference(playbackPreference);
|
originalPreferenceScreen.addPreference(preferenceScreen.getPreference(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
sortPreferenceListMenu(Settings.CHANGE_START_PAGE);
|
setPreferenceScreenToolbar(preferenceScreen);
|
||||||
sortPreferenceListMenu(Settings.SPOOF_VIDEO_STREAMS_LANGUAGE);
|
|
||||||
sortPreferenceListMenu(BaseSettings.REVANCED_LANGUAGE);
|
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.printException(() -> "initialize failure", ex);
|
Logger.printException(() -> "initialize failure", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sortPreferenceListMenu(EnumSetting<?> setting) {
|
/**
|
||||||
Preference preference = findPreference(setting.key);
|
* Called when the fragment starts, ensuring all preferences are collected after initialization.
|
||||||
if (preference instanceof ListPreference languagePreference) {
|
*/
|
||||||
sortListPreferenceByValues(languagePreference, 1);
|
@Override
|
||||||
|
public void onStart() {
|
||||||
|
super.onStart();
|
||||||
|
try {
|
||||||
|
if (allPreferences.isEmpty()) {
|
||||||
|
// Must collect preferences on start and not in initialize since
|
||||||
|
// legacy SB settings are not loaded yet.
|
||||||
|
Logger.printDebug(() -> "Collecting preferences to search");
|
||||||
|
|
||||||
|
// Do not show root menu preferences in search results.
|
||||||
|
// Instead search for everything that's not shown when search is not active.
|
||||||
|
collectPreferences(preferenceScreen, 1, 0);
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Logger.printException(() -> "onStart failure", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recursively collects all preferences from the screen or group.
|
||||||
|
* @param includeDepth Menu depth to start including preferences.
|
||||||
|
* A value of 0 adds all preferences.
|
||||||
|
*/
|
||||||
|
private void collectPreferences(PreferenceGroup group, int includeDepth, int currentDepth) {
|
||||||
|
for (int i = 0, count = group.getPreferenceCount(); i < count; i++) {
|
||||||
|
Preference preference = group.getPreference(i);
|
||||||
|
if (includeDepth <= currentDepth && !(preference instanceof PreferenceCategory)
|
||||||
|
&& !(preference instanceof SponsorBlockPreferenceGroup)) {
|
||||||
|
|
||||||
|
AbstractPreferenceSearchData<?> data;
|
||||||
|
if (preference instanceof SwitchPreference switchPref) {
|
||||||
|
data = new SwitchPreferenceSearchData(switchPref);
|
||||||
|
} else if (preference instanceof ListPreference listPref) {
|
||||||
|
data = new ListPreferenceSearchData(listPref);
|
||||||
|
} else {
|
||||||
|
data = new PreferenceSearchData(preference);
|
||||||
|
}
|
||||||
|
|
||||||
|
allPreferences.add(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (preference instanceof PreferenceGroup subGroup) {
|
||||||
|
collectPreferences(subGroup, includeDepth, currentDepth + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filters the preferences using the given query string and applies highlighting.
|
||||||
|
*/
|
||||||
|
public void filterPreferences(String query) {
|
||||||
|
preferenceScreen.removeAll();
|
||||||
|
|
||||||
|
if (TextUtils.isEmpty(query)) {
|
||||||
|
// Restore original preferences and their titles/summaries/entries.
|
||||||
|
for (int i = 0, count = originalPreferenceScreen.getPreferenceCount(); i < count; i++) {
|
||||||
|
preferenceScreen.addPreference(originalPreferenceScreen.getPreference(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (AbstractPreferenceSearchData<?> data : allPreferences) {
|
||||||
|
data.clearHighlighting();
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Navigation path -> Category
|
||||||
|
Map<String, PreferenceCategory> categoryMap = new HashMap<>();
|
||||||
|
String queryLower = Utils.removePunctuationToLowercase(query);
|
||||||
|
|
||||||
|
Pattern queryPattern = Pattern.compile(Pattern.quote(Utils.removePunctuationToLowercase(query)),
|
||||||
|
Pattern.CASE_INSENSITIVE);
|
||||||
|
|
||||||
|
for (AbstractPreferenceSearchData<?> data : allPreferences) {
|
||||||
|
if (data.matchesSearchQuery(queryLower)) {
|
||||||
|
data.applyHighlighting(queryLower, queryPattern);
|
||||||
|
|
||||||
|
String navigationPath = data.navigationPath;
|
||||||
|
PreferenceCategory group = categoryMap.computeIfAbsent(navigationPath, key -> {
|
||||||
|
PreferenceCategory newGroup = new PreferenceCategory(preferenceScreen.getContext());
|
||||||
|
newGroup.setTitle(navigationPath);
|
||||||
|
preferenceScreen.addPreference(newGroup);
|
||||||
|
return newGroup;
|
||||||
|
});
|
||||||
|
group.addPreference(data.preference);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Show 'No results found' if search results are empty.
|
||||||
|
if (categoryMap.isEmpty()) {
|
||||||
|
Preference noResultsPreference = new Preference(preferenceScreen.getContext());
|
||||||
|
noResultsPreference.setTitle(str("revanced_settings_search_no_results_title", query));
|
||||||
|
noResultsPreference.setSummary(str("revanced_settings_search_no_results_summary"));
|
||||||
|
noResultsPreference.setSelectable(false);
|
||||||
|
// Set icon for the placeholder preference.
|
||||||
|
noResultsPreference.setLayoutResource(getResourceIdentifier(
|
||||||
|
"revanced_preference_with_icon_no_search_result", "layout"));
|
||||||
|
noResultsPreference.setIcon(getResourceIdentifier(
|
||||||
|
ThemeHelper.isDarkTheme() ? "yt_outline_search_white_24" : "yt_outline_search_black_24",
|
||||||
|
"drawable"));
|
||||||
|
preferenceScreen.addPreference(noResultsPreference);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets toolbar for all nested preference screens.
|
||||||
|
*/
|
||||||
private void setPreferenceScreenToolbar(PreferenceScreen parentScreen) {
|
private void setPreferenceScreenToolbar(PreferenceScreen parentScreen) {
|
||||||
for (int i = 0, preferenceCount = parentScreen.getPreferenceCount(); i < preferenceCount; i++) {
|
for (int i = 0, count = parentScreen.getPreferenceCount(); i < count; i++) {
|
||||||
Preference childPreference = parentScreen.getPreference(i);
|
Preference childPreference = parentScreen.getPreference(i);
|
||||||
if (childPreference instanceof PreferenceScreen) {
|
if (childPreference instanceof PreferenceScreen) {
|
||||||
// Recursively set sub preferences.
|
// Recursively set sub preferences.
|
||||||
@@ -156,6 +244,7 @@ public class ReVancedPreferenceFragment extends AbstractPreferenceFragment {
|
|||||||
toolbar.setTitle(childScreen.getTitle());
|
toolbar.setTitle(childScreen.getTitle());
|
||||||
toolbar.setNavigationIcon(getBackButtonDrawable());
|
toolbar.setNavigationIcon(getBackButtonDrawable());
|
||||||
toolbar.setNavigationOnClickListener(view -> preferenceScreenDialog.dismiss());
|
toolbar.setNavigationOnClickListener(view -> preferenceScreenDialog.dismiss());
|
||||||
|
|
||||||
final int margin = (int) TypedValue.applyDimension(
|
final int margin = (int) TypedValue.applyDimension(
|
||||||
TypedValue.COMPLEX_UNIT_DIP, 16, getResources().getDisplayMetrics()
|
TypedValue.COMPLEX_UNIT_DIP, 16, getResources().getDisplayMetrics()
|
||||||
);
|
);
|
||||||
@@ -177,3 +266,271 @@ public class ReVancedPreferenceFragment extends AbstractPreferenceFragment {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
class AbstractPreferenceSearchData<T extends Preference> {
|
||||||
|
/**
|
||||||
|
* @return The navigation path for the given preference, such as "Player > Action buttons".
|
||||||
|
*/
|
||||||
|
private static String getPreferenceNavigationString(Preference preference) {
|
||||||
|
Deque<CharSequence> pathElements = new ArrayDeque<>();
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
preference = preference.getParent();
|
||||||
|
|
||||||
|
if (preference == null) {
|
||||||
|
if (pathElements.isEmpty()) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
Locale locale = BaseSettings.REVANCED_LANGUAGE.get().getLocale();
|
||||||
|
return Utils.getTextDirectionString(locale) + String.join(" > ", pathElements);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(preference instanceof NoTitlePreferenceCategory)
|
||||||
|
&& !(preference instanceof SponsorBlockPreferenceGroup)) {
|
||||||
|
CharSequence title = preference.getTitle();
|
||||||
|
if (title != null && title.length() > 0) {
|
||||||
|
pathElements.addFirst(title);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Highlights the search query in the given text by applying color span.
|
||||||
|
* @param text The original text to process.
|
||||||
|
* @param queryPattern The search query to highlight.
|
||||||
|
* @return The text with highlighted query matches as a SpannableStringBuilder.
|
||||||
|
*/
|
||||||
|
static CharSequence highlightSearchQuery(CharSequence text, Pattern queryPattern) {
|
||||||
|
if (TextUtils.isEmpty(text)) {
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
final int baseColor = ThemeHelper.getBackgroundColor();
|
||||||
|
final int adjustedColor = ThemeHelper.isDarkTheme()
|
||||||
|
? ThemeHelper.adjustColorBrightness(baseColor, 1.20f) // Lighten for dark theme.
|
||||||
|
: ThemeHelper.adjustColorBrightness(baseColor, 0.95f); // Darken for light theme.
|
||||||
|
BackgroundColorSpan highlightSpan = new BackgroundColorSpan(adjustedColor);
|
||||||
|
|
||||||
|
SpannableStringBuilder spannable = new SpannableStringBuilder(text);
|
||||||
|
Matcher matcher = queryPattern.matcher(text);
|
||||||
|
|
||||||
|
while (matcher.find()) {
|
||||||
|
spannable.setSpan(
|
||||||
|
highlightSpan,
|
||||||
|
matcher.start(),
|
||||||
|
matcher.end(),
|
||||||
|
SpannableStringBuilder.SPAN_EXCLUSIVE_EXCLUSIVE
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return spannable;
|
||||||
|
}
|
||||||
|
|
||||||
|
final T preference;
|
||||||
|
final String key;
|
||||||
|
final String navigationPath;
|
||||||
|
boolean highlightingApplied;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
CharSequence originalTitle;
|
||||||
|
@Nullable
|
||||||
|
String searchTitle;
|
||||||
|
|
||||||
|
AbstractPreferenceSearchData(T pref) {
|
||||||
|
preference = pref;
|
||||||
|
key = Utils.removePunctuationToLowercase(pref.getKey());
|
||||||
|
navigationPath = getPreferenceNavigationString(pref);
|
||||||
|
}
|
||||||
|
|
||||||
|
@CallSuper
|
||||||
|
void updateSearchDataIfNeeded() {
|
||||||
|
if (highlightingApplied) {
|
||||||
|
// Must clear, otherwise old highlighting is still applied.
|
||||||
|
clearHighlighting();
|
||||||
|
}
|
||||||
|
|
||||||
|
CharSequence title = preference.getTitle();
|
||||||
|
if (originalTitle != title) { // Check using reference equality.
|
||||||
|
originalTitle = title;
|
||||||
|
searchTitle = Utils.removePunctuationToLowercase(title);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@CallSuper
|
||||||
|
boolean matchesSearchQuery(String query) {
|
||||||
|
updateSearchDataIfNeeded();
|
||||||
|
|
||||||
|
return key.contains(query)
|
||||||
|
|| searchTitle != null && searchTitle.contains(query);
|
||||||
|
}
|
||||||
|
|
||||||
|
@CallSuper
|
||||||
|
void applyHighlighting(String query, Pattern queryPattern) {
|
||||||
|
preference.setTitle(highlightSearchQuery(originalTitle, queryPattern));
|
||||||
|
highlightingApplied = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@CallSuper
|
||||||
|
void clearHighlighting() {
|
||||||
|
if (highlightingApplied) {
|
||||||
|
preference.setTitle(originalTitle);
|
||||||
|
highlightingApplied = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Regular preference type that only uses the base preference summary.
|
||||||
|
* Should only be used if a more specific data class does not exist.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
class PreferenceSearchData extends AbstractPreferenceSearchData<Preference> {
|
||||||
|
@Nullable
|
||||||
|
CharSequence originalSummary;
|
||||||
|
@Nullable
|
||||||
|
String searchSummary;
|
||||||
|
|
||||||
|
PreferenceSearchData(Preference pref) {
|
||||||
|
super(pref);
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateSearchDataIfNeeded() {
|
||||||
|
super.updateSearchDataIfNeeded();
|
||||||
|
|
||||||
|
CharSequence summary = preference.getSummary();
|
||||||
|
if (originalSummary != summary) {
|
||||||
|
originalSummary = summary;
|
||||||
|
searchSummary = Utils.removePunctuationToLowercase(summary);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean matchesSearchQuery(String query) {
|
||||||
|
return super.matchesSearchQuery(query)
|
||||||
|
|| searchSummary != null && searchSummary.contains(query);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void applyHighlighting(String query, Pattern queryPattern) {
|
||||||
|
super.applyHighlighting(query, queryPattern);
|
||||||
|
|
||||||
|
preference.setSummary(highlightSearchQuery(originalSummary, queryPattern));
|
||||||
|
}
|
||||||
|
|
||||||
|
@CallSuper
|
||||||
|
void clearHighlighting() {
|
||||||
|
super.clearHighlighting();
|
||||||
|
|
||||||
|
preference.setSummary(originalSummary);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Switch preference type that uses summaryOn and summaryOff.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
class SwitchPreferenceSearchData extends AbstractPreferenceSearchData<SwitchPreference> {
|
||||||
|
@Nullable
|
||||||
|
CharSequence originalSummaryOn, originalSummaryOff;
|
||||||
|
@Nullable
|
||||||
|
String searchSummaryOn, searchSummaryOff;
|
||||||
|
|
||||||
|
SwitchPreferenceSearchData(SwitchPreference pref) {
|
||||||
|
super(pref);
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateSearchDataIfNeeded() {
|
||||||
|
super.updateSearchDataIfNeeded();
|
||||||
|
|
||||||
|
CharSequence summaryOn = preference.getSummaryOn();
|
||||||
|
if (originalSummaryOn != summaryOn) {
|
||||||
|
originalSummaryOn = summaryOn;
|
||||||
|
searchSummaryOn = Utils.removePunctuationToLowercase(summaryOn);
|
||||||
|
}
|
||||||
|
|
||||||
|
CharSequence summaryOff = preference.getSummaryOff();
|
||||||
|
if (originalSummaryOff != summaryOff) {
|
||||||
|
originalSummaryOff = summaryOff;
|
||||||
|
searchSummaryOff = Utils.removePunctuationToLowercase(summaryOff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean matchesSearchQuery(String query) {
|
||||||
|
return super.matchesSearchQuery(query)
|
||||||
|
|| searchSummaryOn != null && searchSummaryOn.contains(query)
|
||||||
|
|| searchSummaryOff != null && searchSummaryOff.contains(query);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void applyHighlighting(String query, Pattern queryPattern) {
|
||||||
|
super.applyHighlighting(query, queryPattern);
|
||||||
|
|
||||||
|
preference.setSummaryOn(highlightSearchQuery(originalSummaryOn, queryPattern));
|
||||||
|
preference.setSummaryOff(highlightSearchQuery(originalSummaryOff, queryPattern));
|
||||||
|
}
|
||||||
|
|
||||||
|
@CallSuper
|
||||||
|
void clearHighlighting() {
|
||||||
|
super.clearHighlighting();
|
||||||
|
|
||||||
|
preference.setSummaryOn(originalSummaryOn);
|
||||||
|
preference.setSummaryOff(originalSummaryOff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List preference type that uses entries.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
class ListPreferenceSearchData extends AbstractPreferenceSearchData<ListPreference> {
|
||||||
|
@Nullable
|
||||||
|
CharSequence[] originalEntries;
|
||||||
|
@Nullable
|
||||||
|
String searchEntries;
|
||||||
|
|
||||||
|
ListPreferenceSearchData(ListPreference pref) {
|
||||||
|
super(pref);
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateSearchDataIfNeeded() {
|
||||||
|
super.updateSearchDataIfNeeded();
|
||||||
|
|
||||||
|
CharSequence[] entries = preference.getEntries();
|
||||||
|
if (originalEntries != entries) {
|
||||||
|
originalEntries = entries;
|
||||||
|
searchEntries = Utils.removePunctuationToLowercase(String.join(" ", entries));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean matchesSearchQuery(String query) {
|
||||||
|
return super.matchesSearchQuery(query)
|
||||||
|
|| searchEntries != null && searchEntries.contains(query);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void applyHighlighting(String query, Pattern queryPattern) {
|
||||||
|
super.applyHighlighting(query, queryPattern);
|
||||||
|
|
||||||
|
if (originalEntries != null) {
|
||||||
|
final int length = originalEntries.length;
|
||||||
|
CharSequence[] highlightedEntries = new CharSequence[length];
|
||||||
|
|
||||||
|
for (int i = 0; i < length; i++) {
|
||||||
|
highlightedEntries[i] = highlightSearchQuery(originalEntries[i], queryPattern);
|
||||||
|
|
||||||
|
// Cannot highlight the summary text, because ListPreference uses
|
||||||
|
// the toString() of the summary CharSequence which strips away all formatting.
|
||||||
|
}
|
||||||
|
|
||||||
|
preference.setEntries(highlightedEntries);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@CallSuper
|
||||||
|
void clearHighlighting() {
|
||||||
|
super.clearHighlighting();
|
||||||
|
|
||||||
|
preference.setEntries(originalEntries);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,257 +0,0 @@
|
|||||||
package app.revanced.extension.youtube.settings.preference;
|
|
||||||
|
|
||||||
import static app.revanced.extension.shared.StringRef.str;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.net.Uri;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.preference.Preference;
|
|
||||||
import android.preference.PreferenceCategory;
|
|
||||||
import android.preference.PreferenceFragment;
|
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
import android.preference.PreferenceScreen;
|
|
||||||
import android.preference.SwitchPreference;
|
|
||||||
|
|
||||||
import app.revanced.extension.shared.Logger;
|
|
||||||
import app.revanced.extension.shared.Utils;
|
|
||||||
import app.revanced.extension.shared.settings.Setting;
|
|
||||||
import app.revanced.extension.shared.settings.BaseSettings;
|
|
||||||
import app.revanced.extension.youtube.patches.ReturnYouTubeDislikePatch;
|
|
||||||
import app.revanced.extension.youtube.returnyoutubedislike.ReturnYouTubeDislike;
|
|
||||||
import app.revanced.extension.youtube.returnyoutubedislike.requests.ReturnYouTubeDislikeApi;
|
|
||||||
import app.revanced.extension.youtube.settings.Settings;
|
|
||||||
|
|
||||||
/** @noinspection deprecation*/
|
|
||||||
public class ReturnYouTubeDislikePreferenceFragment extends PreferenceFragment {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If dislikes are shown on Shorts.
|
|
||||||
*/
|
|
||||||
private SwitchPreference shortsPreference;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If dislikes are shown as percentage.
|
|
||||||
*/
|
|
||||||
private SwitchPreference percentagePreference;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If segmented like/dislike button uses smaller compact layout.
|
|
||||||
*/
|
|
||||||
private SwitchPreference compactLayoutPreference;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If hidden likes are replaced with an estimated value.
|
|
||||||
*/
|
|
||||||
private SwitchPreference estimatedLikesPreference;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If segmented like/dislike button uses smaller compact layout.
|
|
||||||
*/
|
|
||||||
private SwitchPreference toastOnRYDNotAvailable;
|
|
||||||
|
|
||||||
private void updateUIState() {
|
|
||||||
shortsPreference.setEnabled(Settings.RYD_SHORTS.isAvailable());
|
|
||||||
percentagePreference.setEnabled(Settings.RYD_DISLIKE_PERCENTAGE.isAvailable());
|
|
||||||
compactLayoutPreference.setEnabled(Settings.RYD_COMPACT_LAYOUT.isAvailable());
|
|
||||||
estimatedLikesPreference.setEnabled(Settings.RYD_ESTIMATED_LIKE.isAvailable());
|
|
||||||
toastOnRYDNotAvailable.setEnabled(Settings.RYD_TOAST_ON_CONNECTION_ERROR.isAvailable());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
try {
|
|
||||||
Activity context = getActivity();
|
|
||||||
PreferenceManager manager = getPreferenceManager();
|
|
||||||
manager.setSharedPreferencesName(Setting.preferences.name);
|
|
||||||
PreferenceScreen preferenceScreen = manager.createPreferenceScreen(context);
|
|
||||||
setPreferenceScreen(preferenceScreen);
|
|
||||||
|
|
||||||
SwitchPreference enabledPreference = new SwitchPreference(context);
|
|
||||||
enabledPreference.setChecked(Settings.RYD_ENABLED.get());
|
|
||||||
enabledPreference.setTitle(str("revanced_ryd_enable_title"));
|
|
||||||
enabledPreference.setSummaryOn(str("revanced_ryd_enable_summary_on"));
|
|
||||||
enabledPreference.setSummaryOff(str("revanced_ryd_enable_summary_off"));
|
|
||||||
enabledPreference.setOnPreferenceChangeListener((pref, newValue) -> {
|
|
||||||
final Boolean rydIsEnabled = (Boolean) newValue;
|
|
||||||
Settings.RYD_ENABLED.save(rydIsEnabled);
|
|
||||||
ReturnYouTubeDislikePatch.onRYDStatusChange(rydIsEnabled);
|
|
||||||
|
|
||||||
updateUIState();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
preferenceScreen.addPreference(enabledPreference);
|
|
||||||
|
|
||||||
shortsPreference = new SwitchPreference(context);
|
|
||||||
shortsPreference.setChecked(Settings.RYD_SHORTS.get());
|
|
||||||
shortsPreference.setTitle(str("revanced_ryd_shorts_title"));
|
|
||||||
String shortsSummary = str("revanced_ryd_shorts_summary_on_disclaimer");
|
|
||||||
shortsPreference.setSummaryOn(shortsSummary);
|
|
||||||
shortsPreference.setSummaryOff(str("revanced_ryd_shorts_summary_off"));
|
|
||||||
shortsPreference.setOnPreferenceChangeListener((pref, newValue) -> {
|
|
||||||
Settings.RYD_SHORTS.save((Boolean) newValue);
|
|
||||||
updateUIState();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
preferenceScreen.addPreference(shortsPreference);
|
|
||||||
|
|
||||||
percentagePreference = new SwitchPreference(context);
|
|
||||||
percentagePreference.setChecked(Settings.RYD_DISLIKE_PERCENTAGE.get());
|
|
||||||
percentagePreference.setTitle(str("revanced_ryd_dislike_percentage_title"));
|
|
||||||
percentagePreference.setSummaryOn(str("revanced_ryd_dislike_percentage_summary_on"));
|
|
||||||
percentagePreference.setSummaryOff(str("revanced_ryd_dislike_percentage_summary_off"));
|
|
||||||
percentagePreference.setOnPreferenceChangeListener((pref, newValue) -> {
|
|
||||||
Settings.RYD_DISLIKE_PERCENTAGE.save((Boolean) newValue);
|
|
||||||
ReturnYouTubeDislike.clearAllUICaches();
|
|
||||||
updateUIState();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
preferenceScreen.addPreference(percentagePreference);
|
|
||||||
|
|
||||||
compactLayoutPreference = new SwitchPreference(context);
|
|
||||||
compactLayoutPreference.setChecked(Settings.RYD_COMPACT_LAYOUT.get());
|
|
||||||
compactLayoutPreference.setTitle(str("revanced_ryd_compact_layout_title"));
|
|
||||||
compactLayoutPreference.setSummaryOn(str("revanced_ryd_compact_layout_summary_on"));
|
|
||||||
compactLayoutPreference.setSummaryOff(str("revanced_ryd_compact_layout_summary_off"));
|
|
||||||
compactLayoutPreference.setOnPreferenceChangeListener((pref, newValue) -> {
|
|
||||||
Settings.RYD_COMPACT_LAYOUT.save((Boolean) newValue);
|
|
||||||
ReturnYouTubeDislike.clearAllUICaches();
|
|
||||||
updateUIState();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
preferenceScreen.addPreference(compactLayoutPreference);
|
|
||||||
|
|
||||||
estimatedLikesPreference = new SwitchPreference(context);
|
|
||||||
estimatedLikesPreference.setChecked(Settings.RYD_ESTIMATED_LIKE.get());
|
|
||||||
estimatedLikesPreference.setTitle(str("revanced_ryd_estimated_like_title"));
|
|
||||||
estimatedLikesPreference.setSummaryOn(str("revanced_ryd_estimated_like_summary_on"));
|
|
||||||
estimatedLikesPreference.setSummaryOff(str("revanced_ryd_estimated_like_summary_off"));
|
|
||||||
estimatedLikesPreference.setOnPreferenceChangeListener((pref, newValue) -> {
|
|
||||||
Settings.RYD_ESTIMATED_LIKE.save((Boolean) newValue);
|
|
||||||
ReturnYouTubeDislike.clearAllUICaches();
|
|
||||||
updateUIState();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
preferenceScreen.addPreference(estimatedLikesPreference);
|
|
||||||
|
|
||||||
toastOnRYDNotAvailable = new SwitchPreference(context);
|
|
||||||
toastOnRYDNotAvailable.setChecked(Settings.RYD_TOAST_ON_CONNECTION_ERROR.get());
|
|
||||||
toastOnRYDNotAvailable.setTitle(str("revanced_ryd_toast_on_connection_error_title"));
|
|
||||||
toastOnRYDNotAvailable.setSummaryOn(str("revanced_ryd_toast_on_connection_error_summary_on"));
|
|
||||||
toastOnRYDNotAvailable.setSummaryOff(str("revanced_ryd_toast_on_connection_error_summary_off"));
|
|
||||||
toastOnRYDNotAvailable.setOnPreferenceChangeListener((pref, newValue) -> {
|
|
||||||
Settings.RYD_TOAST_ON_CONNECTION_ERROR.save((Boolean) newValue);
|
|
||||||
updateUIState();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
preferenceScreen.addPreference(toastOnRYDNotAvailable);
|
|
||||||
|
|
||||||
updateUIState();
|
|
||||||
|
|
||||||
|
|
||||||
// About category
|
|
||||||
|
|
||||||
PreferenceCategory aboutCategory = new PreferenceCategory(context);
|
|
||||||
aboutCategory.setTitle(str("revanced_ryd_about"));
|
|
||||||
preferenceScreen.addPreference(aboutCategory);
|
|
||||||
|
|
||||||
// ReturnYouTubeDislike Website
|
|
||||||
|
|
||||||
Preference aboutWebsitePreference = new Preference(context);
|
|
||||||
aboutWebsitePreference.setTitle(str("revanced_ryd_attribution_title"));
|
|
||||||
aboutWebsitePreference.setSummary(str("revanced_ryd_attribution_summary"));
|
|
||||||
aboutWebsitePreference.setOnPreferenceClickListener(pref -> {
|
|
||||||
Intent i = new Intent(Intent.ACTION_VIEW);
|
|
||||||
i.setData(Uri.parse("https://returnyoutubedislike.com"));
|
|
||||||
pref.getContext().startActivity(i);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
aboutCategory.addPreference(aboutWebsitePreference);
|
|
||||||
|
|
||||||
// RYD API connection statistics
|
|
||||||
|
|
||||||
if (BaseSettings.DEBUG.get()) {
|
|
||||||
PreferenceCategory emptyCategory = new PreferenceCategory(context); // vertical padding
|
|
||||||
preferenceScreen.addPreference(emptyCategory);
|
|
||||||
|
|
||||||
PreferenceCategory statisticsCategory = new PreferenceCategory(context);
|
|
||||||
statisticsCategory.setTitle(str("revanced_ryd_statistics_category_title"));
|
|
||||||
preferenceScreen.addPreference(statisticsCategory);
|
|
||||||
|
|
||||||
Preference statisticPreference;
|
|
||||||
|
|
||||||
statisticPreference = new Preference(context);
|
|
||||||
statisticPreference.setSelectable(false);
|
|
||||||
statisticPreference.setTitle(str("revanced_ryd_statistics_getFetchCallResponseTimeAverage_title"));
|
|
||||||
statisticPreference.setSummary(createMillisecondStringFromNumber(ReturnYouTubeDislikeApi.getFetchCallResponseTimeAverage()));
|
|
||||||
preferenceScreen.addPreference(statisticPreference);
|
|
||||||
|
|
||||||
statisticPreference = new Preference(context);
|
|
||||||
statisticPreference.setSelectable(false);
|
|
||||||
statisticPreference.setTitle(str("revanced_ryd_statistics_getFetchCallResponseTimeMin_title"));
|
|
||||||
statisticPreference.setSummary(createMillisecondStringFromNumber(ReturnYouTubeDislikeApi.getFetchCallResponseTimeMin()));
|
|
||||||
preferenceScreen.addPreference(statisticPreference);
|
|
||||||
|
|
||||||
statisticPreference = new Preference(context);
|
|
||||||
statisticPreference.setSelectable(false);
|
|
||||||
statisticPreference.setTitle(str("revanced_ryd_statistics_getFetchCallResponseTimeMax_title"));
|
|
||||||
statisticPreference.setSummary(createMillisecondStringFromNumber(ReturnYouTubeDislikeApi.getFetchCallResponseTimeMax()));
|
|
||||||
preferenceScreen.addPreference(statisticPreference);
|
|
||||||
|
|
||||||
String fetchCallTimeWaitingLastSummary;
|
|
||||||
final long fetchCallTimeWaitingLast = ReturnYouTubeDislikeApi.getFetchCallResponseTimeLast();
|
|
||||||
if (fetchCallTimeWaitingLast == ReturnYouTubeDislikeApi.FETCH_CALL_RESPONSE_TIME_VALUE_RATE_LIMIT) {
|
|
||||||
fetchCallTimeWaitingLastSummary = str("revanced_ryd_statistics_getFetchCallResponseTimeLast_rate_limit_summary");
|
|
||||||
} else {
|
|
||||||
fetchCallTimeWaitingLastSummary = createMillisecondStringFromNumber(fetchCallTimeWaitingLast);
|
|
||||||
}
|
|
||||||
statisticPreference = new Preference(context);
|
|
||||||
statisticPreference.setSelectable(false);
|
|
||||||
statisticPreference.setTitle(str("revanced_ryd_statistics_getFetchCallResponseTimeLast_title"));
|
|
||||||
statisticPreference.setSummary(fetchCallTimeWaitingLastSummary);
|
|
||||||
preferenceScreen.addPreference(statisticPreference);
|
|
||||||
|
|
||||||
statisticPreference = new Preference(context);
|
|
||||||
statisticPreference.setSelectable(false);
|
|
||||||
statisticPreference.setTitle(str("revanced_ryd_statistics_getFetchCallCount_title"));
|
|
||||||
statisticPreference.setSummary(createSummaryText(ReturnYouTubeDislikeApi.getFetchCallCount(),
|
|
||||||
"revanced_ryd_statistics_getFetchCallCount_zero_summary",
|
|
||||||
"revanced_ryd_statistics_getFetchCallCount_non_zero_summary"));
|
|
||||||
preferenceScreen.addPreference(statisticPreference);
|
|
||||||
|
|
||||||
statisticPreference = new Preference(context);
|
|
||||||
statisticPreference.setSelectable(false);
|
|
||||||
statisticPreference.setTitle(str("revanced_ryd_statistics_getFetchCallNumberOfFailures_title"));
|
|
||||||
statisticPreference.setSummary(createSummaryText(ReturnYouTubeDislikeApi.getFetchCallNumberOfFailures(),
|
|
||||||
"revanced_ryd_statistics_getFetchCallNumberOfFailures_zero_summary",
|
|
||||||
"revanced_ryd_statistics_getFetchCallNumberOfFailures_non_zero_summary"));
|
|
||||||
preferenceScreen.addPreference(statisticPreference);
|
|
||||||
|
|
||||||
statisticPreference = new Preference(context);
|
|
||||||
statisticPreference.setSelectable(false);
|
|
||||||
statisticPreference.setTitle(str("revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_title"));
|
|
||||||
statisticPreference.setSummary(createSummaryText(ReturnYouTubeDislikeApi.getNumberOfRateLimitRequestsEncountered(),
|
|
||||||
"revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_zero_summary",
|
|
||||||
"revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_non_zero_summary"));
|
|
||||||
preferenceScreen.addPreference(statisticPreference);
|
|
||||||
}
|
|
||||||
|
|
||||||
Utils.setPreferenceTitlesToMultiLineIfNeeded(preferenceScreen);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
Logger.printException(() -> "onCreate failure", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String createSummaryText(int value, String summaryStringZeroKey, String summaryStringOneOrMoreKey) {
|
|
||||||
if (value == 0) {
|
|
||||||
return str(summaryStringZeroKey);
|
|
||||||
}
|
|
||||||
return String.format(str(summaryStringOneOrMoreKey), value);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String createMillisecondStringFromNumber(long number) {
|
|
||||||
return String.format(str("revanced_ryd_statistics_millisecond_text"), number);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,629 +0,0 @@
|
|||||||
package app.revanced.extension.youtube.settings.preference;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.app.AlertDialog;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.DialogInterface;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.net.Uri;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.preference.*;
|
|
||||||
import android.text.Html;
|
|
||||||
import android.text.InputType;
|
|
||||||
import android.util.TypedValue;
|
|
||||||
import android.widget.EditText;
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import app.revanced.extension.shared.Logger;
|
|
||||||
import app.revanced.extension.shared.Utils;
|
|
||||||
import app.revanced.extension.shared.settings.Setting;
|
|
||||||
import app.revanced.extension.shared.settings.preference.ResettableEditTextPreference;
|
|
||||||
import app.revanced.extension.youtube.settings.Settings;
|
|
||||||
import app.revanced.extension.youtube.sponsorblock.SegmentPlaybackController;
|
|
||||||
import app.revanced.extension.youtube.sponsorblock.SponsorBlockSettings;
|
|
||||||
import app.revanced.extension.youtube.sponsorblock.SponsorBlockUtils;
|
|
||||||
import app.revanced.extension.youtube.sponsorblock.objects.SegmentCategory;
|
|
||||||
import app.revanced.extension.youtube.sponsorblock.objects.SegmentCategoryListPreference;
|
|
||||||
import app.revanced.extension.youtube.sponsorblock.objects.UserStats;
|
|
||||||
import app.revanced.extension.youtube.sponsorblock.requests.SBRequester;
|
|
||||||
import app.revanced.extension.youtube.sponsorblock.ui.SponsorBlockViewController;
|
|
||||||
|
|
||||||
import static android.text.Html.fromHtml;
|
|
||||||
import static app.revanced.extension.shared.StringRef.str;
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public class SponsorBlockPreferenceFragment extends PreferenceFragment {
|
|
||||||
|
|
||||||
private SwitchPreference sbEnabled;
|
|
||||||
private SwitchPreference addNewSegment;
|
|
||||||
private SwitchPreference votingEnabled;
|
|
||||||
private SwitchPreference autoHideSkipSegmentButton;
|
|
||||||
private SwitchPreference compactSkipButton;
|
|
||||||
private SwitchPreference squareLayout;
|
|
||||||
private SwitchPreference showSkipToast;
|
|
||||||
private SwitchPreference trackSkips;
|
|
||||||
private SwitchPreference showTimeWithoutSegments;
|
|
||||||
private SwitchPreference toastOnConnectionError;
|
|
||||||
|
|
||||||
private ResettableEditTextPreference newSegmentStep;
|
|
||||||
private ResettableEditTextPreference minSegmentDuration;
|
|
||||||
private EditTextPreference privateUserId;
|
|
||||||
private EditTextPreference importExport;
|
|
||||||
private Preference apiUrl;
|
|
||||||
|
|
||||||
private PreferenceCategory statsCategory;
|
|
||||||
private PreferenceCategory segmentCategory;
|
|
||||||
|
|
||||||
private void updateUI() {
|
|
||||||
try {
|
|
||||||
final boolean enabled = Settings.SB_ENABLED.get();
|
|
||||||
if (!enabled) {
|
|
||||||
SponsorBlockViewController.hideAll();
|
|
||||||
SegmentPlaybackController.setCurrentVideoId(null);
|
|
||||||
} else if (!Settings.SB_CREATE_NEW_SEGMENT.get()) {
|
|
||||||
SponsorBlockViewController.hideNewSegmentLayout();
|
|
||||||
}
|
|
||||||
// Voting and add new segment buttons automatically show/hide themselves.
|
|
||||||
|
|
||||||
SponsorBlockViewController.updateLayout();
|
|
||||||
|
|
||||||
sbEnabled.setChecked(enabled);
|
|
||||||
|
|
||||||
addNewSegment.setChecked(Settings.SB_CREATE_NEW_SEGMENT.get());
|
|
||||||
addNewSegment.setEnabled(enabled);
|
|
||||||
|
|
||||||
votingEnabled.setChecked(Settings.SB_VOTING_BUTTON.get());
|
|
||||||
votingEnabled.setEnabled(enabled);
|
|
||||||
|
|
||||||
autoHideSkipSegmentButton.setEnabled(enabled);
|
|
||||||
autoHideSkipSegmentButton.setChecked(Settings.SB_AUTO_HIDE_SKIP_BUTTON.get());
|
|
||||||
|
|
||||||
compactSkipButton.setChecked(Settings.SB_COMPACT_SKIP_BUTTON.get());
|
|
||||||
compactSkipButton.setEnabled(enabled);
|
|
||||||
|
|
||||||
squareLayout.setChecked(Settings.SB_SQUARE_LAYOUT.get());
|
|
||||||
squareLayout.setEnabled(enabled);
|
|
||||||
|
|
||||||
showSkipToast.setChecked(Settings.SB_TOAST_ON_SKIP.get());
|
|
||||||
showSkipToast.setEnabled(enabled);
|
|
||||||
|
|
||||||
toastOnConnectionError.setChecked(Settings.SB_TOAST_ON_CONNECTION_ERROR.get());
|
|
||||||
toastOnConnectionError.setEnabled(enabled);
|
|
||||||
|
|
||||||
trackSkips.setChecked(Settings.SB_TRACK_SKIP_COUNT.get());
|
|
||||||
trackSkips.setEnabled(enabled);
|
|
||||||
|
|
||||||
showTimeWithoutSegments.setChecked(Settings.SB_VIDEO_LENGTH_WITHOUT_SEGMENTS.get());
|
|
||||||
showTimeWithoutSegments.setEnabled(enabled);
|
|
||||||
|
|
||||||
newSegmentStep.setText((Settings.SB_CREATE_NEW_SEGMENT_STEP.get()).toString());
|
|
||||||
newSegmentStep.setEnabled(enabled);
|
|
||||||
|
|
||||||
minSegmentDuration.setText((Settings.SB_SEGMENT_MIN_DURATION.get()).toString());
|
|
||||||
minSegmentDuration.setEnabled(enabled);
|
|
||||||
|
|
||||||
privateUserId.setText(Settings.SB_PRIVATE_USER_ID.get());
|
|
||||||
privateUserId.setEnabled(enabled);
|
|
||||||
|
|
||||||
// If the user has a private user id, then include a subtext that mentions not to share it.
|
|
||||||
String importExportSummary = SponsorBlockSettings.userHasSBPrivateId()
|
|
||||||
? str("revanced_sb_settings_ie_sum_warning")
|
|
||||||
: str("revanced_sb_settings_ie_sum");
|
|
||||||
importExport.setSummary(importExportSummary);
|
|
||||||
|
|
||||||
apiUrl.setEnabled(enabled);
|
|
||||||
importExport.setEnabled(enabled);
|
|
||||||
segmentCategory.setEnabled(enabled);
|
|
||||||
statsCategory.setEnabled(enabled);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
Logger.printException(() -> "update settings UI failure", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
try {
|
|
||||||
Activity context = getActivity();
|
|
||||||
PreferenceManager manager = getPreferenceManager();
|
|
||||||
manager.setSharedPreferencesName(Setting.preferences.name);
|
|
||||||
PreferenceScreen preferenceScreen = manager.createPreferenceScreen(context);
|
|
||||||
setPreferenceScreen(preferenceScreen);
|
|
||||||
|
|
||||||
SponsorBlockSettings.initialize();
|
|
||||||
|
|
||||||
sbEnabled = new SwitchPreference(context);
|
|
||||||
sbEnabled.setTitle(str("revanced_sb_enable_sb"));
|
|
||||||
sbEnabled.setSummary(str("revanced_sb_enable_sb_sum"));
|
|
||||||
preferenceScreen.addPreference(sbEnabled);
|
|
||||||
sbEnabled.setOnPreferenceChangeListener((preference1, newValue) -> {
|
|
||||||
Settings.SB_ENABLED.save((Boolean) newValue);
|
|
||||||
updateUI();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
addAppearanceCategory(context, preferenceScreen);
|
|
||||||
|
|
||||||
segmentCategory = new PreferenceCategory(context);
|
|
||||||
segmentCategory.setTitle(str("revanced_sb_diff_segments"));
|
|
||||||
preferenceScreen.addPreference(segmentCategory);
|
|
||||||
updateSegmentCategories();
|
|
||||||
|
|
||||||
addCreateSegmentCategory(context, preferenceScreen);
|
|
||||||
|
|
||||||
addGeneralCategory(context, preferenceScreen);
|
|
||||||
|
|
||||||
statsCategory = new PreferenceCategory(context);
|
|
||||||
statsCategory.setTitle(str("revanced_sb_stats"));
|
|
||||||
preferenceScreen.addPreference(statsCategory);
|
|
||||||
fetchAndDisplayStats();
|
|
||||||
|
|
||||||
addAboutCategory(context, preferenceScreen);
|
|
||||||
|
|
||||||
Utils.setPreferenceTitlesToMultiLineIfNeeded(preferenceScreen);
|
|
||||||
|
|
||||||
updateUI();
|
|
||||||
} catch (Exception ex) {
|
|
||||||
Logger.printException(() -> "onCreate failure", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addAppearanceCategory(Context context, PreferenceScreen screen) {
|
|
||||||
PreferenceCategory category = new PreferenceCategory(context);
|
|
||||||
screen.addPreference(category);
|
|
||||||
category.setTitle(str("revanced_sb_appearance_category"));
|
|
||||||
|
|
||||||
votingEnabled = new SwitchPreference(context);
|
|
||||||
votingEnabled.setTitle(str("revanced_sb_enable_voting"));
|
|
||||||
votingEnabled.setSummaryOn(str("revanced_sb_enable_voting_sum_on"));
|
|
||||||
votingEnabled.setSummaryOff(str("revanced_sb_enable_voting_sum_off"));
|
|
||||||
category.addPreference(votingEnabled);
|
|
||||||
votingEnabled.setOnPreferenceChangeListener((preference1, newValue) -> {
|
|
||||||
Settings.SB_VOTING_BUTTON.save((Boolean) newValue);
|
|
||||||
updateUI();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
autoHideSkipSegmentButton = new SwitchPreference(context);
|
|
||||||
autoHideSkipSegmentButton.setTitle(str("revanced_sb_enable_auto_hide_skip_segment_button"));
|
|
||||||
autoHideSkipSegmentButton.setSummaryOn(str("revanced_sb_enable_auto_hide_skip_segment_button_sum_on"));
|
|
||||||
autoHideSkipSegmentButton.setSummaryOff(str("revanced_sb_enable_auto_hide_skip_segment_button_sum_off"));
|
|
||||||
category.addPreference(autoHideSkipSegmentButton);
|
|
||||||
autoHideSkipSegmentButton.setOnPreferenceChangeListener((preference1, newValue) -> {
|
|
||||||
Settings.SB_AUTO_HIDE_SKIP_BUTTON.save((Boolean) newValue);
|
|
||||||
updateUI();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
compactSkipButton = new SwitchPreference(context);
|
|
||||||
compactSkipButton.setTitle(str("revanced_sb_enable_compact_skip_button"));
|
|
||||||
compactSkipButton.setSummaryOn(str("revanced_sb_enable_compact_skip_button_sum_on"));
|
|
||||||
compactSkipButton.setSummaryOff(str("revanced_sb_enable_compact_skip_button_sum_off"));
|
|
||||||
category.addPreference(compactSkipButton);
|
|
||||||
compactSkipButton.setOnPreferenceChangeListener((preference1, newValue) -> {
|
|
||||||
Settings.SB_COMPACT_SKIP_BUTTON.save((Boolean) newValue);
|
|
||||||
updateUI();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
squareLayout = new SwitchPreference(context);
|
|
||||||
squareLayout.setTitle(str("revanced_sb_square_layout"));
|
|
||||||
squareLayout.setSummaryOn(str("revanced_sb_square_layout_sum_on"));
|
|
||||||
squareLayout.setSummaryOff(str("revanced_sb_square_layout_sum_off"));
|
|
||||||
category.addPreference(squareLayout);
|
|
||||||
squareLayout.setOnPreferenceChangeListener((preference1, newValue) -> {
|
|
||||||
Settings.SB_SQUARE_LAYOUT.save((Boolean) newValue);
|
|
||||||
updateUI();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
showSkipToast = new SwitchPreference(context);
|
|
||||||
showSkipToast.setTitle(str("revanced_sb_general_skiptoast"));
|
|
||||||
showSkipToast.setSummaryOn(str("revanced_sb_general_skiptoast_sum_on"));
|
|
||||||
showSkipToast.setSummaryOff(str("revanced_sb_general_skiptoast_sum_off"));
|
|
||||||
showSkipToast.setOnPreferenceClickListener(preference1 -> {
|
|
||||||
Utils.showToastShort(str("revanced_sb_skipped_sponsor"));
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
showSkipToast.setOnPreferenceChangeListener((preference1, newValue) -> {
|
|
||||||
Settings.SB_TOAST_ON_SKIP.save((Boolean) newValue);
|
|
||||||
updateUI();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
category.addPreference(showSkipToast);
|
|
||||||
|
|
||||||
showTimeWithoutSegments = new SwitchPreference(context);
|
|
||||||
showTimeWithoutSegments.setTitle(str("revanced_sb_general_time_without"));
|
|
||||||
showTimeWithoutSegments.setSummaryOn(str("revanced_sb_general_time_without_sum_on"));
|
|
||||||
showTimeWithoutSegments.setSummaryOff(str("revanced_sb_general_time_without_sum_off"));
|
|
||||||
showTimeWithoutSegments.setOnPreferenceChangeListener((preference1, newValue) -> {
|
|
||||||
Settings.SB_VIDEO_LENGTH_WITHOUT_SEGMENTS.save((Boolean) newValue);
|
|
||||||
updateUI();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
category.addPreference(showTimeWithoutSegments);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addCreateSegmentCategory(Context context, PreferenceScreen screen) {
|
|
||||||
PreferenceCategory category = new PreferenceCategory(context);
|
|
||||||
screen.addPreference(category);
|
|
||||||
category.setTitle(str("revanced_sb_create_segment_category"));
|
|
||||||
|
|
||||||
addNewSegment = new SwitchPreference(context);
|
|
||||||
addNewSegment.setTitle(str("revanced_sb_enable_create_segment"));
|
|
||||||
addNewSegment.setSummaryOn(str("revanced_sb_enable_create_segment_sum_on"));
|
|
||||||
addNewSegment.setSummaryOff(str("revanced_sb_enable_create_segment_sum_off"));
|
|
||||||
category.addPreference(addNewSegment);
|
|
||||||
addNewSegment.setOnPreferenceChangeListener((preference1, o) -> {
|
|
||||||
Boolean newValue = (Boolean) o;
|
|
||||||
if (newValue && !Settings.SB_SEEN_GUIDELINES.get()) {
|
|
||||||
new AlertDialog.Builder(preference1.getContext())
|
|
||||||
.setTitle(str("revanced_sb_guidelines_popup_title"))
|
|
||||||
.setMessage(str("revanced_sb_guidelines_popup_content"))
|
|
||||||
.setNegativeButton(str("revanced_sb_guidelines_popup_already_read"), null)
|
|
||||||
.setPositiveButton(str("revanced_sb_guidelines_popup_open"), (dialogInterface, i) -> openGuidelines())
|
|
||||||
.setOnDismissListener(dialog -> Settings.SB_SEEN_GUIDELINES.save(true))
|
|
||||||
.setCancelable(false)
|
|
||||||
.show();
|
|
||||||
}
|
|
||||||
Settings.SB_CREATE_NEW_SEGMENT.save(newValue);
|
|
||||||
updateUI();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
newSegmentStep = new ResettableEditTextPreference(context);
|
|
||||||
newSegmentStep.setSetting(Settings.SB_CREATE_NEW_SEGMENT_STEP);
|
|
||||||
newSegmentStep.setTitle(str("revanced_sb_general_adjusting"));
|
|
||||||
newSegmentStep.setSummary(str("revanced_sb_general_adjusting_sum"));
|
|
||||||
newSegmentStep.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER);
|
|
||||||
newSegmentStep.setOnPreferenceChangeListener((preference1, newValue) -> {
|
|
||||||
try {
|
|
||||||
final int newAdjustmentValue = Integer.parseInt(newValue.toString());
|
|
||||||
if (newAdjustmentValue != 0) {
|
|
||||||
Settings.SB_CREATE_NEW_SEGMENT_STEP.save(newAdjustmentValue);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
} catch (NumberFormatException ex) {
|
|
||||||
Logger.printInfo(() -> "Invalid new segment step", ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
Utils.showToastLong(str("revanced_sb_general_adjusting_invalid"));
|
|
||||||
updateUI();
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
category.addPreference(newSegmentStep);
|
|
||||||
|
|
||||||
Preference guidelinePreferences = new Preference(context);
|
|
||||||
guidelinePreferences.setTitle(str("revanced_sb_guidelines_preference_title"));
|
|
||||||
guidelinePreferences.setSummary(str("revanced_sb_guidelines_preference_sum"));
|
|
||||||
guidelinePreferences.setOnPreferenceClickListener(preference1 -> {
|
|
||||||
openGuidelines();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
category.addPreference(guidelinePreferences);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addGeneralCategory(final Context context, PreferenceScreen screen) {
|
|
||||||
PreferenceCategory category = new PreferenceCategory(context);
|
|
||||||
screen.addPreference(category);
|
|
||||||
category.setTitle(str("revanced_sb_general"));
|
|
||||||
|
|
||||||
toastOnConnectionError = new SwitchPreference(context);
|
|
||||||
toastOnConnectionError.setTitle(str("revanced_sb_toast_on_connection_error_title"));
|
|
||||||
toastOnConnectionError.setSummaryOn(str("revanced_sb_toast_on_connection_error_summary_on"));
|
|
||||||
toastOnConnectionError.setSummaryOff(str("revanced_sb_toast_on_connection_error_summary_off"));
|
|
||||||
toastOnConnectionError.setOnPreferenceChangeListener((preference1, newValue) -> {
|
|
||||||
Settings.SB_TOAST_ON_CONNECTION_ERROR.save((Boolean) newValue);
|
|
||||||
updateUI();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
category.addPreference(toastOnConnectionError);
|
|
||||||
|
|
||||||
trackSkips = new SwitchPreference(context);
|
|
||||||
trackSkips.setTitle(str("revanced_sb_general_skipcount"));
|
|
||||||
trackSkips.setSummaryOn(str("revanced_sb_general_skipcount_sum_on"));
|
|
||||||
trackSkips.setSummaryOff(str("revanced_sb_general_skipcount_sum_off"));
|
|
||||||
trackSkips.setOnPreferenceChangeListener((preference1, newValue) -> {
|
|
||||||
Settings.SB_TRACK_SKIP_COUNT.save((Boolean) newValue);
|
|
||||||
updateUI();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
category.addPreference(trackSkips);
|
|
||||||
|
|
||||||
minSegmentDuration = new ResettableEditTextPreference(context);
|
|
||||||
minSegmentDuration.setSetting(Settings.SB_SEGMENT_MIN_DURATION);
|
|
||||||
minSegmentDuration.setTitle(str("revanced_sb_general_min_duration"));
|
|
||||||
minSegmentDuration.setSummary(str("revanced_sb_general_min_duration_sum"));
|
|
||||||
minSegmentDuration.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
|
|
||||||
minSegmentDuration.setOnPreferenceChangeListener((preference1, newValue) -> {
|
|
||||||
try {
|
|
||||||
Float minTimeDuration = Float.valueOf(newValue.toString());
|
|
||||||
Settings.SB_SEGMENT_MIN_DURATION.save(minTimeDuration);
|
|
||||||
return true;
|
|
||||||
} catch (NumberFormatException ex) {
|
|
||||||
Logger.printInfo(() -> "Invalid minimum segment duration", ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
Utils.showToastLong(str("revanced_sb_general_min_duration_invalid"));
|
|
||||||
updateUI();
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
category.addPreference(minSegmentDuration);
|
|
||||||
|
|
||||||
privateUserId = new EditTextPreference(context) {
|
|
||||||
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
|
|
||||||
Utils.setEditTextDialogTheme(builder);
|
|
||||||
|
|
||||||
builder.setNeutralButton(str("revanced_sb_settings_copy"), (dialog, which) -> {
|
|
||||||
Utils.setClipboard(getEditText().getText().toString());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
privateUserId.setTitle(str("revanced_sb_general_uuid"));
|
|
||||||
privateUserId.setSummary(str("revanced_sb_general_uuid_sum"));
|
|
||||||
privateUserId.setOnPreferenceChangeListener((preference1, newValue) -> {
|
|
||||||
String newUUID = newValue.toString();
|
|
||||||
if (!SponsorBlockSettings.isValidSBUserId(newUUID)) {
|
|
||||||
Utils.showToastLong(str("revanced_sb_general_uuid_invalid"));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Settings.SB_PRIVATE_USER_ID.save(newUUID);
|
|
||||||
updateUI();
|
|
||||||
fetchAndDisplayStats();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
category.addPreference(privateUserId);
|
|
||||||
|
|
||||||
apiUrl = new Preference(context);
|
|
||||||
apiUrl.setTitle(str("revanced_sb_general_api_url"));
|
|
||||||
apiUrl.setSummary(Html.fromHtml(str("revanced_sb_general_api_url_sum")));
|
|
||||||
apiUrl.setOnPreferenceClickListener(preference1 -> {
|
|
||||||
EditText editText = new EditText(context);
|
|
||||||
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI);
|
|
||||||
editText.setText(Settings.SB_API_URL.get());
|
|
||||||
|
|
||||||
DialogInterface.OnClickListener urlChangeListener = (dialog, buttonPressed) -> {
|
|
||||||
if (buttonPressed == DialogInterface.BUTTON_NEUTRAL) {
|
|
||||||
Settings.SB_API_URL.resetToDefault();
|
|
||||||
Utils.showToastLong(str("revanced_sb_api_url_reset"));
|
|
||||||
} else if (buttonPressed == DialogInterface.BUTTON_POSITIVE) {
|
|
||||||
String serverAddress = editText.getText().toString();
|
|
||||||
if (!SponsorBlockSettings.isValidSBServerAddress(serverAddress)) {
|
|
||||||
Utils.showToastLong(str("revanced_sb_api_url_invalid"));
|
|
||||||
} else if (!serverAddress.equals(Settings.SB_API_URL.get())) {
|
|
||||||
Settings.SB_API_URL.save(serverAddress);
|
|
||||||
Utils.showToastLong(str("revanced_sb_api_url_changed"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
new AlertDialog.Builder(context)
|
|
||||||
.setTitle(apiUrl.getTitle())
|
|
||||||
.setView(editText)
|
|
||||||
.setNegativeButton(android.R.string.cancel, null)
|
|
||||||
.setNeutralButton(str("revanced_sb_reset"), urlChangeListener)
|
|
||||||
.setPositiveButton(android.R.string.ok, urlChangeListener)
|
|
||||||
.show();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
category.addPreference(apiUrl);
|
|
||||||
|
|
||||||
importExport = new EditTextPreference(context) {
|
|
||||||
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
|
|
||||||
Utils.setEditTextDialogTheme(builder);
|
|
||||||
|
|
||||||
builder.setNeutralButton(str("revanced_sb_settings_copy"), (dialog, which) -> {
|
|
||||||
Utils.setClipboard(getEditText().getText().toString());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
importExport.setTitle(str("revanced_sb_settings_ie"));
|
|
||||||
// Summary is set in updateUI()
|
|
||||||
importExport.getEditText().setInputType(InputType.TYPE_CLASS_TEXT
|
|
||||||
| InputType.TYPE_TEXT_FLAG_MULTI_LINE
|
|
||||||
| InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
|
|
||||||
importExport.getEditText().setAutofillHints((String) null);
|
|
||||||
importExport.getEditText().setTextSize(TypedValue.COMPLEX_UNIT_PT, 8);
|
|
||||||
importExport.setOnPreferenceClickListener(preference1 -> {
|
|
||||||
importExport.getEditText().setText(SponsorBlockSettings.exportDesktopSettings());
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
importExport.setOnPreferenceChangeListener((preference1, newValue) -> {
|
|
||||||
SponsorBlockSettings.importDesktopSettings((String) newValue);
|
|
||||||
updateSegmentCategories();
|
|
||||||
fetchAndDisplayStats();
|
|
||||||
updateUI();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
category.addPreference(importExport);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateSegmentCategories() {
|
|
||||||
try {
|
|
||||||
segmentCategory.removeAll();
|
|
||||||
|
|
||||||
Activity activity = getActivity();
|
|
||||||
for (SegmentCategory category : SegmentCategory.categoriesWithoutUnsubmitted()) {
|
|
||||||
segmentCategory.addPreference(new SegmentCategoryListPreference(activity, category));
|
|
||||||
}
|
|
||||||
} catch (Exception ex) {
|
|
||||||
Logger.printException(() -> "updateSegmentCategories failure", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addAboutCategory(Context context, PreferenceScreen screen) {
|
|
||||||
PreferenceCategory category = new PreferenceCategory(context);
|
|
||||||
screen.addPreference(category);
|
|
||||||
category.setTitle(str("revanced_sb_about"));
|
|
||||||
|
|
||||||
{
|
|
||||||
Preference preference = new Preference(context);
|
|
||||||
category.addPreference(preference);
|
|
||||||
preference.setTitle(str("revanced_sb_about_api"));
|
|
||||||
preference.setSummary(str("revanced_sb_about_api_sum"));
|
|
||||||
preference.setOnPreferenceClickListener(preference1 -> {
|
|
||||||
Intent i = new Intent(Intent.ACTION_VIEW);
|
|
||||||
i.setData(Uri.parse("https://sponsor.ajay.app"));
|
|
||||||
preference1.getContext().startActivity(i);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void openGuidelines() {
|
|
||||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
|
||||||
intent.setData(Uri.parse("https://wiki.sponsor.ajay.app/w/Guidelines"));
|
|
||||||
getActivity().startActivity(intent);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void fetchAndDisplayStats() {
|
|
||||||
try {
|
|
||||||
statsCategory.removeAll();
|
|
||||||
if (!SponsorBlockSettings.userHasSBPrivateId()) {
|
|
||||||
// User has never voted or created any segments. No stats to show.
|
|
||||||
addLocalUserStats();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Preference loadingPlaceholderPreference = new Preference(this.getActivity());
|
|
||||||
loadingPlaceholderPreference.setEnabled(false);
|
|
||||||
statsCategory.addPreference(loadingPlaceholderPreference);
|
|
||||||
if (Settings.SB_ENABLED.get()) {
|
|
||||||
loadingPlaceholderPreference.setTitle(str("revanced_sb_stats_loading"));
|
|
||||||
Utils.runOnBackgroundThread(() -> {
|
|
||||||
UserStats stats = SBRequester.retrieveUserStats();
|
|
||||||
Utils.runOnMainThread(() -> { // get back on main thread to modify UI elements
|
|
||||||
addUserStats(loadingPlaceholderPreference, stats);
|
|
||||||
addLocalUserStats();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
loadingPlaceholderPreference.setTitle(str("revanced_sb_stats_sb_disabled"));
|
|
||||||
}
|
|
||||||
} catch (Exception ex) {
|
|
||||||
Logger.printException(() -> "fetchAndDisplayStats failure", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addUserStats(@NonNull Preference loadingPlaceholder, @Nullable UserStats stats) {
|
|
||||||
Utils.verifyOnMainThread();
|
|
||||||
try {
|
|
||||||
if (stats == null) {
|
|
||||||
loadingPlaceholder.setTitle(str("revanced_sb_stats_connection_failure"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
statsCategory.removeAll();
|
|
||||||
Context context = statsCategory.getContext();
|
|
||||||
|
|
||||||
if (stats.totalSegmentCountIncludingIgnored > 0) {
|
|
||||||
// If user has not created any segments, there's no reason to set a username.
|
|
||||||
EditTextPreference preference = new ResettableEditTextPreference(context);
|
|
||||||
statsCategory.addPreference(preference);
|
|
||||||
String userName = stats.userName;
|
|
||||||
preference.setTitle(fromHtml(str("revanced_sb_stats_username", userName)));
|
|
||||||
preference.setSummary(str("revanced_sb_stats_username_change"));
|
|
||||||
preference.setText(userName);
|
|
||||||
preference.setOnPreferenceChangeListener((preference1, value) -> {
|
|
||||||
Utils.runOnBackgroundThread(() -> {
|
|
||||||
String newUserName = (String) value;
|
|
||||||
String errorMessage = SBRequester.setUsername(newUserName);
|
|
||||||
Utils.runOnMainThread(() -> {
|
|
||||||
if (errorMessage == null) {
|
|
||||||
preference.setTitle(fromHtml(str("revanced_sb_stats_username", newUserName)));
|
|
||||||
preference.setText(newUserName);
|
|
||||||
Utils.showToastLong(str("revanced_sb_stats_username_changed"));
|
|
||||||
} else {
|
|
||||||
preference.setText(userName); // revert to previous
|
|
||||||
SponsorBlockUtils.showErrorDialog(errorMessage);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
// number of segment submissions (does not include ignored segments)
|
|
||||||
Preference preference = new Preference(context);
|
|
||||||
statsCategory.addPreference(preference);
|
|
||||||
String formatted = SponsorBlockUtils.getNumberOfSkipsString(stats.segmentCount);
|
|
||||||
preference.setTitle(fromHtml(str("revanced_sb_stats_submissions", formatted)));
|
|
||||||
preference.setSummary(str("revanced_sb_stats_submissions_sum"));
|
|
||||||
if (stats.totalSegmentCountIncludingIgnored == 0) {
|
|
||||||
preference.setSelectable(false);
|
|
||||||
} else {
|
|
||||||
preference.setOnPreferenceClickListener(preference1 -> {
|
|
||||||
Intent i = new Intent(Intent.ACTION_VIEW);
|
|
||||||
i.setData(Uri.parse("https://sb.ltn.fi/userid/" + stats.publicUserId));
|
|
||||||
preference1.getContext().startActivity(i);
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
// "user reputation". Usually not useful, since it appears most users have zero reputation.
|
|
||||||
// But if there is a reputation, then show it here
|
|
||||||
Preference preference = new Preference(context);
|
|
||||||
preference.setTitle(fromHtml(str("revanced_sb_stats_reputation", stats.reputation)));
|
|
||||||
preference.setSelectable(false);
|
|
||||||
if (stats.reputation != 0) {
|
|
||||||
statsCategory.addPreference(preference);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
// time saved for other users
|
|
||||||
Preference preference = new Preference(context);
|
|
||||||
statsCategory.addPreference(preference);
|
|
||||||
|
|
||||||
String stats_saved;
|
|
||||||
String stats_saved_sum;
|
|
||||||
if (stats.totalSegmentCountIncludingIgnored == 0) {
|
|
||||||
stats_saved = str("revanced_sb_stats_saved_zero");
|
|
||||||
stats_saved_sum = str("revanced_sb_stats_saved_sum_zero");
|
|
||||||
} else {
|
|
||||||
stats_saved = str("revanced_sb_stats_saved",
|
|
||||||
SponsorBlockUtils.getNumberOfSkipsString(stats.viewCount));
|
|
||||||
stats_saved_sum = str("revanced_sb_stats_saved_sum", SponsorBlockUtils.getTimeSavedString((long) (60 * stats.minutesSaved)));
|
|
||||||
}
|
|
||||||
preference.setTitle(fromHtml(stats_saved));
|
|
||||||
preference.setSummary(fromHtml(stats_saved_sum));
|
|
||||||
preference.setOnPreferenceClickListener(preference1 -> {
|
|
||||||
Intent i = new Intent(Intent.ACTION_VIEW);
|
|
||||||
i.setData(Uri.parse("https://sponsor.ajay.app/stats/"));
|
|
||||||
preference1.getContext().startActivity(i);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} catch (Exception ex) {
|
|
||||||
Logger.printException(() -> "addUserStats failure", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addLocalUserStats() {
|
|
||||||
// time the user saved by using SB
|
|
||||||
Preference preference = new Preference(statsCategory.getContext());
|
|
||||||
statsCategory.addPreference(preference);
|
|
||||||
|
|
||||||
Runnable updateStatsSelfSaved = () -> {
|
|
||||||
String formatted = SponsorBlockUtils.getNumberOfSkipsString(Settings.SB_LOCAL_TIME_SAVED_NUMBER_SEGMENTS.get());
|
|
||||||
preference.setTitle(fromHtml(str("revanced_sb_stats_self_saved", formatted)));
|
|
||||||
String formattedSaved = SponsorBlockUtils.getTimeSavedString(Settings.SB_LOCAL_TIME_SAVED_MILLISECONDS.get() / 1000);
|
|
||||||
preference.setSummary(fromHtml(str("revanced_sb_stats_self_saved_sum", formattedSaved)));
|
|
||||||
};
|
|
||||||
updateStatsSelfSaved.run();
|
|
||||||
preference.setOnPreferenceClickListener(preference1 -> {
|
|
||||||
new AlertDialog.Builder(preference1.getContext())
|
|
||||||
.setTitle(str("revanced_sb_stats_self_saved_reset_title"))
|
|
||||||
.setPositiveButton(android.R.string.yes, (dialog, whichButton) -> {
|
|
||||||
Settings.SB_LOCAL_TIME_SAVED_NUMBER_SEGMENTS.resetToDefault();
|
|
||||||
Settings.SB_LOCAL_TIME_SAVED_MILLISECONDS.resetToDefault();
|
|
||||||
updateStatsSelfSaved.run();
|
|
||||||
})
|
|
||||||
.setNegativeButton(android.R.string.no, null).show();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
package app.revanced.extension.youtube.settings.preference;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.preference.Preference;
|
||||||
|
import android.util.AttributeSet;
|
||||||
|
|
||||||
|
import app.revanced.extension.shared.Logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple preference that opens a url when clicked.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public class UrlLinkPreference extends Preference {
|
||||||
|
|
||||||
|
protected String externalUrl;
|
||||||
|
|
||||||
|
{
|
||||||
|
setOnPreferenceClickListener(pref -> {
|
||||||
|
if (externalUrl == null) {
|
||||||
|
Logger.printException(() -> "URL not set " + getClass().getSimpleName());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Intent i = new Intent(Intent.ACTION_VIEW);
|
||||||
|
i.setData(Uri.parse(externalUrl));
|
||||||
|
pref.getContext().startActivity(i);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public UrlLinkPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||||
|
super(context, attrs, defStyleAttr, defStyleRes);
|
||||||
|
}
|
||||||
|
public UrlLinkPreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||||
|
super(context, attrs, defStyleAttr);
|
||||||
|
}
|
||||||
|
public UrlLinkPreference(Context context, AttributeSet attrs) {
|
||||||
|
super(context, attrs);
|
||||||
|
}
|
||||||
|
public UrlLinkPreference(Context context) {
|
||||||
|
super(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -18,6 +18,7 @@ import app.revanced.extension.shared.Logger;
|
|||||||
import app.revanced.extension.shared.Utils;
|
import app.revanced.extension.shared.Utils;
|
||||||
import app.revanced.extension.shared.settings.Setting;
|
import app.revanced.extension.shared.settings.Setting;
|
||||||
import app.revanced.extension.youtube.settings.Settings;
|
import app.revanced.extension.youtube.settings.Settings;
|
||||||
|
import app.revanced.extension.youtube.sponsorblock.ui.SponsorBlockPreferenceGroup;
|
||||||
import app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour;
|
import app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour;
|
||||||
import app.revanced.extension.youtube.sponsorblock.objects.SegmentCategory;
|
import app.revanced.extension.youtube.sponsorblock.objects.SegmentCategory;
|
||||||
|
|
||||||
@@ -31,6 +32,7 @@ public class SponsorBlockSettings {
|
|||||||
@Override
|
@Override
|
||||||
public void settingsImported(@Nullable Context context) {
|
public void settingsImported(@Nullable Context context) {
|
||||||
SegmentCategory.loadAllCategoriesFromSettings();
|
SegmentCategory.loadAllCategoriesFromSettings();
|
||||||
|
SponsorBlockPreferenceGroup.settingsImported = true;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void settingsExported(@Nullable Context context) {
|
public void settingsExported(@Nullable Context context) {
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ public class SegmentCategoryListPreference extends ListPreference {
|
|||||||
: CategoryBehaviour.getBehaviorKeyValues());
|
: CategoryBehaviour.getBehaviorKeyValues());
|
||||||
setSummary(category.description.toString());
|
setSummary(category.description.toString());
|
||||||
|
|
||||||
updateTitleFromCategory();
|
updateUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -202,7 +202,7 @@ public class SegmentCategoryListPreference extends ListPreference {
|
|||||||
builder.setNeutralButton(str("revanced_sb_reset_color"), (dialog, which) -> {
|
builder.setNeutralButton(str("revanced_sb_reset_color"), (dialog, which) -> {
|
||||||
try {
|
try {
|
||||||
category.resetColorAndOpacity();
|
category.resetColorAndOpacity();
|
||||||
updateTitleFromCategory();
|
updateUI();
|
||||||
Utils.showToastShort(str("revanced_sb_color_reset"));
|
Utils.showToastShort(str("revanced_sb_color_reset"));
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.printException(() -> "setNeutralButton failure", ex);
|
Logger.printException(() -> "setNeutralButton failure", ex);
|
||||||
@@ -240,7 +240,7 @@ public class SegmentCategoryListPreference extends ListPreference {
|
|||||||
Utils.showToastShort(str("revanced_sb_color_invalid"));
|
Utils.showToastShort(str("revanced_sb_color_invalid"));
|
||||||
}
|
}
|
||||||
|
|
||||||
updateTitleFromCategory();
|
updateUI();
|
||||||
}
|
}
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.printException(() -> "onDialogClosed failure", ex);
|
Logger.printException(() -> "onDialogClosed failure", ex);
|
||||||
@@ -251,7 +251,7 @@ public class SegmentCategoryListPreference extends ListPreference {
|
|||||||
categoryColor = applyOpacityToColor(categoryColor, categoryOpacity);
|
categoryColor = applyOpacityToColor(categoryColor, categoryOpacity);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateTitleFromCategory() {
|
public void updateUI() {
|
||||||
categoryColor = category.getColorNoOpacity();
|
categoryColor = category.getColorNoOpacity();
|
||||||
categoryOpacity = category.getOpacity();
|
categoryOpacity = category.getOpacity();
|
||||||
applyOpacityToCategoryColor();
|
applyOpacityToCategoryColor();
|
||||||
|
|||||||
@@ -5,13 +5,19 @@ import androidx.annotation.NonNull;
|
|||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import app.revanced.extension.youtube.sponsorblock.SponsorBlockSettings;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SponsorBlock user stats
|
* SponsorBlock user stats
|
||||||
*/
|
*/
|
||||||
public class UserStats {
|
public class UserStats {
|
||||||
@NonNull
|
/**
|
||||||
|
* How long to cache user stats objects.
|
||||||
|
*/
|
||||||
|
private static final long STATS_EXPIRATION_MILLISECONDS = 60 * 60 * 1000; // 60 minutes.
|
||||||
|
|
||||||
|
private final String privateUserId;
|
||||||
public final String publicUserId;
|
public final String publicUserId;
|
||||||
@NonNull
|
|
||||||
public final String userName;
|
public final String userName;
|
||||||
/**
|
/**
|
||||||
* "User reputation". Unclear how SB determines this value.
|
* "User reputation". Unclear how SB determines this value.
|
||||||
@@ -26,7 +32,13 @@ public class UserStats {
|
|||||||
public final int viewCount;
|
public final int viewCount;
|
||||||
public final double minutesSaved;
|
public final double minutesSaved;
|
||||||
|
|
||||||
public UserStats(@NonNull JSONObject json) throws JSONException {
|
/**
|
||||||
|
* When this stat was fetched.
|
||||||
|
*/
|
||||||
|
public final long fetchTime;
|
||||||
|
|
||||||
|
public UserStats(String privateSbId, @NonNull JSONObject json) throws JSONException {
|
||||||
|
privateUserId = privateSbId;
|
||||||
publicUserId = json.getString("userID");
|
publicUserId = json.getString("userID");
|
||||||
userName = json.getString("userName");
|
userName = json.getString("userName");
|
||||||
reputation = (float)json.getDouble("reputation");
|
reputation = (float)json.getDouble("reputation");
|
||||||
@@ -35,11 +47,23 @@ public class UserStats {
|
|||||||
totalSegmentCountIncludingIgnored = segmentCount + ignoredSegmentCount;
|
totalSegmentCountIncludingIgnored = segmentCount + ignoredSegmentCount;
|
||||||
viewCount = json.getInt("viewCount");
|
viewCount = json.getInt("viewCount");
|
||||||
minutesSaved = json.getDouble("minutesSaved");
|
minutesSaved = json.getDouble("minutesSaved");
|
||||||
|
fetchTime = System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isExpired() {
|
||||||
|
if (STATS_EXPIRATION_MILLISECONDS < System.currentTimeMillis() - fetchTime) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// User changed their SB private user id.
|
||||||
|
return !SponsorBlockSettings.userHasSBPrivateId()
|
||||||
|
|| !SponsorBlockSettings.getSBPrivateUserID().equals(privateUserId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
// Do not include private user id in toString().
|
||||||
return "UserStats{"
|
return "UserStats{"
|
||||||
+ "publicUserId='" + publicUserId + '\''
|
+ "publicUserId='" + publicUserId + '\''
|
||||||
+ ", userName='" + userName + '\''
|
+ ", userName='" + userName + '\''
|
||||||
|
|||||||
@@ -47,6 +47,9 @@ public class SBRequester {
|
|||||||
*/
|
*/
|
||||||
private static final int HTTP_STATUS_CODE_SUCCESS = 200;
|
private static final int HTTP_STATUS_CODE_SUCCESS = 200;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private static volatile UserStats lastFetchedStats;
|
||||||
|
|
||||||
private SBRequester() {
|
private SBRequester() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,6 +184,8 @@ public class SBRequester {
|
|||||||
Utils.showToastLong(str("revanced_sb_submit_failed_unknown_error", 0, ex.getMessage()));
|
Utils.showToastLong(str("revanced_sb_submit_failed_unknown_error", 0, ex.getMessage()));
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.printException(() -> "failed to submit segments", ex); // Should never happen.
|
Logger.printException(() -> "failed to submit segments", ex); // Should never happen.
|
||||||
|
} finally {
|
||||||
|
lastFetchedStats = null; // Fetch updated stats if needed.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,9 +257,17 @@ public class SBRequester {
|
|||||||
public static UserStats retrieveUserStats() {
|
public static UserStats retrieveUserStats() {
|
||||||
Utils.verifyOffMainThread();
|
Utils.verifyOffMainThread();
|
||||||
try {
|
try {
|
||||||
UserStats stats = new UserStats(getJSONObject(SBRoutes.GET_USER_STATS, SponsorBlockSettings.getSBPrivateUserID()));
|
UserStats stats = lastFetchedStats;
|
||||||
Logger.printDebug(() -> "user stats: " + stats);
|
if (stats != null && !stats.isExpired()) {
|
||||||
return stats;
|
return stats;
|
||||||
|
}
|
||||||
|
|
||||||
|
String privateUserID = SponsorBlockSettings.getSBPrivateUserID();
|
||||||
|
UserStats fetchedStats = new UserStats(privateUserID,
|
||||||
|
getJSONObject(SBRoutes.GET_USER_STATS, privateUserID));
|
||||||
|
Logger.printDebug(() -> "user stats: " + fetchedStats);
|
||||||
|
lastFetchedStats = fetchedStats;
|
||||||
|
return fetchedStats;
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
Logger.printInfo(() -> "failed to retrieve user stats", ex); // info level, do not show a toast
|
Logger.printInfo(() -> "failed to retrieve user stats", ex); // info level, do not show a toast
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package app.revanced.extension.youtube.sponsorblock.ui;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.util.AttributeSet;
|
||||||
|
|
||||||
|
import app.revanced.extension.youtube.settings.preference.UrlLinkPreference;
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public class SponsorBlockAboutPreference extends UrlLinkPreference {
|
||||||
|
{
|
||||||
|
externalUrl = "https://sponsor.ajay.app";
|
||||||
|
}
|
||||||
|
|
||||||
|
public SponsorBlockAboutPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||||
|
super(context, attrs, defStyleAttr, defStyleRes);
|
||||||
|
}
|
||||||
|
public SponsorBlockAboutPreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||||
|
super(context, attrs, defStyleAttr);
|
||||||
|
}
|
||||||
|
public SponsorBlockAboutPreference(Context context, AttributeSet attrs) {
|
||||||
|
super(context, attrs);
|
||||||
|
}
|
||||||
|
public SponsorBlockAboutPreference(Context context) {
|
||||||
|
super(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,471 @@
|
|||||||
|
package app.revanced.extension.youtube.sponsorblock.ui;
|
||||||
|
|
||||||
|
import static app.revanced.extension.shared.StringRef.str;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.preference.*;
|
||||||
|
import android.text.Html;
|
||||||
|
import android.text.InputType;
|
||||||
|
import android.util.AttributeSet;
|
||||||
|
import android.util.TypedValue;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.EditText;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import app.revanced.extension.shared.Logger;
|
||||||
|
import app.revanced.extension.shared.Utils;
|
||||||
|
import app.revanced.extension.shared.settings.preference.ResettableEditTextPreference;
|
||||||
|
import app.revanced.extension.youtube.settings.Settings;
|
||||||
|
import app.revanced.extension.youtube.sponsorblock.SegmentPlaybackController;
|
||||||
|
import app.revanced.extension.youtube.sponsorblock.SponsorBlockSettings;
|
||||||
|
import app.revanced.extension.youtube.sponsorblock.objects.SegmentCategory;
|
||||||
|
import app.revanced.extension.youtube.sponsorblock.objects.SegmentCategoryListPreference;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lots of old code that could be converted to a half dozen custom preferences,
|
||||||
|
* but instead it's wrapped in this group container and all logic is handled here.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({"unused", "deprecation"})
|
||||||
|
public class SponsorBlockPreferenceGroup extends PreferenceGroup {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ReVanced settings were recently imported and the UI needs to be updated.
|
||||||
|
*/
|
||||||
|
public static boolean settingsImported;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the preferences have been created and added to this group.
|
||||||
|
*/
|
||||||
|
private boolean preferencesInitialized;
|
||||||
|
|
||||||
|
private SwitchPreference sbEnabled;
|
||||||
|
private SwitchPreference addNewSegment;
|
||||||
|
private SwitchPreference votingEnabled;
|
||||||
|
private SwitchPreference autoHideSkipSegmentButton;
|
||||||
|
private SwitchPreference compactSkipButton;
|
||||||
|
private SwitchPreference squareLayout;
|
||||||
|
private SwitchPreference showSkipToast;
|
||||||
|
private SwitchPreference trackSkips;
|
||||||
|
private SwitchPreference showTimeWithoutSegments;
|
||||||
|
private SwitchPreference toastOnConnectionError;
|
||||||
|
|
||||||
|
private ResettableEditTextPreference newSegmentStep;
|
||||||
|
private ResettableEditTextPreference minSegmentDuration;
|
||||||
|
private EditTextPreference privateUserId;
|
||||||
|
private EditTextPreference importExport;
|
||||||
|
private Preference apiUrl;
|
||||||
|
|
||||||
|
private final List<SegmentCategoryListPreference> segmentCategories = new ArrayList<>();
|
||||||
|
private PreferenceCategory segmentCategory;
|
||||||
|
|
||||||
|
public SponsorBlockPreferenceGroup(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||||
|
super(context, attrs, defStyleAttr, defStyleRes);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SponsorBlockPreferenceGroup(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||||
|
super(context, attrs, defStyleAttr);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SponsorBlockPreferenceGroup(Context context, AttributeSet attrs) {
|
||||||
|
super(context, attrs);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SuppressLint("MissingSuperCall")
|
||||||
|
protected View onCreateView(ViewGroup parent) {
|
||||||
|
// Title is not shown.
|
||||||
|
return new View(getContext());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateUI() {
|
||||||
|
try {
|
||||||
|
Logger.printDebug(() -> "updateUI");
|
||||||
|
|
||||||
|
final boolean enabled = Settings.SB_ENABLED.get();
|
||||||
|
if (!enabled) {
|
||||||
|
SponsorBlockViewController.hideAll();
|
||||||
|
SegmentPlaybackController.setCurrentVideoId(null);
|
||||||
|
} else if (!Settings.SB_CREATE_NEW_SEGMENT.get()) {
|
||||||
|
SponsorBlockViewController.hideNewSegmentLayout();
|
||||||
|
}
|
||||||
|
// Voting and add new segment buttons automatically show/hide themselves.
|
||||||
|
|
||||||
|
SponsorBlockViewController.updateLayout();
|
||||||
|
|
||||||
|
sbEnabled.setChecked(enabled);
|
||||||
|
|
||||||
|
addNewSegment.setChecked(Settings.SB_CREATE_NEW_SEGMENT.get());
|
||||||
|
addNewSegment.setEnabled(enabled);
|
||||||
|
|
||||||
|
votingEnabled.setChecked(Settings.SB_VOTING_BUTTON.get());
|
||||||
|
votingEnabled.setEnabled(enabled);
|
||||||
|
|
||||||
|
autoHideSkipSegmentButton.setEnabled(enabled);
|
||||||
|
autoHideSkipSegmentButton.setChecked(Settings.SB_AUTO_HIDE_SKIP_BUTTON.get());
|
||||||
|
|
||||||
|
compactSkipButton.setChecked(Settings.SB_COMPACT_SKIP_BUTTON.get());
|
||||||
|
compactSkipButton.setEnabled(enabled);
|
||||||
|
|
||||||
|
squareLayout.setChecked(Settings.SB_SQUARE_LAYOUT.get());
|
||||||
|
squareLayout.setEnabled(enabled);
|
||||||
|
|
||||||
|
showSkipToast.setChecked(Settings.SB_TOAST_ON_SKIP.get());
|
||||||
|
showSkipToast.setEnabled(enabled);
|
||||||
|
|
||||||
|
toastOnConnectionError.setChecked(Settings.SB_TOAST_ON_CONNECTION_ERROR.get());
|
||||||
|
toastOnConnectionError.setEnabled(enabled);
|
||||||
|
|
||||||
|
trackSkips.setChecked(Settings.SB_TRACK_SKIP_COUNT.get());
|
||||||
|
trackSkips.setEnabled(enabled);
|
||||||
|
|
||||||
|
showTimeWithoutSegments.setChecked(Settings.SB_VIDEO_LENGTH_WITHOUT_SEGMENTS.get());
|
||||||
|
showTimeWithoutSegments.setEnabled(enabled);
|
||||||
|
|
||||||
|
newSegmentStep.setText((Settings.SB_CREATE_NEW_SEGMENT_STEP.get()).toString());
|
||||||
|
newSegmentStep.setEnabled(enabled);
|
||||||
|
|
||||||
|
minSegmentDuration.setText((Settings.SB_SEGMENT_MIN_DURATION.get()).toString());
|
||||||
|
minSegmentDuration.setEnabled(enabled);
|
||||||
|
|
||||||
|
privateUserId.setText(Settings.SB_PRIVATE_USER_ID.get());
|
||||||
|
privateUserId.setEnabled(enabled);
|
||||||
|
|
||||||
|
// If the user has a private user id, then include a subtext that mentions not to share it.
|
||||||
|
String importExportSummary = SponsorBlockSettings.userHasSBPrivateId()
|
||||||
|
? str("revanced_sb_settings_ie_sum_warning")
|
||||||
|
: str("revanced_sb_settings_ie_sum");
|
||||||
|
importExport.setSummary(importExportSummary);
|
||||||
|
|
||||||
|
apiUrl.setEnabled(enabled);
|
||||||
|
importExport.setEnabled(enabled);
|
||||||
|
segmentCategory.setEnabled(enabled);
|
||||||
|
|
||||||
|
for (SegmentCategoryListPreference category : segmentCategories) {
|
||||||
|
category.updateUI();
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Logger.printException(() -> "updateUI failure", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void onAttachedToActivity() {
|
||||||
|
try {
|
||||||
|
super.onAttachedToActivity();
|
||||||
|
|
||||||
|
if (preferencesInitialized) {
|
||||||
|
if (settingsImported) {
|
||||||
|
settingsImported = false;
|
||||||
|
updateUI();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
preferencesInitialized = true;
|
||||||
|
|
||||||
|
Logger.printDebug(() -> "Creating settings preferences");
|
||||||
|
Context context = getContext();
|
||||||
|
SponsorBlockSettings.initialize();
|
||||||
|
|
||||||
|
sbEnabled = new SwitchPreference(context);
|
||||||
|
sbEnabled.setTitle(str("revanced_sb_enable_sb"));
|
||||||
|
sbEnabled.setSummary(str("revanced_sb_enable_sb_sum"));
|
||||||
|
addPreference(sbEnabled);
|
||||||
|
sbEnabled.setOnPreferenceChangeListener((preference1, newValue) -> {
|
||||||
|
Settings.SB_ENABLED.save((Boolean) newValue);
|
||||||
|
updateUI();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
PreferenceCategory appearanceCategory = new PreferenceCategory(context);
|
||||||
|
appearanceCategory.setTitle(str("revanced_sb_appearance_category"));
|
||||||
|
addPreference(appearanceCategory);
|
||||||
|
|
||||||
|
votingEnabled = new SwitchPreference(context);
|
||||||
|
votingEnabled.setTitle(str("revanced_sb_enable_voting"));
|
||||||
|
votingEnabled.setSummaryOn(str("revanced_sb_enable_voting_sum_on"));
|
||||||
|
votingEnabled.setSummaryOff(str("revanced_sb_enable_voting_sum_off"));
|
||||||
|
votingEnabled.setOnPreferenceChangeListener((preference1, newValue) -> {
|
||||||
|
Settings.SB_VOTING_BUTTON.save((Boolean) newValue);
|
||||||
|
updateUI();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
appearanceCategory.addPreference(votingEnabled);
|
||||||
|
|
||||||
|
autoHideSkipSegmentButton = new SwitchPreference(context);
|
||||||
|
autoHideSkipSegmentButton.setTitle(str("revanced_sb_enable_auto_hide_skip_segment_button"));
|
||||||
|
autoHideSkipSegmentButton.setSummaryOn(str("revanced_sb_enable_auto_hide_skip_segment_button_sum_on"));
|
||||||
|
autoHideSkipSegmentButton.setSummaryOff(str("revanced_sb_enable_auto_hide_skip_segment_button_sum_off"));
|
||||||
|
autoHideSkipSegmentButton.setOnPreferenceChangeListener((preference1, newValue) -> {
|
||||||
|
Settings.SB_AUTO_HIDE_SKIP_BUTTON.save((Boolean) newValue);
|
||||||
|
updateUI();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
appearanceCategory.addPreference(autoHideSkipSegmentButton);
|
||||||
|
|
||||||
|
compactSkipButton = new SwitchPreference(context);
|
||||||
|
compactSkipButton.setTitle(str("revanced_sb_enable_compact_skip_button"));
|
||||||
|
compactSkipButton.setSummaryOn(str("revanced_sb_enable_compact_skip_button_sum_on"));
|
||||||
|
compactSkipButton.setSummaryOff(str("revanced_sb_enable_compact_skip_button_sum_off"));
|
||||||
|
compactSkipButton.setOnPreferenceChangeListener((preference1, newValue) -> {
|
||||||
|
Settings.SB_COMPACT_SKIP_BUTTON.save((Boolean) newValue);
|
||||||
|
updateUI();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
appearanceCategory.addPreference(compactSkipButton);
|
||||||
|
|
||||||
|
squareLayout = new SwitchPreference(context);
|
||||||
|
squareLayout.setTitle(str("revanced_sb_square_layout"));
|
||||||
|
squareLayout.setSummaryOn(str("revanced_sb_square_layout_sum_on"));
|
||||||
|
squareLayout.setSummaryOff(str("revanced_sb_square_layout_sum_off"));
|
||||||
|
squareLayout.setOnPreferenceChangeListener((preference1, newValue) -> {
|
||||||
|
Settings.SB_SQUARE_LAYOUT.save((Boolean) newValue);
|
||||||
|
updateUI();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
appearanceCategory.addPreference(squareLayout);
|
||||||
|
|
||||||
|
showSkipToast = new SwitchPreference(context);
|
||||||
|
showSkipToast.setTitle(str("revanced_sb_general_skiptoast"));
|
||||||
|
showSkipToast.setSummaryOn(str("revanced_sb_general_skiptoast_sum_on"));
|
||||||
|
showSkipToast.setSummaryOff(str("revanced_sb_general_skiptoast_sum_off"));
|
||||||
|
showSkipToast.setOnPreferenceClickListener(preference1 -> {
|
||||||
|
Utils.showToastShort(str("revanced_sb_skipped_sponsor"));
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
showSkipToast.setOnPreferenceChangeListener((preference1, newValue) -> {
|
||||||
|
Settings.SB_TOAST_ON_SKIP.save((Boolean) newValue);
|
||||||
|
updateUI();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
appearanceCategory.addPreference(showSkipToast);
|
||||||
|
|
||||||
|
showTimeWithoutSegments = new SwitchPreference(context);
|
||||||
|
showTimeWithoutSegments.setTitle(str("revanced_sb_general_time_without"));
|
||||||
|
showTimeWithoutSegments.setSummaryOn(str("revanced_sb_general_time_without_sum_on"));
|
||||||
|
showTimeWithoutSegments.setSummaryOff(str("revanced_sb_general_time_without_sum_off"));
|
||||||
|
showTimeWithoutSegments.setOnPreferenceChangeListener((preference1, newValue) -> {
|
||||||
|
Settings.SB_VIDEO_LENGTH_WITHOUT_SEGMENTS.save((Boolean) newValue);
|
||||||
|
updateUI();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
appearanceCategory.addPreference(showTimeWithoutSegments);
|
||||||
|
|
||||||
|
segmentCategory = new PreferenceCategory(context);
|
||||||
|
segmentCategory.setTitle(str("revanced_sb_diff_segments"));
|
||||||
|
addPreference(segmentCategory);
|
||||||
|
|
||||||
|
for (SegmentCategory category : SegmentCategory.categoriesWithoutUnsubmitted()) {
|
||||||
|
SegmentCategoryListPreference categoryPreference = new SegmentCategoryListPreference(context, category);
|
||||||
|
segmentCategories.add(categoryPreference);
|
||||||
|
segmentCategory.addPreference(categoryPreference);
|
||||||
|
}
|
||||||
|
|
||||||
|
PreferenceCategory createSegmentCategory = new PreferenceCategory(context);
|
||||||
|
createSegmentCategory.setTitle(str("revanced_sb_create_segment_category"));
|
||||||
|
addPreference(createSegmentCategory);
|
||||||
|
|
||||||
|
addNewSegment = new SwitchPreference(context);
|
||||||
|
addNewSegment.setTitle(str("revanced_sb_enable_create_segment"));
|
||||||
|
addNewSegment.setSummaryOn(str("revanced_sb_enable_create_segment_sum_on"));
|
||||||
|
addNewSegment.setSummaryOff(str("revanced_sb_enable_create_segment_sum_off"));
|
||||||
|
addNewSegment.setOnPreferenceChangeListener((preference1, o) -> {
|
||||||
|
Boolean newValue = (Boolean) o;
|
||||||
|
if (newValue && !Settings.SB_SEEN_GUIDELINES.get()) {
|
||||||
|
new AlertDialog.Builder(preference1.getContext())
|
||||||
|
.setTitle(str("revanced_sb_guidelines_popup_title"))
|
||||||
|
.setMessage(str("revanced_sb_guidelines_popup_content"))
|
||||||
|
.setNegativeButton(str("revanced_sb_guidelines_popup_already_read"), null)
|
||||||
|
.setPositiveButton(str("revanced_sb_guidelines_popup_open"), (dialogInterface, i) -> openGuidelines())
|
||||||
|
.setOnDismissListener(dialog -> Settings.SB_SEEN_GUIDELINES.save(true))
|
||||||
|
.setCancelable(false)
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
Settings.SB_CREATE_NEW_SEGMENT.save(newValue);
|
||||||
|
updateUI();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
createSegmentCategory.addPreference(addNewSegment);
|
||||||
|
|
||||||
|
newSegmentStep = new ResettableEditTextPreference(context);
|
||||||
|
newSegmentStep.setSetting(Settings.SB_CREATE_NEW_SEGMENT_STEP);
|
||||||
|
newSegmentStep.setTitle(str("revanced_sb_general_adjusting"));
|
||||||
|
newSegmentStep.setSummary(str("revanced_sb_general_adjusting_sum"));
|
||||||
|
newSegmentStep.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER);
|
||||||
|
newSegmentStep.setOnPreferenceChangeListener((preference1, newValue) -> {
|
||||||
|
try {
|
||||||
|
final int newAdjustmentValue = Integer.parseInt(newValue.toString());
|
||||||
|
if (newAdjustmentValue != 0) {
|
||||||
|
Settings.SB_CREATE_NEW_SEGMENT_STEP.save(newAdjustmentValue);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException ex) {
|
||||||
|
Logger.printInfo(() -> "Invalid new segment step", ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
Utils.showToastLong(str("revanced_sb_general_adjusting_invalid"));
|
||||||
|
updateUI();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
createSegmentCategory.addPreference(newSegmentStep);
|
||||||
|
|
||||||
|
Preference guidelinePreferences = new Preference(context);
|
||||||
|
guidelinePreferences.setTitle(str("revanced_sb_guidelines_preference_title"));
|
||||||
|
guidelinePreferences.setSummary(str("revanced_sb_guidelines_preference_sum"));
|
||||||
|
guidelinePreferences.setOnPreferenceClickListener(preference1 -> {
|
||||||
|
openGuidelines();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
createSegmentCategory.addPreference(guidelinePreferences);
|
||||||
|
|
||||||
|
PreferenceCategory generalCategory = new PreferenceCategory(context);
|
||||||
|
generalCategory.setTitle(str("revanced_sb_general"));
|
||||||
|
addPreference(generalCategory);
|
||||||
|
|
||||||
|
toastOnConnectionError = new SwitchPreference(context);
|
||||||
|
toastOnConnectionError.setTitle(str("revanced_sb_toast_on_connection_error_title"));
|
||||||
|
toastOnConnectionError.setSummaryOn(str("revanced_sb_toast_on_connection_error_summary_on"));
|
||||||
|
toastOnConnectionError.setSummaryOff(str("revanced_sb_toast_on_connection_error_summary_off"));
|
||||||
|
toastOnConnectionError.setOnPreferenceChangeListener((preference1, newValue) -> {
|
||||||
|
Settings.SB_TOAST_ON_CONNECTION_ERROR.save((Boolean) newValue);
|
||||||
|
updateUI();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
generalCategory.addPreference(toastOnConnectionError);
|
||||||
|
|
||||||
|
trackSkips = new SwitchPreference(context);
|
||||||
|
trackSkips.setTitle(str("revanced_sb_general_skipcount"));
|
||||||
|
trackSkips.setSummaryOn(str("revanced_sb_general_skipcount_sum_on"));
|
||||||
|
trackSkips.setSummaryOff(str("revanced_sb_general_skipcount_sum_off"));
|
||||||
|
trackSkips.setOnPreferenceChangeListener((preference1, newValue) -> {
|
||||||
|
Settings.SB_TRACK_SKIP_COUNT.save((Boolean) newValue);
|
||||||
|
updateUI();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
generalCategory.addPreference(trackSkips);
|
||||||
|
|
||||||
|
minSegmentDuration = new ResettableEditTextPreference(context);
|
||||||
|
minSegmentDuration.setSetting(Settings.SB_SEGMENT_MIN_DURATION);
|
||||||
|
minSegmentDuration.setTitle(str("revanced_sb_general_min_duration"));
|
||||||
|
minSegmentDuration.setSummary(str("revanced_sb_general_min_duration_sum"));
|
||||||
|
minSegmentDuration.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
|
||||||
|
minSegmentDuration.setOnPreferenceChangeListener((preference1, newValue) -> {
|
||||||
|
try {
|
||||||
|
Float minTimeDuration = Float.valueOf(newValue.toString());
|
||||||
|
Settings.SB_SEGMENT_MIN_DURATION.save(minTimeDuration);
|
||||||
|
return true;
|
||||||
|
} catch (NumberFormatException ex) {
|
||||||
|
Logger.printInfo(() -> "Invalid minimum segment duration", ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
Utils.showToastLong(str("revanced_sb_general_min_duration_invalid"));
|
||||||
|
updateUI();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
generalCategory.addPreference(minSegmentDuration);
|
||||||
|
|
||||||
|
privateUserId = new EditTextPreference(context) {
|
||||||
|
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
|
||||||
|
Utils.setEditTextDialogTheme(builder);
|
||||||
|
|
||||||
|
builder.setNeutralButton(str("revanced_sb_settings_copy"), (dialog, which) -> {
|
||||||
|
Utils.setClipboard(getEditText().getText().toString());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
privateUserId.setTitle(str("revanced_sb_general_uuid"));
|
||||||
|
privateUserId.setSummary(str("revanced_sb_general_uuid_sum"));
|
||||||
|
privateUserId.setOnPreferenceChangeListener((preference1, newValue) -> {
|
||||||
|
String newUUID = newValue.toString();
|
||||||
|
if (!SponsorBlockSettings.isValidSBUserId(newUUID)) {
|
||||||
|
Utils.showToastLong(str("revanced_sb_general_uuid_invalid"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Settings.SB_PRIVATE_USER_ID.save(newUUID);
|
||||||
|
updateUI();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
generalCategory.addPreference(privateUserId);
|
||||||
|
|
||||||
|
apiUrl = new Preference(context);
|
||||||
|
apiUrl.setTitle(str("revanced_sb_general_api_url"));
|
||||||
|
apiUrl.setSummary(Html.fromHtml(str("revanced_sb_general_api_url_sum")));
|
||||||
|
apiUrl.setOnPreferenceClickListener(preference1 -> {
|
||||||
|
EditText editText = new EditText(context);
|
||||||
|
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI);
|
||||||
|
editText.setText(Settings.SB_API_URL.get());
|
||||||
|
|
||||||
|
DialogInterface.OnClickListener urlChangeListener = (dialog, buttonPressed) -> {
|
||||||
|
if (buttonPressed == DialogInterface.BUTTON_NEUTRAL) {
|
||||||
|
Settings.SB_API_URL.resetToDefault();
|
||||||
|
Utils.showToastLong(str("revanced_sb_api_url_reset"));
|
||||||
|
} else if (buttonPressed == DialogInterface.BUTTON_POSITIVE) {
|
||||||
|
String serverAddress = editText.getText().toString();
|
||||||
|
if (!SponsorBlockSettings.isValidSBServerAddress(serverAddress)) {
|
||||||
|
Utils.showToastLong(str("revanced_sb_api_url_invalid"));
|
||||||
|
} else if (!serverAddress.equals(Settings.SB_API_URL.get())) {
|
||||||
|
Settings.SB_API_URL.save(serverAddress);
|
||||||
|
Utils.showToastLong(str("revanced_sb_api_url_changed"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
new AlertDialog.Builder(context)
|
||||||
|
.setTitle(apiUrl.getTitle())
|
||||||
|
.setView(editText)
|
||||||
|
.setNegativeButton(android.R.string.cancel, null)
|
||||||
|
.setNeutralButton(str("revanced_sb_reset"), urlChangeListener)
|
||||||
|
.setPositiveButton(android.R.string.ok, urlChangeListener)
|
||||||
|
.show();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
generalCategory.addPreference(apiUrl);
|
||||||
|
|
||||||
|
importExport = new EditTextPreference(context) {
|
||||||
|
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
|
||||||
|
Utils.setEditTextDialogTheme(builder);
|
||||||
|
|
||||||
|
builder.setNeutralButton(str("revanced_sb_settings_copy"), (dialog, which) -> {
|
||||||
|
Utils.setClipboard(getEditText().getText().toString());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
importExport.setTitle(str("revanced_sb_settings_ie"));
|
||||||
|
// Summary is set in updateUI()
|
||||||
|
importExport.getEditText().setInputType(InputType.TYPE_CLASS_TEXT
|
||||||
|
| InputType.TYPE_TEXT_FLAG_MULTI_LINE
|
||||||
|
| InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
|
||||||
|
importExport.getEditText().setAutofillHints((String) null);
|
||||||
|
importExport.getEditText().setTextSize(TypedValue.COMPLEX_UNIT_PT, 8);
|
||||||
|
importExport.setOnPreferenceClickListener(preference1 -> {
|
||||||
|
importExport.getEditText().setText(SponsorBlockSettings.exportDesktopSettings());
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
importExport.setOnPreferenceChangeListener((preference1, newValue) -> {
|
||||||
|
SponsorBlockSettings.importDesktopSettings((String) newValue);
|
||||||
|
updateUI();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
generalCategory.addPreference(importExport);
|
||||||
|
|
||||||
|
Utils.setPreferenceTitlesToMultiLineIfNeeded(this);
|
||||||
|
|
||||||
|
updateUI();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Logger.printException(() -> "onAttachedToActivity failure", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void openGuidelines() {
|
||||||
|
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||||
|
intent.setData(Uri.parse("https://wiki.sponsor.ajay.app/w/Guidelines"));
|
||||||
|
getContext().startActivity(intent);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,210 @@
|
|||||||
|
package app.revanced.extension.youtube.sponsorblock.ui;
|
||||||
|
|
||||||
|
import static android.text.Html.fromHtml;
|
||||||
|
import static app.revanced.extension.shared.StringRef.str;
|
||||||
|
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.preference.EditTextPreference;
|
||||||
|
import android.preference.Preference;
|
||||||
|
import android.preference.PreferenceCategory;
|
||||||
|
import android.util.AttributeSet;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import app.revanced.extension.shared.Logger;
|
||||||
|
import app.revanced.extension.shared.Utils;
|
||||||
|
import app.revanced.extension.shared.settings.preference.ResettableEditTextPreference;
|
||||||
|
import app.revanced.extension.youtube.settings.Settings;
|
||||||
|
import app.revanced.extension.youtube.sponsorblock.SponsorBlockSettings;
|
||||||
|
import app.revanced.extension.youtube.sponsorblock.SponsorBlockUtils;
|
||||||
|
import app.revanced.extension.youtube.sponsorblock.objects.UserStats;
|
||||||
|
import app.revanced.extension.youtube.sponsorblock.requests.SBRequester;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User skip stats.
|
||||||
|
*
|
||||||
|
* None of the preferences here show up in search results because
|
||||||
|
* a category cannot be added to another category for the search results.
|
||||||
|
* Additionally the stats must load remotely on a background thread which means the
|
||||||
|
* preferences are not available to collect for search when the settings first load.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({"unused", "deprecation"})
|
||||||
|
public class SponsorBlockStatsPreferenceCategory extends PreferenceCategory {
|
||||||
|
|
||||||
|
public SponsorBlockStatsPreferenceCategory(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||||
|
super(context, attrs, defStyleAttr, defStyleRes);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SponsorBlockStatsPreferenceCategory(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||||
|
super(context, attrs, defStyleAttr);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SponsorBlockStatsPreferenceCategory(Context context, AttributeSet attrs) {
|
||||||
|
super(context, attrs);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void onAttachedToActivity() {
|
||||||
|
try {
|
||||||
|
super.onAttachedToActivity();
|
||||||
|
|
||||||
|
Logger.printDebug(() -> "Updating SB stats UI");
|
||||||
|
final boolean enabled = Settings.SB_ENABLED.get();
|
||||||
|
setEnabled(enabled);
|
||||||
|
removeAll();
|
||||||
|
|
||||||
|
if (!SponsorBlockSettings.userHasSBPrivateId()) {
|
||||||
|
// User has never voted or created any segments. Only local stats exist.
|
||||||
|
addLocalUserStats();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Preference loadingPlaceholderPreference = new Preference(getContext());
|
||||||
|
loadingPlaceholderPreference.setEnabled(false);
|
||||||
|
addPreference(loadingPlaceholderPreference);
|
||||||
|
|
||||||
|
if (enabled) {
|
||||||
|
loadingPlaceholderPreference.setTitle(str("revanced_sb_stats_loading"));
|
||||||
|
Utils.runOnBackgroundThread(() -> {
|
||||||
|
UserStats stats = SBRequester.retrieveUserStats();
|
||||||
|
Utils.runOnMainThread(() -> { // get back on main thread to modify UI elements
|
||||||
|
addUserStats(loadingPlaceholderPreference, stats);
|
||||||
|
addLocalUserStats();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
loadingPlaceholderPreference.setTitle(str("revanced_sb_stats_sb_disabled"));
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Logger.printException(() -> "onAttachedToActivity failure", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addUserStats(Preference loadingPlaceholder, @Nullable UserStats stats) {
|
||||||
|
Utils.verifyOnMainThread();
|
||||||
|
try {
|
||||||
|
if (stats == null) {
|
||||||
|
loadingPlaceholder.setTitle(str("revanced_sb_stats_connection_failure"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
removeAll();
|
||||||
|
Context context = getContext();
|
||||||
|
|
||||||
|
if (stats.totalSegmentCountIncludingIgnored > 0) {
|
||||||
|
// If user has not created any segments, there's no reason to set a username.
|
||||||
|
String userName = stats.userName;
|
||||||
|
EditTextPreference preference = new ResettableEditTextPreference(context);
|
||||||
|
preference.setTitle(fromHtml(str("revanced_sb_stats_username", userName)));
|
||||||
|
preference.setSummary(str("revanced_sb_stats_username_change"));
|
||||||
|
preference.setText(userName);
|
||||||
|
preference.setOnPreferenceChangeListener((preference1, value) -> {
|
||||||
|
Utils.runOnBackgroundThread(() -> {
|
||||||
|
String newUserName = (String) value;
|
||||||
|
String errorMessage = SBRequester.setUsername(newUserName);
|
||||||
|
Utils.runOnMainThread(() -> {
|
||||||
|
if (errorMessage == null) {
|
||||||
|
preference.setTitle(fromHtml(str("revanced_sb_stats_username", newUserName)));
|
||||||
|
preference.setText(newUserName);
|
||||||
|
Utils.showToastLong(str("revanced_sb_stats_username_changed"));
|
||||||
|
} else {
|
||||||
|
preference.setText(userName); // revert to previous
|
||||||
|
SponsorBlockUtils.showErrorDialog(errorMessage);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
addPreference(preference);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// Number of segment submissions (does not include ignored segments).
|
||||||
|
Preference preference = new Preference(context);
|
||||||
|
String formatted = SponsorBlockUtils.getNumberOfSkipsString(stats.segmentCount);
|
||||||
|
preference.setTitle(fromHtml(str("revanced_sb_stats_submissions", formatted)));
|
||||||
|
preference.setSummary(str("revanced_sb_stats_submissions_sum"));
|
||||||
|
if (stats.totalSegmentCountIncludingIgnored == 0) {
|
||||||
|
preference.setSelectable(false);
|
||||||
|
} else {
|
||||||
|
preference.setOnPreferenceClickListener(preference1 -> {
|
||||||
|
Intent i = new Intent(Intent.ACTION_VIEW);
|
||||||
|
i.setData(Uri.parse("https://sb.ltn.fi/userid/" + stats.publicUserId));
|
||||||
|
preference1.getContext().startActivity(i);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
addPreference(preference);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// "user reputation". Usually not useful since it appears most users have zero reputation.
|
||||||
|
// But if there is a reputation then show it here.
|
||||||
|
Preference preference = new Preference(context);
|
||||||
|
preference.setTitle(fromHtml(str("revanced_sb_stats_reputation", stats.reputation)));
|
||||||
|
preference.setSelectable(false);
|
||||||
|
if (stats.reputation != 0) {
|
||||||
|
addPreference(preference);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// Time saved for other users.
|
||||||
|
Preference preference = new Preference(context);
|
||||||
|
|
||||||
|
String stats_saved;
|
||||||
|
String stats_saved_sum;
|
||||||
|
if (stats.totalSegmentCountIncludingIgnored == 0) {
|
||||||
|
stats_saved = str("revanced_sb_stats_saved_zero");
|
||||||
|
stats_saved_sum = str("revanced_sb_stats_saved_sum_zero");
|
||||||
|
} else {
|
||||||
|
stats_saved = str("revanced_sb_stats_saved",
|
||||||
|
SponsorBlockUtils.getNumberOfSkipsString(stats.viewCount));
|
||||||
|
stats_saved_sum = str("revanced_sb_stats_saved_sum",
|
||||||
|
SponsorBlockUtils.getTimeSavedString((long) (60 * stats.minutesSaved)));
|
||||||
|
}
|
||||||
|
preference.setTitle(fromHtml(stats_saved));
|
||||||
|
preference.setSummary(fromHtml(stats_saved_sum));
|
||||||
|
preference.setOnPreferenceClickListener(preference1 -> {
|
||||||
|
Intent i = new Intent(Intent.ACTION_VIEW);
|
||||||
|
i.setData(Uri.parse("https://sponsor.ajay.app/stats/"));
|
||||||
|
preference1.getContext().startActivity(i);
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
addPreference(preference);
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Logger.printException(() -> "addUserStats failure", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addLocalUserStats() {
|
||||||
|
// Time the user saved by using SB.
|
||||||
|
Preference preference = new Preference(getContext());
|
||||||
|
Runnable updateStatsSelfSaved = () -> {
|
||||||
|
String formatted = SponsorBlockUtils.getNumberOfSkipsString(
|
||||||
|
Settings.SB_LOCAL_TIME_SAVED_NUMBER_SEGMENTS.get());
|
||||||
|
preference.setTitle(fromHtml(str("revanced_sb_stats_self_saved", formatted)));
|
||||||
|
|
||||||
|
String formattedSaved = SponsorBlockUtils.getTimeSavedString(
|
||||||
|
Settings.SB_LOCAL_TIME_SAVED_MILLISECONDS.get() / 1000);
|
||||||
|
preference.setSummary(fromHtml(str("revanced_sb_stats_self_saved_sum", formattedSaved)));
|
||||||
|
};
|
||||||
|
updateStatsSelfSaved.run();
|
||||||
|
|
||||||
|
preference.setOnPreferenceClickListener(preference1 -> {
|
||||||
|
new AlertDialog.Builder(preference1.getContext())
|
||||||
|
.setTitle(str("revanced_sb_stats_self_saved_reset_title"))
|
||||||
|
.setPositiveButton(android.R.string.yes, (dialog, whichButton) -> {
|
||||||
|
Settings.SB_LOCAL_TIME_SAVED_NUMBER_SEGMENTS.resetToDefault();
|
||||||
|
Settings.SB_LOCAL_TIME_SAVED_MILLISECONDS.resetToDefault();
|
||||||
|
updateStatsSelfSaved.run();
|
||||||
|
})
|
||||||
|
.setNegativeButton(android.R.string.no, null).show();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
addPreference(preference);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
|
|||||||
org.gradle.parallel = true
|
org.gradle.parallel = true
|
||||||
android.useAndroidX = true
|
android.useAndroidX = true
|
||||||
kotlin.code.style = official
|
kotlin.code.style = official
|
||||||
version = 5.23.0-dev.6
|
version = 5.24.0-dev.7
|
||||||
|
|||||||
@@ -240,6 +240,10 @@ public final class app/revanced/patches/instagram/ads/HideAdsPatchKt {
|
|||||||
public static final fun getHideAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
public static final fun getHideAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final class app/revanced/patches/instagram/misc/signature/SignatureCheckPatchKt {
|
||||||
|
public static final fun getSignatureCheckPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||||
|
}
|
||||||
|
|
||||||
public final class app/revanced/patches/irplus/ad/RemoveAdsPatchKt {
|
public final class app/revanced/patches/irplus/ad/RemoveAdsPatchKt {
|
||||||
public static final fun getRemoveAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
public static final fun getRemoveAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||||
}
|
}
|
||||||
@@ -872,6 +876,10 @@ public final class app/revanced/patches/spotify/misc/privacy/SanitizeSharingLink
|
|||||||
public static final fun getSanitizeSharingLinksPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
public static final fun getSanitizeSharingLinksPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final class app/revanced/patches/spotify/misc/widgets/FixThirdPartyLaunchersWidgetsKt {
|
||||||
|
public static final fun getFixThirdPartyLaunchersWidgets ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||||
|
}
|
||||||
|
|
||||||
public final class app/revanced/patches/spotify/navbar/PremiumNavbarTabPatchKt {
|
public final class app/revanced/patches/spotify/navbar/PremiumNavbarTabPatchKt {
|
||||||
public static final fun getPremiumNavbarTabPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
public static final fun getPremiumNavbarTabPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||||
}
|
}
|
||||||
@@ -1216,6 +1224,10 @@ public final class app/revanced/patches/youtube/layout/hide/player/flyoutmenupan
|
|||||||
public static final fun getHidePlayerFlyoutMenuPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
public static final fun getHidePlayerFlyoutMenuPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final class app/revanced/patches/youtube/layout/hide/relatedvideooverlay/HideRelatedVideoOverlayPatchKt {
|
||||||
|
public static final fun getHideRelatedVideoOverlayPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||||
|
}
|
||||||
|
|
||||||
public final class app/revanced/patches/youtube/layout/hide/rollingnumber/DisableRollingNumberAnimationPatchKt {
|
public final class app/revanced/patches/youtube/layout/hide/rollingnumber/DisableRollingNumberAnimationPatchKt {
|
||||||
public static final fun getDisableRollingNumberAnimationPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
public static final fun getDisableRollingNumberAnimationPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||||
}
|
}
|
||||||
@@ -1460,8 +1472,10 @@ public final class app/revanced/patches/youtube/misc/settings/PreferenceScreen :
|
|||||||
public final fun getGENERAL_LAYOUT ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;
|
public final fun getGENERAL_LAYOUT ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;
|
||||||
public final fun getMISC ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;
|
public final fun getMISC ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;
|
||||||
public final fun getPLAYER ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;
|
public final fun getPLAYER ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;
|
||||||
|
public final fun getRETURN_YOUTUBE_DISLIKE ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;
|
||||||
public final fun getSEEKBAR ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;
|
public final fun getSEEKBAR ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;
|
||||||
public final fun getSHORTS ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;
|
public final fun getSHORTS ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;
|
||||||
|
public final fun getSPONSORBLOCK ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;
|
||||||
public final fun getSWIPE_CONTROLS ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;
|
public final fun getSWIPE_CONTROLS ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;
|
||||||
public final fun getVIDEO ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;
|
public final fun getVIDEO ()Lapp/revanced/patches/shared/misc/settings/preference/BasePreferenceScreen$Screen;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,5 @@ internal val adInjectorFingerprint = fingerprint {
|
|||||||
parameters("L", "L")
|
parameters("L", "L")
|
||||||
strings(
|
strings(
|
||||||
"SponsoredContentController.insertItem",
|
"SponsoredContentController.insertItem",
|
||||||
"SponsoredContentController::Delivery",
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package app.revanced.patches.instagram.misc.signature
|
||||||
|
|
||||||
|
import app.revanced.patcher.fingerprint
|
||||||
|
import app.revanced.util.getReference
|
||||||
|
import app.revanced.util.indexOfFirstInstruction
|
||||||
|
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||||
|
|
||||||
|
internal val isValidSignatureClassFingerprint = fingerprint {
|
||||||
|
strings("The provider for uri '", "' is not trusted: ")
|
||||||
|
}
|
||||||
|
|
||||||
|
internal val isValidSignatureMethodFingerprint = fingerprint {
|
||||||
|
parameters("L", "Z")
|
||||||
|
returns("Z")
|
||||||
|
custom { method, _ ->
|
||||||
|
method.indexOfFirstInstruction {
|
||||||
|
getReference<MethodReference>()?.name == "keySet"
|
||||||
|
} >= 0
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package app.revanced.patches.instagram.misc.signature
|
||||||
|
|
||||||
|
import app.revanced.patcher.patch.bytecodePatch
|
||||||
|
import app.revanced.util.returnEarly
|
||||||
|
|
||||||
|
@Suppress("unused")
|
||||||
|
val signatureCheckPatch = bytecodePatch(
|
||||||
|
name = "Disable signature check",
|
||||||
|
description = "Disables the signature check that causes the app to crash on startup."
|
||||||
|
) {
|
||||||
|
compatibleWith("com.instagram.android"("378.0.0.52.68"))
|
||||||
|
|
||||||
|
execute {
|
||||||
|
isValidSignatureMethodFingerprint
|
||||||
|
.match(isValidSignatureClassFingerprint.classDef)
|
||||||
|
.method
|
||||||
|
.returnEarly(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,10 +4,10 @@ import app.revanced.patcher.fingerprint
|
|||||||
import com.android.tools.smali.dexlib2.AccessFlags
|
import com.android.tools.smali.dexlib2.AccessFlags
|
||||||
import com.android.tools.smali.dexlib2.Opcode
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
|
|
||||||
internal val jwUtilCreateAdvertisementFingerprint = fingerprint {
|
internal val jwPlayerConfigFingerprint = fingerprint {
|
||||||
accessFlags(AccessFlags.PRIVATE, AccessFlags.STATIC)
|
accessFlags(AccessFlags.PUBLIC)
|
||||||
custom { methodDef, classDef ->
|
custom { methodDef, classDef ->
|
||||||
classDef.type == "Lnl/sanomamedia/android/nu/video/util/JWUtil;" && methodDef.name == "createAdvertising"
|
classDef.type == "Lcom/jwplayer/pub/api/configuration/PlayerConfig${'$'}Builder;" && methodDef.name == "advertisingConfig"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,11 @@ package app.revanced.patches.nunl.ads
|
|||||||
|
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||||
|
import app.revanced.patcher.extensions.InstructionExtensions.removeInstructions
|
||||||
import app.revanced.patcher.patch.bytecodePatch
|
import app.revanced.patcher.patch.bytecodePatch
|
||||||
import app.revanced.patches.shared.misc.extension.sharedExtensionPatch
|
import app.revanced.patches.shared.misc.extension.sharedExtensionPatch
|
||||||
|
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||||
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
|
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
@@ -11,23 +14,15 @@ val hideAdsPatch = bytecodePatch(
|
|||||||
name = "Hide ads",
|
name = "Hide ads",
|
||||||
description = "Hide ads and sponsored articles in list pages and remove pre-roll ads on videos.",
|
description = "Hide ads and sponsored articles in list pages and remove pre-roll ads on videos.",
|
||||||
) {
|
) {
|
||||||
compatibleWith("nl.sanomamedia.android.nu"("11.0.0", "11.0.1", "11.1.0"))
|
compatibleWith("nl.sanomamedia.android.nu"("11.3.0"))
|
||||||
|
|
||||||
dependsOn(sharedExtensionPatch("nunl", mainActivityOnCreateHook))
|
dependsOn(sharedExtensionPatch("nunl", mainActivityOnCreateHook))
|
||||||
|
|
||||||
execute {
|
execute {
|
||||||
// Disable video pre-roll ads.
|
// Disable video pre-roll ads.
|
||||||
// Whenever the app tries to create an ad via JWUtils.createAdvertising, don't actually tell the underlying JWPlayer library to do so => JWPlayer will not display ads.
|
// Whenever the app tries to define the advertising config for JWPlayer, don't set the advertising config and directly return.
|
||||||
jwUtilCreateAdvertisementFingerprint.method.addInstructions(
|
val iputInstructionIndex = jwPlayerConfigFingerprint.method.indexOfFirstInstructionOrThrow(Opcode.IPUT_OBJECT)
|
||||||
0,
|
jwPlayerConfigFingerprint.method.removeInstructions(iputInstructionIndex, 1)
|
||||||
"""
|
|
||||||
new-instance v0, Lcom/jwplayer/pub/api/configuration/ads/VastAdvertisingConfig${'$'}Builder;
|
|
||||||
invoke-direct { v0 }, Lcom/jwplayer/pub/api/configuration/ads/VastAdvertisingConfig${'$'}Builder;-><init>()V
|
|
||||||
invoke-virtual { v0 }, Lcom/jwplayer/pub/api/configuration/ads/VastAdvertisingConfig${'$'}Builder;->build()Lcom/jwplayer/pub/api/configuration/ads/VastAdvertisingConfig;
|
|
||||||
move-result-object v0
|
|
||||||
return-object v0
|
|
||||||
""",
|
|
||||||
)
|
|
||||||
|
|
||||||
// Filter injected content from API calls out of lists.
|
// Filter injected content from API calls out of lists.
|
||||||
arrayOf(screenMapperFingerprint, nextPageRepositoryImplFingerprint).forEach {
|
arrayOf(screenMapperFingerprint, nextPageRepositoryImplFingerprint).forEach {
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package app.revanced.patches.spotify.misc.widgets
|
||||||
|
|
||||||
|
import app.revanced.patcher.fingerprint
|
||||||
|
import app.revanced.util.indexOfFirstInstruction
|
||||||
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
|
|
||||||
|
internal val canBindAppWidgetPermissionFingerprint = fingerprint {
|
||||||
|
strings("android.permission.BIND_APPWIDGET")
|
||||||
|
opcodes(Opcode.AND_INT_LIT8)
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package app.revanced.patches.spotify.misc.widgets
|
||||||
|
|
||||||
|
import app.revanced.patcher.patch.bytecodePatch
|
||||||
|
import app.revanced.util.returnEarly
|
||||||
|
|
||||||
|
@Suppress("unused")
|
||||||
|
val fixThirdPartyLaunchersWidgets = bytecodePatch(
|
||||||
|
name = "Fix third party launchers widgets",
|
||||||
|
description = "Fixes Spotify widgets not working in third party launchers, like Nova Launcher.",
|
||||||
|
) {
|
||||||
|
compatibleWith("com.spotify.music")
|
||||||
|
|
||||||
|
execute {
|
||||||
|
// Only system app launchers are granted the BIND_APPWIDGET permission.
|
||||||
|
// Override the method that checks for it to always return true, as this permission is not actually required
|
||||||
|
// for the widgets to work.
|
||||||
|
canBindAppWidgetPermissionFingerprint.method.returnEarly(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -143,6 +143,7 @@ val hideLayoutComponentsPatch = bytecodePatch(
|
|||||||
key = "revanced_hide_description_components_screen",
|
key = "revanced_hide_description_components_screen",
|
||||||
preferences = setOf(
|
preferences = setOf(
|
||||||
SwitchPreference("revanced_hide_ai_generated_video_summary_section"),
|
SwitchPreference("revanced_hide_ai_generated_video_summary_section"),
|
||||||
|
SwitchPreference("revanced_hide_ask_section"),
|
||||||
SwitchPreference("revanced_hide_attributes_section"),
|
SwitchPreference("revanced_hide_attributes_section"),
|
||||||
SwitchPreference("revanced_hide_chapters_section"),
|
SwitchPreference("revanced_hide_chapters_section"),
|
||||||
SwitchPreference("revanced_hide_info_cards_section"),
|
SwitchPreference("revanced_hide_info_cards_section"),
|
||||||
@@ -222,8 +223,9 @@ val hideLayoutComponentsPatch = bytecodePatch(
|
|||||||
SwitchPreference("revanced_hide_movies_section"),
|
SwitchPreference("revanced_hide_movies_section"),
|
||||||
SwitchPreference("revanced_hide_notify_me_button"),
|
SwitchPreference("revanced_hide_notify_me_button"),
|
||||||
SwitchPreference("revanced_hide_playables"),
|
SwitchPreference("revanced_hide_playables"),
|
||||||
SwitchPreference("revanced_hide_search_result_recommendations"),
|
SwitchPreference("revanced_hide_search_result_recommendation_labels"),
|
||||||
SwitchPreference("revanced_hide_show_more_button"),
|
SwitchPreference("revanced_hide_show_more_button"),
|
||||||
|
SwitchPreference("revanced_hide_ticket_shelf"),
|
||||||
SwitchPreference("revanced_hide_doodles"),
|
SwitchPreference("revanced_hide_doodles"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package app.revanced.patches.youtube.layout.hide.relatedvideooverlay
|
||||||
|
|
||||||
|
import app.revanced.patcher.fingerprint
|
||||||
|
import app.revanced.util.literal
|
||||||
|
|
||||||
|
internal val relatedEndScreenResultsParentFingerprint = fingerprint {
|
||||||
|
returns("V")
|
||||||
|
literal{ appRelatedEndScreenResults }
|
||||||
|
}
|
||||||
|
|
||||||
|
internal val relatedEndScreenResultsFingerprint = fingerprint {
|
||||||
|
returns("V")
|
||||||
|
parameters(
|
||||||
|
"I",
|
||||||
|
"Z",
|
||||||
|
"I",
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
package app.revanced.patches.youtube.layout.hide.relatedvideooverlay
|
||||||
|
|
||||||
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||||
|
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||||
|
import app.revanced.patcher.patch.bytecodePatch
|
||||||
|
import app.revanced.patcher.patch.resourcePatch
|
||||||
|
import app.revanced.patches.all.misc.resources.addResources
|
||||||
|
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||||
|
import app.revanced.patches.shared.misc.mapping.get
|
||||||
|
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
|
||||||
|
import app.revanced.patches.shared.misc.mapping.resourceMappings
|
||||||
|
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||||
|
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||||
|
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||||
|
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||||
|
import app.revanced.patcher.util.smali.ExternalLabel
|
||||||
|
|
||||||
|
internal var appRelatedEndScreenResults = -1L
|
||||||
|
private set
|
||||||
|
|
||||||
|
private val hideRelatedVideoOverlayResourcePatch = resourcePatch {
|
||||||
|
dependsOn(
|
||||||
|
resourceMappingPatch,
|
||||||
|
)
|
||||||
|
|
||||||
|
execute {
|
||||||
|
appRelatedEndScreenResults = resourceMappings[
|
||||||
|
"layout",
|
||||||
|
"app_related_endscreen_results",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||||
|
"Lapp/revanced/extension/youtube/patches/HideRelatedVideoOverlayPatch;"
|
||||||
|
|
||||||
|
@Suppress("unused")
|
||||||
|
val hideRelatedVideoOverlayPatch = bytecodePatch(
|
||||||
|
name = "Hide related video overlay",
|
||||||
|
description = "Adds an option to hide the related video overlay shown when swiping up in fullscreen.",
|
||||||
|
) {
|
||||||
|
dependsOn(
|
||||||
|
settingsPatch,
|
||||||
|
sharedExtensionPatch,
|
||||||
|
addResourcesPatch,
|
||||||
|
hideRelatedVideoOverlayResourcePatch,
|
||||||
|
)
|
||||||
|
|
||||||
|
compatibleWith(
|
||||||
|
"com.google.android.youtube"(
|
||||||
|
"19.16.39",
|
||||||
|
"19.25.37",
|
||||||
|
"19.34.42",
|
||||||
|
"19.43.41",
|
||||||
|
"19.47.53",
|
||||||
|
"20.07.39",
|
||||||
|
"20.12.46",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
execute {
|
||||||
|
addResources("youtube", "layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch")
|
||||||
|
|
||||||
|
PreferenceScreen.PLAYER.addPreferences(
|
||||||
|
SwitchPreference("revanced_hide_related_video_overlay")
|
||||||
|
)
|
||||||
|
|
||||||
|
relatedEndScreenResultsFingerprint.match(
|
||||||
|
relatedEndScreenResultsParentFingerprint.originalClassDef
|
||||||
|
).method.apply {
|
||||||
|
addInstructionsWithLabels(
|
||||||
|
0,
|
||||||
|
"""
|
||||||
|
invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->hideRelatedVideoOverlay()Z
|
||||||
|
move-result v0
|
||||||
|
if-eqz v0, :show
|
||||||
|
return-void
|
||||||
|
""",
|
||||||
|
ExternalLabel("show", getInstruction(0))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,7 +6,10 @@ import app.revanced.patcher.patch.PatchException
|
|||||||
import app.revanced.patcher.patch.bytecodePatch
|
import app.revanced.patcher.patch.bytecodePatch
|
||||||
import app.revanced.patches.all.misc.resources.addResources
|
import app.revanced.patches.all.misc.resources.addResources
|
||||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||||
import app.revanced.patches.shared.misc.settings.preference.IntentPreference
|
import app.revanced.patches.shared.misc.settings.preference.NonInteractivePreference
|
||||||
|
import app.revanced.patches.shared.misc.settings.preference.PreferenceCategory
|
||||||
|
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference
|
||||||
|
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||||
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||||
import app.revanced.patches.youtube.misc.litho.filter.addLithoFilter
|
import app.revanced.patches.youtube.misc.litho.filter.addLithoFilter
|
||||||
import app.revanced.patches.youtube.misc.litho.filter.lithoFilterPatch
|
import app.revanced.patches.youtube.misc.litho.filter.lithoFilterPatch
|
||||||
@@ -15,15 +18,18 @@ import app.revanced.patches.youtube.misc.playservice.is_19_33_or_greater
|
|||||||
import app.revanced.patches.youtube.misc.playservice.is_20_07_or_greater
|
import app.revanced.patches.youtube.misc.playservice.is_20_07_or_greater
|
||||||
import app.revanced.patches.youtube.misc.playservice.is_20_10_or_greater
|
import app.revanced.patches.youtube.misc.playservice.is_20_10_or_greater
|
||||||
import app.revanced.patches.youtube.misc.playservice.versionCheckPatch
|
import app.revanced.patches.youtube.misc.playservice.versionCheckPatch
|
||||||
import app.revanced.patches.youtube.misc.settings.addSettingPreference
|
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||||
import app.revanced.patches.youtube.misc.settings.newIntent
|
|
||||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||||
import app.revanced.patches.youtube.shared.conversionContextFingerprintToString
|
import app.revanced.patches.youtube.shared.conversionContextFingerprintToString
|
||||||
import app.revanced.patches.youtube.shared.rollingNumberTextViewAnimationUpdateFingerprint
|
import app.revanced.patches.youtube.shared.rollingNumberTextViewAnimationUpdateFingerprint
|
||||||
import app.revanced.patches.youtube.video.videoid.hookPlayerResponseVideoId
|
import app.revanced.patches.youtube.video.videoid.hookPlayerResponseVideoId
|
||||||
import app.revanced.patches.youtube.video.videoid.hookVideoId
|
import app.revanced.patches.youtube.video.videoid.hookVideoId
|
||||||
import app.revanced.patches.youtube.video.videoid.videoIdPatch
|
import app.revanced.patches.youtube.video.videoid.videoIdPatch
|
||||||
import app.revanced.util.*
|
import app.revanced.util.addInstructionsAtControlFlowLabel
|
||||||
|
import app.revanced.util.findFreeRegister
|
||||||
|
import app.revanced.util.getReference
|
||||||
|
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||||
|
import app.revanced.util.returnLate
|
||||||
import com.android.tools.smali.dexlib2.Opcode
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
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.OneRegisterInstruction
|
||||||
@@ -68,15 +74,24 @@ val returnYouTubeDislikePatch = bytecodePatch(
|
|||||||
execute {
|
execute {
|
||||||
addResources("youtube", "layout.returnyoutubedislike.returnYouTubeDislikePatch")
|
addResources("youtube", "layout.returnyoutubedislike.returnYouTubeDislikePatch")
|
||||||
|
|
||||||
addSettingPreference(
|
PreferenceScreen.RETURN_YOUTUBE_DISLIKE.addPreferences(
|
||||||
IntentPreference(
|
SwitchPreference("revanced_ryd_enabled"),
|
||||||
key = "revanced_settings_screen_09",
|
SwitchPreference("revanced_ryd_shorts"),
|
||||||
titleKey = "revanced_ryd_settings_title",
|
SwitchPreference("revanced_ryd_dislike_percentage"),
|
||||||
summaryKey = null,
|
SwitchPreference("revanced_ryd_compact_layout"),
|
||||||
icon = "@drawable/revanced_settings_screen_09_ryd",
|
SwitchPreference("revanced_ryd_estimated_like"),
|
||||||
layout = "@layout/preference_with_icon",
|
SwitchPreference("revanced_ryd_toast_on_connection_error"),
|
||||||
intent = newIntent("revanced_ryd_settings_intent"),
|
NonInteractivePreference(
|
||||||
|
key = "revanced_ryd_attribution",
|
||||||
|
tag = "app.revanced.extension.youtube.returnyoutubedislike.ui.ReturnYouTubeDislikeAboutPreference",
|
||||||
|
selectable = true,
|
||||||
),
|
),
|
||||||
|
PreferenceCategory(
|
||||||
|
key = "revanced_ryd_statistics_category",
|
||||||
|
sorting = PreferenceScreenPreference.Sorting.UNSORTED,
|
||||||
|
preferences = emptySet(), // Preferences are added by custom class at runtime.
|
||||||
|
tag = "app.revanced.extension.youtube.returnyoutubedislike.ui.ReturnYouTubeDislikeDebugStatsPreferenceCategory"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
// region Inject newVideoLoaded event handler to update dislikes when a new video is loaded.
|
// region Inject newVideoLoaded event handler to update dislikes when a new video is loaded.
|
||||||
|
|||||||
@@ -12,12 +12,13 @@ import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
|||||||
import app.revanced.patches.all.misc.resources.addResources
|
import app.revanced.patches.all.misc.resources.addResources
|
||||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||||
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
|
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
|
||||||
import app.revanced.patches.shared.misc.settings.preference.IntentPreference
|
import app.revanced.patches.shared.misc.settings.preference.NonInteractivePreference
|
||||||
|
import app.revanced.patches.shared.misc.settings.preference.PreferenceCategory
|
||||||
|
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference
|
||||||
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||||
import app.revanced.patches.youtube.misc.playercontrols.*
|
import app.revanced.patches.youtube.misc.playercontrols.*
|
||||||
import app.revanced.patches.youtube.misc.playertype.playerTypeHookPatch
|
import app.revanced.patches.youtube.misc.playertype.playerTypeHookPatch
|
||||||
import app.revanced.patches.youtube.misc.settings.addSettingPreference
|
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||||
import app.revanced.patches.youtube.misc.settings.newIntent
|
|
||||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||||
import app.revanced.patches.youtube.shared.*
|
import app.revanced.patches.youtube.shared.*
|
||||||
import app.revanced.patches.youtube.video.information.onCreateHook
|
import app.revanced.patches.youtube.video.information.onCreateHook
|
||||||
@@ -43,15 +44,32 @@ private val sponsorBlockResourcePatch = resourcePatch {
|
|||||||
execute {
|
execute {
|
||||||
addResources("youtube", "layout.sponsorblock.sponsorBlockResourcePatch")
|
addResources("youtube", "layout.sponsorblock.sponsorBlockResourcePatch")
|
||||||
|
|
||||||
addSettingPreference(
|
PreferenceScreen.SPONSORBLOCK.addPreferences(
|
||||||
IntentPreference(
|
// SB setting is old code with lots of custom preferences and updating behavior.
|
||||||
key = "revanced_settings_screen_10",
|
// Added as a preference group and not a fragment so the preferences are searchable.
|
||||||
titleKey = "revanced_sb_settings_title",
|
PreferenceCategory(
|
||||||
summaryKey = null,
|
key = "revanced_settings_screen_10_sponsorblock",
|
||||||
icon = "@drawable/revanced_settings_screen_10_sb",
|
sorting = PreferenceScreenPreference.Sorting.UNSORTED,
|
||||||
layout = "@layout/preference_with_icon",
|
preferences = emptySet(), // Preferences are added by custom class at runtime.
|
||||||
intent = newIntent("revanced_sb_settings_intent"),
|
tag = "app.revanced.extension.youtube.sponsorblock.ui.SponsorBlockPreferenceGroup"
|
||||||
),
|
),
|
||||||
|
PreferenceCategory(
|
||||||
|
key = "revanced_sb_stats",
|
||||||
|
sorting = PreferenceScreenPreference.Sorting.UNSORTED,
|
||||||
|
preferences = emptySet(), // Preferences are added by custom class at runtime.
|
||||||
|
tag = "app.revanced.extension.youtube.sponsorblock.ui.SponsorBlockStatsPreferenceCategory"
|
||||||
|
),
|
||||||
|
PreferenceCategory(
|
||||||
|
key = "revanced_sb_about",
|
||||||
|
sorting = PreferenceScreenPreference.Sorting.UNSORTED,
|
||||||
|
preferences = setOf(
|
||||||
|
NonInteractivePreference(
|
||||||
|
key = "revanced_sb_about_api",
|
||||||
|
tag = "app.revanced.extension.youtube.sponsorblock.ui.SponsorBlockAboutPreference",
|
||||||
|
selectable = true,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
arrayOf(
|
arrayOf(
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ val changeStartPagePatch = bytecodePatch(
|
|||||||
ListPreference(
|
ListPreference(
|
||||||
key = "revanced_change_start_page",
|
key = "revanced_change_start_page",
|
||||||
summaryKey = null,
|
summaryKey = null,
|
||||||
|
tag = "app.revanced.extension.shared.settings.preference.SortedListPreference"
|
||||||
),
|
),
|
||||||
SwitchPreference("revanced_change_start_page_always")
|
SwitchPreference("revanced_change_start_page_always")
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ private val settingsResourcePatch = resourcePatch {
|
|||||||
|
|
||||||
arrayOf(
|
arrayOf(
|
||||||
ResourceGroup("drawable",
|
ResourceGroup("drawable",
|
||||||
|
"revanced_settings_cursor.xml",
|
||||||
"revanced_settings_icon.xml",
|
"revanced_settings_icon.xml",
|
||||||
"revanced_settings_screen_00_about.xml",
|
"revanced_settings_screen_00_about.xml",
|
||||||
"revanced_settings_screen_01_ads.xml",
|
"revanced_settings_screen_01_ads.xml",
|
||||||
@@ -84,12 +85,16 @@ private val settingsResourcePatch = resourcePatch {
|
|||||||
"revanced_settings_screen_06_shorts.xml",
|
"revanced_settings_screen_06_shorts.xml",
|
||||||
"revanced_settings_screen_07_seekbar.xml",
|
"revanced_settings_screen_07_seekbar.xml",
|
||||||
"revanced_settings_screen_08_swipe_controls.xml",
|
"revanced_settings_screen_08_swipe_controls.xml",
|
||||||
"revanced_settings_screen_09_ryd.xml",
|
"revanced_settings_screen_09_return_youtube_dislike.xml",
|
||||||
"revanced_settings_screen_10_sb.xml",
|
"revanced_settings_screen_10_sponsorblock.xml",
|
||||||
"revanced_settings_screen_11_misc.xml",
|
"revanced_settings_screen_11_misc.xml",
|
||||||
"revanced_settings_screen_12_video.xml",
|
"revanced_settings_screen_12_video.xml",
|
||||||
),
|
),
|
||||||
ResourceGroup("layout", "revanced_settings_with_toolbar.xml"),
|
ResourceGroup("layout",
|
||||||
|
"revanced_preference_with_icon_no_search_result.xml",
|
||||||
|
"revanced_search_suggestion_item.xml",
|
||||||
|
"revanced_settings_with_toolbar.xml"),
|
||||||
|
ResourceGroup("menu", "revanced_search_menu.xml")
|
||||||
).forEach { resourceGroup ->
|
).forEach { resourceGroup ->
|
||||||
copyResources("settings", resourceGroup)
|
copyResources("settings", resourceGroup)
|
||||||
}
|
}
|
||||||
@@ -188,6 +193,7 @@ val settingsPatch = bytecodePatch(
|
|||||||
}
|
}
|
||||||
|
|
||||||
PreferenceScreen.GENERAL_LAYOUT.addPreferences(
|
PreferenceScreen.GENERAL_LAYOUT.addPreferences(
|
||||||
|
SwitchPreference("revanced_settings_search_history"),
|
||||||
SwitchPreference("revanced_show_menu_icons")
|
SwitchPreference("revanced_show_menu_icons")
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -201,7 +207,8 @@ val settingsPatch = bytecodePatch(
|
|||||||
),
|
),
|
||||||
ListPreference(
|
ListPreference(
|
||||||
key = "revanced_language",
|
key = "revanced_language",
|
||||||
summaryKey = null
|
summaryKey = null,
|
||||||
|
tag = "app.revanced.extension.shared.settings.preference.SortedListPreference"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -347,10 +354,20 @@ object PreferenceScreen : BasePreferenceScreen() {
|
|||||||
layout = "@layout/preference_with_icon",
|
layout = "@layout/preference_with_icon",
|
||||||
sorting = Sorting.UNSORTED,
|
sorting = Sorting.UNSORTED,
|
||||||
)
|
)
|
||||||
|
val RETURN_YOUTUBE_DISLIKE = Screen(
|
||||||
// RYD and SB are items 9 and 10.
|
key = "revanced_settings_screen_09_return_youtube_dislike",
|
||||||
// Menus are added in their own patch because they use an Intent and not a Screen.
|
summaryKey = null,
|
||||||
|
icon = "@drawable/revanced_settings_screen_09_return_youtube_dislike",
|
||||||
|
layout = "@layout/preference_with_icon",
|
||||||
|
sorting = Sorting.UNSORTED,
|
||||||
|
)
|
||||||
|
val SPONSORBLOCK = Screen(
|
||||||
|
key = "revanced_settings_screen_10_sponsorblock",
|
||||||
|
summaryKey = null,
|
||||||
|
icon = "@drawable/revanced_settings_screen_10_sponsorblock",
|
||||||
|
layout = "@layout/preference_with_icon",
|
||||||
|
sorting = Sorting.UNSORTED,
|
||||||
|
)
|
||||||
val MISC = Screen(
|
val MISC = Screen(
|
||||||
key = "revanced_settings_screen_11_misc",
|
key = "revanced_settings_screen_11_misc",
|
||||||
summaryKey = null,
|
summaryKey = null,
|
||||||
|
|||||||
@@ -62,7 +62,8 @@ val spoofVideoStreamsPatch = spoofVideoStreamsPatch({
|
|||||||
summaryKey = null,
|
summaryKey = null,
|
||||||
// Language strings are declared in Setting patch.
|
// Language strings are declared in Setting patch.
|
||||||
entriesKey = "revanced_language_entries",
|
entriesKey = "revanced_language_entries",
|
||||||
entryValuesKey = "revanced_language_entry_values"
|
entryValuesKey = "revanced_language_entry_values",
|
||||||
|
tag = "app.revanced.extension.shared.settings.preference.SortedListPreference"
|
||||||
),
|
),
|
||||||
SwitchPreference("revanced_spoof_video_streams_ios_force_avc"),
|
SwitchPreference("revanced_spoof_video_streams_ios_force_avc"),
|
||||||
SwitchPreference("revanced_spoof_streaming_data_stats_for_nerds"),
|
SwitchPreference("revanced_spoof_streaming_data_stats_for_nerds"),
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ internal val rememberPlaybackSpeedPatch = bytecodePatch {
|
|||||||
// Entries and values are set by the extension code based on the actual speeds available.
|
// Entries and values are set by the extension code based on the actual speeds available.
|
||||||
entriesKey = null,
|
entriesKey = null,
|
||||||
entryValuesKey = null,
|
entryValuesKey = null,
|
||||||
|
tag = "app.revanced.extension.youtube.settings.preference.CustomVideoSpeedListPreference"
|
||||||
),
|
),
|
||||||
SwitchPreference("revanced_remember_playback_speed_last_selected")
|
SwitchPreference("revanced_remember_playback_speed_last_selected")
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -65,35 +65,6 @@ fun Method.findFreeRegister(startIndex: Int, vararg registersToExclude: Int): In
|
|||||||
val instruction = getInstruction(i)
|
val instruction = getInstruction(i)
|
||||||
val instructionRegisters = instruction.registersUsed
|
val instructionRegisters = instruction.registersUsed
|
||||||
|
|
||||||
if (instruction.isReturnInstruction) {
|
|
||||||
usedRegisters.addAll(instructionRegisters)
|
|
||||||
|
|
||||||
// Use lowest register that hasn't been encountered.
|
|
||||||
val freeRegister = (0 until implementation!!.registerCount).find {
|
|
||||||
it !in usedRegisters
|
|
||||||
}
|
|
||||||
if (freeRegister != null) {
|
|
||||||
return freeRegister
|
|
||||||
}
|
|
||||||
if (bestFreeRegisterFound != null) {
|
|
||||||
return bestFreeRegisterFound
|
|
||||||
}
|
|
||||||
|
|
||||||
// Somehow every method register was read from before any register was wrote to.
|
|
||||||
// In practice this never occurs.
|
|
||||||
throw IllegalArgumentException("Could not find a free register from startIndex: " +
|
|
||||||
"$startIndex excluding: $registersToExclude")
|
|
||||||
}
|
|
||||||
|
|
||||||
if (instruction.isBranchInstruction) {
|
|
||||||
if (bestFreeRegisterFound != null) {
|
|
||||||
return bestFreeRegisterFound
|
|
||||||
}
|
|
||||||
// This method is simple and does not follow branching.
|
|
||||||
throw IllegalArgumentException("Encountered a branch statement before a free register could be found")
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
val writeRegister = instruction.writeRegister
|
val writeRegister = instruction.writeRegister
|
||||||
if (writeRegister != null) {
|
if (writeRegister != null) {
|
||||||
if (writeRegister !in usedRegisters) {
|
if (writeRegister !in usedRegisters) {
|
||||||
@@ -114,6 +85,32 @@ fun Method.findFreeRegister(startIndex: Int, vararg registersToExclude: Int): In
|
|||||||
}
|
}
|
||||||
|
|
||||||
usedRegisters.addAll(instructionRegisters)
|
usedRegisters.addAll(instructionRegisters)
|
||||||
|
|
||||||
|
if (instruction.isBranchInstruction) {
|
||||||
|
if (bestFreeRegisterFound != null) {
|
||||||
|
return bestFreeRegisterFound
|
||||||
|
}
|
||||||
|
// This method is simple and does not follow branching.
|
||||||
|
throw IllegalArgumentException("Encountered a branch statement before a free register could be found")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (instruction.isReturnInstruction) {
|
||||||
|
// Use lowest register that hasn't been encountered.
|
||||||
|
val freeRegister = (0 until implementation!!.registerCount).find {
|
||||||
|
it !in usedRegisters
|
||||||
|
}
|
||||||
|
if (freeRegister != null) {
|
||||||
|
return freeRegister
|
||||||
|
}
|
||||||
|
if (bestFreeRegisterFound != null) {
|
||||||
|
return bestFreeRegisterFound
|
||||||
|
}
|
||||||
|
|
||||||
|
// Somehow every method register was read from before any register was wrote to.
|
||||||
|
// In practice this never occurs.
|
||||||
|
throw IllegalArgumentException("Could not find a free register from startIndex: " +
|
||||||
|
"$startIndex excluding: $registersToExclude")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Some methods can have array payloads at the end of the method after a return statement.
|
// Some methods can have array payloads at the end of the method after a return statement.
|
||||||
@@ -504,7 +501,7 @@ fun Method.indexOfFirstInstruction(startIndex: Int = 0, targetOpcode: Opcode): I
|
|||||||
* @see indexOfFirstInstructionOrThrow
|
* @see indexOfFirstInstructionOrThrow
|
||||||
*/
|
*/
|
||||||
fun Method.indexOfFirstInstruction(startIndex: Int = 0, filter: Instruction.() -> Boolean): Int {
|
fun Method.indexOfFirstInstruction(startIndex: Int = 0, filter: Instruction.() -> Boolean): Int {
|
||||||
var instructions = this.implementation!!.instructions
|
var instructions = this.implementation?.instructions ?: return -1
|
||||||
if (startIndex != 0) {
|
if (startIndex != 0) {
|
||||||
instructions = instructions.drop(startIndex)
|
instructions = instructions.drop(startIndex)
|
||||||
}
|
}
|
||||||
@@ -570,7 +567,7 @@ fun Method.indexOfFirstInstructionReversed(startIndex: Int? = null, targetOpcode
|
|||||||
* @see indexOfFirstInstructionReversedOrThrow
|
* @see indexOfFirstInstructionReversedOrThrow
|
||||||
*/
|
*/
|
||||||
fun Method.indexOfFirstInstructionReversed(startIndex: Int? = null, filter: Instruction.() -> Boolean): Int {
|
fun Method.indexOfFirstInstructionReversed(startIndex: Int? = null, filter: Instruction.() -> Boolean): Int {
|
||||||
var instructions = this.implementation!!.instructions
|
var instructions = this.implementation?.instructions ?: return -1
|
||||||
if (startIndex != null) {
|
if (startIndex != null) {
|
||||||
instructions = instructions.take(startIndex + 1)
|
instructions = instructions.take(startIndex + 1)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ Second \"item\" text"</string>
|
|||||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
<!-- '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. -->
|
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||||
@@ -134,6 +134,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ Second \"item\" text"</string>
|
|||||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
<!-- '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. -->
|
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||||
@@ -134,6 +134,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_settings_import_reset">إعادة تعيين إعدادات ReVanced إلى الوضع الافتراضي</string>
|
<string name="revanced_settings_import_reset">إعادة تعيين إعدادات ReVanced إلى الوضع الافتراضي</string>
|
||||||
<string name="revanced_settings_import_success">تم استيراد %d إعدادات</string>
|
<string name="revanced_settings_import_success">تم استيراد %d إعدادات</string>
|
||||||
<string name="revanced_settings_import_failure_parse">فشل الاستيراد: %s</string>
|
<string name="revanced_settings_import_failure_parse">فشل الاستيراد: %s</string>
|
||||||
|
<string name="revanced_settings_search_hint">إعدادات البحث</string>
|
||||||
|
<string name="revanced_settings_search_no_results_title">لم يتم العثور على نتائج لـ \".%s\"</string>
|
||||||
|
<string name="revanced_settings_search_no_results_summary">جرّب كلمة مفتاحية أخرى</string>
|
||||||
|
<string name="revanced_settings_search_remove_message">إزالة من سجل البحث؟</string>
|
||||||
<string name="revanced_show_menu_icons_title">عرض أيقونات إعدادات ReVanced</string>
|
<string name="revanced_show_menu_icons_title">عرض أيقونات إعدادات ReVanced</string>
|
||||||
<string name="revanced_show_menu_icons_summary_on">يتم عرض أيقونات الإعدادات</string>
|
<string name="revanced_show_menu_icons_summary_on">يتم عرض أيقونات الإعدادات</string>
|
||||||
<string name="revanced_show_menu_icons_summary_off">لا يتم عرض أيقونات الإعدادات</string>
|
<string name="revanced_show_menu_icons_summary_off">لا يتم عرض أيقونات الإعدادات</string>
|
||||||
@@ -93,6 +97,9 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_restore_old_settings_menus_title">استعادة قوائم الإعدادات القديمة</string>
|
<string name="revanced_restore_old_settings_menus_title">استعادة قوائم الإعدادات القديمة</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_on">يتم عرض قوائم الإعدادات القديمة</string>
|
<string name="revanced_restore_old_settings_menus_summary_on">يتم عرض قوائم الإعدادات القديمة</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_off">لا يتم عرض قوائم الإعدادات القديمة</string>
|
<string name="revanced_restore_old_settings_menus_summary_off">لا يتم عرض قوائم الإعدادات القديمة</string>
|
||||||
|
<string name="revanced_settings_search_history_title">إظهار سجل البحث في الإعدادات</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_on">سجل البحث في الإعدادات معروض</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_off">لم يتم عرض سجل البحث في الإعدادات</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||||
<string name="revanced_shorts_disable_background_playback_title">تعطيل تشغيل فيديوهات Shorts في الخلفية</string>
|
<string name="revanced_shorts_disable_background_playback_title">تعطيل تشغيل فيديوهات Shorts في الخلفية</string>
|
||||||
@@ -153,10 +160,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_hide_notify_me_button_title">إخفاء زر \'تنبيهي\'</string>
|
<string name="revanced_hide_notify_me_button_title">إخفاء زر \'تنبيهي\'</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">تم إخفاء الزر</string>
|
<string name="revanced_hide_notify_me_button_summary_on">تم إخفاء الزر</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">يتم عرض الزر</string>
|
<string name="revanced_hide_notify_me_button_summary_off">يتم عرض الزر</string>
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">إخفاء علامة \'الأشخاص الذين شاهدوا أيضًا\'</string>
|
<string name="revanced_hide_search_result_recommendation_labels_title">إخفاء علامات اقتراحات الفيديو</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_on">تم إخفاء العلامة</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_on">تم إخفاء علامات \'اقتراحات للمشاهدة\' و\'قد يعجبك أيضًا\'</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">يتم عرض العلامة</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_off">يتم عرض علامات \'اقتراحات للمشاهدة\' و\'قد يعجبك أيضًا\'</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">إخفاء زر \'عرض المزيد\'</string>
|
<string name="revanced_hide_show_more_button_title">إخفاء زر \'عرض المزيد\'</string>
|
||||||
@@ -231,6 +238,9 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_hide_ai_generated_video_summary_section_title">إخفاء \'ملخص الفيديو الذي تم إنشاؤه بواسطة الذكاء الاصطناعي\'</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_title">إخفاء \'ملخص الفيديو الذي تم إنشاؤه بواسطة الذكاء الاصطناعي\'</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">تم إخفاء قسم ملخص الفيديو</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">تم إخفاء قسم ملخص الفيديو</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">يتم عرض قسم ملخص الفيديو</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">يتم عرض قسم ملخص الفيديو</string>
|
||||||
|
<string name="revanced_hide_ask_section_title">إخفاء \"Ask\"</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_on">تم إخفاء قسم \"Ask\"</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_off">يتم عرض قسم \"Ask\"</string>
|
||||||
<string name="revanced_hide_attributes_section_title">إخفاء الصفات</string>
|
<string name="revanced_hide_attributes_section_title">إخفاء الصفات</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_on">تم إخفاء أقسام الأماكن المميزة، الألعاب، الموسيقى والأشخاص المذكورون</string>
|
<string name="revanced_hide_attributes_section_summary_on">تم إخفاء أقسام الأماكن المميزة، الألعاب، الموسيقى والأشخاص المذكورون</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">يتم عرض أقسام الأماكن المميزة، الألعاب، الموسيقى والأشخاص المذكورون</string>
|
<string name="revanced_hide_attributes_section_summary_off">يتم عرض أقسام الأماكن المميزة، الألعاب، الموسيقى والأشخاص المذكورون</string>
|
||||||
@@ -794,6 +804,11 @@ Second \"item\" text"</string>
|
|||||||
الإعدادات ← التشغيل ← تشغيل الفيديو التالي تلقائيًا"</string>
|
الإعدادات ← التشغيل ← تشغيل الفيديو التالي تلقائيًا"</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_off">يتم عرض الفيديو المقترح في شاشة النهاية</string>
|
<string name="revanced_end_screen_suggested_video_summary_off">يتم عرض الفيديو المقترح في شاشة النهاية</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
<string name="revanced_hide_related_video_overlay_title">إخفاء واجهة الفيديوهات ذات الصلة في وضع ملء الشاشة</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_on">تم إخفاء واجهة الفيديوهات ذات الصلة</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_off">يتم عرض واجهة الفيديوهات ذات الصلة</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">إخفاء الطابع الزمني للفيديو</string>
|
<string name="revanced_hide_timestamp_title">إخفاء الطابع الزمني للفيديو</string>
|
||||||
<string name="revanced_hide_timestamp_summary_on">تم إخفاء الطابع الزمني</string>
|
<string name="revanced_hide_timestamp_summary_on">تم إخفاء الطابع الزمني</string>
|
||||||
@@ -831,10 +846,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">أعد تحميل الفيديو للتصويت بـ Return YouTube Dislike</string>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">أعد تحميل الفيديو للتصويت بـ Return YouTube Dislike</string>
|
||||||
<!-- Video likes have been set to hidden by the video uploader. -->
|
<!-- Video likes have been set to hidden by the video uploader. -->
|
||||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">مخفي بواسطة المالك</string>
|
<string name="revanced_ryd_video_likes_hidden_by_video_owner">مخفي بواسطة المالك</string>
|
||||||
<string name="revanced_ryd_enable_summary_on">يتم عرض لم يعجبني</string>
|
<string name="revanced_ryd_enabled_summary_on">يتم عرض لم يعجبني</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">لا يتم عرض لم يعجبني</string>
|
<string name="revanced_ryd_enabled_summary_off">لا يتم عرض لم يعجبني</string>
|
||||||
<string name="revanced_ryd_shorts_title">عرض لم يعجني في فيديوهات Shorts</string>
|
<string name="revanced_ryd_shorts_title">عرض لم يعجني في فيديوهات Shorts</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"يتم عرض مرات عدم الإعجاب في فيديوهات Shorts
|
<string name="revanced_ryd_shorts_summary_on">"يتم عرض مرات عدم الإعجاب في فيديوهات Shorts
|
||||||
|
|
||||||
التقييد: قد لا تظهر مرات عدم الإعجاب في وضع التصفح المتخفي"</string>
|
التقييد: قد لا تظهر مرات عدم الإعجاب في وضع التصفح المتخفي"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">لا يتم عرض مرات عدم الإعجاب في فيديوهات Shorts</string>
|
<string name="revanced_ryd_shorts_summary_off">لا يتم عرض مرات عدم الإعجاب في فيديوهات Shorts</string>
|
||||||
@@ -851,7 +866,6 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_ryd_toast_on_connection_error_title">عرض ملاحظة إذا كان API غير متاح</string>
|
<string name="revanced_ryd_toast_on_connection_error_title">عرض ملاحظة إذا كان API غير متاح</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">يتم عرض الملاحظة في حالة عدم توفر Return YouTube Dislike</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_on">يتم عرض الملاحظة في حالة عدم توفر Return YouTube Dislike</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">لا يتم عرض الملاحظة في حالة عدم توفر Return YouTube Dislike</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_off">لا يتم عرض الملاحظة في حالة عدم توفر Return YouTube Dislike</string>
|
||||||
<string name="revanced_ryd_about">لمحة</string>
|
|
||||||
<string name="revanced_ryd_attribution_summary">يتم توفير البيانات بواسطة the Return YouTube Dislike API. اضغط هنا لمعرفة المزيد</string>
|
<string name="revanced_ryd_attribution_summary">يتم توفير البيانات بواسطة the Return YouTube Dislike API. اضغط هنا لمعرفة المزيد</string>
|
||||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||||
<string name="revanced_ryd_statistics_category_title">ReturnYouTubeDislike API إحصائيات هذا الجهاز</string>
|
<string name="revanced_ryd_statistics_category_title">ReturnYouTubeDislike API إحصائيات هذا الجهاز</string>
|
||||||
@@ -1058,7 +1072,7 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_title">تعديل توقيت المقطع يدويًا</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_title">تعديل توقيت المقطع يدويًا</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_content">هل تود تعديل التوقيت لبداية أو نهاية المقطع؟</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_content">هل تود تعديل التوقيت لبداية أو نهاية المقطع؟</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">الوقت المحدد غير صحيح</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">الوقت المحدد غير صحيح</string>
|
||||||
<string name="revanced_sb_stats">إحصائيات</string>
|
<string name="revanced_sb_stats_title">إحصائيات</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||||
<string name="revanced_sb_stats_connection_failure">الإحصائيات غير متوفرة مؤقتًا (الواجهة غير متوفرة)</string>
|
<string name="revanced_sb_stats_connection_failure">الإحصائيات غير متوفرة مؤقتًا (الواجهة غير متوفرة)</string>
|
||||||
<string name="revanced_sb_stats_loading">جارٍ التحميل...</string>
|
<string name="revanced_sb_stats_loading">جارٍ التحميل...</string>
|
||||||
@@ -1087,8 +1101,8 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_sb_color_invalid">رمز اللون غير صالح</string>
|
<string name="revanced_sb_color_invalid">رمز اللون غير صالح</string>
|
||||||
<string name="revanced_sb_reset_color">إعادة تعيين اللون</string>
|
<string name="revanced_sb_reset_color">إعادة تعيين اللون</string>
|
||||||
<string name="revanced_sb_reset">إعادة التعيين</string>
|
<string name="revanced_sb_reset">إعادة التعيين</string>
|
||||||
<string name="revanced_sb_about">لمحة</string>
|
<string name="revanced_sb_about_title">لمحة</string>
|
||||||
<string name="revanced_sb_about_api_sum">يتم توفير البيانات بواسطة SponsorBlock API. انقر هنا لمعرفة المزيد ومشاهدة التنزيلات لمنصات أخرى</string>
|
<string name="revanced_sb_about_api_summary">يتم توفير البيانات بواسطة SponsorBlock API. انقر هنا لمعرفة المزيد ومشاهدة التنزيلات لمنصات أخرى</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||||
<string name="revanced_change_form_factor_title">شكل نموذج التخطيط</string>
|
<string name="revanced_change_form_factor_title">شكل نموذج التخطيط</string>
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ Second \"item\" text"</string>
|
|||||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
<!-- '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. -->
|
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||||
@@ -134,6 +134,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_settings_import_reset">ReVanced tənzimləmələr standarta təyin edildi</string>
|
<string name="revanced_settings_import_reset">ReVanced tənzimləmələr standarta təyin edildi</string>
|
||||||
<string name="revanced_settings_import_success">%d tənzimləmə idxal edildi</string>
|
<string name="revanced_settings_import_success">%d tənzimləmə idxal edildi</string>
|
||||||
<string name="revanced_settings_import_failure_parse">Uğursuz idxal prosesi: %s</string>
|
<string name="revanced_settings_import_failure_parse">Uğursuz idxal prosesi: %s</string>
|
||||||
|
<string name="revanced_settings_search_hint">Axtarış tənzimləmələri</string>
|
||||||
|
<string name="revanced_settings_search_no_results_title">‘%s’ üçün nəticə tapılmadı</string>
|
||||||
|
<string name="revanced_settings_search_no_results_summary">Başqa açar sözü yoxla</string>
|
||||||
|
<string name="revanced_settings_search_remove_message">Axtarış tarixçəsindən silinsin?</string>
|
||||||
<string name="revanced_show_menu_icons_title">ReVanced tənzimləmə nişanların göstər</string>
|
<string name="revanced_show_menu_icons_title">ReVanced tənzimləmə nişanların göstər</string>
|
||||||
<string name="revanced_show_menu_icons_summary_on">Tənzimləmə nişanları göstərilir</string>
|
<string name="revanced_show_menu_icons_summary_on">Tənzimləmə nişanları göstərilir</string>
|
||||||
<string name="revanced_show_menu_icons_summary_off">Tənzimləmə nişanları göstərilmir</string>
|
<string name="revanced_show_menu_icons_summary_off">Tənzimləmə nişanları göstərilmir</string>
|
||||||
@@ -93,6 +97,9 @@ Davam et düyməsinə toxun və optimallaşdırma dəyişikliklərin qəbul et."
|
|||||||
<string name="revanced_restore_old_settings_menus_title">Köhnə tənzimləmələr bölmələrin bərpa et</string>
|
<string name="revanced_restore_old_settings_menus_title">Köhnə tənzimləmələr bölmələrin bərpa et</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_on">Köhnə tənzimləmələr bölmələri göstərilir</string>
|
<string name="revanced_restore_old_settings_menus_summary_on">Köhnə tənzimləmələr bölmələri göstərilir</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_off">Köhnə tənzimləmələr bölmələri göstərilmir</string>
|
<string name="revanced_restore_old_settings_menus_summary_off">Köhnə tənzimləmələr bölmələri göstərilmir</string>
|
||||||
|
<string name="revanced_settings_search_history_title">Axtarış tarixçəsi tənzimləməsin göstər</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_on">Axtarış tarixçəsi tənzimləməsi göstərilir</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_off">Axtarış tarixçəsi tənzimləməsi göstərilmir</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||||
<string name="revanced_shorts_disable_background_playback_title">Shorts arxa plan oynatmasın qapat</string>
|
<string name="revanced_shorts_disable_background_playback_title">Shorts arxa plan oynatmasın qapat</string>
|
||||||
@@ -153,10 +160,10 @@ Gözlənilməz hallardan xəbərdar olmayacaqsınız."</string>
|
|||||||
<string name="revanced_hide_notify_me_button_title">\"Mənə bildir\" düyməsini gizlət</string>
|
<string name="revanced_hide_notify_me_button_title">\"Mənə bildir\" düyməsini gizlət</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">Düymə gizlidir</string>
|
<string name="revanced_hide_notify_me_button_summary_on">Düymə gizlidir</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">Düymə göstərilir</string>
|
<string name="revanced_hide_notify_me_button_summary_off">Düymə göstərilir</string>
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">\"İnsanlar həmçinin izləyiblər\" etiketin gizlət</string>
|
<string name="revanced_hide_search_result_recommendation_labels_title">Video tövsiyə etiketlərini gizlət</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_on">Etiket gizlidir</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_on">\"İnsanlar həmçinin izləyiblər\" və \"Bunu da bəyənə bilərsiniz\" etiketləri gizlədilib</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">Etiket göstərilir</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_off">\"İnsanlar həmçinin izləyiblər\" və \"Bunu da bəyənə bilərsiniz\" etiketləri görünür</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">\'Daha çox göstər\' düyməsini gizlət</string>
|
<string name="revanced_hide_show_more_button_title">\'Daha çox göstər\' düyməsini gizlət</string>
|
||||||
@@ -231,6 +238,9 @@ Gözlənilməz hallardan xəbərdar olmayacaqsınız."</string>
|
|||||||
<string name="revanced_hide_ai_generated_video_summary_section_title">\"AI ilə yaradılan video xülasəsini\" gizlət</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_title">\"AI ilə yaradılan video xülasəsini\" gizlət</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Video xülasə bölməsi gizlədilib</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Video xülasə bölməsi gizlədilib</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Video xülasə bölməsi göstərilir</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Video xülasə bölməsi göstərilir</string>
|
||||||
|
<string name="revanced_hide_ask_section_title">Soruş\'u Gizlət</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_on">Soruş bölməsi gizlidir</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_off">\"Soruş\" bölməsi göstərilir</string>
|
||||||
<string name="revanced_hide_attributes_section_title">Atributları Gizlət</string>
|
<string name="revanced_hide_attributes_section_title">Atributları Gizlət</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_on">Seçilən yerlər, Oyunlar, Musiqi və qeyd edilən insanlar bölmələri gizlədilir</string>
|
<string name="revanced_hide_attributes_section_summary_on">Seçilən yerlər, Oyunlar, Musiqi və qeyd edilən insanlar bölmələri gizlədilir</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">Seçilən yerlər, Oyunlar, Musiqi və qeyd edilən insanlar bölmələri görünür</string>
|
<string name="revanced_hide_attributes_section_summary_off">Seçilən yerlər, Oyunlar, Musiqi və qeyd edilən insanlar bölmələri görünür</string>
|
||||||
@@ -793,6 +803,11 @@ Audio trek seçimin göstərmək üçün \"Video axınları saxtalaşdır\"ı iO
|
|||||||
Avtomatik oynatma YouTube ayarlarında dəyişdirilə bilər: Ayarlar → Oxunuş → Növbəti videonu avtomatik oxudun"</string>
|
Avtomatik oynatma YouTube ayarlarında dəyişdirilə bilər: Ayarlar → Oxunuş → Növbəti videonu avtomatik oxudun"</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_off">Son ekranda bildirilən video göstərilir</string>
|
<string name="revanced_end_screen_suggested_video_summary_off">Son ekranda bildirilən video göstərilir</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
<string name="revanced_hide_related_video_overlay_title">Əlaqəli video örtüyünü tam ekranda gizlət</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_on">Əlaqəli video örtüyü gizlədilib</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_off">Əlaqəli video örtüyü göstərilir</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">Video vaxt möhürünü gizlət</string>
|
<string name="revanced_hide_timestamp_title">Video vaxt möhürünü gizlət</string>
|
||||||
<string name="revanced_hide_timestamp_summary_on">Vaxt möhürü gizlidir</string>
|
<string name="revanced_hide_timestamp_summary_on">Vaxt möhürü gizlidir</string>
|
||||||
@@ -830,10 +845,10 @@ Avtomatik oynatma YouTube ayarlarında dəyişdirilə bilər: Ayarlar → Oxunu
|
|||||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Ryd ilə səsvermə üçün videonu yenidən yüklə</string>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Ryd ilə səsvermə üçün videonu yenidən yüklə</string>
|
||||||
<!-- Video likes have been set to hidden by the video uploader. -->
|
<!-- Video likes have been set to hidden by the video uploader. -->
|
||||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Sahib tərəfindən gizlədilib</string>
|
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Sahib tərəfindən gizlədilib</string>
|
||||||
<string name="revanced_ryd_enable_summary_on">Bəyənməmələr göstərilir</string>
|
<string name="revanced_ryd_enabled_summary_on">Bəyənməmələr göstərilir</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">Bəyənməmələr göstərilmir</string>
|
<string name="revanced_ryd_enabled_summary_off">Bəyənməmələr göstərilmir</string>
|
||||||
<string name="revanced_ryd_shorts_title">\"Shorts\"da bəyənməmə sayını göstər</string>
|
<string name="revanced_ryd_shorts_title">\"Shorts\"da bəyənməmə sayını göstər</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Bəyənməmələr Shorts-da göstərilir
|
<string name="revanced_ryd_shorts_summary_on">"Bəyənməmələr Shorts-da göstərilir
|
||||||
|
|
||||||
Məhdudiyyət: Bəyənməmələr gizli rejimdə görünməyə bilər"</string>
|
Məhdudiyyət: Bəyənməmələr gizli rejimdə görünməyə bilər"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">Bəyənməmələr Shorts-da göstərilmir</string>
|
<string name="revanced_ryd_shorts_summary_off">Bəyənməmələr Shorts-da göstərilmir</string>
|
||||||
@@ -850,7 +865,6 @@ Məhdudiyyət: Bəyənməmələr gizli rejimdə görünməyə bilər"</string>
|
|||||||
<string name="revanced_ryd_toast_on_connection_error_title">API əlçatan deyilsə ani bildiriş göstər</string>
|
<string name="revanced_ryd_toast_on_connection_error_title">API əlçatan deyilsə ani bildiriş göstər</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">Return YouTube Dislike əlçatan deyilsə ani bildiriş göstər</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_on">Return YouTube Dislike əlçatan deyilsə ani bildiriş göstər</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">Return YouTube Dislike əlçatan deyilsə ani bildiriş göstərmə</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_off">Return YouTube Dislike əlçatan deyilsə ani bildiriş göstərmə</string>
|
||||||
<string name="revanced_ryd_about">Haqqında</string>
|
|
||||||
<string name="revanced_ryd_attribution_summary">Məlumat Return YouTube Dislike API vasitəsilə alınır. Ətraflı öyrənmək üçün bura toxun</string>
|
<string name="revanced_ryd_attribution_summary">Məlumat Return YouTube Dislike API vasitəsilə alınır. Ətraflı öyrənmək üçün bura toxun</string>
|
||||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||||
<string name="revanced_ryd_statistics_category_title">Bu cihazda Return YouTube Dislike API statistikası</string>
|
<string name="revanced_ryd_statistics_category_title">Bu cihazda Return YouTube Dislike API statistikası</string>
|
||||||
@@ -1057,7 +1071,7 @@ Təqdim etməyə hazırdır?"</string>
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_title">Bölüm vaxtına əl ilə düzəliş et</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_title">Bölüm vaxtına əl ilə düzəliş et</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_content">Bölümün başlanğıc və ya bitiş vaxtlarına düzəliş etmək istəyirsiniz?</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_content">Bölümün başlanğıc və ya bitiş vaxtlarına düzəliş etmək istəyirsiniz?</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Yanlış vaxt verilmişdir</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Yanlış vaxt verilmişdir</string>
|
||||||
<string name="revanced_sb_stats">Statistikalar</string>
|
<string name="revanced_sb_stats_title">Statistikalar</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||||
<string name="revanced_sb_stats_connection_failure">Statistikalar müvəqqəti mövcud deyil (API işləmir)</string>
|
<string name="revanced_sb_stats_connection_failure">Statistikalar müvəqqəti mövcud deyil (API işləmir)</string>
|
||||||
<string name="revanced_sb_stats_loading">Yüklənir...</string>
|
<string name="revanced_sb_stats_loading">Yüklənir...</string>
|
||||||
@@ -1086,8 +1100,8 @@ Təqdim etməyə hazırdır?"</string>
|
|||||||
<string name="revanced_sb_color_invalid">Etibarsız rəng kodu</string>
|
<string name="revanced_sb_color_invalid">Etibarsız rəng kodu</string>
|
||||||
<string name="revanced_sb_reset_color">Rəngi sıfırla</string>
|
<string name="revanced_sb_reset_color">Rəngi sıfırla</string>
|
||||||
<string name="revanced_sb_reset">Sıfırlayın</string>
|
<string name="revanced_sb_reset">Sıfırlayın</string>
|
||||||
<string name="revanced_sb_about">Haqqında</string>
|
<string name="revanced_sb_about_title">Haqqında</string>
|
||||||
<string name="revanced_sb_about_api_sum">Məlumat SponsorBlock API tərəfindən təqdim edilir. Daha ətraflı öyrənmək və digər platformalar üzrə yükləmələrə baxmaq üçün bura toxunun</string>
|
<string name="revanced_sb_about_api_summary">Məlumat SponsorBlock API tərəfindən təqdim edilir. Daha ətraflı öyrənmək və digər platformalar üzrə yükləmələrə baxmaq üçün bura toxunun</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||||
<string name="revanced_change_form_factor_title">Tərtibat forma göstəricisi</string>
|
<string name="revanced_change_form_factor_title">Tərtibat forma göstəricisi</string>
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_settings_import_reset">Налады ReVanced скінуты да стандартных</string>
|
<string name="revanced_settings_import_reset">Налады ReVanced скінуты да стандартных</string>
|
||||||
<string name="revanced_settings_import_success">Імпартавана %d налад</string>
|
<string name="revanced_settings_import_success">Імпартавана %d налад</string>
|
||||||
<string name="revanced_settings_import_failure_parse">Памылка імпарту: %s</string>
|
<string name="revanced_settings_import_failure_parse">Памылка імпарту: %s</string>
|
||||||
|
<string name="revanced_settings_search_hint">Пошук налад</string>
|
||||||
|
<string name="revanced_settings_search_no_results_title">Нічога не знойдзена для \",%s\"</string>
|
||||||
|
<string name="revanced_settings_search_no_results_summary">Паспрабуйце іншае ключавое слова</string>
|
||||||
|
<string name="revanced_settings_search_remove_message">Выдаліць з гісторыі пошуку?</string>
|
||||||
<string name="revanced_show_menu_icons_title">Паказваць значкі налад ReVanced</string>
|
<string name="revanced_show_menu_icons_title">Паказваць значкі налад ReVanced</string>
|
||||||
<string name="revanced_show_menu_icons_summary_on">Значкі налад паказваюцца</string>
|
<string name="revanced_show_menu_icons_summary_on">Значкі налад паказваюцца</string>
|
||||||
<string name="revanced_show_menu_icons_summary_off">Значкі налад не паказваюцца</string>
|
<string name="revanced_show_menu_icons_summary_off">Значкі налад не паказваюцца</string>
|
||||||
@@ -93,6 +97,9 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_restore_old_settings_menus_title">Аднавіць старое меню налад</string>
|
<string name="revanced_restore_old_settings_menus_title">Аднавіць старое меню налад</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_on">Старыя меню налад паказваюцца</string>
|
<string name="revanced_restore_old_settings_menus_summary_on">Старыя меню налад паказваюцца</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_off">Старыя меню налад не паказваюцца</string>
|
<string name="revanced_restore_old_settings_menus_summary_off">Старыя меню налад не паказваюцца</string>
|
||||||
|
<string name="revanced_settings_search_history_title">Паказваць гісторыю пошуку ў наладах</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_on">Паказваецца гісторыя пошуку ў наладах</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_off">Гісторыя пошуку налад не паказваецца</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||||
<string name="revanced_shorts_disable_background_playback_title">Адключыць прайграванне Shorts у фонавым</string>
|
<string name="revanced_shorts_disable_background_playback_title">Адключыць прайграванне Shorts у фонавым</string>
|
||||||
@@ -153,10 +160,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_hide_notify_me_button_title">Схаваць кнопку \"Паведаміць мне\"</string>
|
<string name="revanced_hide_notify_me_button_title">Схаваць кнопку \"Паведаміць мне\"</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">Кнопка схавана</string>
|
<string name="revanced_hide_notify_me_button_summary_on">Кнопка схавана</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">Паказана кнопка</string>
|
<string name="revanced_hide_notify_me_button_summary_off">Паказана кнопка</string>
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">Схаваць надпіс «Людзі таксама глядзелі»</string>
|
<string name="revanced_hide_search_result_recommendation_labels_title">Схаваць надпісы з рэкамендацыямі відэа</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_on">Надпіс схаваны</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_on">Надпісы \"Людзі таксама глядзелі\" і \"Вам таксама можа спадабацца\" схаваныя</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">Надпіс паказаны</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_off">Надпісы \"Людзі таксама глядзелі\" і \"Вам таксама можа спадабацца\" паказаныя</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">Схаваць кнопку \"Паказаць больш\"</string>
|
<string name="revanced_hide_show_more_button_title">Схаваць кнопку \"Паказаць больш\"</string>
|
||||||
@@ -231,6 +238,9 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_hide_ai_generated_video_summary_section_title">Схаваць «Зводку відэа, згенэраваную штучным інтэлектам»</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_title">Схаваць «Зводку відэа, згенэраваную штучным інтэлектам»</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Раздзел зводкі відэа схаваны</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Раздзел зводкі відэа схаваны</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Раздзел зводкі відэа паказаны</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Раздзел зводкі відэа паказаны</string>
|
||||||
|
<string name="revanced_hide_ask_section_title">Схаваць «Спытаць»</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_on">Раздзел «Спытаць» схаваны</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_off">Раздзел «Спытаць» паказаны</string>
|
||||||
<string name="revanced_hide_attributes_section_title">Схаваць атрыбуты</string>
|
<string name="revanced_hide_attributes_section_title">Схаваць атрыбуты</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_on">Раздзелы «Папулярныя месцы», «Гульні», «Музыка» і «Людзі, якіх згадвалі» схаваныя</string>
|
<string name="revanced_hide_attributes_section_summary_on">Раздзелы «Папулярныя месцы», «Гульні», «Музыка» і «Людзі, якіх згадвалі» схаваныя</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">Раздзелы «Папулярныя месцы», «Гульні», «Музыка» і «Людзі, якіх згадвалі» паказаныя</string>
|
<string name="revanced_hide_attributes_section_summary_off">Раздзелы «Папулярныя месцы», «Гульні», «Музыка» і «Людзі, якіх згадвалі» паказаныя</string>
|
||||||
@@ -794,6 +804,11 @@ Second \"item\" text"</string>
|
|||||||
Налады → Прайграванне → Аўтаматычнае прайграванне наступнага відэа"</string>
|
Налады → Прайграванне → Аўтаматычнае прайграванне наступнага відэа"</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_off">Паказваць прапанаванае відэа на канчатковым экране</string>
|
<string name="revanced_end_screen_suggested_video_summary_off">Паказваць прапанаванае відэа на канчатковым экране</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
<string name="revanced_hide_related_video_overlay_title">Схаваць накладку звязанага відэа ў поўнаэкранным рэжыме</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_on">Накладка звязанага відэа схавана</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_off">Накладка звязанага відэа паказана</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">Схаваць метку часу відэа</string>
|
<string name="revanced_hide_timestamp_title">Схаваць метку часу відэа</string>
|
||||||
<string name="revanced_hide_timestamp_summary_on">Метка часу схавана</string>
|
<string name="revanced_hide_timestamp_summary_on">Метка часу схавана</string>
|
||||||
@@ -831,10 +846,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Перазагрузіце відэа, каб прагаласаваць з дапамогай функцыі \"Вярнуць не падабаецца YouTube\"</string>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Перазагрузіце відэа, каб прагаласаваць з дапамогай функцыі \"Вярнуць не падабаецца YouTube\"</string>
|
||||||
<!-- Video likes have been set to hidden by the video uploader. -->
|
<!-- Video likes have been set to hidden by the video uploader. -->
|
||||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Схавана ўладальнікам</string>
|
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Схавана ўладальнікам</string>
|
||||||
<string name="revanced_ryd_enable_summary_on">Дызлайкі паказаны</string>
|
<string name="revanced_ryd_enabled_summary_on">Дызлайкі паказаны</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">Дызлайкі не паказваюцца</string>
|
<string name="revanced_ryd_enabled_summary_off">Дызлайкі не паказваюцца</string>
|
||||||
<string name="revanced_ryd_shorts_title">Паказвайце \"не падабаецца\" на Shorts</string>
|
<string name="revanced_ryd_shorts_title">Паказвайце \"не падабаецца\" на Shorts</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Дызлайкі на Shorts паказаныя
|
<string name="revanced_ryd_shorts_summary_on">"Дызлайкі на Shorts паказаныя
|
||||||
|
|
||||||
Абмежаванне: дызлайкі могуць не адлюстроўвацца ў рэжыме інкогніта"</string>
|
Абмежаванне: дызлайкі могуць не адлюстроўвацца ў рэжыме інкогніта"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">Дызлайкі на Shorts не паказаныя</string>
|
<string name="revanced_ryd_shorts_summary_off">Дызлайкі на Shorts не паказаныя</string>
|
||||||
@@ -851,7 +866,6 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_ryd_toast_on_connection_error_title">Паказаць тост, калі API недаступны</string>
|
<string name="revanced_ryd_toast_on_connection_error_title">Паказаць тост, калі API недаступны</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">Тост паказваецца, калі функцыя \"Вярнуць не падабаецца YouTube\" недаступная</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_on">Тост паказваецца, калі функцыя \"Вярнуць не падабаецца YouTube\" недаступная</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">Тост не паказваецца, калі функцыя \"Вярнуць не падабаецца YouTube\" недаступная</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_off">Тост не паказваецца, калі функцыя \"Вярнуць не падабаецца YouTube\" недаступная</string>
|
||||||
<string name="revanced_ryd_about">Пра праграму</string>
|
|
||||||
<string name="revanced_ryd_attribution_summary">Дадзеныя прадастаўляюцца Return YouTube Dislikes API. Націсніце тут, каб даведацца больш</string>
|
<string name="revanced_ryd_attribution_summary">Дадзеныя прадастаўляюцца Return YouTube Dislikes API. Націсніце тут, каб даведацца больш</string>
|
||||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||||
<string name="revanced_ryd_statistics_category_title">Статыстыка ReturnYouTubeDislike API гэтай прылады</string>
|
<string name="revanced_ryd_statistics_category_title">Статыстыка ReturnYouTubeDislike API гэтай прылады</string>
|
||||||
@@ -1059,7 +1073,7 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_title">Рэдагаваць час сегмента ўручную</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_title">Рэдагаваць час сегмента ўручную</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_content">Вы жадаеце змяніць час для пачатку або канца сегмента?</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_content">Вы жадаеце змяніць час для пачатку або канца сегмента?</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Указаны няправільны час</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Указаны няправільны час</string>
|
||||||
<string name="revanced_sb_stats">Статыстыка</string>
|
<string name="revanced_sb_stats_title">Статыстыка</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||||
<string name="revanced_sb_stats_connection_failure">Статыстыка часова недаступная (API не працуе)</string>
|
<string name="revanced_sb_stats_connection_failure">Статыстыка часова недаступная (API не працуе)</string>
|
||||||
<string name="revanced_sb_stats_loading">Загрузка...</string>
|
<string name="revanced_sb_stats_loading">Загрузка...</string>
|
||||||
@@ -1088,8 +1102,8 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_sb_color_invalid">Няправільны код колеру</string>
|
<string name="revanced_sb_color_invalid">Няправільны код колеру</string>
|
||||||
<string name="revanced_sb_reset_color">Скінуць колер</string>
|
<string name="revanced_sb_reset_color">Скінуць колер</string>
|
||||||
<string name="revanced_sb_reset">Скінуць</string>
|
<string name="revanced_sb_reset">Скінуць</string>
|
||||||
<string name="revanced_sb_about">Пра праграму</string>
|
<string name="revanced_sb_about_title">Пра праграму</string>
|
||||||
<string name="revanced_sb_about_api_sum">Дадзеныя прадастаўляюцца API SponsorBlock. Націсніце тут, каб даведацца больш і паглядзець спампоўкі для іншых платформаў</string>
|
<string name="revanced_sb_about_api_summary">Дадзеныя прадастаўляюцца API SponsorBlock. Націсніце тут, каб даведацца больш і паглядзець спампоўкі для іншых платформаў</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||||
<string name="revanced_change_form_factor_title">Фармат экрана</string>
|
<string name="revanced_change_form_factor_title">Фармат экрана</string>
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_settings_import_reset">Настройките на ReVanced бяха нулирани</string>
|
<string name="revanced_settings_import_reset">Настройките на ReVanced бяха нулирани</string>
|
||||||
<string name="revanced_settings_import_success">Следните настройки бяха импортирани успешно: %d</string>
|
<string name="revanced_settings_import_success">Следните настройки бяха импортирани успешно: %d</string>
|
||||||
<string name="revanced_settings_import_failure_parse">Импортирането беше неуспешно: %s</string>
|
<string name="revanced_settings_import_failure_parse">Импортирането беше неуспешно: %s</string>
|
||||||
|
<string name="revanced_settings_search_hint">Търсене на настройки</string>
|
||||||
|
<string name="revanced_settings_search_no_results_title">Няма намерени резултати за \",%s\"</string>
|
||||||
|
<string name="revanced_settings_search_no_results_summary">Опитайте друга ключова дума</string>
|
||||||
|
<string name="revanced_settings_search_remove_message">Премахване от историята на търсенията?</string>
|
||||||
<string name="revanced_show_menu_icons_title">Показване на иконите на настройките на ReVanced</string>
|
<string name="revanced_show_menu_icons_title">Показване на иконите на настройките на ReVanced</string>
|
||||||
<string name="revanced_show_menu_icons_summary_on">Иконите на настройките се показват</string>
|
<string name="revanced_show_menu_icons_summary_on">Иконите на настройките се показват</string>
|
||||||
<string name="revanced_show_menu_icons_summary_off">Иконите на настройките не се показват</string>
|
<string name="revanced_show_menu_icons_summary_off">Иконите на настройките не се показват</string>
|
||||||
@@ -93,6 +97,9 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_restore_old_settings_menus_title">Възстановяване на старите менюта за настройки</string>
|
<string name="revanced_restore_old_settings_menus_title">Възстановяване на старите менюта за настройки</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_on">Старите менюта с настройки се показват</string>
|
<string name="revanced_restore_old_settings_menus_summary_on">Старите менюта с настройки се показват</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_off">Старите менюта с настройки не се показват</string>
|
<string name="revanced_restore_old_settings_menus_summary_off">Старите менюта с настройки не се показват</string>
|
||||||
|
<string name="revanced_settings_search_history_title">Показване на историята на търсенията в настройките</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_on">Историята на търсенията в настройките е показана</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_off">Историята на търсенията в настройките не се показва</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||||
<string name="revanced_shorts_disable_background_playback_title">Възпроизвеждане на Shorts в фонов режим</string>
|
<string name="revanced_shorts_disable_background_playback_title">Възпроизвеждане на Shorts в фонов режим</string>
|
||||||
@@ -153,10 +160,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_hide_notify_me_button_title">Скриване на бутона \"Уведоми ме\"</string>
|
<string name="revanced_hide_notify_me_button_title">Скриване на бутона \"Уведоми ме\"</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">Бутона \"Уведоми ме\" е скрит</string>
|
<string name="revanced_hide_notify_me_button_summary_on">Бутона \"Уведоми ме\" е скрит</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">Бутона \"Уведоми ме\" се показва</string>
|
<string name="revanced_hide_notify_me_button_summary_off">Бутона \"Уведоми ме\" се показва</string>
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">Скриване на етикета \"Хората също гледаха\"</string>
|
<string name="revanced_hide_search_result_recommendation_labels_title">Скриване на етикетите с видео препоръки</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_on">Етикетът е скрит</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_on">Етикетите „Други потребители също гледаха“ и „Може също да харесате“ са скрити</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">Етикетът е показан</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_off">Етикетите „Други потребители също гледаха“ и „Може също да харесате“ са показани</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">Скриване на бутона \"Покажи още\"</string>
|
<string name="revanced_hide_show_more_button_title">Скриване на бутона \"Покажи още\"</string>
|
||||||
@@ -231,6 +238,9 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_hide_ai_generated_video_summary_section_title">Скриване на \"AI-генерирано видео резюме\"</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_title">Скриване на \"AI-генерирано видео резюме\"</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Скрит е разделът с видео резюме</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Скрит е разделът с видео резюме</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Показва се разделът с видео резюме</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Показва се разделът с видео резюме</string>
|
||||||
|
<string name="revanced_hide_ask_section_title">Скриване на „Попитай“</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_on">Скрит раздел „Попитай“</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_off">Показване на раздел „Попитай“</string>
|
||||||
<string name="revanced_hide_attributes_section_title">Скриване на атрибути</string>
|
<string name="revanced_hide_attributes_section_title">Скриване на атрибути</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_on">Секциите \"Препоръчани места\", \"Игри\", \"Музика\" и \"Споменати хора\" са скрити</string>
|
<string name="revanced_hide_attributes_section_summary_on">Секциите \"Препоръчани места\", \"Игри\", \"Музика\" и \"Споменати хора\" са скрити</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">Секциите \"Препоръчани места\", \"Игри\", \"Музика\" и \"Споменати хора\" са показани</string>
|
<string name="revanced_hide_attributes_section_summary_off">Секциите \"Препоръчани места\", \"Игри\", \"Музика\" и \"Споменати хора\" са показани</string>
|
||||||
@@ -794,6 +804,11 @@ Second \"item\" text"</string>
|
|||||||
Настройки → Възпроизвеждане → Автоматично пускане на следващото видео"</string>
|
Настройки → Възпроизвеждане → Автоматично пускане на следващото видео"</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_off">Предложеното видео в края на екрана е показано</string>
|
<string name="revanced_end_screen_suggested_video_summary_off">Предложеното видео в края на екрана е показано</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
<string name="revanced_hide_related_video_overlay_title">Скриване на наслагването на свързани видеоклипове в цял екран</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_on">Наслагването на свързани видеоклипове е скрито</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_off">Наслагването на свързани видеоклипове е показано</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">Скриване на клеймото за време на видеоклипа</string>
|
<string name="revanced_hide_timestamp_title">Скриване на клеймото за време на видеоклипа</string>
|
||||||
<string name="revanced_hide_timestamp_summary_on">Скрито</string>
|
<string name="revanced_hide_timestamp_summary_on">Скрито</string>
|
||||||
@@ -831,10 +846,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Презареди видеото за гласуване с ReturnYouTubeDislike</string>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Презареди видеото за гласуване с ReturnYouTubeDislike</string>
|
||||||
<!-- Video likes have been set to hidden by the video uploader. -->
|
<!-- Video likes have been set to hidden by the video uploader. -->
|
||||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Скрито от собственика</string>
|
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Скрито от собственика</string>
|
||||||
<string name="revanced_ryd_enable_summary_on">Нехаресванията се показват</string>
|
<string name="revanced_ryd_enabled_summary_on">Нехаресванията се показват</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">Нехаресванията не се показват</string>
|
<string name="revanced_ryd_enabled_summary_off">Нехаресванията не се показват</string>
|
||||||
<string name="revanced_ryd_shorts_title">Пок. нехаресвания в кратките клипове</string>
|
<string name="revanced_ryd_shorts_title">Пок. нехаресвания в кратките клипове</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Нехаресванията на Shorts са показани
|
<string name="revanced_ryd_shorts_summary_on">"Нехаресванията на Shorts са показани
|
||||||
|
|
||||||
Ограничение: Нехаресванията може да не се показват в режим инкогнито"</string>
|
Ограничение: Нехаресванията може да не се показват в режим инкогнито"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">Нехаресванията на Shorts не са показани</string>
|
<string name="revanced_ryd_shorts_summary_off">Нехаресванията на Shorts не са показани</string>
|
||||||
@@ -851,7 +866,6 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_ryd_toast_on_connection_error_title">Показване на известие, ако API не е наличен</string>
|
<string name="revanced_ryd_toast_on_connection_error_title">Показване на известие, ако API не е наличен</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">Показва известие, ако Return YouTube Dislike не е наличен</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_on">Показва известие, ако Return YouTube Dislike не е наличен</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">Не се показва известие, ако ReturnYouTube Dislike не е наличен</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_off">Не се показва известие, ако ReturnYouTube Dislike не е наличен</string>
|
||||||
<string name="revanced_ryd_about">За програмата</string>
|
|
||||||
<string name="revanced_ryd_attribution_summary">Данните за нехаресване са от Return YouTube Dislike API. Докоснете за да научите повече</string>
|
<string name="revanced_ryd_attribution_summary">Данните за нехаресване са от Return YouTube Dislike API. Докоснете за да научите повече</string>
|
||||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||||
<string name="revanced_ryd_statistics_category_title">Статистика Return YouTube Dislike API на това устройство</string>
|
<string name="revanced_ryd_statistics_category_title">Статистика Return YouTube Dislike API на това устройство</string>
|
||||||
@@ -1058,7 +1072,7 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_title">Ръчно редактиране на времената на частта</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_title">Ръчно редактиране на времената на частта</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_content">Желаете ли да редактирате времената за начало или край на частта?</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_content">Желаете ли да редактирате времената за начало или край на частта?</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Зададено е невалидно време</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Зададено е невалидно време</string>
|
||||||
<string name="revanced_sb_stats">Статистика</string>
|
<string name="revanced_sb_stats_title">Статистика</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||||
<string name="revanced_sb_stats_connection_failure">Статистиките временно не са налични (API не работи)</string>
|
<string name="revanced_sb_stats_connection_failure">Статистиките временно не са налични (API не работи)</string>
|
||||||
<string name="revanced_sb_stats_loading">Зареждане...</string>
|
<string name="revanced_sb_stats_loading">Зареждане...</string>
|
||||||
@@ -1087,8 +1101,8 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_sb_color_invalid">Невалидна стойност за цвета</string>
|
<string name="revanced_sb_color_invalid">Невалидна стойност за цвета</string>
|
||||||
<string name="revanced_sb_reset_color">Възстановяване на цвят</string>
|
<string name="revanced_sb_reset_color">Възстановяване на цвят</string>
|
||||||
<string name="revanced_sb_reset">Възстанови</string>
|
<string name="revanced_sb_reset">Възстанови</string>
|
||||||
<string name="revanced_sb_about">За програмата</string>
|
<string name="revanced_sb_about_title">За програмата</string>
|
||||||
<string name="revanced_sb_about_api_sum">Данните са предоставени от SponsorBlock API. Докоснете тук за повече информация и изтеглияния</string>
|
<string name="revanced_sb_about_api_summary">Данните са предоставени от SponsorBlock API. Докоснете тук за повече информация и изтеглияния</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||||
<string name="revanced_change_form_factor_title">Формат на екрана /Таблет, Телфон, .../</string>
|
<string name="revanced_change_form_factor_title">Формат на екрана /Таблет, Телфон, .../</string>
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_settings_import_reset">ReVanced সেটিং ডিফল্ট সেট করা হয়েছে</string>
|
<string name="revanced_settings_import_reset">ReVanced সেটিং ডিফল্ট সেট করা হয়েছে</string>
|
||||||
<string name="revanced_settings_import_success">%d সেটিং আমদানি হয়েছে</string>
|
<string name="revanced_settings_import_success">%d সেটিং আমদানি হয়েছে</string>
|
||||||
<string name="revanced_settings_import_failure_parse">আমদানি করা যায়নি: %s</string>
|
<string name="revanced_settings_import_failure_parse">আমদানি করা যায়নি: %s</string>
|
||||||
|
<string name="revanced_settings_search_hint">অনুসন্ধান সেটিংস</string>
|
||||||
|
<string name="revanced_settings_search_no_results_title">\'%s\'-এর জন্য কোন ফলাফল পাওয়া যায়নি</string>
|
||||||
|
<string name="revanced_settings_search_no_results_summary">অন্য কোনো কীওয়ার্ড চেষ্টা করুন</string>
|
||||||
|
<string name="revanced_settings_search_remove_message">অনুসন্ধান ইতিহাস থেকে সরাবেন?</string>
|
||||||
<string name="revanced_show_menu_icons_title">ReVanced সেটিং আইকন দেখান</string>
|
<string name="revanced_show_menu_icons_title">ReVanced সেটিং আইকন দেখান</string>
|
||||||
<string name="revanced_show_menu_icons_summary_on">সেটিং আইকন দেখানো হয়েছে</string>
|
<string name="revanced_show_menu_icons_summary_on">সেটিং আইকন দেখানো হয়েছে</string>
|
||||||
<string name="revanced_show_menu_icons_summary_off">সেটিং আইকন দেখানো হচ্ছে না</string>
|
<string name="revanced_show_menu_icons_summary_off">সেটিং আইকন দেখানো হচ্ছে না</string>
|
||||||
@@ -93,6 +97,9 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
|||||||
<string name="revanced_restore_old_settings_menus_title">পুরানো সেটিংস মেনু পুনরুদ্ধার করুন</string>
|
<string name="revanced_restore_old_settings_menus_title">পুরানো সেটিংস মেনু পুনরুদ্ধার করুন</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_on">পুরাতন সেটিংস মেনু দেখানো হচ্ছে</string>
|
<string name="revanced_restore_old_settings_menus_summary_on">পুরাতন সেটিংস মেনু দেখানো হচ্ছে</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_off">পুরাতন সেটিংস মেনু দেখানো হচ্ছে না</string>
|
<string name="revanced_restore_old_settings_menus_summary_off">পুরাতন সেটিংস মেনু দেখানো হচ্ছে না</string>
|
||||||
|
<string name="revanced_settings_search_history_title">অনুসন্ধান সেটিংসের ইতিহাস দেখান</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_on">সেটিংস অনুসন্ধান ইতিহাস দেখানো হয়েছে</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_off">সেটিংস অনুসন্ধান ইতিহাস দেখানো হয় না</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||||
<string name="revanced_shorts_disable_background_playback_title">Shorts ব্যাকগ্রাউন্ড প্লে অক্ষম করুন</string>
|
<string name="revanced_shorts_disable_background_playback_title">Shorts ব্যাকগ্রাউন্ড প্লে অক্ষম করুন</string>
|
||||||
@@ -153,10 +160,10 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
|||||||
<string name="revanced_hide_notify_me_button_title">\'আমাকে জানান\' বোতাম লুকান</string>
|
<string name="revanced_hide_notify_me_button_title">\'আমাকে জানান\' বোতাম লুকান</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">বোতাম লুকানো আছে</string>
|
<string name="revanced_hide_notify_me_button_summary_on">বোতাম লুকানো আছে</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">বোতাম দেখানো আছে</string>
|
<string name="revanced_hide_notify_me_button_summary_off">বোতাম দেখানো আছে</string>
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">\'People also watched\' লেবেল লুকান</string>
|
<string name="revanced_hide_search_result_recommendation_labels_title">ভিডিও প্রস্তাবনা লেবেল লুকান</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_on">লেবেল লুকানো আছে</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_on">\"\'লোকেরা আরও দেখেছে\' এবং \'আপনি সম্ভবত পছন্দ করতে পারেন\' লেবেলগুলি লুকানো আছে\"</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">লেবেল দেখানো হয়েছে</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_off">\"\'লোকেরা আরও দেখেছে\' এবং \'আপনি সম্ভবত পছন্দ করতে পারেন\' লেবেলগুলি দেখানো হয়েছে\"</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">\'আরও দেখান\' বোতাম লুকান</string>
|
<string name="revanced_hide_show_more_button_title">\'আরও দেখান\' বোতাম লুকান</string>
|
||||||
@@ -231,6 +238,9 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
|||||||
<string name="revanced_hide_ai_generated_video_summary_section_title">\'AI-জেনারেটেড ভিডিও সারসংক্ষেপ\' লুকান</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_title">\'AI-জেনারেটেড ভিডিও সারসংক্ষেপ\' লুকান</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">ভিডিও সারসংক্ষেপ বিভাগ লুকানো আছে</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">ভিডিও সারসংক্ষেপ বিভাগ লুকানো আছে</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">ভিডিও সারসংক্ষেপ বিভাগ দেখানো হয়েছে</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">ভিডিও সারসংক্ষেপ বিভাগ দেখানো হয়েছে</string>
|
||||||
|
<string name="revanced_hide_ask_section_title">জিজ্ঞাসা লুকান</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_on">জিজ্ঞাসা বিভাগ লুকানো আছে</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_off">জিজ্ঞাসা বিভাগ দেখানো হয়েছে</string>
|
||||||
<string name="revanced_hide_attributes_section_title">বৈশিষ্ট্যাবলী লুকান</string>
|
<string name="revanced_hide_attributes_section_title">বৈশিষ্ট্যাবলী লুকান</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_on">বৈশিষ্ট্যযুক্ত স্থান, গেমস, সঙ্গীত, এবং উল্লিখিত ব্যক্তি বিভাগগুলি লুকানো আছে</string>
|
<string name="revanced_hide_attributes_section_summary_on">বৈশিষ্ট্যযুক্ত স্থান, গেমস, সঙ্গীত, এবং উল্লিখিত ব্যক্তি বিভাগগুলি লুকানো আছে</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">বৈশিষ্ট্যযুক্ত স্থান, গেমস, সঙ্গীত, এবং উল্লিখিত ব্যক্তি বিভাগগুলি দেখানো হয়েছে</string>
|
<string name="revanced_hide_attributes_section_summary_off">বৈশিষ্ট্যযুক্ত স্থান, গেমস, সঙ্গীত, এবং উল্লিখিত ব্যক্তি বিভাগগুলি দেখানো হয়েছে</string>
|
||||||
@@ -794,6 +804,11 @@ YouTube সেটিংসে অটো প্লে পরিবর্তন
|
|||||||
সেটিংস → প্লেব্যাক → অটো প্লে পরবর্তী ভিডিও"</string>
|
সেটিংস → প্লেব্যাক → অটো প্লে পরবর্তী ভিডিও"</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_off">শেষ স্ক্রীনে প্রস্তাবিত ভিডিও দেখানো হয়েছে</string>
|
<string name="revanced_end_screen_suggested_video_summary_off">শেষ স্ক্রীনে প্রস্তাবিত ভিডিও দেখানো হয়েছে</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
<string name="revanced_hide_related_video_overlay_title">পূর্ণ-স্ক্রীনে সম্পর্কিত ভিডিও ওভারলে লুকান</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_on">সম্পর্কিত ভিডিও ওভারলে লুকানো আছে</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_off">সম্পর্কিত ভিডিও ওভারলে দেখানো হয়েছে</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">ভিডিওর সময়স্ট্যাম্প লুকান</string>
|
<string name="revanced_hide_timestamp_title">ভিডিওর সময়স্ট্যাম্প লুকান</string>
|
||||||
<string name="revanced_hide_timestamp_summary_on">সময়স্ট্যাম্প লুকিয়ে রয়েছে</string>
|
<string name="revanced_hide_timestamp_summary_on">সময়স্ট্যাম্প লুকিয়ে রয়েছে</string>
|
||||||
@@ -831,10 +846,10 @@ YouTube সেটিংসে অটো প্লে পরিবর্তন
|
|||||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">ReturnYouTubeDislike দিয়ে ভোট দিতে ভিডিও আবার লোড করুন</string>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">ReturnYouTubeDislike দিয়ে ভোট দিতে ভিডিও আবার লোড করুন</string>
|
||||||
<!-- Video likes have been set to hidden by the video uploader. -->
|
<!-- Video likes have been set to hidden by the video uploader. -->
|
||||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">মালিক কর্তৃক লুকানো</string>
|
<string name="revanced_ryd_video_likes_hidden_by_video_owner">মালিক কর্তৃক লুকানো</string>
|
||||||
<string name="revanced_ryd_enable_summary_on">অপছন্দগুলো প্রদর্শিত হয়েছে</string>
|
<string name="revanced_ryd_enabled_summary_on">অপছন্দগুলো প্রদর্শিত হয়েছে</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">অপছন্দগুলো প্রদর্শিত হয়নি</string>
|
<string name="revanced_ryd_enabled_summary_off">অপছন্দগুলো প্রদর্শিত হয়নি</string>
|
||||||
<string name="revanced_ryd_shorts_title">Shorts এ অপছন্দ দেখান</string>
|
<string name="revanced_ryd_shorts_title">Shorts এ অপছন্দ দেখান</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Shorts-এ অপছন্দগুলি দেখানো হয়েছে
|
<string name="revanced_ryd_shorts_summary_on">"Shorts-এ অপছন্দগুলি দেখানো হয়েছে
|
||||||
|
|
||||||
সীমাবদ্ধতা: ছদ্মবেশী মোডে অপছন্দগুলি নাও দেখা যেতে পারে"</string>
|
সীমাবদ্ধতা: ছদ্মবেশী মোডে অপছন্দগুলি নাও দেখা যেতে পারে"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">Shorts-এ অপছন্দগুলি দেখানো হয়নি</string>
|
<string name="revanced_ryd_shorts_summary_off">Shorts-এ অপছন্দগুলি দেখানো হয়নি</string>
|
||||||
@@ -851,7 +866,6 @@ YouTube সেটিংসে অটো প্লে পরিবর্তন
|
|||||||
<string name="revanced_ryd_toast_on_connection_error_title">API উপলভ্য না থাকলে একটি টোস্ট দেখান</string>
|
<string name="revanced_ryd_toast_on_connection_error_title">API উপলভ্য না থাকলে একটি টোস্ট দেখান</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">Return YouTube Dislike উপলভ্য না থাকলে টোস্ট দেখানো হবে</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_on">Return YouTube Dislike উপলভ্য না থাকলে টোস্ট দেখানো হবে</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">Return YouTube Dislike উপলভ্য না থাকলে টোস্ট দেখানো হবে না</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_off">Return YouTube Dislike উপলভ্য না থাকলে টোস্ট দেখানো হবে না</string>
|
||||||
<string name="revanced_ryd_about">সম্পর্কিত</string>
|
|
||||||
<string name="revanced_ryd_attribution_summary">তথ্য প্রদান করা হয় Return YouTube Dislike API দ্বারা। আরও জানতে এখানে ট্যাপ করুন</string>
|
<string name="revanced_ryd_attribution_summary">তথ্য প্রদান করা হয় Return YouTube Dislike API দ্বারা। আরও জানতে এখানে ট্যাপ করুন</string>
|
||||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||||
<string name="revanced_ryd_statistics_category_title">এই ডিভাইসের ReturnYouTubeDislike API পরিসংখ্যান</string>
|
<string name="revanced_ryd_statistics_category_title">এই ডিভাইসের ReturnYouTubeDislike API পরিসংখ্যান</string>
|
||||||
@@ -1058,7 +1072,7 @@ YouTube সেটিংসে অটো প্লে পরিবর্তন
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_title">সেগমেন্টের সময় ম্যানুয়ালি সম্পাদনা করুন</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_title">সেগমেন্টের সময় ম্যানুয়ালি সম্পাদনা করুন</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_content">আপনি কি সেগমেন্টের শুরু বা শেষের সময় সম্পাদনা করতে চান?</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_content">আপনি কি সেগমেন্টের শুরু বা শেষের সময় সম্পাদনা করতে চান?</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">ভুল সময় দেয়া হয়েছে</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">ভুল সময় দেয়া হয়েছে</string>
|
||||||
<string name="revanced_sb_stats">পরিসংখ্যান</string>
|
<string name="revanced_sb_stats_title">পরিসংখ্যান</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||||
<string name="revanced_sb_stats_connection_failure">পরিসংখ্যান সাময়িকভাবে উপলব্ধ নেই (API ডাউন)</string>
|
<string name="revanced_sb_stats_connection_failure">পরিসংখ্যান সাময়িকভাবে উপলব্ধ নেই (API ডাউন)</string>
|
||||||
<string name="revanced_sb_stats_loading">লোড হচ্ছে...</string>
|
<string name="revanced_sb_stats_loading">লোড হচ্ছে...</string>
|
||||||
@@ -1087,8 +1101,8 @@ YouTube সেটিংসে অটো প্লে পরিবর্তন
|
|||||||
<string name="revanced_sb_color_invalid">রংয়ের ভুল কোড</string>
|
<string name="revanced_sb_color_invalid">রংয়ের ভুল কোড</string>
|
||||||
<string name="revanced_sb_reset_color">রং আবার সেট করুন</string>
|
<string name="revanced_sb_reset_color">রং আবার সেট করুন</string>
|
||||||
<string name="revanced_sb_reset">পুনরায় সেট করুন</string>
|
<string name="revanced_sb_reset">পুনরায় সেট করুন</string>
|
||||||
<string name="revanced_sb_about">সম্পর্কিত</string>
|
<string name="revanced_sb_about_title">সম্পর্কিত</string>
|
||||||
<string name="revanced_sb_about_api_sum">ডেটা SponsorBlock API দ্বারা সরবরাহ করা হয়। আরও জানতে এবং অন্যান্য প্ল্যাটফর্মের ডাউনলোড দেখতে এখানে ট্যাপ করুন</string>
|
<string name="revanced_sb_about_api_summary">ডেটা SponsorBlock API দ্বারা সরবরাহ করা হয়। আরও জানতে এবং অন্যান্য প্ল্যাটফর্মের ডাউনলোড দেখতে এখানে ট্যাপ করুন</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||||
<string name="revanced_change_form_factor_title">লেআউট ফর্ম ফ্যাক্টর</string>
|
<string name="revanced_change_form_factor_title">লেআউট ফর্ম ফ্যাক্টর</string>
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ Second \"item\" text"</string>
|
|||||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
<!-- '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. -->
|
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||||
@@ -134,6 +134,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_settings_import_reset">La configuració de ReVanced s\'ha restablert als valors predeterminats</string>
|
<string name="revanced_settings_import_reset">La configuració de ReVanced s\'ha restablert als valors predeterminats</string>
|
||||||
<string name="revanced_settings_import_success">S\'han importat %d configuracions</string>
|
<string name="revanced_settings_import_success">S\'han importat %d configuracions</string>
|
||||||
<string name="revanced_settings_import_failure_parse">No s\'ha pogut importar: %s</string>
|
<string name="revanced_settings_import_failure_parse">No s\'ha pogut importar: %s</string>
|
||||||
|
<string name="revanced_settings_search_hint">Cerca a la configuració</string>
|
||||||
|
<string name="revanced_settings_search_no_results_title">No s\'han trobat resultats per a «%s»</string>
|
||||||
|
<string name="revanced_settings_search_no_results_summary">Prova una altra paraula clau</string>
|
||||||
|
<string name="revanced_settings_search_remove_message">Voleu suprimir-ho de l\'historial de cerca?</string>
|
||||||
<string name="revanced_show_menu_icons_title">Mostra les icones de configuració de ReVanced</string>
|
<string name="revanced_show_menu_icons_title">Mostra les icones de configuració de ReVanced</string>
|
||||||
<string name="revanced_show_menu_icons_summary_on">Es mostren les icones de configuració</string>
|
<string name="revanced_show_menu_icons_summary_on">Es mostren les icones de configuració</string>
|
||||||
<string name="revanced_show_menu_icons_summary_off">No es mostren les icones de configuració</string>
|
<string name="revanced_show_menu_icons_summary_off">No es mostren les icones de configuració</string>
|
||||||
@@ -93,6 +97,9 @@ Toca el botó Continua i permet els canvis d'optimització."</string>
|
|||||||
<string name="revanced_restore_old_settings_menus_title">Restaurar els menús de configuració antics</string>
|
<string name="revanced_restore_old_settings_menus_title">Restaurar els menús de configuració antics</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_on">Es mostren els menús de configuració antics</string>
|
<string name="revanced_restore_old_settings_menus_summary_on">Es mostren els menús de configuració antics</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_off">No es mostren els menús de configuració antics</string>
|
<string name="revanced_restore_old_settings_menus_summary_off">No es mostren els menús de configuració antics</string>
|
||||||
|
<string name="revanced_settings_search_history_title">Mostra l\'historial de cerca de la configuració</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_on">Es mostra l\'historial de cerca de la configuració</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_off">L\'historial de cerca de la configuració no es mostra</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||||
<string name="revanced_shorts_disable_background_playback_title">Desactivar la reproducció en segon pla de Shorts</string>
|
<string name="revanced_shorts_disable_background_playback_title">Desactivar la reproducció en segon pla de Shorts</string>
|
||||||
@@ -153,10 +160,10 @@ No se t'informarà de cap esdeveniment inesperat."</string>
|
|||||||
<string name="revanced_hide_notify_me_button_title">Amaga el botó \"M\'avisa\"</string>
|
<string name="revanced_hide_notify_me_button_title">Amaga el botó \"M\'avisa\"</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">El botó està amagat</string>
|
<string name="revanced_hide_notify_me_button_summary_on">El botó està amagat</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">El botó es mostra</string>
|
<string name="revanced_hide_notify_me_button_summary_off">El botó es mostra</string>
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">Amaga l\'etiqueta \"La gent també ha mirat\"</string>
|
<string name="revanced_hide_search_result_recommendation_labels_title">Amaga les etiquetes de recomanació de vídeos</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_on">L\'etiqueta s\'amaga</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_on">Les etiquetes «Altres usuaris també han vist» i «Potser també t\'agradarà» estan ocultes</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">L\'etiqueta es mostra</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_off">Les etiquetes «Altres usuaris també han vist» i «Potser també t\'agradarà» es mostren</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">Amaga el botó \'Mostra més\'</string>
|
<string name="revanced_hide_show_more_button_title">Amaga el botó \'Mostra més\'</string>
|
||||||
@@ -231,6 +238,9 @@ No se t'informarà de cap esdeveniment inesperat."</string>
|
|||||||
<string name="revanced_hide_ai_generated_video_summary_section_title">Amaga «Resum de vídeo generat per IA»</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_title">Amaga «Resum de vídeo generat per IA»</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">S\'ha amagat la secció de resum del vídeo</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">S\'ha amagat la secció de resum del vídeo</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Es mostra la secció de resum del vídeo</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Es mostra la secció de resum del vídeo</string>
|
||||||
|
<string name="revanced_hide_ask_section_title">Amaga la secció «Pregunta»</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_on">La secció «Pregunta» està amagada</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_off">La secció «Pregunta» es mostra</string>
|
||||||
<string name="revanced_hide_attributes_section_title">Amaga els atributs</string>
|
<string name="revanced_hide_attributes_section_title">Amaga els atributs</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_on">Les seccions Llocs destacats, Jocs, Música i Persones esmentades s\'amaguen</string>
|
<string name="revanced_hide_attributes_section_summary_on">Les seccions Llocs destacats, Jocs, Música i Persones esmentades s\'amaguen</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">Les seccions Llocs destacats, Jocs, Música i Persones esmentades es mostren</string>
|
<string name="revanced_hide_attributes_section_summary_off">Les seccions Llocs destacats, Jocs, Música i Persones esmentades es mostren</string>
|
||||||
@@ -794,6 +804,11 @@ La reproducció automàtica es pot canviar a la configuració de YouTube:
|
|||||||
Configuració → Reproducció → Reprodueix el vídeo següent automàticament"</string>
|
Configuració → Reproducció → Reprodueix el vídeo següent automàticament"</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_off">Es mostra el vídeo suggerit de la pantalla final</string>
|
<string name="revanced_end_screen_suggested_video_summary_off">Es mostra el vídeo suggerit de la pantalla final</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
<string name="revanced_hide_related_video_overlay_title">Amaga la superposició de vídeos relacionats a pantalla completa</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_on">La superposició de vídeos relacionats està amagada</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_off">Es mostra la superposició de vídeos relacionats</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">Amagar segell de temps del vídeo</string>
|
<string name="revanced_hide_timestamp_title">Amagar segell de temps del vídeo</string>
|
||||||
<string name="revanced_hide_timestamp_summary_on">El segell de temps està ocult</string>
|
<string name="revanced_hide_timestamp_summary_on">El segell de temps està ocult</string>
|
||||||
@@ -831,10 +846,10 @@ Configuració → Reproducció → Reprodueix el vídeo següent automàticament
|
|||||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Recarrega el vídeo per votar utilitzant Return YouTube Dislike</string>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Recarrega el vídeo per votar utilitzant Return YouTube Dislike</string>
|
||||||
<!-- Video likes have been set to hidden by the video uploader. -->
|
<!-- Video likes have been set to hidden by the video uploader. -->
|
||||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Amagat per l\'amo</string>
|
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Amagat per l\'amo</string>
|
||||||
<string name="revanced_ryd_enable_summary_on">Els \"no m\'agrada\" es mostren</string>
|
<string name="revanced_ryd_enabled_summary_on">Els \"no m\'agrada\" es mostren</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">Els \"no m\'agrada\" no es mostren</string>
|
<string name="revanced_ryd_enabled_summary_off">Els \"no m\'agrada\" no es mostren</string>
|
||||||
<string name="revanced_ryd_shorts_title">Mostrar \"no m\'agrada\" a Shorts</string>
|
<string name="revanced_ryd_shorts_title">Mostrar \"no m\'agrada\" a Shorts</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Els \"no m'agrada\" als Shorts es mostren
|
<string name="revanced_ryd_shorts_summary_on">"Els \"no m'agrada\" als Shorts es mostren
|
||||||
|
|
||||||
Limitació: és possible que els \"no m'agrada\" no apareguin en mode d'incògnit"</string>
|
Limitació: és possible que els \"no m'agrada\" no apareguin en mode d'incògnit"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">Els \"no m\'agrada\" als Shorts no es mostren</string>
|
<string name="revanced_ryd_shorts_summary_off">Els \"no m\'agrada\" als Shorts no es mostren</string>
|
||||||
@@ -851,7 +866,6 @@ Limitació: és possible que els \"no m'agrada\" no apareguin en mode d'incògni
|
|||||||
<string name="revanced_ryd_toast_on_connection_error_title">Mostrar una \"toast\" si l\'API no està disponible</string>
|
<string name="revanced_ryd_toast_on_connection_error_title">Mostrar una \"toast\" si l\'API no està disponible</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">La \"toast\" es mostra si Return YouTube Dislike no està disponible</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_on">La \"toast\" es mostra si Return YouTube Dislike no està disponible</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">La \"toast\" no es mostra si Return YouTube Dislike no està disponible</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_off">La \"toast\" no es mostra si Return YouTube Dislike no està disponible</string>
|
||||||
<string name="revanced_ryd_about">Quant a</string>
|
|
||||||
<string name="revanced_ryd_attribution_summary">Les dades són proporcionades per l\'API de Return YouTube Dislike. Toca aquí per obtenir més informació</string>
|
<string name="revanced_ryd_attribution_summary">Les dades són proporcionades per l\'API de Return YouTube Dislike. Toca aquí per obtenir més informació</string>
|
||||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||||
<string name="revanced_ryd_statistics_category_title">Estadístiques de l\'API de ReturnYouTubeDislike d\'aquest dispositiu</string>
|
<string name="revanced_ryd_statistics_category_title">Estadístiques de l\'API de ReturnYouTubeDislike d\'aquest dispositiu</string>
|
||||||
@@ -1057,7 +1071,7 @@ Preparat per enviar?"</string>
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_title">Editeu el temps del segment manualment</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_title">Editeu el temps del segment manualment</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_content">Voleu editar el temps per a l\'inici o el final del segment?</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_content">Voleu editar el temps per a l\'inici o el final del segment?</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Temps invàlid proporcionat</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Temps invàlid proporcionat</string>
|
||||||
<string name="revanced_sb_stats">Estadístiques</string>
|
<string name="revanced_sb_stats_title">Estadístiques</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||||
<string name="revanced_sb_stats_connection_failure">Les estadístiques no estan disponibles temporalment (l\'API no funciona)</string>
|
<string name="revanced_sb_stats_connection_failure">Les estadístiques no estan disponibles temporalment (l\'API no funciona)</string>
|
||||||
<string name="revanced_sb_stats_loading">S\'està carregant...</string>
|
<string name="revanced_sb_stats_loading">S\'està carregant...</string>
|
||||||
@@ -1086,8 +1100,8 @@ Preparat per enviar?"</string>
|
|||||||
<string name="revanced_sb_color_invalid">Codi de color invàlid</string>
|
<string name="revanced_sb_color_invalid">Codi de color invàlid</string>
|
||||||
<string name="revanced_sb_reset_color">Restableix el color</string>
|
<string name="revanced_sb_reset_color">Restableix el color</string>
|
||||||
<string name="revanced_sb_reset">Restablir</string>
|
<string name="revanced_sb_reset">Restablir</string>
|
||||||
<string name="revanced_sb_about">Quant a</string>
|
<string name="revanced_sb_about_title">Quant a</string>
|
||||||
<string name="revanced_sb_about_api_sum">Les dades són proporcionades per l\'API de SponsorBlock. Toca aquí per a saber-ne més i veure les descàrregues per a altres plataformes</string>
|
<string name="revanced_sb_about_api_summary">Les dades són proporcionades per l\'API de SponsorBlock. Toca aquí per a saber-ne més i veure les descàrregues per a altres plataformes</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||||
<string name="revanced_change_form_factor_title">Factor de forma del disseny</string>
|
<string name="revanced_change_form_factor_title">Factor de forma del disseny</string>
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_settings_import_reset">Nastavení ReVanced obnoveno do výchozího stavu</string>
|
<string name="revanced_settings_import_reset">Nastavení ReVanced obnoveno do výchozího stavu</string>
|
||||||
<string name="revanced_settings_import_success">Importováno %d nastavení</string>
|
<string name="revanced_settings_import_success">Importováno %d nastavení</string>
|
||||||
<string name="revanced_settings_import_failure_parse">Importováni selhalo: %s</string>
|
<string name="revanced_settings_import_failure_parse">Importováni selhalo: %s</string>
|
||||||
|
<string name="revanced_settings_search_hint">Hledat nastavení</string>
|
||||||
|
<string name="revanced_settings_search_no_results_title">Nebyly nalezeny žádné výsledky pro \",%s\"</string>
|
||||||
|
<string name="revanced_settings_search_no_results_summary">Zkuste jiné klíčové slovo</string>
|
||||||
|
<string name="revanced_settings_search_remove_message">Odebrat z historie vyhledávání?</string>
|
||||||
<string name="revanced_show_menu_icons_title">Zobrazit ikony nastavení ReVanced</string>
|
<string name="revanced_show_menu_icons_title">Zobrazit ikony nastavení ReVanced</string>
|
||||||
<string name="revanced_show_menu_icons_summary_on">Ikony nastavení se zobrazují</string>
|
<string name="revanced_show_menu_icons_summary_on">Ikony nastavení se zobrazují</string>
|
||||||
<string name="revanced_show_menu_icons_summary_off">Ikony nastavení se nezobrazují</string>
|
<string name="revanced_show_menu_icons_summary_off">Ikony nastavení se nezobrazují</string>
|
||||||
@@ -93,6 +97,9 @@ Klepněte na tlačítko Pokračovat a povolte změny optimalizace."</string>
|
|||||||
<string name="revanced_restore_old_settings_menus_title">Obnovit staré menu nastavení</string>
|
<string name="revanced_restore_old_settings_menus_title">Obnovit staré menu nastavení</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_on">Staré menu nastavení se zobrazují</string>
|
<string name="revanced_restore_old_settings_menus_summary_on">Staré menu nastavení se zobrazují</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_off">Staré menu nastavení se nezobrazují</string>
|
<string name="revanced_restore_old_settings_menus_summary_off">Staré menu nastavení se nezobrazují</string>
|
||||||
|
<string name="revanced_settings_search_history_title">Zobrazit historii vyhledávání v nastavení</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_on">Historie vyhledávání v nastavení je zobrazena</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_off">Historie vyhledávání nastavení se nezobrazuje</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||||
<string name="revanced_shorts_disable_background_playback_title">Zakázat automatické přehrávání Shorts v pozadí</string>
|
<string name="revanced_shorts_disable_background_playback_title">Zakázat automatické přehrávání Shorts v pozadí</string>
|
||||||
@@ -153,10 +160,10 @@ Nebudete informováni o žádné neočekávané události."</string>
|
|||||||
<string name="revanced_hide_notify_me_button_title">Skrýt tlačitko \'Upozorněte mě\'</string>
|
<string name="revanced_hide_notify_me_button_title">Skrýt tlačitko \'Upozorněte mě\'</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">Tlačítko je skryté</string>
|
<string name="revanced_hide_notify_me_button_summary_on">Tlačítko je skryté</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">Tlačítko je zobrazeno</string>
|
<string name="revanced_hide_notify_me_button_summary_off">Tlačítko je zobrazeno</string>
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">Skrýt štítek „Lidé také sledovali“</string>
|
<string name="revanced_hide_search_result_recommendation_labels_title">Skrýt popisky doporučení videí</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_on">Štítek je skrytý</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_on">Popisky „Lidé také sledovali“ a „Mohlo by se vám také líbit“ jsou skryté</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">Štítek je zobrazen</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_off">Popisky „Lidé také sledovali“ a „Mohlo by se vám také líbit“ jsou zobrazené</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">Skrýt tlačítko „Zobrazit více“</string>
|
<string name="revanced_hide_show_more_button_title">Skrýt tlačítko „Zobrazit více“</string>
|
||||||
@@ -231,6 +238,9 @@ Nebudete informováni o žádné neočekávané události."</string>
|
|||||||
<string name="revanced_hide_ai_generated_video_summary_section_title">Skrýt „Souhrn videa generovaný pomocí AI“</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_title">Skrýt „Souhrn videa generovaný pomocí AI“</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Sekce se souhrnem videa je skrytá</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Sekce se souhrnem videa je skrytá</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Sekce se souhrnem videa je zobrazena</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Sekce se souhrnem videa je zobrazena</string>
|
||||||
|
<string name="revanced_hide_ask_section_title">Skrýt sekci Zeptat se</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_on">Sekce Zeptat se je skrytá</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_off">Sekce Zeptat se je zobrazena</string>
|
||||||
<string name="revanced_hide_attributes_section_title">Skrýt atributy</string>
|
<string name="revanced_hide_attributes_section_title">Skrýt atributy</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_on">Sekce Doporučená místa, Hry, Hudba a Zmínění lidé jsou skryté</string>
|
<string name="revanced_hide_attributes_section_summary_on">Sekce Doporučená místa, Hry, Hudba a Zmínění lidé jsou skryté</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">Sekce Doporučená místa, Hry, Hudba a Zmínění lidé jsou zobrazené</string>
|
<string name="revanced_hide_attributes_section_summary_off">Sekce Doporučená místa, Hry, Hudba a Zmínění lidé jsou zobrazené</string>
|
||||||
@@ -794,6 +804,11 @@ Automatické přehrávání lze změnit v nastavení YouTube:
|
|||||||
Nastavení → Přehrávání → Automatické přehrávání dalšího videa"</string>
|
Nastavení → Přehrávání → Automatické přehrávání dalšího videa"</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_off">Navrhované video na konci obrazovky se zobrazuje</string>
|
<string name="revanced_end_screen_suggested_video_summary_off">Navrhované video na konci obrazovky se zobrazuje</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
<string name="revanced_hide_related_video_overlay_title">Skrýt překryv souvisejícího videa v režimu celé obrazovky</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_on">Překryv souvisejícího videa je skrytý</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_off">Překryv souvisejícího videa je zobrazen</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">Skrýt čas videa</string>
|
<string name="revanced_hide_timestamp_title">Skrýt čas videa</string>
|
||||||
<string name="revanced_hide_timestamp_summary_on">Čas je skrytý</string>
|
<string name="revanced_hide_timestamp_summary_on">Čas je skrytý</string>
|
||||||
@@ -831,10 +846,10 @@ Nastavení → Přehrávání → Automatické přehrávání dalšího videa"</
|
|||||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Načtěte video znovu, abyste hlasovali pomocí Return YouTube Dislike</string>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Načtěte video znovu, abyste hlasovali pomocí Return YouTube Dislike</string>
|
||||||
<!-- Video likes have been set to hidden by the video uploader. -->
|
<!-- Video likes have been set to hidden by the video uploader. -->
|
||||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Skryto vlastníkem</string>
|
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Skryto vlastníkem</string>
|
||||||
<string name="revanced_ryd_enable_summary_on">Nelíbí se se zobrazují</string>
|
<string name="revanced_ryd_enabled_summary_on">Nelíbí se se zobrazují</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">Nelíbí se se nezobrazují</string>
|
<string name="revanced_ryd_enabled_summary_off">Nelíbí se se nezobrazují</string>
|
||||||
<string name="revanced_ryd_shorts_title">Zobrazit nelíbí se v Shorts</string>
|
<string name="revanced_ryd_shorts_title">Zobrazit nelíbí se v Shorts</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Počty „Nelíbí se mi“ u Shorts jsou zobrazeny
|
<string name="revanced_ryd_shorts_summary_on">"Počty „Nelíbí se mi“ u Shorts jsou zobrazeny
|
||||||
|
|
||||||
Omezení: Počty „Nelíbí se mi“ se nemusí zobrazit v anonymním režimu"</string>
|
Omezení: Počty „Nelíbí se mi“ se nemusí zobrazit v anonymním režimu"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">Počty „Nelíbí se mi“ u Shorts nejsou zobrazeny</string>
|
<string name="revanced_ryd_shorts_summary_off">Počty „Nelíbí se mi“ u Shorts nejsou zobrazeny</string>
|
||||||
@@ -851,7 +866,6 @@ Omezení: Počty „Nelíbí se mi“ se nemusí zobrazit v anonymním režimu"<
|
|||||||
<string name="revanced_ryd_toast_on_connection_error_title">Zobrazit toast, pokud API není dostupné</string>
|
<string name="revanced_ryd_toast_on_connection_error_title">Zobrazit toast, pokud API není dostupné</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">Toast se zobrazí, pokud Return YouTube Dislike není dostupný</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_on">Toast se zobrazí, pokud Return YouTube Dislike není dostupný</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">Toast se nezobrazí, pokud Return YouTube Dislike není dostupný</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_off">Toast se nezobrazí, pokud Return YouTube Dislike není dostupný</string>
|
||||||
<string name="revanced_ryd_about">O aplikaci</string>
|
|
||||||
<string name="revanced_ryd_attribution_summary">Data jsou poskytována API Return YouTube Dislike. Klepnutím se dozvíte více</string>
|
<string name="revanced_ryd_attribution_summary">Data jsou poskytována API Return YouTube Dislike. Klepnutím se dozvíte více</string>
|
||||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||||
<string name="revanced_ryd_statistics_category_title">Statistiky API ReturnYouTubeDislike tohoto zařízení</string>
|
<string name="revanced_ryd_statistics_category_title">Statistiky API ReturnYouTubeDislike tohoto zařízení</string>
|
||||||
@@ -1057,7 +1071,7 @@ Jste připraveni k odeslání?"</string>
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_title">Upravit načasování segmentu ručně</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_title">Upravit načasování segmentu ručně</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_content">Chcete upravit načasování pro začátek nebo konec segmentu?</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_content">Chcete upravit načasování pro začátek nebo konec segmentu?</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Zadán neplatný čas</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Zadán neplatný čas</string>
|
||||||
<string name="revanced_sb_stats">Statistiky</string>
|
<string name="revanced_sb_stats_title">Statistiky</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||||
<string name="revanced_sb_stats_connection_failure">Statistiky jsou dočasně nedostupné (server API je mimo provoz)</string>
|
<string name="revanced_sb_stats_connection_failure">Statistiky jsou dočasně nedostupné (server API je mimo provoz)</string>
|
||||||
<string name="revanced_sb_stats_loading">Načítání...</string>
|
<string name="revanced_sb_stats_loading">Načítání...</string>
|
||||||
@@ -1086,8 +1100,8 @@ Jste připraveni k odeslání?"</string>
|
|||||||
<string name="revanced_sb_color_invalid">Neplatný kód barvy</string>
|
<string name="revanced_sb_color_invalid">Neplatný kód barvy</string>
|
||||||
<string name="revanced_sb_reset_color">Resetovat barvu</string>
|
<string name="revanced_sb_reset_color">Resetovat barvu</string>
|
||||||
<string name="revanced_sb_reset">Výchozí</string>
|
<string name="revanced_sb_reset">Výchozí</string>
|
||||||
<string name="revanced_sb_about">O aplikaci</string>
|
<string name="revanced_sb_about_title">O aplikaci</string>
|
||||||
<string name="revanced_sb_about_api_sum">Data poskytuje rozhraní API SponsorBlock. Klepněte zde, abyste se dozvěděli více a zobrazili si soubory ke stažení pro další platformy</string>
|
<string name="revanced_sb_about_api_summary">Data poskytuje rozhraní API SponsorBlock. Klepněte zde, abyste se dozvěděli více a zobrazili si soubory ke stažení pro další platformy</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||||
<string name="revanced_change_form_factor_title">Rozvržení formuláře</string>
|
<string name="revanced_change_form_factor_title">Rozvržení formuláře</string>
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_settings_import_reset">ReVanced-indstillinger nulstillet til standard</string>
|
<string name="revanced_settings_import_reset">ReVanced-indstillinger nulstillet til standard</string>
|
||||||
<string name="revanced_settings_import_success">%d indstillinger importeret</string>
|
<string name="revanced_settings_import_success">%d indstillinger importeret</string>
|
||||||
<string name="revanced_settings_import_failure_parse">Import mislykkedes: %s</string>
|
<string name="revanced_settings_import_failure_parse">Import mislykkedes: %s</string>
|
||||||
|
<string name="revanced_settings_search_hint">Søg i indstillinger</string>
|
||||||
|
<string name="revanced_settings_search_no_results_title">Ingen resultater fundet for \'%s\'</string>
|
||||||
|
<string name="revanced_settings_search_no_results_summary">Prøv et andet søgeord</string>
|
||||||
|
<string name="revanced_settings_search_remove_message">Fjern fra søgehistorik?</string>
|
||||||
<string name="revanced_show_menu_icons_title">Vis ReVanced-indstillingsikoner</string>
|
<string name="revanced_show_menu_icons_title">Vis ReVanced-indstillingsikoner</string>
|
||||||
<string name="revanced_show_menu_icons_summary_on">Indstillingsikoner vises</string>
|
<string name="revanced_show_menu_icons_summary_on">Indstillingsikoner vises</string>
|
||||||
<string name="revanced_show_menu_icons_summary_off">Indstillingsikoner vises ikke</string>
|
<string name="revanced_show_menu_icons_summary_off">Indstillingsikoner vises ikke</string>
|
||||||
@@ -93,6 +97,9 @@ Tap på knappen Fortsæt, og tillad optimeringsændringer."</string>
|
|||||||
<string name="revanced_restore_old_settings_menus_title">Gendan gamle indstillingsmenuer</string>
|
<string name="revanced_restore_old_settings_menus_title">Gendan gamle indstillingsmenuer</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_on">Gamle indstillingsmenuer er vist</string>
|
<string name="revanced_restore_old_settings_menus_summary_on">Gamle indstillingsmenuer er vist</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_off">Gamle indstillingsmenuer er ikke vist</string>
|
<string name="revanced_restore_old_settings_menus_summary_off">Gamle indstillingsmenuer er ikke vist</string>
|
||||||
|
<string name="revanced_settings_search_history_title">Vis indstillingssøgehistorik</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_on">Indstillingssøgehistorik vises</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_off">Søgehistorik for indstillinger vises ikke</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||||
<string name="revanced_shorts_disable_background_playback_title">Deaktiver baggrundsafspilning af Shorts</string>
|
<string name="revanced_shorts_disable_background_playback_title">Deaktiver baggrundsafspilning af Shorts</string>
|
||||||
@@ -151,7 +158,10 @@ Du modtager ikke notifikationer om uventede hændelser."</string>
|
|||||||
<string name="revanced_hide_notify_me_button_title">Skjul knappen \'Underret mig\'</string>
|
<string name="revanced_hide_notify_me_button_title">Skjul knappen \'Underret mig\'</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">Knappen er skjult</string>
|
<string name="revanced_hide_notify_me_button_summary_on">Knappen er skjult</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">Knappen er vist</string>
|
<string name="revanced_hide_notify_me_button_summary_off">Knappen er vist</string>
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
|
<string name="revanced_hide_search_result_recommendation_labels_title">Skjul etiketter for videoanbefalinger</string>
|
||||||
|
<string name="revanced_hide_search_result_recommendation_labels_summary_on">Etiketterne \"Folk så også\" og \"Du kan måske også lide\" er skjulte</string>
|
||||||
|
<string name="revanced_hide_search_result_recommendation_labels_summary_off">Etiketterne \"Folk så også\" og \"Du kan måske også lide\" vises</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">Skjul knappen \'Vis mere\'</string>
|
<string name="revanced_hide_show_more_button_title">Skjul knappen \'Vis mere\'</string>
|
||||||
@@ -223,6 +233,9 @@ Du modtager ikke notifikationer om uventede hændelser."</string>
|
|||||||
<string name="revanced_hide_ai_generated_video_summary_section_title">Skjul \"AI-genereret videooversigt\"</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_title">Skjul \"AI-genereret videooversigt\"</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Videooversigtssektionen er skjult</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Videooversigtssektionen er skjult</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Videooversigtssektionen vises</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Videooversigtssektionen vises</string>
|
||||||
|
<string name="revanced_hide_ask_section_title">Skjul Spørg</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_on">Spørgsmål sektionen er skjult</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_off">Spørgsmål sektionen vises</string>
|
||||||
<string name="revanced_hide_chapters_section_summary_on">Kapitler sektion er skjult</string>
|
<string name="revanced_hide_chapters_section_summary_on">Kapitler sektion er skjult</string>
|
||||||
<string name="revanced_hide_chapters_section_summary_off">Kapitel afsnit er vist</string>
|
<string name="revanced_hide_chapters_section_summary_off">Kapitel afsnit er vist</string>
|
||||||
<string name="revanced_hide_info_cards_section_summary_on">Info-kort sektion er skjult</string>
|
<string name="revanced_hide_info_cards_section_summary_on">Info-kort sektion er skjult</string>
|
||||||
@@ -757,6 +770,11 @@ Automatisk afspilning kan ændres i YouTube-indstillinger:
|
|||||||
Indstillinger → Afspilning → Afspil næste video automatisk"</string>
|
Indstillinger → Afspilning → Afspil næste video automatisk"</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_off">Foreslået video på slutskærmen vises</string>
|
<string name="revanced_end_screen_suggested_video_summary_off">Foreslået video på slutskærmen vises</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
<string name="revanced_hide_related_video_overlay_title">Skjul relateret video-overlay i fuldskærm</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_on">Relateret video-overlay er skjult</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_off">Relateret video-overlay vises</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">Skjul tidsstempel på video</string>
|
<string name="revanced_hide_timestamp_title">Skjul tidsstempel på video</string>
|
||||||
<string name="revanced_hide_timestamp_summary_on">Tidsstempel er skjult</string>
|
<string name="revanced_hide_timestamp_summary_on">Tidsstempel er skjult</string>
|
||||||
@@ -793,8 +811,8 @@ Indstillinger → Afspilning → Afspil næste video automatisk"</string>
|
|||||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Genindlæs video for at stemme ved hjælp af Return YouTube Dislike</string>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Genindlæs video for at stemme ved hjælp af Return YouTube Dislike</string>
|
||||||
<!-- Video likes have been set to hidden by the video uploader. -->
|
<!-- Video likes have been set to hidden by the video uploader. -->
|
||||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Skjult af ejer</string>
|
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Skjult af ejer</string>
|
||||||
<string name="revanced_ryd_enable_summary_on">Dislikationer vises</string>
|
<string name="revanced_ryd_enabled_summary_on">Dislikationer vises</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">Dislikationer vises ikke</string>
|
<string name="revanced_ryd_enabled_summary_off">Dislikationer vises ikke</string>
|
||||||
<string name="revanced_ryd_shorts_title">Vis ikke på Shorts</string>
|
<string name="revanced_ryd_shorts_title">Vis ikke på Shorts</string>
|
||||||
<string name="revanced_ryd_dislike_percentage_title">Synes ikke som procent</string>
|
<string name="revanced_ryd_dislike_percentage_title">Synes ikke som procent</string>
|
||||||
<!-- Translations should use language similar to 'revanced_sb_enable_compact_skip_button' -->
|
<!-- Translations should use language similar to 'revanced_sb_enable_compact_skip_button' -->
|
||||||
@@ -807,7 +825,6 @@ Indstillinger → Afspilning → Afspil næste video automatisk"</string>
|
|||||||
<string name="revanced_ryd_toast_on_connection_error_title">Vis en toast hvis API ikke er tilgængelig</string>
|
<string name="revanced_ryd_toast_on_connection_error_title">Vis en toast hvis API ikke er tilgængelig</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">Toast vises, hvis Return YouTube Dislike ikke er tilgængelig</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_on">Toast vises, hvis Return YouTube Dislike ikke er tilgængelig</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">Toast vises ikke, hvis Return YouTube Dislike ikke er tilgængelig</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_off">Toast vises ikke, hvis Return YouTube Dislike ikke er tilgængelig</string>
|
||||||
<string name="revanced_ryd_about">Om</string>
|
|
||||||
<string name="revanced_ryd_attribution_summary">Data leveres af Return YouTube Dislike API. Tryk her for at få mere at vide</string>
|
<string name="revanced_ryd_attribution_summary">Data leveres af Return YouTube Dislike API. Tryk her for at få mere at vide</string>
|
||||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||||
<string name="revanced_ryd_statistics_category_title">ReturnYouTubeDislike API statistikker for denne enhed</string>
|
<string name="revanced_ryd_statistics_category_title">ReturnYouTubeDislike API statistikker for denne enhed</string>
|
||||||
@@ -1005,7 +1022,7 @@ Er du klar til at indsende?"</string>
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_title">Rediger timing af segment manuelt</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_title">Rediger timing af segment manuelt</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_content">Vil du redigere timingen for start eller afslutning af segmentet?</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_content">Vil du redigere timingen for start eller afslutning af segmentet?</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Ugyldig tid givet</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Ugyldig tid givet</string>
|
||||||
<string name="revanced_sb_stats">Statistik</string>
|
<string name="revanced_sb_stats_title">Statistik</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||||
<string name="revanced_sb_stats_loading">Indlæser...</string>
|
<string name="revanced_sb_stats_loading">Indlæser...</string>
|
||||||
<string name="revanced_sb_stats_sb_disabled">SponsorBloker er deaktiveret</string>
|
<string name="revanced_sb_stats_sb_disabled">SponsorBloker er deaktiveret</string>
|
||||||
@@ -1033,8 +1050,8 @@ Er du klar til at indsende?"</string>
|
|||||||
<string name="revanced_sb_color_invalid">Ugyldig farvekode</string>
|
<string name="revanced_sb_color_invalid">Ugyldig farvekode</string>
|
||||||
<string name="revanced_sb_reset_color">Nulstil farve</string>
|
<string name="revanced_sb_reset_color">Nulstil farve</string>
|
||||||
<string name="revanced_sb_reset">Nulstil</string>
|
<string name="revanced_sb_reset">Nulstil</string>
|
||||||
<string name="revanced_sb_about">Om</string>
|
<string name="revanced_sb_about_title">Om</string>
|
||||||
<string name="revanced_sb_about_api_sum">Data leveres af SponsorBlock API. Tryk her for at få flere oplysninger og se downloads til andre platforme</string>
|
<string name="revanced_sb_about_api_summary">Data leveres af SponsorBlock API. Tryk her for at få flere oplysninger og se downloads til andre platforme</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||||
<string name="revanced_change_form_factor_title">Layout-formfaktor</string>
|
<string name="revanced_change_form_factor_title">Layout-formfaktor</string>
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_settings_import_reset">ReVanced-Einstellungen auf Standardwerte zurückgesetzt</string>
|
<string name="revanced_settings_import_reset">ReVanced-Einstellungen auf Standardwerte zurückgesetzt</string>
|
||||||
<string name="revanced_settings_import_success">%d Einstellungen importiert</string>
|
<string name="revanced_settings_import_success">%d Einstellungen importiert</string>
|
||||||
<string name="revanced_settings_import_failure_parse">Import fehlgeschlagen: %s</string>
|
<string name="revanced_settings_import_failure_parse">Import fehlgeschlagen: %s</string>
|
||||||
|
<string name="revanced_settings_search_hint">Sucheinstellungen</string>
|
||||||
|
<string name="revanced_settings_search_no_results_title">Keine Ergebnisse für „%s“ gefunden</string>
|
||||||
|
<string name="revanced_settings_search_no_results_summary">Versuchen Sie ein anderes Schlüsselwort</string>
|
||||||
|
<string name="revanced_settings_search_remove_message">Aus Suchverlauf entfernen?</string>
|
||||||
<string name="revanced_show_menu_icons_title">ReVanced-Einstellungssymbole anzeigen</string>
|
<string name="revanced_show_menu_icons_title">ReVanced-Einstellungssymbole anzeigen</string>
|
||||||
<string name="revanced_show_menu_icons_summary_on">Einstellungssymbole werden angezeigt</string>
|
<string name="revanced_show_menu_icons_summary_on">Einstellungssymbole werden angezeigt</string>
|
||||||
<string name="revanced_show_menu_icons_summary_off">Einstellungssymbole werden nicht angezeigt</string>
|
<string name="revanced_show_menu_icons_summary_off">Einstellungssymbole werden nicht angezeigt</string>
|
||||||
@@ -89,6 +93,9 @@ Tippen Sie auf die Schaltfläche \"Fortfahren\" und erlauben Sie die Optimierung
|
|||||||
<string name="revanced_restore_old_settings_menus_title">Alte Einstellungsmenüs wiederherstellen</string>
|
<string name="revanced_restore_old_settings_menus_title">Alte Einstellungsmenüs wiederherstellen</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_on">Alte Einstellungsmenüs werden angezeigt</string>
|
<string name="revanced_restore_old_settings_menus_summary_on">Alte Einstellungsmenüs werden angezeigt</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_off">Alte Einstellungsmenüs werden nicht angezeigt</string>
|
<string name="revanced_restore_old_settings_menus_summary_off">Alte Einstellungsmenüs werden nicht angezeigt</string>
|
||||||
|
<string name="revanced_settings_search_history_title">Suchverlauf der Einstellungen anzeigen</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_on">Suchverlauf der Einstellungen wird angezeigt</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_off">Der Suchverlauf der Einstellungen wird nicht angezeigt</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||||
<string name="revanced_shorts_disable_background_playback_title">Shorts-Hintergrundwiedergabe deaktivieren</string>
|
<string name="revanced_shorts_disable_background_playback_title">Shorts-Hintergrundwiedergabe deaktivieren</string>
|
||||||
@@ -149,10 +156,10 @@ Sie werden nicht über unerwartete Ereignisse informiert."</string>
|
|||||||
<string name="revanced_hide_notify_me_button_title">\'Benachrichtigungen\' Button ausblenden</string>
|
<string name="revanced_hide_notify_me_button_title">\'Benachrichtigungen\' Button ausblenden</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">Button ist ausgeblendet</string>
|
<string name="revanced_hide_notify_me_button_summary_on">Button ist ausgeblendet</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">Button wird angezeigt</string>
|
<string name="revanced_hide_notify_me_button_summary_off">Button wird angezeigt</string>
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">\'Leute haben auch angeschaut\'-Label ausblenden</string>
|
<string name="revanced_hide_search_result_recommendation_labels_title">Videovorschlag-Labels ausblenden</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_on">Label ist ausgeblendet</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_on">Die Labels „Nutzer haben sich auch angesehen“ und „Ihnen könnte auch gefallen“ sind ausgeblendet</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">Label wird angezeigt</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_off">Die Labels „Nutzer haben sich auch angesehen“ und „Ihnen könnte auch gefallen“ werden angezeigt</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">\'Mehr anzeigen\' Button ausblenden</string>
|
<string name="revanced_hide_show_more_button_title">\'Mehr anzeigen\' Button ausblenden</string>
|
||||||
@@ -227,6 +234,9 @@ Sie werden nicht über unerwartete Ereignisse informiert."</string>
|
|||||||
<string name="revanced_hide_ai_generated_video_summary_section_title">\'KI-generierte Videozusammenfassung\' ausblenden</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_title">\'KI-generierte Videozusammenfassung\' ausblenden</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Videozusammenfassungsbereich ist ausgeblendet</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Videozusammenfassungsbereich ist ausgeblendet</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Videozusammenfassungsbereich wird angezeigt</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Videozusammenfassungsbereich wird angezeigt</string>
|
||||||
|
<string name="revanced_hide_ask_section_title">Ask ausblenden</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_on">Ask Abschnitt ist ausgeblendet</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_off">Ask Abschnitt wird angezeigt</string>
|
||||||
<string name="revanced_hide_attributes_section_title">Attribute ausblenden</string>
|
<string name="revanced_hide_attributes_section_title">Attribute ausblenden</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_on">Empfohlene Orte, Spiele, Musik und Erwähnungen von Personen sind ausgeblendet</string>
|
<string name="revanced_hide_attributes_section_summary_on">Empfohlene Orte, Spiele, Musik und Erwähnungen von Personen sind ausgeblendet</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">Empfohlene Orte, Spiele, Musik und Erwähnungen von Personen werden angezeigt</string>
|
<string name="revanced_hide_attributes_section_summary_off">Empfohlene Orte, Spiele, Musik und Erwähnungen von Personen werden angezeigt</string>
|
||||||
@@ -787,6 +797,11 @@ Die automatische Wiedergabe kann in den YouTube-Einstellungen geändert werden:
|
|||||||
Einstellungen → Wiedergabe → Nächstes Video automatisch abspielen"</string>
|
Einstellungen → Wiedergabe → Nächstes Video automatisch abspielen"</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_off">Das vorgeschlagene Video auf dem Endbildschirm wird angezeigt</string>
|
<string name="revanced_end_screen_suggested_video_summary_off">Das vorgeschlagene Video auf dem Endbildschirm wird angezeigt</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
<string name="revanced_hide_related_video_overlay_title">Zugehöriges Video-Overlay im Vollbildmodus ausblenden</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_on">Zugehöriges Video-Overlay ist ausgeblendet</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_off">Zugehöriges Video-Overlay wird angezeigt</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">Verstecke Video-Zeitstempel</string>
|
<string name="revanced_hide_timestamp_title">Verstecke Video-Zeitstempel</string>
|
||||||
<string name="revanced_hide_timestamp_summary_on">Zeitstempel ist ausgeblendet</string>
|
<string name="revanced_hide_timestamp_summary_on">Zeitstempel ist ausgeblendet</string>
|
||||||
@@ -824,10 +839,10 @@ Einstellungen → Wiedergabe → Nächstes Video automatisch abspielen"</string>
|
|||||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Video neu laden, um mit Return YouTube Dislike abzustimmen</string>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Video neu laden, um mit Return YouTube Dislike abzustimmen</string>
|
||||||
<!-- Video likes have been set to hidden by the video uploader. -->
|
<!-- Video likes have been set to hidden by the video uploader. -->
|
||||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Vom Eigentümer verborgen</string>
|
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Vom Eigentümer verborgen</string>
|
||||||
<string name="revanced_ryd_enable_summary_on">Dislikes werden angezeigt</string>
|
<string name="revanced_ryd_enabled_summary_on">Dislikes werden angezeigt</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">Dislikes werden nicht angezeigt</string>
|
<string name="revanced_ryd_enabled_summary_off">Dislikes werden nicht angezeigt</string>
|
||||||
<string name="revanced_ryd_shorts_title">Dislikes auf Shorts anzeigen</string>
|
<string name="revanced_ryd_shorts_title">Dislikes auf Shorts anzeigen</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Dislikes für Shorts werden angezeigt
|
<string name="revanced_ryd_shorts_summary_on">"Dislikes für Shorts werden angezeigt
|
||||||
|
|
||||||
Einschränkung: Dislikes werden möglicherweise nicht im Inkognito-Modus angezeigt"</string>
|
Einschränkung: Dislikes werden möglicherweise nicht im Inkognito-Modus angezeigt"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">Dislikes für Shorts werden nicht angezeigt</string>
|
<string name="revanced_ryd_shorts_summary_off">Dislikes für Shorts werden nicht angezeigt</string>
|
||||||
@@ -844,7 +859,6 @@ Einschränkung: Dislikes werden möglicherweise nicht im Inkognito-Modus angezei
|
|||||||
<string name="revanced_ryd_toast_on_connection_error_title">Einen Toast anzeigen, wenn die API nicht verfügbar ist</string>
|
<string name="revanced_ryd_toast_on_connection_error_title">Einen Toast anzeigen, wenn die API nicht verfügbar ist</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">Toast wird angezeigt, wenn YouTube-Ablehnung nicht verfügbar ist</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_on">Toast wird angezeigt, wenn YouTube-Ablehnung nicht verfügbar ist</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">Toast wird nicht angezeigt, wenn YouTube-Dislike nicht verfügbar ist</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_off">Toast wird nicht angezeigt, wenn YouTube-Dislike nicht verfügbar ist</string>
|
||||||
<string name="revanced_ryd_about">Über</string>
|
|
||||||
<string name="revanced_ryd_attribution_summary">Daten werden von der YouTube Dislike API zurückgegeben. Tippe hier, um mehr zu erfahren</string>
|
<string name="revanced_ryd_attribution_summary">Daten werden von der YouTube Dislike API zurückgegeben. Tippe hier, um mehr zu erfahren</string>
|
||||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||||
<string name="revanced_ryd_statistics_category_title">Gibt die API-Statistiken dieses Geräts zurück</string>
|
<string name="revanced_ryd_statistics_category_title">Gibt die API-Statistiken dieses Geräts zurück</string>
|
||||||
@@ -1051,7 +1065,7 @@ Bereit zum Einreichen?"</string>
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_title">Timing des Segments manuell bearbeiten</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_title">Timing des Segments manuell bearbeiten</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_content">Möchtest du den Zeitpunkt für den Anfang oder das Ende des Segments bearbeiten?</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_content">Möchtest du den Zeitpunkt für den Anfang oder das Ende des Segments bearbeiten?</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Ungültige Zeit angegeben</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Ungültige Zeit angegeben</string>
|
||||||
<string name="revanced_sb_stats">Statistiken</string>
|
<string name="revanced_sb_stats_title">Statistiken</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||||
<string name="revanced_sb_stats_connection_failure">Statistiken sind vorübergehend nicht verfügbar (API ist ausgefallen)</string>
|
<string name="revanced_sb_stats_connection_failure">Statistiken sind vorübergehend nicht verfügbar (API ist ausgefallen)</string>
|
||||||
<string name="revanced_sb_stats_loading">Lädt...</string>
|
<string name="revanced_sb_stats_loading">Lädt...</string>
|
||||||
@@ -1080,8 +1094,8 @@ Bereit zum Einreichen?"</string>
|
|||||||
<string name="revanced_sb_color_invalid">Ungültiger Farbcode</string>
|
<string name="revanced_sb_color_invalid">Ungültiger Farbcode</string>
|
||||||
<string name="revanced_sb_reset_color">Farbe zurücksetzen</string>
|
<string name="revanced_sb_reset_color">Farbe zurücksetzen</string>
|
||||||
<string name="revanced_sb_reset">Zurücksetzen</string>
|
<string name="revanced_sb_reset">Zurücksetzen</string>
|
||||||
<string name="revanced_sb_about">Über</string>
|
<string name="revanced_sb_about_title">Über</string>
|
||||||
<string name="revanced_sb_about_api_sum">Daten werden von der SponsorBlock API bereitgestellt. Tippe hier, um mehr zu erfahren und Downloads für andere Plattformen zu sehen</string>
|
<string name="revanced_sb_about_api_summary">Daten werden von der SponsorBlock API bereitgestellt. Tippe hier, um mehr zu erfahren und Downloads für andere Plattformen zu sehen</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||||
<string name="revanced_change_form_factor_title">Anordnungsformfactor</string>
|
<string name="revanced_change_form_factor_title">Anordnungsformfactor</string>
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_settings_import_reset">Επαναφέρθηκαν οι προεπιλεγμένες ρυθμίσεις ReVanced</string>
|
<string name="revanced_settings_import_reset">Επαναφέρθηκαν οι προεπιλεγμένες ρυθμίσεις ReVanced</string>
|
||||||
<string name="revanced_settings_import_success">Έγινε εισαγωγή %d ρυθμίσεων</string>
|
<string name="revanced_settings_import_success">Έγινε εισαγωγή %d ρυθμίσεων</string>
|
||||||
<string name="revanced_settings_import_failure_parse">Η εισαγωγή απέτυχε: %s</string>
|
<string name="revanced_settings_import_failure_parse">Η εισαγωγή απέτυχε: %s</string>
|
||||||
|
<string name="revanced_settings_search_hint">Ρυθμίσεις αναζήτησης</string>
|
||||||
|
<string name="revanced_settings_search_no_results_title">Δεν βρέθηκαν αποτελέσματα για το %s\'</string>
|
||||||
|
<string name="revanced_settings_search_no_results_summary">Δοκιμάστε μια άλλη λέξη-κλειδί</string>
|
||||||
|
<string name="revanced_settings_search_remove_message">Να καταργηθεί από το ιστορικό αναζήτησης;</string>
|
||||||
<string name="revanced_show_menu_icons_title">Εμφάνιση εικονιδίων στις ρυθμίσεις ReVanced</string>
|
<string name="revanced_show_menu_icons_title">Εμφάνιση εικονιδίων στις ρυθμίσεις ReVanced</string>
|
||||||
<string name="revanced_show_menu_icons_summary_on">Τα εικονίδια ρυθμίσεων εμφανίζονται</string>
|
<string name="revanced_show_menu_icons_summary_on">Τα εικονίδια ρυθμίσεων εμφανίζονται</string>
|
||||||
<string name="revanced_show_menu_icons_summary_off">Τα εικονίδια ρυθμίσεων δεν εμφανίζονται</string>
|
<string name="revanced_show_menu_icons_summary_off">Τα εικονίδια ρυθμίσεων δεν εμφανίζονται</string>
|
||||||
@@ -93,6 +97,9 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_restore_old_settings_menus_title">Επαναφορά παλιών μενού ρυθμίσεων</string>
|
<string name="revanced_restore_old_settings_menus_title">Επαναφορά παλιών μενού ρυθμίσεων</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_on">Τα παλιά μενού ρυθμίσεων εμφανίζονται</string>
|
<string name="revanced_restore_old_settings_menus_summary_on">Τα παλιά μενού ρυθμίσεων εμφανίζονται</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_off">Τα νέα μενού ρυθμίσεων εμφανίζονται</string>
|
<string name="revanced_restore_old_settings_menus_summary_off">Τα νέα μενού ρυθμίσεων εμφανίζονται</string>
|
||||||
|
<string name="revanced_settings_search_history_title">Εμφάνιση ιστορικού αναζήτησης ρυθμίσεων</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_on">Εμφανίζεται το ιστορικό αναζήτησης ρυθμίσεων</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_off">Το ιστορικό αναζήτησης ρυθμίσεων δεν εμφανίζεται</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||||
<string name="revanced_shorts_disable_background_playback_title">Απενεργοποίηση αναπαραγωγής παρασκηνίου για τα Shorts</string>
|
<string name="revanced_shorts_disable_background_playback_title">Απενεργοποίηση αναπαραγωγής παρασκηνίου για τα Shorts</string>
|
||||||
@@ -155,10 +162,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_hide_notify_me_button_title">Κουμπί «Να λαμβάνω ειδοποιήσεις»</string>
|
<string name="revanced_hide_notify_me_button_title">Κουμπί «Να λαμβάνω ειδοποιήσεις»</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">Κρυμμένο</string>
|
<string name="revanced_hide_notify_me_button_summary_on">Κρυμμένο</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">Εμφανίζεται</string>
|
<string name="revanced_hide_notify_me_button_summary_off">Εμφανίζεται</string>
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">Ετικέτα «Άλλοι χρήστες παρακολούθησαν επίσης»</string>
|
<string name="revanced_hide_search_result_recommendation_labels_title">Απόκρυψη ετικετών προτάσεων βίντεο</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_on">Κρυμμένη</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_on">Οι ετικέτες \"Άλλοι χρήστες παρακολούθησαν επίσης\" και \"Ενδέχεται επίσης να σας αρέσει\" είναι κρυφές</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">Εμφανίζεται</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_off">Οι ετικέτες \"Άλλοι χρήστες παρακολούθησαν επίσης\" και \"Ενδέχεται επίσης να σας αρέσει\" εμφανίζονται</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">Κουμπί «Εμφάνιση περισσότερων»</string>
|
<string name="revanced_hide_show_more_button_title">Κουμπί «Εμφάνιση περισσότερων»</string>
|
||||||
@@ -233,6 +240,9 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_hide_ai_generated_video_summary_section_title">Σύνοψη βίντεο που δημιουργήθηκε από AI</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_title">Σύνοψη βίντεο που δημιουργήθηκε από AI</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Κρυμμένη</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Κρυμμένη</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Εμφανίζεται</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Εμφανίζεται</string>
|
||||||
|
<string name="revanced_hide_ask_section_title">Κουμπί «Ερώτηση»</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_on">Η ενότητα \"Ρωτήστε\" είναι κρυφή</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_off">Η ενότητα \"Ρωτήστε\" εμφανίζεται</string>
|
||||||
<string name="revanced_hide_attributes_section_title">Ενότητα ιδιοτήτων</string>
|
<string name="revanced_hide_attributes_section_title">Ενότητα ιδιοτήτων</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_on">Κρυμμένη.\n\nΑφορά τις ιδιότητες: Επιλεγμένα μέρη, Παιχνίδια, Μουσική, και «Οι χρήστες ανέφεραν»</string>
|
<string name="revanced_hide_attributes_section_summary_on">Κρυμμένη.\n\nΑφορά τις ιδιότητες: Επιλεγμένα μέρη, Παιχνίδια, Μουσική, και «Οι χρήστες ανέφεραν»</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">Εμφανίζεται.\n\nΑφορά τις ιδιότητες: Επιλεγμένα μέρη, Παιχνίδια, Μουσική, και «Οι χρήστες ανέφεραν»</string>
|
<string name="revanced_hide_attributes_section_summary_off">Εμφανίζεται.\n\nΑφορά τις ιδιότητες: Επιλεγμένα μέρη, Παιχνίδια, Μουσική, και «Οι χρήστες ανέφεραν»</string>
|
||||||
@@ -796,6 +806,11 @@ Second \"item\" text"</string>
|
|||||||
Ρυθμίσεις → Αναπαραγωγή→ Αυτόματη αναπαραγωγή επόμενου βίντεο"</string>
|
Ρυθμίσεις → Αναπαραγωγή→ Αυτόματη αναπαραγωγή επόμενου βίντεο"</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_off">Εμφανίζεται</string>
|
<string name="revanced_end_screen_suggested_video_summary_off">Εμφανίζεται</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
<string name="revanced_hide_related_video_overlay_title">Απόκρυψη επικάλυψης σχετικού βίντεο σε πλήρη οθόνη</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_on">Η επικάλυψη σχετικού βίντεο είναι κρυφή</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_off">Εμφανίζεται η επικάλυψη σχετικού βίντεο</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">Χρονική πρόοδος βίντεο</string>
|
<string name="revanced_hide_timestamp_title">Χρονική πρόοδος βίντεο</string>
|
||||||
<string name="revanced_hide_timestamp_summary_on">Κρυμμένη</string>
|
<string name="revanced_hide_timestamp_summary_on">Κρυμμένη</string>
|
||||||
@@ -833,10 +848,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Επαναφορτώστε το βίντεο για να ψηφίσετε χρησιμοποιώντας το Return YouTube Dislike</string>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Επαναφορτώστε το βίντεο για να ψηφίσετε χρησιμοποιώντας το Return YouTube Dislike</string>
|
||||||
<!-- Video likes have been set to hidden by the video uploader. -->
|
<!-- Video likes have been set to hidden by the video uploader. -->
|
||||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Κρυμμένα από τον ιδιοκτήτη</string>
|
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Κρυμμένα από τον ιδιοκτήτη</string>
|
||||||
<string name="revanced_ryd_enable_summary_on">Τα «Δεν μου αρέσει» εμφανίζονται</string>
|
<string name="revanced_ryd_enabled_summary_on">Τα «Δεν μου αρέσει» εμφανίζονται</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">Τα «Δεν μου αρέσει» δεν εμφανίζονται</string>
|
<string name="revanced_ryd_enabled_summary_off">Τα «Δεν μου αρέσει» δεν εμφανίζονται</string>
|
||||||
<string name="revanced_ryd_shorts_title">Εμφάνιση στα Shorts</string>
|
<string name="revanced_ryd_shorts_title">Εμφάνιση στα Shorts</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Τα «Δεν μου αρέσει» εμφανίζονται στα Shorts
|
<string name="revanced_ryd_shorts_summary_on">"Τα «Δεν μου αρέσει» εμφανίζονται στα Shorts
|
||||||
|
|
||||||
Περιορισμός: Ενδέχεται να μην εμφανίζονται σε ανώνυμη λειτουργία"</string>
|
Περιορισμός: Ενδέχεται να μην εμφανίζονται σε ανώνυμη λειτουργία"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">Τα «Δεν μου αρέσει» δεν εμφανίζονται στα Shorts</string>
|
<string name="revanced_ryd_shorts_summary_off">Τα «Δεν μου αρέσει» δεν εμφανίζονται στα Shorts</string>
|
||||||
@@ -851,9 +866,8 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_ryd_estimated_like_summary_on">Τα βίντεο με απενεργοποιημένα «Μου αρέσει» εμφανίζουν έναν εκτιμώμενο αριθμό «Μου αρέσει»</string>
|
<string name="revanced_ryd_estimated_like_summary_on">Τα βίντεο με απενεργοποιημένα «Μου αρέσει» εμφανίζουν έναν εκτιμώμενο αριθμό «Μου αρέσει»</string>
|
||||||
<string name="revanced_ryd_estimated_like_summary_off">Τα εκτιμώμενα «Μου αρέσει» δεν εμφανίζονται</string>
|
<string name="revanced_ryd_estimated_like_summary_off">Τα εκτιμώμενα «Μου αρέσει» δεν εμφανίζονται</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_title">Εμφάνιση μηνύματος αν το API δεν είναι διαθέσιμο</string>
|
<string name="revanced_ryd_toast_on_connection_error_title">Εμφάνιση μηνύματος αν το API δεν είναι διαθέσιμο</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">Να εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης αν το Return YouTube Dislike δεν είναι διαθέσιμο</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_on">Εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης αν το Return YouTube Dislike δεν είναι διαθέσιμο</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">Να μην εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης αν το Return YouTube Dislike δεν είναι διαθέσιμο</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_off">Δεν εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης αν το Return YouTube Dislike δεν είναι διαθέσιμο</string>
|
||||||
<string name="revanced_ryd_about">Σχετικά με</string>
|
|
||||||
<string name="revanced_ryd_attribution_summary">Τα δεδομένα Dislike παρέχονται από το API του Return YouTube Dislike. Πατήστε εδώ για να μάθετε περισσότερα</string>
|
<string name="revanced_ryd_attribution_summary">Τα δεδομένα Dislike παρέχονται από το API του Return YouTube Dislike. Πατήστε εδώ για να μάθετε περισσότερα</string>
|
||||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||||
<string name="revanced_ryd_statistics_category_title">Στατιστικά ReturnYouTubeDislike API αυτής της συσκευής</string>
|
<string name="revanced_ryd_statistics_category_title">Στατιστικά ReturnYouTubeDislike API αυτής της συσκευής</string>
|
||||||
@@ -911,8 +925,8 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Το κουμπί παράλειψης κρύβεται μετά από μερικά δευτερόλεπτα</string>
|
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Το κουμπί παράλειψης κρύβεται μετά από μερικά δευτερόλεπτα</string>
|
||||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Το κουμπί παράλειψης εμφανίζεται σε όλο το τμήμα</string>
|
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Το κουμπί παράλειψης εμφανίζεται σε όλο το τμήμα</string>
|
||||||
<string name="revanced_sb_general_skiptoast">Εμφάνιση μηνύματος κατά την παράλειψη</string>
|
<string name="revanced_sb_general_skiptoast">Εμφάνιση μηνύματος κατά την παράλειψη</string>
|
||||||
<string name="revanced_sb_general_skiptoast_sum_on">Να εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης όταν ένα τμήμα παραλείπεται αυτόματα. Πατήστε για να δείτε ένα παράδειγμα</string>
|
<string name="revanced_sb_general_skiptoast_sum_on">Εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης όταν ένα τμήμα παραλείπεται αυτόματα. Πατήστε για να δείτε ένα παράδειγμα</string>
|
||||||
<string name="revanced_sb_general_skiptoast_sum_off">Να μην εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης. Πατήστε για να δείτε ένα παράδειγμα</string>
|
<string name="revanced_sb_general_skiptoast_sum_off">Δεν εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης. Πατήστε για να δείτε ένα παράδειγμα</string>
|
||||||
<string name="revanced_sb_general_time_without">Εμφάνιση μήκους βίντεο χωρίς τα τμήματα</string>
|
<string name="revanced_sb_general_time_without">Εμφάνιση μήκους βίντεο χωρίς τα τμήματα</string>
|
||||||
<string name="revanced_sb_general_time_without_sum_on">Εμφανίζεται το μήκος βίντεο μείον όλα τα τμήματα, σε παρένθεση δίπλα στο πλήρες μήκος βίντεο</string>
|
<string name="revanced_sb_general_time_without_sum_on">Εμφανίζεται το μήκος βίντεο μείον όλα τα τμήματα, σε παρένθεση δίπλα στο πλήρες μήκος βίντεο</string>
|
||||||
<string name="revanced_sb_general_time_without_sum_off">Εμφανίζεται το πλήρες μήκος του βίντεο</string>
|
<string name="revanced_sb_general_time_without_sum_off">Εμφανίζεται το πλήρες μήκος του βίντεο</string>
|
||||||
@@ -931,8 +945,8 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_sb_guidelines_popup_open">Δείξτε μου</string>
|
<string name="revanced_sb_guidelines_popup_open">Δείξτε μου</string>
|
||||||
<string name="revanced_sb_general">Γενικά</string>
|
<string name="revanced_sb_general">Γενικά</string>
|
||||||
<string name="revanced_sb_toast_on_connection_error_title">Εμφάνιση μηνύματος αν το API δεν είναι διαθέσιμο</string>
|
<string name="revanced_sb_toast_on_connection_error_title">Εμφάνιση μηνύματος αν το API δεν είναι διαθέσιμο</string>
|
||||||
<string name="revanced_sb_toast_on_connection_error_summary_on">Να εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης αν το SponsorBlock δεν είναι διαθέσιμο</string>
|
<string name="revanced_sb_toast_on_connection_error_summary_on">Εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης αν το SponsorBlock δεν είναι διαθέσιμο</string>
|
||||||
<string name="revanced_sb_toast_on_connection_error_summary_off">Να μην εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης αν το SponsorBlock δεν είναι διαθέσιμο</string>
|
<string name="revanced_sb_toast_on_connection_error_summary_off">Δεν εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης αν το SponsorBlock δεν είναι διαθέσιμο</string>
|
||||||
<string name="revanced_sb_general_skipcount">Mετρητής παραλείψεων τμημάτων</string>
|
<string name="revanced_sb_general_skipcount">Mετρητής παραλείψεων τμημάτων</string>
|
||||||
<string name="revanced_sb_general_skipcount_sum_on">Επιτρέπει στον πίνακα κατάταξης SponsorBlock να γνωρίζει πόσος χρόνος εξοικονομήθηκε. Αποστέλλεται ένα μήνυμα στον πίνακα κατάταξης κάθε φορά που παραλείπεται ένα τμήμα</string>
|
<string name="revanced_sb_general_skipcount_sum_on">Επιτρέπει στον πίνακα κατάταξης SponsorBlock να γνωρίζει πόσος χρόνος εξοικονομήθηκε. Αποστέλλεται ένα μήνυμα στον πίνακα κατάταξης κάθε φορά που παραλείπεται ένα τμήμα</string>
|
||||||
<string name="revanced_sb_general_skipcount_sum_off">Ο μετρητής παραλείψεων δεν είναι ενεργός</string>
|
<string name="revanced_sb_general_skipcount_sum_off">Ο μετρητής παραλείψεων δεν είναι ενεργός</string>
|
||||||
@@ -1059,7 +1073,7 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_title">Επεξεργασία χρονισμού του τμήματος χειροκίνητα</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_title">Επεξεργασία χρονισμού του τμήματος χειροκίνητα</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_content">Θέλετε να επεξεργαστείτε τον χρονισμό του τμήματος από την αρχή ή από το τέλος του τμήματος;</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_content">Θέλετε να επεξεργαστείτε τον χρονισμό του τμήματος από την αρχή ή από το τέλος του τμήματος;</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Δόθηκε μη έγκυρος χρόνος</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Δόθηκε μη έγκυρος χρόνος</string>
|
||||||
<string name="revanced_sb_stats">Στατιστικά</string>
|
<string name="revanced_sb_stats_title">Στατιστικά</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||||
<string name="revanced_sb_stats_connection_failure">Τα στατιστικά είναι προσωρινά μη διαθέσιμα (το API είναι εκτός λειτουργίας)</string>
|
<string name="revanced_sb_stats_connection_failure">Τα στατιστικά είναι προσωρινά μη διαθέσιμα (το API είναι εκτός λειτουργίας)</string>
|
||||||
<string name="revanced_sb_stats_loading">Φόρτωση...</string>
|
<string name="revanced_sb_stats_loading">Φόρτωση...</string>
|
||||||
@@ -1088,8 +1102,8 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_sb_color_invalid">Μη έγκυρος κωδικός χρώματος</string>
|
<string name="revanced_sb_color_invalid">Μη έγκυρος κωδικός χρώματος</string>
|
||||||
<string name="revanced_sb_reset_color">Επαναφορά χρώματος</string>
|
<string name="revanced_sb_reset_color">Επαναφορά χρώματος</string>
|
||||||
<string name="revanced_sb_reset">Επαναφορά</string>
|
<string name="revanced_sb_reset">Επαναφορά</string>
|
||||||
<string name="revanced_sb_about">Σχετικά με</string>
|
<string name="revanced_sb_about_title">Σχετικά με</string>
|
||||||
<string name="revanced_sb_about_api_sum">Τα δεδομένα παρέχονται από το SponsorBlock API. Πατήστε για να μάθετε περισσότερα και να δείτε λήψεις για άλλες πλατφόρμες</string>
|
<string name="revanced_sb_about_api_summary">Τα δεδομένα παρέχονται από το SponsorBlock API. Πατήστε για να μάθετε περισσότερα και να δείτε λήψεις για άλλες πλατφόρμες</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||||
<string name="revanced_change_form_factor_title">Αλλαγή μορφής διάταξης</string>
|
<string name="revanced_change_form_factor_title">Αλλαγή μορφής διάταξης</string>
|
||||||
@@ -1261,8 +1275,8 @@ Second \"item\" text"</string>
|
|||||||
|
|
||||||
Πατήστε για να μάθετε περισσότερα για το DeArrow"</string>
|
Πατήστε για να μάθετε περισσότερα για το DeArrow"</string>
|
||||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">Εμφάνιση μηνύματος αν το API δεν είναι διαθέσιμο</string>
|
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">Εμφάνιση μηνύματος αν το API δεν είναι διαθέσιμο</string>
|
||||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">Να εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης αν το DeArrow δεν είναι διαθέσιμο</string>
|
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">Εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης αν το DeArrow δεν είναι διαθέσιμο</string>
|
||||||
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">Να μην εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης αν το DeArrow δεν είναι διαθέσιμο</string>
|
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">Δεν εμφανίζεται μήνυμα στο κάτω μέρος της οθόνης αν το DeArrow δεν είναι διαθέσιμο</string>
|
||||||
<string name="revanced_alt_thumbnail_dearrow_api_url_title">Διεύθυνση API του DeArrow</string>
|
<string name="revanced_alt_thumbnail_dearrow_api_url_title">Διεύθυνση API του DeArrow</string>
|
||||||
<string name="revanced_alt_thumbnail_dearrow_api_url_summary">Η διεύθυνση URL του τελικού σημείου αποθήκευσης μικρογραφιών DeArrow</string>
|
<string name="revanced_alt_thumbnail_dearrow_api_url_summary">Η διεύθυνση URL του τελικού σημείου αποθήκευσης μικρογραφιών DeArrow</string>
|
||||||
<string name="revanced_alt_thumbnail_stills_about_title">Λήψεις ακίνητων καρέ</string>
|
<string name="revanced_alt_thumbnail_stills_about_title">Λήψεις ακίνητων καρέ</string>
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_settings_import_reset">Configuración ReVanced restablecida por defecto</string>
|
<string name="revanced_settings_import_reset">Configuración ReVanced restablecida por defecto</string>
|
||||||
<string name="revanced_settings_import_success">Configuración importada de %d</string>
|
<string name="revanced_settings_import_success">Configuración importada de %d</string>
|
||||||
<string name="revanced_settings_import_failure_parse">Error de importación: %s</string>
|
<string name="revanced_settings_import_failure_parse">Error de importación: %s</string>
|
||||||
|
<string name="revanced_settings_search_hint">Ajustes de búsqueda</string>
|
||||||
|
<string name="revanced_settings_search_no_results_title">No se encontraron resultados para «%s»</string>
|
||||||
|
<string name="revanced_settings_search_no_results_summary">Prueba con otra palabra clave</string>
|
||||||
|
<string name="revanced_settings_search_remove_message">¿Quitar del historial de búsqueda?</string>
|
||||||
<string name="revanced_show_menu_icons_title">Mostrar iconos de configuración de ReVanced</string>
|
<string name="revanced_show_menu_icons_title">Mostrar iconos de configuración de ReVanced</string>
|
||||||
<string name="revanced_show_menu_icons_summary_on">Se muestran los iconos de configuración</string>
|
<string name="revanced_show_menu_icons_summary_on">Se muestran los iconos de configuración</string>
|
||||||
<string name="revanced_show_menu_icons_summary_off">No se muestran los iconos de configuración</string>
|
<string name="revanced_show_menu_icons_summary_off">No se muestran los iconos de configuración</string>
|
||||||
@@ -92,6 +96,9 @@ Desactivar las optimizaciones de batería para MicroG no afectará negativamente
|
|||||||
<string name="revanced_restore_old_settings_menus_title">Restaurar los menús de configuración antiguos</string>
|
<string name="revanced_restore_old_settings_menus_title">Restaurar los menús de configuración antiguos</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_on">Se muestran los menús de configuración antiguos</string>
|
<string name="revanced_restore_old_settings_menus_summary_on">Se muestran los menús de configuración antiguos</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_off">No se muestran los menús de configuración antiguos</string>
|
<string name="revanced_restore_old_settings_menus_summary_off">No se muestran los menús de configuración antiguos</string>
|
||||||
|
<string name="revanced_settings_search_history_title">Mostrar el historial de búsqueda de ajustes</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_on">Se muestra el historial de búsqueda de ajustes</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_off">El historial de búsqueda de ajustes no se muestra</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||||
<string name="revanced_shorts_disable_background_playback_title">Desactivar la reproducción en segundo plano de Shorts</string>
|
<string name="revanced_shorts_disable_background_playback_title">Desactivar la reproducción en segundo plano de Shorts</string>
|
||||||
@@ -150,10 +157,10 @@ Desactivar las optimizaciones de batería para MicroG no afectará negativamente
|
|||||||
<string name="revanced_hide_notify_me_button_title">Ocultar el botón \'Notificarme\'</string>
|
<string name="revanced_hide_notify_me_button_title">Ocultar el botón \'Notificarme\'</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">Botón oculto</string>
|
<string name="revanced_hide_notify_me_button_summary_on">Botón oculto</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">Se muestra el botón</string>
|
<string name="revanced_hide_notify_me_button_summary_off">Se muestra el botón</string>
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">Ocultar la etiqueta \"También vieron\"</string>
|
<string name="revanced_hide_search_result_recommendation_labels_title">Ocultar etiquetas de recomendaciones de video</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_on">La etiqueta está oculta</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_on">Las etiquetas \"También vieron\" y \"También te puede gustar\" están ocultas</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">Se muestra la etiqueta</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_off">Las etiquetas \"También vieron\" y \"También te puede gustar\" se muestran</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">Ocultar botón \'Mostrar más\'</string>
|
<string name="revanced_hide_show_more_button_title">Ocultar botón \'Mostrar más\'</string>
|
||||||
@@ -228,6 +235,9 @@ Desactivar las optimizaciones de batería para MicroG no afectará negativamente
|
|||||||
<string name="revanced_hide_ai_generated_video_summary_section_title">Ocultar \"Resumen de video generado por IA\"</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_title">Ocultar \"Resumen de video generado por IA\"</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">La sección de resumen del video está oculta</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">La sección de resumen del video está oculta</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">La sección de resumen del video se muestra</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">La sección de resumen del video se muestra</string>
|
||||||
|
<string name="revanced_hide_ask_section_title">Ocultar pregunta</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_on">La sección de preguntas está oculta</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_off">Se muestra la sección de preguntas</string>
|
||||||
<string name="revanced_hide_attributes_section_title">Ocultar atributos</string>
|
<string name="revanced_hide_attributes_section_title">Ocultar atributos</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_on">Las secciones Lugares destacados, Juegos, Música y Personas mencionadas están ocultas</string>
|
<string name="revanced_hide_attributes_section_summary_on">Las secciones Lugares destacados, Juegos, Música y Personas mencionadas están ocultas</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">Las secciones Lugares destacados, Juegos, Música y Personas mencionadas se muestran</string>
|
<string name="revanced_hide_attributes_section_summary_off">Las secciones Lugares destacados, Juegos, Música y Personas mencionadas se muestran</string>
|
||||||
@@ -791,6 +801,11 @@ La reproducción automática se puede cambiar en la configuración de YouTube:
|
|||||||
Configuración → Reproducción → Reproducir el siguiente vídeo automáticamente"</string>
|
Configuración → Reproducción → Reproducir el siguiente vídeo automáticamente"</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_off">Se muestra el vídeo sugerido de la pantalla final</string>
|
<string name="revanced_end_screen_suggested_video_summary_off">Se muestra el vídeo sugerido de la pantalla final</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
<string name="revanced_hide_related_video_overlay_title">Ocultar la superposición de videos relacionados en pantalla completa</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_on">Se oculta la superposición de videos relacionados</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_off">Se muestra la superposición de videos relacionados</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">Ocultar fecha y hora de vídeo</string>
|
<string name="revanced_hide_timestamp_title">Ocultar fecha y hora de vídeo</string>
|
||||||
<string name="revanced_hide_timestamp_summary_on">Marca de tiempo oculta</string>
|
<string name="revanced_hide_timestamp_summary_on">Marca de tiempo oculta</string>
|
||||||
@@ -828,10 +843,10 @@ Configuración → Reproducción → Reproducir el siguiente vídeo automáticam
|
|||||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Recargar vídeo para votar usando Return YouTube Dislike</string>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Recargar vídeo para votar usando Return YouTube Dislike</string>
|
||||||
<!-- Video likes have been set to hidden by the video uploader. -->
|
<!-- Video likes have been set to hidden by the video uploader. -->
|
||||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Oculto por el propietario</string>
|
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Oculto por el propietario</string>
|
||||||
<string name="revanced_ryd_enable_summary_on">Dislikes son mostrados</string>
|
<string name="revanced_ryd_enabled_summary_on">Dislikes son mostrados</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">No se muestran Dislikes</string>
|
<string name="revanced_ryd_enabled_summary_off">No se muestran Dislikes</string>
|
||||||
<string name="revanced_ryd_shorts_title">Mostrar no me gusta en Shorts</string>
|
<string name="revanced_ryd_shorts_title">Mostrar no me gusta en Shorts</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Los Dislikes en los Shorts se muestran
|
<string name="revanced_ryd_shorts_summary_on">"Los Dislikes en los Shorts se muestran
|
||||||
|
|
||||||
Limitación: Es posible que los Dislikes no aparezcan en el modo de incógnito"</string>
|
Limitación: Es posible que los Dislikes no aparezcan en el modo de incógnito"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">No se muestran los Dislikes en los Shorts</string>
|
<string name="revanced_ryd_shorts_summary_off">No se muestran los Dislikes en los Shorts</string>
|
||||||
@@ -848,7 +863,6 @@ Limitación: Es posible que los Dislikes no aparezcan en el modo de incógnito"<
|
|||||||
<string name="revanced_ryd_toast_on_connection_error_title">Mostrar un brindis si la API no está disponible</string>
|
<string name="revanced_ryd_toast_on_connection_error_title">Mostrar un brindis si la API no está disponible</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">Toast se muestra si Devolución de YouTube Dislike no está disponible</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_on">Toast se muestra si Devolución de YouTube Dislike no está disponible</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">Toast no se muestra si Devolución de YouTube Dislike no está disponible</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_off">Toast no se muestra si Devolución de YouTube Dislike no está disponible</string>
|
||||||
<string name="revanced_ryd_about">Acerca de</string>
|
|
||||||
<string name="revanced_ryd_attribution_summary">Los datos son proporcionados por la API de Retorno de YouTube. Pulse aquí para aprender más</string>
|
<string name="revanced_ryd_attribution_summary">Los datos son proporcionados por la API de Retorno de YouTube. Pulse aquí para aprender más</string>
|
||||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||||
<string name="revanced_ryd_statistics_category_title">Devuelve las estadísticas de la API de este dispositivo</string>
|
<string name="revanced_ryd_statistics_category_title">Devuelve las estadísticas de la API de este dispositivo</string>
|
||||||
@@ -1046,7 +1060,7 @@ Ya existe"</string>
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_title">Modificar el tiempo del segmento manualmente</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_title">Modificar el tiempo del segmento manualmente</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_content">¿Quieres modificar el tiempo de inicio o final del segmento?</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_content">¿Quieres modificar el tiempo de inicio o final del segmento?</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Tiempo dado no válido</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Tiempo dado no válido</string>
|
||||||
<string name="revanced_sb_stats">Estadísticas</string>
|
<string name="revanced_sb_stats_title">Estadísticas</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||||
<string name="revanced_sb_stats_connection_failure">Las estadísticas no están disponibles temporalmente (la API está inactiva)</string>
|
<string name="revanced_sb_stats_connection_failure">Las estadísticas no están disponibles temporalmente (la API está inactiva)</string>
|
||||||
<string name="revanced_sb_stats_loading">Cargando...</string>
|
<string name="revanced_sb_stats_loading">Cargando...</string>
|
||||||
@@ -1075,8 +1089,8 @@ Ya existe"</string>
|
|||||||
<string name="revanced_sb_color_invalid">Código de color inválido</string>
|
<string name="revanced_sb_color_invalid">Código de color inválido</string>
|
||||||
<string name="revanced_sb_reset_color">Reiniciar color</string>
|
<string name="revanced_sb_reset_color">Reiniciar color</string>
|
||||||
<string name="revanced_sb_reset">Restablecer</string>
|
<string name="revanced_sb_reset">Restablecer</string>
|
||||||
<string name="revanced_sb_about">Acerca de</string>
|
<string name="revanced_sb_about_title">Acerca de</string>
|
||||||
<string name="revanced_sb_about_api_sum">Los datos son proporcionados por la API de SponsorBlock. Pulsa aquí para aprender más y ver las descargas para otras plataformas</string>
|
<string name="revanced_sb_about_api_summary">Los datos son proporcionados por la API de SponsorBlock. Pulsa aquí para aprender más y ver las descargas para otras plataformas</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||||
<string name="revanced_change_form_factor_title">Diseño del diseño factor</string>
|
<string name="revanced_change_form_factor_title">Diseño del diseño factor</string>
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_settings_import_reset">ReVancedi seaded on lähtestatud</string>
|
<string name="revanced_settings_import_reset">ReVancedi seaded on lähtestatud</string>
|
||||||
<string name="revanced_settings_import_success">Imporditi %d seadet</string>
|
<string name="revanced_settings_import_success">Imporditi %d seadet</string>
|
||||||
<string name="revanced_settings_import_failure_parse">Importimine ebaõnnestus: %s</string>
|
<string name="revanced_settings_import_failure_parse">Importimine ebaõnnestus: %s</string>
|
||||||
|
<string name="revanced_settings_search_hint">Otsi seadetest</string>
|
||||||
|
<string name="revanced_settings_search_no_results_title">Otsingule „%s” ei leitud tulemusi</string>
|
||||||
|
<string name="revanced_settings_search_no_results_summary">Proovi mõnda muud märksõna</string>
|
||||||
|
<string name="revanced_settings_search_remove_message">Kas eemaldada otsinguajaloost?</string>
|
||||||
<string name="revanced_show_menu_icons_title">Näita ReVancedi seadete ikoone</string>
|
<string name="revanced_show_menu_icons_title">Näita ReVancedi seadete ikoone</string>
|
||||||
<string name="revanced_show_menu_icons_summary_on">Seadete ikoonid on näidatud</string>
|
<string name="revanced_show_menu_icons_summary_on">Seadete ikoonid on näidatud</string>
|
||||||
<string name="revanced_show_menu_icons_summary_off">Seadete ikoonid ei ole nähtavad</string>
|
<string name="revanced_show_menu_icons_summary_off">Seadete ikoonid ei ole nähtavad</string>
|
||||||
@@ -93,6 +97,9 @@ Vajutage jätkamise nuppu ja lubage optimeerimismuutused."</string>
|
|||||||
<string name="revanced_restore_old_settings_menus_title">Taasta vanad seadete menüüd</string>
|
<string name="revanced_restore_old_settings_menus_title">Taasta vanad seadete menüüd</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_on">Vanad seadete menüüd on kuvatud</string>
|
<string name="revanced_restore_old_settings_menus_summary_on">Vanad seadete menüüd on kuvatud</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_off">Vanad seadete menüüd ei ole kuvatud</string>
|
<string name="revanced_restore_old_settings_menus_summary_off">Vanad seadete menüüd ei ole kuvatud</string>
|
||||||
|
<string name="revanced_settings_search_history_title">Kuva seadete otsinguajalugu</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_on">Seadete otsinguajalugu on näidatud</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_off">Seadete otsingu ajalugu ei kuvata</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||||
<string name="revanced_shorts_disable_background_playback_title">Shorts taustavideo esitamine lülitada</string>
|
<string name="revanced_shorts_disable_background_playback_title">Shorts taustavideo esitamine lülitada</string>
|
||||||
@@ -153,10 +160,10 @@ Teid ei teavitata ühestki ootamatust sündmusest."</string>
|
|||||||
<string name="revanced_hide_notify_me_button_title">Peida nupu \"Teata mulle\"</string>
|
<string name="revanced_hide_notify_me_button_title">Peida nupu \"Teata mulle\"</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">Nupp on peidetud</string>
|
<string name="revanced_hide_notify_me_button_summary_on">Nupp on peidetud</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">Nupp on kuvatud</string>
|
<string name="revanced_hide_notify_me_button_summary_off">Nupp on kuvatud</string>
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">Peida silt \"Inimesed vaatasid ka\"</string>
|
<string name="revanced_hide_search_result_recommendation_labels_title">Peida video soovitusmärgised</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_on">Silt on peidetud</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_on">Märgised „Inimesed vaatasid ka“ ja „Sulle võib samuti meeldida“ on peidetud</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">Silt on kuvatud</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_off">Märgised „Inimesed vaatasid ka“ ja „Sulle võib samuti meeldida“ on näidatud</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">Peida nupp \"Kuva rohkem\"</string>
|
<string name="revanced_hide_show_more_button_title">Peida nupp \"Kuva rohkem\"</string>
|
||||||
@@ -231,6 +238,9 @@ Teid ei teavitata ühestki ootamatust sündmusest."</string>
|
|||||||
<string name="revanced_hide_ai_generated_video_summary_section_title">Peida „AI-ga loodud video kokkuvõte”</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_title">Peida „AI-ga loodud video kokkuvõte”</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Video kokkuvõtte osa on peidetud</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Video kokkuvõtte osa on peidetud</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Video kokkuvõtte osa on näidatud</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Video kokkuvõtte osa on näidatud</string>
|
||||||
|
<string name="revanced_hide_ask_section_title">Peida küsi</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_on">Küsi osa on peidetud</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_off">Küsi osa on nähtav</string>
|
||||||
<string name="revanced_hide_attributes_section_title">Peida atribuudid</string>
|
<string name="revanced_hide_attributes_section_title">Peida atribuudid</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_on">Esiletõstetud kohad, mängud, muusika ja inimeste mainimise jaotised on peidetud</string>
|
<string name="revanced_hide_attributes_section_summary_on">Esiletõstetud kohad, mängud, muusika ja inimeste mainimise jaotised on peidetud</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">Esiletõstetud kohad, mängud, muusika ja inimeste mainimise jaotised on kuvatud</string>
|
<string name="revanced_hide_attributes_section_summary_off">Esiletõstetud kohad, mängud, muusika ja inimeste mainimise jaotised on kuvatud</string>
|
||||||
@@ -794,6 +804,11 @@ Automaatesitust saab muuta YouTube'i seadetes:
|
|||||||
Seaded → Taasesitus → Esita järgmine video automaatselt"</string>
|
Seaded → Taasesitus → Esita järgmine video automaatselt"</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_off">Lõpuekraani soovitatud video on näidatud</string>
|
<string name="revanced_end_screen_suggested_video_summary_off">Lõpuekraani soovitatud video on näidatud</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
<string name="revanced_hide_related_video_overlay_title">Peida seotud video ülekatte täisekraanil</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_on">Seotud video ülekatte on peidetud</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_off">Seotud video ülekatte on näidatud</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">Peida video ajamärk</string>
|
<string name="revanced_hide_timestamp_title">Peida video ajamärk</string>
|
||||||
<string name="revanced_hide_timestamp_summary_on">Ajamärk on peidetud</string>
|
<string name="revanced_hide_timestamp_summary_on">Ajamärk on peidetud</string>
|
||||||
@@ -831,10 +846,10 @@ Seaded → Taasesitus → Esita järgmine video automaatselt"</string>
|
|||||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Laadi video uuesti, et hääletada Return YouTube Dislike\'i abil</string>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Laadi video uuesti, et hääletada Return YouTube Dislike\'i abil</string>
|
||||||
<!-- Video likes have been set to hidden by the video uploader. -->
|
<!-- Video likes have been set to hidden by the video uploader. -->
|
||||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Peidetud omaniku poolt</string>
|
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Peidetud omaniku poolt</string>
|
||||||
<string name="revanced_ryd_enable_summary_on">Mittemeeldimised on nähtavad</string>
|
<string name="revanced_ryd_enabled_summary_on">Mittemeeldimised on nähtavad</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">Mittemeeldimised pole nähtavad</string>
|
<string name="revanced_ryd_enabled_summary_off">Mittemeeldimised pole nähtavad</string>
|
||||||
<string name="revanced_ryd_shorts_title">Näita mittemeeldimisi Shorts\'il</string>
|
<string name="revanced_ryd_shorts_title">Näita mittemeeldimisi Shorts\'il</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Ei meeldimised on kuvatud teenuses Shorts
|
<string name="revanced_ryd_shorts_summary_on">"Ei meeldimised on kuvatud teenuses Shorts
|
||||||
|
|
||||||
Piirang: Ei meeldimised ei pruugi inkognito režiimis kuvada"</string>
|
Piirang: Ei meeldimised ei pruugi inkognito režiimis kuvada"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">Ei meeldimised pole kuvatud teenuses Shorts</string>
|
<string name="revanced_ryd_shorts_summary_off">Ei meeldimised pole kuvatud teenuses Shorts</string>
|
||||||
@@ -851,7 +866,6 @@ Piirang: Ei meeldimised ei pruugi inkognito režiimis kuvada"</string>
|
|||||||
<string name="revanced_ryd_toast_on_connection_error_title">Näita teadet, kui API pole saadaval</string>
|
<string name="revanced_ryd_toast_on_connection_error_title">Näita teadet, kui API pole saadaval</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">Teade näidatakse, kui Return YouTube Dislike pole saadaval</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_on">Teade näidatakse, kui Return YouTube Dislike pole saadaval</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">Teadet ei näidata, kui Return YouTube Dislike pole saadaval</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_off">Teadet ei näidata, kui Return YouTube Dislike pole saadaval</string>
|
||||||
<string name="revanced_ryd_about">Teave</string>
|
|
||||||
<string name="revanced_ryd_attribution_summary">Andmed on pakutud Return YouTube Dislike API poolt. Puuduta siia, et saada lisateavet</string>
|
<string name="revanced_ryd_attribution_summary">Andmed on pakutud Return YouTube Dislike API poolt. Puuduta siia, et saada lisateavet</string>
|
||||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||||
<string name="revanced_ryd_statistics_category_title">ReturnYouTubeDislike API statistika sellel seadmel</string>
|
<string name="revanced_ryd_statistics_category_title">ReturnYouTubeDislike API statistika sellel seadmel</string>
|
||||||
@@ -1058,7 +1072,7 @@ Kas olete esitamiseks valmis?"</string>
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_title">Muuda segmendi ajastust käsitsi</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_title">Muuda segmendi ajastust käsitsi</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_content">Kas soovite muuta segmendi algus- või lõpppunkti ajastust?</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_content">Kas soovite muuta segmendi algus- või lõpppunkti ajastust?</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Sisestatud aega ei ole võimalik analüüsida</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Sisestatud aega ei ole võimalik analüüsida</string>
|
||||||
<string name="revanced_sb_stats">Statistika</string>
|
<string name="revanced_sb_stats_title">Statistika</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||||
<string name="revanced_sb_stats_connection_failure">Statistika pole ajutiselt saadaval (API on maas)</string>
|
<string name="revanced_sb_stats_connection_failure">Statistika pole ajutiselt saadaval (API on maas)</string>
|
||||||
<string name="revanced_sb_stats_loading">Laen...</string>
|
<string name="revanced_sb_stats_loading">Laen...</string>
|
||||||
@@ -1087,8 +1101,8 @@ Kas olete esitamiseks valmis?"</string>
|
|||||||
<string name="revanced_sb_color_invalid">Vigane värvikood</string>
|
<string name="revanced_sb_color_invalid">Vigane värvikood</string>
|
||||||
<string name="revanced_sb_reset_color">Lähtesta värv</string>
|
<string name="revanced_sb_reset_color">Lähtesta värv</string>
|
||||||
<string name="revanced_sb_reset">Lähtesta</string>
|
<string name="revanced_sb_reset">Lähtesta</string>
|
||||||
<string name="revanced_sb_about">Teave</string>
|
<string name="revanced_sb_about_title">Teave</string>
|
||||||
<string name="revanced_sb_about_api_sum">Andmed on pärit SponsorBlock API-st. Puudutage siia, et saada lisateavet ja vaadata allalaadimisi teistele platvormidele</string>
|
<string name="revanced_sb_about_api_summary">Andmed on pärit SponsorBlock API-st. Puudutage siia, et saada lisateavet ja vaadata allalaadimisi teistele platvormidele</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||||
<string name="revanced_change_form_factor_title">Paigutuse vormitegur</string>
|
<string name="revanced_change_form_factor_title">Paigutuse vormitegur</string>
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ Second \"item\" text"</string>
|
|||||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
<!-- '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. -->
|
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||||
@@ -134,6 +134,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ Second \"item\" text"</string>
|
|||||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
<!-- '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. -->
|
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||||
@@ -154,6 +154,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||||
|
|||||||
@@ -153,10 +153,7 @@ Et saa ilmoituksia odottamattomista tapahtumista."</string>
|
|||||||
<string name="revanced_hide_notify_me_button_title">Piilota \"Ilmoita minulle\" -painike</string>
|
<string name="revanced_hide_notify_me_button_title">Piilota \"Ilmoita minulle\" -painike</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">Painike on piilotettu</string>
|
<string name="revanced_hide_notify_me_button_summary_on">Painike on piilotettu</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">Painike näytetään</string>
|
<string name="revanced_hide_notify_me_button_summary_off">Painike näytetään</string>
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">Piilota \'\"Ihmiset katselivat myös\" -tunniste</string>
|
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_on">Tunniste on piilotettu</string>
|
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">Tunniste näytetään</string>
|
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">Piilota \"Näytä lisää\" -painike</string>
|
<string name="revanced_hide_show_more_button_title">Piilota \"Näytä lisää\" -painike</string>
|
||||||
@@ -791,6 +788,11 @@ Automaattista toistoa voidaan muuttaa YouTube-asetuksissa:
|
|||||||
Asetukset → Toisto → Toista seuraava video automaattisesti"</string>
|
Asetukset → Toisto → Toista seuraava video automaattisesti"</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_off">Loppunäytön ehdotettu video näytetään</string>
|
<string name="revanced_end_screen_suggested_video_summary_off">Loppunäytön ehdotettu video näytetään</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
<string name="revanced_hide_related_video_overlay_title">Piilota liittyvien videoiden peittokuva kokoruututilassa</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_on">Liittyvien videoiden peittokuva on piilotettu</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_off">Liittyvien videoiden peittokuva näytetään</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">Piilota videon aikaleima</string>
|
<string name="revanced_hide_timestamp_title">Piilota videon aikaleima</string>
|
||||||
<string name="revanced_hide_timestamp_summary_on">Aikaleima on piilotettu</string>
|
<string name="revanced_hide_timestamp_summary_on">Aikaleima on piilotettu</string>
|
||||||
@@ -828,10 +830,10 @@ Asetukset → Toisto → Toista seuraava video automaattisesti"</string>
|
|||||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Lataa video uudelleen äänestääksesi Return YouTube Dislikellä</string>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Lataa video uudelleen äänestääksesi Return YouTube Dislikellä</string>
|
||||||
<!-- Video likes have been set to hidden by the video uploader. -->
|
<!-- Video likes have been set to hidden by the video uploader. -->
|
||||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Omistajan piilottama</string>
|
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Omistajan piilottama</string>
|
||||||
<string name="revanced_ryd_enable_summary_on">Ei-tykkäykset näytetään</string>
|
<string name="revanced_ryd_enabled_summary_on">Ei-tykkäykset näytetään</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">Ei-tykkäyksiä ei näytetä</string>
|
<string name="revanced_ryd_enabled_summary_off">Ei-tykkäyksiä ei näytetä</string>
|
||||||
<string name="revanced_ryd_shorts_title">Näytä ei-tykkykset Shortseissa</string>
|
<string name="revanced_ryd_shorts_title">Näytä ei-tykkykset Shortseissa</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Ei-tykkäykset näytetään Shortseissa
|
<string name="revanced_ryd_shorts_summary_on">"Ei-tykkäykset näytetään Shortseissa
|
||||||
|
|
||||||
Rajoitus: Ei-tykkäykset eivät välttämättä näy incognito-tilassa"</string>
|
Rajoitus: Ei-tykkäykset eivät välttämättä näy incognito-tilassa"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">Ei-tykkäyksiä ei näytetä Shortseissa</string>
|
<string name="revanced_ryd_shorts_summary_off">Ei-tykkäyksiä ei näytetä Shortseissa</string>
|
||||||
@@ -848,7 +850,6 @@ Rajoitus: Ei-tykkäykset eivät välttämättä näy incognito-tilassa"</string>
|
|||||||
<string name="revanced_ryd_toast_on_connection_error_title">Näytä ponnahdusilmoitus, jos API ei ole käytettävissä</string>
|
<string name="revanced_ryd_toast_on_connection_error_title">Näytä ponnahdusilmoitus, jos API ei ole käytettävissä</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">Ponnahdusilmoitus näytetään, jos Return YouTube Dislike ei ole käytettävissä</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_on">Ponnahdusilmoitus näytetään, jos Return YouTube Dislike ei ole käytettävissä</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">Ponnahdusilmoitusta ei näytetä, jos Return YouTube Dislike ei ole käytettävissä</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_off">Ponnahdusilmoitusta ei näytetä, jos Return YouTube Dislike ei ole käytettävissä</string>
|
||||||
<string name="revanced_ryd_about">Tietoja</string>
|
|
||||||
<string name="revanced_ryd_attribution_summary">Tiedot ovat peräisin Return YouTube Disliken API:sta. Napauta tästä lukeaksesi lisää</string>
|
<string name="revanced_ryd_attribution_summary">Tiedot ovat peräisin Return YouTube Disliken API:sta. Napauta tästä lukeaksesi lisää</string>
|
||||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||||
<string name="revanced_ryd_statistics_category_title">Tämän laitteen ReturnYouTubeDislike API -tilastot</string>
|
<string name="revanced_ryd_statistics_category_title">Tämän laitteen ReturnYouTubeDislike API -tilastot</string>
|
||||||
@@ -1055,7 +1056,7 @@ Oletko valmis lähettämään?"</string>
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_title">Muokkaa osion ajoitusta manuaalisesti</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_title">Muokkaa osion ajoitusta manuaalisesti</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_content">Haluatko muokata osion alku- vai loppuaikaa?</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_content">Haluatko muokata osion alku- vai loppuaikaa?</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Annettu aika on virheellinen</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Annettu aika on virheellinen</string>
|
||||||
<string name="revanced_sb_stats">Tilastot</string>
|
<string name="revanced_sb_stats_title">Tilastot</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||||
<string name="revanced_sb_stats_connection_failure">Tilastot eivät tilapäisesti saatavilla (API ei ole käytettävissä)</string>
|
<string name="revanced_sb_stats_connection_failure">Tilastot eivät tilapäisesti saatavilla (API ei ole käytettävissä)</string>
|
||||||
<string name="revanced_sb_stats_loading">Ladataan...</string>
|
<string name="revanced_sb_stats_loading">Ladataan...</string>
|
||||||
@@ -1084,8 +1085,8 @@ Oletko valmis lähettämään?"</string>
|
|||||||
<string name="revanced_sb_color_invalid">Virheellinen värikoodi</string>
|
<string name="revanced_sb_color_invalid">Virheellinen värikoodi</string>
|
||||||
<string name="revanced_sb_reset_color">Nollaa väri</string>
|
<string name="revanced_sb_reset_color">Nollaa väri</string>
|
||||||
<string name="revanced_sb_reset">Nollaa</string>
|
<string name="revanced_sb_reset">Nollaa</string>
|
||||||
<string name="revanced_sb_about">Tietoja</string>
|
<string name="revanced_sb_about_title">Tietoja</string>
|
||||||
<string name="revanced_sb_about_api_sum">Tiedot tarjoaa SponsorBlock API. Napauta tätä saadaksesi lisätietoja ja nähdäksesi lataukset muille alustoille</string>
|
<string name="revanced_sb_about_api_summary">Tiedot tarjoaa SponsorBlock API. Napauta tätä saadaksesi lisätietoja ja nähdäksesi lataukset muille alustoille</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||||
<string name="revanced_change_form_factor_title">Ulkoasun asettelu</string>
|
<string name="revanced_change_form_factor_title">Ulkoasun asettelu</string>
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_settings_import_reset">I-reset ang mga ReVanced na setting sa default</string>
|
<string name="revanced_settings_import_reset">I-reset ang mga ReVanced na setting sa default</string>
|
||||||
<string name="revanced_settings_import_success">Na-import ang %d na mga setting</string>
|
<string name="revanced_settings_import_success">Na-import ang %d na mga setting</string>
|
||||||
<string name="revanced_settings_import_failure_parse">Nabigo ang pag-import: %s</string>
|
<string name="revanced_settings_import_failure_parse">Nabigo ang pag-import: %s</string>
|
||||||
|
<string name="revanced_settings_search_hint">Maghanap ng mga setting</string>
|
||||||
|
<string name="revanced_settings_search_no_results_title">Walang nakitang resulta para sa \'%s\'</string>
|
||||||
|
<string name="revanced_settings_search_no_results_summary">Subukan ang ibang keyword</string>
|
||||||
|
<string name="revanced_settings_search_remove_message">Alisin sa history ng paghahanap?</string>
|
||||||
<string name="revanced_show_menu_icons_title">Ipakita ang mga icon ng setting ng ReVanced</string>
|
<string name="revanced_show_menu_icons_title">Ipakita ang mga icon ng setting ng ReVanced</string>
|
||||||
<string name="revanced_show_menu_icons_summary_on">Ipinapakita ang mga icon ng setting</string>
|
<string name="revanced_show_menu_icons_summary_on">Ipinapakita ang mga icon ng setting</string>
|
||||||
<string name="revanced_show_menu_icons_summary_off">Hindi ipinapakita ang mga icon ng setting</string>
|
<string name="revanced_show_menu_icons_summary_off">Hindi ipinapakita ang mga icon ng setting</string>
|
||||||
@@ -93,6 +97,9 @@ Tapikin ang pindutan ng pagpapatuloy at payagan ang mga pagbabago sa pag-optimiz
|
|||||||
<string name="revanced_restore_old_settings_menus_title">Ibalik ang dating mga menu ng setting</string>
|
<string name="revanced_restore_old_settings_menus_title">Ibalik ang dating mga menu ng setting</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_on">Ipinapakita ang mga lumang menu ng setting</string>
|
<string name="revanced_restore_old_settings_menus_summary_on">Ipinapakita ang mga lumang menu ng setting</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_off">Hindi ipinapakita ang mga lumang menu ng setting</string>
|
<string name="revanced_restore_old_settings_menus_summary_off">Hindi ipinapakita ang mga lumang menu ng setting</string>
|
||||||
|
<string name="revanced_settings_search_history_title">Ipakita ang history ng paghahanap sa mga setting</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_on">Ipinapakita ang history ng paghahanap sa mga setting</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_off">Hindi ipinapakita ang kasaysayan ng paghahanap sa Mga Setting</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||||
<string name="revanced_shorts_disable_background_playback_title">I-disable ang pag-playback ng Shorts sa background</string>
|
<string name="revanced_shorts_disable_background_playback_title">I-disable ang pag-playback ng Shorts sa background</string>
|
||||||
@@ -153,10 +160,10 @@ Hindi ka aabisuhan ng anumang hindi inaasahang mga kaganapan."</string>
|
|||||||
<string name="revanced_hide_notify_me_button_title">Itago ang button na \"Abisuhan ako\"</string>
|
<string name="revanced_hide_notify_me_button_title">Itago ang button na \"Abisuhan ako\"</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">Nakatago ang button</string>
|
<string name="revanced_hide_notify_me_button_summary_on">Nakatago ang button</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">Ang pindutan ay ipinapakita</string>
|
<string name="revanced_hide_notify_me_button_summary_off">Ang pindutan ay ipinapakita</string>
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">Itago ang label na \'Napanood din ng mga tao\'</string>
|
<string name="revanced_hide_search_result_recommendation_labels_title">Itago ang mga label ng rekomendasyon sa video</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_on">Nakatago ang label</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_on">Nakatago ang mga label na \"\'People also watched\'\" at \"\'You might also like\'\"</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">Ipinapakita ang label</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_off">Ipinapakita ang mga label na \"\'People also watched\'\" at \"\'You might also like\'\"</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">Itago ang button na \"Ipakita ang higit pa\"</string>
|
<string name="revanced_hide_show_more_button_title">Itago ang button na \"Ipakita ang higit pa\"</string>
|
||||||
@@ -231,6 +238,9 @@ Hindi ka aabisuhan ng anumang hindi inaasahang mga kaganapan."</string>
|
|||||||
<string name="revanced_hide_ai_generated_video_summary_section_title">Itago ang \'Buod ng video na binuo ng AI\'</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_title">Itago ang \'Buod ng video na binuo ng AI\'</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Nakatago ang seksyon ng buod ng video</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Nakatago ang seksyon ng buod ng video</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Ipinapakita ang seksyon ng buod ng video</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Ipinapakita ang seksyon ng buod ng video</string>
|
||||||
|
<string name="revanced_hide_ask_section_title">Itago ang Magtanong</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_on">Nakatago ang seksyon ng Magtanong</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_off">Ipinapakita ang seksyon ng Magtanong</string>
|
||||||
<string name="revanced_hide_attributes_section_title">Itago ang Mga Katangian</string>
|
<string name="revanced_hide_attributes_section_title">Itago ang Mga Katangian</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_on">Nakatago ang mga seksyon ng Mga itinatampok na lugar, Mga Laro, Musika, at Mga taong binanggit</string>
|
<string name="revanced_hide_attributes_section_summary_on">Nakatago ang mga seksyon ng Mga itinatampok na lugar, Mga Laro, Musika, at Mga taong binanggit</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">Ipinapakita ang mga seksyon ng Mga itinatampok na lugar, Mga Laro, Musika, at Mga taong binanggit</string>
|
<string name="revanced_hide_attributes_section_summary_off">Ipinapakita ang mga seksyon ng Mga itinatampok na lugar, Mga Laro, Musika, at Mga taong binanggit</string>
|
||||||
@@ -792,6 +802,11 @@ Maaaring baguhin ang Autoplay sa mga setting ng YouTube:
|
|||||||
Mga Setting → Pag-playback → I-autoplay ang susunod na video"</string>
|
Mga Setting → Pag-playback → I-autoplay ang susunod na video"</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_off">Ipinapakita ang iminungkahing video sa dulo ng screen</string>
|
<string name="revanced_end_screen_suggested_video_summary_off">Ipinapakita ang iminungkahing video sa dulo ng screen</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
<string name="revanced_hide_related_video_overlay_title">Itago ang kaugnay na video overlay sa fullscreen</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_on">Nakatago ang kaugnay na video overlay</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_off">Ipinapakita ang kaugnay na video overlay</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">Itago ang timestamp ng video</string>
|
<string name="revanced_hide_timestamp_title">Itago ang timestamp ng video</string>
|
||||||
<string name="revanced_hide_timestamp_summary_on">Nakatago ang timestamp</string>
|
<string name="revanced_hide_timestamp_summary_on">Nakatago ang timestamp</string>
|
||||||
@@ -829,10 +844,10 @@ Mga Setting → Pag-playback → I-autoplay ang susunod na video"</string>
|
|||||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">I-reload ang video para bumoto gamit ang Return YouTube Dislike</string>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">I-reload ang video para bumoto gamit ang Return YouTube Dislike</string>
|
||||||
<!-- Video likes have been set to hidden by the video uploader. -->
|
<!-- Video likes have been set to hidden by the video uploader. -->
|
||||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Nakatago ng may-ari</string>
|
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Nakatago ng may-ari</string>
|
||||||
<string name="revanced_ryd_enable_summary_on">Ang mga hindi gusto ay ipinapakita</string>
|
<string name="revanced_ryd_enabled_summary_on">Ang mga hindi gusto ay ipinapakita</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">Hindi ipinapakita ang mga hindi gusto</string>
|
<string name="revanced_ryd_enabled_summary_off">Hindi ipinapakita ang mga hindi gusto</string>
|
||||||
<string name="revanced_ryd_shorts_title">Ipakita ang mga hindi gusto sa Shorts</string>
|
<string name="revanced_ryd_shorts_title">Ipakita ang mga hindi gusto sa Shorts</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Ipinapakita ang mga Dislike sa Shorts
|
<string name="revanced_ryd_shorts_summary_on">"Ipinapakita ang mga Dislike sa Shorts
|
||||||
|
|
||||||
Limitasyon: Maaaring hindi lumabas ang mga Dislike sa incognito mode"</string>
|
Limitasyon: Maaaring hindi lumabas ang mga Dislike sa incognito mode"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">Hindi ipinapakita ang mga Dislike sa Shorts</string>
|
<string name="revanced_ryd_shorts_summary_off">Hindi ipinapakita ang mga Dislike sa Shorts</string>
|
||||||
@@ -849,7 +864,6 @@ Limitasyon: Maaaring hindi lumabas ang mga Dislike sa incognito mode"</string>
|
|||||||
<string name="revanced_ryd_toast_on_connection_error_title">Magpakita ng toast kung hindi available ang API</string>
|
<string name="revanced_ryd_toast_on_connection_error_title">Magpakita ng toast kung hindi available ang API</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">Ipapakita ang toast kung hindi available ang Return YouTube Dislike</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_on">Ipapakita ang toast kung hindi available ang Return YouTube Dislike</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">Hindi ipinapakita ang toast kung hindi available ang Return YouTube Dislike</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_off">Hindi ipinapakita ang toast kung hindi available ang Return YouTube Dislike</string>
|
||||||
<string name="revanced_ryd_about">Tungkol</string>
|
|
||||||
<string name="revanced_ryd_attribution_summary">Ang data ay ibinibigay ng Return YouTube Dislike API. Mag-tap dito para matuto pa</string>
|
<string name="revanced_ryd_attribution_summary">Ang data ay ibinibigay ng Return YouTube Dislike API. Mag-tap dito para matuto pa</string>
|
||||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||||
<string name="revanced_ryd_statistics_category_title">ReturnYouTubeDislike API statistics ng device na ito</string>
|
<string name="revanced_ryd_statistics_category_title">ReturnYouTubeDislike API statistics ng device na ito</string>
|
||||||
@@ -1056,7 +1070,7 @@ Isumite na ba?"</string>
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_title">Manu-manong i-edit ang timing ng segment</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_title">Manu-manong i-edit ang timing ng segment</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_content">Gusto mo bang i-edit ang timing para sa pagsisimula o pagtatapos ng segment?</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_content">Gusto mo bang i-edit ang timing para sa pagsisimula o pagtatapos ng segment?</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Hindi wastong oras ang ibinigay</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Hindi wastong oras ang ibinigay</string>
|
||||||
<string name="revanced_sb_stats">Istatistika</string>
|
<string name="revanced_sb_stats_title">Istatistika</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||||
<string name="revanced_sb_stats_connection_failure">Pansamantalang hindi available ang mga Stats (down ang API)</string>
|
<string name="revanced_sb_stats_connection_failure">Pansamantalang hindi available ang mga Stats (down ang API)</string>
|
||||||
<string name="revanced_sb_stats_loading">Naglo-load...</string>
|
<string name="revanced_sb_stats_loading">Naglo-load...</string>
|
||||||
@@ -1085,8 +1099,8 @@ Isumite na ba?"</string>
|
|||||||
<string name="revanced_sb_color_invalid">Di-wastong code ng kulay</string>
|
<string name="revanced_sb_color_invalid">Di-wastong code ng kulay</string>
|
||||||
<string name="revanced_sb_reset_color">I-reset ang kulay</string>
|
<string name="revanced_sb_reset_color">I-reset ang kulay</string>
|
||||||
<string name="revanced_sb_reset">I-reset</string>
|
<string name="revanced_sb_reset">I-reset</string>
|
||||||
<string name="revanced_sb_about">Tungkol</string>
|
<string name="revanced_sb_about_title">Tungkol</string>
|
||||||
<string name="revanced_sb_about_api_sum">Ang data ay ibinibigay ng SponsorBlock API. Mag-tap dito para matuto pa at makakita ng mga download para sa iba pang platform</string>
|
<string name="revanced_sb_about_api_summary">Ang data ay ibinibigay ng SponsorBlock API. Mag-tap dito para matuto pa at makakita ng mga download para sa iba pang platform</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||||
<string name="revanced_change_form_factor_title">Layout form factor</string>
|
<string name="revanced_change_form_factor_title">Layout form factor</string>
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_settings_import_reset">Paramètres ReVanced réinitialisés aux valeurs par défaut</string>
|
<string name="revanced_settings_import_reset">Paramètres ReVanced réinitialisés aux valeurs par défaut</string>
|
||||||
<string name="revanced_settings_import_success">%d paramètres importés</string>
|
<string name="revanced_settings_import_success">%d paramètres importés</string>
|
||||||
<string name="revanced_settings_import_failure_parse">Importation échouée : %s</string>
|
<string name="revanced_settings_import_failure_parse">Importation échouée : %s</string>
|
||||||
|
<string name="revanced_settings_search_hint">Paramètres de recherche</string>
|
||||||
|
<string name="revanced_settings_search_no_results_title">Aucun résultat trouvé pour \".%s\".</string>
|
||||||
|
<string name="revanced_settings_search_no_results_summary">Essayez un autre mot-clé</string>
|
||||||
|
<string name="revanced_settings_search_remove_message">Supprimer de l\'historique des recherches ?</string>
|
||||||
<string name="revanced_show_menu_icons_title">Afficher les icônes des paramètres ReVanced</string>
|
<string name="revanced_show_menu_icons_title">Afficher les icônes des paramètres ReVanced</string>
|
||||||
<string name="revanced_show_menu_icons_summary_on">Les icônes des paramètres sont affichées</string>
|
<string name="revanced_show_menu_icons_summary_on">Les icônes des paramètres sont affichées</string>
|
||||||
<string name="revanced_show_menu_icons_summary_off">Les icônes des paramètres ne sont pas affichées</string>
|
<string name="revanced_show_menu_icons_summary_off">Les icônes des paramètres ne sont pas affichées</string>
|
||||||
@@ -93,6 +97,9 @@ Appuyez sur le bouton Continuer et autorisez les modifications."</string>
|
|||||||
<string name="revanced_restore_old_settings_menus_title">Restaurer les anciens menus des paramètres</string>
|
<string name="revanced_restore_old_settings_menus_title">Restaurer les anciens menus des paramètres</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_on">Les anciens menus des paramètres sont affichés</string>
|
<string name="revanced_restore_old_settings_menus_summary_on">Les anciens menus des paramètres sont affichés</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_off">Les anciens menus des paramètres ne sont pas affichés</string>
|
<string name="revanced_restore_old_settings_menus_summary_off">Les anciens menus des paramètres ne sont pas affichés</string>
|
||||||
|
<string name="revanced_settings_search_history_title">Afficher l\'historique de recherche des paramètres</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_on">L\'historique de recherche des paramètres est affiché</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_off">L\'historique de recherche des paramètres n\'est pas affiché</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||||
<string name="revanced_shorts_disable_background_playback_title">Désactiver la lecture en arrière-plan des Shorts</string>
|
<string name="revanced_shorts_disable_background_playback_title">Désactiver la lecture en arrière-plan des Shorts</string>
|
||||||
@@ -153,10 +160,10 @@ Vous ne serez pas informé des événements inattendus."</string>
|
|||||||
<string name="revanced_hide_notify_me_button_title">Masquer le bouton M\'avertir</string>
|
<string name="revanced_hide_notify_me_button_title">Masquer le bouton M\'avertir</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">Le bouton est masqué</string>
|
<string name="revanced_hide_notify_me_button_summary_on">Le bouton est masqué</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">Le bouton est affiché</string>
|
<string name="revanced_hide_notify_me_button_summary_off">Le bouton est affiché</string>
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">Masquer le libellé \"Découvrez également cette vidéo\"</string>
|
<string name="revanced_hide_search_result_recommendation_labels_title">Masquer les libellés de recommandation de vidéos</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_on">Le libellé est masqué</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_on">Les libellés \"Les internautes ont aussi regardé\" et \"Découvrez également\" sont masqués</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">Le libellé est affiché</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_off">Les libellés \"Les internautes ont aussi regardé\" et \"Découvrez également\" sont affichés</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">Masquer le bouton Afficher plus</string>
|
<string name="revanced_hide_show_more_button_title">Masquer le bouton Afficher plus</string>
|
||||||
@@ -231,6 +238,9 @@ Vous ne serez pas informé des événements inattendus."</string>
|
|||||||
<string name="revanced_hide_ai_generated_video_summary_section_title">Masquer \"Résumé de la vidéo généré par IA\"</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_title">Masquer \"Résumé de la vidéo généré par IA\"</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">La section du résumé de la vidéo est masquée</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">La section du résumé de la vidéo est masquée</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">La section du résumé de la vidéo est affichée</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">La section du résumé de la vidéo est affichée</string>
|
||||||
|
<string name="revanced_hide_ask_section_title">Masquer la section \"Demander\"</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_on">La section \"Demander\" est masquée</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_off">La section \"Demander\" est affichée</string>
|
||||||
<string name="revanced_hide_attributes_section_title">Masquer les attributions</string>
|
<string name="revanced_hide_attributes_section_title">Masquer les attributions</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_on">Les sections Lieux mentionnés, Jeux, Musique et Personnes mentionnées sont masquées</string>
|
<string name="revanced_hide_attributes_section_summary_on">Les sections Lieux mentionnés, Jeux, Musique et Personnes mentionnées sont masquées</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">Les sections Lieux mentionnés, Jeux, Musique et Personnes mentionnées sont affichées</string>
|
<string name="revanced_hide_attributes_section_summary_off">Les sections Lieux mentionnés, Jeux, Musique et Personnes mentionnées sont affichées</string>
|
||||||
@@ -794,6 +804,11 @@ La lecture automatique peut être modifiée dans les paramètres de YouTube :
|
|||||||
Paramètres → Lecture → Lecture automatique de la vidéo suivante"</string>
|
Paramètres → Lecture → Lecture automatique de la vidéo suivante"</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_off">L\'écran de fin suggérant une vidéo est affiché</string>
|
<string name="revanced_end_screen_suggested_video_summary_off">L\'écran de fin suggérant une vidéo est affiché</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
<string name="revanced_hide_related_video_overlay_title">Masquer l\'overlay de vidéos similaires en plein écran</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_on">L\'overlay de vidéos similaires est masqué</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_off">L\'overlay de vidéos similaires est affiché</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">Masquer le temps écoulé et la durée totale</string>
|
<string name="revanced_hide_timestamp_title">Masquer le temps écoulé et la durée totale</string>
|
||||||
<string name="revanced_hide_timestamp_summary_on">Le temps écoulé et la durée totale sont masqués</string>
|
<string name="revanced_hide_timestamp_summary_on">Le temps écoulé et la durée totale sont masqués</string>
|
||||||
@@ -831,10 +846,10 @@ Paramètres → Lecture → Lecture automatique de la vidéo suivante"</string>
|
|||||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Rechargez la vidéo pour voter avec Return YouTube Dislike</string>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Rechargez la vidéo pour voter avec Return YouTube Dislike</string>
|
||||||
<!-- Video likes have been set to hidden by the video uploader. -->
|
<!-- Video likes have been set to hidden by the video uploader. -->
|
||||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Masqué par le propriétaire</string>
|
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Masqué par le propriétaire</string>
|
||||||
<string name="revanced_ryd_enable_summary_on">Les \"Je n\'aime pas\" sont affichés</string>
|
<string name="revanced_ryd_enabled_summary_on">Les \"Je n\'aime pas\" sont affichés</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">Les \"Je n\'aime pas\" ne sont pas affichés</string>
|
<string name="revanced_ryd_enabled_summary_off">Les \"Je n\'aime pas\" ne sont pas affichés</string>
|
||||||
<string name="revanced_ryd_shorts_title">Afficher les \"Je n\'aime pas\" sur les Shorts</string>
|
<string name="revanced_ryd_shorts_title">Afficher les \"Je n\'aime pas\" sur les Shorts</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Les \"Je n'aime pas\" sont affichés sur les Shorts
|
<string name="revanced_ryd_shorts_summary_on">"Les \"Je n'aime pas\" sont affichés sur les Shorts
|
||||||
|
|
||||||
Limitation : Il se peut que les \"Je n'aime pas\" n'apparaissent pas en mode navigation privée"</string>
|
Limitation : Il se peut que les \"Je n'aime pas\" n'apparaissent pas en mode navigation privée"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">Les \"Je n\'aime pas\" ne sont pas affichés sur les Shorts</string>
|
<string name="revanced_ryd_shorts_summary_off">Les \"Je n\'aime pas\" ne sont pas affichés sur les Shorts</string>
|
||||||
@@ -851,7 +866,6 @@ Limitation : Il se peut que les \"Je n'aime pas\" n'apparaissent pas en mode na
|
|||||||
<string name="revanced_ryd_toast_on_connection_error_title">Afficher un message toast si l\'API n\'est pas disponible</string>
|
<string name="revanced_ryd_toast_on_connection_error_title">Afficher un message toast si l\'API n\'est pas disponible</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">Un message toast est affiché si Return YouTube Dislike n\'est pas disponible</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_on">Un message toast est affiché si Return YouTube Dislike n\'est pas disponible</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">Aucun message toast affiché si Return YouTube Dislike n\'est pas disponible</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_off">Aucun message toast affiché si Return YouTube Dislike n\'est pas disponible</string>
|
||||||
<string name="revanced_ryd_about">À propos</string>
|
|
||||||
<string name="revanced_ryd_attribution_summary">Les données sont fournies par l\'API Return YouTube Dislike. Appuyez ici pour en savoir plus.</string>
|
<string name="revanced_ryd_attribution_summary">Les données sont fournies par l\'API Return YouTube Dislike. Appuyez ici pour en savoir plus.</string>
|
||||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||||
<string name="revanced_ryd_statistics_category_title">Statistiques de l\'API Return Youtube Dislike pour cet appareil</string>
|
<string name="revanced_ryd_statistics_category_title">Statistiques de l\'API Return Youtube Dislike pour cet appareil</string>
|
||||||
@@ -1057,7 +1071,7 @@ Prêt à soumettre ?"</string>
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_title">Modifier la durée du segment manuellement</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_title">Modifier la durée du segment manuellement</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_content">Voulez-vous modifier le début ou la fin du segment ?</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_content">Voulez-vous modifier le début ou la fin du segment ?</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Temps fourni invalide</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Temps fourni invalide</string>
|
||||||
<string name="revanced_sb_stats">Statistiques</string>
|
<string name="revanced_sb_stats_title">Statistiques</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||||
<string name="revanced_sb_stats_connection_failure">Les statistiques sont temporairement indisponibles (API injoignable)</string>
|
<string name="revanced_sb_stats_connection_failure">Les statistiques sont temporairement indisponibles (API injoignable)</string>
|
||||||
<string name="revanced_sb_stats_loading">Chargement...</string>
|
<string name="revanced_sb_stats_loading">Chargement...</string>
|
||||||
@@ -1086,8 +1100,8 @@ Prêt à soumettre ?"</string>
|
|||||||
<string name="revanced_sb_color_invalid">Code couleur invalide</string>
|
<string name="revanced_sb_color_invalid">Code couleur invalide</string>
|
||||||
<string name="revanced_sb_reset_color">Réinitialiser la couleur</string>
|
<string name="revanced_sb_reset_color">Réinitialiser la couleur</string>
|
||||||
<string name="revanced_sb_reset">Réinitialiser</string>
|
<string name="revanced_sb_reset">Réinitialiser</string>
|
||||||
<string name="revanced_sb_about">À propos</string>
|
<string name="revanced_sb_about_title">À propos</string>
|
||||||
<string name="revanced_sb_about_api_sum">Les données sont fournies par l\'API SponsorBlock. Appuyez ici pour en savoir plus et pour voir les téléchargements pour les autres plateformes.</string>
|
<string name="revanced_sb_about_api_summary">Les données sont fournies par l\'API SponsorBlock. Appuyez ici pour en savoir plus et pour voir les téléchargements pour les autres plateformes.</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||||
<string name="revanced_change_form_factor_title">Format de mise en page</string>
|
<string name="revanced_change_form_factor_title">Format de mise en page</string>
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_settings_import_reset">Athshocraigh socruithe ReVanced go réamhshocrú</string>
|
<string name="revanced_settings_import_reset">Athshocraigh socruithe ReVanced go réamhshocrú</string>
|
||||||
<string name="revanced_settings_import_success">Iompórtáladh %d socruithe</string>
|
<string name="revanced_settings_import_success">Iompórtáladh %d socruithe</string>
|
||||||
<string name="revanced_settings_import_failure_parse">Theip ar allmhairiú: %s</string>
|
<string name="revanced_settings_import_failure_parse">Theip ar allmhairiú: %s</string>
|
||||||
|
<string name="revanced_settings_search_hint">Cuardaigh socruithe</string>
|
||||||
|
<string name="revanced_settings_search_no_results_title">Ní bhfuarthas aon toradh ar \'%s\'</string>
|
||||||
|
<string name="revanced_settings_search_no_results_summary">Bain triail as eochairfhocal eile</string>
|
||||||
|
<string name="revanced_settings_search_remove_message">Bain as stair an chuardaigh?</string>
|
||||||
<string name="revanced_show_menu_icons_title">Taispeáin deilbhíní socruithe ReVanced</string>
|
<string name="revanced_show_menu_icons_title">Taispeáin deilbhíní socruithe ReVanced</string>
|
||||||
<string name="revanced_show_menu_icons_summary_on">Taispeántar deilbhíní socruithe</string>
|
<string name="revanced_show_menu_icons_summary_on">Taispeántar deilbhíní socruithe</string>
|
||||||
<string name="revanced_show_menu_icons_summary_off">Ní thaispeántar deilbhíní socraithe</string>
|
<string name="revanced_show_menu_icons_summary_off">Ní thaispeántar deilbhíní socraithe</string>
|
||||||
@@ -93,6 +97,9 @@ Brúigh an cnaipe leanúnaí agus ligean athruithe optúimíochta."</string>
|
|||||||
<string name="revanced_restore_old_settings_menus_title">Athshocraigh roghanna seanghléasanna</string>
|
<string name="revanced_restore_old_settings_menus_title">Athshocraigh roghanna seanghléasanna</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_on">Taispeántar sean-roghchláir socruithe</string>
|
<string name="revanced_restore_old_settings_menus_summary_on">Taispeántar sean-roghchláir socruithe</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_off">Ní thaispeántar sean-roghchláir socruithe</string>
|
<string name="revanced_restore_old_settings_menus_summary_off">Ní thaispeántar sean-roghchláir socruithe</string>
|
||||||
|
<string name="revanced_settings_search_history_title">Taispeáin stair cuardaigh na socruithe</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_on">Taispeántar stair cuardaigh na socruithe</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_off">Ní thaispeántar stair cuardaigh na socruithe</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||||
<string name="revanced_shorts_disable_background_playback_title">Díchumasaigh seinnte Cúlra Shorts</string>
|
<string name="revanced_shorts_disable_background_playback_title">Díchumasaigh seinnte Cúlra Shorts</string>
|
||||||
@@ -114,9 +121,9 @@ Brúigh an cnaipe leanúnaí agus ligean athruithe optúimíochta."</string>
|
|||||||
<string name="revanced_debug_toast_on_error_title">Taispeáin tósta ar earráid ReVanced</string>
|
<string name="revanced_debug_toast_on_error_title">Taispeáin tósta ar earráid ReVanced</string>
|
||||||
<string name="revanced_debug_toast_on_error_summary_on">Taispeántar toast má tharlaíonn earráid</string>
|
<string name="revanced_debug_toast_on_error_summary_on">Taispeántar toast má tharlaíonn earráid</string>
|
||||||
<string name="revanced_debug_toast_on_error_summary_off">Ní thaispeántar toast má tharlaíonn earráid</string>
|
<string name="revanced_debug_toast_on_error_summary_off">Ní thaispeántar toast má tharlaíonn earráid</string>
|
||||||
<string name="revanced_debug_toast_on_error_user_dialog_message">"Díchumasaíonn an rogha toasts earráide fógraí earráide ReVanced go léir.
|
<string name="revanced_debug_toast_on_error_user_dialog_message">"Má mhúchtar tóstaí earráide, folaítear gach fógra earráide ReVanced.
|
||||||
|
|
||||||
Ní bheidh a fhios agat faoi aon imeachtaí neamhghnácha."</string>
|
Ní chuirfear ar an eolas thú faoi aon imeachtaí gan choinne."</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||||
<string name="revanced_hide_album_cards_title">Folaigh cártaí albam</string>
|
<string name="revanced_hide_album_cards_title">Folaigh cártaí albam</string>
|
||||||
@@ -153,10 +160,10 @@ Ní bheidh a fhios agat faoi aon imeachtaí neamhghnácha."</string>
|
|||||||
<string name="revanced_hide_notify_me_button_title">Folaigh cnaipe \'Cuir in iúl dom\'</string>
|
<string name="revanced_hide_notify_me_button_title">Folaigh cnaipe \'Cuir in iúl dom\'</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">Tá an cnaipe i bhfolach</string>
|
<string name="revanced_hide_notify_me_button_summary_on">Tá an cnaipe i bhfolach</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">Taispeántar an cnaipe</string>
|
<string name="revanced_hide_notify_me_button_summary_off">Taispeántar an cnaipe</string>
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">Folaigh an lipéad \'D\'amharc daoine eile freisin\'</string>
|
<string name="revanced_hide_search_result_recommendation_labels_title">Folaigh lipéid moltaí físeáin</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_on">Tá an lipéad i bhfolach</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_on">Tá lipéid \",,D’fhéach daoine eile air freisin\",, agus \",,B’fhéidir gur mhaith leat é seo freisin\",, folaithe</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">Taispeántar an lipéad</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_off">Tá lipéid \",,D’fhéach daoine eile air freisin\",, agus \",,B’fhéidir gur mhaith leat é seo freisin\",, ar taispeáint</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">Folaigh cnaipe \'Taispeáin tuilleadh\'</string>
|
<string name="revanced_hide_show_more_button_title">Folaigh cnaipe \'Taispeáin tuilleadh\'</string>
|
||||||
@@ -205,11 +212,11 @@ Ní bheidh a fhios agat faoi aon imeachtaí neamhghnácha."</string>
|
|||||||
<string name="revanced_hide_medical_panels_summary_on">Tá painéil leighis i bhfolach</string>
|
<string name="revanced_hide_medical_panels_summary_on">Tá painéil leighis i bhfolach</string>
|
||||||
<string name="revanced_hide_medical_panels_summary_off">Taispeántar painéil leighis</string>
|
<string name="revanced_hide_medical_panels_summary_off">Taispeántar painéil leighis</string>
|
||||||
<string name="revanced_hide_channel_bar_title">Folaigh barra cainéal</string>
|
<string name="revanced_hide_channel_bar_title">Folaigh barra cainéal</string>
|
||||||
<string name="revanced_hide_channel_bar_summary_on">Tá barra cainéal i bhfolach</string>
|
<string name="revanced_hide_channel_bar_summary_on">Tá an barra Cainéal i bhfolach</string>
|
||||||
<string name="revanced_hide_channel_bar_summary_off">Taispeántar barra cainéal</string>
|
<string name="revanced_hide_channel_bar_summary_off">Taispeántar barra an chainéil</string>
|
||||||
<string name="revanced_hide_playables_title">Folaigh Rudaí Inimeartha</string>
|
<string name="revanced_hide_playables_title">Folaigh na heilimintí inseinnte</string>
|
||||||
<string name="revanced_hide_playables_summary_on">Tá rudaí inimeartha i bhfolach</string>
|
<string name="revanced_hide_playables_summary_on">Tá na heilimintí inseinnte i bhfolach</string>
|
||||||
<string name="revanced_hide_playables_summary_off">Taispeántar rudaí inimeartha</string>
|
<string name="revanced_hide_playables_summary_off">Taispeántar na heilimintí inseinnte</string>
|
||||||
<string name="revanced_hide_quick_actions_title">Folaigh gníomhartha gasta i lánscáileán</string>
|
<string name="revanced_hide_quick_actions_title">Folaigh gníomhartha gasta i lánscáileán</string>
|
||||||
<string name="revanced_hide_quick_actions_summary_on">Tá gníomhartha gasta i bhfolach</string>
|
<string name="revanced_hide_quick_actions_summary_on">Tá gníomhartha gasta i bhfolach</string>
|
||||||
<string name="revanced_hide_quick_actions_summary_off">Taispeántar gníomhartha tapa</string>
|
<string name="revanced_hide_quick_actions_summary_off">Taispeántar gníomhartha tapa</string>
|
||||||
@@ -231,6 +238,9 @@ Ní bheidh a fhios agat faoi aon imeachtaí neamhghnácha."</string>
|
|||||||
<string name="revanced_hide_ai_generated_video_summary_section_title">Folaigh \'Achoimre físeáin arna giniúint ag AI\'</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_title">Folaigh \'Achoimre físeáin arna giniúint ag AI\'</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Tá an chuid achoimre físeáin i bhfolach</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Tá an chuid achoimre físeáin i bhfolach</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Taispeántar an chuid achoimre físeáin</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Taispeántar an chuid achoimre físeáin</string>
|
||||||
|
<string name="revanced_hide_ask_section_title">Folaigh Fiafraigh</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_on">Tá rannóg na Fiafraí i bhfolach</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_off">Taispeántar rannóg na Fiafraí</string>
|
||||||
<string name="revanced_hide_attributes_section_title">Folaigh Tréithe</string>
|
<string name="revanced_hide_attributes_section_title">Folaigh Tréithe</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_on">Tá ailt d\'áiteanna sonracha, Cluichí, Ceol agus Daoine a luaitear i bhfolach</string>
|
<string name="revanced_hide_attributes_section_summary_on">Tá ailt d\'áiteanna sonracha, Cluichí, Ceol agus Daoine a luaitear i bhfolach</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">Taispeántar ailt d\'áiteanna sonracha, Cluichí, Ceol agus Daoine a luaitear</string>
|
<string name="revanced_hide_attributes_section_summary_off">Taispeántar ailt d\'áiteanna sonracha, Cluichí, Ceol agus Daoine a luaitear</string>
|
||||||
@@ -794,6 +804,11 @@ Is féidir an uathshein a athrú i socruithe YouTube:
|
|||||||
Socruithe → Athsheinm → Uathshein físeán eile"</string>
|
Socruithe → Athsheinm → Uathshein físeán eile"</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_off">Taispeántar físeán molta deireadh scáileáin</string>
|
<string name="revanced_end_screen_suggested_video_summary_off">Taispeántar físeán molta deireadh scáileáin</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
<string name="revanced_hide_related_video_overlay_title">Folaigh forleagan físeáin ghaolmhair i mód lánscáileáin</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_on">Tá forleagan físeáin ghaolmhair i bhfolach</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_off">Taispeántar forleagan físeáin ghaolmhair</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">Folaigh stampa ama an fhíseáin</string>
|
<string name="revanced_hide_timestamp_title">Folaigh stampa ama an fhíseáin</string>
|
||||||
<string name="revanced_hide_timestamp_summary_on">Tá stampa ama i bhfolach</string>
|
<string name="revanced_hide_timestamp_summary_on">Tá stampa ama i bhfolach</string>
|
||||||
@@ -831,10 +846,10 @@ Socruithe → Athsheinm → Uathshein físeán eile"</string>
|
|||||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Athlódáil físeán chun vótáil ag baint úsáide as Return YouTube Dislike</string>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Athlódáil físeán chun vótáil ag baint úsáide as Return YouTube Dislike</string>
|
||||||
<!-- Video likes have been set to hidden by the video uploader. -->
|
<!-- Video likes have been set to hidden by the video uploader. -->
|
||||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">I bhfolach ag úinéir</string>
|
<string name="revanced_ryd_video_likes_hidden_by_video_owner">I bhfolach ag úinéir</string>
|
||||||
<string name="revanced_ryd_enable_summary_on">Taispeántar rudaí nach dtaitníonn leo</string>
|
<string name="revanced_ryd_enabled_summary_on">Taispeántar rudaí nach dtaitníonn leo</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">Ní thaispeántar nach dtaitníonn leat</string>
|
<string name="revanced_ryd_enabled_summary_off">Ní thaispeántar nach dtaitníonn leat</string>
|
||||||
<string name="revanced_ryd_shorts_title">Taispeáin neamhthaitníonn ar Shorts</string>
|
<string name="revanced_ryd_shorts_title">Taispeáin neamhthaitníonn ar Shorts</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Taispeántar easaontais ar Shorts
|
<string name="revanced_ryd_shorts_summary_on">"Taispeántar easaontais ar Shorts
|
||||||
|
|
||||||
Srianadh: Bíodh easaontais gan teacht ar taispeáint sa mhodh incognito"</string>
|
Srianadh: Bíodh easaontais gan teacht ar taispeáint sa mhodh incognito"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">Ní thaispeántar easaontais ar Shorts</string>
|
<string name="revanced_ryd_shorts_summary_off">Ní thaispeántar easaontais ar Shorts</string>
|
||||||
@@ -851,7 +866,6 @@ Srianadh: Bíodh easaontais gan teacht ar taispeáint sa mhodh incognito"</strin
|
|||||||
<string name="revanced_ryd_toast_on_connection_error_title">Taispeáin tósta mura bhfuil API ar fáil</string>
|
<string name="revanced_ryd_toast_on_connection_error_title">Taispeáin tósta mura bhfuil API ar fáil</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">Taispeántar tósta mura bhfuil Return YouTube Dislike ar fáil</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_on">Taispeántar tósta mura bhfuil Return YouTube Dislike ar fáil</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">Ní thaispeántar tóst mura bhfuil Return YouTube Dislike ar fáil</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_off">Ní thaispeántar tóst mura bhfuil Return YouTube Dislike ar fáil</string>
|
||||||
<string name="revanced_ryd_about">Maidir</string>
|
|
||||||
<string name="revanced_ryd_attribution_summary">Soláthraíonn an API Return YouTube Dislike sonraí. Tapáil anseo chun tuilleadh a fhoghlaim</string>
|
<string name="revanced_ryd_attribution_summary">Soláthraíonn an API Return YouTube Dislike sonraí. Tapáil anseo chun tuilleadh a fhoghlaim</string>
|
||||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||||
<string name="revanced_ryd_statistics_category_title">Staitisticí API returnieYouTubeDislike den fheiste seo</string>
|
<string name="revanced_ryd_statistics_category_title">Staitisticí API returnieYouTubeDislike den fheiste seo</string>
|
||||||
@@ -1058,7 +1072,7 @@ Maithe chun cur isteach?"</string>
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_title">Cuir uainiú deighleog in eagar</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_title">Cuir uainiú deighleog in eagar</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_content">Ar mhaith leat an t-am a chur in eagar do thús nó deireadh an deighleog?</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_content">Ar mhaith leat an t-am a chur in eagar do thús nó deireadh an deighleog?</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Am neamhbhailí tugtha</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Am neamhbhailí tugtha</string>
|
||||||
<string name="revanced_sb_stats">Staitisticí</string>
|
<string name="revanced_sb_stats_title">Staitisticí</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||||
<string name="revanced_sb_stats_connection_failure">Níl stats ar fáil go sealadach (tá API síos)</string>
|
<string name="revanced_sb_stats_connection_failure">Níl stats ar fáil go sealadach (tá API síos)</string>
|
||||||
<string name="revanced_sb_stats_loading">Á lódáil...</string>
|
<string name="revanced_sb_stats_loading">Á lódáil...</string>
|
||||||
@@ -1087,8 +1101,8 @@ Maithe chun cur isteach?"</string>
|
|||||||
<string name="revanced_sb_color_invalid">Cód dath neamhbhailí</string>
|
<string name="revanced_sb_color_invalid">Cód dath neamhbhailí</string>
|
||||||
<string name="revanced_sb_reset_color">Athshocraigh dath</string>
|
<string name="revanced_sb_reset_color">Athshocraigh dath</string>
|
||||||
<string name="revanced_sb_reset">Athshocraigh</string>
|
<string name="revanced_sb_reset">Athshocraigh</string>
|
||||||
<string name="revanced_sb_about">Maidir</string>
|
<string name="revanced_sb_about_title">Maidir</string>
|
||||||
<string name="revanced_sb_about_api_sum">Soláthraíonn an API SponsorBlock sonraí. Tapáil anseo chun níos mó a fhoghlaim agus íoslódálacha a fheiceáil d\'ardáin eile</string>
|
<string name="revanced_sb_about_api_summary">Soláthraíonn an API SponsorBlock sonraí. Tapáil anseo chun níos mó a fhoghlaim agus íoslódálacha a fheiceáil d\'ardáin eile</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||||
<string name="revanced_change_form_factor_title">Fábos fóirmeanna foirmiúin</string>
|
<string name="revanced_change_form_factor_title">Fábos fóirmeanna foirmiúin</string>
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ Second \"item\" text"</string>
|
|||||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
<!-- '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. -->
|
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||||
@@ -134,6 +134,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ Second \"item\" text"</string>
|
|||||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
<!-- '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. -->
|
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||||
@@ -134,6 +134,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ Second \"item\" text"</string>
|
|||||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
<!-- '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. -->
|
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||||
@@ -134,6 +134,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ Second \"item\" text"</string>
|
|||||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
<!-- '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. -->
|
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||||
@@ -134,6 +134,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_settings_import_reset">A ReVanced beállítások visszaállnak az alapértelmezettre</string>
|
<string name="revanced_settings_import_reset">A ReVanced beállítások visszaállnak az alapértelmezettre</string>
|
||||||
<string name="revanced_settings_import_success">%d beállítás importálva</string>
|
<string name="revanced_settings_import_success">%d beállítás importálva</string>
|
||||||
<string name="revanced_settings_import_failure_parse">Sikertelen importálás: %s</string>
|
<string name="revanced_settings_import_failure_parse">Sikertelen importálás: %s</string>
|
||||||
|
<string name="revanced_settings_search_hint">Beállítások keresése</string>
|
||||||
|
<string name="revanced_settings_search_no_results_title">Nincs találat erre: „%s”</string>
|
||||||
|
<string name="revanced_settings_search_no_results_summary">Próbáljon ki egy másik kulcsszót</string>
|
||||||
|
<string name="revanced_settings_search_remove_message">Eltávolítja a keresési előzményekből?</string>
|
||||||
<string name="revanced_show_menu_icons_title">ReVanced beállításikonok megjelenítése</string>
|
<string name="revanced_show_menu_icons_title">ReVanced beállításikonok megjelenítése</string>
|
||||||
<string name="revanced_show_menu_icons_summary_on">A beállításikonok láthatók</string>
|
<string name="revanced_show_menu_icons_summary_on">A beállításikonok láthatók</string>
|
||||||
<string name="revanced_show_menu_icons_summary_off">A beállítások ikonjai nem jelennek meg</string>
|
<string name="revanced_show_menu_icons_summary_off">A beállítások ikonjai nem jelennek meg</string>
|
||||||
@@ -93,6 +97,9 @@ Kattintson a folytatás gombra, és engedélyezze az optimalizálási módosít
|
|||||||
<string name="revanced_restore_old_settings_menus_title">Régi beállítási menük visszaállítása</string>
|
<string name="revanced_restore_old_settings_menus_title">Régi beállítási menük visszaállítása</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_on">A régi beállítások menüpontok megjelennek</string>
|
<string name="revanced_restore_old_settings_menus_summary_on">A régi beállítások menüpontok megjelennek</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_off">A régi beállítások menüpontok nem jelennek meg</string>
|
<string name="revanced_restore_old_settings_menus_summary_off">A régi beállítások menüpontok nem jelennek meg</string>
|
||||||
|
<string name="revanced_settings_search_history_title">Beállítások keresési előzményeinek megjelenítése</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_on">A beállítások keresési előzményei láthatók</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_off">A beállítások keresési előzményei nincsenek megjelenítve</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||||
<string name="revanced_shorts_disable_background_playback_title">A Shorts háttérben történő lejátszásának letiltása</string>
|
<string name="revanced_shorts_disable_background_playback_title">A Shorts háttérben történő lejátszásának letiltása</string>
|
||||||
@@ -153,10 +160,10 @@ Nem fog értesülni semmilyen váratlan eseményről."</string>
|
|||||||
<string name="revanced_hide_notify_me_button_title">\"Értesítést kérek\" gomb elrejtése</string>
|
<string name="revanced_hide_notify_me_button_title">\"Értesítést kérek\" gomb elrejtése</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">A gomb el van rejtve</string>
|
<string name="revanced_hide_notify_me_button_summary_on">A gomb el van rejtve</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">A gomb megjelenik</string>
|
<string name="revanced_hide_notify_me_button_summary_off">A gomb megjelenik</string>
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">A(z) „Mások is megnézték” felirat elrejtése</string>
|
<string name="revanced_hide_search_result_recommendation_labels_title">Videóajánló címkék elrejtése</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_on">A címke rejtett</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_on">A „Nézők emellett ezt is megnézték” és a „Neked is tetszhet” címkék rejtve vannak</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">A címke látható</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_off">A „Nézők emellett ezt is megnézték” és a „Neked is tetszhet” címkék láthatók</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">\'Továbbiak megjelenítése\' gomb elrejtése</string>
|
<string name="revanced_hide_show_more_button_title">\'Továbbiak megjelenítése\' gomb elrejtése</string>
|
||||||
@@ -231,6 +238,9 @@ Nem fog értesülni semmilyen váratlan eseményről."</string>
|
|||||||
<string name="revanced_hide_ai_generated_video_summary_section_title">„AI-generált videó összefoglaló” elrejtése</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_title">„AI-generált videó összefoglaló” elrejtése</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">A videó összefoglaló szekció rejtve</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">A videó összefoglaló szekció rejtve</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">A videó összefoglaló szekció látható</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">A videó összefoglaló szekció látható</string>
|
||||||
|
<string name="revanced_hide_ask_section_title">Kérdezés elrejtése</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_on">A kérdezés szakasz el van rejtve</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_off">A kérdezés szakasz megjelenik</string>
|
||||||
<string name="revanced_hide_attributes_section_title">Attribútumok elrejtése</string>
|
<string name="revanced_hide_attributes_section_title">Attribútumok elrejtése</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_on">A kiemelt helyek, játékok, zene és említett személyek szakaszai rejtettek</string>
|
<string name="revanced_hide_attributes_section_summary_on">A kiemelt helyek, játékok, zene és említett személyek szakaszai rejtettek</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">A kiemelt helyek, játékok, zene és említett személyek szakaszai láthatók</string>
|
<string name="revanced_hide_attributes_section_summary_off">A kiemelt helyek, játékok, zene és említett személyek szakaszai láthatók</string>
|
||||||
@@ -794,6 +804,11 @@ Az automatikus lejátszás a YouTube beállításaiban módosítható:
|
|||||||
Beállítások → Lejátszás → Következő videó automatikus lejátszása"</string>
|
Beállítások → Lejátszás → Következő videó automatikus lejátszása"</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_off">A befejező képernyőn lévő javasolt videó látható</string>
|
<string name="revanced_end_screen_suggested_video_summary_off">A befejező képernyőn lévő javasolt videó látható</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
<string name="revanced_hide_related_video_overlay_title">Kapcsolódó videó fedőréteg elrejtése teljes képernyőn</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_on">A kapcsolódó videó fedőréteg rejtve van</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_off">A kapcsolódó videó fedőréteg látható</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">Videó időbélyegzőjének elrejtése</string>
|
<string name="revanced_hide_timestamp_title">Videó időbélyegzőjének elrejtése</string>
|
||||||
<string name="revanced_hide_timestamp_summary_on">Az időbélyegző elrejtve</string>
|
<string name="revanced_hide_timestamp_summary_on">Az időbélyegző elrejtve</string>
|
||||||
@@ -831,10 +846,10 @@ Beállítások → Lejátszás → Következő videó automatikus lejátszása"<
|
|||||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Töltse újra a videót a Return YouTube Dislike-hoz</string>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Töltse újra a videót a Return YouTube Dislike-hoz</string>
|
||||||
<!-- Video likes have been set to hidden by the video uploader. -->
|
<!-- Video likes have been set to hidden by the video uploader. -->
|
||||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">A tulajdonos elrejtette</string>
|
<string name="revanced_ryd_video_likes_hidden_by_video_owner">A tulajdonos elrejtette</string>
|
||||||
<string name="revanced_ryd_enable_summary_on">A nem tetszések megjelennek</string>
|
<string name="revanced_ryd_enabled_summary_on">A nem tetszések megjelennek</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">A nem tetszések nem jelennek meg</string>
|
<string name="revanced_ryd_enabled_summary_off">A nem tetszések nem jelennek meg</string>
|
||||||
<string name="revanced_ryd_shorts_title">A nem tetszések megjelenítése a Shorts videóknál</string>
|
<string name="revanced_ryd_shorts_title">A nem tetszések megjelenítése a Shorts videóknál</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"A nem tetszések a Shorts-on láthatók
|
<string name="revanced_ryd_shorts_summary_on">"A nem tetszések a Shorts-on láthatók
|
||||||
|
|
||||||
Korlátozás: A nem tetszések inkognitómódban nem jelenhetnek meg"</string>
|
Korlátozás: A nem tetszések inkognitómódban nem jelenhetnek meg"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">A nem tetszések a Shorts-on nem láthatók</string>
|
<string name="revanced_ryd_shorts_summary_off">A nem tetszések a Shorts-on nem láthatók</string>
|
||||||
@@ -851,7 +866,6 @@ Korlátozás: A nem tetszések inkognitómódban nem jelenhetnek meg"</string>
|
|||||||
<string name="revanced_ryd_toast_on_connection_error_title">Üzenet megjelenítése, ha az API nem elérhető</string>
|
<string name="revanced_ryd_toast_on_connection_error_title">Üzenet megjelenítése, ha az API nem elérhető</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">Üzenet megjelenítése, ha a Return YouTube Dislike nem elérhető</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_on">Üzenet megjelenítése, ha a Return YouTube Dislike nem elérhető</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">Nem jelenik meg üzenet, ha a Return YouTube Dislike nem elérhető</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_off">Nem jelenik meg üzenet, ha a Return YouTube Dislike nem elérhető</string>
|
||||||
<string name="revanced_ryd_about">Rólunk</string>
|
|
||||||
<string name="revanced_ryd_attribution_summary">Az adatokat a Return YouTube Dislike API biztosítja. További információért koppintson ide</string>
|
<string name="revanced_ryd_attribution_summary">Az adatokat a Return YouTube Dislike API biztosítja. További információért koppintson ide</string>
|
||||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||||
<string name="revanced_ryd_statistics_category_title">ReturnYouTubeDislike API statisztika az eszközön</string>
|
<string name="revanced_ryd_statistics_category_title">ReturnYouTubeDislike API statisztika az eszközön</string>
|
||||||
@@ -1057,7 +1071,7 @@ Készen állsz a beküldésre?"</string>
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_title">A szakasz időzítésének kézi beállítása</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_title">A szakasz időzítésének kézi beállítása</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_content">Akarja szerkeszteni a rész kezdetének vagy végének időzítését?</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_content">Akarja szerkeszteni a rész kezdetének vagy végének időzítését?</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Érvénytelen idő van megadva</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Érvénytelen idő van megadva</string>
|
||||||
<string name="revanced_sb_stats">Statisztikák</string>
|
<string name="revanced_sb_stats_title">Statisztikák</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||||
<string name="revanced_sb_stats_connection_failure">A statisztikák átmenetileg nem érhetők el (az API nem működik)</string>
|
<string name="revanced_sb_stats_connection_failure">A statisztikák átmenetileg nem érhetők el (az API nem működik)</string>
|
||||||
<string name="revanced_sb_stats_loading">Betöltés...</string>
|
<string name="revanced_sb_stats_loading">Betöltés...</string>
|
||||||
@@ -1086,8 +1100,8 @@ Készen állsz a beküldésre?"</string>
|
|||||||
<string name="revanced_sb_color_invalid">Érvénytelen színkód</string>
|
<string name="revanced_sb_color_invalid">Érvénytelen színkód</string>
|
||||||
<string name="revanced_sb_reset_color">Színek visszaállítása</string>
|
<string name="revanced_sb_reset_color">Színek visszaállítása</string>
|
||||||
<string name="revanced_sb_reset">Visszaállítás</string>
|
<string name="revanced_sb_reset">Visszaállítás</string>
|
||||||
<string name="revanced_sb_about">Rólunk</string>
|
<string name="revanced_sb_about_title">Rólunk</string>
|
||||||
<string name="revanced_sb_about_api_sum">Az adatokat a SponsorBlock API biztosítja. Koppintson ide, ha többet szeretne megtudni és megtekintené a letöltéseket más platformokra</string>
|
<string name="revanced_sb_about_api_summary">Az adatokat a SponsorBlock API biztosítja. Koppintson ide, ha többet szeretne megtudni és megtekintené a letöltéseket más platformokra</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||||
<string name="revanced_change_form_factor_title">Elrendezési űrlap faktor</string>
|
<string name="revanced_change_form_factor_title">Elrendezési űrlap faktor</string>
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_settings_import_reset">ReVanced կարգավորումները վերադրվել են դեֆոլտային</string>
|
<string name="revanced_settings_import_reset">ReVanced կարգավորումները վերադրվել են դեֆոլտային</string>
|
||||||
<string name="revanced_settings_import_success">Import %d կարգավորում</string>
|
<string name="revanced_settings_import_success">Import %d կարգավորում</string>
|
||||||
<string name="revanced_settings_import_failure_parse">Import-ը ձախողվել է։ %s</string>
|
<string name="revanced_settings_import_failure_parse">Import-ը ձախողվել է։ %s</string>
|
||||||
|
<string name="revanced_settings_search_hint">Որոնման կարգավորումներ</string>
|
||||||
|
<string name="revanced_settings_search_no_results_title">«%s»-ի համար արդյունքներ չեն գտնվել</string>
|
||||||
|
<string name="revanced_settings_search_no_results_summary">Փորձեք այլ հիմնաբառ</string>
|
||||||
|
<string name="revanced_settings_search_remove_message">Հեռացնե՞լ որոնման պատմությունից:</string>
|
||||||
<string name="revanced_show_menu_icons_title">Ցուցադրել ReVanced-ի կարգավորումների պատկերակները</string>
|
<string name="revanced_show_menu_icons_title">Ցուցադրել ReVanced-ի կարգավորումների պատկերակները</string>
|
||||||
<string name="revanced_show_menu_icons_summary_on">Կարգավորումների պատկերակները ցուցադրվում են</string>
|
<string name="revanced_show_menu_icons_summary_on">Կարգավորումների պատկերակները ցուցադրվում են</string>
|
||||||
<string name="revanced_show_menu_icons_summary_off">Կարգավորումների պատկերակները ցուցադրված չեն</string>
|
<string name="revanced_show_menu_icons_summary_off">Կարգավորումների պատկերակները ցուցադրված չեն</string>
|
||||||
@@ -93,6 +97,9 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել
|
|||||||
<string name="revanced_restore_old_settings_menus_title">Վերականգնել հին սահմանումների մենյուները</string>
|
<string name="revanced_restore_old_settings_menus_title">Վերականգնել հին սահմանումների մենյուները</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_on">Նախկին կարգավորումների մենյուները ցուցադրվում են</string>
|
<string name="revanced_restore_old_settings_menus_summary_on">Նախկին կարգավորումների մենյուները ցուցադրվում են</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_off">Նախկին կարգավորումների մենյուները չեն ցուցադրվում</string>
|
<string name="revanced_restore_old_settings_menus_summary_off">Նախկին կարգավորումների մենյուները չեն ցուցադրվում</string>
|
||||||
|
<string name="revanced_settings_search_history_title">Ցույց տալ կարգավորումների որոնման պատմությունը</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_on">Կարգավորումների որոնման պատմությունը ցուցադրվում է</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_off">Կարգավորումների որոնման պատմությունը ցույց չի տրվում</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||||
<string name="revanced_shorts_disable_background_playback_title">Անջատել Shorts-ի ֆոնային վերարտադրությունը</string>
|
<string name="revanced_shorts_disable_background_playback_title">Անջատել Shorts-ի ֆոնային վերարտադրությունը</string>
|
||||||
@@ -153,10 +160,10 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել
|
|||||||
<string name="revanced_hide_notify_me_button_title">Թաքցնել \'Notify me\' կոճակը</string>
|
<string name="revanced_hide_notify_me_button_title">Թաքցնել \'Notify me\' կոճակը</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">Կոճակը թաքցված է</string>
|
<string name="revanced_hide_notify_me_button_summary_on">Կոճակը թաքցված է</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">Կոճակը ցույց է տրվում</string>
|
<string name="revanced_hide_notify_me_button_summary_off">Կոճակը ցույց է տրվում</string>
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">Թաքցնել \"Դիտողները նաև դիտել են\" պիտակը</string>
|
<string name="revanced_hide_search_result_recommendation_labels_title">Թաքցնել տեսանյութի առաջարկությունների պիտակները</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_on">Պիտակը թաքցված է</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_on">«Դիտել են նաև» և «Ձեզ նույնպես կարող է դուր գալ» պիտակները թաքցված են</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">Պիտակը ցուցադրվում է</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_off">«Դիտել են նաև» և «Ձեզ նույնպես կարող է դուր գալ» պիտակները ցուցադրվում են</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">Թաքցնել \'Show more\' կոճակը</string>
|
<string name="revanced_hide_show_more_button_title">Թաքցնել \'Show more\' կոճակը</string>
|
||||||
@@ -231,6 +238,9 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել
|
|||||||
<string name="revanced_hide_ai_generated_video_summary_section_title">Թաքցնել «AI-ով ստեղծված տեսանյութի ամփոփումը»</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_title">Թաքցնել «AI-ով ստեղծված տեսանյութի ամփոփումը»</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Տեսանյութի ամփոփման բաժինը թաքցված է</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Տեսանյութի ամփոփման բաժինը թաքցված է</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Տեսանյութի ամփոփման բաժինը ցուցադրվում է</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Տեսանյութի ամփոփման բաժինը ցուցադրվում է</string>
|
||||||
|
<string name="revanced_hide_ask_section_title">Թաքցնել հարցումը</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_on">Հարցումների բաժինը թաքցված է</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_off">Հարցումների բաժինը ցուցադրվում է</string>
|
||||||
<string name="revanced_hide_attributes_section_title">Թաքցնել հատկանիշները</string>
|
<string name="revanced_hide_attributes_section_title">Թաքցնել հատկանիշները</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_on">Առաջարկվող վայրերը, խաղերը, երաժշտությունը և նշված անձանց բաժինները թաքցված են</string>
|
<string name="revanced_hide_attributes_section_summary_on">Առաջարկվող վայրերը, խաղերը, երաժշտությունը և նշված անձանց բաժինները թաքցված են</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">Առաջարկվող վայրերը, խաղերը, երաժշտությունը և նշված անձանց բաժինները ցուցադրվում են</string>
|
<string name="revanced_hide_attributes_section_summary_off">Առաջարկվող վայրերը, խաղերը, երաժշտությունը և նշված անձանց բաժինները ցուցադրվում են</string>
|
||||||
@@ -794,6 +804,11 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել
|
|||||||
Կարգավորումներ → Վերարտադրում → Ավտոմատ նվագարկել հաջորդ տեսանյութը"</string>
|
Կարգավորումներ → Վերարտադրում → Ավտոմատ նվագարկել հաջորդ տեսանյութը"</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_off">Վերջնական էկրանին առաջարկվող տեսանյութը ցուցադրվում է</string>
|
<string name="revanced_end_screen_suggested_video_summary_off">Վերջնական էկրանին առաջարկվող տեսանյութը ցուցադրվում է</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
<string name="revanced_hide_related_video_overlay_title">Թաքցնել կապակցված տեսանյութի վահանակը լիաէկրան ռեժիմում</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_on">Կապակցված տեսանյութի վահանակը թաքցված է</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_off">Կապակցված տեսանյութի վահանակը ցուցադրվում է</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">Թաքցնել տեսանյութի ժամանակային կետը</string>
|
<string name="revanced_hide_timestamp_title">Թաքցնել տեսանյութի ժամանակային կետը</string>
|
||||||
<string name="revanced_hide_timestamp_summary_on">Ժամանակային կետը թաքցված է</string>
|
<string name="revanced_hide_timestamp_summary_on">Ժամանակային կետը թաքցված է</string>
|
||||||
@@ -831,10 +846,10 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել
|
|||||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Վերբեռնել տեսանյութը՝ քվեարկելու համար Return YouTube Dislike-ի միջոցով</string>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Վերբեռնել տեսանյութը՝ քվեարկելու համար Return YouTube Dislike-ի միջոցով</string>
|
||||||
<!-- Video likes have been set to hidden by the video uploader. -->
|
<!-- Video likes have been set to hidden by the video uploader. -->
|
||||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Թաքցված է սեփականատիրոջ կողմից</string>
|
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Թաքցված է սեփականատիրոջ կողմից</string>
|
||||||
<string name="revanced_ryd_enable_summary_on">\"Dislike\"-երը ցուցադրվում են</string>
|
<string name="revanced_ryd_enabled_summary_on">\"Dislike\"-երը ցուցադրվում են</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">\"Dislike\"-երը չեն ցուցադրվում</string>
|
<string name="revanced_ryd_enabled_summary_off">\"Dislike\"-երը չեն ցուցադրվում</string>
|
||||||
<string name="revanced_ryd_shorts_title">Ցուցադրել \"Dislike\"-երը Shorts-ում</string>
|
<string name="revanced_ryd_shorts_title">Ցուցադրել \"Dislike\"-երը Shorts-ում</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"\"Dislike\"-երը Shorts-ում ցուցադրվում են
|
<string name="revanced_ryd_shorts_summary_on">"\"Dislike\"-երը Shorts-ում ցուցադրվում են
|
||||||
|
|
||||||
Սահմանափակում. \"Dislike\"-երը կարող են չերևալ անհայտ ռեժիմում"</string>
|
Սահմանափակում. \"Dislike\"-երը կարող են չերևալ անհայտ ռեժիմում"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">\"Dislike\"-երը Shorts-ում չեն ցուցադրվում</string>
|
<string name="revanced_ryd_shorts_summary_off">\"Dislike\"-երը Shorts-ում չեն ցուցադրվում</string>
|
||||||
@@ -851,7 +866,6 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել
|
|||||||
<string name="revanced_ryd_toast_on_connection_error_title">Ցուցադրել \"toast\", եթե API-ն հասանելի չէ</string>
|
<string name="revanced_ryd_toast_on_connection_error_title">Ցուցադրել \"toast\", եթե API-ն հասանելի չէ</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">\"Toast\"-ը ցուցադրվում է, եթե Return YouTube Dislike-ը հասանելի չէ</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_on">\"Toast\"-ը ցուցադրվում է, եթե Return YouTube Dislike-ը հասանելի չէ</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">\"Toast\"-ը չի ցուցադրվում, եթե Return YouTube Dislike-ը հասանելի չէ</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_off">\"Toast\"-ը չի ցուցադրվում, եթե Return YouTube Dislike-ը հասանելի չէ</string>
|
||||||
<string name="revanced_ryd_about">Ծրագրի մասին</string>
|
|
||||||
<string name="revanced_ryd_attribution_summary">Տվյալները տրամադրվում են Return YouTube Dislike API-ի միջոցով. Սեղմեք այստեղ՝ ավելին իմանալու համար</string>
|
<string name="revanced_ryd_attribution_summary">Տվյալները տրամադրվում են Return YouTube Dislike API-ի միջոցով. Սեղմեք այստեղ՝ ավելին իմանալու համար</string>
|
||||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||||
<string name="revanced_ryd_statistics_category_title">Return YouTube Dislike API-ի կարգավիճակը այս հարմարանքի համար</string>
|
<string name="revanced_ryd_statistics_category_title">Return YouTube Dislike API-ի կարգավիճակը այս հարմարանքի համար</string>
|
||||||
@@ -1058,7 +1072,7 @@ Seekbar thumbnails-ները կօգտագործեն նույն որակը, ինչ
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_title">Խմբագրեք հատվածի ժամանակը ձեռքով</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_title">Խմբագրեք հատվածի ժամանակը ձեռքով</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_content">Մի՞թե ցանկանում եք խմբագրել հատվածի սկիզբը կամ ավարտը։</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_content">Մի՞թե ցանկանում եք խմբագրել հատվածի սկիզբը կամ ավարտը։</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Նշված ժամանակը անվավեր է</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Նշված ժամանակը անվավեր է</string>
|
||||||
<string name="revanced_sb_stats">Վիճակագրություն</string>
|
<string name="revanced_sb_stats_title">Վիճակագրություն</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||||
<string name="revanced_sb_stats_connection_failure">Վիճակագրությունը ժամանակավորապես հասանելի չէ (API-ն անջատված է)</string>
|
<string name="revanced_sb_stats_connection_failure">Վիճակագրությունը ժամանակավորապես հասանելի չէ (API-ն անջատված է)</string>
|
||||||
<string name="revanced_sb_stats_loading">Բեռնվում է...</string>
|
<string name="revanced_sb_stats_loading">Բեռնվում է...</string>
|
||||||
@@ -1087,8 +1101,8 @@ Seekbar thumbnails-ները կօգտագործեն նույն որակը, ինչ
|
|||||||
<string name="revanced_sb_color_invalid">Անվավեր գույնի կոդ</string>
|
<string name="revanced_sb_color_invalid">Անվավեր գույնի կոդ</string>
|
||||||
<string name="revanced_sb_reset_color">Վերագործարկել գույնը</string>
|
<string name="revanced_sb_reset_color">Վերագործարկել գույնը</string>
|
||||||
<string name="revanced_sb_reset">Վերագործարկել</string>
|
<string name="revanced_sb_reset">Վերագործարկել</string>
|
||||||
<string name="revanced_sb_about">Ծրագրի մասին</string>
|
<string name="revanced_sb_about_title">Ծրագրի մասին</string>
|
||||||
<string name="revanced_sb_about_api_sum">Տվյալները մատուցվում են SponsorBlock API-ի կողմից։ Սեղմեք այստեղ՝ ավելի շատ իմանալու և այլ հարթակների համար ներբեռնումները տեսնելու</string>
|
<string name="revanced_sb_about_api_summary">Տվյալները մատուցվում են SponsorBlock API-ի կողմից։ Սեղմեք այստեղ՝ ավելի շատ իմանալու և այլ հարթակների համար ներբեռնումները տեսնելու</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||||
<string name="revanced_change_form_factor_title">Ձևաչափի փոփոխություն</string>
|
<string name="revanced_change_form_factor_title">Ձևաչափի փոփոխություն</string>
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_settings_import_reset">Pengaturan ReVanced diatur ke setelan awal</string>
|
<string name="revanced_settings_import_reset">Pengaturan ReVanced diatur ke setelan awal</string>
|
||||||
<string name="revanced_settings_import_success">Mengimpor setelan %d</string>
|
<string name="revanced_settings_import_success">Mengimpor setelan %d</string>
|
||||||
<string name="revanced_settings_import_failure_parse">Impor gagal: %s</string>
|
<string name="revanced_settings_import_failure_parse">Impor gagal: %s</string>
|
||||||
|
<string name="revanced_settings_search_hint">Telusuri setelan</string>
|
||||||
|
<string name="revanced_settings_search_no_results_title">Tidak ada hasil yang ditemukan untuk \'%s\'</string>
|
||||||
|
<string name="revanced_settings_search_no_results_summary">Coba kata kunci lain</string>
|
||||||
|
<string name="revanced_settings_search_remove_message">Hapus dari riwayat pencarian?</string>
|
||||||
<string name="revanced_show_menu_icons_title">Tampilkan ikon pengaturan ReVanced</string>
|
<string name="revanced_show_menu_icons_title">Tampilkan ikon pengaturan ReVanced</string>
|
||||||
<string name="revanced_show_menu_icons_summary_on">Ikon pengaturan ditampilkan</string>
|
<string name="revanced_show_menu_icons_summary_on">Ikon pengaturan ditampilkan</string>
|
||||||
<string name="revanced_show_menu_icons_summary_off">Ikon pengaturan tidak ditampilkan</string>
|
<string name="revanced_show_menu_icons_summary_off">Ikon pengaturan tidak ditampilkan</string>
|
||||||
@@ -93,6 +97,9 @@ Ketuk tombol lanjutkan dan izinkan perubahan pengoptimalan."</string>
|
|||||||
<string name="revanced_restore_old_settings_menus_title">Pulihkan menu pengaturan lama</string>
|
<string name="revanced_restore_old_settings_menus_title">Pulihkan menu pengaturan lama</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_on">Menu pengaturan lama ditampilkan</string>
|
<string name="revanced_restore_old_settings_menus_summary_on">Menu pengaturan lama ditampilkan</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_off">Menu pengaturan lama tidak ditampilkan</string>
|
<string name="revanced_restore_old_settings_menus_summary_off">Menu pengaturan lama tidak ditampilkan</string>
|
||||||
|
<string name="revanced_settings_search_history_title">Tampilkan riwayat pencarian setelan</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_on">Riwayat pencarian setelan ditampilkan</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_off">Riwayat penelusuran setelan tidak ditampilkan</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||||
<string name="revanced_shorts_disable_background_playback_title">Nonaktifkan pemutaran Shorts di latar belakang</string>
|
<string name="revanced_shorts_disable_background_playback_title">Nonaktifkan pemutaran Shorts di latar belakang</string>
|
||||||
@@ -153,10 +160,10 @@ Anda tidak akan diberi tahu tentang kejadian yang tidak terduga."</string>
|
|||||||
<string name="revanced_hide_notify_me_button_title">Sembunyikan \'Beri tahu saya\'</string>
|
<string name="revanced_hide_notify_me_button_title">Sembunyikan \'Beri tahu saya\'</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">Tombol disembunyikan</string>
|
<string name="revanced_hide_notify_me_button_summary_on">Tombol disembunyikan</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">Tombol ditampilkan</string>
|
<string name="revanced_hide_notify_me_button_summary_off">Tombol ditampilkan</string>
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">Sembunyikan label \'Orang juga menonton\'</string>
|
<string name="revanced_hide_search_result_recommendation_labels_title">Sembunyikan label rekomendasi video</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_on">Label disembunyikan</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_on">Label \'Orang lain juga menonton\' dan \'Anda mungkin juga suka\' disembunyikan</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">Label ditampilkan</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_off">Label \'Orang lain juga menonton\' dan \'Anda mungkin juga suka\' ditampilkan</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">Sembunyikan tombol \'Tampilkan selengkapnya\'</string>
|
<string name="revanced_hide_show_more_button_title">Sembunyikan tombol \'Tampilkan selengkapnya\'</string>
|
||||||
@@ -231,6 +238,9 @@ Anda tidak akan diberi tahu tentang kejadian yang tidak terduga."</string>
|
|||||||
<string name="revanced_hide_ai_generated_video_summary_section_title">Sembunyikan \'Ringkasan video yang dibuat AI\'</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_title">Sembunyikan \'Ringkasan video yang dibuat AI\'</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Bagian ringkasan video disembunyikan</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Bagian ringkasan video disembunyikan</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Bagian ringkasan video ditampilkan</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Bagian ringkasan video ditampilkan</string>
|
||||||
|
<string name="revanced_hide_ask_section_title">Sembunyikan Tanya</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_on">Bagian Tanya disembunyikan</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_off">Bagian Tanya ditampilkan</string>
|
||||||
<string name="revanced_hide_attributes_section_title">Sembunyikan Atribut</string>
|
<string name="revanced_hide_attributes_section_title">Sembunyikan Atribut</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_on">Bagian tempat Unggulan, Game, Musik, dan disebutkan Orang disembunyikan</string>
|
<string name="revanced_hide_attributes_section_summary_on">Bagian tempat Unggulan, Game, Musik, dan disebutkan Orang disembunyikan</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">Bagian tempat Unggulan, Game, Musik, dan disebutkan Orang ditampilkan</string>
|
<string name="revanced_hide_attributes_section_summary_off">Bagian tempat Unggulan, Game, Musik, dan disebutkan Orang ditampilkan</string>
|
||||||
@@ -794,6 +804,11 @@ Pemutaran otomatis dapat diubah di pengaturan YouTube:
|
|||||||
Pengaturan → Pemutaran → Putar otomatis video berikutnya"</string>
|
Pengaturan → Pemutaran → Putar otomatis video berikutnya"</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_off">Video yang disarankan di layar akhir ditampilkan</string>
|
<string name="revanced_end_screen_suggested_video_summary_off">Video yang disarankan di layar akhir ditampilkan</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
<string name="revanced_hide_related_video_overlay_title">Sembunyikan hamparan video terkait dalam layar penuh</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_on">Hamparan video terkait disembunyikan</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_off">Hamparan video terkait ditampilkan</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">Sembunyikan timestamp video</string>
|
<string name="revanced_hide_timestamp_title">Sembunyikan timestamp video</string>
|
||||||
<string name="revanced_hide_timestamp_summary_on">Timestamp disembunyikan</string>
|
<string name="revanced_hide_timestamp_summary_on">Timestamp disembunyikan</string>
|
||||||
@@ -831,10 +846,10 @@ Pengaturan → Pemutaran → Putar otomatis video berikutnya"</string>
|
|||||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Muat ulang video untuk memilih Return YouTube Dislike</string>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Muat ulang video untuk memilih Return YouTube Dislike</string>
|
||||||
<!-- Video likes have been set to hidden by the video uploader. -->
|
<!-- Video likes have been set to hidden by the video uploader. -->
|
||||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Disembunyikan oleh pemilik</string>
|
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Disembunyikan oleh pemilik</string>
|
||||||
<string name="revanced_ryd_enable_summary_on">Dislike ditampilkan</string>
|
<string name="revanced_ryd_enabled_summary_on">Dislike ditampilkan</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">Dislike tidak ditampilkan</string>
|
<string name="revanced_ryd_enabled_summary_off">Dislike tidak ditampilkan</string>
|
||||||
<string name="revanced_ryd_shorts_title">Tampilkan dislike di Shorts</string>
|
<string name="revanced_ryd_shorts_title">Tampilkan dislike di Shorts</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Dislike pada Shorts ditampilkan
|
<string name="revanced_ryd_shorts_summary_on">"Dislike pada Shorts ditampilkan
|
||||||
|
|
||||||
Batasan: Dislike mungkin tidak muncul dalam mode penyamaran"</string>
|
Batasan: Dislike mungkin tidak muncul dalam mode penyamaran"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">Dislike pada Shorts tidak ditampilkan</string>
|
<string name="revanced_ryd_shorts_summary_off">Dislike pada Shorts tidak ditampilkan</string>
|
||||||
@@ -851,7 +866,6 @@ Batasan: Dislike mungkin tidak muncul dalam mode penyamaran"</string>
|
|||||||
<string name="revanced_ryd_toast_on_connection_error_title">Tampilkan pesan timbul jika API tidak tersedia</string>
|
<string name="revanced_ryd_toast_on_connection_error_title">Tampilkan pesan timbul jika API tidak tersedia</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">Pesan timbul tidak ditampilkan jika Return YouTube Dislike tidak tersedia</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_on">Pesan timbul tidak ditampilkan jika Return YouTube Dislike tidak tersedia</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">Pesan timbul tidak ditampilkan jika Return YouTube Dislike tidak tersedia</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_off">Pesan timbul tidak ditampilkan jika Return YouTube Dislike tidak tersedia</string>
|
||||||
<string name="revanced_ryd_about">Tentang</string>
|
|
||||||
<string name="revanced_ryd_attribution_summary">Data disediakan oleh API Return YouTube Dislike. Tekan di sini untuk mempelajari lebih lanjut</string>
|
<string name="revanced_ryd_attribution_summary">Data disediakan oleh API Return YouTube Dislike. Tekan di sini untuk mempelajari lebih lanjut</string>
|
||||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||||
<string name="revanced_ryd_statistics_category_title">Statistik API ReturnYoutubeDislike dari perangkat ini</string>
|
<string name="revanced_ryd_statistics_category_title">Statistik API ReturnYoutubeDislike dari perangkat ini</string>
|
||||||
@@ -1057,7 +1071,7 @@ Siap mengirim?"</string>
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_title">Ubah waktu segmen secara manual</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_title">Ubah waktu segmen secara manual</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_content">Apakah Anda ingin menubah waktu awal atau akhir segmen?</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_content">Apakah Anda ingin menubah waktu awal atau akhir segmen?</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Waktu yang diberikan tidak sah</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Waktu yang diberikan tidak sah</string>
|
||||||
<string name="revanced_sb_stats">Statistik</string>
|
<string name="revanced_sb_stats_title">Statistik</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||||
<string name="revanced_sb_stats_connection_failure">Statistik sementara tidak tersedia (API tidak aktif)</string>
|
<string name="revanced_sb_stats_connection_failure">Statistik sementara tidak tersedia (API tidak aktif)</string>
|
||||||
<string name="revanced_sb_stats_loading">Memuat...</string>
|
<string name="revanced_sb_stats_loading">Memuat...</string>
|
||||||
@@ -1086,8 +1100,8 @@ Siap mengirim?"</string>
|
|||||||
<string name="revanced_sb_color_invalid">Kode warna tidak sah</string>
|
<string name="revanced_sb_color_invalid">Kode warna tidak sah</string>
|
||||||
<string name="revanced_sb_reset_color">Atur ulang warna</string>
|
<string name="revanced_sb_reset_color">Atur ulang warna</string>
|
||||||
<string name="revanced_sb_reset">Setel ulang</string>
|
<string name="revanced_sb_reset">Setel ulang</string>
|
||||||
<string name="revanced_sb_about">Tentang</string>
|
<string name="revanced_sb_about_title">Tentang</string>
|
||||||
<string name="revanced_sb_about_api_sum">Data disediakan oleh API SponsorBlock. Tekan di sini untuk mempelajari lebih lanjut dan melihat hasil pengunduhan untuk platform lain</string>
|
<string name="revanced_sb_about_api_summary">Data disediakan oleh API SponsorBlock. Tekan di sini untuk mempelajari lebih lanjut dan melihat hasil pengunduhan untuk platform lain</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||||
<string name="revanced_change_form_factor_title">Faktor bentuk tata letak</string>
|
<string name="revanced_change_form_factor_title">Faktor bentuk tata letak</string>
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ Second \"item\" text"</string>
|
|||||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
<!-- '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. -->
|
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||||
@@ -134,6 +134,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_settings_import_reset">Reimposta le impostazioni di ReVanced a quelle predefinite</string>
|
<string name="revanced_settings_import_reset">Reimposta le impostazioni di ReVanced a quelle predefinite</string>
|
||||||
<string name="revanced_settings_import_success">Importate %d impostazioni</string>
|
<string name="revanced_settings_import_success">Importate %d impostazioni</string>
|
||||||
<string name="revanced_settings_import_failure_parse">Importazione non riuscita: %s</string>
|
<string name="revanced_settings_import_failure_parse">Importazione non riuscita: %s</string>
|
||||||
|
<string name="revanced_settings_search_hint">Cerca impostazioni</string>
|
||||||
|
<string name="revanced_settings_search_no_results_title">Nessun risultato trovato per \".%s\"</string>
|
||||||
|
<string name="revanced_settings_search_no_results_summary">Prova un\'altra parola chiave</string>
|
||||||
|
<string name="revanced_settings_search_remove_message">Rimuovere dalla cronologia di ricerca?</string>
|
||||||
<string name="revanced_show_menu_icons_title">Mostra le icone delle impostazioni di ReVanced</string>
|
<string name="revanced_show_menu_icons_title">Mostra le icone delle impostazioni di ReVanced</string>
|
||||||
<string name="revanced_show_menu_icons_summary_on">Le icone delle impostazioni vengono mostrate</string>
|
<string name="revanced_show_menu_icons_summary_on">Le icone delle impostazioni vengono mostrate</string>
|
||||||
<string name="revanced_show_menu_icons_summary_off">Le icone delle impostazioni non vengono mostrate</string>
|
<string name="revanced_show_menu_icons_summary_off">Le icone delle impostazioni non vengono mostrate</string>
|
||||||
@@ -93,6 +97,9 @@ Tocca il pulsante Continua e consenti le modifiche di ottimizzazione."</string>
|
|||||||
<string name="revanced_restore_old_settings_menus_title">Ripristina i vecchi menu delle impostazioni</string>
|
<string name="revanced_restore_old_settings_menus_title">Ripristina i vecchi menu delle impostazioni</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_on">I vecchi menu delle impostazioni vengono mostrati</string>
|
<string name="revanced_restore_old_settings_menus_summary_on">I vecchi menu delle impostazioni vengono mostrati</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_off">I vecchi menu delle impostazioni non vengono mostrati</string>
|
<string name="revanced_restore_old_settings_menus_summary_off">I vecchi menu delle impostazioni non vengono mostrati</string>
|
||||||
|
<string name="revanced_settings_search_history_title">Mostra la cronologia di ricerca delle impostazioni</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_on">La cronologia di ricerca delle impostazioni è visualizzata</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_off">La cronologia di ricerca delle impostazioni non viene mostrata</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||||
<string name="revanced_shorts_disable_background_playback_title">Disattiva la riproduzione degli Shorts in background</string>
|
<string name="revanced_shorts_disable_background_playback_title">Disattiva la riproduzione degli Shorts in background</string>
|
||||||
@@ -153,10 +160,10 @@ Non sarai notificato di eventi imprevisti."</string>
|
|||||||
<string name="revanced_hide_notify_me_button_title">Nascondi il pulsante \'Avvisami\'</string>
|
<string name="revanced_hide_notify_me_button_title">Nascondi il pulsante \'Avvisami\'</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">Il pulsante è nascosto</string>
|
<string name="revanced_hide_notify_me_button_summary_on">Il pulsante è nascosto</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">Il pulsante è visibile</string>
|
<string name="revanced_hide_notify_me_button_summary_off">Il pulsante è visibile</string>
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">Nascondi l\'etichetta \"Altri utenti hanno guardato\"</string>
|
<string name="revanced_hide_search_result_recommendation_labels_title">Nascondi le etichette dei video consigliati</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_on">L\'etichetta è nascosta</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_on">Le etichette \"Altri video guardati\" e \"Potrebbe piacerti anche\" sono nascoste</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">L\'etichetta è visibile</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_off">Le etichette \"Altri video guardati\" e \"Potrebbe piacerti anche\" sono mostrate</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">Nascondi il pulsante \'Mostra di più\'</string>
|
<string name="revanced_hide_show_more_button_title">Nascondi il pulsante \'Mostra di più\'</string>
|
||||||
@@ -231,6 +238,9 @@ Non sarai notificato di eventi imprevisti."</string>
|
|||||||
<string name="revanced_hide_ai_generated_video_summary_section_title">Nascondi \"Riepilogo video generato dall\'AI\"</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_title">Nascondi \"Riepilogo video generato dall\'AI\"</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">La sezione del riepilogo video è nascosta</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">La sezione del riepilogo video è nascosta</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">La sezione del riepilogo video è visibile</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">La sezione del riepilogo video è visibile</string>
|
||||||
|
<string name="revanced_hide_ask_section_title">Nascondi \"Chiedi\"</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_on">La sezione \"Chiedi\" è nascosta</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_off">La sezione \"Chiedi\" è visibile</string>
|
||||||
<string name="revanced_hide_attributes_section_title">Nascondi Attributi</string>
|
<string name="revanced_hide_attributes_section_title">Nascondi Attributi</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_on">Le sezioni Luoghi in evidenza, Giochi, Musica e Persone menzionate sono nascoste</string>
|
<string name="revanced_hide_attributes_section_summary_on">Le sezioni Luoghi in evidenza, Giochi, Musica e Persone menzionate sono nascoste</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">Le sezioni Luoghi in evidenza, Giochi, Musica e Persone menzionate sono visibili</string>
|
<string name="revanced_hide_attributes_section_summary_off">Le sezioni Luoghi in evidenza, Giochi, Musica e Persone menzionate sono visibili</string>
|
||||||
@@ -794,6 +804,11 @@ L'autoplay può essere modificato nelle impostazioni di YouTube:
|
|||||||
Impostazioni → Riproduzione → Riproduzione automatica video successivo"</string>
|
Impostazioni → Riproduzione → Riproduzione automatica video successivo"</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_off">Il video suggerito nella schermata finale è mostrato</string>
|
<string name="revanced_end_screen_suggested_video_summary_off">Il video suggerito nella schermata finale è mostrato</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
<string name="revanced_hide_related_video_overlay_title">Nascondi la sovrapposizione dei video correlati a schermo intero</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_on">La sovrapposizione dei video correlati è nascosta</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_off">La sovrapposizione dei video correlati è visualizzata</string>
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">Nascondi timestamp video</string>
|
<string name="revanced_hide_timestamp_title">Nascondi timestamp video</string>
|
||||||
<string name="revanced_hide_timestamp_summary_on">Il timestamp è nascosto</string>
|
<string name="revanced_hide_timestamp_summary_on">Il timestamp è nascosto</string>
|
||||||
@@ -831,10 +846,10 @@ Impostazioni → Riproduzione → Riproduzione automatica video successivo"</str
|
|||||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Ricarica il video per votare usando Return YouTube Dislike</string>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Ricarica il video per votare usando Return YouTube Dislike</string>
|
||||||
<!-- Video likes have been set to hidden by the video uploader. -->
|
<!-- Video likes have been set to hidden by the video uploader. -->
|
||||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Nascosto dal proprietario</string>
|
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Nascosto dal proprietario</string>
|
||||||
<string name="revanced_ryd_enable_summary_on">I Non Mi Piace sono visibili</string>
|
<string name="revanced_ryd_enabled_summary_on">I Non Mi Piace sono visibili</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">I Non Mi Piace non sono visibili</string>
|
<string name="revanced_ryd_enabled_summary_off">I Non Mi Piace non sono visibili</string>
|
||||||
<string name="revanced_ryd_shorts_title">Mostra i Non Mi Piace degli Shorts</string>
|
<string name="revanced_ryd_shorts_title">Mostra i Non Mi Piace degli Shorts</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"I \"Non mi piace\" sugli Shorts sono visualizzati
|
<string name="revanced_ryd_shorts_summary_on">"I \"Non mi piace\" sugli Shorts sono visualizzati
|
||||||
|
|
||||||
Limitazione: i \"Non mi piace\" potrebbero non apparire in modalità incognito"</string>
|
Limitazione: i \"Non mi piace\" potrebbero non apparire in modalità incognito"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">I \"Non mi piace\" sugli Shorts non sono visualizzati</string>
|
<string name="revanced_ryd_shorts_summary_off">I \"Non mi piace\" sugli Shorts non sono visualizzati</string>
|
||||||
@@ -851,7 +866,6 @@ Limitazione: i \"Non mi piace\" potrebbero non apparire in modalità incognito"<
|
|||||||
<string name="revanced_ryd_toast_on_connection_error_title">Mostra un toast se l\'API non è disponibile</string>
|
<string name="revanced_ryd_toast_on_connection_error_title">Mostra un toast se l\'API non è disponibile</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">Una notifica è mostrata se Return YouTube Dislike non è disponibile</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_on">Una notifica è mostrata se Return YouTube Dislike non è disponibile</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">Nessuna notifica viene mostrata se Return YouTube Dislike non è disponibile</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_off">Nessuna notifica viene mostrata se Return YouTube Dislike non è disponibile</string>
|
||||||
<string name="revanced_ryd_about">Informazioni</string>
|
|
||||||
<string name="revanced_ryd_attribution_summary">I dati vengono forniti dall\'API Return YouTube Dislike. Tocca qui per saperne di più</string>
|
<string name="revanced_ryd_attribution_summary">I dati vengono forniti dall\'API Return YouTube Dislike. Tocca qui per saperne di più</string>
|
||||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||||
<string name="revanced_ryd_statistics_category_title">Statistiche dell\'API di ReturnYouTubeDislike per questo dispositivo</string>
|
<string name="revanced_ryd_statistics_category_title">Statistiche dell\'API di ReturnYouTubeDislike per questo dispositivo</string>
|
||||||
@@ -1057,7 +1071,7 @@ Pronto per l'invio?"</string>
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_title">Modifica manualmente i tempi del segmento</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_title">Modifica manualmente i tempi del segmento</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_content">Vuoi modificare il tempo di l\'inizio o la fine del segmento?</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_content">Vuoi modificare il tempo di l\'inizio o la fine del segmento?</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Minutaggio fornito non valido</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Minutaggio fornito non valido</string>
|
||||||
<string name="revanced_sb_stats">Statistiche</string>
|
<string name="revanced_sb_stats_title">Statistiche</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||||
<string name="revanced_sb_stats_connection_failure">Le statistiche non sono temporaneamente disponibili (l\'API non è attiva)</string>
|
<string name="revanced_sb_stats_connection_failure">Le statistiche non sono temporaneamente disponibili (l\'API non è attiva)</string>
|
||||||
<string name="revanced_sb_stats_loading">Caricamento...</string>
|
<string name="revanced_sb_stats_loading">Caricamento...</string>
|
||||||
@@ -1086,8 +1100,8 @@ Pronto per l'invio?"</string>
|
|||||||
<string name="revanced_sb_color_invalid">Codice colore non valido</string>
|
<string name="revanced_sb_color_invalid">Codice colore non valido</string>
|
||||||
<string name="revanced_sb_reset_color">Ripristina colore</string>
|
<string name="revanced_sb_reset_color">Ripristina colore</string>
|
||||||
<string name="revanced_sb_reset">Reimposta</string>
|
<string name="revanced_sb_reset">Reimposta</string>
|
||||||
<string name="revanced_sb_about">Informazioni</string>
|
<string name="revanced_sb_about_title">Informazioni</string>
|
||||||
<string name="revanced_sb_about_api_sum">I dati sono forniti dall\'API di SponsorBlock. Tocca qui per saperne di più e vedere i download per altre piattaforme</string>
|
<string name="revanced_sb_about_api_summary">I dati sono forniti dall\'API di SponsorBlock. Tocca qui per saperne di più e vedere i download per altre piattaforme</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||||
<string name="revanced_change_form_factor_title">Fattore di forma del layout</string>
|
<string name="revanced_change_form_factor_title">Fattore di forma del layout</string>
|
||||||
|
|||||||
@@ -153,10 +153,7 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_hide_notify_me_button_title">הסתר לחצן \'אני רוצה לקבל התראה\'</string>
|
<string name="revanced_hide_notify_me_button_title">הסתר לחצן \'אני רוצה לקבל התראה\'</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">הלחצן מוסתר</string>
|
<string name="revanced_hide_notify_me_button_summary_on">הלחצן מוסתר</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">הלחצן מוצג</string>
|
<string name="revanced_hide_notify_me_button_summary_off">הלחצן מוצג</string>
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">הסתר תווית \'אנשים צפו גם\'</string>
|
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_on">התווית מוסתרת</string>
|
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">התווית מוצגת</string>
|
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">הסתר לחצן \'הצג עוד\'</string>
|
<string name="revanced_hide_show_more_button_title">הסתר לחצן \'הצג עוד\'</string>
|
||||||
@@ -778,6 +775,8 @@ Second \"item\" text"</string>
|
|||||||
הגדרות ← הפעלה ← הפעלה אוטומטית של הסרטון הבא"</string>
|
הגדרות ← הפעלה ← הפעלה אוטומטית של הסרטון הבא"</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_off">סרטון מוצע של מסך סיום מוצג</string>
|
<string name="revanced_end_screen_suggested_video_summary_off">סרטון מוצע של מסך סיום מוצג</string>
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">הסתר חותמת זמן של סרטון</string>
|
<string name="revanced_hide_timestamp_title">הסתר חותמת זמן של סרטון</string>
|
||||||
<string name="revanced_hide_timestamp_summary_on">חותמת זמן מוסתרת</string>
|
<string name="revanced_hide_timestamp_summary_on">חותמת זמן מוסתרת</string>
|
||||||
@@ -815,10 +814,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">רענן סרטון כדי להצביע באמצעות Return YouTube Dislike</string>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">רענן סרטון כדי להצביע באמצעות Return YouTube Dislike</string>
|
||||||
<!-- Video likes have been set to hidden by the video uploader. -->
|
<!-- Video likes have been set to hidden by the video uploader. -->
|
||||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">מוסתר על ידי הבעלים</string>
|
<string name="revanced_ryd_video_likes_hidden_by_video_owner">מוסתר על ידי הבעלים</string>
|
||||||
<string name="revanced_ryd_enable_summary_on">דיסלייקים מוצגים</string>
|
<string name="revanced_ryd_enabled_summary_on">דיסלייקים מוצגים</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">דיסלייקים אינם מוצגים</string>
|
<string name="revanced_ryd_enabled_summary_off">דיסלייקים אינם מוצגים</string>
|
||||||
<string name="revanced_ryd_shorts_title">הצג דיסלייקים ב-Shorts</string>
|
<string name="revanced_ryd_shorts_title">הצג דיסלייקים ב-Shorts</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"דיסלייקים ב-Shorts מוצגים
|
<string name="revanced_ryd_shorts_summary_on">"דיסלייקים ב-Shorts מוצגים
|
||||||
|
|
||||||
מגבלה: ייתכן שלא יופיעו דיסלייקים במצב פרטי"</string>
|
מגבלה: ייתכן שלא יופיעו דיסלייקים במצב פרטי"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">דיסלייקים ב-Shorts אינם מוצגים</string>
|
<string name="revanced_ryd_shorts_summary_off">דיסלייקים ב-Shorts אינם מוצגים</string>
|
||||||
@@ -835,7 +834,6 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_ryd_toast_on_connection_error_title">הצג הודעה קופצת אם ה-API אינו זמין</string>
|
<string name="revanced_ryd_toast_on_connection_error_title">הצג הודעה קופצת אם ה-API אינו זמין</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">הודעה קופצת מוצגת אם Return YouTube Dislike אינו זמין</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_on">הודעה קופצת מוצגת אם Return YouTube Dislike אינו זמין</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">הודעה קופצת אינה מוצגת אם Return YouTube Dislike אינו זמין</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_off">הודעה קופצת אינה מוצגת אם Return YouTube Dislike אינו זמין</string>
|
||||||
<string name="revanced_ryd_about">אודות</string>
|
|
||||||
<string name="revanced_ryd_attribution_summary">הנתונים מסופקים על ידי Return YouTube Dislike API. הקש כאן כדי ללמוד עוד</string>
|
<string name="revanced_ryd_attribution_summary">הנתונים מסופקים על ידי Return YouTube Dislike API. הקש כאן כדי ללמוד עוד</string>
|
||||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||||
<string name="revanced_ryd_statistics_category_title">סטטיסטיקת ReturnYouTubeDislike API של מכשיר זה</string>
|
<string name="revanced_ryd_statistics_category_title">סטטיסטיקת ReturnYouTubeDislike API של מכשיר זה</string>
|
||||||
@@ -1041,7 +1039,7 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_title">ערוך את תזמון המקטע באופן ידני</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_title">ערוך את תזמון המקטע באופן ידני</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_content">האם ברצונך לערוך את התזמון עבור ההתחלה או הסיום של המקטע?</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_content">האם ברצונך לערוך את התזמון עבור ההתחלה או הסיום של המקטע?</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">ניתן זמן לא חוקי</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">ניתן זמן לא חוקי</string>
|
||||||
<string name="revanced_sb_stats">סטטיסטיקה</string>
|
<string name="revanced_sb_stats_title">סטטיסטיקה</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||||
<string name="revanced_sb_stats_connection_failure">סטטיסטיקה אינה זמינה באופן זמני (API מושבת)</string>
|
<string name="revanced_sb_stats_connection_failure">סטטיסטיקה אינה זמינה באופן זמני (API מושבת)</string>
|
||||||
<string name="revanced_sb_stats_loading">טוען...</string>
|
<string name="revanced_sb_stats_loading">טוען...</string>
|
||||||
@@ -1070,8 +1068,8 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_sb_color_invalid">קוד צבע לא חוקי</string>
|
<string name="revanced_sb_color_invalid">קוד צבע לא חוקי</string>
|
||||||
<string name="revanced_sb_reset_color">אפס צבע</string>
|
<string name="revanced_sb_reset_color">אפס צבע</string>
|
||||||
<string name="revanced_sb_reset">איפוס</string>
|
<string name="revanced_sb_reset">איפוס</string>
|
||||||
<string name="revanced_sb_about">אודות</string>
|
<string name="revanced_sb_about_title">אודות</string>
|
||||||
<string name="revanced_sb_about_api_sum">הנתונים מסופקים על ידי SponsorBlock API. הקש כאן כדי ללמוד עוד ולראות הורדות עבור פלטפורמות אחרות</string>
|
<string name="revanced_sb_about_api_summary">הנתונים מסופקים על ידי SponsorBlock API. הקש כאן כדי ללמוד עוד ולראות הורדות עבור פלטפורמות אחרות</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||||
<string name="revanced_change_form_factor_title">גורם צורת הפריסה</string>
|
<string name="revanced_change_form_factor_title">גורם צורת הפריסה</string>
|
||||||
|
|||||||
@@ -42,6 +42,10 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_settings_import_reset">ReVanced 設定をデフォルトにリセット</string>
|
<string name="revanced_settings_import_reset">ReVanced 設定をデフォルトにリセット</string>
|
||||||
<string name="revanced_settings_import_success">%d 個の設定をインポートしました</string>
|
<string name="revanced_settings_import_success">%d 個の設定をインポートしました</string>
|
||||||
<string name="revanced_settings_import_failure_parse">インポート失敗: %s</string>
|
<string name="revanced_settings_import_failure_parse">インポート失敗: %s</string>
|
||||||
|
<string name="revanced_settings_search_hint">検索設定</string>
|
||||||
|
<string name="revanced_settings_search_no_results_title">\'%s\' の検索結果は見つかりませんでした</string>
|
||||||
|
<string name="revanced_settings_search_no_results_summary">別のキーワードを試してください</string>
|
||||||
|
<string name="revanced_settings_search_remove_message">検索履歴から削除しますか?</string>
|
||||||
<string name="revanced_show_menu_icons_title">ReVanced 設定にアイコンを表示する</string>
|
<string name="revanced_show_menu_icons_title">ReVanced 設定にアイコンを表示する</string>
|
||||||
<string name="revanced_show_menu_icons_summary_on">ReVanced 設定にアイコンが表示されます</string>
|
<string name="revanced_show_menu_icons_summary_on">ReVanced 設定にアイコンが表示されます</string>
|
||||||
<string name="revanced_show_menu_icons_summary_off">ReVanced 設定にアイコンは表示されません</string>
|
<string name="revanced_show_menu_icons_summary_off">ReVanced 設定にアイコンは表示されません</string>
|
||||||
@@ -94,6 +98,9 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
|||||||
<string name="revanced_restore_old_settings_menus_title">設定メニューを旧バージョンに戻す</string>
|
<string name="revanced_restore_old_settings_menus_title">設定メニューを旧バージョンに戻す</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_on">旧バージョンの設定メニューが表示されます</string>
|
<string name="revanced_restore_old_settings_menus_summary_on">旧バージョンの設定メニューが表示されます</string>
|
||||||
<string name="revanced_restore_old_settings_menus_summary_off">通常の設定メニューが表示されます</string>
|
<string name="revanced_restore_old_settings_menus_summary_off">通常の設定メニューが表示されます</string>
|
||||||
|
<string name="revanced_settings_search_history_title">設定の検索履歴を表示</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_on">設定の検索履歴が表示されています</string>
|
||||||
|
<string name="revanced_settings_search_history_summary_off">設定の検索履歴は表示されません</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||||
<string name="revanced_shorts_disable_background_playback_title">ショート動画のバックグラウンド再生を無効にする</string>
|
<string name="revanced_shorts_disable_background_playback_title">ショート動画のバックグラウンド再生を無効にする</string>
|
||||||
@@ -156,10 +163,10 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
|||||||
<string name="revanced_hide_notify_me_button_title">「通知を受け取る」ボタンを非表示</string>
|
<string name="revanced_hide_notify_me_button_title">「通知を受け取る」ボタンを非表示</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_on">「通知を受け取る」ボタンは表示されません</string>
|
<string name="revanced_hide_notify_me_button_summary_on">「通知を受け取る」ボタンは表示されません</string>
|
||||||
<string name="revanced_hide_notify_me_button_summary_off">「通知を受け取る」ボタンは表示されます</string>
|
<string name="revanced_hide_notify_me_button_summary_off">「通知を受け取る」ボタンは表示されます</string>
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<string name="revanced_hide_search_result_recommendations_title">「他の人はこの動画も視聴しています」ラベルを非表示</string>
|
<string name="revanced_hide_search_result_recommendation_labels_title">おすすめラベルを非表示</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_on">「他の人はこの動画も視聴しています」ラベルは表示されません</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_on">サムネイル下の「他の人はこの動画も視聴しています」ラベルと「あなたへのおすすめ」ラベルは表示されません</string>
|
||||||
<string name="revanced_hide_search_result_recommendations_summary_off">「他の人はこの動画も視聴しています」ラベルは表示されます</string>
|
<string name="revanced_hide_search_result_recommendation_labels_summary_off">サムネイル下の「他の人はこの動画も視聴しています」ラベルと「あなたへのおすすめ」ラベルは表示されます</string>
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<string name="revanced_hide_show_more_button_title">「もっと見る」ボタンを非表示</string>
|
<string name="revanced_hide_show_more_button_title">「もっと見る」ボタンを非表示</string>
|
||||||
@@ -234,6 +241,9 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
|||||||
<string name="revanced_hide_ai_generated_video_summary_section_title">「AI 生成による動画の要約」を非表示</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_title">「AI 生成による動画の要約」を非表示</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">動画の要約セクションは表示されません</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">動画の要約セクションは表示されません</string>
|
||||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">動画の要約セクションは表示されます</string>
|
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">動画の要約セクションは表示されます</string>
|
||||||
|
<string name="revanced_hide_ask_section_title">質問ボタンを非表示</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_on">質問セクションは表示されません</string>
|
||||||
|
<string name="revanced_hide_ask_section_summary_off">質問セクションは表示されます</string>
|
||||||
<string name="revanced_hide_attributes_section_title">関連情報を非表示</string>
|
<string name="revanced_hide_attributes_section_title">関連情報を非表示</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_on">注目の場所 / ゲーム / 音楽 / 言及された人物セクションは表示されません</string>
|
<string name="revanced_hide_attributes_section_summary_on">注目の場所 / ゲーム / 音楽 / 言及された人物セクションは表示されません</string>
|
||||||
<string name="revanced_hide_attributes_section_summary_off">注目の場所 / ゲーム / 音楽 / 言及された人物セクションは表示されます</string>
|
<string name="revanced_hide_attributes_section_summary_off">注目の場所 / ゲーム / 音楽 / 言及された人物セクションは表示されます</string>
|
||||||
@@ -333,9 +343,9 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
|||||||
<string name="revanced_hide_keyword_content_about_summary">"ホーム / 登録チャンネル / 検索結果からキーワードに合致する動画を除外します
|
<string name="revanced_hide_keyword_content_about_summary">"ホーム / 登録チャンネル / 検索結果からキーワードに合致する動画を除外します
|
||||||
|
|
||||||
制限事項
|
制限事項
|
||||||
• ショート動画はチャンネル名で除外できません
|
• ショート動画はチャンネル名で除外されない
|
||||||
• 一部の UI コンポーネントが残ってしまう場合があります
|
• 一部の UI コンポーネントが残ってしまう場合がある
|
||||||
• キーワードを検索しても、結果が表示されない場合があります"</string>
|
• キーワードを検索したとき、結果が表示されない場合がある"</string>
|
||||||
<string name="revanced_hide_keyword_content_about_whole_words_title">単語全体で合致させる</string>
|
<string name="revanced_hide_keyword_content_about_whole_words_title">単語全体で合致させる</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. -->
|
<!-- 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">キーワードを二重引用符で囲むことで、動画のタイトルやチャンネル名の単語の一部とキーワードが合致しないようにできます<br><br>例えば、<br><b>\"ai\"</b>は、次の動画を除外します:<b>How does AI work?</b><br>しかし、次の動画は除外しません:<b>What does fair use mean?</b></string>
|
<string name="revanced_hide_keyword_content_about_whole_words_summary">キーワードを二重引用符で囲むことで、動画のタイトルやチャンネル名の単語の一部とキーワードが合致しないようにできます<br><br>例えば、<br><b>\"ai\"</b>は、次の動画を除外します:<b>How does AI work?</b><br>しかし、次の動画は除外しません:<b>What does fair use mean?</b></string>
|
||||||
@@ -790,12 +800,17 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
|||||||
<string name="revanced_hide_shorts_navigation_bar_summary_off">ナビゲーション バーは表示されます</string>
|
<string name="revanced_hide_shorts_navigation_bar_summary_off">ナビゲーション バーは表示されます</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
<string name="revanced_end_screen_suggested_video_title">再生終了時の「関連動画」を非表示</string>
|
<string name="revanced_end_screen_suggested_video_title">再生終了時の「関連動画」オーバーレイを非表示</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_on">"「関連動画」は、再生終了時にプレーヤー画面に表示されませんが、自動再生がオンの場合は自動で再生されます
|
<string name="revanced_end_screen_suggested_video_summary_on">"再生終了時に、「関連動画」オーバーレイはプレーヤー画面に表示されませんが、自動再生がオンの場合は次の動画が自動で再生されます
|
||||||
|
|
||||||
自動再生の設定は YouTube の設定で変更できます:
|
自動再生の設定は YouTube の設定で変更できます:
|
||||||
設定 → 再生 → 次の動画を自動再生"</string>
|
設定 → 再生 → 次の動画を自動再生"</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_off">「関連動画」は、再生終了時にプレーヤー画面に表示されます</string>
|
<string name="revanced_end_screen_suggested_video_summary_off">再生終了時に、「関連動画」オーバーレイがプレーヤー画面に表示されます</string>
|
||||||
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
<string name="revanced_hide_related_video_overlay_title">全画面表示の「次の動画」オーバーレイを非表示</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_on">「次の動画」オーバーレイは表示されません</string>
|
||||||
|
<string name="revanced_hide_related_video_overlay_summary_off">「次の動画」オーバーレイは表示されます</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
<string name="revanced_hide_timestamp_title">タイムスタンプを非表示</string>
|
<string name="revanced_hide_timestamp_title">タイムスタンプを非表示</string>
|
||||||
@@ -834,10 +849,10 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
|||||||
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Return YouTube Dislike を使用するには動画を再読み込みしてください</string>
|
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Return YouTube Dislike を使用するには動画を再読み込みしてください</string>
|
||||||
<!-- Video likes have been set to hidden by the video uploader. -->
|
<!-- Video likes have been set to hidden by the video uploader. -->
|
||||||
<string name="revanced_ryd_video_likes_hidden_by_video_owner">所有者によって非表示</string>
|
<string name="revanced_ryd_video_likes_hidden_by_video_owner">所有者によって非表示</string>
|
||||||
<string name="revanced_ryd_enable_summary_on">低評価数が表示されます</string>
|
<string name="revanced_ryd_enabled_summary_on">低評価数が表示されます</string>
|
||||||
<string name="revanced_ryd_enable_summary_off">低評価数は表示されません</string>
|
<string name="revanced_ryd_enabled_summary_off">低評価数は表示されません</string>
|
||||||
<string name="revanced_ryd_shorts_title">Shortsで低評価数を表示する</string>
|
<string name="revanced_ryd_shorts_title">Shortsで低評価数を表示する</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on_disclaimer">"Shortsの低評価が表示されます
|
<string name="revanced_ryd_shorts_summary_on">"Shortsの低評価が表示されます
|
||||||
|
|
||||||
制限事項: シークレット モードでは低評価が表示されない場合があります"</string>
|
制限事項: シークレット モードでは低評価が表示されない場合があります"</string>
|
||||||
<string name="revanced_ryd_shorts_summary_off">Shortsの低評価は表示されません</string>
|
<string name="revanced_ryd_shorts_summary_off">Shortsの低評価は表示されません</string>
|
||||||
@@ -854,7 +869,6 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
|||||||
<string name="revanced_ryd_toast_on_connection_error_title">API 利用不可時にトーストを表示</string>
|
<string name="revanced_ryd_toast_on_connection_error_title">API 利用不可時にトーストを表示</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_on">Return YouTube Dislike が利用できない場合、トースト ポップアップが表示されます</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_on">Return YouTube Dislike が利用できない場合、トースト ポップアップが表示されます</string>
|
||||||
<string name="revanced_ryd_toast_on_connection_error_summary_off">Return YouTube Dislike が利用できない場合でもトースト ポップアップは表示されません</string>
|
<string name="revanced_ryd_toast_on_connection_error_summary_off">Return YouTube Dislike が利用できない場合でもトースト ポップアップは表示されません</string>
|
||||||
<string name="revanced_ryd_about">Return YouTube Dislike について</string>
|
|
||||||
<string name="revanced_ryd_attribution_summary">このデータはReturn YouTube Dislike APIによって提供されています。詳細はここをタップしてください</string>
|
<string name="revanced_ryd_attribution_summary">このデータはReturn YouTube Dislike APIによって提供されています。詳細はここをタップしてください</string>
|
||||||
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
|
||||||
<string name="revanced_ryd_statistics_category_title">このデバイスでのReturnYouTubeDislike API 統計情報</string>
|
<string name="revanced_ryd_statistics_category_title">このデバイスでのReturnYouTubeDislike API 統計情報</string>
|
||||||
@@ -1058,7 +1072,7 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
|||||||
<string name="revanced_sb_new_segment_edit_by_hand_title">セグメントのタイミングを手動で編集</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_title">セグメントのタイミングを手動で編集</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_content">セグメントの開始または終了のタイミングを編集しますか?</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_content">セグメントの開始または終了のタイミングを編集しますか?</string>
|
||||||
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">時間の値が無効です</string>
|
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">時間の値が無効です</string>
|
||||||
<string name="revanced_sb_stats">統計</string>
|
<string name="revanced_sb_stats_title">統計</string>
|
||||||
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
<!-- Shown in the settings preferences, and translations can be any text length. -->
|
||||||
<string name="revanced_sb_stats_connection_failure">統計情報は一時的に利用できません (API がダウンしています)</string>
|
<string name="revanced_sb_stats_connection_failure">統計情報は一時的に利用できません (API がダウンしています)</string>
|
||||||
<string name="revanced_sb_stats_loading">読み込み中...</string>
|
<string name="revanced_sb_stats_loading">読み込み中...</string>
|
||||||
@@ -1087,8 +1101,8 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
|||||||
<string name="revanced_sb_color_invalid">色の値が無効です</string>
|
<string name="revanced_sb_color_invalid">色の値が無効です</string>
|
||||||
<string name="revanced_sb_reset_color">色をリセット</string>
|
<string name="revanced_sb_reset_color">色をリセット</string>
|
||||||
<string name="revanced_sb_reset">リセット</string>
|
<string name="revanced_sb_reset">リセット</string>
|
||||||
<string name="revanced_sb_about">SponsorBlock について</string>
|
<string name="revanced_sb_about_title">SponsorBlock について</string>
|
||||||
<string name="revanced_sb_about_api_sum">SponsorBlock APIによって提供されるデータです。詳細はこちらをタップしてください。</string>
|
<string name="revanced_sb_about_api_summary">SponsorBlock APIによって提供されるデータです。詳細はこちらをタップしてください。</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||||
<string name="revanced_change_form_factor_title">レイアウト</string>
|
<string name="revanced_change_form_factor_title">レイアウト</string>
|
||||||
@@ -1099,11 +1113,11 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
|||||||
<string name="revanced_change_form_factor_user_dialog_message">"変更点は以下のとおりです:
|
<string name="revanced_change_form_factor_user_dialog_message">"変更点は以下のとおりです:
|
||||||
|
|
||||||
タブレット レイアウト
|
タブレット レイアウト
|
||||||
• コミュニティ投稿が表示されません
|
• コミュニティ投稿が表示されない
|
||||||
|
|
||||||
Automotive レイアウト
|
Automotive レイアウト
|
||||||
• ショート動画を通常のプレーヤーで開きます
|
• ショート動画を通常のプレーヤーで開く
|
||||||
• フィードがトピックとチャンネルで分類されます"</string>
|
• フィードがトピックとチャンネルで分類される"</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.spoofappversion.spoofAppVersionPatch">
|
<patch id="layout.spoofappversion.spoofAppVersionPatch">
|
||||||
<string name="revanced_spoof_app_version_title">アプリのバージョンを偽装する</string>
|
<string name="revanced_spoof_app_version_title">アプリのバージョンを偽装する</string>
|
||||||
@@ -1189,8 +1203,8 @@ Automotive レイアウト
|
|||||||
<string name="revanced_miniplayer_double_tap_action_title">「ダブルタップとピンチでサイズ変更」を有効にする</string>
|
<string name="revanced_miniplayer_double_tap_action_title">「ダブルタップとピンチでサイズ変更」を有効にする</string>
|
||||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"「ダブルタップとピンチでサイズ変更」は有効です
|
<string name="revanced_miniplayer_double_tap_action_summary_on">"「ダブルタップとピンチでサイズ変更」は有効です
|
||||||
|
|
||||||
• ダブルタップでミニプレーヤーのサイズを大きくします
|
• ダブルタップすると、ミニプレーヤーのサイズが大きくなる
|
||||||
• もう一度ダブルタップすると、元のサイズに戻ります"</string>
|
• もう一度ダブルタップすると、元のサイズに戻る"</string>
|
||||||
<string name="revanced_miniplayer_double_tap_action_summary_off">「 ダブルタップとピンチでサイズ変更」は無効です</string>
|
<string name="revanced_miniplayer_double_tap_action_summary_off">「 ダブルタップとピンチでサイズ変更」は無効です</string>
|
||||||
<string name="revanced_miniplayer_drag_and_drop_title">ドラッグ&ドロップを有効にする</string>
|
<string name="revanced_miniplayer_drag_and_drop_title">ドラッグ&ドロップを有効にする</string>
|
||||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"ドラッグ&ドロップは有効です
|
<string name="revanced_miniplayer_drag_and_drop_summary_on">"ドラッグ&ドロップは有効です
|
||||||
@@ -1231,9 +1245,9 @@ Automotive レイアウト
|
|||||||
<string name="revanced_seekbar_custom_color_summary_on">編集したシークバーの色が表示されます</string>
|
<string name="revanced_seekbar_custom_color_summary_on">編集したシークバーの色が表示されます</string>
|
||||||
<string name="revanced_seekbar_custom_color_summary_off">デフォルトのシークバーの色が表示されます</string>
|
<string name="revanced_seekbar_custom_color_summary_off">デフォルトのシークバーの色が表示されます</string>
|
||||||
<string name="revanced_seekbar_custom_color_primary_title">シークバーの色</string>
|
<string name="revanced_seekbar_custom_color_primary_title">シークバーの色</string>
|
||||||
<string name="revanced_seekbar_custom_color_primary_summary">シークバーの色を編集します</string>
|
<string name="revanced_seekbar_custom_color_primary_summary">シークバーの色の値を編集します</string>
|
||||||
<string name="revanced_seekbar_custom_color_accent_title">シークバーのアクセント カラー</string>
|
<string name="revanced_seekbar_custom_color_accent_title">シークバーのアクセント カラー</string>
|
||||||
<string name="revanced_seekbar_custom_color_accent_summary">シークバーのアクセントカラーを編集します</string>
|
<string name="revanced_seekbar_custom_color_accent_summary">シークバーのアクセントカラーの値を編集します</string>
|
||||||
<string name="revanced_seekbar_custom_color_invalid">シークバーの色の値が無効です</string>
|
<string name="revanced_seekbar_custom_color_invalid">シークバーの色の値が無効です</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||||
@@ -1399,13 +1413,13 @@ Automotive レイアウト
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||||
<string name="revanced_spoof_video_streams_screen_title">動画ストリームを偽装する</string>
|
<string name="revanced_spoof_video_streams_screen_title">動画ストリームを偽装する</string>
|
||||||
<string name="revanced_spoof_video_streams_screen_summary">再生不能問題を回避するために、クライアントの動画ストリームを偽装します</string>
|
<string name="revanced_spoof_video_streams_screen_summary">動画の再生に失敗しないために、クライアントの動画ストリームを偽装します</string>
|
||||||
<string name="revanced_spoof_video_streams_title">動画ストリームを偽装する</string>
|
<string name="revanced_spoof_video_streams_title">動画ストリームを偽装する</string>
|
||||||
<string name="revanced_spoof_video_streams_summary_on">動画ストリームは偽装されます</string>
|
<string name="revanced_spoof_video_streams_summary_on">動画ストリームは偽装されます</string>
|
||||||
<string name="revanced_spoof_video_streams_summary_off">"動画ストリームは偽装されません
|
<string name="revanced_spoof_video_streams_summary_off">"動画ストリームは偽装されません
|
||||||
|
|
||||||
動画が再生されない可能性があります"</string>
|
動画の再生に失敗する可能性があります"</string>
|
||||||
<string name="revanced_spoof_video_streams_user_dialog_message">この設定をオフにすると、動画が再生されなくなる可能性があります。</string>
|
<string name="revanced_spoof_video_streams_user_dialog_message">この設定をオフにすると、動画の再生に失敗するようになる可能性があります。</string>
|
||||||
<string name="revanced_spoof_video_streams_client_type_title">デフォルトのクライアント</string>
|
<string name="revanced_spoof_video_streams_client_type_title">デフォルトのクライアント</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">iOS クライアントで AVC (H.264) を強制的に使用する</string>
|
<string name="revanced_spoof_video_streams_ios_force_avc_title">iOS クライアントで AVC (H.264) を強制的に使用する</string>
|
||||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">ビデオ コーデックは強制的に AVC (H.264) が使用されます</string>
|
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">ビデオ コーデックは強制的に AVC (H.264) が使用されます</string>
|
||||||
@@ -1414,15 +1428,15 @@ Automotive レイアウト
|
|||||||
|
|
||||||
AVC は、最大解像度が 1080p であり、Opus オーディオ コーデックが利用できず、動画再生時の通信量が VP9 や AV1 より多くなります。"</string>
|
AVC は、最大解像度が 1080p であり、Opus オーディオ コーデックが利用できず、動画再生時の通信量が VP9 や AV1 より多くなります。"</string>
|
||||||
<string name="revanced_spoof_video_streams_about_ios_tv_title">iOS クライアントの副作用</string>
|
<string name="revanced_spoof_video_streams_about_ios_tv_title">iOS クライアントの副作用</string>
|
||||||
<string name="revanced_spoof_video_streams_about_ios_tv_summary">"• 映画や有料動画が再生されない可能性があります
|
<string name="revanced_spoof_video_streams_about_ios_tv_summary">"• 映画や有料動画が再生されない可能性がある
|
||||||
•「 一定音量」が利用できません
|
•「 一定音量」が利用できない
|
||||||
• 動画が 1 秒早く終了します"</string>
|
• 動画が 1 秒早く終了する"</string>
|
||||||
<string name="revanced_spoof_video_streams_about_android_title">Android クライアントの副作用</string>
|
<string name="revanced_spoof_video_streams_about_android_title">Android クライアントの副作用</string>
|
||||||
<string name="revanced_spoof_video_streams_about_android_summary">"• 「音声トラック」がフライアウト メニューに表示されません
|
<string name="revanced_spoof_video_streams_about_android_summary">"• 「音声トラック」がフライアウト メニューに表示されない
|
||||||
• 「一定音量」が利用できません
|
• 「一定音量」が利用できない
|
||||||
• 「デフォルトの吹き替えを無効にする」が利用できません"</string>
|
• 「デフォルトの吹き替えを無効にする」が利用できない"</string>
|
||||||
<string name="revanced_spoof_video_streams_about_no_av1">• AV1 コーデックが利用できません</string>
|
<string name="revanced_spoof_video_streams_about_no_av1">• AV1 コーデックが利用できない</string>
|
||||||
<string name="revanced_spoof_video_streams_about_kids_videos">• ログアウト時またはシークレット モード時に、子ども向け動画が再生されない可能性があります</string>
|
<string name="revanced_spoof_video_streams_about_kids_videos">• ログアウト時またはシークレット モード時に、子ども向け動画が再生されない可能性がある</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">統計情報に表示する</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">統計情報に表示する</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">現在のクライアントが統計情報に表示されます</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">現在のクライアントが統計情報に表示されます</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">現在のクライアントは統計情報に表示されません</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">現在のクライアントは統計情報に表示されません</string>
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ Second \"item\" text"</string>
|
|||||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
<!-- '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. -->
|
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||||
@@ -134,6 +134,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ Second \"item\" text"</string>
|
|||||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
<!-- '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. -->
|
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||||
@@ -134,6 +134,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ Second \"item\" text"</string>
|
|||||||
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'For you' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
<!-- '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. -->
|
This item appear in the subscription feed for future livestreams or unreleased videos. -->
|
||||||
<!-- 'People also watched' should be translated using the same localized wording YouTube displays. -->
|
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||||
This button usually appears when searching for a YT creator. -->
|
This button usually appears when searching for a YT creator. -->
|
||||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||||
@@ -134,6 +134,8 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
</patch>
|
</patch>
|
||||||
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
|
</patch>
|
||||||
<patch id="layout.hide.time.hideTimestampPatch">
|
<patch id="layout.hide.time.hideTimestampPatch">
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user