mirror of
https://github.com/revanced/revanced-patches.git
synced 2025-12-21 16:34:08 +01:00
Compare commits
40 Commits
v5.43.2-de
...
v5.46.0-de
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1196b1a147 | ||
|
|
858edbf3e7 | ||
|
|
a52c0153b1 | ||
|
|
cd9ef81354 | ||
|
|
1b2cd64a86 | ||
|
|
0c03599f07 | ||
|
|
5f23bfe833 | ||
|
|
2cf8f0e636 | ||
|
|
c17cf98c7e | ||
|
|
3e4990afff | ||
|
|
292fae440c | ||
|
|
12e7c0943a | ||
|
|
a0c5604951 | ||
|
|
38d9299dfe | ||
|
|
dfdbbfa047 | ||
|
|
e9f45ce926 | ||
|
|
1b38b1a3c8 | ||
|
|
13cf1724bf | ||
|
|
6d01863ec7 | ||
|
|
a32ed30b4c | ||
|
|
ef44eaa119 | ||
|
|
c73a03c9e1 | ||
|
|
c1681f982a | ||
|
|
1502bf7524 | ||
|
|
dffb1e6525 | ||
|
|
b8c2ede2bf | ||
|
|
591e106098 | ||
|
|
e7336d2ef3 | ||
|
|
7a53f8f62d | ||
|
|
3466d9d210 | ||
|
|
876d7a6b03 | ||
|
|
a2aa9cac27 | ||
|
|
08baa19b4a | ||
|
|
7283b93cea | ||
|
|
754b71959a | ||
|
|
c64e29ec57 | ||
|
|
b2dd008aee | ||
|
|
de97562c5d | ||
|
|
6373829fd6 | ||
|
|
cfd244b408 |
130
CHANGELOG.md
130
CHANGELOG.md
@@ -1,3 +1,133 @@
|
|||||||
|
# [5.46.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.45.0...v5.46.0-dev.1) (2025-11-04)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **YouTube - Hide layout components:** Add "Hide Hype points" ([#6230](https://github.com/ReVanced/revanced-patches/issues/6230)) ([a52c015](https://github.com/ReVanced/revanced-patches/commit/a52c0153b12c3f6f0ad260e03d2e9850c0466392))
|
||||||
|
* **YouTube - Hide player flyout menu items:** Add "Hide Listen with YouTube Music" ([#6232](https://github.com/ReVanced/revanced-patches/issues/6232)) ([858edbf](https://github.com/ReVanced/revanced-patches/commit/858edbf3e7f394fcc766d767c8dc54cf5ba24370))
|
||||||
|
|
||||||
|
# [5.45.0](https://github.com/ReVanced/revanced-patches/compare/v5.44.0...v5.45.0) (2025-11-01)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **Instagram:** Update failing fingerprints on newer versions ([#6181](https://github.com/ReVanced/revanced-patches/issues/6181)) ([c73a03c](https://github.com/ReVanced/revanced-patches/commit/c73a03c9e18a12262939c974cdf16221221d1487))
|
||||||
|
* **TikTok - Downloads:** Fix download path setting ([#6191](https://github.com/ReVanced/revanced-patches/issues/6191)) ([3e4990a](https://github.com/ReVanced/revanced-patches/commit/3e4990afff4c86b93970b153db713ad0f813124d))
|
||||||
|
* **YouTube - Change header:** Do not mirror header graphic with RTL languages ([a0c5604](https://github.com/ReVanced/revanced-patches/commit/a0c56049510ce040e1ccd49257864672c343344d))
|
||||||
|
* **YouTube - Force original audio:** Fall back to visionOS and not Android Studio if Android VR is not available ([6d01863](https://github.com/ReVanced/revanced-patches/commit/6d01863ec70617d9abc864ce6686ed9764dd151d))
|
||||||
|
* **YouTube - Spoof video streams:** Remove spoof stream audio selector that no longer works ([292fae4](https://github.com/ReVanced/revanced-patches/commit/292fae440c6d5694c5e84407becec2d91f1fd156))
|
||||||
|
* **YouTube Music - Hide category bar:** Correctly hide the category bar in newer app targets ([#6175](https://github.com/ReVanced/revanced-patches/issues/6175)) ([13cf172](https://github.com/ReVanced/revanced-patches/commit/13cf1724bf2f946c7129cab0db96721c90f9fe89))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **Spoof video streams:** Add experimental "Android No SDK" client type ([5f23bfe](https://github.com/ReVanced/revanced-patches/commit/5f23bfe833c6e01617a7dbc5325b4a3fb931e53e))
|
||||||
|
* **TikTok:** Add `Sanitize sharing links` patch ([#6176](https://github.com/ReVanced/revanced-patches/issues/6176)) ([ef44eaa](https://github.com/ReVanced/revanced-patches/commit/ef44eaa119b9d6c5faec051e22d20f883d0da4f1))
|
||||||
|
* **YouTube - Change Header:** Use SVG for header logo ([#6178](https://github.com/ReVanced/revanced-patches/issues/6178)) ([e9f45ce](https://github.com/ReVanced/revanced-patches/commit/e9f45ce92695d5857473ff71c14b190bded28a73))
|
||||||
|
|
||||||
|
# [5.45.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.45.0-dev.5...v5.45.0-dev.6) (2025-11-01)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **Spoof video streams:** Add experimental "Android No SDK" client type ([5f23bfe](https://github.com/ReVanced/revanced-patches/commit/5f23bfe833c6e01617a7dbc5325b4a3fb931e53e))
|
||||||
|
|
||||||
|
# [5.45.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.45.0-dev.4...v5.45.0-dev.5) (2025-11-01)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **TikTok - Downloads:** Fix download path setting ([#6191](https://github.com/ReVanced/revanced-patches/issues/6191)) ([3e4990a](https://github.com/ReVanced/revanced-patches/commit/3e4990afff4c86b93970b153db713ad0f813124d))
|
||||||
|
* **YouTube - Spoof video streams:** Remove spoof stream audio selector that no longer works ([292fae4](https://github.com/ReVanced/revanced-patches/commit/292fae440c6d5694c5e84407becec2d91f1fd156))
|
||||||
|
|
||||||
|
# [5.45.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.45.0-dev.3...v5.45.0-dev.4) (2025-10-30)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **YouTube - Change header:** Do not mirror header graphic with RTL languages ([a0c5604](https://github.com/ReVanced/revanced-patches/commit/a0c56049510ce040e1ccd49257864672c343344d))
|
||||||
|
|
||||||
|
# [5.45.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.45.0-dev.2...v5.45.0-dev.3) (2025-10-27)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **YouTube - Change Header:** Use SVG for header logo ([#6178](https://github.com/ReVanced/revanced-patches/issues/6178)) ([e9f45ce](https://github.com/ReVanced/revanced-patches/commit/e9f45ce92695d5857473ff71c14b190bded28a73))
|
||||||
|
|
||||||
|
# [5.45.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.45.0-dev.1...v5.45.0-dev.2) (2025-10-26)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **YouTube - Force original audio:** Fall back to visionOS and not Android Studio if Android VR is not available ([6d01863](https://github.com/ReVanced/revanced-patches/commit/6d01863ec70617d9abc864ce6686ed9764dd151d))
|
||||||
|
* **YouTube Music - Hide category bar:** Correctly hide the category bar in newer app targets ([#6175](https://github.com/ReVanced/revanced-patches/issues/6175)) ([13cf172](https://github.com/ReVanced/revanced-patches/commit/13cf1724bf2f946c7129cab0db96721c90f9fe89))
|
||||||
|
|
||||||
|
# [5.45.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.44.0...v5.45.0-dev.1) (2025-10-26)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **Instagram:** Update failing fingerprints on newer versions ([#6181](https://github.com/ReVanced/revanced-patches/issues/6181)) ([c73a03c](https://github.com/ReVanced/revanced-patches/commit/c73a03c9e18a12262939c974cdf16221221d1487))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **TikTok:** Add `Sanitize sharing links` patch ([#6176](https://github.com/ReVanced/revanced-patches/issues/6176)) ([ef44eaa](https://github.com/ReVanced/revanced-patches/commit/ef44eaa119b9d6c5faec051e22d20f883d0da4f1))
|
||||||
|
|
||||||
|
# [5.44.0](https://github.com/ReVanced/revanced-patches/compare/v5.43.1...v5.44.0) (2025-10-24)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **Google Photos - Spoof features:** Add support for Pixel 10 devices ([#6161](https://github.com/ReVanced/revanced-patches/issues/6161)) ([754b719](https://github.com/ReVanced/revanced-patches/commit/754b71959a0155413eb33cf1bdc2c8976eaca634))
|
||||||
|
* **X / Twitter - Change link sharing domain:** Use bytecode patching to resolve patching with Manager ([#6125](https://github.com/ReVanced/revanced-patches/issues/6125)) ([0af8c8a](https://github.com/ReVanced/revanced-patches/commit/0af8c8a766ae4ba6926404d59da2f14d649f91f7))
|
||||||
|
* **YouTube - Hide layout components:** Hide new kind of community post ([#6146](https://github.com/ReVanced/revanced-patches/issues/6146)) ([cfd244b](https://github.com/ReVanced/revanced-patches/commit/cfd244b4088daacd2788ec38357ac521e4b296d5))
|
||||||
|
* **YouTube Music:** Resolve patching 7.29 target ([2e4c6fd](https://github.com/ReVanced/revanced-patches/commit/2e4c6fdcadeef45a80733e374421d52e5e8af910))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* Add `Custom network security` patch ([#6151](https://github.com/ReVanced/revanced-patches/issues/6151)) ([e7336d2](https://github.com/ReVanced/revanced-patches/commit/e7336d2ef361cc5d6fe6e8442b36d9cf1f542931))
|
||||||
|
* **Duolingo - Enable debug menu:** Support latest app target ([#6163](https://github.com/ReVanced/revanced-patches/issues/6163)) ([08baa19](https://github.com/ReVanced/revanced-patches/commit/08baa19b4a62e62bd103d177c3f4454de199cf16))
|
||||||
|
* **Duolingo:** Add `Skip energy recharge ads` patch ([#6167](https://github.com/ReVanced/revanced-patches/issues/6167)) ([591e106](https://github.com/ReVanced/revanced-patches/commit/591e106098c6eff431b8b7ac7d985ce7373d701e))
|
||||||
|
* **Samsung Radio:** Add `Disable device checks` patch ([#6145](https://github.com/ReVanced/revanced-patches/issues/6145)) ([de97562](https://github.com/ReVanced/revanced-patches/commit/de97562c5ddc8ec707761c1e04e74c4e18f9c158))
|
||||||
|
|
||||||
|
# [5.44.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.44.0-dev.3...v5.44.0-dev.4) (2025-10-24)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* Add `Custom network security` patch ([#6151](https://github.com/ReVanced/revanced-patches/issues/6151)) ([e7336d2](https://github.com/ReVanced/revanced-patches/commit/e7336d2ef361cc5d6fe6e8442b36d9cf1f542931))
|
||||||
|
* **Duolingo:** Add `Skip energy recharge ads` patch ([#6167](https://github.com/ReVanced/revanced-patches/issues/6167)) ([591e106](https://github.com/ReVanced/revanced-patches/commit/591e106098c6eff431b8b7ac7d985ce7373d701e))
|
||||||
|
|
||||||
|
# [5.44.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.44.0-dev.2...v5.44.0-dev.3) (2025-10-22)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **Duolingo - Enable debug menu:** Support latest app target ([#6163](https://github.com/ReVanced/revanced-patches/issues/6163)) ([08baa19](https://github.com/ReVanced/revanced-patches/commit/08baa19b4a62e62bd103d177c3f4454de199cf16))
|
||||||
|
|
||||||
|
# [5.44.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.44.0-dev.1...v5.44.0-dev.2) (2025-10-22)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **Google Photos - Spoof features:** Add support for Pixel 10 devices ([#6161](https://github.com/ReVanced/revanced-patches/issues/6161)) ([754b719](https://github.com/ReVanced/revanced-patches/commit/754b71959a0155413eb33cf1bdc2c8976eaca634))
|
||||||
|
|
||||||
|
# [5.44.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.43.2-dev.3...v5.44.0-dev.1) (2025-10-22)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **Samsung Radio:** Add `Disable device checks` patch ([#6145](https://github.com/ReVanced/revanced-patches/issues/6145)) ([de97562](https://github.com/ReVanced/revanced-patches/commit/de97562c5ddc8ec707761c1e04e74c4e18f9c158))
|
||||||
|
|
||||||
|
## [5.43.2-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.43.2-dev.2...v5.43.2-dev.3) (2025-10-19)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **YouTube - Hide layout components:** Hide new kind of community post ([#6146](https://github.com/ReVanced/revanced-patches/issues/6146)) ([cfd244b](https://github.com/ReVanced/revanced-patches/commit/cfd244b4088daacd2788ec38357ac521e4b296d5))
|
||||||
|
|
||||||
## [5.43.2-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.43.2-dev.1...v5.43.2-dev.2) (2025-10-17)
|
## [5.43.2-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.43.2-dev.1...v5.43.2-dev.2) (2025-10-17)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,6 @@ public class HideCastButtonPatch {
|
|||||||
* Injection point
|
* Injection point
|
||||||
*/
|
*/
|
||||||
public static void hideCastButton(View view) {
|
public static void hideCastButton(View view) {
|
||||||
hideViewBy0dpUnderCondition(Settings.HIDE_CAST_BUTTON.get(), view);
|
hideViewBy0dpUnderCondition(Settings.HIDE_CAST_BUTTON, view);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
package app.revanced.extension.music.patches;
|
package app.revanced.extension.music.patches;
|
||||||
|
|
||||||
|
import static app.revanced.extension.shared.Utils.hideViewBy0dpUnderCondition;
|
||||||
|
|
||||||
|
import android.view.View;
|
||||||
import app.revanced.extension.music.settings.Settings;
|
import app.revanced.extension.music.settings.Settings;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
@@ -8,7 +11,7 @@ public class HideCategoryBarPatch {
|
|||||||
/**
|
/**
|
||||||
* Injection point
|
* Injection point
|
||||||
*/
|
*/
|
||||||
public static boolean hideCategoryBar() {
|
public static void hideCategoryBar(View view) {
|
||||||
return Settings.HIDE_CATEGORY_BAR.get();
|
hideViewBy0dpUnderCondition(Settings.HIDE_CATEGORY_BAR, view);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package app.revanced.extension.music.patches.spoof;
|
package app.revanced.extension.music.patches.spoof;
|
||||||
|
|
||||||
import static app.revanced.extension.music.settings.Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE;
|
import static app.revanced.extension.music.settings.Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE;
|
||||||
|
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_NO_SDK;
|
||||||
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_VR_1_43_32;
|
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_VR_1_43_32;
|
||||||
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_VR_1_61_48;
|
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_VR_1_61_48;
|
||||||
import static app.revanced.extension.shared.spoof.ClientType.VISIONOS;
|
import static app.revanced.extension.shared.spoof.ClientType.VISIONOS;
|
||||||
@@ -18,8 +19,9 @@ public class SpoofVideoStreamsPatch {
|
|||||||
public static void setClientOrderToUse() {
|
public static void setClientOrderToUse() {
|
||||||
List<ClientType> availableClients = List.of(
|
List<ClientType> availableClients = List.of(
|
||||||
ANDROID_VR_1_43_32,
|
ANDROID_VR_1_43_32,
|
||||||
ANDROID_VR_1_61_48,
|
ANDROID_NO_SDK,
|
||||||
VISIONOS
|
VISIONOS,
|
||||||
|
ANDROID_VR_1_61_48
|
||||||
);
|
);
|
||||||
|
|
||||||
app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.setClientsToUse(
|
app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.setClientsToUse(
|
||||||
|
|||||||
4
extensions/samsung/radio/build.gradle.kts
Normal file
4
extensions/samsung/radio/build.gradle.kts
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
dependencies {
|
||||||
|
compileOnly(project(":extensions:shared:library"))
|
||||||
|
compileOnly(project(":extensions:samsung:radio:stub"))
|
||||||
|
}
|
||||||
1
extensions/samsung/radio/src/main/AndroidManifest.xml
Normal file
1
extensions/samsung/radio/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<manifest/>
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package app.revanced.extension.samsung.radio.misc.fix.crash;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public final class FixCrashPatch {
|
||||||
|
/**
|
||||||
|
* Injection point.
|
||||||
|
* <p>
|
||||||
|
* Add the required permissions to the request list to avoid crashes on API 34+.
|
||||||
|
**/
|
||||||
|
public static final String[] fixPermissionRequestList(String[] perms) {
|
||||||
|
List<String> permsList = new ArrayList<>(Arrays.asList(perms));
|
||||||
|
if (permsList.contains("android.permission.POST_NOTIFICATIONS")) {
|
||||||
|
permsList.addAll(Arrays.asList("android.permission.RECORD_AUDIO", "android.permission.READ_PHONE_STATE", "android.permission.FOREGROUND_SERVICE_MICROPHONE"));
|
||||||
|
}
|
||||||
|
if (permsList.contains("android.permission.RECORD_AUDIO")) {
|
||||||
|
permsList.add("android.permission.FOREGROUND_SERVICE_MICROPHONE");
|
||||||
|
}
|
||||||
|
return permsList.toArray(new String[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package app.revanced.extension.samsung.radio.restrictions.device;
|
||||||
|
|
||||||
|
import android.os.SemSystemProperties;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public final class BypassDeviceChecksPatch {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Injection point.
|
||||||
|
* <p>
|
||||||
|
* Check if the device has the required hardware
|
||||||
|
**/
|
||||||
|
public static final boolean checkIfDeviceIsIncompatible(String[] deviceList) {
|
||||||
|
String currentDevice = SemSystemProperties.getSalesCode();
|
||||||
|
return Arrays.asList(deviceList).contains(currentDevice);
|
||||||
|
}
|
||||||
|
}
|
||||||
17
extensions/samsung/radio/stub/build.gradle.kts
Normal file
17
extensions/samsung/radio/stub/build.gradle.kts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
plugins {
|
||||||
|
alias(libs.plugins.android.library)
|
||||||
|
}
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace = "app.revanced.extension"
|
||||||
|
compileSdk = 34
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
minSdk = 24
|
||||||
|
}
|
||||||
|
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility = JavaVersion.VERSION_11
|
||||||
|
targetCompatibility = JavaVersion.VERSION_11
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
<manifest/>
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package android.os;
|
||||||
|
|
||||||
|
public class SemSystemProperties {
|
||||||
|
public static String getSalesCode() {
|
||||||
|
throw new UnsupportedOperationException("Stub");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -150,14 +150,14 @@ public class CustomBrandingPatch {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (ComponentName disable : componentsToDisable) {
|
for (ComponentName disable : componentsToDisable) {
|
||||||
// Use info logging because if the alias status become corrupt the app cannot launch.
|
|
||||||
Logger.printInfo(() -> "Disabling: " + disable.getClassName());
|
|
||||||
pm.setComponentEnabledSetting(disable,
|
pm.setComponentEnabledSetting(disable,
|
||||||
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
|
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Use info logging because if the alias status become corrupt the app cannot launch.
|
||||||
ComponentName componentToEnableFinal = componentToEnable;
|
ComponentName componentToEnableFinal = componentToEnable;
|
||||||
Logger.printInfo(() -> "Enabling: " + componentToEnableFinal.getClassName());
|
Logger.printInfo(() -> "Enabling: " + componentToEnableFinal.getClassName());
|
||||||
|
|
||||||
pm.setComponentEnabledSetting(componentToEnable,
|
pm.setComponentEnabledSetting(componentToEnable,
|
||||||
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);
|
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
|
|||||||
@@ -17,9 +17,6 @@ public class LinkSanitizer {
|
|||||||
|
|
||||||
public LinkSanitizer(String ... parametersToRemove) {
|
public LinkSanitizer(String ... parametersToRemove) {
|
||||||
final int parameterCount = parametersToRemove.length;
|
final int parameterCount = parametersToRemove.length;
|
||||||
if (parameterCount == 0) {
|
|
||||||
throw new IllegalArgumentException("No parameters specified");
|
|
||||||
}
|
|
||||||
|
|
||||||
// List is faster if only checking a few parameters.
|
// List is faster if only checking a few parameters.
|
||||||
this.parametersToRemove = parameterCount > 4
|
this.parametersToRemove = parameterCount > 4
|
||||||
@@ -40,10 +37,12 @@ public class LinkSanitizer {
|
|||||||
try {
|
try {
|
||||||
Uri.Builder builder = uri.buildUpon().clearQuery();
|
Uri.Builder builder = uri.buildUpon().clearQuery();
|
||||||
|
|
||||||
for (String paramName : uri.getQueryParameterNames()) {
|
if (!parametersToRemove.isEmpty()) {
|
||||||
if (!parametersToRemove.contains(paramName)) {
|
for (String paramName : uri.getQueryParameterNames()) {
|
||||||
for (String value : uri.getQueryParameters(paramName)) {
|
if (!parametersToRemove.contains(paramName)) {
|
||||||
builder.appendQueryParameter(paramName, value);
|
for (String value : uri.getQueryParameters(paramName)) {
|
||||||
|
builder.appendQueryParameter(paramName, value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import static java.lang.Boolean.FALSE;
|
|||||||
import static java.lang.Boolean.TRUE;
|
import static java.lang.Boolean.TRUE;
|
||||||
import static app.revanced.extension.shared.patches.CustomBrandingPatch.BrandingTheme;
|
import static app.revanced.extension.shared.patches.CustomBrandingPatch.BrandingTheme;
|
||||||
import static app.revanced.extension.shared.settings.Setting.parent;
|
import static app.revanced.extension.shared.settings.Setting.parent;
|
||||||
import static app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.AudioStreamLanguageOverrideAvailability;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Settings shared across multiple apps.
|
* Settings shared across multiple apps.
|
||||||
@@ -34,7 +33,6 @@ public class BaseSettings {
|
|||||||
//
|
//
|
||||||
|
|
||||||
public static final BooleanSetting SPOOF_VIDEO_STREAMS = new BooleanSetting("revanced_spoof_video_streams", TRUE, true, "revanced_spoof_video_streams_user_dialog_message");
|
public static final BooleanSetting SPOOF_VIDEO_STREAMS = new BooleanSetting("revanced_spoof_video_streams", TRUE, true, "revanced_spoof_video_streams_user_dialog_message");
|
||||||
public static final EnumSetting<AppLanguage> SPOOF_VIDEO_STREAMS_LANGUAGE = new EnumSetting<>("revanced_spoof_video_streams_language", AppLanguage.DEFAULT, new AudioStreamLanguageOverrideAvailability());
|
|
||||||
public static final BooleanSetting SPOOF_STREAMING_DATA_STATS_FOR_NERDS = new BooleanSetting("revanced_spoof_streaming_data_stats_for_nerds", TRUE, parent(SPOOF_VIDEO_STREAMS));
|
public static final BooleanSetting SPOOF_STREAMING_DATA_STATS_FOR_NERDS = new BooleanSetting("revanced_spoof_streaming_data_stats_for_nerds", TRUE, parent(SPOOF_VIDEO_STREAMS));
|
||||||
|
|
||||||
public static final BooleanSetting SANITIZE_SHARED_LINKS = new BooleanSetting("revanced_sanitize_sharing_links", TRUE);
|
public static final BooleanSetting SANITIZE_SHARED_LINKS = new BooleanSetting("revanced_sanitize_sharing_links", TRUE);
|
||||||
|
|||||||
@@ -54,6 +54,33 @@ public enum ClientType {
|
|||||||
ANDROID_VR_1_61_48.supportsMultiAudioTracks,
|
ANDROID_VR_1_61_48.supportsMultiAudioTracks,
|
||||||
"Android VR 1.43"
|
"Android VR 1.43"
|
||||||
),
|
),
|
||||||
|
/**
|
||||||
|
* Video not playable: Paid / Movie / Private / Age-restricted.
|
||||||
|
* Note: The 'Authorization' key must be excluded from the header.
|
||||||
|
*
|
||||||
|
* According to TeamNewPipe in 2022, if the 'androidSdkVersion' field is missing,
|
||||||
|
* the GVS did not return a valid response:
|
||||||
|
* [NewPipe#8713 (comment)](https://github.com/TeamNewPipe/NewPipe/issues/8713#issuecomment-1207443550).
|
||||||
|
*
|
||||||
|
* According to the latest commit in yt-dlp, the GVS returns a valid response
|
||||||
|
* even if the 'androidSdkVersion' field is missing:
|
||||||
|
* [yt-dlp#14693](https://github.com/yt-dlp/yt-dlp/pull/14693).
|
||||||
|
*
|
||||||
|
* For some reason, PoToken is not required.
|
||||||
|
*/
|
||||||
|
ANDROID_NO_SDK(
|
||||||
|
3,
|
||||||
|
"ANDROID",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
Build.VERSION.RELEASE,
|
||||||
|
"20.05.46",
|
||||||
|
"com.google.android.youtube/20.05.46 (Linux; U; Android " + Build.VERSION.RELEASE + ") gzip",
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
"Android No SDK"
|
||||||
|
),
|
||||||
/**
|
/**
|
||||||
* Cannot play livestreams and lacks HDR, but can play videos with music and labeled "for children".
|
* Cannot play livestreams and lacks HDR, but can play videos with music and labeled "for children".
|
||||||
* <a href="https://dumps.tadiphone.dev/dumps/google/barbet">Google Pixel 9 Pro Fold</a>
|
* <a href="https://dumps.tadiphone.dev/dumps/google/barbet">Google Pixel 9 Pro Fold</a>
|
||||||
|
|||||||
@@ -14,19 +14,11 @@ 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;
|
||||||
import app.revanced.extension.shared.settings.BaseSettings;
|
import app.revanced.extension.shared.settings.BaseSettings;
|
||||||
import app.revanced.extension.shared.settings.Setting;
|
|
||||||
import app.revanced.extension.shared.spoof.requests.StreamingDataRequest;
|
import app.revanced.extension.shared.spoof.requests.StreamingDataRequest;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public class SpoofVideoStreamsPatch {
|
public class SpoofVideoStreamsPatch {
|
||||||
|
|
||||||
public static final class AudioStreamLanguageOverrideAvailability implements Setting.Availability {
|
|
||||||
@Override
|
|
||||||
public boolean isAvailable() {
|
|
||||||
return BaseSettings.SPOOF_VIDEO_STREAMS.get() && !preferredClient.useAuth;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Domain used for internet connectivity verification.
|
* Domain used for internet connectivity verification.
|
||||||
* It has an empty response body and is only used to check for a 204 response code.
|
* It has an empty response body and is only used to check for a 204 response code.
|
||||||
@@ -62,8 +54,7 @@ public class SpoofVideoStreamsPatch {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param language Language override for non-authenticated requests. If this is null then
|
* @param language Language override for non-authenticated requests.
|
||||||
* {@link BaseSettings#SPOOF_VIDEO_STREAMS_LANGUAGE} is used.
|
|
||||||
*/
|
*/
|
||||||
public static void setLanguageOverride(@Nullable AppLanguage language) {
|
public static void setLanguageOverride(@Nullable AppLanguage language) {
|
||||||
languageOverride = language;
|
languageOverride = language;
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package app.revanced.extension.shared.spoof.requests;
|
package app.revanced.extension.shared.spoof.requests;
|
||||||
|
|
||||||
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_VR_1_43_32;
|
|
||||||
|
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
@@ -13,7 +11,6 @@ import app.revanced.extension.shared.Logger;
|
|||||||
import app.revanced.extension.shared.requests.Requester;
|
import app.revanced.extension.shared.requests.Requester;
|
||||||
import app.revanced.extension.shared.requests.Route;
|
import app.revanced.extension.shared.requests.Route;
|
||||||
import app.revanced.extension.shared.settings.AppLanguage;
|
import app.revanced.extension.shared.settings.AppLanguage;
|
||||||
import app.revanced.extension.shared.settings.BaseSettings;
|
|
||||||
import app.revanced.extension.shared.spoof.ClientType;
|
import app.revanced.extension.shared.spoof.ClientType;
|
||||||
import app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch;
|
import app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch;
|
||||||
|
|
||||||
@@ -44,7 +41,7 @@ final class PlayerRoutes {
|
|||||||
AppLanguage language = SpoofVideoStreamsPatch.getLanguageOverride();
|
AppLanguage language = SpoofVideoStreamsPatch.getLanguageOverride();
|
||||||
if (language == null) {
|
if (language == null) {
|
||||||
// Force original audio has not overrode the language.
|
// Force original audio has not overrode the language.
|
||||||
language = BaseSettings.SPOOF_VIDEO_STREAMS_LANGUAGE.get();
|
language = AppLanguage.DEFAULT;
|
||||||
}
|
}
|
||||||
//noinspection ExtractMethodRecommender
|
//noinspection ExtractMethodRecommender
|
||||||
Locale streamLocale = language.getLocale();
|
Locale streamLocale = language.getLocale();
|
||||||
|
|||||||
@@ -23,6 +23,12 @@ public class ExtensionPreferenceCategory extends ConditionalPreferenceCategory {
|
|||||||
public void addPreferences(Context context) {
|
public void addPreferences(Context context) {
|
||||||
addPreference(new ReVancedTikTokAboutPreference(context));
|
addPreference(new ReVancedTikTokAboutPreference(context));
|
||||||
|
|
||||||
|
addPreference(new TogglePreference(context,
|
||||||
|
"Sanitize sharing links",
|
||||||
|
"Remove tracking parameters from shared links.",
|
||||||
|
BaseSettings.SANITIZE_SHARED_LINKS
|
||||||
|
));
|
||||||
|
|
||||||
addPreference(new TogglePreference(context,
|
addPreference(new TogglePreference(context,
|
||||||
"Enable debug log",
|
"Enable debug log",
|
||||||
"Show extension debug log.",
|
"Show extension debug log.",
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package app.revanced.extension.tiktok.share;
|
||||||
|
|
||||||
|
import app.revanced.extension.shared.Logger;
|
||||||
|
import app.revanced.extension.shared.privacy.LinkSanitizer;
|
||||||
|
import app.revanced.extension.shared.settings.BaseSettings;
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public final class ShareUrlSanitizer {
|
||||||
|
|
||||||
|
private static final LinkSanitizer sanitizer = new LinkSanitizer();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Injection point for setting check.
|
||||||
|
*/
|
||||||
|
public static boolean shouldSanitize() {
|
||||||
|
return BaseSettings.SANITIZE_SHARED_LINKS.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Injection point for URL sanitization.
|
||||||
|
*/
|
||||||
|
public static String sanitizeShareUrl(final String url) {
|
||||||
|
if (url == null || url.isEmpty()) {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sanitizer.sanitizeUrlString(url);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,15 +17,25 @@ public class ChangeHeaderPatch {
|
|||||||
DEFAULT(null, null),
|
DEFAULT(null, null),
|
||||||
REGULAR("ytWordmarkHeader", "yt_ringo2_wordmark_header"),
|
REGULAR("ytWordmarkHeader", "yt_ringo2_wordmark_header"),
|
||||||
PREMIUM("ytPremiumWordmarkHeader", "yt_ringo2_premium_wordmark_header"),
|
PREMIUM("ytPremiumWordmarkHeader", "yt_ringo2_premium_wordmark_header"),
|
||||||
REVANCED("revanced_header_logo", "revanced_header_logo"),
|
ROUNDED("revanced_header_rounded"),
|
||||||
REVANCED_MINIMAL("revanced_header_logo_minimal", "revanced_header_logo_minimal"),
|
MINIMAL("revanced_header_minimal"),
|
||||||
CUSTOM("custom_header", "custom_header");
|
CUSTOM("revanced_header_custom"),
|
||||||
|
|
||||||
|
// Old enum names for data migration. TODO: Eventually delete these.
|
||||||
|
@Deprecated
|
||||||
|
REVANCED(ROUNDED.attributeName),
|
||||||
|
@Deprecated
|
||||||
|
REVANCED_MINIMAL(MINIMAL.attributeName);
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private final String attributeName;
|
private final String attributeName;
|
||||||
@Nullable
|
@Nullable
|
||||||
private final String drawableName;
|
private final String drawableName;
|
||||||
|
|
||||||
|
HeaderLogo(String attributeName) {
|
||||||
|
this(Objects.requireNonNull(attributeName), Objects.requireNonNull(attributeName));
|
||||||
|
}
|
||||||
|
|
||||||
HeaderLogo(@Nullable String attributeName, @Nullable String drawableName) {
|
HeaderLogo(@Nullable String attributeName, @Nullable String drawableName) {
|
||||||
this.attributeName = attributeName;
|
this.attributeName = attributeName;
|
||||||
this.drawableName = drawableName;
|
this.drawableName = drawableName;
|
||||||
@@ -42,9 +52,8 @@ public class ChangeHeaderPatch {
|
|||||||
|
|
||||||
final int identifier = Utils.getResourceIdentifier(attributeName, "attr");
|
final int identifier = Utils.getResourceIdentifier(attributeName, "attr");
|
||||||
if (identifier == 0) {
|
if (identifier == 0) {
|
||||||
// Identifier is zero if custom header setting was included in imported settings
|
// Should never happen.
|
||||||
// and a custom image was not included during patching.
|
Logger.printException(() -> "Could not find attribute: " + drawableName);
|
||||||
Logger.printDebug(() -> "Could not find attribute: " + drawableName);
|
|
||||||
Settings.HEADER_LOGO.resetToDefault();
|
Settings.HEADER_LOGO.resetToDefault();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -63,12 +72,14 @@ public class ChangeHeaderPatch {
|
|||||||
: "_light");
|
: "_light");
|
||||||
|
|
||||||
final int identifier = Utils.getResourceIdentifier(drawableFullName, "drawable");
|
final int identifier = Utils.getResourceIdentifier(drawableFullName, "drawable");
|
||||||
if (identifier == 0) {
|
if (identifier != 0) {
|
||||||
Logger.printDebug(() -> "Could not find drawable: " + drawableFullName);
|
return Utils.getContext().getDrawable(identifier);
|
||||||
Settings.HEADER_LOGO.resetToDefault();
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
return Utils.getContext().getDrawable(identifier);
|
|
||||||
|
// Should never happen.
|
||||||
|
Logger.printException(() -> "Could not find drawable: " + drawableFullName);
|
||||||
|
Settings.HEADER_LOGO.resetToDefault();
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,6 +63,11 @@ final class DescriptionComponentsFilter extends Filter {
|
|||||||
"how_this_was_made_section"
|
"how_this_was_made_section"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
final StringFilterGroup hypePoints = new StringFilterGroup(
|
||||||
|
Settings.HIDE_HYPE_POINTS,
|
||||||
|
"hype_points_factoid"
|
||||||
|
);
|
||||||
|
|
||||||
macroMarkersCarousel = new StringFilterGroup(
|
macroMarkersCarousel = new StringFilterGroup(
|
||||||
null,
|
null,
|
||||||
"macro_markers_carousel.e"
|
"macro_markers_carousel.e"
|
||||||
@@ -96,6 +101,7 @@ final class DescriptionComponentsFilter extends Filter {
|
|||||||
infoCardsSection,
|
infoCardsSection,
|
||||||
horizontalShelf,
|
horizontalShelf,
|
||||||
howThisWasMadeSection,
|
howThisWasMadeSection,
|
||||||
|
hypePoints,
|
||||||
macroMarkersCarousel,
|
macroMarkersCarousel,
|
||||||
podcastSection,
|
podcastSection,
|
||||||
transcriptSection
|
transcriptSection
|
||||||
|
|||||||
@@ -87,7 +87,8 @@ public final class LayoutComponentsFilter extends Filter {
|
|||||||
"post_shelf_slim.e",
|
"post_shelf_slim.e",
|
||||||
"videos_post_responsive_root.e",
|
"videos_post_responsive_root.e",
|
||||||
"text_post_responsive_root.e",
|
"text_post_responsive_root.e",
|
||||||
"poll_post_responsive_root.e"
|
"poll_post_responsive_root.e",
|
||||||
|
"shared_post_root.e"
|
||||||
);
|
);
|
||||||
|
|
||||||
final var subscribersCommunityGuidelines = new StringFilterGroup(
|
final var subscribersCommunityGuidelines = new StringFilterGroup(
|
||||||
|
|||||||
@@ -63,12 +63,12 @@ public class PlayerFlyoutMenuItemsFilter extends Filter {
|
|||||||
"volume_stable_"
|
"volume_stable_"
|
||||||
),
|
),
|
||||||
new ByteArrayFilterGroup(
|
new ByteArrayFilterGroup(
|
||||||
Settings.HIDE_PLAYER_FLYOUT_HELP,
|
Settings.HIDE_PLAYER_FLYOUT_LISTEN_WITH_YOUTUBE_MUSIC,
|
||||||
"yt_outline_question_circle_"
|
"yt_outline_youtube_music_"
|
||||||
),
|
),
|
||||||
new ByteArrayFilterGroup(
|
new ByteArrayFilterGroup(
|
||||||
Settings.HIDE_PLAYER_FLYOUT_MORE_INFO,
|
Settings.HIDE_PLAYER_FLYOUT_HELP,
|
||||||
"yt_outline_info_circle_"
|
"yt_outline_question_circle_"
|
||||||
),
|
),
|
||||||
new ByteArrayFilterGroup(
|
new ByteArrayFilterGroup(
|
||||||
Settings.HIDE_PLAYER_FLYOUT_LOCK_SCREEN,
|
Settings.HIDE_PLAYER_FLYOUT_LOCK_SCREEN,
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package app.revanced.extension.youtube.patches.spoof;
|
package app.revanced.extension.youtube.patches.spoof;
|
||||||
|
|
||||||
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_CREATOR;
|
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_CREATOR;
|
||||||
|
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_NO_SDK;
|
||||||
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_VR_1_43_32;
|
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_VR_1_43_32;
|
||||||
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_VR_1_61_48;
|
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_VR_1_61_48;
|
||||||
import static app.revanced.extension.shared.spoof.ClientType.IPADOS;
|
import static app.revanced.extension.shared.spoof.ClientType.IPADOS;
|
||||||
@@ -38,9 +39,10 @@ public class SpoofVideoStreamsPatch {
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<ClientType> availableClients = List.of(
|
List<ClientType> availableClients = List.of(
|
||||||
|
VISIONOS,
|
||||||
ANDROID_CREATOR,
|
ANDROID_CREATOR,
|
||||||
ANDROID_VR_1_43_32,
|
ANDROID_VR_1_43_32,
|
||||||
VISIONOS,
|
ANDROID_NO_SDK,
|
||||||
IPADOS);
|
IPADOS);
|
||||||
|
|
||||||
app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.setClientsToUse(
|
app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch.setClientsToUse(
|
||||||
|
|||||||
@@ -1,51 +0,0 @@
|
|||||||
package app.revanced.extension.youtube.patches.theme;
|
|
||||||
|
|
||||||
import android.graphics.Canvas;
|
|
||||||
import android.graphics.ColorFilter;
|
|
||||||
import android.graphics.Paint;
|
|
||||||
import android.graphics.PixelFormat;
|
|
||||||
import android.graphics.drawable.Drawable;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
|
|
||||||
import app.revanced.extension.youtube.patches.HideSeekbarPatch;
|
|
||||||
import app.revanced.extension.youtube.settings.Settings;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Used by {@link SeekbarColorPatch} change the color of the seekbar.
|
|
||||||
* and {@link HideSeekbarPatch} to hide the seekbar of the feed and watch history.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public class ProgressBarDrawable extends Drawable {
|
|
||||||
|
|
||||||
private final Paint paint = new Paint();
|
|
||||||
{
|
|
||||||
paint.setColor(SeekbarColorPatch.getSeekbarColor());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void draw(@NonNull Canvas canvas) {
|
|
||||||
if (Settings.HIDE_SEEKBAR_THUMBNAIL.get()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
canvas.drawRect(getBounds(), paint);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setAlpha(int alpha) {
|
|
||||||
paint.setAlpha(alpha);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setColorFilter(@Nullable ColorFilter colorFilter) {
|
|
||||||
paint.setColorFilter(colorFilter);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getOpacity() {
|
|
||||||
return PixelFormat.TRANSLUCENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -4,9 +4,7 @@ import static app.revanced.extension.shared.StringRef.str;
|
|||||||
import static app.revanced.extension.shared.Utils.clamp;
|
import static app.revanced.extension.shared.Utils.clamp;
|
||||||
import static app.revanced.extension.youtube.patches.theme.ThemePatch.SplashScreenAnimationStyle;
|
import static app.revanced.extension.youtube.patches.theme.ThemePatch.SplashScreenAnimationStyle;
|
||||||
|
|
||||||
import android.content.res.Resources;
|
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.drawable.AnimatedVectorDrawable;
|
|
||||||
|
|
||||||
import com.airbnb.lottie.LottieAnimationView;
|
import com.airbnb.lottie.LottieAnimationView;
|
||||||
|
|
||||||
@@ -15,7 +13,6 @@ import java.io.IOException;
|
|||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
|
||||||
import app.revanced.extension.shared.Logger;
|
import app.revanced.extension.shared.Logger;
|
||||||
@@ -104,27 +101,6 @@ public final class SeekbarColorPatch {
|
|||||||
return customSeekbarColor;
|
return customSeekbarColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int colorChannelTo3Bits(int channel8Bits) {
|
|
||||||
final float channel3Bits = channel8Bits * 7 / 255f;
|
|
||||||
|
|
||||||
// If a color channel is near zero, then allow rounding up so values between
|
|
||||||
// 0x12 and 0x23 will show as 0x24. But always round down when the channel is
|
|
||||||
// near full saturation, otherwise rounding to nearest will cause all values
|
|
||||||
// between 0xEC and 0xFE to always show as full saturation (0xFF).
|
|
||||||
return channel3Bits < 6
|
|
||||||
? Math.round(channel3Bits)
|
|
||||||
: (int) channel3Bits;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("SameParameterValue")
|
|
||||||
private static String get9BitStyleIdentifier(int color24Bit) {
|
|
||||||
final int r3 = colorChannelTo3Bits(Color.red(color24Bit));
|
|
||||||
final int g3 = colorChannelTo3Bits(Color.green(color24Bit));
|
|
||||||
final int b3 = colorChannelTo3Bits(Color.blue(color24Bit));
|
|
||||||
|
|
||||||
return String.format(Locale.US, "splash_seekbar_color_style_%d_%d_%d", r3, g3, b3);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* injection point.
|
* injection point.
|
||||||
*/
|
*/
|
||||||
@@ -135,36 +111,6 @@ public final class SeekbarColorPatch {
|
|||||||
return original; // false = drawable style, true = lottie style.
|
return original; // false = drawable style, true = lottie style.
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Injection point.
|
|
||||||
* Old drawable style launch screen.
|
|
||||||
*/
|
|
||||||
public static void setSplashAnimationDrawableTheme(AnimatedVectorDrawable vectorDrawable) {
|
|
||||||
// Alternatively a ColorMatrixColorFilter can be used to change the color of the drawable
|
|
||||||
// without using any styles, but a color filter cannot selectively change the seekbar
|
|
||||||
// while keeping the red YT logo untouched.
|
|
||||||
// Even if the seekbar color xml value is changed to a completely different color (such as green),
|
|
||||||
// a color filter still cannot be selectively applied when the drawable has more than 1 color.
|
|
||||||
try {
|
|
||||||
// Must set the color even if custom seekbar is off,
|
|
||||||
// because the xml color was replaced with a themed value.
|
|
||||||
String seekbarStyle = get9BitStyleIdentifier(customSeekbarColor);
|
|
||||||
Logger.printDebug(() -> "Using splash seekbar style: " + seekbarStyle);
|
|
||||||
|
|
||||||
final int styleIdentifierDefault = Utils.getResourceIdentifierOrThrow(
|
|
||||||
seekbarStyle,
|
|
||||||
"style"
|
|
||||||
);
|
|
||||||
|
|
||||||
Resources.Theme theme = Utils.getContext().getResources().newTheme();
|
|
||||||
theme.applyStyle(styleIdentifierDefault, true);
|
|
||||||
|
|
||||||
vectorDrawable.applyTheme(theme);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
Logger.printException(() -> "setSplashAnimationDrawableTheme failure", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Injection point.
|
* Injection point.
|
||||||
* Modern Lottie style animation.
|
* Modern Lottie style animation.
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package app.revanced.extension.youtube.settings;
|
|||||||
|
|
||||||
import static java.lang.Boolean.FALSE;
|
import static java.lang.Boolean.FALSE;
|
||||||
import static java.lang.Boolean.TRUE;
|
import static java.lang.Boolean.TRUE;
|
||||||
import static app.revanced.extension.shared.settings.Setting.migrateOldSettingToNew;
|
|
||||||
import static app.revanced.extension.shared.settings.Setting.parent;
|
import static app.revanced.extension.shared.settings.Setting.parent;
|
||||||
import static app.revanced.extension.shared.settings.Setting.parentsAll;
|
import static app.revanced.extension.shared.settings.Setting.parentsAll;
|
||||||
import static app.revanced.extension.shared.settings.Setting.parentsAny;
|
import static app.revanced.extension.shared.settings.Setting.parentsAny;
|
||||||
@@ -17,7 +16,6 @@ import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerH
|
|||||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerHideSubtextsAvailability;
|
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerHideSubtextsAvailability;
|
||||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerHorizontalDragAvailability;
|
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerHorizontalDragAvailability;
|
||||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType;
|
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType;
|
||||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.MINIMAL;
|
|
||||||
import static app.revanced.extension.youtube.patches.OpenShortsInRegularPlayerPatch.ShortsPlayerType;
|
import static app.revanced.extension.youtube.patches.OpenShortsInRegularPlayerPatch.ShortsPlayerType;
|
||||||
import static app.revanced.extension.youtube.patches.SeekbarThumbnailsPatch.SeekbarThumbnailsHighQualityAvailability;
|
import static app.revanced.extension.youtube.patches.SeekbarThumbnailsPatch.SeekbarThumbnailsHighQualityAvailability;
|
||||||
import static app.revanced.extension.youtube.patches.components.PlayerFlyoutMenuItemsFilter.HideAudioFlyoutMenuAvailability;
|
import static app.revanced.extension.youtube.patches.components.PlayerFlyoutMenuItemsFilter.HideAudioFlyoutMenuAvailability;
|
||||||
@@ -41,7 +39,6 @@ import app.revanced.extension.shared.settings.IntegerSetting;
|
|||||||
import app.revanced.extension.shared.settings.LongSetting;
|
import app.revanced.extension.shared.settings.LongSetting;
|
||||||
import app.revanced.extension.shared.settings.Setting;
|
import app.revanced.extension.shared.settings.Setting;
|
||||||
import app.revanced.extension.shared.settings.StringSetting;
|
import app.revanced.extension.shared.settings.StringSetting;
|
||||||
import app.revanced.extension.shared.settings.preference.SharedPrefCategory;
|
|
||||||
import app.revanced.extension.shared.spoof.ClientType;
|
import app.revanced.extension.shared.spoof.ClientType;
|
||||||
import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.DeArrowAvailability;
|
import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.DeArrowAvailability;
|
||||||
import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.StillImagesAvailability;
|
import app.revanced.extension.youtube.patches.AlternativeThumbnailsPatch.StillImagesAvailability;
|
||||||
@@ -214,6 +211,7 @@ public class Settings extends BaseSettings {
|
|||||||
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);
|
||||||
|
public static final BooleanSetting HIDE_HYPE_POINTS = new BooleanSetting("revanced_hide_hype_points", FALSE);
|
||||||
public static final BooleanSetting HIDE_INFO_CARDS_SECTION = new BooleanSetting("revanced_hide_info_cards_section", TRUE);
|
public static final BooleanSetting HIDE_INFO_CARDS_SECTION = new BooleanSetting("revanced_hide_info_cards_section", TRUE);
|
||||||
public static final BooleanSetting HIDE_KEY_CONCEPTS_SECTION = new BooleanSetting("revanced_hide_key_concepts_section", FALSE);
|
public static final BooleanSetting HIDE_KEY_CONCEPTS_SECTION = new BooleanSetting("revanced_hide_key_concepts_section", FALSE);
|
||||||
public static final BooleanSetting HIDE_PODCAST_SECTION = new BooleanSetting("revanced_hide_podcast_section", TRUE);
|
public static final BooleanSetting HIDE_PODCAST_SECTION = new BooleanSetting("revanced_hide_podcast_section", TRUE);
|
||||||
@@ -242,9 +240,9 @@ public class Settings extends BaseSettings {
|
|||||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_AUDIO_TRACK = new BooleanSetting("revanced_hide_player_flyout_audio_track", FALSE, new HideAudioFlyoutMenuAvailability());
|
public static final BooleanSetting HIDE_PLAYER_FLYOUT_AUDIO_TRACK = new BooleanSetting("revanced_hide_player_flyout_audio_track", FALSE, new HideAudioFlyoutMenuAvailability());
|
||||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_CAPTIONS = new BooleanSetting("revanced_hide_player_flyout_captions", FALSE);
|
public static final BooleanSetting HIDE_PLAYER_FLYOUT_CAPTIONS = new BooleanSetting("revanced_hide_player_flyout_captions", FALSE);
|
||||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_HELP = new BooleanSetting("revanced_hide_player_flyout_help", TRUE);
|
public static final BooleanSetting HIDE_PLAYER_FLYOUT_HELP = new BooleanSetting("revanced_hide_player_flyout_help", TRUE);
|
||||||
|
public static final BooleanSetting HIDE_PLAYER_FLYOUT_LISTEN_WITH_YOUTUBE_MUSIC = new BooleanSetting("revanced_hide_player_flyout_listen_with_youtube_music", FALSE);
|
||||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_LOCK_SCREEN = new BooleanSetting("revanced_hide_player_flyout_lock_screen", FALSE);
|
public static final BooleanSetting HIDE_PLAYER_FLYOUT_LOCK_SCREEN = new BooleanSetting("revanced_hide_player_flyout_lock_screen", FALSE);
|
||||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_LOOP_VIDEO = new BooleanSetting("revanced_hide_player_flyout_loop_video", FALSE);
|
public static final BooleanSetting HIDE_PLAYER_FLYOUT_LOOP_VIDEO = new BooleanSetting("revanced_hide_player_flyout_loop_video", FALSE);
|
||||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_MORE_INFO = new BooleanSetting("revanced_hide_player_flyout_more_info", TRUE);
|
|
||||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_SLEEP_TIMER = new BooleanSetting("revanced_hide_player_flyout_sleep_timer", FALSE);
|
public static final BooleanSetting HIDE_PLAYER_FLYOUT_SLEEP_TIMER = new BooleanSetting("revanced_hide_player_flyout_sleep_timer", FALSE);
|
||||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_SPEED = new BooleanSetting("revanced_hide_player_flyout_speed", FALSE);
|
public static final BooleanSetting HIDE_PLAYER_FLYOUT_SPEED = new BooleanSetting("revanced_hide_player_flyout_speed", FALSE);
|
||||||
public static final BooleanSetting HIDE_PLAYER_FLYOUT_STABLE_VOLUME = new BooleanSetting("revanced_hide_player_flyout_stable_volume", FALSE);
|
public static final BooleanSetting HIDE_PLAYER_FLYOUT_STABLE_VOLUME = new BooleanSetting("revanced_hide_player_flyout_stable_volume", FALSE);
|
||||||
@@ -452,14 +450,7 @@ public class Settings extends BaseSettings {
|
|||||||
public static final StringSetting SB_CATEGORY_UNSUBMITTED_COLOR = new StringSetting("sb_unsubmitted_color", "#FFFFFFFF", false, false);
|
public static final StringSetting SB_CATEGORY_UNSUBMITTED_COLOR = new StringSetting("sb_unsubmitted_color", "#FFFFFFFF", false, false);
|
||||||
|
|
||||||
// Deprecated migrations
|
// Deprecated migrations
|
||||||
private static final BooleanSetting DEPRECATED_AUTO_REPEAT = new BooleanSetting("revanced_auto_repeat", FALSE);
|
|
||||||
private static final BooleanSetting DEPRECATED_HIDE_PLAYER_BUTTONS = new BooleanSetting("revanced_hide_player_buttons", FALSE, true);
|
|
||||||
private static final BooleanSetting DEPRECATED_HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER = new BooleanSetting("revanced_hide_video_quality_menu_footer", FALSE);
|
|
||||||
private static final IntegerSetting DEPRECATED_SWIPE_OVERLAY_BACKGROUND_ALPHA = new IntegerSetting("revanced_swipe_overlay_background_alpha", 127);
|
|
||||||
private static final StringSetting DEPRECATED_SEEKBAR_CUSTOM_COLOR_PRIMARY = new StringSetting("revanced_seekbar_custom_color_value", "#FF0033");
|
private static final StringSetting DEPRECATED_SEEKBAR_CUSTOM_COLOR_PRIMARY = new StringSetting("revanced_seekbar_custom_color_value", "#FF0033");
|
||||||
private static final BooleanSetting DEPRECATED_DISABLE_SUGGESTED_VIDEO_END_SCREEN = new BooleanSetting("revanced_disable_suggested_video_end_screen", FALSE);
|
|
||||||
private static final BooleanSetting DEPRECATED_RESTORE_OLD_VIDEO_QUALITY_MENU = new BooleanSetting("revanced_restore_old_video_quality_menu", TRUE);
|
|
||||||
private static final BooleanSetting DEPRECATED_AUTO_CAPTIONS = new BooleanSetting("revanced_auto_captions", FALSE);
|
|
||||||
|
|
||||||
private static final FloatSetting DEPRECATED_SB_CATEGORY_SPONSOR_OPACITY = new FloatSetting("sb_sponsor_opacity", 0.8f, false, false);
|
private static final FloatSetting DEPRECATED_SB_CATEGORY_SPONSOR_OPACITY = new FloatSetting("sb_sponsor_opacity", 0.8f, false, false);
|
||||||
private static final FloatSetting DEPRECATED_SB_CATEGORY_SELF_PROMO_OPACITY = new FloatSetting("sb_selfpromo_opacity", 0.8f, false, false);
|
private static final FloatSetting DEPRECATED_SB_CATEGORY_SELF_PROMO_OPACITY = new FloatSetting("sb_selfpromo_opacity", 0.8f, false, false);
|
||||||
@@ -475,17 +466,12 @@ public class Settings extends BaseSettings {
|
|||||||
static {
|
static {
|
||||||
// region Migration
|
// region Migration
|
||||||
|
|
||||||
migrateOldSettingToNew(DEPRECATED_AUTO_REPEAT, LOOP_VIDEO);
|
// Migrate renamed change header enums.
|
||||||
migrateOldSettingToNew(DEPRECATED_HIDE_PLAYER_BUTTONS, HIDE_PLAYER_PREVIOUS_NEXT_BUTTONS);
|
if (HEADER_LOGO.get() == HeaderLogo.REVANCED) {
|
||||||
migrateOldSettingToNew(DEPRECATED_HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER, HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER);
|
HEADER_LOGO.save(HeaderLogo.ROUNDED);
|
||||||
migrateOldSettingToNew(DEPRECATED_DISABLE_SUGGESTED_VIDEO_END_SCREEN, HIDE_END_SCREEN_SUGGESTED_VIDEO);
|
}
|
||||||
migrateOldSettingToNew(DEPRECATED_RESTORE_OLD_VIDEO_QUALITY_MENU, ADVANCED_VIDEO_QUALITY_MENU);
|
if (HEADER_LOGO.get() == HeaderLogo.REVANCED_MINIMAL) {
|
||||||
migrateOldSettingToNew(DEPRECATED_AUTO_CAPTIONS, DISABLE_AUTO_CAPTIONS);
|
HEADER_LOGO.save(HeaderLogo.MINIMAL);
|
||||||
|
|
||||||
// Migrate renamed enum.
|
|
||||||
//noinspection deprecation
|
|
||||||
if (MINIPLAYER_TYPE.get() == MiniplayerType.PHONE) {
|
|
||||||
MINIPLAYER_TYPE.save(MINIMAL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Migrate old single color seekbar with a slightly brighter accent color based on the primary.
|
// Migrate old single color seekbar with a slightly brighter accent color based on the primary.
|
||||||
@@ -512,11 +498,6 @@ public class Settings extends BaseSettings {
|
|||||||
DEPRECATED_SEEKBAR_CUSTOM_COLOR_PRIMARY.resetToDefault();
|
DEPRECATED_SEEKBAR_CUSTOM_COLOR_PRIMARY.resetToDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!DEPRECATED_SWIPE_OVERLAY_BACKGROUND_ALPHA.isSetToDefault()) {
|
|
||||||
SWIPE_OVERLAY_OPACITY.save(DEPRECATED_SWIPE_OVERLAY_BACKGROUND_ALPHA.get() / 255);
|
|
||||||
DEPRECATED_SWIPE_OVERLAY_BACKGROUND_ALPHA.resetToDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Old spoof versions that no longer work,
|
// Old spoof versions that no longer work,
|
||||||
// or is spoofing to a version the same or newer than this app.
|
// or is spoofing to a version the same or newer than this app.
|
||||||
if (!SPOOF_APP_VERSION_TARGET.isSetToDefault() &&
|
if (!SPOOF_APP_VERSION_TARGET.isSetToDefault() &&
|
||||||
@@ -534,13 +515,7 @@ public class Settings extends BaseSettings {
|
|||||||
|
|
||||||
// RYD requires manually migrating old settings since the lack of
|
// RYD requires manually migrating old settings since the lack of
|
||||||
// a "revanced_" on the old setting causes duplicate key exceptions during export.
|
// a "revanced_" on the old setting causes duplicate key exceptions during export.
|
||||||
SharedPrefCategory revancedPrefs = Setting.preferences;
|
Setting.migrateFromOldPreferences(Setting.preferences, RYD_USER_ID, "ryd_user_id");
|
||||||
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");
|
|
||||||
|
|
||||||
// Migrate old saved data. Must be done here before the settings can be used by any other code.
|
// Migrate old saved data. Must be done here before the settings can be used by any other code.
|
||||||
applyOldSbOpacityToColor(SB_CATEGORY_SPONSOR_COLOR, DEPRECATED_SB_CATEGORY_SPONSOR_OPACITY);
|
applyOldSbOpacityToColor(SB_CATEGORY_SPONSOR_COLOR, DEPRECATED_SB_CATEGORY_SPONSOR_OPACITY);
|
||||||
|
|||||||
@@ -1,63 +0,0 @@
|
|||||||
package app.revanced.extension.youtube.settings.preference;
|
|
||||||
|
|
||||||
import static app.revanced.extension.shared.StringRef.str;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.util.AttributeSet;
|
|
||||||
|
|
||||||
import app.revanced.extension.shared.settings.preference.SortedListPreference;
|
|
||||||
import app.revanced.extension.shared.spoof.ClientType;
|
|
||||||
import app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch;
|
|
||||||
import app.revanced.extension.youtube.settings.Settings;
|
|
||||||
|
|
||||||
@SuppressWarnings({"deprecation", "unused"})
|
|
||||||
public class SpoofAudioSelectorListPreference extends SortedListPreference {
|
|
||||||
|
|
||||||
private final boolean available;
|
|
||||||
|
|
||||||
{
|
|
||||||
final boolean isAndroidStudio = Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() == ClientType.ANDROID_CREATOR;
|
|
||||||
|
|
||||||
if (isAndroidStudio || SpoofVideoStreamsPatch.getLanguageOverride() != null) {
|
|
||||||
available = false;
|
|
||||||
super.setEnabled(false);
|
|
||||||
super.setSummary(str(isAndroidStudio
|
|
||||||
? "revanced_spoof_video_streams_language_android_studio"
|
|
||||||
: "revanced_spoof_video_streams_language_not_available"));
|
|
||||||
} else {
|
|
||||||
available = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public SpoofAudioSelectorListPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
|
||||||
super(context, attrs, defStyleAttr, defStyleRes);
|
|
||||||
}
|
|
||||||
public SpoofAudioSelectorListPreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
|
||||||
super(context, attrs, defStyleAttr);
|
|
||||||
}
|
|
||||||
public SpoofAudioSelectorListPreference(Context context, AttributeSet attrs) {
|
|
||||||
super(context, attrs);
|
|
||||||
}
|
|
||||||
public SpoofAudioSelectorListPreference(Context context) {
|
|
||||||
super(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setEnabled(boolean enabled) {
|
|
||||||
if (!available) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
super.setEnabled(enabled);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setSummary(CharSequence summary) {
|
|
||||||
if (!available) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
super.setSummary(summary);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -80,29 +80,34 @@ public class SpoofStreamingDataSideEffectsPreference extends Preference {
|
|||||||
Logger.printDebug(() -> "Updating spoof stream side effects preference");
|
Logger.printDebug(() -> "Updating spoof stream side effects preference");
|
||||||
setEnabled(BaseSettings.SPOOF_VIDEO_STREAMS.get());
|
setEnabled(BaseSettings.SPOOF_VIDEO_STREAMS.get());
|
||||||
|
|
||||||
String summary = str("revanced_spoof_video_streams_about_no_audio_tracks");
|
String summary = "";
|
||||||
|
|
||||||
switch (clientType) {
|
switch (clientType) {
|
||||||
case ANDROID_CREATOR ->
|
case ANDROID_CREATOR ->
|
||||||
summary += '\n' + str("revanced_spoof_video_streams_about_no_stable_volume")
|
summary = str("revanced_spoof_video_streams_about_no_audio_tracks")
|
||||||
+ '\n' + str("revanced_spoof_video_streams_about_no_av1")
|
+ '\n' + str("revanced_spoof_video_streams_about_no_stable_volume")
|
||||||
+ '\n' + str("revanced_spoof_video_streams_about_no_force_original_audio");
|
+ '\n' + str("revanced_spoof_video_streams_about_no_av1")
|
||||||
|
+ '\n' + str("revanced_spoof_video_streams_about_no_force_original_audio");
|
||||||
// VR 1.61 is not exposed in the UI and should never be reached here.
|
// VR 1.61 is not exposed in the UI and should never be reached here.
|
||||||
case ANDROID_VR_1_43_32, ANDROID_VR_1_61_48 ->
|
case ANDROID_VR_1_43_32, ANDROID_VR_1_61_48 ->
|
||||||
summary += '\n' + str("revanced_spoof_video_streams_about_no_stable_volume");
|
summary = str("revanced_spoof_video_streams_about_no_audio_tracks")
|
||||||
|
+ '\n' + str("revanced_spoof_video_streams_about_no_stable_volume");
|
||||||
|
case ANDROID_NO_SDK ->
|
||||||
|
summary = str("revanced_spoof_video_streams_about_playback_failure");
|
||||||
case IPADOS ->
|
case IPADOS ->
|
||||||
summary = str("revanced_spoof_video_streams_about_playback_failure")
|
summary = str("revanced_spoof_video_streams_about_playback_failure")
|
||||||
+ '\n' + str("revanced_spoof_video_streams_about_no_av1");
|
+ '\n' + str("revanced_spoof_video_streams_about_no_av1");
|
||||||
case VISIONOS ->
|
case VISIONOS ->
|
||||||
summary = str("revanced_spoof_video_streams_about_experimental")
|
summary = str("revanced_spoof_video_streams_about_experimental")
|
||||||
+ '\n' + summary
|
+ '\n' + str("revanced_spoof_video_streams_about_no_audio_tracks")
|
||||||
+ '\n' + str("revanced_spoof_video_streams_about_no_av1");
|
+ '\n' + str("revanced_spoof_video_streams_about_no_av1");
|
||||||
|
default -> Logger.printException(() -> "Unknown client: " + clientType);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only iPadOS can play children videos in incognito, but it commonly fails at 1 minute
|
// Only iPadOS can play children videos in incognito, but it commonly fails at 1 minute
|
||||||
// or doesn't even start playback at all. List the side effect for other clients
|
// or doesn't start playback at all. List the side effect for other clients
|
||||||
// since they will fall over to iPadOS.
|
// since they will fall over to iPadOS.
|
||||||
if (clientType != ClientType.IPADOS) {
|
if (clientType != ClientType.IPADOS && clientType != ClientType.ANDROID_NO_SDK) {
|
||||||
summary += '\n' + str("revanced_spoof_video_streams_about_kids_videos");
|
summary += '\n' + str("revanced_spoof_video_streams_about_kids_videos");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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.43.2-dev.2
|
version = 5.46.0-dev.1
|
||||||
|
|||||||
@@ -60,6 +60,10 @@ public final class app/revanced/patches/all/misc/connectivity/wifi/spoof/SpoofWi
|
|||||||
public static final fun getSpoofWifiPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
public static final fun getSpoofWifiPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final class app/revanced/patches/all/misc/customcertificates/CustomCertificatesPatchKt {
|
||||||
|
public static final fun getCustomNetworkSecurityPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
|
||||||
|
}
|
||||||
|
|
||||||
public final class app/revanced/patches/all/misc/debugging/EnableAndroidDebuggingPatchKt {
|
public final class app/revanced/patches/all/misc/debugging/EnableAndroidDebuggingPatchKt {
|
||||||
public static final fun getEnableAndroidDebuggingPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
|
public static final fun getEnableAndroidDebuggingPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
|
||||||
}
|
}
|
||||||
@@ -184,6 +188,10 @@ public final class app/revanced/patches/duolingo/debug/EnableDebugMenuPatchKt {
|
|||||||
public static final fun getEnableDebugMenuPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
public static final fun getEnableDebugMenuPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final class app/revanced/patches/duolingo/energy/SkipEnergyRechargeAdsPatchKt {
|
||||||
|
public static final fun getSkipEnergyRechargeAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||||
|
}
|
||||||
|
|
||||||
public final class app/revanced/patches/facebook/ads/mainfeed/HideSponsoredStoriesPatchKt {
|
public final class app/revanced/patches/facebook/ads/mainfeed/HideSponsoredStoriesPatchKt {
|
||||||
public static final fun getHideSponsoredStoriesPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
public static final fun getHideSponsoredStoriesPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||||
}
|
}
|
||||||
@@ -764,6 +772,14 @@ public final class app/revanced/patches/reddit/misc/tracking/url/SanitizeUrlQuer
|
|||||||
public static final fun getSanitizeUrlQueryPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
public static final fun getSanitizeUrlQueryPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final class app/revanced/patches/samsung/radio/misc/fix/crash/FixCrashPatchKt {
|
||||||
|
public static final fun getFixCrashPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final class app/revanced/patches/samsung/radio/restrictions/device/BypassDeviceChecksPatchKt {
|
||||||
|
public static final fun getBypassDeviceChecksPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||||
|
}
|
||||||
|
|
||||||
public final class app/revanced/patches/serviceportalbund/detection/root/RootDetectionPatchKt {
|
public final class app/revanced/patches/serviceportalbund/detection/root/RootDetectionPatchKt {
|
||||||
public static final fun getRootDetectionPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
public static final fun getRootDetectionPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||||
}
|
}
|
||||||
@@ -1172,6 +1188,10 @@ public final class app/revanced/patches/tiktok/misc/settings/SettingsPatchKt {
|
|||||||
public static final fun getSettingsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
public static final fun getSettingsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final class app/revanced/patches/tiktok/misc/share/SanitizeShareUrlsPatchKt {
|
||||||
|
public static final fun getSanitizeShareUrlsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||||
|
}
|
||||||
|
|
||||||
public final class app/revanced/patches/tiktok/misc/spoof/sim/SpoofSimPatchKt {
|
public final class app/revanced/patches/tiktok/misc/spoof/sim/SpoofSimPatchKt {
|
||||||
public static final fun getSpoofSimPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
public static final fun getSpoofSimPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,182 @@
|
|||||||
|
package app.revanced.patches.all.misc.customcertificates
|
||||||
|
|
||||||
|
import app.revanced.patcher.patch.PatchException
|
||||||
|
import app.revanced.patcher.patch.booleanOption
|
||||||
|
import app.revanced.patcher.patch.resourcePatch
|
||||||
|
import app.revanced.patcher.patch.stringsOption
|
||||||
|
import app.revanced.util.Utils.trimIndentMultiline
|
||||||
|
import app.revanced.util.getNode
|
||||||
|
import org.w3c.dom.Element
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
val customNetworkSecurityPatch = resourcePatch(
|
||||||
|
name = "Custom network security",
|
||||||
|
description = "Allows trusting custom certificate authorities for a specific domain.",
|
||||||
|
use = false
|
||||||
|
) {
|
||||||
|
|
||||||
|
val targetDomains by stringsOption(
|
||||||
|
key = "targetDomains",
|
||||||
|
title = "Target domains",
|
||||||
|
description = "List of domains to which the custom trust configuration will be applied (one domain per entry).",
|
||||||
|
default = listOf("example.com"),
|
||||||
|
required = true
|
||||||
|
)
|
||||||
|
|
||||||
|
val includeSubdomains by booleanOption(
|
||||||
|
key = "includeSubdomains",
|
||||||
|
title = "Include subdomains",
|
||||||
|
description = "Applies the configuration to all subdomains of the target domains.",
|
||||||
|
default = false,
|
||||||
|
required = true
|
||||||
|
)
|
||||||
|
|
||||||
|
val customCAFilePaths by stringsOption(
|
||||||
|
key = "customCAFilePaths",
|
||||||
|
title = "Custom CA file paths",
|
||||||
|
description = """
|
||||||
|
List of paths to files in PEM or DER format (one file path per entry).
|
||||||
|
|
||||||
|
Makes an app trust the provided custom certificate authorities (CAs),
|
||||||
|
for the specified domains, and if the option "Include Subdomains" is enabled then also the subdomains.
|
||||||
|
|
||||||
|
|
||||||
|
CA files will be bundled in res/raw/ of resulting APK
|
||||||
|
""".trimIndentMultiline(),
|
||||||
|
default = null,
|
||||||
|
required = false
|
||||||
|
)
|
||||||
|
|
||||||
|
val allowUserCerts by booleanOption(
|
||||||
|
key = "allowUserCerts",
|
||||||
|
title = "Trust user added CAs",
|
||||||
|
description = "Makes an app trust certificates from the Android user store for the specified domains, and if the option \"Include Subdomains\" is enabled then also the subdomains.",
|
||||||
|
|
||||||
|
default = false,
|
||||||
|
required = true
|
||||||
|
)
|
||||||
|
|
||||||
|
val allowSystemCerts by booleanOption(
|
||||||
|
key = "allowSystemCerts",
|
||||||
|
title = "Trust system CAs",
|
||||||
|
description = "Makes an app trust certificates from the Android system store for the specified domains, and and if the option \"Include Subdomains\" is enabled then also the subdomains.",
|
||||||
|
|
||||||
|
default = true,
|
||||||
|
required = true
|
||||||
|
)
|
||||||
|
|
||||||
|
val allowCleartextTraffic by booleanOption(
|
||||||
|
key = "allowCleartextTraffic",
|
||||||
|
title = "Allow cleartext traffic (HTTP)",
|
||||||
|
description = "Allows unencrypted HTTP traffic for the specified domains, and if \"Include Subdomains\" is enabled then also the subdomains.",
|
||||||
|
|
||||||
|
default = false,
|
||||||
|
required = true
|
||||||
|
)
|
||||||
|
|
||||||
|
val overridePins by booleanOption(
|
||||||
|
key = "overridePins",
|
||||||
|
title = "Override certificate pinning",
|
||||||
|
description = "Overrides certificate pinning for the specified domains and their subdomains if the option \"Include Subdomains\" is enabled to allow inspecting app traffic via a proxy.",
|
||||||
|
|
||||||
|
default = false,
|
||||||
|
required = true
|
||||||
|
)
|
||||||
|
|
||||||
|
fun generateNetworkSecurityConfig(): String {
|
||||||
|
val targetDomains = targetDomains ?: emptyList()
|
||||||
|
val includeSubdomains = includeSubdomains ?: false
|
||||||
|
val customCAFilePaths = customCAFilePaths ?: emptyList()
|
||||||
|
val allowUserCerts = allowUserCerts ?: false
|
||||||
|
val allowSystemCerts = allowSystemCerts ?: true
|
||||||
|
val allowCleartextTraffic = allowCleartextTraffic ?: false
|
||||||
|
val overridePins = overridePins ?: false
|
||||||
|
|
||||||
|
val domainsXML = buildString {
|
||||||
|
targetDomains.forEach {
|
||||||
|
appendLine(""" <domain includeSubdomains="$includeSubdomains">$it</domain>""")
|
||||||
|
}
|
||||||
|
}.trimEnd()
|
||||||
|
|
||||||
|
val trustAnchorsXML = buildString {
|
||||||
|
if (allowSystemCerts) {
|
||||||
|
appendLine(""" <certificates src="system" overridePins="$overridePins" />""")
|
||||||
|
}
|
||||||
|
if (allowUserCerts) {
|
||||||
|
appendLine(""" <certificates src="user" overridePins="$overridePins" />""")
|
||||||
|
}
|
||||||
|
customCAFilePaths.forEach { path ->
|
||||||
|
val fileName = path.substringAfterLast('/').substringBeforeLast('.')
|
||||||
|
appendLine(""" <certificates src="@raw/$fileName" overridePins="$overridePins" />""")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (trustAnchorsXML.isBlank()) {
|
||||||
|
throw PatchException("At least one trust anchor (System, User, or Custom CA) must be enabled.")
|
||||||
|
}
|
||||||
|
|
||||||
|
return """
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<network-security-config>
|
||||||
|
<domain-config cleartextTrafficPermitted="$allowCleartextTraffic">
|
||||||
|
$domainsXML
|
||||||
|
<trust-anchors>
|
||||||
|
${trustAnchorsXML.trimEnd()}
|
||||||
|
</trust-anchors>
|
||||||
|
</domain-config>
|
||||||
|
</network-security-config>
|
||||||
|
""".trimIndent()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
execute {
|
||||||
|
val nscFileNameBare = "network_security_config"
|
||||||
|
val resXmlDir = "res/xml"
|
||||||
|
val resRawDir = "res/raw"
|
||||||
|
val nscFileNameWithSuffix = "$nscFileNameBare.xml"
|
||||||
|
|
||||||
|
|
||||||
|
document("AndroidManifest.xml").use { document ->
|
||||||
|
val applicationNode = document.getNode("application") as Element
|
||||||
|
applicationNode.setAttribute("android:networkSecurityConfig", "@xml/$nscFileNameBare")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
File(get(resXmlDir), nscFileNameWithSuffix).apply {
|
||||||
|
writeText(generateNetworkSecurityConfig())
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for (customCAFilePath in customCAFilePaths ?: emptyList()) {
|
||||||
|
val file = File(customCAFilePath)
|
||||||
|
if (!file.exists()) {
|
||||||
|
throw PatchException(
|
||||||
|
"The custom CA file path cannot be found: " +
|
||||||
|
file.absolutePath
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!file.isFile) {
|
||||||
|
throw PatchException(
|
||||||
|
"The custom CA file path must be a file: "
|
||||||
|
+ file.absolutePath
|
||||||
|
)
|
||||||
|
}
|
||||||
|
val caFileNameWithoutSuffix = customCAFilePath.substringAfterLast('/').substringBefore('.')
|
||||||
|
val caFile = File(customCAFilePath)
|
||||||
|
File(
|
||||||
|
get(resRawDir),
|
||||||
|
caFileNameWithoutSuffix
|
||||||
|
).writeText(
|
||||||
|
caFile.readText()
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,26 +1,35 @@
|
|||||||
package app.revanced.patches.duolingo.debug
|
package app.revanced.patches.duolingo.debug
|
||||||
|
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||||
import app.revanced.patcher.patch.bytecodePatch
|
import app.revanced.patcher.patch.bytecodePatch
|
||||||
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
import app.revanced.util.returnEarly
|
||||||
|
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
|
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
val enableDebugMenuPatch = bytecodePatch(
|
val enableDebugMenuPatch = bytecodePatch(
|
||||||
name = "Enable debug menu",
|
name = "Enable debug menu",
|
||||||
use = false,
|
use = false
|
||||||
) {
|
) {
|
||||||
compatibleWith("com.duolingo"("5.158.4"))
|
compatibleWith("com.duolingo")
|
||||||
|
|
||||||
execute {
|
execute {
|
||||||
initializeBuildConfigProviderFingerprint.method.apply {
|
// It seems all categories are allowed on release. Force this on anyway.
|
||||||
val insertIndex = initializeBuildConfigProviderFingerprint.patternMatch!!.startIndex
|
debugCategoryAllowOnReleaseBuildsFingerprint.method.returnEarly(true)
|
||||||
val register = getInstruction<TwoRegisterInstruction>(insertIndex).registerA
|
|
||||||
|
|
||||||
addInstructions(
|
// Change build config debug build flag.
|
||||||
insertIndex,
|
buildConfigProviderConstructorFingerprint.match(
|
||||||
"const/4 v$register, 0x1",
|
buildConfigProviderToStringFingerprint.classDef
|
||||||
)
|
).let {
|
||||||
|
val index = it.patternMatch!!.startIndex
|
||||||
|
|
||||||
|
it.method.apply {
|
||||||
|
val register = getInstruction<OneRegisterInstruction>(index).registerA
|
||||||
|
addInstruction(
|
||||||
|
index + 1,
|
||||||
|
"const/4 v$register, 0x1"
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,16 +4,25 @@ 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 debugCategoryAllowOnReleaseBuildsFingerprint = fingerprint {
|
||||||
* The `BuildConfigProvider` class has two booleans:
|
returns("Z")
|
||||||
*
|
parameters()
|
||||||
* - `isChina`: (usually) compares "play" with "china"...except for builds in China
|
custom { method, classDef ->
|
||||||
* - `isDebug`: compares "release" with "debug" <-- we want to force this to `true`
|
method.name == "getAllowOnReleaseBuilds" && classDef.type == "Lcom/duolingo/debug/DebugCategory;"
|
||||||
*/
|
}
|
||||||
|
}
|
||||||
internal val initializeBuildConfigProviderFingerprint = fingerprint {
|
|
||||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
|
internal val buildConfigProviderConstructorFingerprint = fingerprint {
|
||||||
returns("V")
|
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
|
||||||
opcodes(Opcode.IPUT_BOOLEAN)
|
parameters()
|
||||||
strings("debug", "release", "china")
|
opcodes(Opcode.CONST_4)
|
||||||
|
}
|
||||||
|
|
||||||
|
internal val buildConfigProviderToStringFingerprint = fingerprint {
|
||||||
|
parameters()
|
||||||
|
returns("Ljava/lang/String;")
|
||||||
|
strings("BuildConfigProvider(") // Partial string match.
|
||||||
|
custom { method, _ ->
|
||||||
|
method.name == "toString"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package app.revanced.patches.duolingo.energy
|
||||||
|
|
||||||
|
import app.revanced.patcher.fingerprint
|
||||||
|
import com.android.tools.smali.dexlib2.AccessFlags
|
||||||
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Matches the class found in [energyConfigToStringFingerprint].
|
||||||
|
*/
|
||||||
|
internal val initializeEnergyConfigFingerprint = fingerprint {
|
||||||
|
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
|
||||||
|
opcodes(Opcode.RETURN_VOID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Class name currently is not obfuscated but it may be in the future.
|
||||||
|
internal val energyConfigToStringFingerprint = fingerprint {
|
||||||
|
parameters()
|
||||||
|
returns("Ljava/lang/String;")
|
||||||
|
strings("EnergyConfig(", "maxEnergy=") // Partial string matches.
|
||||||
|
custom { method, _ -> method.name == "toString" }
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package app.revanced.patches.duolingo.energy
|
||||||
|
|
||||||
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||||
|
import app.revanced.patcher.patch.bytecodePatch
|
||||||
|
import app.revanced.util.findFieldFromToString
|
||||||
|
|
||||||
|
@Suppress("unused")
|
||||||
|
val skipEnergyRechargeAdsPatch = bytecodePatch(
|
||||||
|
name = "Skip energy recharge ads",
|
||||||
|
description = "Skips watching ads to recharge energy."
|
||||||
|
) {
|
||||||
|
compatibleWith("com.duolingo")
|
||||||
|
|
||||||
|
execute {
|
||||||
|
initializeEnergyConfigFingerprint
|
||||||
|
.match(energyConfigToStringFingerprint.classDef)
|
||||||
|
.method.apply {
|
||||||
|
val energyField = energyConfigToStringFingerprint.method
|
||||||
|
.findFieldFromToString("energy=")
|
||||||
|
val insertIndex = initializeEnergyConfigFingerprint.patternMatch!!.startIndex
|
||||||
|
|
||||||
|
addInstructions(
|
||||||
|
insertIndex,
|
||||||
|
"""
|
||||||
|
const/16 v0, 99
|
||||||
|
iput v0, p0, $energyField
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -47,6 +47,7 @@ val spoofFeaturesPatch = bytecodePatch(
|
|||||||
"com.google.android.feature.PIXEL_2024_MIDYEAR_EXPERIENCE",
|
"com.google.android.feature.PIXEL_2024_MIDYEAR_EXPERIENCE",
|
||||||
"com.google.android.feature.PIXEL_2024_EXPERIENCE",
|
"com.google.android.feature.PIXEL_2024_EXPERIENCE",
|
||||||
"com.google.android.feature.PIXEL_2025_MIDYEAR_EXPERIENCE",
|
"com.google.android.feature.PIXEL_2025_MIDYEAR_EXPERIENCE",
|
||||||
|
"com.google.android.feature.PIXEL_2025_EXPERIENCE",
|
||||||
),
|
),
|
||||||
title = "Features to disable",
|
title = "Features to disable",
|
||||||
description = "Google Pixel exclusive features to disable." +
|
description = "Google Pixel exclusive features to disable." +
|
||||||
|
|||||||
@@ -3,9 +3,10 @@ package app.revanced.patches.instagram.hide.navigation
|
|||||||
|
|
||||||
import app.revanced.patcher.fingerprint
|
import app.revanced.patcher.fingerprint
|
||||||
import app.revanced.patcher.patch.BytecodePatchContext
|
import app.revanced.patcher.patch.BytecodePatchContext
|
||||||
|
import com.android.tools.smali.dexlib2.AccessFlags
|
||||||
|
|
||||||
internal val initializeNavigationButtonsListFingerprint = fingerprint {
|
internal val initializeNavigationButtonsListFingerprint = fingerprint {
|
||||||
strings("Nav3")
|
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||||
parameters("Lcom/instagram/common/session/UserSession;", "Z")
|
parameters("Lcom/instagram/common/session/UserSession;", "Z")
|
||||||
returns("Ljava/util/List;")
|
returns("Ljava/util/List;")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ val enableDeveloperMenuPatch = bytecodePatch(
|
|||||||
with(clearNotificationReceiverFingerprint.method) {
|
with(clearNotificationReceiverFingerprint.method) {
|
||||||
indexOfFirstInstructionReversedOrThrow(clearNotificationReceiverFingerprint.stringMatches!!.first().index) {
|
indexOfFirstInstructionReversedOrThrow(clearNotificationReceiverFingerprint.stringMatches!!.first().index) {
|
||||||
val reference = getReference<MethodReference>()
|
val reference = getReference<MethodReference>()
|
||||||
Opcode.INVOKE_STATIC == opcode &&
|
opcode in listOf(Opcode.INVOKE_STATIC, Opcode.INVOKE_STATIC_RANGE) &&
|
||||||
reference?.parameterTypes?.size == 1 &&
|
reference?.parameterTypes?.size == 1 &&
|
||||||
reference.parameterTypes.first() == "Lcom/instagram/common/session/UserSession;" &&
|
reference.parameterTypes.first() == "Lcom/instagram/common/session/UserSession;" &&
|
||||||
reference.returnType == "Z"
|
reference.returnType == "Z"
|
||||||
|
|||||||
@@ -1,20 +1,16 @@
|
|||||||
package app.revanced.patches.music.layout.compactheader
|
package app.revanced.patches.music.layout.compactheader
|
||||||
|
|
||||||
import com.android.tools.smali.dexlib2.Opcode
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
import com.android.tools.smali.dexlib2.AccessFlags
|
|
||||||
import app.revanced.patcher.fingerprint
|
import app.revanced.patcher.fingerprint
|
||||||
|
import app.revanced.util.literal
|
||||||
|
|
||||||
internal val constructCategoryBarFingerprint = fingerprint {
|
internal val chipCloudFingerprint = fingerprint {
|
||||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
|
|
||||||
returns("V")
|
returns("V")
|
||||||
parameters("Landroid/content/Context;", "L", "L", "L")
|
|
||||||
opcodes(
|
opcodes(
|
||||||
Opcode.IPUT_OBJECT,
|
|
||||||
Opcode.CONST,
|
Opcode.CONST,
|
||||||
Opcode.INVOKE_VIRTUAL,
|
Opcode.CONST_4,
|
||||||
Opcode.MOVE_RESULT_OBJECT,
|
Opcode.INVOKE_STATIC,
|
||||||
Opcode.IPUT_OBJECT,
|
Opcode.MOVE_RESULT_OBJECT
|
||||||
Opcode.CONST,
|
|
||||||
Opcode.INVOKE_VIRTUAL
|
|
||||||
)
|
)
|
||||||
|
literal { chipCloud }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.music.layout.compactheader
|
package app.revanced.patches.music.layout.compactheader
|
||||||
|
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||||
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
|
||||||
@@ -8,10 +8,14 @@ import app.revanced.patches.all.misc.resources.addResourcesPatch
|
|||||||
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
|
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
|
||||||
import app.revanced.patches.music.misc.settings.PreferenceScreen
|
import app.revanced.patches.music.misc.settings.PreferenceScreen
|
||||||
import app.revanced.patches.music.misc.settings.settingsPatch
|
import app.revanced.patches.music.misc.settings.settingsPatch
|
||||||
|
import app.revanced.patches.shared.misc.mapping.get
|
||||||
|
import app.revanced.patches.shared.misc.mapping.resourceMappings
|
||||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||||
import app.revanced.util.findFreeRegister
|
|
||||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
|
|
||||||
|
internal var chipCloud = -1L
|
||||||
|
private set
|
||||||
|
|
||||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/music/patches/HideCategoryBarPatch;"
|
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/music/patches/HideCategoryBarPatch;"
|
||||||
|
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
@@ -33,28 +37,21 @@ val hideCategoryBar = bytecodePatch(
|
|||||||
)
|
)
|
||||||
|
|
||||||
execute {
|
execute {
|
||||||
|
chipCloud = resourceMappings["layout", "chip_cloud"]
|
||||||
|
|
||||||
addResources("music", "layout.compactheader.hideCategoryBar")
|
addResources("music", "layout.compactheader.hideCategoryBar")
|
||||||
|
|
||||||
PreferenceScreen.GENERAL.addPreferences(
|
PreferenceScreen.GENERAL.addPreferences(
|
||||||
SwitchPreference("revanced_music_hide_category_bar"),
|
SwitchPreference("revanced_music_hide_category_bar"),
|
||||||
)
|
)
|
||||||
|
|
||||||
constructCategoryBarFingerprint.method.apply {
|
chipCloudFingerprint.method.apply {
|
||||||
val insertIndex = constructCategoryBarFingerprint.patternMatch!!.startIndex
|
val targetIndex = chipCloudFingerprint.patternMatch!!.endIndex
|
||||||
val register = getInstruction<OneRegisterInstruction>(insertIndex - 1).registerA
|
val targetRegister = getInstruction<OneRegisterInstruction>(targetIndex).registerA
|
||||||
val freeRegister = findFreeRegister(insertIndex, register)
|
|
||||||
|
|
||||||
addInstructionsWithLabels(
|
addInstruction(
|
||||||
insertIndex,
|
targetIndex + 1,
|
||||||
"""
|
"invoke-static { v$targetRegister }, $EXTENSION_CLASS_DESCRIPTOR->hideCategoryBar(Landroid/view/View;)V"
|
||||||
invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->hideCategoryBar()Z
|
|
||||||
move-result v$freeRegister
|
|
||||||
if-eqz v$freeRegister, :show
|
|
||||||
const/16 v$freeRegister, 0x8
|
|
||||||
invoke-virtual { v$register, v$freeRegister }, Landroid/view/View;->setVisibility(I)V
|
|
||||||
:show
|
|
||||||
nop
|
|
||||||
"""
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package app.revanced.patches.samsung.radio.misc.fix.crash
|
||||||
|
|
||||||
|
import app.revanced.patcher.patch.resourcePatch
|
||||||
|
import app.revanced.util.asSequence
|
||||||
|
import org.w3c.dom.Element
|
||||||
|
|
||||||
|
@Suppress("unused")
|
||||||
|
internal val addManifestPermissionsPatch = resourcePatch {
|
||||||
|
|
||||||
|
val requiredPermissions = listOf(
|
||||||
|
"android.permission.READ_PHONE_STATE",
|
||||||
|
"android.permission.FOREGROUND_SERVICE_MICROPHONE",
|
||||||
|
"android.permission.RECORD_AUDIO",
|
||||||
|
)
|
||||||
|
|
||||||
|
execute {
|
||||||
|
document("AndroidManifest.xml").use { document ->
|
||||||
|
document.getElementsByTagName("manifest").item(0).let { manifestEl ->
|
||||||
|
|
||||||
|
// Check which permissions are missing
|
||||||
|
val existingPermissionNames = document.getElementsByTagName("uses-permission").asSequence()
|
||||||
|
.mapNotNull { (it as? Element)?.getAttribute("android:name") }.toSet()
|
||||||
|
val missingPermissions = requiredPermissions.filterNot { it in existingPermissionNames }
|
||||||
|
|
||||||
|
// Then add them
|
||||||
|
for (permission in missingPermissions) {
|
||||||
|
val element = document.createElement("uses-permission")
|
||||||
|
element.setAttribute("android:name", permission)
|
||||||
|
manifestEl.appendChild(element)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
@file:Suppress("unused")
|
||||||
|
|
||||||
|
package app.revanced.patches.samsung.radio.misc.fix.crash
|
||||||
|
|
||||||
|
import app.revanced.patcher.fingerprint
|
||||||
|
import app.revanced.patches.all.misc.transformation.IMethodCall
|
||||||
|
import app.revanced.patches.all.misc.transformation.fromMethodReference
|
||||||
|
import app.revanced.util.getReference
|
||||||
|
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||||
|
|
||||||
|
internal val permissionRequestListFingerprint = fingerprint {
|
||||||
|
strings(
|
||||||
|
"android.permission.POST_NOTIFICATIONS",
|
||||||
|
"android.permission.READ_MEDIA_AUDIO",
|
||||||
|
"android.permission.RECORD_AUDIO"
|
||||||
|
)
|
||||||
|
custom { method, _ -> method.name == "<clinit>" }
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
@file:Suppress("unused")
|
||||||
|
|
||||||
|
package app.revanced.patches.samsung.radio.misc.fix.crash
|
||||||
|
|
||||||
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||||
|
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||||
|
import app.revanced.patcher.patch.bytecodePatch
|
||||||
|
import app.revanced.patches.samsung.radio.restrictions.device.bypassDeviceChecksPatch
|
||||||
|
import app.revanced.util.findInstructionIndicesReversedOrThrow
|
||||||
|
import app.revanced.util.indexOfFirstInstruction
|
||||||
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
|
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
|
|
||||||
|
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/samsung/radio/misc/fix/crash/FixCrashPatch;"
|
||||||
|
|
||||||
|
val fixCrashPatch = bytecodePatch(
|
||||||
|
name = "Fix crashes", description = "Prevents the app from crashing because of missing system permissions."
|
||||||
|
) {
|
||||||
|
dependsOn(addManifestPermissionsPatch, bypassDeviceChecksPatch)
|
||||||
|
extendWith("extensions/samsung/radio.rve")
|
||||||
|
compatibleWith("com.sec.android.app.fm"("12.4.00.7", "12.3.00.13", "12.3.00.11"))
|
||||||
|
|
||||||
|
execute {
|
||||||
|
permissionRequestListFingerprint.method.apply {
|
||||||
|
findInstructionIndicesReversedOrThrow(Opcode.FILLED_NEW_ARRAY).forEach { filledNewArrayIndex ->
|
||||||
|
val moveResultIndex = indexOfFirstInstruction(filledNewArrayIndex, Opcode.MOVE_RESULT_OBJECT)
|
||||||
|
if (moveResultIndex < 0) return@forEach // No move-result-object found after the filled-new-array
|
||||||
|
|
||||||
|
// Get the register where the array is saved
|
||||||
|
val arrayRegister = getInstruction<OneRegisterInstruction>(moveResultIndex).registerA
|
||||||
|
|
||||||
|
// Invoke the method from the extension
|
||||||
|
addInstructions(
|
||||||
|
moveResultIndex + 1, """
|
||||||
|
invoke-static { v$arrayRegister }, ${EXTENSION_CLASS_DESCRIPTOR}->fixPermissionRequestList([Ljava/lang/String;)[Ljava/lang/String;
|
||||||
|
move-result-object v$arrayRegister
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
package app.revanced.patches.samsung.radio.restrictions.device
|
||||||
|
|
||||||
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||||
|
import app.revanced.patcher.extensions.InstructionExtensions.removeInstructions
|
||||||
|
import app.revanced.patcher.patch.bytecodePatch
|
||||||
|
import app.revanced.util.findFreeRegister
|
||||||
|
import app.revanced.util.getReference
|
||||||
|
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||||
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
|
import com.android.tools.smali.dexlib2.iface.reference.StringReference
|
||||||
|
|
||||||
|
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||||
|
"Lapp/revanced/extension/samsung/radio/restrictions/device/BypassDeviceChecksPatch;"
|
||||||
|
|
||||||
|
@Suppress("unused")
|
||||||
|
val bypassDeviceChecksPatch = bytecodePatch(
|
||||||
|
name = "Bypass device checks",
|
||||||
|
description = "Removes firmware and region blacklisting. " +
|
||||||
|
"This patch will still not allow the app to run on devices that do not have the required hardware.",
|
||||||
|
) {
|
||||||
|
extendWith("extensions/samsung/radio.rve")
|
||||||
|
compatibleWith("com.sec.android.app.fm"("12.4.00.7", "12.3.00.13", "12.3.00.11"))
|
||||||
|
|
||||||
|
execute {
|
||||||
|
// Return false = The device is not blacklisted
|
||||||
|
checkDeviceFingerprint.method.apply {
|
||||||
|
// Find the first string that start with "SM-", that's the list of incompatible devices
|
||||||
|
val firstStringIndex = indexOfFirstInstructionOrThrow {
|
||||||
|
opcode == Opcode.CONST_STRING &&
|
||||||
|
getReference<StringReference>()?.string?.startsWith("SM-") == true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find the following filled-new-array (or filled-new-array/range) instruction
|
||||||
|
val filledNewArrayIndex = indexOfFirstInstructionOrThrow(firstStringIndex + 1) {
|
||||||
|
opcode == Opcode.FILLED_NEW_ARRAY || opcode == Opcode.FILLED_NEW_ARRAY_RANGE
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find an available register for our use
|
||||||
|
val resultRegister = findFreeRegister(filledNewArrayIndex + 1)
|
||||||
|
|
||||||
|
// Store the array there and invoke the method that we added to the class earlier
|
||||||
|
addInstructions(
|
||||||
|
filledNewArrayIndex + 1, """
|
||||||
|
move-result-object v$resultRegister
|
||||||
|
invoke-static { v$resultRegister }, $EXTENSION_CLASS_DESCRIPTOR->checkIfDeviceIsIncompatible([Ljava/lang/String;)Z
|
||||||
|
move-result v$resultRegister
|
||||||
|
return v$resultRegister
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
// Remove the instructions before our strings
|
||||||
|
removeInstructions(0, firstStringIndex)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
package app.revanced.patches.samsung.radio.restrictions.device
|
||||||
|
|
||||||
|
import app.revanced.patcher.fingerprint
|
||||||
|
import app.revanced.patches.all.misc.transformation.IMethodCall
|
||||||
|
import app.revanced.patches.all.misc.transformation.fromMethodReference
|
||||||
|
import app.revanced.util.getReference
|
||||||
|
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||||
|
|
||||||
|
internal val checkDeviceFingerprint = fingerprint {
|
||||||
|
returns("Z")
|
||||||
|
custom { method, _ ->
|
||||||
|
/* Check for methods call to:
|
||||||
|
- Landroid/os/SemSystemProperties;->getSalesCode()Ljava/lang/String;
|
||||||
|
- Landroid/os/SemSystemProperties;->getCountryIso()Ljava/lang/String;
|
||||||
|
*/
|
||||||
|
|
||||||
|
val impl = method.implementation ?: return@custom false
|
||||||
|
|
||||||
|
// Track which target methods we've found
|
||||||
|
val foundMethods = mutableSetOf<MethodCall>()
|
||||||
|
|
||||||
|
// Scan method instructions for calls to our target methods
|
||||||
|
for (instr in impl.instructions) {
|
||||||
|
val ref = instr.getReference<MethodReference>() ?: continue
|
||||||
|
val mc = fromMethodReference<MethodCall>(ref) ?: continue
|
||||||
|
|
||||||
|
if (mc == MethodCall.GetSalesCode || mc == MethodCall.GetCountryIso) {
|
||||||
|
foundMethods.add(mc)
|
||||||
|
|
||||||
|
// If we found both methods, return success
|
||||||
|
if (foundMethods.size == 2) {
|
||||||
|
return@custom true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only match if both methods are present
|
||||||
|
return@custom false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Information about method calls we want to replace
|
||||||
|
private enum class MethodCall(
|
||||||
|
override val definedClassName: String,
|
||||||
|
override val methodName: String,
|
||||||
|
override val methodParams: Array<String>,
|
||||||
|
override val returnType: String,
|
||||||
|
) : IMethodCall {
|
||||||
|
GetSalesCode(
|
||||||
|
"Landroid/os/SemSystemProperties;",
|
||||||
|
"getSalesCode",
|
||||||
|
arrayOf(),
|
||||||
|
"Ljava/lang/String;",
|
||||||
|
),
|
||||||
|
GetCountryIso(
|
||||||
|
"Landroid/os/SemSystemProperties;",
|
||||||
|
"getCountryIso",
|
||||||
|
arrayOf(),
|
||||||
|
"Ljava/lang/String;",
|
||||||
|
),
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package app.revanced.patches.shared.layout.branding
|
||||||
|
|
||||||
|
import app.revanced.patcher.patch.rawResourcePatch
|
||||||
|
import app.revanced.util.inputStreamFromBundledResource
|
||||||
|
import java.nio.file.Files
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copies a branding license text file to the target apk.
|
||||||
|
*
|
||||||
|
* This patch must be a dependency for all patches that add ReVanced branding to the target app.
|
||||||
|
*/
|
||||||
|
internal val addBrandLicensePatch = rawResourcePatch {
|
||||||
|
execute {
|
||||||
|
val brandingLicenseFileName = "LICENSE_REVANCED.TXT"
|
||||||
|
|
||||||
|
val inputFileStream = inputStreamFromBundledResource(
|
||||||
|
"branding-license",
|
||||||
|
brandingLicenseFileName
|
||||||
|
)!!
|
||||||
|
|
||||||
|
val targetFile = get(brandingLicenseFileName, false).toPath()
|
||||||
|
|
||||||
|
Files.copy(inputFileStream, targetFile)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -36,13 +36,13 @@ import org.w3c.dom.NodeList
|
|||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.logging.Logger
|
import java.util.logging.Logger
|
||||||
|
|
||||||
private val mipmapDirectories = arrayOf(
|
private val mipmapDirectories = mapOf(
|
||||||
// Target app does not have ldpi icons.
|
// Target app does not have ldpi icons.
|
||||||
"mipmap-mdpi",
|
"mipmap-mdpi" to "108x108 px",
|
||||||
"mipmap-hdpi",
|
"mipmap-hdpi" to "162x162 px",
|
||||||
"mipmap-xhdpi",
|
"mipmap-xhdpi" to "216x216 px",
|
||||||
"mipmap-xxhdpi",
|
"mipmap-xxhdpi" to "324x324 px",
|
||||||
"mipmap-xxxhdpi"
|
"mipmap-xxxhdpi" to "432x432 px"
|
||||||
)
|
)
|
||||||
|
|
||||||
private val iconStyleNames = arrayOf(
|
private val iconStyleNames = arrayOf(
|
||||||
@@ -104,10 +104,13 @@ internal fun baseCustomBrandingPatch(
|
|||||||
Folder with images to use as a custom icon.
|
Folder with images to use as a custom icon.
|
||||||
|
|
||||||
The folder must contain one or more of the following folders, depending on the DPI of the device:
|
The folder must contain one or more of the following folders, depending on the DPI of the device:
|
||||||
${mipmapDirectories.joinToString("\n") { "- $it" }}
|
${mipmapDirectories.keys.joinToString("\n") { "- $it" }}
|
||||||
|
|
||||||
Each of the folders must contain all of the following files:
|
Each of the folders must contain all of the following files:
|
||||||
${USER_CUSTOM_ADAPTIVE_FILE_NAMES.joinToString("\n")}
|
${USER_CUSTOM_ADAPTIVE_FILE_NAMES.joinToString("\n")}
|
||||||
|
|
||||||
|
The image dimensions must be as follows:
|
||||||
|
${mipmapDirectories.map { (dpi, dim) -> "- $dpi: $dim" }.joinToString("\n")}
|
||||||
|
|
||||||
Optionally, the path contains a 'drawable' folder with any of the monochrome icon files:
|
Optionally, the path contains a 'drawable' folder with any of the monochrome icon files:
|
||||||
$USER_CUSTOM_MONOCHROME_FILE_NAME
|
$USER_CUSTOM_MONOCHROME_FILE_NAME
|
||||||
@@ -120,6 +123,7 @@ internal fun baseCustomBrandingPatch(
|
|||||||
dependsOn(
|
dependsOn(
|
||||||
addResourcesPatch,
|
addResourcesPatch,
|
||||||
resourceMappingPatch,
|
resourceMappingPatch,
|
||||||
|
addBrandLicensePatch,
|
||||||
bytecodePatch {
|
bytecodePatch {
|
||||||
execute {
|
execute {
|
||||||
mainActivityOnCreateFingerprint.method.addInstruction(
|
mainActivityOnCreateFingerprint.method.addInstruction(
|
||||||
@@ -249,7 +253,7 @@ internal fun baseCustomBrandingPatch(
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Copy template icon files.
|
// Copy template icon files.
|
||||||
mipmapDirectories.forEach { dpi ->
|
mipmapDirectories.keys.forEach { dpi ->
|
||||||
copyResources(
|
copyResources(
|
||||||
"custom-branding",
|
"custom-branding",
|
||||||
ResourceGroup(
|
ResourceGroup(
|
||||||
@@ -405,23 +409,24 @@ internal fun baseCustomBrandingPatch(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val sourceFolders = iconPathFile.listFiles { file -> file.isDirectory }
|
|
||||||
?: throw PatchException("The custom icon path contains no subfolders: " +
|
|
||||||
iconPathFile.absolutePath)
|
|
||||||
|
|
||||||
val resourceDirectory = get("res")
|
val resourceDirectory = get("res")
|
||||||
var copiedFiles = false
|
var copiedFiles = false
|
||||||
|
|
||||||
// For each source folder, copy the files to the target resource directories.
|
// For each source folder, copy the files to the target resource directories.
|
||||||
sourceFolders.forEach { dpiSourceFolder ->
|
iconPathFile.listFiles {
|
||||||
|
file -> file.isDirectory && file.name in mipmapDirectories
|
||||||
|
}!!.forEach { dpiSourceFolder ->
|
||||||
val targetDpiFolder = resourceDirectory.resolve(dpiSourceFolder.name)
|
val targetDpiFolder = resourceDirectory.resolve(dpiSourceFolder.name)
|
||||||
if (!targetDpiFolder.exists()) return@forEach
|
if (!targetDpiFolder.exists()) {
|
||||||
|
// Should never happen.
|
||||||
|
throw IllegalStateException("Resource not found: $dpiSourceFolder")
|
||||||
|
}
|
||||||
|
|
||||||
val customFiles = dpiSourceFolder.listFiles { file ->
|
val customFiles = dpiSourceFolder.listFiles { file ->
|
||||||
file.isFile && file.name in USER_CUSTOM_ADAPTIVE_FILE_NAMES
|
file.isFile && file.name in USER_CUSTOM_ADAPTIVE_FILE_NAMES
|
||||||
}!!
|
}!!
|
||||||
|
|
||||||
if (customFiles.size > 0 && customFiles.size != USER_CUSTOM_ADAPTIVE_FILE_NAMES.size) {
|
if (customFiles.isNotEmpty() && customFiles.size != USER_CUSTOM_ADAPTIVE_FILE_NAMES.size) {
|
||||||
throw PatchException("Must include all required icon files " +
|
throw PatchException("Must include all required icon files " +
|
||||||
"but only found " + customFiles.map { it.name })
|
"but only found " + customFiles.map { it.name })
|
||||||
}
|
}
|
||||||
@@ -451,8 +456,9 @@ internal fun baseCustomBrandingPatch(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!copiedFiles) {
|
if (!copiedFiles) {
|
||||||
throw PatchException("Could not find any replacement images in " +
|
throw PatchException("Expected to find directories and files: "
|
||||||
"patch option path: " + iconPathFile.absolutePath)
|
+ USER_CUSTOM_ADAPTIVE_FILE_NAMES.contentToString()
|
||||||
|
+ "\nBut none were found in the provided option file path: " + iconPathFile.absolutePath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package app.revanced.patches.shared.misc.audio
|
package app.revanced.patches.shared.misc.audio
|
||||||
|
|
||||||
import app.revanced.patcher.fingerprint
|
import app.revanced.patcher.fingerprint
|
||||||
import app.revanced.util.containsLiteralInstruction
|
import app.revanced.util.literal
|
||||||
import com.android.tools.smali.dexlib2.AccessFlags
|
import com.android.tools.smali.dexlib2.AccessFlags
|
||||||
|
|
||||||
internal val formatStreamModelToStringFingerprint = fingerprint {
|
internal val formatStreamModelToStringFingerprint = fingerprint {
|
||||||
@@ -20,10 +20,7 @@ internal val formatStreamModelToStringFingerprint = fingerprint {
|
|||||||
internal const val AUDIO_STREAM_IGNORE_DEFAULT_FEATURE_FLAG = 45666189L
|
internal const val AUDIO_STREAM_IGNORE_DEFAULT_FEATURE_FLAG = 45666189L
|
||||||
|
|
||||||
internal val selectAudioStreamFingerprint = fingerprint {
|
internal val selectAudioStreamFingerprint = fingerprint {
|
||||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
|
literal {
|
||||||
returns("L")
|
AUDIO_STREAM_IGNORE_DEFAULT_FEATURE_FLAG
|
||||||
custom { method, _ ->
|
|
||||||
method.parameters.size > 2 // Method has a large number of parameters and may change.
|
|
||||||
&& method.containsLiteralInstruction(AUDIO_STREAM_IGNORE_DEFAULT_FEATURE_FLAG)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ private const val EXTENSION_CLASS_DESCRIPTOR =
|
|||||||
internal fun forceOriginalAudioPatch(
|
internal fun forceOriginalAudioPatch(
|
||||||
block: BytecodePatchBuilder.() -> Unit = {},
|
block: BytecodePatchBuilder.() -> Unit = {},
|
||||||
executeBlock: BytecodePatchContext.() -> Unit = {},
|
executeBlock: BytecodePatchContext.() -> Unit = {},
|
||||||
fixUseLocalizedAudioTrackFlag: () -> Boolean,
|
fixUseLocalizedAudioTrackFlag: BytecodePatchContext.() -> Boolean,
|
||||||
mainActivityOnCreateFingerprint: Fingerprint,
|
mainActivityOnCreateFingerprint: Fingerprint,
|
||||||
subclassExtensionClassDescriptor: String,
|
subclassExtensionClassDescriptor: String,
|
||||||
preferenceScreen: BasePreferenceScreen.Screen
|
preferenceScreen: BasePreferenceScreen.Screen
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import app.revanced.patcher.patch.resourcePatch
|
|||||||
import app.revanced.patches.all.misc.resources.addResource
|
import app.revanced.patches.all.misc.resources.addResource
|
||||||
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.layout.branding.addBrandLicensePatch
|
||||||
import app.revanced.patches.shared.misc.settings.preference.BasePreference
|
import app.revanced.patches.shared.misc.settings.preference.BasePreference
|
||||||
import app.revanced.patches.shared.misc.settings.preference.IntentPreference
|
import app.revanced.patches.shared.misc.settings.preference.IntentPreference
|
||||||
import app.revanced.patches.shared.misc.settings.preference.PreferenceCategory
|
import app.revanced.patches.shared.misc.settings.preference.PreferenceCategory
|
||||||
@@ -61,7 +62,11 @@ fun settingsPatch (
|
|||||||
rootPreferences: List<Pair<BasePreference, String>>? = null,
|
rootPreferences: List<Pair<BasePreference, String>>? = null,
|
||||||
preferences: Set<BasePreference>,
|
preferences: Set<BasePreference>,
|
||||||
) = resourcePatch {
|
) = resourcePatch {
|
||||||
dependsOn(addResourcesPatch, settingsColorPatch)
|
dependsOn(
|
||||||
|
addResourcesPatch,
|
||||||
|
settingsColorPatch,
|
||||||
|
addBrandLicensePatch
|
||||||
|
)
|
||||||
|
|
||||||
execute {
|
execute {
|
||||||
copyResources(
|
copyResources(
|
||||||
|
|||||||
@@ -3,14 +3,20 @@ package app.revanced.patches.tiktok.interaction.downloads
|
|||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstructions
|
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.tiktok.misc.extension.sharedExtensionPatch
|
import app.revanced.patches.tiktok.misc.extension.sharedExtensionPatch
|
||||||
import app.revanced.patches.tiktok.misc.settings.settingsPatch
|
import app.revanced.patches.tiktok.misc.settings.settingsPatch
|
||||||
import app.revanced.patches.tiktok.misc.settings.settingsStatusLoadFingerprint
|
import app.revanced.patches.tiktok.misc.settings.settingsStatusLoadFingerprint
|
||||||
|
import app.revanced.util.findInstructionIndicesReversedOrThrow
|
||||||
import app.revanced.util.getReference
|
import app.revanced.util.getReference
|
||||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
import app.revanced.util.returnEarly
|
||||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
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.reference.FieldReference
|
||||||
|
|
||||||
|
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/tiktok/download/DownloadsPatch;"
|
||||||
|
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
val downloadsPatch = bytecodePatch(
|
val downloadsPatch = bytecodePatch(
|
||||||
@@ -28,60 +34,45 @@ val downloadsPatch = bytecodePatch(
|
|||||||
)
|
)
|
||||||
|
|
||||||
execute {
|
execute {
|
||||||
aclCommonShareFingerprint.method.replaceInstructions(
|
aclCommonShareFingerprint.method.returnEarly(0)
|
||||||
0,
|
aclCommonShare2Fingerprint.method.returnEarly(2)
|
||||||
"""
|
|
||||||
const/4 v0, 0x0
|
|
||||||
return v0
|
|
||||||
""",
|
|
||||||
)
|
|
||||||
|
|
||||||
aclCommonShare2Fingerprint.method.replaceInstructions(
|
|
||||||
0,
|
|
||||||
"""
|
|
||||||
const/4 v0, 0x2
|
|
||||||
return v0
|
|
||||||
""",
|
|
||||||
)
|
|
||||||
|
|
||||||
// Download videos without watermark.
|
// Download videos without watermark.
|
||||||
aclCommonShare3Fingerprint.method.addInstructionsWithLabels(
|
aclCommonShare3Fingerprint.method.addInstructionsWithLabels(
|
||||||
0,
|
0,
|
||||||
"""
|
"""
|
||||||
invoke-static {}, Lapp/revanced/extension/tiktok/download/DownloadsPatch;->shouldRemoveWatermark()Z
|
invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->shouldRemoveWatermark()Z
|
||||||
move-result v0
|
move-result v0
|
||||||
if-eqz v0, :noremovewatermark
|
if-eqz v0, :noremovewatermark
|
||||||
const/4 v0, 0x1
|
const/4 v0, 0x1
|
||||||
return v0
|
return v0
|
||||||
:noremovewatermark
|
:noremovewatermark
|
||||||
nop
|
nop
|
||||||
""",
|
""",
|
||||||
)
|
)
|
||||||
|
|
||||||
// Change the download path patch.
|
// Change the download path patch.
|
||||||
downloadUriFingerprint.method.apply {
|
downloadUriFingerprint.method.apply {
|
||||||
val firstIndex = indexOfFirstInstructionOrThrow {
|
findInstructionIndicesReversedOrThrow {
|
||||||
getReference<MethodReference>()?.name == "<init>"
|
getReference<FieldReference>().let {
|
||||||
}
|
it?.definingClass == "Landroid/os/Environment;" && it.name.startsWith("DIRECTORY_")
|
||||||
val secondIndex = indexOfFirstInstructionOrThrow {
|
}
|
||||||
getReference<MethodReference>()?.returnType?.contains("Uri") == true
|
}.forEach { fieldIndex ->
|
||||||
}
|
val pathRegister = getInstruction<OneRegisterInstruction>(fieldIndex).registerA
|
||||||
|
val builderRegister = getInstruction<FiveRegisterInstruction>(fieldIndex + 1).registerC
|
||||||
|
|
||||||
addInstructions(
|
// Remove 'field load → append → "/Camera/" → append' block.
|
||||||
secondIndex,
|
removeInstructions(fieldIndex, 4)
|
||||||
"""
|
|
||||||
invoke-static {}, Lapp/revanced/extension/tiktok/download/DownloadsPatch;->getDownloadPath()Ljava/lang/String;
|
|
||||||
move-result-object v0
|
|
||||||
""",
|
|
||||||
)
|
|
||||||
|
|
||||||
addInstructions(
|
addInstructions(
|
||||||
firstIndex,
|
fieldIndex,
|
||||||
"""
|
"""
|
||||||
invoke-static {}, Lapp/revanced/extension/tiktok/download/DownloadsPatch;->getDownloadPath()Ljava/lang/String;
|
invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->getDownloadPath()Ljava/lang/String;
|
||||||
move-result-object v0
|
move-result-object v$pathRegister
|
||||||
""",
|
invoke-virtual { v$builderRegister, v$pathRegister }, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||||
)
|
""",
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
settingsStatusLoadFingerprint.method.addInstruction(
|
settingsStatusLoadFingerprint.method.addInstruction(
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWith
|
|||||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||||
import app.revanced.patcher.patch.bytecodePatch
|
import app.revanced.patcher.patch.bytecodePatch
|
||||||
import app.revanced.patcher.util.smali.ExternalLabel
|
import app.revanced.patcher.util.smali.ExternalLabel
|
||||||
|
import app.revanced.patches.shared.layout.branding.addBrandLicensePatch
|
||||||
import app.revanced.patches.tiktok.misc.extension.sharedExtensionPatch
|
import app.revanced.patches.tiktok.misc.extension.sharedExtensionPatch
|
||||||
import com.android.tools.smali.dexlib2.Opcode
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction22c
|
import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction22c
|
||||||
@@ -18,7 +19,7 @@ val settingsPatch = bytecodePatch(
|
|||||||
name = "Settings",
|
name = "Settings",
|
||||||
description = "Adds ReVanced settings to TikTok.",
|
description = "Adds ReVanced settings to TikTok.",
|
||||||
) {
|
) {
|
||||||
dependsOn(sharedExtensionPatch)
|
dependsOn(sharedExtensionPatch, addBrandLicensePatch)
|
||||||
|
|
||||||
compatibleWith(
|
compatibleWith(
|
||||||
"com.ss.android.ugc.trill"("36.5.4"),
|
"com.ss.android.ugc.trill"("36.5.4"),
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package app.revanced.patches.tiktok.misc.share
|
||||||
|
|
||||||
|
import app.revanced.patcher.fingerprint
|
||||||
|
import com.android.tools.smali.dexlib2.AccessFlags
|
||||||
|
import com.android.tools.smali.dexlib2.Opcode
|
||||||
|
|
||||||
|
internal val urlShorteningFingerprint = fingerprint {
|
||||||
|
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC, AccessFlags.FINAL)
|
||||||
|
returns("LX/")
|
||||||
|
parameters(
|
||||||
|
"I",
|
||||||
|
"Ljava/lang/String;",
|
||||||
|
"Ljava/lang/String;",
|
||||||
|
"Ljava/lang/String;"
|
||||||
|
)
|
||||||
|
opcodes(Opcode.RETURN_OBJECT)
|
||||||
|
|
||||||
|
// Same Kotlin intrinsics literal on both variants.
|
||||||
|
strings("getShortShareUrlObservab\u2026ongUrl, subBizSceneValue)")
|
||||||
|
|
||||||
|
custom { method, _ ->
|
||||||
|
// LIZLLL is obfuscated by ProGuard/R8, but stable across both TikTok and Musically.
|
||||||
|
method.name == "LIZLLL"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
package app.revanced.patches.tiktok.misc.share
|
||||||
|
|
||||||
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||||
|
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||||
|
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||||
|
import app.revanced.patcher.patch.bytecodePatch
|
||||||
|
import app.revanced.patches.shared.PATCH_DESCRIPTION_SANITIZE_SHARING_LINKS
|
||||||
|
import app.revanced.patches.shared.PATCH_NAME_SANITIZE_SHARING_LINKS
|
||||||
|
import app.revanced.patches.tiktok.misc.extension.sharedExtensionPatch
|
||||||
|
import app.revanced.util.findFreeRegister
|
||||||
|
import app.revanced.util.getReference
|
||||||
|
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.ReferenceInstruction
|
||||||
|
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||||
|
|
||||||
|
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||||
|
"Lapp/revanced/extension/tiktok/share/ShareUrlSanitizer;"
|
||||||
|
|
||||||
|
@Suppress("unused")
|
||||||
|
val sanitizeShareUrlsPatch = bytecodePatch(
|
||||||
|
name = PATCH_NAME_SANITIZE_SHARING_LINKS,
|
||||||
|
description = PATCH_DESCRIPTION_SANITIZE_SHARING_LINKS,
|
||||||
|
) {
|
||||||
|
dependsOn(sharedExtensionPatch)
|
||||||
|
|
||||||
|
compatibleWith(
|
||||||
|
"com.ss.android.ugc.trill"("36.5.4"),
|
||||||
|
"com.zhiliaoapp.musically"("36.5.4"),
|
||||||
|
)
|
||||||
|
|
||||||
|
execute {
|
||||||
|
urlShorteningFingerprint.method.apply {
|
||||||
|
val invokeIndex = indexOfFirstInstructionOrThrow {
|
||||||
|
val ref = getReference<MethodReference>()
|
||||||
|
ref?.name == "LIZ" && ref.definingClass.startsWith("LX/")
|
||||||
|
}
|
||||||
|
|
||||||
|
val moveResultIndex = indexOfFirstInstructionOrThrow(invokeIndex, Opcode.MOVE_RESULT_OBJECT)
|
||||||
|
val urlRegister = getInstruction<OneRegisterInstruction>(moveResultIndex).registerA
|
||||||
|
|
||||||
|
// Resolve Observable wrapper classes at runtime
|
||||||
|
val observableWrapperIndex = indexOfFirstInstructionOrThrow(Opcode.NEW_INSTANCE)
|
||||||
|
val observableWrapperClass = getInstruction<ReferenceInstruction>(observableWrapperIndex)
|
||||||
|
.reference.toString()
|
||||||
|
|
||||||
|
val observableFactoryIndex = indexOfFirstInstructionOrThrow {
|
||||||
|
val ref = getReference<MethodReference>()
|
||||||
|
ref?.name == "LJ" && ref.definingClass.startsWith("LX/")
|
||||||
|
}
|
||||||
|
val observableFactoryRef = getInstruction<ReferenceInstruction>(observableFactoryIndex)
|
||||||
|
.reference as MethodReference
|
||||||
|
|
||||||
|
val observableFactoryClass = observableFactoryRef.definingClass
|
||||||
|
val observableInterfaceType = observableFactoryRef.parameterTypes.first()
|
||||||
|
val observableReturnType = observableFactoryRef.returnType
|
||||||
|
|
||||||
|
val wrapperRegister = findFreeRegister(moveResultIndex + 1, urlRegister)
|
||||||
|
|
||||||
|
// Check setting and conditionally sanitize share URL.
|
||||||
|
addInstructionsWithLabels(
|
||||||
|
moveResultIndex + 1,
|
||||||
|
"""
|
||||||
|
invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->shouldSanitize()Z
|
||||||
|
move-result v$wrapperRegister
|
||||||
|
if-eqz v$wrapperRegister, :skip_sanitization
|
||||||
|
|
||||||
|
invoke-static { p1 }, $EXTENSION_CLASS_DESCRIPTOR->sanitizeShareUrl(Ljava/lang/String;)Ljava/lang/String;
|
||||||
|
move-result-object v$urlRegister
|
||||||
|
|
||||||
|
# Wrap sanitized URL and return early to bypass ShareExtService
|
||||||
|
new-instance v$wrapperRegister, $observableWrapperClass
|
||||||
|
invoke-direct { v$wrapperRegister, v$urlRegister }, $observableWrapperClass-><init>(Ljava/lang/String;)V
|
||||||
|
invoke-static { v$wrapperRegister }, $observableFactoryClass->LJ($observableInterfaceType)$observableReturnType
|
||||||
|
move-result-object v$urlRegister
|
||||||
|
return-object v$urlRegister
|
||||||
|
|
||||||
|
:skip_sanitization
|
||||||
|
nop
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -64,7 +64,7 @@ internal val changeLinkSharingDomainResourcePatch = resourcePatch {
|
|||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
val changeLinkSharingDomainPatch = bytecodePatch(
|
val changeLinkSharingDomainPatch = bytecodePatch(
|
||||||
name = PATCH_NAME_CHANGE_LINK_SHARING_DOMAIN,
|
name = PATCH_NAME_CHANGE_LINK_SHARING_DOMAIN,
|
||||||
description = PATCH_DESCRIPTION_CHANGE_LINK_SHARING_DOMAIN,
|
description = "$PATCH_DESCRIPTION_CHANGE_LINK_SHARING_DOMAIN Including this patch can prevent making posts that quote other posts.",
|
||||||
use = false
|
use = false
|
||||||
) {
|
) {
|
||||||
dependsOn(
|
dependsOn(
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import app.revanced.patcher.patch.stringOption
|
|||||||
import app.revanced.patcher.util.Document
|
import app.revanced.patcher.util.Document
|
||||||
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.layout.branding.addBrandLicensePatch
|
||||||
import app.revanced.patches.shared.misc.mapping.get
|
import app.revanced.patches.shared.misc.mapping.get
|
||||||
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
|
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
|
||||||
import app.revanced.patches.shared.misc.mapping.resourceMappings
|
import app.revanced.patches.shared.misc.mapping.resourceMappings
|
||||||
@@ -24,15 +25,43 @@ import java.io.File
|
|||||||
|
|
||||||
private val variants = arrayOf("light", "dark")
|
private val variants = arrayOf("light", "dark")
|
||||||
|
|
||||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
private val targetResourceDirectoryNames = mapOf(
|
||||||
"Lapp/revanced/extension/youtube/patches/ChangeHeaderPatch;"
|
"drawable-hdpi" to "194x72 px",
|
||||||
|
"drawable-xhdpi" to "258x96 px",
|
||||||
|
"drawable-xxhdpi" to "387x144 px",
|
||||||
|
"drawable-xxxhdpi" to "512x192 px"
|
||||||
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Header logos built into this patch.
|
||||||
|
*/
|
||||||
|
private val logoResourceNames = arrayOf(
|
||||||
|
"revanced_header_minimal",
|
||||||
|
"revanced_header_rounded",
|
||||||
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom header resource/file name.
|
||||||
|
*/
|
||||||
|
private const val CUSTOM_HEADER_RESOURCE_NAME = "revanced_header_custom"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom header resource/file names.
|
||||||
|
*/
|
||||||
|
private val customHeaderResourceFileNames = variants.map { variant ->
|
||||||
|
"${CUSTOM_HEADER_RESOURCE_NAME}_$variant.png"
|
||||||
|
}.toTypedArray()
|
||||||
|
|
||||||
|
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/youtube/patches/ChangeHeaderPatch;"
|
||||||
|
|
||||||
private val changeHeaderBytecodePatch = bytecodePatch {
|
private val changeHeaderBytecodePatch = bytecodePatch {
|
||||||
dependsOn(resourceMappingPatch)
|
dependsOn(
|
||||||
|
resourceMappingPatch,
|
||||||
|
addBrandLicensePatch
|
||||||
|
)
|
||||||
|
|
||||||
execute {
|
execute {
|
||||||
// Resources are not used during patching, but extension code uses these
|
// Verify images exist. Resources are not used during patching but extension code does.
|
||||||
// images so verify they exist.
|
|
||||||
arrayOf(
|
arrayOf(
|
||||||
"yt_ringo2_wordmark_header",
|
"yt_ringo2_wordmark_header",
|
||||||
"yt_ringo2_premium_wordmark_header"
|
"yt_ringo2_premium_wordmark_header"
|
||||||
@@ -62,28 +91,6 @@ private val changeHeaderBytecodePatch = bytecodePatch {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val targetResourceDirectoryNames = mapOf(
|
|
||||||
"xxxhdpi" to "512px x 192px",
|
|
||||||
"xxhdpi" to "387px x 144px",
|
|
||||||
"xhdpi" to "258px x 96px",
|
|
||||||
"hdpi" to "194px x 72px",
|
|
||||||
"mdpi" to "129px x 48px"
|
|
||||||
).mapKeys { (dpi, _) -> "drawable-$dpi" }
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Header logos built into this patch.
|
|
||||||
*/
|
|
||||||
private val logoResourceNames = arrayOf(
|
|
||||||
"revanced_header_logo_minimal",
|
|
||||||
"revanced_header_logo",
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Custom header resource/file name.
|
|
||||||
*/
|
|
||||||
private const val CUSTOM_HEADER_RESOURCE_NAME = "custom_header"
|
|
||||||
|
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
val changeHeaderPatch = resourcePatch(
|
val changeHeaderPatch = resourcePatch(
|
||||||
name = "Change header",
|
name = "Change header",
|
||||||
@@ -110,7 +117,7 @@ val changeHeaderPatch = resourcePatch(
|
|||||||
${targetResourceDirectoryNames.keys.joinToString("\n") { "- $it" }}
|
${targetResourceDirectoryNames.keys.joinToString("\n") { "- $it" }}
|
||||||
|
|
||||||
Each of the folders must contain all of the following files:
|
Each of the folders must contain all of the following files:
|
||||||
${variants.joinToString("\n") { variant -> "- ${CUSTOM_HEADER_RESOURCE_NAME}_$variant.png" }}
|
${customHeaderResourceFileNames.joinToString("\n")}
|
||||||
|
|
||||||
The image dimensions must be as follows:
|
The image dimensions must be as follows:
|
||||||
${targetResourceDirectoryNames.map { (dpi, dim) -> "- $dpi: $dim" }.joinToString("\n")}
|
${targetResourceDirectoryNames.map { (dpi, dim) -> "- $dpi: $dim" }.joinToString("\n")}
|
||||||
@@ -120,67 +127,41 @@ val changeHeaderPatch = resourcePatch(
|
|||||||
execute {
|
execute {
|
||||||
addResources("youtube", "layout.branding.changeHeaderPatch")
|
addResources("youtube", "layout.branding.changeHeaderPatch")
|
||||||
|
|
||||||
fun getLightDarkFileNames(vararg resourceNames: String): Array<String> =
|
PreferenceScreen.GENERAL_LAYOUT.addPreferences(
|
||||||
variants.flatMap { variant ->
|
if (custom == null) {
|
||||||
resourceNames.map { resource -> "${resource}_$variant.png" }
|
ListPreference("revanced_header_logo")
|
||||||
}.toTypedArray()
|
} else {
|
||||||
|
ListPreference(
|
||||||
val logoResourceFileNames = getLightDarkFileNames(*logoResourceNames)
|
key = "revanced_header_logo",
|
||||||
copyResources(
|
entriesKey = "revanced_header_logo_custom_entries",
|
||||||
"change-header",
|
entryValuesKey = "revanced_header_logo_custom_entry_values"
|
||||||
ResourceGroup("drawable-hdpi", *logoResourceFileNames),
|
|
||||||
ResourceGroup("drawable-mdpi", *logoResourceFileNames),
|
|
||||||
ResourceGroup("drawable-xhdpi", *logoResourceFileNames),
|
|
||||||
ResourceGroup("drawable-xxhdpi", *logoResourceFileNames),
|
|
||||||
ResourceGroup("drawable-xxxhdpi", *logoResourceFileNames),
|
|
||||||
)
|
|
||||||
|
|
||||||
if (custom != null) {
|
|
||||||
val customFile = File(custom!!)
|
|
||||||
if (!customFile.exists()) {
|
|
||||||
throw PatchException("The custom icon path cannot be found: " +
|
|
||||||
customFile.absolutePath
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
)
|
||||||
|
|
||||||
if (!customFile.isDirectory) {
|
logoResourceNames.forEach { logo ->
|
||||||
throw PatchException("The custom icon path must be a folder: "
|
variants.forEach { variant ->
|
||||||
+ customFile.absolutePath)
|
copyResources(
|
||||||
|
"change-header",
|
||||||
|
ResourceGroup(
|
||||||
|
"drawable",
|
||||||
|
logo + "_" + variant + ".xml"
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val sourceFolders = customFile.listFiles { file -> file.isDirectory }
|
// Copy custom template. Images are only used if settings
|
||||||
?: throw PatchException("The custom icon path contains no subfolders: " +
|
// are imported and a custom header is enabled.
|
||||||
customFile.absolutePath)
|
targetResourceDirectoryNames.keys.forEach { dpi ->
|
||||||
|
variants.forEach { variant ->
|
||||||
val customResourceFileNames = getLightDarkFileNames(CUSTOM_HEADER_RESOURCE_NAME)
|
copyResources(
|
||||||
|
"change-header",
|
||||||
var copiedFiles = false
|
ResourceGroup(
|
||||||
|
dpi,
|
||||||
// For each source folder, copy the files to the target resource directories.
|
*customHeaderResourceFileNames
|
||||||
sourceFolders.forEach { dpiSourceFolder ->
|
)
|
||||||
val targetDpiFolder = get("res").resolve(dpiSourceFolder.name)
|
)
|
||||||
if (!targetDpiFolder.exists()) return@forEach
|
|
||||||
|
|
||||||
val customFiles = dpiSourceFolder.listFiles { file ->
|
|
||||||
file.isFile && file.name in customResourceFileNames
|
|
||||||
}!!
|
|
||||||
|
|
||||||
if (customFiles.size > 0 && customFiles.size != variants.size) {
|
|
||||||
throw PatchException("Both light/dark mode images " +
|
|
||||||
"must be specified but only found: " + customFiles.map { it.name })
|
|
||||||
}
|
|
||||||
|
|
||||||
customFiles.forEach { imgSourceFile ->
|
|
||||||
val imgTargetFile = targetDpiFolder.resolve(imgSourceFile.name)
|
|
||||||
imgSourceFile.copyTo(imgTargetFile)
|
|
||||||
|
|
||||||
copiedFiles = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!copiedFiles) {
|
|
||||||
throw PatchException("No custom header images found in " +
|
|
||||||
"the provided path: " + customFile.absolutePath)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -199,9 +180,7 @@ val changeHeaderPatch = resourcePatch(
|
|||||||
addAttributeReference(logoName)
|
addAttributeReference(logoName)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (custom != null) {
|
addAttributeReference(CUSTOM_HEADER_RESOURCE_NAME)
|
||||||
addAttributeReference(CUSTOM_HEADER_RESOURCE_NAME)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add custom drawables to all styles that use the regular and premium logo.
|
// Add custom drawables to all styles that use the regular and premium logo.
|
||||||
@@ -227,22 +206,58 @@ val changeHeaderPatch = resourcePatch(
|
|||||||
addDrawableElement(document, logoName, mode)
|
addDrawableElement(document, logoName, mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (custom != null) {
|
addDrawableElement(document, CUSTOM_HEADER_RESOURCE_NAME, mode)
|
||||||
addDrawableElement(document, CUSTOM_HEADER_RESOURCE_NAME, mode)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PreferenceScreen.GENERAL_LAYOUT.addPreferences(
|
// Copy user provided images last, so if an exception is thrown due to bad input.
|
||||||
if (custom == null) {
|
if (custom != null) {
|
||||||
ListPreference("revanced_header_logo")
|
val customFile = File(custom!!.trim())
|
||||||
} else {
|
if (!customFile.exists()) {
|
||||||
ListPreference(
|
throw PatchException("The custom header path cannot be found: " +
|
||||||
key = "revanced_header_logo",
|
customFile.absolutePath
|
||||||
entriesKey = "revanced_header_logo_custom_entries",
|
|
||||||
entryValuesKey = "revanced_header_logo_custom_entry_values"
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
)
|
|
||||||
|
if (!customFile.isDirectory) {
|
||||||
|
throw PatchException("The custom header path must be a folder: "
|
||||||
|
+ customFile.absolutePath)
|
||||||
|
}
|
||||||
|
|
||||||
|
var copiedFiles = false
|
||||||
|
|
||||||
|
// For each source folder, copy the files to the target resource directories.
|
||||||
|
customFile.listFiles {
|
||||||
|
file -> file.isDirectory && file.name in targetResourceDirectoryNames
|
||||||
|
}!!.forEach { dpiSourceFolder ->
|
||||||
|
val targetDpiFolder = get("res").resolve(dpiSourceFolder.name)
|
||||||
|
if (!targetDpiFolder.exists()) {
|
||||||
|
// Should never happen.
|
||||||
|
throw IllegalStateException("Resource not found: $dpiSourceFolder")
|
||||||
|
}
|
||||||
|
|
||||||
|
val customFiles = dpiSourceFolder.listFiles { file ->
|
||||||
|
file.isFile && file.name in customHeaderResourceFileNames
|
||||||
|
}!!
|
||||||
|
|
||||||
|
if (customFiles.isNotEmpty() && customFiles.size != variants.size) {
|
||||||
|
throw PatchException("Both light/dark mode images " +
|
||||||
|
"must be specified but only found: " + customFiles.map { it.name })
|
||||||
|
}
|
||||||
|
|
||||||
|
customFiles.forEach { imgSourceFile ->
|
||||||
|
val imgTargetFile = targetDpiFolder.resolve(imgSourceFile.name)
|
||||||
|
imgSourceFile.copyTo(target = imgTargetFile, overwrite = true)
|
||||||
|
|
||||||
|
copiedFiles = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!copiedFiles) {
|
||||||
|
throw PatchException("Expected to find directories and files: "
|
||||||
|
+ customHeaderResourceFileNames.contentToString()
|
||||||
|
+ "\nBut none were found in the provided option file path: " + customFile.absolutePath)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -147,6 +147,7 @@ val hideLayoutComponentsPatch = bytecodePatch(
|
|||||||
SwitchPreference("revanced_hide_chapters_section"),
|
SwitchPreference("revanced_hide_chapters_section"),
|
||||||
SwitchPreference("revanced_hide_info_cards_section"),
|
SwitchPreference("revanced_hide_info_cards_section"),
|
||||||
SwitchPreference("revanced_hide_how_this_was_made_section"),
|
SwitchPreference("revanced_hide_how_this_was_made_section"),
|
||||||
|
SwitchPreference("revanced_hide_hype_points"),
|
||||||
SwitchPreference("revanced_hide_key_concepts_section"),
|
SwitchPreference("revanced_hide_key_concepts_section"),
|
||||||
SwitchPreference("revanced_hide_podcast_section"),
|
SwitchPreference("revanced_hide_podcast_section"),
|
||||||
SwitchPreference("revanced_hide_transcript_section"),
|
SwitchPreference("revanced_hide_transcript_section"),
|
||||||
|
|||||||
@@ -45,10 +45,10 @@ val hidePlayerFlyoutMenuPatch = bytecodePatch(
|
|||||||
SwitchPreference("revanced_hide_player_flyout_loop_video"),
|
SwitchPreference("revanced_hide_player_flyout_loop_video"),
|
||||||
SwitchPreference("revanced_hide_player_flyout_ambient_mode"),
|
SwitchPreference("revanced_hide_player_flyout_ambient_mode"),
|
||||||
SwitchPreference("revanced_hide_player_flyout_stable_volume"),
|
SwitchPreference("revanced_hide_player_flyout_stable_volume"),
|
||||||
|
SwitchPreference("revanced_hide_player_flyout_listen_with_youtube_music"),
|
||||||
SwitchPreference("revanced_hide_player_flyout_help"),
|
SwitchPreference("revanced_hide_player_flyout_help"),
|
||||||
SwitchPreference("revanced_hide_player_flyout_speed"),
|
SwitchPreference("revanced_hide_player_flyout_speed"),
|
||||||
SwitchPreference("revanced_hide_player_flyout_lock_screen"),
|
SwitchPreference("revanced_hide_player_flyout_lock_screen"),
|
||||||
SwitchPreference("revanced_hide_player_flyout_more_info"),
|
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
key = "revanced_hide_player_flyout_audio_track",
|
key = "revanced_hide_player_flyout_audio_track",
|
||||||
tag = "app.revanced.extension.youtube.settings.preference.HideAudioFlyoutMenuPreference"
|
tag = "app.revanced.extension.youtube.settings.preference.HideAudioFlyoutMenuPreference"
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
package app.revanced.patches.youtube.layout.seekbar
|
package app.revanced.patches.youtube.layout.seekbar
|
||||||
|
|
||||||
import app.revanced.patcher.Fingerprint
|
import app.revanced.patcher.Fingerprint
|
||||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
|
||||||
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.replaceInstruction
|
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||||
import app.revanced.patcher.patch.PatchException
|
|
||||||
import app.revanced.patcher.patch.bytecodePatch
|
import app.revanced.patcher.patch.bytecodePatch
|
||||||
import app.revanced.patcher.patch.resourcePatch
|
import app.revanced.patcher.patch.resourcePatch
|
||||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||||
@@ -17,17 +15,13 @@ import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
|
|||||||
import app.revanced.patches.shared.misc.mapping.resourceMappings
|
import app.revanced.patches.shared.misc.mapping.resourceMappings
|
||||||
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||||
import app.revanced.patches.youtube.misc.playservice.is_19_34_or_greater
|
import app.revanced.patches.youtube.misc.playservice.is_19_34_or_greater
|
||||||
import app.revanced.patches.youtube.misc.playservice.is_19_46_or_greater
|
|
||||||
import app.revanced.patches.youtube.misc.playservice.is_19_49_or_greater
|
import app.revanced.patches.youtube.misc.playservice.is_19_49_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.settingsPatch
|
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||||
import app.revanced.patches.youtube.shared.mainActivityOnCreateFingerprint
|
import app.revanced.patches.youtube.shared.mainActivityOnCreateFingerprint
|
||||||
import app.revanced.util.copyXmlNode
|
|
||||||
import app.revanced.util.findElementByAttributeValueOrThrow
|
|
||||||
import app.revanced.util.findInstructionIndicesReversedOrThrow
|
import app.revanced.util.findInstructionIndicesReversedOrThrow
|
||||||
import app.revanced.util.getReference
|
import app.revanced.util.getReference
|
||||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||||
import app.revanced.util.inputStreamFromBundledResource
|
|
||||||
import app.revanced.util.insertLiteralOverride
|
import app.revanced.util.insertLiteralOverride
|
||||||
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
|
||||||
@@ -38,9 +32,6 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
|||||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
|
import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
|
||||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter
|
import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter
|
||||||
import org.w3c.dom.Element
|
|
||||||
import java.io.ByteArrayInputStream
|
|
||||||
import kotlin.use
|
|
||||||
|
|
||||||
internal var reelTimeBarPlayedColorId = -1L
|
internal var reelTimeBarPlayedColorId = -1L
|
||||||
private set
|
private set
|
||||||
@@ -57,8 +48,6 @@ internal var ytTextSecondaryId = -1L
|
|||||||
internal var inlineTimeBarLiveSeekableRangeId = -1L
|
internal var inlineTimeBarLiveSeekableRangeId = -1L
|
||||||
private set
|
private set
|
||||||
|
|
||||||
internal const val splashSeekbarColorAttributeName = "splash_custom_seekbar_color"
|
|
||||||
|
|
||||||
private val seekbarColorResourcePatch = resourcePatch {
|
private val seekbarColorResourcePatch = resourcePatch {
|
||||||
dependsOn(
|
dependsOn(
|
||||||
settingsPatch,
|
settingsPatch,
|
||||||
@@ -92,21 +81,6 @@ private val seekbarColorResourcePatch = resourcePatch {
|
|||||||
"inline_time_bar_live_seekable_range"
|
"inline_time_bar_live_seekable_range"
|
||||||
]
|
]
|
||||||
|
|
||||||
// Modify the resume playback drawable and replace the progress bar with a custom drawable.
|
|
||||||
document("res/drawable/resume_playback_progressbar_drawable.xml").use { document ->
|
|
||||||
val layerList = document.getElementsByTagName("layer-list").item(0) as Element
|
|
||||||
val progressNode = layerList.getElementsByTagName("item").item(1) as Element
|
|
||||||
if (!progressNode.getAttributeNode("android:id").value.endsWith("progress")) {
|
|
||||||
throw PatchException("Could not find progress bar")
|
|
||||||
}
|
|
||||||
val scaleNode = progressNode.getElementsByTagName("scale").item(0) as Element
|
|
||||||
val shapeNode = scaleNode.getElementsByTagName("shape").item(0) as Element
|
|
||||||
val replacementNode = document.createElement(
|
|
||||||
"app.revanced.extension.youtube.patches.theme.ProgressBarDrawable",
|
|
||||||
)
|
|
||||||
scaleNode.replaceChild(replacementNode, shapeNode)
|
|
||||||
}
|
|
||||||
|
|
||||||
ytYoutubeMagentaColorId = resourceMappings[
|
ytYoutubeMagentaColorId = resourceMappings[
|
||||||
"color",
|
"color",
|
||||||
"yt_youtube_magenta",
|
"yt_youtube_magenta",
|
||||||
@@ -115,99 +89,9 @@ private val seekbarColorResourcePatch = resourcePatch {
|
|||||||
"attr",
|
"attr",
|
||||||
"ytStaticBrandRed",
|
"ytStaticBrandRed",
|
||||||
]
|
]
|
||||||
|
|
||||||
// Add attribute and styles for splash screen custom color.
|
|
||||||
// Using a style is the only way to selectively change just the seekbar fill color.
|
|
||||||
//
|
|
||||||
// Because the style colors must be hard coded for all color possibilities,
|
|
||||||
// instead of allowing 24 bit color the style is restricted to 9-bit (3 bits per color channel)
|
|
||||||
// and the style color closest to the users custom color is used for the splash screen.
|
|
||||||
arrayOf(
|
|
||||||
inputStreamFromBundledResource("seekbar/values", "attrs.xml")!! to "res/values/attrs.xml",
|
|
||||||
ByteArrayInputStream(create9BitSeekbarColorStyles().toByteArray()) to "res/values/styles.xml"
|
|
||||||
).forEach { (source, destination) ->
|
|
||||||
"resources".copyXmlNode(
|
|
||||||
document(source),
|
|
||||||
document(destination),
|
|
||||||
).close()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun setSplashDrawablePathFillColor(xmlFileNames: Iterable<String>, vararg resourceNames: String) {
|
|
||||||
xmlFileNames.forEach { xmlFileName ->
|
|
||||||
document(xmlFileName).use { document ->
|
|
||||||
val childNodes = document.childNodes
|
|
||||||
|
|
||||||
resourceNames.forEach { elementId ->
|
|
||||||
val element = childNodes.findElementByAttributeValueOrThrow(
|
|
||||||
"android:name",
|
|
||||||
elementId
|
|
||||||
)
|
|
||||||
|
|
||||||
val attribute = "android:fillColor"
|
|
||||||
if (!element.hasAttribute(attribute)) {
|
|
||||||
throw PatchException("Could not find $attribute for $elementId")
|
|
||||||
}
|
|
||||||
|
|
||||||
element.setAttribute(attribute, "?attr/$splashSeekbarColorAttributeName")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setSplashDrawablePathFillColor(
|
|
||||||
listOf(
|
|
||||||
"res/drawable/\$startup_animation_light__0.xml",
|
|
||||||
"res/drawable/\$startup_animation_dark__0.xml"
|
|
||||||
),
|
|
||||||
"_R_G_L_10_G_D_0_P_0"
|
|
||||||
)
|
|
||||||
|
|
||||||
if (!is_19_46_or_greater) {
|
|
||||||
// Resources removed in 19.46+
|
|
||||||
setSplashDrawablePathFillColor(
|
|
||||||
listOf(
|
|
||||||
"res/drawable/\$buenos_aires_animation_light__0.xml",
|
|
||||||
"res/drawable/\$buenos_aires_animation_dark__0.xml"
|
|
||||||
),
|
|
||||||
"_R_G_L_8_G_D_0_P_0"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate a style xml with all combinations of 9-bit colors.
|
|
||||||
*/
|
|
||||||
private fun create9BitSeekbarColorStyles(): String = StringBuilder().apply {
|
|
||||||
append("<?xml version=\"1.0\" encoding=\"utf-8\"?>")
|
|
||||||
append("<resources>\n")
|
|
||||||
|
|
||||||
for (red in 0..7) {
|
|
||||||
for (green in 0..7) {
|
|
||||||
for (blue in 0..7) {
|
|
||||||
val name = "${red}_${green}_${blue}"
|
|
||||||
|
|
||||||
fun roundTo3BitHex(channel8Bits: Int) =
|
|
||||||
(channel8Bits * 255 / 7).toString(16).padStart(2, '0')
|
|
||||||
val r = roundTo3BitHex(red)
|
|
||||||
val g = roundTo3BitHex(green)
|
|
||||||
val b = roundTo3BitHex(blue)
|
|
||||||
val color = "#ff$r$g$b"
|
|
||||||
|
|
||||||
append(
|
|
||||||
"""
|
|
||||||
<style name="splash_seekbar_color_style_$name">
|
|
||||||
<item name="$splashSeekbarColorAttributeName">$color</item>
|
|
||||||
</style>
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
append("</resources>")
|
|
||||||
}.toString()
|
|
||||||
|
|
||||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/youtube/patches/theme/SeekbarColorPatch;"
|
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/youtube/patches/theme/SeekbarColorPatch;"
|
||||||
|
|
||||||
val seekbarColorPatch = bytecodePatch(
|
val seekbarColorPatch = bytecodePatch(
|
||||||
@@ -344,21 +228,6 @@ val seekbarColorPatch = bytecodePatch(
|
|||||||
|
|
||||||
// Hook the splash animation to set the a seekbar color.
|
// Hook the splash animation to set the a seekbar color.
|
||||||
mainActivityOnCreateFingerprint.method.apply {
|
mainActivityOnCreateFingerprint.method.apply {
|
||||||
val drawableIndex = indexOfFirstInstructionOrThrow {
|
|
||||||
val reference = getReference<MethodReference>()
|
|
||||||
reference?.definingClass == "Landroid/widget/ImageView;"
|
|
||||||
&& reference.name == "getDrawable"
|
|
||||||
}
|
|
||||||
val checkCastIndex = indexOfFirstInstructionOrThrow(drawableIndex, Opcode.CHECK_CAST)
|
|
||||||
val drawableRegister = getInstruction<OneRegisterInstruction>(checkCastIndex).registerA
|
|
||||||
|
|
||||||
addInstruction(
|
|
||||||
checkCastIndex + 1,
|
|
||||||
"invoke-static { v$drawableRegister }, $EXTENSION_CLASS_DESCRIPTOR->" +
|
|
||||||
"setSplashAnimationDrawableTheme(Landroid/graphics/drawable/AnimatedVectorDrawable;)V"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Replace the Lottie animation view setAnimation(int) call.
|
|
||||||
val setAnimationIntMethodName = lottieAnimationViewSetAnimationIntFingerprint.originalMethod.name
|
val setAnimationIntMethodName = lottieAnimationViewSetAnimationIntFingerprint.originalMethod.name
|
||||||
|
|
||||||
findInstructionIndicesReversedOrThrow {
|
findInstructionIndicesReversedOrThrow {
|
||||||
@@ -371,13 +240,11 @@ val seekbarColorPatch = bytecodePatch(
|
|||||||
replaceInstruction(
|
replaceInstruction(
|
||||||
index,
|
index,
|
||||||
"invoke-static { v${instruction.registerC}, v${instruction.registerD} }, " +
|
"invoke-static { v${instruction.registerC}, v${instruction.registerD} }, " +
|
||||||
"$EXTENSION_CLASS_DESCRIPTOR->setSplashAnimationLottie" +
|
"$EXTENSION_CLASS_DESCRIPTOR->setSplashAnimationLottie(Lcom/airbnb/lottie/LottieAnimationView;I)V"
|
||||||
"(Lcom/airbnb/lottie/LottieAnimationView;I)V"
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Add non obfuscated method aliases for `setAnimation(int)`
|
// Add non obfuscated method aliases for `setAnimation(int)`
|
||||||
// and `setAnimation(InputStream, String)` so extension code can call them.
|
// and `setAnimation(InputStream, String)` so extension code can call them.
|
||||||
lottieAnimationViewSetAnimationIntFingerprint.classDef.methods.apply {
|
lottieAnimationViewSetAnimationIntFingerprint.classDef.methods.apply {
|
||||||
|
|||||||
@@ -63,13 +63,6 @@ val spoofVideoStreamsPatch = spoofVideoStreamsPatch(
|
|||||||
tag = "app.revanced.extension.youtube.settings.preference.SpoofStreamingDataSideEffectsPreference"
|
tag = "app.revanced.extension.youtube.settings.preference.SpoofStreamingDataSideEffectsPreference"
|
||||||
),
|
),
|
||||||
SwitchPreference("revanced_spoof_video_streams_av1"),
|
SwitchPreference("revanced_spoof_video_streams_av1"),
|
||||||
ListPreference(
|
|
||||||
key = "revanced_spoof_video_streams_language",
|
|
||||||
// Language strings are declared in Setting patch.
|
|
||||||
entriesKey = "revanced_language_entries",
|
|
||||||
entryValuesKey = "revanced_language_entry_values",
|
|
||||||
tag = "app.revanced.extension.youtube.settings.preference.SpoofAudioSelectorListPreference"
|
|
||||||
),
|
|
||||||
SwitchPreference("revanced_spoof_streaming_data_stats_for_nerds"),
|
SwitchPreference("revanced_spoof_streaming_data_stats_for_nerds"),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -1639,10 +1639,6 @@ Second \"item\" text"</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>
|
||||||
<string name="revanced_spoof_video_streams_language_title">لغة بث الصوت</string>
|
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
<string name="revanced_spoof_video_streams_language_not_available">لتحديد لغة صوتية معينة، قم بإيقاف تشغيل \'فرض لغة الصوت الأصلية\'</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_android_studio">اختيار لغة البث غير متاح مع Android Studio</string>
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -259,7 +259,6 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -218,9 +218,9 @@ Hər halda, bunu aktivləşdirmə IP ünvanınız kimi bəzi istifadəçi məlum
|
|||||||
<string name="revanced_hide_community_posts_title">İcma elanların gizlət</string>
|
<string name="revanced_hide_community_posts_title">İcma elanların gizlət</string>
|
||||||
<string name="revanced_hide_community_posts_summary_on">İcma elanları gizlədilib</string>
|
<string name="revanced_hide_community_posts_summary_on">İcma elanları gizlədilib</string>
|
||||||
<string name="revanced_hide_community_posts_summary_off">İcma elanları göstərilir</string>
|
<string name="revanced_hide_community_posts_summary_off">İcma elanları göstərilir</string>
|
||||||
<string name="revanced_hide_compact_banner_title">Yığcam etiketləri gizlət</string>
|
<string name="revanced_hide_compact_banner_title">Yığcam afişaları gizlət</string>
|
||||||
<string name="revanced_hide_compact_banner_summary_on">Yığcam etiketlər gizlidir</string>
|
<string name="revanced_hide_compact_banner_summary_on">Yığcam afişalar gizlidir</string>
|
||||||
<string name="revanced_hide_compact_banner_summary_off">Yığcam etiketlər göstərilir</string>
|
<string name="revanced_hide_compact_banner_summary_off">Yığcam afişalar görünür</string>
|
||||||
<string name="revanced_hide_crowdfunding_box_title">İanə qutusunu gizlət</string>
|
<string name="revanced_hide_crowdfunding_box_title">İanə qutusunu gizlət</string>
|
||||||
<string name="revanced_hide_crowdfunding_box_summary_on">İanə qutusu gizlidir</string>
|
<string name="revanced_hide_crowdfunding_box_summary_on">İanə qutusu gizlidir</string>
|
||||||
<string name="revanced_hide_crowdfunding_box_summary_off">İanə qutusu göstərilir</string>
|
<string name="revanced_hide_crowdfunding_box_summary_off">İanə qutusu göstərilir</string>
|
||||||
@@ -471,9 +471,9 @@ Məhdudiyyətlər
|
|||||||
<string name="revanced_hide_creator_store_shelf_title">Yaradıcı mağaza bölümün gizlət</string>
|
<string name="revanced_hide_creator_store_shelf_title">Yaradıcı mağaza bölümün gizlət</string>
|
||||||
<string name="revanced_hide_creator_store_shelf_summary_on">Yaradıcı alış-veriş cərgəsi video oynadıcı altında gizlidir</string>
|
<string name="revanced_hide_creator_store_shelf_summary_on">Yaradıcı alış-veriş cərgəsi video oynadıcı altında gizlidir</string>
|
||||||
<string name="revanced_hide_creator_store_shelf_summary_off">Yaradıcı alış-veriş cərgəsi video oynadıcı altında görünür</string>
|
<string name="revanced_hide_creator_store_shelf_summary_off">Yaradıcı alış-veriş cərgəsi video oynadıcı altında görünür</string>
|
||||||
<string name="revanced_hide_end_screen_store_banner_title">Son ekran mağaza etiketini gizlət</string>
|
<string name="revanced_hide_end_screen_store_banner_title">Son ekran mağaza afişasın gizlət</string>
|
||||||
<string name="revanced_hide_end_screen_store_banner_summary_on">Son ekran alış-veriş etiketi gizlədilib</string>
|
<string name="revanced_hide_end_screen_store_banner_summary_on">Son ekran mağaza afişası gizlidir</string>
|
||||||
<string name="revanced_hide_end_screen_store_banner_summary_off">Son ekran alış-veriş etiketi görünür</string>
|
<string name="revanced_hide_end_screen_store_banner_summary_off">Son ekran mağaza afişası görünür</string>
|
||||||
<string name="revanced_hide_fullscreen_ads_title">Tam ekran reklamlarını gizlət</string>
|
<string name="revanced_hide_fullscreen_ads_title">Tam ekran reklamlarını gizlət</string>
|
||||||
<string name="revanced_hide_fullscreen_ads_summary_on">"Tam ekran reklamları gizlidir
|
<string name="revanced_hide_fullscreen_ads_summary_on">"Tam ekran reklamları gizlidir
|
||||||
|
|
||||||
@@ -484,9 +484,9 @@ Bu xüsusiyyət yalnız köhnə cihazlar üçün mövcuddur"</string>
|
|||||||
<string name="revanced_hide_general_ads_title">Ümumi reklamları gizlət</string>
|
<string name="revanced_hide_general_ads_title">Ümumi reklamları gizlət</string>
|
||||||
<string name="revanced_hide_general_ads_summary_on">Ümumi reklamlar gizlidir</string>
|
<string name="revanced_hide_general_ads_summary_on">Ümumi reklamlar gizlidir</string>
|
||||||
<string name="revanced_hide_general_ads_summary_off">Ümumi reklamlar göstərilir</string>
|
<string name="revanced_hide_general_ads_summary_off">Ümumi reklamlar göstərilir</string>
|
||||||
<string name="revanced_hide_merchandise_banners_title">Məhsul etiketlərini gizlət</string>
|
<string name="revanced_hide_merchandise_banners_title">Məhsul afişaların gizlət</string>
|
||||||
<string name="revanced_hide_merchandise_banners_summary_on">Məhsul etiketləri gizlədilir</string>
|
<string name="revanced_hide_merchandise_banners_summary_on">Məhsul afişaları gizlədilir</string>
|
||||||
<string name="revanced_hide_merchandise_banners_summary_off">Məhsul etiketləri göstərilir</string>
|
<string name="revanced_hide_merchandise_banners_summary_off">Məhsul afişaları görünür</string>
|
||||||
<string name="revanced_hide_paid_promotion_label_title">Ödənişli tanıtım etiketini gizlət</string>
|
<string name="revanced_hide_paid_promotion_label_title">Ödənişli tanıtım etiketini gizlət</string>
|
||||||
<string name="revanced_hide_paid_promotion_label_summary_on">Ödənişli reklam etiketi gizlədilib</string>
|
<string name="revanced_hide_paid_promotion_label_summary_on">Ödənişli reklam etiketi gizlədilib</string>
|
||||||
<string name="revanced_hide_paid_promotion_label_summary_off">Ödənişli reklam etiketi göstərilir</string>
|
<string name="revanced_hide_paid_promotion_label_summary_off">Ödənişli reklam etiketi göstərilir</string>
|
||||||
@@ -496,7 +496,7 @@ Bu xüsusiyyət yalnız köhnə cihazlar üçün mövcuddur"</string>
|
|||||||
<string name="revanced_hide_shopping_links_title">Alış-veriş linklərini gizlət</string>
|
<string name="revanced_hide_shopping_links_title">Alış-veriş linklərini gizlət</string>
|
||||||
<string name="revanced_hide_shopping_links_summary_on">Alış-veriş linkləri video təsvirdə gizlidir</string>
|
<string name="revanced_hide_shopping_links_summary_on">Alış-veriş linkləri video təsvirdə gizlidir</string>
|
||||||
<string name="revanced_hide_shopping_links_summary_off">Alış-veriş linkləri video təsvirdə görünür</string>
|
<string name="revanced_hide_shopping_links_summary_off">Alış-veriş linkləri video təsvirdə görünür</string>
|
||||||
<string name="revanced_hide_view_products_banner_title">“Məhsullara baxın” panelin gizlət</string>
|
<string name="revanced_hide_view_products_banner_title">“Məhsullara baxın” afişasın gizlət</string>
|
||||||
<string name="revanced_hide_view_products_banner_summary_on">Məhsullara baxış etiketi video örtüyündə gizlidir</string>
|
<string name="revanced_hide_view_products_banner_summary_on">Məhsullara baxış etiketi video örtüyündə gizlidir</string>
|
||||||
<string name="revanced_hide_view_products_banner_summary_off">Məhsullara baxış etiketi video örtüyündə görünür</string>
|
<string name="revanced_hide_view_products_banner_summary_off">Məhsullara baxış etiketi video örtüyündə görünür</string>
|
||||||
<string name="revanced_hide_web_search_results_title">Veb axtarış nəticələrini gizlət</string>
|
<string name="revanced_hide_web_search_results_title">Veb axtarış nəticələrini gizlət</string>
|
||||||
@@ -1638,10 +1638,6 @@ Video oynatma AV1 ilə ilişə bilər və ya kadrlar buraxıla bilər."</string>
|
|||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">İstək üçün Statistikada göstər</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">İstək üçün Statistikada göstər</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Qəbuledici növü İstək üçün statistikada göstərilir</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Qəbuledici növü İstək üçün statistikada göstərilir</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Qəbuledici nerd üçün Statistikada gizlidir</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Qəbuledici nerd üçün Statistikada gizlidir</string>
|
||||||
<string name="revanced_spoof_video_streams_language_title">Səs yayım dili</string>
|
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
<string name="revanced_spoof_video_streams_language_not_available">Xüsusi səs dilini seçmək üçün \"Orijinal səs dilini zorlanı\" qapat</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_android_studio">Yayım dili seçimi Android Studio ilə əlçatmazdır</string>
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -1640,10 +1640,6 @@ Second \"item\" text"</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>
|
||||||
<string name="revanced_spoof_video_streams_language_title">Мова аўдыяпатоку</string>
|
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
<string name="revanced_spoof_video_streams_language_not_available">Каб выбраць пэўную мову аўдыё, адключыце \'Прымусовая арыгінальная мова аўдыё\'</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_android_studio">Выбар мовы трансляцыі недаступны ў Android Studio</string>
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -1639,10 +1639,6 @@ Second \"item\" text"</string>
|
|||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Poka6i v Statistiki za nerds</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Poka6i v Statistiki za nerds</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Tipът na klienta se poka6va v Statistiki za nerds</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Tipът na klienta se poka6va v Statistiki za nerds</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Klientът e skriт v Statistiki za nerds</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Klientът e skriт v Statistiki za nerds</string>
|
||||||
<string name="revanced_spoof_video_streams_language_title">Език на аудио потока</string>
|
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
<string name="revanced_spoof_video_streams_language_not_available">За да изберете конкретен аудио език, изключете \'Принудително оригинален аудио език\'</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_android_studio">Изборът на език на потока не е наличен с Android Studio</string>
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -1635,10 +1635,6 @@ AV1 সহ ভিডিও প্লেব্যাক আটকে যেতে
|
|||||||
<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>
|
||||||
<string name="revanced_spoof_video_streams_language_title">অডিও স্ট্রিম ভাষা</string>
|
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
<string name="revanced_spoof_video_streams_language_not_available">একটি নির্দিষ্ট অডিও ভাষা নির্বাচন করতে, \'মূল অডিও ভাষা জোর করে চালু রাখুন\' বন্ধ করুন</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_android_studio">অ্যান্ড্রয়েড স্টুডিও সহ স্ট্রিম ভাষার নির্বাচন উপলব্ধ নেই</string>
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -1639,10 +1639,6 @@ Přehrávání videa s AV1 se může sekat nebo vypadávat snímky."</string>
|
|||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Zobrazit ve statistikách pro nadšence</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Zobrazit ve statistikách pro nadšence</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Typ klienta se zobrazuje ve statistikách pro nadšence</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Typ klienta se zobrazuje ve statistikách pro nadšence</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Klient je skrytý ve statistikách pro nadšence</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Klient je skrytý ve statistikách pro nadšence</string>
|
||||||
<string name="revanced_spoof_video_streams_language_title">Jazyk zvukového streamu</string>
|
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
<string name="revanced_spoof_video_streams_language_not_available">Chcete-li vybrat konkrétní zvukový jazyk, vypněte „Vynutit původní zvukový jazyk“</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_android_studio">Volba jazyka streamu není k dispozici s Android Studiem</string>
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -1641,10 +1641,6 @@ Videoafspilning med AV1 kan hakke eller tabe billeder."</string>
|
|||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Vis i Statistik for nørder</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Vis i Statistik for nørder</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Klienttypen vises i Statistik for nørder</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Klienttypen vises i Statistik for nørder</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Klienten er skjult i Statistik for nørder</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Klienten er skjult i Statistik for nørder</string>
|
||||||
<string name="revanced_spoof_video_streams_language_title">Lydstreamsprog</string>
|
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
<string name="revanced_spoof_video_streams_language_not_available">For at vælge et specifikt lydsprog, slå \'Gennemtving originalt lydsprog\' fra</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_android_studio">Valg af streaming-sprog er ikke tilgængeligt med Android Studio</string>
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -1636,10 +1636,6 @@ Die Videowiedergabe mit AV1 kann stottern oder Bilder überspringen."</string>
|
|||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">In Statistiken für Nerds anzeigen</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">In Statistiken für Nerds anzeigen</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Der Client-Typ wird in den Statistiken für Nerds angezeigt</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Der Client-Typ wird in den Statistiken für Nerds angezeigt</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Der Client wird in den Statistiken für Nerds ausgeblendet</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Der Client wird in den Statistiken für Nerds ausgeblendet</string>
|
||||||
<string name="revanced_spoof_video_streams_language_title">Audiodatenstromsprache</string>
|
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
<string name="revanced_spoof_video_streams_language_not_available">Um eine bestimmte Audiosprache auszuwählen, deaktivieren Sie „Original-Audiosprache erzwingen“</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_android_studio">Die Auswahl der Stream-Sprache ist mit Android Studio nicht verfügbar.</string>
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -1638,10 +1638,6 @@ Second \"item\" text"</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>
|
||||||
<string name="revanced_spoof_video_streams_language_title">Γλώσσα ροής ήχου</string>
|
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
<string name="revanced_spoof_video_streams_language_not_available">Για να επιλέξετε μια συγκεκριμένη γλώσσα ήχου, απενεργοποιήστε το «Εξαναγκασμός αρχικής γλώσσας ήχου»</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_android_studio">Η επιλογή γλώσσας ροής δεν είναι διαθέσιμη με το Android Studio</string>
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -1628,10 +1628,6 @@ La reproducción puede tartamudear o perder fotogramas"</string>
|
|||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Mostrar en Estadísticas para nerds</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Mostrar en Estadísticas para nerds</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">El tipo de cliente se muestra en Estadísticas para nerds</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">El tipo de cliente se muestra en Estadísticas para nerds</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">El cliente está oculto en Estadísticas para nerds</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">El cliente está oculto en Estadísticas para nerds</string>
|
||||||
<string name="revanced_spoof_video_streams_language_title">Idioma de la transmisión de audio</string>
|
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
<string name="revanced_spoof_video_streams_language_not_available">Para seleccionar un idioma de audio específico, desactiva \"Forzar idioma de audio original\"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_android_studio">La selección de idioma de transmisión no está disponible con Android Studio</string>
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -1639,10 +1639,6 @@ AV1-ga videotaasesitus võib hakitud olla või kaadreid vahele jätta."</string>
|
|||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Kuva statistikas \"Nerdide jaoks\"</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Kuva statistikas \"Nerdide jaoks\"</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Klienditüüp on statistikas \"Nerdide jaoks\" nähtav</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Klienditüüp on statistikas \"Nerdide jaoks\" nähtav</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Klient on statistikas \"Nerdide jaoks\" peidetud</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Klient on statistikas \"Nerdide jaoks\" peidetud</string>
|
||||||
<string name="revanced_spoof_video_streams_language_title">Helivoo keel</string>
|
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
<string name="revanced_spoof_video_streams_language_not_available">Konkreetse helikeele valimiseks lülita välja \"Sunni algne helikeel\"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_android_studio">Voogedastuse keelevalik ei ole Android Studioga saadaval</string>
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -307,7 +307,6 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -1639,10 +1639,6 @@ AV1-videon toisto saattaa pätkiä."</string>
|
|||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Näytä teknisissä tiedoissa</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Näytä teknisissä tiedoissa</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Asiakastyyppi näytetään teknisissä tiedoissa</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Asiakastyyppi näytetään teknisissä tiedoissa</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Asiakastyyppi piilotetaan teknisissä tiedoissa</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Asiakastyyppi piilotetaan teknisissä tiedoissa</string>
|
||||||
<string name="revanced_spoof_video_streams_language_title">Äänivirran kieli</string>
|
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
<string name="revanced_spoof_video_streams_language_not_available">Valitaksesi tietyn äänen kielen, poista \"Pakota alkuperäinen äänen kieli\" käytöstä</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_android_studio">Striimin kielivalinta ei ole käytettävissä Android Studion kanssa</string>
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -1637,10 +1637,6 @@ Maaaring mag-stutter o mag-drop ng frames ang pag-playback ng video na may AV1."
|
|||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Ipakita sa Mga Istatistika para sa mga nerds</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Ipakita sa Mga Istatistika para sa mga nerds</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Ipinapakita ang uri ng kliyente sa Mga Istatistika para sa mga nerds</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Ipinapakita ang uri ng kliyente sa Mga Istatistika para sa mga nerds</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Nakatago ang kliyente sa Mga Istatistika para sa mga nerds</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Nakatago ang kliyente sa Mga Istatistika para sa mga nerds</string>
|
||||||
<string name="revanced_spoof_video_streams_language_title">Wika ng audio stream</string>
|
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
<string name="revanced_spoof_video_streams_language_not_available">Upang pumili ng isang partikular na wika ng audio, i-off ang \'Puwersahin ang orihinal na wika ng audio\'</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_android_studio">Hindi available ang pagpili ng wika ng stream sa Android Studio</string>
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -1640,10 +1640,6 @@ La lecture vidéo avec AV1 peut être saccadée et des images peuvent être perd
|
|||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Afficher dans les Statistiques avancées</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Afficher dans les Statistiques avancées</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Le type de client est affiché dans les Statistiques avancées</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Le type de client est affiché dans les Statistiques avancées</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Le client est caché dans les Statistiques avancées</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Le client est caché dans les Statistiques avancées</string>
|
||||||
<string name="revanced_spoof_video_streams_language_title">Langue du flux audio</string>
|
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
<string name="revanced_spoof_video_streams_language_not_available">Pour sélectionner une langue audio spécifique, désactivez \"Forcer la langue audio d\'origine\"</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_android_studio">La sélection de la langue du flux n\'est pas disponible avec Android Studio</string>
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -756,7 +756,7 @@ Mura dtagann aon athrú ar an socrú seo, bain triail as mód Incognito a chur a
|
|||||||
<string name="revanced_hide_player_flyout_loop_video_summary_off">Taispeántar roghchlár físe lúb</string>
|
<string name="revanced_hide_player_flyout_loop_video_summary_off">Taispeántar roghchlár físe lúb</string>
|
||||||
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
|
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||||
<string name="revanced_hide_player_flyout_ambient_mode_title">Folaigh modh comhthimpeallach</string>
|
<string name="revanced_hide_player_flyout_ambient_mode_title">Folaigh modh comhthimpeallach</string>
|
||||||
<string name="revanced_hide_player_flyout_ambient_mode_summary_on">Tá roghchlár mód chomhthimpeallach</string>
|
<string name="revanced_hide_player_flyout_ambient_mode_summary_on">Tá roghchlár mód comhthimpeallach i bhfolach</string>
|
||||||
<string name="revanced_hide_player_flyout_ambient_mode_summary_off">Taispeántar roghchlár mód comhthimpeallach</string>
|
<string name="revanced_hide_player_flyout_ambient_mode_summary_off">Taispeántar roghchlár mód comhthimpeallach</string>
|
||||||
<string name="revanced_hide_player_flyout_stable_volume_title">Folaigh toirt cobhsaí</string>
|
<string name="revanced_hide_player_flyout_stable_volume_title">Folaigh toirt cobhsaí</string>
|
||||||
<string name="revanced_hide_player_flyout_stable_volume_summary_off">Taispeántar roghchlár toirte cobhsaí</string>
|
<string name="revanced_hide_player_flyout_stable_volume_summary_off">Taispeántar roghchlár toirte cobhsaí</string>
|
||||||
@@ -764,7 +764,7 @@ Mura dtagann aon athrú ar an socrú seo, bain triail as mód Incognito a chur a
|
|||||||
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
|
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||||
<string name="revanced_hide_player_flyout_help_title">Folaigh Cabhair & aiseolas</string>
|
<string name="revanced_hide_player_flyout_help_title">Folaigh Cabhair & aiseolas</string>
|
||||||
<string name="revanced_hide_player_flyout_help_summary_on">Cabhair & Tá an roghchlár aiseolais i bhfolach</string>
|
<string name="revanced_hide_player_flyout_help_summary_on">Cabhair & Tá an roghchlár aiseolais i bhfolach</string>
|
||||||
<string name="revanced_hide_player_flyout_help_summary_off">Cabhair & Taispeántar roghchlár aiseolais</string>
|
<string name="revanced_hide_player_flyout_help_summary_off">Taispeántar roghchlár Cabhrach & Aiseolais</string>
|
||||||
<!-- 'Playback speed' should be translated using the same localized wording YouTube displays for the menu item. -->
|
<!-- 'Playback speed' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||||
<string name="revanced_hide_player_flyout_speed_title">Folaigh luas athsheinm</string>
|
<string name="revanced_hide_player_flyout_speed_title">Folaigh luas athsheinm</string>
|
||||||
<string name="revanced_hide_player_flyout_speed_summary_on">Tá roghchlár luas athsheinm i bhfolach</string>
|
<string name="revanced_hide_player_flyout_speed_summary_on">Tá roghchlár luas athsheinm i bhfolach</string>
|
||||||
@@ -773,11 +773,11 @@ Mura dtagann aon athrú ar an socrú seo, bain triail as mód Incognito a chur a
|
|||||||
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
|
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
|
||||||
<string name="revanced_hide_player_flyout_more_info_title">Folaigh Tuilleadh eolais</string>
|
<string name="revanced_hide_player_flyout_more_info_title">Folaigh Tuilleadh eolais</string>
|
||||||
<string name="revanced_hide_player_flyout_more_info_summary_on">Tá tuilleadh eolais i bhfolach</string>
|
<string name="revanced_hide_player_flyout_more_info_summary_on">Tá tuilleadh eolais i bhfolach</string>
|
||||||
<string name="revanced_hide_player_flyout_more_info_summary_off">Taispeántar roghchlár níos mó faisnéise</string>
|
<string name="revanced_hide_player_flyout_more_info_summary_off">Taispeántar roghchlár tuilleadh eolais</string>
|
||||||
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
|
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||||
<string name="revanced_hide_player_flyout_lock_screen_title">Folaigh scáileán Glas</string>
|
<string name="revanced_hide_player_flyout_lock_screen_title">Folaigh scáileán Glas</string>
|
||||||
<string name="revanced_hide_player_flyout_lock_screen_summary_on">Tá roghchlár scáileán glas i bhfolach</string>
|
<string name="revanced_hide_player_flyout_lock_screen_summary_on">Tá roghchlár scáileán glas i bhfolach</string>
|
||||||
<string name="revanced_hide_player_flyout_lock_screen_summary_off">Taispeántar roghchlár scáileáin glas</string>
|
<string name="revanced_hide_player_flyout_lock_screen_summary_off">Taispeántar roghchlár an scáileáin ghlasála</string>
|
||||||
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
|
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||||
<string name="revanced_hide_player_flyout_audio_track_title">Folaigh Rian Fuaime</string>
|
<string name="revanced_hide_player_flyout_audio_track_title">Folaigh Rian Fuaime</string>
|
||||||
<string name="revanced_hide_player_flyout_audio_track_summary_on">Tá roghchlár rian fuaime i bhfolach</string>
|
<string name="revanced_hide_player_flyout_audio_track_summary_on">Tá roghchlár rian fuaime i bhfolach</string>
|
||||||
@@ -788,32 +788,32 @@ Mura dtagann aon athrú ar an socrú seo, bain triail as mód Incognito a chur a
|
|||||||
Chun roghchlár an rian fuaime a thaispeáint, athraigh 'Sruthanna físeáin bhréige' go iPadOS"</string>
|
Chun roghchlár an rian fuaime a thaispeáint, athraigh 'Sruthanna físeáin bhréige' go iPadOS"</string>
|
||||||
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
|
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||||
<string name="revanced_hide_player_flyout_watch_in_vr_title">Folaigh Watch i VR</string>
|
<string name="revanced_hide_player_flyout_watch_in_vr_title">Folaigh Watch i VR</string>
|
||||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Tá faire i roghchlár VR i bhfolach</string>
|
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Tá an roghchlár Féach i VR i bhfolach</string>
|
||||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Taispeántar an faire sa roghchlár VR</string>
|
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Taispeántar an roghchlár Féach i VR</string>
|
||||||
<string name="revanced_hide_player_flyout_video_quality_title">Folaigh roghchlár cáilíocht físe</string>
|
<string name="revanced_hide_player_flyout_video_quality_title">Folaigh roghchlár cáilíocht físe</string>
|
||||||
<string name="revanced_hide_player_flyout_video_quality_summary_on">Tá roghchlár cháilíocht na físeáin i bhfolach</string>
|
<string name="revanced_hide_player_flyout_video_quality_summary_on">Tá roghchlár cháilíocht na físeáin i bhfolach</string>
|
||||||
<string name="revanced_hide_player_flyout_video_quality_summary_off">Tá roghchlár cháilíocht na físeáin ar taispeáint</string>
|
<string name="revanced_hide_player_flyout_video_quality_summary_off">Taispeántar roghchlár cáilíochta físe</string>
|
||||||
<string name="revanced_hide_player_flyout_video_quality_footer_title">Folaigh buntásc roghchlár cáilíochta físe</string>
|
<string name="revanced_hide_player_flyout_video_quality_footer_title">Folaigh buntásc roghchlár cáilíochta físe</string>
|
||||||
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Tá buntásc an roghchláir cáilíochta físeáin folaithe</string>
|
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Tá buntásc roghchláir cáilíochta físe i bhfolach</string>
|
||||||
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Taispeántar buntásc roghchlár cáilíochta físeáin</string>
|
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Taispeántar buntásc roghchlár cáilíochta físeáin</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
|
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
|
||||||
<string name="revanced_hide_autoplay_button_title">Folaigh cnaipe an Uathoimh</string>
|
<string name="revanced_hide_autoplay_button_title">Folaigh an cnaipe Uath-imirt</string>
|
||||||
<string name="revanced_hide_autoplay_button_summary_on">Tá cnaipe Autoplay i bhfolach</string>
|
<string name="revanced_hide_autoplay_button_summary_on">Tá an cnaipe uath-sheinm i bhfolach</string>
|
||||||
<string name="revanced_hide_autoplay_button_summary_off">Taispeántar cnaipe Autoplay</string>
|
<string name="revanced_hide_autoplay_button_summary_off">Taispeántar cnaipe Autoplay</string>
|
||||||
<!-- This button does not display any text, but 'Captions' should be translated using the same wording used as the translation of 'revanced_hide_player_flyout_captions_title'. -->
|
<!-- This button does not display any text, but 'Captions' should be translated using the same wording used as the translation of 'revanced_hide_player_flyout_captions_title'. -->
|
||||||
<string name="revanced_hide_captions_button_title">Folaigh cnaipe na dTeidil</string>
|
<string name="revanced_hide_captions_button_title">Folaigh cnaipe fotheidil</string>
|
||||||
<string name="revanced_hide_captions_button_summary_on">Tá cnaipe fotheidil i bhfolach</string>
|
<string name="revanced_hide_captions_button_summary_on">Tá cnaipe fotheidil i bhfolach</string>
|
||||||
<string name="revanced_hide_captions_button_summary_off">Taispeántar cnaipe fotheidil</string>
|
<string name="revanced_hide_captions_button_summary_off">Taispeántar cnaipe fotheidil</string>
|
||||||
<string name="revanced_hide_cast_button_title">Folaigh cnaipe an Chasta</string>
|
<string name="revanced_hide_cast_button_title">Folaigh cnaipe Cast</string>
|
||||||
<string name="revanced_hide_cast_button_summary_on">Tá cnaipe teilgthe i bhfolach</string>
|
<string name="revanced_hide_cast_button_summary_on">Tá cnaipe Cast i bhfolach</string>
|
||||||
<string name="revanced_hide_cast_button_summary_off">Taispeántar cnaipe teilgthe</string>
|
<string name="revanced_hide_cast_button_summary_off">Taispeántar cnaipe Cast</string>
|
||||||
<string name="revanced_hide_player_control_buttons_background_title">Folaigh cúlra rialuithe an imreora</string>
|
<string name="revanced_hide_player_control_buttons_background_title">Folaigh cúlra rialuithe an imreora</string>
|
||||||
<string name="revanced_hide_player_control_buttons_background_summary_on">Tá cúlra rialuithe an imreora i bhfolach</string>
|
<string name="revanced_hide_player_control_buttons_background_summary_on">Tá cúlra rialuithe an imreora i bhfolach</string>
|
||||||
<string name="revanced_hide_player_control_buttons_background_summary_off">Taispeántar cúlra rialuithe an imreora</string>
|
<string name="revanced_hide_player_control_buttons_background_summary_off">Taispeántar cúlra rialuithe an imreora</string>
|
||||||
<string name="revanced_hide_player_previous_next_buttons_title">Folaigh Cnaipí Roimhe & Ar Aghaidh</string>
|
<string name="revanced_hide_player_previous_next_buttons_title">Folaigh cnaipí Roimhe Seo & Ar Aghaidh</string>
|
||||||
<string name="revanced_hide_player_previous_next_buttons_summary_on">Tá cnaipí i bhfolach</string>
|
<string name="revanced_hide_player_previous_next_buttons_summary_on">Tá cnaipí Roimhe Seo & Ar Aghaidh i bhfolach</string>
|
||||||
<string name="revanced_hide_player_previous_next_buttons_summary_off">Taispeántar cnaipí</string>
|
<string name="revanced_hide_player_previous_next_buttons_summary_off">Taispeántar cnaipí Roimhe Seo & Ar Aghaidh</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||||
<string name="revanced_hide_endscreen_cards_title">Folaigh cártaí scáileáin deireadh</string>
|
<string name="revanced_hide_endscreen_cards_title">Folaigh cártaí scáileáin deireadh</string>
|
||||||
@@ -821,7 +821,7 @@ Chun roghchlár an rian fuaime a thaispeáint, athraigh 'Sruthanna físeáin bhr
|
|||||||
<string name="revanced_hide_endscreen_cards_summary_off">Taispeántar cártaí scáileáin deireadh</string>
|
<string name="revanced_hide_endscreen_cards_summary_off">Taispeántar cártaí scáileáin deireadh</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.fullscreenambientmode.disableFullscreenAmbientModePatch">
|
<patch id="layout.hide.fullscreenambientmode.disableFullscreenAmbientModePatch">
|
||||||
<string name="revanced_disable_fullscreen_ambient_mode_title">Díchumasaigh mód Timpeallachta i scáileán iomlán</string>
|
<string name="revanced_disable_fullscreen_ambient_mode_title">Díchumasaigh mód comhthimpeallach i lánscáileán</string>
|
||||||
<string name="revanced_disable_fullscreen_ambient_mode_summary_on">Díchumasaíodh mód comhthimpeallach</string>
|
<string name="revanced_disable_fullscreen_ambient_mode_summary_on">Díchumasaíodh mód comhthimpeallach</string>
|
||||||
<string name="revanced_disable_fullscreen_ambient_mode_summary_off">Mód comhthimpeallach cumasaithe</string>
|
<string name="revanced_disable_fullscreen_ambient_mode_summary_off">Mód comhthimpeallach cumasaithe</string>
|
||||||
</patch>
|
</patch>
|
||||||
@@ -831,8 +831,8 @@ Chun roghchlár an rian fuaime a thaispeáint, athraigh 'Sruthanna físeáin bhr
|
|||||||
<string name="revanced_hide_info_cards_summary_off">Taispeántar cártaí faisnéise</string>
|
<string name="revanced_hide_info_cards_summary_off">Taispeántar cártaí faisnéise</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.rollingnumber.disableRollingNumberAnimationPatch">
|
<patch id="layout.hide.rollingnumber.disableRollingNumberAnimationPatch">
|
||||||
<string name="revanced_disable_rolling_number_animations_title">Díchumasaigh beochan uimhreacha</string>
|
<string name="revanced_disable_rolling_number_animations_title">Díchumasaigh beochana uimhreacha rollta</string>
|
||||||
<string name="revanced_disable_rolling_number_animations_summary_on">Níl uimhreacha rollta beoite</string>
|
<string name="revanced_disable_rolling_number_animations_summary_on">Ní bhíonn uimhreacha rollta beoite</string>
|
||||||
<string name="revanced_disable_rolling_number_animations_summary_off">Tá uimhreacha rollta beoite</string>
|
<string name="revanced_disable_rolling_number_animations_summary_off">Tá uimhreacha rollta beoite</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.seekbar.hideSeekbarPatch">
|
<patch id="layout.hide.seekbar.hideSeekbarPatch">
|
||||||
@@ -840,9 +840,9 @@ Chun roghchlár an rian fuaime a thaispeáint, athraigh 'Sruthanna físeáin bhr
|
|||||||
<string name="revanced_hide_seekbar_summary_on">Tá barra cuardaigh seinnteoir físe i bhfolach</string>
|
<string name="revanced_hide_seekbar_summary_on">Tá barra cuardaigh seinnteoir físe i bhfolach</string>
|
||||||
<string name="revanced_hide_seekbar_summary_off">Taispeántar barra cuardaigh an t-imreoir físeán</string>
|
<string name="revanced_hide_seekbar_summary_off">Taispeántar barra cuardaigh an t-imreoir físeán</string>
|
||||||
<!-- Seekbar shown inside video thumbnails found the home/feed/search/history. The seekbar shows the prior watch progress when the video was last open. -->
|
<!-- Seekbar shown inside video thumbnails found the home/feed/search/history. The seekbar shows the prior watch progress when the video was last open. -->
|
||||||
<string name="revanced_hide_seekbar_thumbnail_title">Folaigh barra cuardaigh mionsamhlaí físeáin</string>
|
<string name="revanced_hide_seekbar_thumbnail_title">Folaigh barra cuardaigh mionsamhlacha físeáin</string>
|
||||||
<string name="revanced_hide_seekbar_thumbnail_summary_on">Tá barra cuardaigh mionsamhlaí físeáin i bhfolach</string>
|
<string name="revanced_hide_seekbar_thumbnail_summary_on">Tá barra cuardaigh mionsamhlacha físeáin i bhfolach</string>
|
||||||
<string name="revanced_hide_seekbar_thumbnail_summary_off">Tá barra cuardaigh mionsamhlaí físeáin taispeánta</string>
|
<string name="revanced_hide_seekbar_thumbnail_summary_off">Taispeántar barra cuardaigh mionsamhlacha físe</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.shorts.hideShortsComponentsResourcePatch">
|
<patch id="layout.hide.shorts.hideShortsComponentsResourcePatch">
|
||||||
<string name="revanced_shorts_player_screen_title">Shorts seinnteoir</string>
|
<string name="revanced_shorts_player_screen_title">Shorts seinnteoir</string>
|
||||||
@@ -852,91 +852,91 @@ Chun roghchlár an rian fuaime a thaispeáint, athraigh 'Sruthanna físeáin bhr
|
|||||||
<string name="revanced_hide_shorts_home_summary_on">I bhfolach sa fhotha Baile agus físeáin ghaolmhara</string>
|
<string name="revanced_hide_shorts_home_summary_on">I bhfolach sa fhotha Baile agus físeáin ghaolmhara</string>
|
||||||
<string name="revanced_hide_shorts_home_summary_off">Taispeánta sa fhotha Baile agus físeáin ghaolmhara</string>
|
<string name="revanced_hide_shorts_home_summary_off">Taispeánta sa fhotha Baile agus físeáin ghaolmhara</string>
|
||||||
<string name="revanced_hide_shorts_search_title">Folaigh Shorts i dtorthaí cuardaigh</string>
|
<string name="revanced_hide_shorts_search_title">Folaigh Shorts i dtorthaí cuardaigh</string>
|
||||||
<string name="revanced_hide_shorts_search_summary_on">Folaithe i dtorthaí cuardaigh</string>
|
<string name="revanced_hide_shorts_search_summary_on">Folaigh i dtorthaí cuardaigh</string>
|
||||||
<string name="revanced_hide_shorts_search_summary_off">Tá ar taispeáint sna torthaí cuardaigh</string>
|
<string name="revanced_hide_shorts_search_summary_off">Taispeáin i dtorthaí cuardaigh</string>
|
||||||
<!-- 'Subscriptions' should be translated using the same localized wording YouTube displays for the Subscriptions tab. -->
|
<!-- 'Subscriptions' should be translated using the same localized wording YouTube displays for the Subscriptions tab. -->
|
||||||
<string name="revanced_hide_shorts_subscriptions_title">Folaigh Shorts sa fhotha Liostálaí</string>
|
<string name="revanced_hide_shorts_subscriptions_title">Folaigh Shorts sa fhotha Liostálaí</string>
|
||||||
<string name="revanced_hide_shorts_subscriptions_summary_on">I bhfolach sa fhotha Liostálaí</string>
|
<string name="revanced_hide_shorts_subscriptions_summary_on">I bhfolach sa fhotha Liostálaí</string>
|
||||||
<string name="revanced_hide_shorts_subscriptions_summary_off">Taispeánta sa fhotha Liostálaí</string>
|
<string name="revanced_hide_shorts_subscriptions_summary_off">Taispeánta sa fhotha Liostálaí</string>
|
||||||
<string name="revanced_hide_shorts_history_title">Folaigh Shorts i stair féachana</string>
|
<string name="revanced_hide_shorts_history_title">Folaigh Shorts i stair féachana</string>
|
||||||
<string name="revanced_hide_shorts_history_summary_on">Faolithe sa stair féachana</string>
|
<string name="revanced_hide_shorts_history_summary_on">I bhfolach i stair féachana</string>
|
||||||
<string name="revanced_hide_shorts_history_summary_off">Taispeántar i stair féachana</string>
|
<string name="revanced_hide_shorts_history_summary_off">Taispeántar i stair féachana</string>
|
||||||
<string name="revanced_hide_shorts_super_thanks_button_title">Folaigh cnaipe \'Ceannaigh Super Thanks\'</string>
|
<string name="revanced_hide_shorts_super_thanks_button_title">Folaigh cnaipe Ceannaigh Super Thanks</string>
|
||||||
<string name="revanced_hide_shorts_super_thanks_button_summary_on">Cnaipe \'Ceannaigh Super Thanks\' i bhfolach</string>
|
<string name="revanced_hide_shorts_super_thanks_button_summary_on">Cnaipe Ceannaigh Super Thanks i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_super_thanks_button_summary_off">Cnaipe \'Ceannaigh Super Thanks\' taispeánta</string>
|
<string name="revanced_hide_shorts_super_thanks_button_summary_off">Taispeántar an cnaipe Ceannaigh Super Thanks</string>
|
||||||
<string name="revanced_hide_shorts_effect_button_title">Folaigh cnaipe éifeachta</string>
|
<string name="revanced_hide_shorts_effect_button_title">Folaigh cnaipe Éifeacht</string>
|
||||||
<string name="revanced_hide_shorts_effect_button_summary_on">Tá an cnaipe Éifeacht i bhfolach</string>
|
<string name="revanced_hide_shorts_effect_button_summary_on">Tá cnaipe Éifeacht i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_effect_button_summary_off">Tá an cnaipe Éifeacht taispeánta</string>
|
<string name="revanced_hide_shorts_effect_button_summary_off">Taispeántar cnaipe Éifeacht</string>
|
||||||
<string name="revanced_hide_shorts_green_screen_button_title">Folaigh cnaipe \'Scáileán glas\'</string>
|
<string name="revanced_hide_shorts_green_screen_button_title">Folaigh cnaipe Scáileáin Ghlais</string>
|
||||||
<string name="revanced_hide_shorts_green_screen_button_summary_on">Tá cnaipe an scáileáin glas i bhfolach</string>
|
<string name="revanced_hide_shorts_green_screen_button_summary_on">Tá cnaipe Scáileáin Ghlais i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_green_screen_button_summary_off">Taispeántar cnaipe an scáileáin glas</string>
|
<string name="revanced_hide_shorts_green_screen_button_summary_off">Taispeántar cnaipe Scáileáin Ghlais</string>
|
||||||
<string name="revanced_hide_shorts_hashtag_button_title">Folaigh an cnaipe hashtag</string>
|
<string name="revanced_hide_shorts_hashtag_button_title">Folaigh cnaipe Hashtag</string>
|
||||||
<string name="revanced_hide_shorts_hashtag_button_summary_on">Tá cnaipe hashtag i bhfolach</string>
|
<string name="revanced_hide_shorts_hashtag_button_summary_on">Tá cnaipe Hashtag i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_hashtag_button_summary_off">Taispeántar an cnaipe hashtag</string>
|
<string name="revanced_hide_shorts_hashtag_button_summary_off">Taispeántar cnaipe hashtag</string>
|
||||||
<!-- 'Join' should be translated using the same localized wording YouTube displays for the button. -->
|
<!-- 'Join' should be translated using the same localized wording YouTube displays for the button. -->
|
||||||
<string name="revanced_hide_shorts_join_button_title">Folaigh cnaipe \'Bí\'</string>
|
<string name="revanced_hide_shorts_join_button_title">Folaigh cnaipe Glac páirt</string>
|
||||||
<string name="revanced_hide_shorts_join_button_summary_on">Tá an cnaipe Bí i bhfolach</string>
|
<string name="revanced_hide_shorts_join_button_summary_on">Tá cnaipe Glac páirt i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_join_button_summary_off">Taispeántar an cnaipe Bí isteach</string>
|
<string name="revanced_hide_shorts_join_button_summary_off">Taispeántar cnaipe Glac páirt</string>
|
||||||
<string name="revanced_hide_shorts_location_label_title">Folaigh lipéad suímh</string>
|
<string name="revanced_hide_shorts_location_label_title">Folaigh lipéad suímh</string>
|
||||||
<string name="revanced_hide_shorts_location_label_summary_on">Tá lipéad suímh i bhfolach</string>
|
<string name="revanced_hide_shorts_location_label_summary_on">Tá lipéad suímh i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_location_label_summary_off">Taispeántar lipéad suímh</string>
|
<string name="revanced_hide_shorts_location_label_summary_off">Taispeántar lipéad suímh</string>
|
||||||
<string name="revanced_hide_shorts_new_posts_button_title">Folaigh cnaipe na bpostálacha nua</string>
|
<string name="revanced_hide_shorts_new_posts_button_title">Folaigh Cnaipe Poist nua</string>
|
||||||
<string name="revanced_hide_shorts_new_posts_button_summary_on">Tá cnaipe na bpostálacha nua i bhfolach</string>
|
<string name="revanced_hide_shorts_new_posts_button_summary_on">Tá cnaipe Poist nua i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_new_posts_button_summary_off">Taispeántar cnaipe na bpostálacha nua</string>
|
<string name="revanced_hide_shorts_new_posts_button_summary_off">Taispeántar cnaipe Poist nua</string>
|
||||||
<string name="revanced_hide_shorts_paused_overlay_buttons_title">Folaigh na cnaipí forleagan sosaithe</string>
|
<string name="revanced_hide_shorts_paused_overlay_buttons_title">Folaigh cnaipí forleagan ar sos</string>
|
||||||
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_on">Tá cnaipí forleagtha sos i bhfolach</string>
|
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_on">Tá cnaipí forleagan ar sos i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_off">Taispeántar cnaipí forleagtha sos</string>
|
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_off">Taispeántar cnaipí forleagan ar sos</string>
|
||||||
<string name="revanced_hide_shorts_preview_comment_title">Folaigh réamhamharc ar an nóta tráchta</string>
|
<string name="revanced_hide_shorts_preview_comment_title">Folaigh trácht réamhamhairc</string>
|
||||||
<string name="revanced_hide_shorts_preview_comment_summary_on">Tá réamhamharc ar an nóta tráchta i bhfolach</string>
|
<string name="revanced_hide_shorts_preview_comment_summary_on">Tá an trácht réamhamhairc i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_preview_comment_summary_off">Taispeántar réamhamharc ar an nóta tráchta</string>
|
<string name="revanced_hide_shorts_preview_comment_summary_off">Taispeántar réamhamharc tráchta</string>
|
||||||
<string name="revanced_hide_shorts_save_sound_button_title">Folaigh cnaipe \'Sábháil ceol\'</string>
|
<string name="revanced_hide_shorts_save_sound_button_title">Folaigh an cnaipe Sábháil Ceoil</string>
|
||||||
<string name="revanced_hide_shorts_save_sound_button_summary_on">Tá an cnaipe Sábháil ceoil i bhfolach</string>
|
<string name="revanced_hide_shorts_save_sound_button_summary_on">Tá an cnaipe sábháil ceoil i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_save_sound_button_summary_off">Taispeántar an cnaipe Sábháil ceoil</string>
|
<string name="revanced_hide_shorts_save_sound_button_summary_off">Taispeántar an cnaipe sábháil ceoil</string>
|
||||||
<string name="revanced_hide_shorts_search_suggestions_title">Folaigh moltaí cuardaigh</string>
|
<string name="revanced_hide_shorts_search_suggestions_title">Folaigh moltaí cuardaigh</string>
|
||||||
<string name="revanced_hide_shorts_search_suggestions_summary_on">Tá moltaí cuardaigh i bhfolach</string>
|
<string name="revanced_hide_shorts_search_suggestions_summary_on">Tá moltaí cuardaigh i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_search_suggestions_summary_off">Taispeántar moltaí cuardaigh</string>
|
<string name="revanced_hide_shorts_search_suggestions_summary_off">Taispeántar moltaí cuardaigh</string>
|
||||||
<string name="revanced_hide_shorts_shop_button_title">Folaigh cnaipe an Siopa</string>
|
<string name="revanced_hide_shorts_shop_button_title">Folaigh cnaipe Siopa</string>
|
||||||
<string name="revanced_hide_shorts_shop_button_summary_on">Tá cnaipe siopa i bhfolach</string>
|
<string name="revanced_hide_shorts_shop_button_summary_on">Tá cnaipe siopa i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_shop_button_summary_off">Taispeántar cnaipe siopa</string>
|
<string name="revanced_hide_shorts_shop_button_summary_off">Taispeántar cnaipe siopa</string>
|
||||||
<string name="revanced_hide_shorts_stickers_title">Folaigh greamáin</string>
|
<string name="revanced_hide_shorts_stickers_title">Folaigh greamáin</string>
|
||||||
<string name="revanced_hide_shorts_stickers_summary_on">Tá greamáin i bhfolach</string>
|
<string name="revanced_hide_shorts_stickers_summary_on">Tá greamáin i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_stickers_summary_off">Taispeántar greamáin</string>
|
<string name="revanced_hide_shorts_stickers_summary_off">Taispeántar greamáin</string>
|
||||||
<string name="revanced_hide_shorts_subscribe_button_title">Folaigh cnaipe \'Liostáil\'</string>
|
<string name="revanced_hide_shorts_subscribe_button_title">Folaigh cnaipe Liostáil</string>
|
||||||
<string name="revanced_hide_shorts_subscribe_button_summary_on">Tá cnaipe liostáil i bhfolach</string>
|
<string name="revanced_hide_shorts_subscribe_button_summary_on">Tá an cnaipe Liostáil i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_subscribe_button_summary_off">Taispeántar cnaipe liostáil</string>
|
<string name="revanced_hide_shorts_subscribe_button_summary_off">Taispeántar cnaipe Liostáil</string>
|
||||||
<string name="revanced_hide_shorts_tagged_products_title">Folaigh táirgí clibeáilte</string>
|
<string name="revanced_hide_shorts_tagged_products_title">Folaigh táirgí clibeáilte</string>
|
||||||
<string name="revanced_hide_shorts_tagged_products_summary_on">Tá táirgí clib i bhfolach</string>
|
<string name="revanced_hide_shorts_tagged_products_summary_on">Tá táirgí clibeáilte i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_tagged_products_summary_off">Taispeántar táirgí clibeáilte</string>
|
<string name="revanced_hide_shorts_tagged_products_summary_off">Taispeántar táirgí clibeáilte</string>
|
||||||
<string name="revanced_hide_shorts_upcoming_button_title">Folaigh cnaipe \'Le teacht\'</string>
|
<string name="revanced_hide_shorts_upcoming_button_title">Folaigh cnaipe Ag Teacht</string>
|
||||||
<string name="revanced_hide_shorts_upcoming_button_summary_on">Tá cnaipe atá le teacht i bhfolach</string>
|
<string name="revanced_hide_shorts_upcoming_button_summary_on">Tá cnaipe Ag Teacht i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_upcoming_button_summary_off">Taispeántar an cnaipe atá le teacht</string>
|
<string name="revanced_hide_shorts_upcoming_button_summary_off">Taispeántar an cnaipe Ag Teacht</string>
|
||||||
<string name="revanced_hide_shorts_use_sound_button_title">Folaigh an cnaipe \"Úsáid an fhuaim seo\"</string>
|
<string name="revanced_hide_shorts_use_sound_button_title">Folaigh Úsáid an cnaipe fuaime seo</string>
|
||||||
<string name="revanced_hide_shorts_use_sound_button_summary_on">Tá an cnaipe \"Úsáid an fhuaim seo\" folaithe</string>
|
<string name="revanced_hide_shorts_use_sound_button_summary_on">Tá an cnaipe Úsáid an fhuaim seo i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_use_sound_button_summary_off">Tá an cnaipe \"Úsáid an fhuaim seo\" taispeánta</string>
|
<string name="revanced_hide_shorts_use_sound_button_summary_off">Taispeántar an cnaipe Úsáid an fhuaim seo</string>
|
||||||
<string name="revanced_hide_shorts_use_template_button_title">Folaigh an cnaipe Bain úsáid as an teimpléad seo</string>
|
<string name="revanced_hide_shorts_use_template_button_title">Folaigh an cnaipe Úsáid an teimpléad seo</string>
|
||||||
<string name="revanced_hide_shorts_use_template_button_summary_on">Tá an cnaipe \"Úsáid an teimpléad seo\" folaithe</string>
|
<string name="revanced_hide_shorts_use_template_button_summary_on">Tá an cnaipe Úsáid an teimpléid seo i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_use_template_button_summary_off">Taispeántar an cnaipe Bain úsáid as an teimpléad seo</string>
|
<string name="revanced_hide_shorts_use_template_button_summary_off">Taispeántar an cnaipe Úsáid an teimpléid seo</string>
|
||||||
<string name="revanced_hide_shorts_like_fountain_title">Folaigh an beochan fhoinse cnaipe Cosúil</string>
|
<string name="revanced_hide_shorts_like_fountain_title">Folaigh an cnaipe Is maith liom \'beochan tobair\'</string>
|
||||||
<string name="revanced_hide_shorts_like_fountain_summary_on">Cosúil le beochan tobair cnaipe i bhfolach</string>
|
<string name="revanced_hide_shorts_like_fountain_summary_on">Tá an cnaipe Is maith liom \'beochan tobair\' i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_like_fountain_summary_off">Taispeántar beochan tobair cnaipe cosúil le cnaipe</string>
|
<string name="revanced_hide_shorts_like_fountain_summary_off">Taispeántar an cnaipe Is maith liom \'beochan tobair\'</string>
|
||||||
<string name="revanced_hide_shorts_like_button_title">Folaigh cnaipe Cosúil</string>
|
<string name="revanced_hide_shorts_like_button_title">Folaigh cnaipe Is maith liom</string>
|
||||||
<string name="revanced_hide_shorts_like_button_summary_on">Tá an cnaipe Cosúil i bhfolach</string>
|
<string name="revanced_hide_shorts_like_button_summary_on">Tá an cnaipe Is maith liom i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_like_button_summary_off">Taispeántar an cnaipe Cosúil</string>
|
<string name="revanced_hide_shorts_like_button_summary_off">Taispeántar an cnaipe Is maith liom</string>
|
||||||
<string name="revanced_hide_shorts_dislike_button_title">Folaigh cnaipe Mhíchlú</string>
|
<string name="revanced_hide_shorts_dislike_button_title">Folaigh cnaipe Ní maith liom</string>
|
||||||
<string name="revanced_hide_shorts_dislike_button_summary_on">Taispeántar an cnaipe nach dtaitníonn leis</string>
|
<string name="revanced_hide_shorts_dislike_button_summary_on">Tá an cnaipe Ní maith liom i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_dislike_button_summary_off">Taispeántar an cnaipe nach dtaitníonn leis</string>
|
<string name="revanced_hide_shorts_dislike_button_summary_off">Taispeántar an cnaipe Ní maith liom</string>
|
||||||
<string name="revanced_hide_shorts_comments_button_title">Folaigh cnaipe na Tuairimí</string>
|
<string name="revanced_hide_shorts_comments_button_title">Folaigh cnaipe na Tuairimí</string>
|
||||||
<string name="revanced_hide_shorts_comments_button_summary_on">Tá an cnaipe tuairimí i bhfolach</string>
|
<string name="revanced_hide_shorts_comments_button_summary_on">Tá an cnaipe tuairimí i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_comments_button_summary_off">Taispeántar cnaipe tuairimí</string>
|
<string name="revanced_hide_shorts_comments_button_summary_off">Taispeántar cnaipe tuairimí</string>
|
||||||
<!-- 'Share' should be translated using the same localized wording YouTube displays for the button. -->
|
<!-- 'Share' should be translated using the same localized wording YouTube displays for the button. -->
|
||||||
<string name="revanced_hide_shorts_share_button_title">Folaigh cnaipe \'Roinn\'</string>
|
<string name="revanced_hide_shorts_share_button_title">Folaigh cnaipe Roinn</string>
|
||||||
<string name="revanced_hide_shorts_share_button_summary_on">Tá cnaipe Comhroinn i bhfolach</string>
|
<string name="revanced_hide_shorts_share_button_summary_on">Tá cnaipe Roinn i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_share_button_summary_off">Taispeántar an cnaipe Comhroinn</string>
|
<string name="revanced_hide_shorts_share_button_summary_off">Taispeántar an cnaipe Roinn</string>
|
||||||
<!-- 'Remix' should be translated using the same localized wording YouTube displays for the button. -->
|
<!-- 'Remix' should be translated using the same localized wording YouTube displays for the button. -->
|
||||||
<string name="revanced_hide_shorts_remix_button_title">Folaigh cnaipe an Athchóiriú</string>
|
<string name="revanced_hide_shorts_remix_button_title">Folaigh cnaipe Athmheasc</string>
|
||||||
<string name="revanced_hide_shorts_remix_button_summary_on">Tá cnaipe Remix i bhfolach</string>
|
<string name="revanced_hide_shorts_remix_button_summary_on">Tá cnaipe Athmheasc i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_remix_button_summary_off">Taispeántar cnaipe Remix</string>
|
<string name="revanced_hide_shorts_remix_button_summary_off">Taispeántar cnaipe Athmheasc</string>
|
||||||
<string name="revanced_hide_shorts_sound_button_title">Folaigh an cnaipe fuaime</string>
|
<string name="revanced_hide_shorts_sound_button_title">Folaigh cnaipe Fuaime</string>
|
||||||
<string name="revanced_hide_shorts_sound_button_summary_on">Tá cnaipe fuaime i bhfolach</string>
|
<string name="revanced_hide_shorts_sound_button_summary_on">Tá cnaipe fuaime i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_sound_button_summary_off">Taispeántar cnaipe fuaime</string>
|
<string name="revanced_hide_shorts_sound_button_summary_off">Taispeántar cnaipe fuaime</string>
|
||||||
<string name="revanced_hide_shorts_info_panel_title">Folaigh painéal faisnéise</string>
|
<string name="revanced_hide_shorts_info_panel_title">Folaigh painéal faisnéise</string>
|
||||||
@@ -947,29 +947,29 @@ Chun roghchlár an rian fuaime a thaispeáint, athraigh 'Sruthanna físeáin bhr
|
|||||||
<string name="revanced_hide_shorts_channel_bar_summary_off">Taispeántar barra cainéal</string>
|
<string name="revanced_hide_shorts_channel_bar_summary_off">Taispeántar barra cainéal</string>
|
||||||
<string name="revanced_hide_shorts_video_title_title">Folaigh teideal físeáin</string>
|
<string name="revanced_hide_shorts_video_title_title">Folaigh teideal físeáin</string>
|
||||||
<string name="revanced_hide_shorts_video_title_summary_on">Teideal físeáin i bhfolach</string>
|
<string name="revanced_hide_shorts_video_title_summary_on">Teideal físeáin i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_video_title_summary_off">Teideal físeáin taispeánta</string>
|
<string name="revanced_hide_shorts_video_title_summary_off">Taispeántar teideal físeáin</string>
|
||||||
<string name="revanced_hide_shorts_sound_metadata_label_title">Folaigh lipéad meiteashonraí fuaime</string>
|
<string name="revanced_hide_shorts_sound_metadata_label_title">Folaigh lipéad meiteashonraí fuaime</string>
|
||||||
<string name="revanced_hide_shorts_sound_metadata_label_summary_on">Lipéad meiteashonraí fuaime i bhfolach</string>
|
<string name="revanced_hide_shorts_sound_metadata_label_summary_on">Lipéad meiteashonraí fuaime i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_sound_metadata_label_summary_off">Lipéad meiteashonraí fuaime taispeánta</string>
|
<string name="revanced_hide_shorts_sound_metadata_label_summary_off">Taispeántar Lipéad meiteashonraí fuaime</string>
|
||||||
<string name="revanced_hide_shorts_full_video_link_label_title">Folaigh lipéad nasc físeáin</string>
|
<string name="revanced_hide_shorts_full_video_link_label_title">Folaigh lipéad nasc físeáin</string>
|
||||||
<string name="revanced_hide_shorts_full_video_link_label_summary_on">Tá lipéad nasc físe i bhfolach</string>
|
<string name="revanced_hide_shorts_full_video_link_label_summary_on">Tá lipéad nasc físeáin i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_full_video_link_label_summary_off">Taispeántar lipéad nasc físe</string>
|
<string name="revanced_hide_shorts_full_video_link_label_summary_off">Taispeántar lipéad nasc físeáin</string>
|
||||||
<string name="revanced_hide_shorts_navigation_bar_title">Folaigh barra nascleanúna</string>
|
<string name="revanced_hide_shorts_navigation_bar_title">Folaigh barra nascleanúna</string>
|
||||||
<string name="revanced_hide_shorts_navigation_bar_summary_on">Tá barra nascleanúna i bhfolach</string>
|
<string name="revanced_hide_shorts_navigation_bar_summary_on">Tá barra nascleanúna i bhfolach</string>
|
||||||
<string name="revanced_hide_shorts_navigation_bar_summary_off">Taispeántar barra nascleanúna</string>
|
<string name="revanced_hide_shorts_navigation_bar_summary_off">Taispeántar barra nascleanúna</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||||
<string name="revanced_end_screen_suggested_video_title">Folaigh físeán molta deireadh scáileáin</string>
|
<string name="revanced_end_screen_suggested_video_title">Folaigh físeán molta deireadh scáileáin</string>
|
||||||
<string name="revanced_end_screen_suggested_video_summary_on">"Folaítear físeán molta deireadh scáileáin nuair a bhíonn an uathshein múchta
|
<string name="revanced_end_screen_suggested_video_summary_on">"Bíonn an físeán molta don scáileán deiridh i bhfolach nuair a bhíonn an t-uathsheinm múchta
|
||||||
|
|
||||||
Is féidir an uathshein a athrú i socruithe YouTube:
|
Is féidir an t-uathsheinm a athrú i socruithe YouTube:
|
||||||
Socruithe → Athsheinm → Uathshein físeán eile"</string>
|
Socruithe → Athsheinm → Uathsheinm an chéad fhí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">
|
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||||
<string name="revanced_hide_related_videos_overlay_title">Folaigh forleagan físeáin ghaolmhara</string>
|
<string name="revanced_hide_related_videos_overlay_title">Folaigh forleagan físeáin ghaolmhara</string>
|
||||||
<string name="revanced_hide_related_videos_overlay_summary_on">Forleagan físeáin ghaolmhara i scáileán iomlán i bhfolach</string>
|
<string name="revanced_hide_related_videos_overlay_summary_on">Tá forleagan físeáin ghaolmhara i lánscáileán i bhfolach</string>
|
||||||
<string name="revanced_hide_related_videos_overlay_summary_off">Forleagan físeáin ghaolmhara i scáileán iomlán taispeánta</string>
|
<string name="revanced_hide_related_videos_overlay_summary_off">Taispeántar forleagan físeáin ghaolmhara i lánscáileán</string>
|
||||||
</patch>
|
</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>
|
||||||
@@ -977,85 +977,85 @@ Socruithe → Athsheinm → Uathshein físeán eile"</string>
|
|||||||
<string name="revanced_hide_timestamp_summary_off">Taispeántar stampa ama</string>
|
<string name="revanced_hide_timestamp_summary_off">Taispeántar stampa ama</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||||
<string name="revanced_hide_player_popup_panels_title">Folaigh painéil aníos imreoir</string>
|
<string name="revanced_hide_player_popup_panels_title">Folaigh painéil preab aníos imreoir</string>
|
||||||
<string name="revanced_hide_player_popup_panels_summary_on">Tá painéil aníos imreoirí i bhfolach</string>
|
<string name="revanced_hide_player_popup_panels_summary_on">Tá painéil preab aníos imreoir i bhfolach</string>
|
||||||
<string name="revanced_hide_player_popup_panels_summary_off">Taispeántar painéil aníos imreoirí</string>
|
<string name="revanced_hide_player_popup_panels_summary_off">Taispeántar painéil preab aníos imreoir</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.player.fullscreen.exitFullscreenPatch">
|
<patch id="layout.player.fullscreen.exitFullscreenPatch">
|
||||||
<string name="revanced_exit_fullscreen_title">Baint á âmód éadaéin iomlán lán iomlán ar deireadh na físe</string>
|
<string name="revanced_exit_fullscreen_title">Scoir an mód lánscáileáin ag deireadh an fhíseáin</string>
|
||||||
<string name="revanced_exit_fullscreen_entry_1">Déchumasaithe</string>
|
<string name="revanced_exit_fullscreen_entry_1">Díchumasaithe</string>
|
||||||
<string name="revanced_exit_fullscreen_entry_2">Portait</string>
|
<string name="revanced_exit_fullscreen_entry_2">Portráid</string>
|
||||||
<string name="revanced_exit_fullscreen_entry_3">Téacscaoileadh</string>
|
<string name="revanced_exit_fullscreen_entry_3">Tírdhreach</string>
|
||||||
<string name="revanced_exit_fullscreen_entry_4">Portait agus téacscaoileadh</string>
|
<string name="revanced_exit_fullscreen_entry_4">Portráid agus tírdhreach</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
<patch id="layout.player.fullscreen.openVideosFullscreen">
|
||||||
<string name="revanced_open_videos_fullscreen_portrait_title">Oscail físeáin i módh scáileáin iomláin portráit</string>
|
<string name="revanced_open_videos_fullscreen_portrait_title">Oscail físeáin i bportráid lánscáileáin</string>
|
||||||
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Osclaítear físeáin i scáileán iomlán</string>
|
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Osclaítear físeáin i mód lánscáileáin</string>
|
||||||
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Ní osclaítear físeáin i scáileán iomlán</string>
|
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Ní osclaítear físeáin i mód lánscáileáin</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
|
||||||
<string name="revanced_player_overlay_opacity_title">Trédhearcacht forleagtha an imreoir</string>
|
<string name="revanced_player_overlay_opacity_title">Teimhneacht fhorleagan imreora</string>
|
||||||
<string name="revanced_player_overlay_opacity_summary">Luach trédhearcachta idir 0-100, áit a bhfuil 0 trédhearcach</string>
|
<string name="revanced_player_overlay_opacity_summary">Luach teimhneachta idir 0-100, áit a seasann 0 do thrédhearcacht</string>
|
||||||
<string name="revanced_player_overlay_opacity_invalid_toast">Caithfidh trédhearcacht forleagtha imreoirí a bheith idir 0-100</string>
|
<string name="revanced_player_overlay_opacity_invalid_toast">Teimhneacht fhorleagan an imreora idir 0-100</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.returnyoutubedislike.returnYouTubeDislikePatch">
|
<patch id="layout.returnyoutubedislike.returnYouTubeDislikePatch">
|
||||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||||
<string name="revanced_ryd_failure_connection_timeout">Ní dtaitníonn sé ar fáil go sealadach (API amuigh amach)</string>
|
<string name="revanced_ryd_failure_connection_timeout">Níl dí-mhaith ar fáil faoi láthair (API am istigh)</string>
|
||||||
<string name="revanced_ryd_failure_connection_status_code">Ní dtaitníonn sé ar fáil (stádas %d)</string>
|
<string name="revanced_ryd_failure_connection_status_code">Níl \'Ní maith liom\' ar fáil (stádas %d)</string>
|
||||||
<string name="revanced_ryd_failure_client_rate_limit_requested">Níl easaontais ar fáil (teorainn API an chliaint)</string>
|
<string name="revanced_ryd_failure_client_rate_limit_requested">Níl \'Ní maith liom\' ar fáil (teorainn API cliaint)</string>
|
||||||
<string name="revanced_ryd_failure_generic">Ní dtaitníonn sé ar fáil (%s)</string>
|
<string name="revanced_ryd_failure_generic">Níl \'Ní maith liom\' ar fáil (%s)</string>
|
||||||
<!-- Toast shown if the user enables RYD while a video is opened, and then tries to vote for the video. -->
|
<!-- Toast shown if the user enables RYD while a video is opened, and then tries to vote for the video. -->
|
||||||
<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 vótáil trí 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 an úinéir</string>
|
||||||
<string name="revanced_ryd_enabled_summary_on">Taispeántar rudaí nach dtaitníonn leo</string>
|
<string name="revanced_ryd_enabled_summary_on">Taispeántar \'Ní maith liom\'</string>
|
||||||
<string name="revanced_ryd_enabled_summary_off">Ní thaispeántar nach dtaitníonn leat</string>
|
<string name="revanced_ryd_enabled_summary_off">Ní thaispeántar \'Ní maith liom\'</string>
|
||||||
<string name="revanced_ryd_shorts_title">Taispeáin neamhthaitníonn ar Shorts</string>
|
<string name="revanced_ryd_shorts_title">Taispeáin \'ní maith liom\' ar Shorts</string>
|
||||||
<string name="revanced_ryd_shorts_summary_on">"Taispeántar easaontais ar Shorts
|
<string name="revanced_ryd_shorts_summary_on">"Taispeántar 'Ní thaitníonn' ar Shorts
|
||||||
|
|
||||||
Srianadh: Bíodh easaontais gan teacht ar taispeáint sa mhodh incognito"</string>
|
Teorainn: B’fhéidir nach dtaispeánfar 'Ní thaitníonn' i mód 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 \'Ní maith liom\' ar Shorts</string>
|
||||||
<string name="revanced_ryd_dislike_percentage_title">Ní dtaitníonn mar chéatadán</string>
|
<string name="revanced_ryd_dislike_percentage_title">\'Ní maith liom\' mar chéatadán</string>
|
||||||
<string name="revanced_ryd_dislike_percentage_summary_on">Taispeántar easaontais mar chéatadán</string>
|
<string name="revanced_ryd_dislike_percentage_summary_on">Taispeántar \'Ní thaitníonn\' mar chéatadán</string>
|
||||||
<string name="revanced_ryd_dislike_percentage_summary_off">Taispeántar easaontais mar uimhir</string>
|
<string name="revanced_ryd_dislike_percentage_summary_off">Taispeántar \'Ní maith liom\' mar uimhir</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'. -->
|
||||||
<string name="revanced_ryd_compact_layout_title">Cnaipe Cosúil dlúth</string>
|
<string name="revanced_ryd_compact_layout_title">Cnaipe dlúth \'Is maith liom\'</string>
|
||||||
<string name="revanced_ryd_compact_layout_summary_on">Cosúil le cnaipe stíleáilte don leithead íosta</string>
|
<string name="revanced_ryd_compact_layout_summary_on">Cnaipe \'Is maith liom\' stílithe don leithead íosta</string>
|
||||||
<string name="revanced_ryd_compact_layout_summary_off">Cosúil le cnaipe stíleáilte don chuma is fearr</string>
|
<string name="revanced_ryd_compact_layout_summary_off">Cnaipe \'Is maith liom\' stílithe le haghaidh cuma is fearr</string>
|
||||||
<string name="revanced_ryd_estimated_like_title">Taispeáin na rudaí is maith leis</string>
|
<string name="revanced_ryd_estimated_like_title">Taispeáin \'is maith liom\' measta</string>
|
||||||
<string name="revanced_ryd_estimated_like_summary_on">Taispeánann físeáin le maith díchumasaithe comhaireamh measta maith</string>
|
<string name="revanced_ryd_estimated_like_summary_on">Taispeánann físeáin a bhfuil \'is maith liom\' díchumasaithe iontu líon measta is maith leo</string>
|
||||||
<string name="revanced_ryd_estimated_like_summary_off">Ní thaispeántar maith measta</string>
|
<string name="revanced_ryd_estimated_like_summary_off">Ní thaispeántar líon na \'is maith leis\' measta</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_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ósta mura bhfuil Return YouTube Dislike ar fáil</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">Cuirtear sonraí ar fáil ag an Return YouTube Dislike API. Beartaíonn anseo le tuilleadh eolais a fháil</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 ReturnYouTubeDislike an ghléis seo</string>
|
||||||
<string name="revanced_ryd_statistics_getFetchCallResponseTimeAverage_title">Am freagartha API, meán</string>
|
<string name="revanced_ryd_statistics_getFetchCallResponseTimeAverage_title">Am freagartha API, meán</string>
|
||||||
<string name="revanced_ryd_statistics_getFetchCallResponseTimeMin_title">Am freagartha API, íosmhéid</string>
|
<string name="revanced_ryd_statistics_getFetchCallResponseTimeMin_title">Am freagartha API, íosmhéid</string>
|
||||||
<string name="revanced_ryd_statistics_getFetchCallResponseTimeMax_title">Am freagartha API, uasmhéid</string>
|
<string name="revanced_ryd_statistics_getFetchCallResponseTimeMax_title">Am freagartha API, uasmhéid</string>
|
||||||
<string name="revanced_ryd_statistics_getFetchCallResponseTimeLast_title">Am freagartha API, físeán deireanach</string>
|
<string name="revanced_ryd_statistics_getFetchCallResponseTimeLast_title">Am freagartha API, físeán deireanach</string>
|
||||||
<string name="revanced_ryd_statistics_getFetchCallResponseTimeLast_rate_limit_summary">Ní dtaitníonn sé ar fáil go sealadach - Teorainn ráta API cliant i bhfeidhm</string>
|
<string name="revanced_ryd_statistics_getFetchCallResponseTimeLast_rate_limit_summary">Ní dtaitníonn sé ar fáil go sealadach - Teorainn ráta API cliant i bhfeidhm</string>
|
||||||
<string name="revanced_ryd_statistics_getFetchCallCount_title">Vótaí a fháil API, líon na nglaonna</string>
|
<string name="revanced_ryd_statistics_getFetchCallCount_title">Vótaí aisghabhála API, líon na nglaonna</string>
|
||||||
<string name="revanced_ryd_statistics_getFetchCallCount_zero_summary">Ní dhéantar aon ghlaonna líonra</string>
|
<string name="revanced_ryd_statistics_getFetchCallCount_zero_summary">Níor rinneadh aon ghlaonna líonra</string>
|
||||||
<string name="revanced_ryd_statistics_getFetchCallCount_non_zero_summary">%d glaonna líonra déanta</string>
|
<string name="revanced_ryd_statistics_getFetchCallCount_non_zero_summary">%d glaonna líonra déanta</string>
|
||||||
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_title">Vótaí a fháil API, líon na n-imeachtaí ama</string>
|
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_title">Vótaí aisghabhála API, líon na sosanna ama</string>
|
||||||
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_zero_summary">Níor aimsíodh aon ghlaonna líonra</string>
|
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_zero_summary">Níl aon ghlaonna líonra imithe in éag</string>
|
||||||
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_non_zero_summary">Chuaigh %d glaoch líonra thar am</string>
|
<string name="revanced_ryd_statistics_getFetchCallNumberOfFailures_non_zero_summary">%d glaonna líonra imithe thar an am</string>
|
||||||
<string name="revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_title">Teorainneacha ráta cliant API</string>
|
<string name="revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_title">Teorainneacha ráta cliant API</string>
|
||||||
<string name="revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_zero_summary">Níor tharla aon teorainneacha rátaí cliant</string>
|
<string name="revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_zero_summary">Níor aimsíodh aon teorainneacha ráta cliant</string>
|
||||||
<string name="revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_non_zero_summary">Bhí teorainn ráta cliant ag teacht %d uair</string>
|
<string name="revanced_ryd_statistics_getNumberOfRateLimitRequestsEncountered_non_zero_summary">Teorainn ráta cliant a bhíonn le fáil %d uair</string>
|
||||||
<string name="revanced_ryd_statistics_millisecond_text">%d milleasoicind</string>
|
<string name="revanced_ryd_statistics_millisecond_text">%d milleasoicind</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.searchbar.wideSearchbarPatch">
|
<patch id="layout.searchbar.wideSearchbarPatch">
|
||||||
<string name="revanced_wide_searchbar_title">Cumasaigh barra cuardaigh leathan</string>
|
<string name="revanced_wide_searchbar_title">Cumasaigh barra cuardaigh leathan</string>
|
||||||
<string name="revanced_wide_searchbar_summary_on">Tá barra cuardaigh leathan cumasaithe</string>
|
<string name="revanced_wide_searchbar_summary_on">Tá barra cuardaigh leathan cumasaithe</string>
|
||||||
<string name="revanced_wide_searchbar_summary_off">Tá barra cuardaigh leathan míchumasaithe</string>
|
<string name="revanced_wide_searchbar_summary_off">Tá an barra cuardaigh leathan díchumasaithe</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.seekbar.seekbarThumbnailsPatch">
|
<patch id="layout.seekbar.seekbarThumbnailsPatch">
|
||||||
<string name="revanced_seekbar_thumbnails_high_quality_title">Cumasaigh mionsamhlacha ardchaighdeáin</string>
|
<string name="revanced_seekbar_thumbnails_high_quality_title">Cumasaigh mionsamhlacha ardchaighdeáin</string>
|
||||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_on">Tá mionsamhlacha Seekbar ardchaighdeáin</string>
|
<string name="revanced_seekbar_thumbnails_high_quality_summary_on">Tá mionsamhlacha Seekbar ardchaighdeáin</string>
|
||||||
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">Tá mionsamhlacha barra cuardaigh de chaighdeán meánach</string>
|
<string name="revanced_seekbar_thumbnails_high_quality_summary_off">Tá mionsamhlacha Seekbar ar chaighdeán meánach</string>
|
||||||
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"Cuirfidh sé seo na miontaispeántais ar ais ar shruth beo nach bhfuil miontaispeántais cuardaigh acu.
|
<string name="revanced_seekbar_thumbnails_high_quality_dialog_message">"Cuirfidh sé seo na miontaispeántais ar ais ar shruth beo nach bhfuil miontaispeántais cuardaigh acu.
|
||||||
|
|
||||||
Úsáidfidh miontaispeántais cuardaigh an caighdeán céanna leis an bhfíseán reatha.
|
Úsáidfidh miontaispeántais cuardaigh an caighdeán céanna leis an bhfíseán reatha.
|
||||||
@@ -1069,65 +1069,65 @@ Oibríonn an ghné seo is fearr le caighdeán físeáin 720p nó níos ísle agu
|
|||||||
<string name="revanced_sb_enable_sb">Cumasaigh SponsorBlock</string>
|
<string name="revanced_sb_enable_sb">Cumasaigh SponsorBlock</string>
|
||||||
<string name="revanced_sb_enable_sb_sum">Is córas sruthaíodh ó lucht an phobail é SponsorBlock le haghaidh codanna do-áisiúla físeán YouTube a leag thar n-ais</string>
|
<string name="revanced_sb_enable_sb_sum">Is córas sruthaíodh ó lucht an phobail é SponsorBlock le haghaidh codanna do-áisiúla físeán YouTube a leag thar n-ais</string>
|
||||||
<string name="revanced_sb_appearance_category">Dealramh</string>
|
<string name="revanced_sb_appearance_category">Dealramh</string>
|
||||||
<string name="revanced_sb_enable_voting">Taispeáin cnaipe vótá</string>
|
<string name="revanced_sb_enable_voting">Taispeáin an cnaipe vótála</string>
|
||||||
<string name="revanced_sb_enable_voting_sum_on">Taispeántar cnaipe vótála deigh</string>
|
<string name="revanced_sb_enable_voting_sum_on">Taispeántar cnaipe vótála deighleog</string>
|
||||||
<string name="revanced_sb_enable_voting_sum_off">Ní thaispeántar cnaipe vótála deireadh</string>
|
<string name="revanced_sb_enable_voting_sum_off">Ní thaispeántar cnaipe vótála deighleog</string>
|
||||||
<string name="revanced_sb_square_layout">Úsáid leagan amach cearnógach</string>
|
<string name="revanced_sb_square_layout">Úsáid leagan amach cearnach</string>
|
||||||
<string name="revanced_sb_square_layout_sum_on">Tá cnaipí agus rialtáin cearnach</string>
|
<string name="revanced_sb_square_layout_sum_on">Tá cnaipí agus rialtáin cearnach</string>
|
||||||
<string name="revanced_sb_square_layout_sum_off">Tá cnaipí agus rialuithe cruinn</string>
|
<string name="revanced_sb_square_layout_sum_off">Tá cnaipí agus rialuithe cruinn</string>
|
||||||
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title'. -->
|
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title'. -->
|
||||||
<string name="revanced_sb_enable_compact_skip_button">Úsáid cnaipe Dlúthscipeála</string>
|
<string name="revanced_sb_enable_compact_skip_button">Úsáid an cnaipe Scipeáil dlúth</string>
|
||||||
<string name="revanced_sb_enable_compact_skip_button_sum_on">Sceip cnaipe stíleáilte don leithead íosta</string>
|
<string name="revanced_sb_enable_compact_skip_button_sum_on">Cnaipe Scipeáil stílithe don leithead íosta</string>
|
||||||
<string name="revanced_sb_enable_compact_skip_button_sum_off">Sceip cnaipe stíleáilte chun an chuma is fearr</string>
|
<string name="revanced_sb_enable_compact_skip_button_sum_off">Cnaipe Scipeáil stílithe le haghaidh an chuma is fearr</string>
|
||||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Folaigh cnaipe Scipeála go huathoibríoch</string>
|
<string name="revanced_sb_enable_auto_hide_skip_segment_button">Folaigh an cnaipe Scipeáil go huathoibríoch</string>
|
||||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Folaíonn cnaipe scipeáil tar éis cúpla soicindí</string>
|
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">Folaítear an cnaipe Scipeáil tar éis cúpla soicind</string>
|
||||||
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Taispeántar cnaipe Scipeála don deighleog iomlán</string>
|
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">Taispeántar an cnaipe Scipeáil don deighleog iomlán</string>
|
||||||
<string name="revanced_sb_auto_hide_skip_button_duration">Fad an chnaipe scipeála</string>
|
<string name="revanced_sb_auto_hide_skip_button_duration">Fad an chnaipe Scipeáil</string>
|
||||||
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Cá fhad chun na cnaipí scipeála agus scipeála go dtí an aibhsigh a thaispeáint sula bhfolóidh siad go huathoibríoch</string>
|
<string name="revanced_sb_auto_hide_skip_button_duration_sum">Cá fhad a thaispeánfar na cnaipí scipeáil agus scipeáil chun aibhsiú sula bhfolachar go huathoibríoch iad</string>
|
||||||
<string name="revanced_sb_general_skiptoast">Taispeáin teast cealaigh scipeála</string>
|
<string name="revanced_sb_general_skiptoast">Taispeáin an tósta cealaithe scipeáilte</string>
|
||||||
<string name="revanced_sb_general_skiptoast_sum_on">Taispeántar teast nuair a scipeáiltear deighleog go huathoibríoch. Tapáil an fógra teast chun an scipeáil a chealú</string>
|
<string name="revanced_sb_general_skiptoast_sum_on">Taispeántar tósta nuair a scipeáiltear deighleog go huathoibríoch. Tapáil an fógra tósta chun an scipeáil a chealú</string>
|
||||||
<string name="revanced_sb_general_skiptoast_sum_off">Ní thaispeántar an tóstas</string>
|
<string name="revanced_sb_general_skiptoast_sum_off">Ní thaispeántar tósta</string>
|
||||||
<string name="revanced_sb_toast_on_skip_duration">Fad an tóstais scipeála</string>
|
<string name="revanced_sb_toast_on_skip_duration">Scipeáil fad an tósta</string>
|
||||||
<string name="revanced_sb_toast_on_skip_duration_sum">Cá fhad chun an fógra dísciption a thaispeáint</string>
|
<string name="revanced_sb_toast_on_skip_duration_sum">Cá fhad a thaispeántar an tósta cealaithe scipeála</string>
|
||||||
<string name="revanced_sb_duration_1s">1 soicind</string>
|
<string name="revanced_sb_duration_1s">1 soicind</string>
|
||||||
<string name="revanced_sb_duration_2s">2 soicind</string>
|
<string name="revanced_sb_duration_2s">2 soicind</string>
|
||||||
<string name="revanced_sb_duration_3s">3 soicind</string>
|
<string name="revanced_sb_duration_3s">3 soicind</string>
|
||||||
<string name="revanced_sb_duration_4s">4 soicind</string>
|
<string name="revanced_sb_duration_4s">4 soicind</string>
|
||||||
<string name="revanced_sb_duration_5s">5 soicind</string>
|
<string name="revanced_sb_duration_5s">5 soicind</string>
|
||||||
<string name="revanced_sb_duration_6s">6 soicind</string>
|
<string name="revanced_sb_duration_6s">6 soicind</string>
|
||||||
<string name="revanced_sb_duration_7s">7 soicindí</string>
|
<string name="revanced_sb_duration_7s">7 soicind</string>
|
||||||
<string name="revanced_sb_duration_8s">8 soicindí</string>
|
<string name="revanced_sb_duration_8s">8 soicind</string>
|
||||||
<string name="revanced_sb_duration_9s">9 soicindí</string>
|
<string name="revanced_sb_duration_9s">9 soicind</string>
|
||||||
<string name="revanced_sb_duration_10s">10 soicindí</string>
|
<string name="revanced_sb_duration_10s">10 soicind</string>
|
||||||
<string name="revanced_sb_general_time_without">Taispeáin fad físeáin gan codanna</string>
|
<string name="revanced_sb_general_time_without">Taispeáin fad an fhíseáin gan deighleog</string>
|
||||||
<string name="revanced_sb_general_time_without_sum_on">Taispeántar fad an fhíseáin lúide na deighleoga uile ar an mbarra cuardaigh</string>
|
<string name="revanced_sb_general_time_without_sum_on">Taispeántar fad an fhíseáin lúide na deighleoga uile ar an mbarra cuardaigh</string>
|
||||||
<string name="revanced_sb_general_time_without_sum_off">Taispeántar fad físe iomlán</string>
|
<string name="revanced_sb_general_time_without_sum_off">Taispeántar fad físe iomlán</string>
|
||||||
<string name="revanced_sb_create_segment_category">Deighleoga nua a chruthú</string>
|
<string name="revanced_sb_create_segment_category">Deighleoga nua a chruthú</string>
|
||||||
<string name="revanced_sb_enable_create_segment">Taispeáin cnaipe Cruthaigh deighleog nua</string>
|
<string name="revanced_sb_enable_create_segment">Taispeáin cnaipe Cruthaigh deighleog nua</string>
|
||||||
<string name="revanced_sb_enable_create_segment_sum_on">Taispeántar cnaipe deighleog nua Cruthaigh</string>
|
<string name="revanced_sb_enable_create_segment_sum_on">Taispeántar an cnaipe cruthaigh deighleog nua</string>
|
||||||
<string name="revanced_sb_enable_create_segment_sum_off">Ní thaispeántar cnaipe deighleog nua Cruthaigh</string>
|
<string name="revanced_sb_enable_create_segment_sum_off">Ní thaispeántar an cnaipe cruthaigh deighleog nua</string>
|
||||||
<string name="revanced_sb_general_adjusting">Coigeartaigh céim deighleog nua</string>
|
<string name="revanced_sb_general_adjusting">Coigeartaigh céim deighleog nua</string>
|
||||||
<string name="revanced_sb_general_adjusting_sum">Líon na milleasoicind a ghluaiseann na cnaipí coigeartaithe ama nuair a bhíonn teascáin nua á gcruthú</string>
|
<string name="revanced_sb_general_adjusting_sum">Líon na milleasoicind a ghluaiseann na cnaipí coigeartaithe ama nuair a bhíonn teascáin nua á gcruthú</string>
|
||||||
<string name="revanced_sb_general_adjusting_invalid">Caithfidh luach a bheith ina uimhir dheimhneach</string>
|
<string name="revanced_sb_general_adjusting_invalid">Caithfidh luach a bheith ina uimhir dheimhneach</string>
|
||||||
<string name="revanced_sb_guidelines_preference_title">Féach treoirlín</string>
|
<string name="revanced_sb_guidelines_preference_title">Féach ar threoirlínte</string>
|
||||||
<string name="revanced_sb_guidelines_preference_sum">Tá rialacha agus leideanna i dtreoirlínte chun deighleoga nua</string>
|
<string name="revanced_sb_guidelines_preference_sum">Tá rialacha agus leideanna i dtreoirlínte chun deighleoga nua</string>
|
||||||
<string name="revanced_sb_guidelines_popup_title">Lean na treoirlínte</string>
|
<string name="revanced_sb_guidelines_popup_title">Lean na treoirlínte</string>
|
||||||
<string name="revanced_sb_guidelines_popup_content">Léigh na treoirlínte SponsorBlock sula gcruthóidh tú</string>
|
<string name="revanced_sb_guidelines_popup_content">Léigh treoirlínte SponsorBlock sula gcruthaíonn tú deighleoga nua</string>
|
||||||
<string name="revanced_sb_guidelines_popup_already_read">Léigh cheana féin</string>
|
<string name="revanced_sb_guidelines_popup_already_read">Léigh cheana féin</string>
|
||||||
<string name="revanced_sb_guidelines_popup_open">Taispeáin dom</string>
|
<string name="revanced_sb_guidelines_popup_open">Taispeáin dom</string>
|
||||||
<string name="revanced_sb_general">Ginearálta</string>
|
<string name="revanced_sb_general">Ginearálta</string>
|
||||||
<string name="revanced_sb_toast_on_connection_error">Taispeáin tósta mura bhfuil API ar fáil</string>
|
<string name="revanced_sb_toast_on_connection_error">Taispeáin tósta mura bhfuil API ar fáil</string>
|
||||||
<string name="revanced_sb_toast_on_connection_error_sum_on">Taispeántar tósta mura bhfuil SponsorBlock ar fáil</string>
|
<string name="revanced_sb_toast_on_connection_error_sum_on">Taispeántar tósta mura bhfuil SponsorBlock ar fáil</string>
|
||||||
<string name="revanced_sb_toast_on_connection_error_sum_off">Ní thaispeántar tósta mura bhfuil SponsorBlock ar fáil</string>
|
<string name="revanced_sb_toast_on_connection_error_sum_off">Ní thaispeántar tósta mura bhfuil SponsorBlock ar fáil</string>
|
||||||
<string name="revanced_sb_general_skipcount">Cumasaigh scip-rianú comhairimh</string>
|
<string name="revanced_sb_general_skipcount">Cumasaigh rianú comhaireamh scipeála</string>
|
||||||
<string name="revanced_sb_general_skipcount_sum_on">Ligeann sí do chlár ceannairí SponsorBlock cá mhéad ama a shábháiltear. Seoltar teachtaireacht chuig an gclár ceannairí gach uair a fhágtar mírlíne</string>
|
<string name="revanced_sb_general_skipcount_sum_on">Cuireann sé ar an eolas é don chlár ceannaireachta SponsorBlock cé mhéad ama a shábháiltear. Seoltar teachtaireacht chuig an gclár ceannaireachta gach uair a scipeáiltear deighleog</string>
|
||||||
<string name="revanced_sb_general_skipcount_sum_off">Níl rianú comhaireamh scipeála cumasaithe</string>
|
<string name="revanced_sb_general_skipcount_sum_off">Níl rianú comhaireamh scipeála cumasaithe</string>
|
||||||
<string name="revanced_sb_general_min_duration">Fad íosta deighleog</string>
|
<string name="revanced_sb_general_min_duration">Fad íosta deighleog</string>
|
||||||
<string name="revanced_sb_general_min_duration_sum">Ní thaispeánfar ná ní scipeánfar deighleoga níos giorra ná an luach seo (i soicindí)</string>
|
<string name="revanced_sb_general_min_duration_sum">Ní thaispeánfar ná ní scipeánfar deighleoga níos giorra ná an luach seo (i soicindí)</string>
|
||||||
<string name="revanced_sb_general_min_duration_invalid">Fad ama neamhbhailí</string>
|
<string name="revanced_sb_general_min_duration_invalid">Fad ama neamhbhailí</string>
|
||||||
<string name="revanced_sb_general_uuid">Do id úsáideora príobháideach</string>
|
<string name="revanced_sb_general_uuid">D\'aitheantas úsáideora príobháideach</string>
|
||||||
<string name="revanced_sb_general_uuid_sum">Ba cheart é seo a choinneáil príobháideach. Is cosúil le pasfhocal é seo agus níor cheart é a roinnt le haon duine. Má tá sé seo ag duine, is féidir leo aithris a dhéanamh ort</string>
|
<string name="revanced_sb_general_uuid_sum">Ba cheart é seo a choinneáil príobháideach. Is cosúil le pasfhocal é seo agus níor cheart é a roinnt le haon duine. Má tá sé seo ag duine, is féidir leo aithris a dhéanamh ort</string>
|
||||||
<string name="revanced_sb_general_uuid_invalid">Caithfidh id úsáideora príobháideach a bheith 30 carachtar ar a laghad</string>
|
<string name="revanced_sb_general_uuid_invalid">Caithfidh Id príobháideach a bheith ≥30 carachtar</string>
|
||||||
<string name="revanced_sb_general_api_url">Athraigh URL API</string>
|
<string name="revanced_sb_general_api_url">Athraigh URL API</string>
|
||||||
<string name="revanced_sb_general_api_url_sum">An seoladh a úsáideann SponsorBlock chun glaonna a dhéanamh ar an bhfreastalaí</string>
|
<string name="revanced_sb_general_api_url_sum">An seoladh a úsáideann SponsorBlock chun glaonna a dhéanamh ar an bhfreastalaí</string>
|
||||||
<string name="revanced_sb_api_url_reset">Athshocrú URL API</string>
|
<string name="revanced_sb_api_url_reset">Athshocrú URL API</string>
|
||||||
@@ -1148,75 +1148,75 @@ Is cosúil le pasfhocal é do ID úsáideora agus níor cheart é a roinnt riamh
|
|||||||
<string name="revanced_sb_diff_segments">Athraigh iompar deighleog</string>
|
<string name="revanced_sb_diff_segments">Athraigh iompar deighleog</string>
|
||||||
<string name="revanced_sb_segments_sponsor">Urraitheoir</string>
|
<string name="revanced_sb_segments_sponsor">Urraitheoir</string>
|
||||||
<string name="revanced_sb_segments_sponsor_sum">Ardú céime íoctha, atreoruithe íoctha agus fógraí díreacha Ní le haghaidh féin-chur chun cinn nó tuairimí saor in aisce do chúisea/cruthaitheoirí/láithreáin ghréasáin agus táirgí is maith leo</string>
|
<string name="revanced_sb_segments_sponsor_sum">Ardú céime íoctha, atreoruithe íoctha agus fógraí díreacha Ní le haghaidh féin-chur chun cinn nó tuairimí saor in aisce do chúisea/cruthaitheoirí/láithreáin ghréasáin agus táirgí is maith leo</string>
|
||||||
<string name="revanced_sb_segments_selfpromo">Neamhíocta/Féin-Chur Chun Cinn</string>
|
<string name="revanced_sb_segments_selfpromo">Neamhíoctha/Féin-chur chun cinn</string>
|
||||||
<string name="revanced_sb_segments_selfpromo_sum">Cosúil le Fear gnótha ach amháin le haghaidh cur chun cinn neamhíoctha nó féin-thacaíochta. Áirítear roinntí faoi earraí, bronntanais, nó faisnéis faoi cé a oibrigh siad le chéile</string>
|
<string name="revanced_sb_segments_selfpromo_sum">Cosúil le hUrraitheoir ach amháin i gcás neamhíoctha nó féin-chur chun cinn. Áirítear leis rannóga faoi earraí, síntiúis nó faisnéis faoi cé leis ar chomhoibrigh siad</string>
|
||||||
<string name="revanced_sb_segments_interaction">Meabhrúchán Idirghníomhaíochta (Liostáil)</string>
|
<string name="revanced_sb_segments_interaction">Meabhrúchán Idirghníomhaíochta (Liostáil)</string>
|
||||||
<string name="revanced_sb_segments_interaction_sum">Meabhrúchán gairid ar mhaith leat, liostáil leo nó iad a leanúint i lár an ábhair. Má tá sé fada nó thart ar rud éigin ar leith, ba chóir é a chur chun cinn féin</string>
|
<string name="revanced_sb_segments_interaction_sum">Meabhrúchán gearr chun iad a thaitin, liostáil nó leanúint i lár ábhair. Más fada é nó má bhaineann sé le rud éigin ar leith, ba chóir é a bheith faoi fhéin-chur chun cinn ina ionad sin</string>
|
||||||
<string name="revanced_sb_segments_highlight">Aibhsigh</string>
|
<string name="revanced_sb_segments_highlight">Aibhsigh</string>
|
||||||
<string name="revanced_sb_segments_highlight_sum">An chuid den fhíseán atá ag cuardach mórchuid na ndaoine</string>
|
<string name="revanced_sb_segments_highlight_sum">An chuid den fhíseán atá ag cuardach mórchuid na ndaoine</string>
|
||||||
<string name="revanced_sb_segments_intro">Beochan Idirmheán/Intro</string>
|
<string name="revanced_sb_segments_intro">Beochan Eatramh / Réamhrá</string>
|
||||||
<string name="revanced_sb_segments_intro_sum">Eatraimh gan ábhar iarbhír. D\'fhéadfadh sé a bheith ina sos, fráma statach, nó beochan athrá. Ní chuimsíonn sé aistrithe ina bhfuil faisnéis</string>
|
<string name="revanced_sb_segments_intro_sum">Eatraimh gan ábhar iarbhír. D\'fhéadfadh sé a bheith ina sos, fráma statach, nó beochan athrá. Ní chuimsíonn sé aistrithe ina bhfuil faisnéis</string>
|
||||||
<string name="revanced_sb_segments_outro">Cártaí Deiridh / Creidiúintí</string>
|
<string name="revanced_sb_segments_outro">Cártaí Deiridh / Creidmheasanna</string>
|
||||||
<string name="revanced_sb_segments_outro_sum">Creidmheasanna nó nuair a thaispeántar na cártaí YouTube. Ní le haghaidh conclúidí le faisnéis</string>
|
<string name="revanced_sb_segments_outro_sum">Creidmheasanna nó nuair a thaispeántar na cártaí YouTube. Ní le haghaidh conclúidí le faisnéis</string>
|
||||||
<string name="revanced_sb_segments_hook">Hook / Beannachtaí</string>
|
<string name="revanced_sb_segments_hook">Crúca / Beannachtaí</string>
|
||||||
<string name="revanced_sb_segments_hook_sum">Leantóirí inste don fhíseán atá le teacht, beannachtaí agus slán. Ní chuimsíonn sé ailt a chuireann ábhar breise leis</string>
|
<string name="revanced_sb_segments_hook_sum">Leantóirí inste don fhíseán atá le teacht, beannachtaí agus slán. Ní chuimsíonn sé ailt a chuireann ábhar breise leis</string>
|
||||||
<string name="revanced_sb_segments_preview">Réamhamharc / Achoimre</string>
|
<string name="revanced_sb_segments_preview">Réamhamharc / Achoimre</string>
|
||||||
<string name="revanced_sb_segments_preview_sum">Bailiúchán gearrthóga a thaispeánann cad atá ag teacht suas nó cad a tharla san fhíseán nó i bhfíseáin eile de shraith, áit a ndéantar gach faisnéis arís eile in áit eile</string>
|
<string name="revanced_sb_segments_preview_sum">Bailiúchán gearrthóga a thaispeánann cad atá ag teacht suas nó cad a tharla san fhíseán nó i bhfíseáin eile de shraith, áit a ndéantar gach faisnéis arís eile in áit eile</string>
|
||||||
<string name="revanced_sb_segments_filler">Seachrán / Scéalta Grinn</string>
|
<string name="revanced_sb_segments_filler">Seachrán / Scéalta Grinn</string>
|
||||||
<string name="revanced_sb_segments_filler_sum">Radhairc nó scéalta grinn imeallacha nach gá chun príomhábhar an fhíseáin a thuiscint. Níor cheart go n-áireofaí anseo deighleoga a sholáthraíonn comhthéacs nó sonraí cúlra</string>
|
<string name="revanced_sb_segments_filler_sum">Radhairc nó scéalta grinn imeallacha nach gá chun príomhábhar an fhíseáin a thuiscint. Níor cheart go n-áireofaí anseo deighleoga a sholáthraíonn comhthéacs nó sonraí cúlra</string>
|
||||||
<string name="revanced_sb_segments_nomusic">Ceol: Rannóg Neamh-Cheoil</string>
|
<string name="revanced_sb_segments_nomusic">Ceol: Rannóg Neamh-Cheoil</string>
|
||||||
<string name="revanced_sb_segments_nomusic_sum">Le húsáid amháin i bhfíseáin ceoil. Rannóga d\'fhíseáin ceoil gan ceol, nach bhfuil clúdaithe ag catagóir eile cheana féin</string>
|
<string name="revanced_sb_segments_nomusic_sum">Le húsáid i bhfíseáin cheoil amháin. Codanna de fhíseáin cheoil gan cheol, nach bhfuil clúdaithe cheana féin ag catagóir eile</string>
|
||||||
<string name="revanced_sb_skip_button_compact">Scip</string>
|
<string name="revanced_sb_skip_button_compact">Scipeáil</string>
|
||||||
<string name="revanced_sb_skip_button_compact_highlight">Aibhsigh</string>
|
<string name="revanced_sb_skip_button_compact_highlight">Aibhsigh</string>
|
||||||
<string name="revanced_sb_skip_button_sponsor">Scip urraitheoir</string>
|
<string name="revanced_sb_skip_button_sponsor">Scipeáil urraitheoir</string>
|
||||||
<string name="revanced_sb_skip_button_selfpromo">Scip réamhfhógrán</string>
|
<string name="revanced_sb_skip_button_selfpromo">Scipeáil promóisean</string>
|
||||||
<string name="revanced_sb_skip_button_interaction">Scip idirghníomhú</string>
|
<string name="revanced_sb_skip_button_interaction">Scipeáil idirghníomhú</string>
|
||||||
<string name="revanced_sb_skip_button_highlight">Scip go dtí an buaicphointe</string>
|
<string name="revanced_sb_skip_button_highlight">Scipeáil go dtí aird a tharraingt</string>
|
||||||
<string name="revanced_sb_skip_button_intro_beginning">Scip intreoir</string>
|
<string name="revanced_sb_skip_button_intro_beginning">Scipeáil réamhrá</string>
|
||||||
<string name="revanced_sb_skip_button_intro_middle">Scip idirghabháil</string>
|
<string name="revanced_sb_skip_button_intro_middle">Scipeáil briseadh</string>
|
||||||
<string name="revanced_sb_skip_button_intro_end">Scip idirghabháil</string>
|
<string name="revanced_sb_skip_button_intro_end">Scipeáil briseadh</string>
|
||||||
<string name="revanced_sb_skip_button_outro">Scip an forchríoch</string>
|
<string name="revanced_sb_skip_button_outro">Scipeáil an chuid deiridh</string>
|
||||||
<string name="revanced_sb_skip_button_hook">Scipeáil crúca</string>
|
<string name="revanced_sb_skip_button_hook">Scipeáil crúca</string>
|
||||||
<string name="revanced_sb_skip_button_preview_beginning">Scip réamhamharc</string>
|
<string name="revanced_sb_skip_button_preview_beginning">Scipeáil réamhamharc</string>
|
||||||
<string name="revanced_sb_skip_button_preview_middle">Scip réamhamharc</string>
|
<string name="revanced_sb_skip_button_preview_middle">Scipeáil réamhamharc</string>
|
||||||
<string name="revanced_sb_skip_button_preview_end">Scip an achoimre</string>
|
<string name="revanced_sb_skip_button_preview_end">Scipeáil achoimre</string>
|
||||||
<string name="revanced_sb_skip_button_filler">Scipeáil imeall</string>
|
<string name="revanced_sb_skip_button_filler">Scipeáil tadhlaí</string>
|
||||||
<string name="revanced_sb_skip_button_nomusic">Scip neamh-cheol</string>
|
<string name="revanced_sb_skip_button_nomusic">Scipeáil neamh-cheol</string>
|
||||||
<string name="revanced_sb_skip_button_unsubmitted">Scip deighleog</string>
|
<string name="revanced_sb_skip_button_unsubmitted">Scipeáil deighleog</string>
|
||||||
<string name="revanced_sb_skipped_sponsor">Urra scipeáilte</string>
|
<string name="revanced_sb_skipped_sponsor">Scipeáilte urraitheoir</string>
|
||||||
<string name="revanced_sb_skipped_selfpromo">Féin-chur chun cinn scipeáilte</string>
|
<string name="revanced_sb_skipped_selfpromo">Scipeáilte féin-chur chun cinn</string>
|
||||||
<string name="revanced_sb_skipped_interaction">Meabhrúchán ciapach scipeáilte</string>
|
<string name="revanced_sb_skipped_interaction">Scipeáilte meabhrúchán cráite</string>
|
||||||
<string name="revanced_sb_skipped_highlight">Scipeáilte chun aird a tharraingt</string>
|
<string name="revanced_sb_skipped_highlight">Scipeáilte aird a tharraingt</string>
|
||||||
<string name="revanced_sb_skipped_intro_beginning">Réamhrá scipeáilte</string>
|
<string name="revanced_sb_skipped_intro_beginning">Scipeáilte réamhrá</string>
|
||||||
<string name="revanced_sb_skipped_intro_middle">Idirmheas scipeáilte</string>
|
<string name="revanced_sb_skipped_intro_middle">Scipeáilte briseadh</string>
|
||||||
<string name="revanced_sb_skipped_intro_end">Idirmheas scipeáilte</string>
|
<string name="revanced_sb_skipped_intro_end">Scipeáilte briseadh</string>
|
||||||
<string name="revanced_sb_skipped_outro">Scipeáilte an forchríoch</string>
|
<string name="revanced_sb_skipped_outro">Scipeáilte an chuid deiridh</string>
|
||||||
<string name="revanced_sb_skipped_hook">Crúca scipeáilte</string>
|
<string name="revanced_sb_skipped_hook">Scipeáilte crúca</string>
|
||||||
<string name="revanced_sb_skipped_preview_beginning">Scipeáilte an réamhléiriú</string>
|
<string name="revanced_sb_skipped_preview_beginning">Scipeáilte réamhamharc</string>
|
||||||
<string name="revanced_sb_skipped_preview_middle">Scipeáilte an réamhléiriú</string>
|
<string name="revanced_sb_skipped_preview_middle">Scipeáilte réamhamharc</string>
|
||||||
<string name="revanced_sb_skipped_preview_end">Athbhreithniú scipeáilte</string>
|
<string name="revanced_sb_skipped_preview_end">Achoimre scipeáilte</string>
|
||||||
<string name="revanced_sb_skipped_filler">Imeall scipeáilte</string>
|
<string name="revanced_sb_skipped_filler">Tadhlaí scipeáilte</string>
|
||||||
<string name="revanced_sb_skipped_nomusic">Scaoileadh rannán neamh-cheoil</string>
|
<string name="revanced_sb_skipped_nomusic">Scipeáladh cuid nach ceolmhar í</string>
|
||||||
<string name="revanced_sb_skipped_unsubmitted">Deighleog gan curtha isteach scipeáilte</string>
|
<string name="revanced_sb_skipped_unsubmitted">Deighleog gan curtha isteach scipeáilte</string>
|
||||||
<string name="revanced_sb_skipped_multiple_segments">Scipeáilte go leor deighleoga</string>
|
<string name="revanced_sb_skipped_multiple_segments">Scipeáilte iomadúil deighleoga</string>
|
||||||
<string name="revanced_sb_skip_automatically">Scip go huathoibríoch</string>
|
<string name="revanced_sb_skip_automatically">Scipeáil go huathoibríoch</string>
|
||||||
<string name="revanced_sb_skip_automatically_once">Scip go huathoibríoch uair amháin</string>
|
<string name="revanced_sb_skip_automatically_once">Scipeáil go huathoibríoch uair amháin</string>
|
||||||
<string name="revanced_sb_skip_showbutton">Taispeáin cnaipe Scipeála</string>
|
<string name="revanced_sb_skip_showbutton">Taispeáin cnaipe Scipeáil</string>
|
||||||
<string name="revanced_sb_skip_seekbaronly">Taispeáin i mbarra lorg</string>
|
<string name="revanced_sb_skip_seekbaronly">Taispeáin i mbarra lorg</string>
|
||||||
<string name="revanced_sb_skip_ignore">Díchumasaigh</string>
|
<string name="revanced_sb_skip_ignore">Díchumasaigh</string>
|
||||||
<string name="revanced_sb_submit_failed_invalid">Ní féidir deighleog a chur isteach: %s</string>
|
<string name="revanced_sb_submit_failed_invalid">Ní féidir deighleog a chur isteach: %s</string>
|
||||||
<string name="revanced_sb_submit_failed_timeout">Tá SponsorBlock síos go sealadach</string>
|
<string name="revanced_sb_submit_failed_timeout">Tá SponsorBlock síos go sealadach</string>
|
||||||
<string name="revanced_sb_submit_failed_unknown_error">Ní féidir deighleog a chur isteach (stádas: %1$d %2$s)</string>
|
<string name="revanced_sb_submit_failed_unknown_error">Ní féidir deighleog a chur isteach (stádas: %1$d %2$s)</string>
|
||||||
<string name="revanced_sb_submit_failed_rate_limit">Ní féidir an chuid a chur isteach. Teoranta (ró-iomadú ó úsáideoir nó ó IP céanna)</string>
|
<string name="revanced_sb_submit_failed_rate_limit">Ní féidir deighleog a chur isteach. Ráta Teoranta (an iomarca ón úsáideoir nó IP céanna)</string>
|
||||||
<string name="revanced_sb_submit_failed_forbidden">Ní féidir an deighleog a chur isteach: %s</string>
|
<string name="revanced_sb_submit_failed_forbidden">Ní féidir an deighleog a chur isteach: %s</string>
|
||||||
<string name="revanced_sb_submit_failed_duplicate">"Ní féidir an chuid a chur isteach.
|
<string name="revanced_sb_submit_failed_duplicate">"Ní féidir deighleog a chur isteach.
|
||||||
Tá sé ann cheana féin"</string>
|
Tá sé ann cheana féin"</string>
|
||||||
<string name="revanced_sb_submit_succeeded">Déileog curtha isteach go rathúil</string>
|
<string name="revanced_sb_submit_succeeded">Cuireadh an deighleog isteach go rathúil</string>
|
||||||
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
|
||||||
<string name="revanced_sb_sponsorblock_connection_failure_timeout">Níl SponsorBlock ar fáil go sealadach (API amuigh amach)</string>
|
<string name="revanced_sb_sponsorblock_connection_failure_timeout">Níl SponsorBlock ar fáil go sealadach (API am istigh)</string>
|
||||||
<string name="revanced_sb_sponsorblock_connection_failure_status">Níl SponsorBlock ar fáil go sealadach (stádas %d)</string>
|
<string name="revanced_sb_sponsorblock_connection_failure_status">Níl SponsorBlock ar fáil go sealadach (stádas %d)</string>
|
||||||
<string name="revanced_sb_sponsorblock_connection_failure_generic">Níl SponsorBlock ar fáil go sealadach</string>
|
<string name="revanced_sb_sponsorblock_connection_failure_generic">Níl SponsorBlock ar fáil go sealadach</string>
|
||||||
<string name="revanced_sb_vote_failed_timeout">Ní féidir vótáil a dhéanamh don deighleog (API amuigh amach)</string>
|
<string name="revanced_sb_vote_failed_timeout">Ní féidir vótáil don deighleog (API am istigh)</string>
|
||||||
<string name="revanced_sb_vote_failed_unknown_error">Ní féidir vótáil a dhéanamh don deighleog (stádas: %1$d %2$s)</string>
|
<string name="revanced_sb_vote_failed_unknown_error">Ní féidir vótáil a dhéanamh don deighleog (stádas: %1$d %2$s)</string>
|
||||||
<string name="revanced_sb_vote_failed_forbidden">Ní féidir vótáil a dhéanamh don deighleog: %s</string>
|
<string name="revanced_sb_vote_failed_forbidden">Ní féidir vótáil a dhéanamh don deighleog: %s</string>
|
||||||
<string name="revanced_sb_vote_upvote">Vótáil suas</string>
|
<string name="revanced_sb_vote_upvote">Vótáil suas</string>
|
||||||
@@ -1226,7 +1226,7 @@ Tá sé ann cheana féin"</string>
|
|||||||
<!-- A segment start and end time, such as "02:10 to 03:40". -->
|
<!-- A segment start and end time, such as "02:10 to 03:40". -->
|
||||||
<string name="revanced_sb_vote_segment_time_to_from">%1$s go %2$s</string>
|
<string name="revanced_sb_vote_segment_time_to_from">%1$s go %2$s</string>
|
||||||
<string name="revanced_sb_new_segment_choose_category">Roghnaigh catagóir deighleog</string>
|
<string name="revanced_sb_new_segment_choose_category">Roghnaigh catagóir deighleog</string>
|
||||||
<string name="revanced_sb_new_segment_disabled_category">Tá catagóir díchumasaithe i socruithe. Cumasaigh catagóir a chur isteach.</string>
|
<string name="revanced_sb_new_segment_disabled_category">Catagóir díchumasaithe. Cumasaigh í le cur isteach.</string>
|
||||||
<string name="revanced_sb_new_segment_title">Deighleog nua SponsorBlock</string>
|
<string name="revanced_sb_new_segment_title">Deighleog nua SponsorBlock</string>
|
||||||
<string name="revanced_sb_new_segment_mark_time_as_question">Socraigh %s mar thús nó deireadh deighleog nua?</string>
|
<string name="revanced_sb_new_segment_mark_time_as_question">Socraigh %s mar thús nó deireadh deighleog nua?</string>
|
||||||
<string name="revanced_sb_new_segment_mark_start">Tosaigh</string>
|
<string name="revanced_sb_new_segment_mark_start">Tosaigh</string>
|
||||||
@@ -1235,36 +1235,36 @@ Tá sé ann cheana féin"</string>
|
|||||||
<string name="revanced_sb_new_segment_time_start">Am a thosaíonn an deighleog ag</string>
|
<string name="revanced_sb_new_segment_time_start">Am a thosaíonn an deighleog ag</string>
|
||||||
<string name="revanced_sb_new_segment_time_end">Am a chríochnaíonn an deighleog ag</string>
|
<string name="revanced_sb_new_segment_time_end">Am a chríochnaíonn an deighleog ag</string>
|
||||||
<string name="revanced_sb_new_segment_confirm_title">An bhfuil na hamanna ceart?</string>
|
<string name="revanced_sb_new_segment_confirm_title">An bhfuil na hamanna ceart?</string>
|
||||||
<string name="revanced_sb_new_segment_confirm_content">"Tagann an clipe
|
<string name="revanced_sb_new_segment_confirm_content">"Tá an deighleog ó
|
||||||
|
|
||||||
%1$s
|
%1$s
|
||||||
gu chuig
|
go
|
||||||
%2$s
|
%2$s
|
||||||
|
|
||||||
(%3$s)
|
(%3$s)
|
||||||
|
|
||||||
Maithe chun cur isteach?"</string>
|
Réidh le cur isteach?"</string>
|
||||||
<string name="revanced_sb_new_segment_start_is_before_end">Caithfidh an tús a bheith roimh an deireadh</string>
|
<string name="revanced_sb_new_segment_start_is_before_end">Caithfidh an tús a bheith roimh an deireadh</string>
|
||||||
<string name="revanced_sb_new_segment_mark_locations_first">Marcáil dhá shuíomh ar an mbarra ama ar dtús</string>
|
<string name="revanced_sb_new_segment_mark_locations_first">Marcáil dhá shuíomh ar an mbarra ama ar dtús</string>
|
||||||
<string name="revanced_sb_new_segment_preview_segment_first">Réamhamharc ar an deighleog, agus cinntigh go scipeánann sé</string>
|
<string name="revanced_sb_new_segment_preview_segment_first">Féach ar an deighleog agus cinntigh léim réidh</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 am an deighleog in eagar de láimh</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_title">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 staitisticí ar fáil faoi láthair (tá an API síos)</string>
|
||||||
<string name="revanced_sb_stats_loading">Á lódáil...</string>
|
<string name="revanced_sb_stats_loading">Ag lódáil...</string>
|
||||||
<string name="revanced_sb_stats_sb_disabled">Tá SponsorBlock míchumasaithe</string>
|
<string name="revanced_sb_stats_sb_disabled">Tá SponsorBlock díchumasaithe</string>
|
||||||
<string name="revanced_sb_stats_username">D\'ainm úsáideora: <b>%s</b></string>
|
<string name="revanced_sb_stats_username">D\'ainm úsáideora: <b>%s</b></string>
|
||||||
<string name="revanced_sb_stats_username_change">Tapáil anseo chun d\'ainm úsáideora a athrú</string>
|
<string name="revanced_sb_stats_username_change">Tapáil anseo chun d\'ainm úsáideora a athrú</string>
|
||||||
<string name="revanced_sb_stats_username_change_unknown_error">Ní féidir ainm úsáideora a athrú: Stádas: %1$d %2$s</string>
|
<string name="revanced_sb_stats_username_change_unknown_error">Ní féidir ainm úsáideora a athrú: Stádas: %1$d %2$s</string>
|
||||||
<string name="revanced_sb_stats_username_changed">Athraíodh ainm úsáideora</string>
|
<string name="revanced_sb_stats_username_changed">Athraíodh ainm úsáideora go rathúil</string>
|
||||||
<string name="revanced_sb_stats_reputation">Tá do chlú <b>%.2f</b></string>
|
<string name="revanced_sb_stats_reputation">Is é do chlú <b>%.2f</b></string>
|
||||||
<string name="revanced_sb_stats_submissions">Chruthaigh tú <b>%s</b> deighleoga</string>
|
<string name="revanced_sb_stats_submissions">Chruthaigh tú <b>%s</b> deighleoga</string>
|
||||||
<string name="revanced_sb_stats_submissions_sum">Tapáil anseo chun do mhíreanna a fheiceáil</string>
|
<string name="revanced_sb_stats_submissions_sum">Tapáil anseo chun do dheighleoga a fheiceáil</string>
|
||||||
<string name="revanced_sb_stats_saved_zero">Clár ceannairí SponsorBlock</string>
|
<string name="revanced_sb_stats_saved_zero">Clár ceannairí SponsorBlock</string>
|
||||||
<string name="revanced_sb_stats_saved">Tá daoine sábháilte agat ó <b>%s</b> deighleoga</string>
|
<string name="revanced_sb_stats_saved">Tá daoine sábháilte agat ó <b>%s</b> deighleoga</string>
|
||||||
<string name="revanced_sb_stats_saved_sum_zero">Tapáil anseo chun na stats domhanda agus na rannpháirtithe is fearr a fheiceáil</string>
|
<string name="revanced_sb_stats_saved_sum_zero">Tapáil anseo chun na staitisticí domhanda agus na rannpháirtithe is fearr a fheiceáil</string>
|
||||||
<string name="revanced_sb_stats_saved_sum">Sin é <b>%s</b> dá saol.<br>Tapáil anseo chun an clár ceannairí a fheiceáil</string>
|
<string name="revanced_sb_stats_saved_sum">Sin é <b>%s</b> dá saol.<br>Tapáil anseo chun an clár ceannairí a fheiceáil</string>
|
||||||
<string name="revanced_sb_stats_self_saved">Rinne tú scipeáil ar <b>%s</b> deighleoga</string>
|
<string name="revanced_sb_stats_self_saved">Rinne tú scipeáil ar <b>%s</b> deighleoga</string>
|
||||||
<string name="revanced_sb_stats_self_saved_sum">Sin é <b>%s</b></string>
|
<string name="revanced_sb_stats_self_saved_sum">Sin é <b>%s</b></string>
|
||||||
@@ -1275,36 +1275,36 @@ Maithe chun cur isteach?"</string>
|
|||||||
<string name="revanced_sb_color_opacity_label">Teimhneacht:</string>
|
<string name="revanced_sb_color_opacity_label">Teimhneacht:</string>
|
||||||
<string name="revanced_sb_color_dot_label">Dath:</string>
|
<string name="revanced_sb_color_dot_label">Dath:</string>
|
||||||
<string name="revanced_sb_about_title">Maidir</string>
|
<string name="revanced_sb_about_title">Maidir</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>
|
<string name="revanced_sb_about_api_summary">Cuirtear sonraí ar fáil ag API SponsorBlock. Tapáil anseo chun tuilleadh eolais a fháil agus íoslódálacha le haghaidh ardáin eile a fheiceáil</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">Fachtóir foirme leagan amach</string>
|
||||||
<string name="revanced_change_form_factor_entry_1">Réamhshocrúch</string>
|
<string name="revanced_change_form_factor_entry_1">Réamhshocrú</string>
|
||||||
<string name="revanced_change_form_factor_entry_2">Fón</string>
|
<string name="revanced_change_form_factor_entry_2">Guthán</string>
|
||||||
<string name="revanced_change_form_factor_entry_3">Táibhléad</string>
|
<string name="revanced_change_form_factor_entry_3">Táibléad</string>
|
||||||
<string name="revanced_change_form_factor_entry_4">Gluaisteán</string>
|
<string name="revanced_change_form_factor_entry_4">Gluaisteán</string>
|
||||||
<string name="revanced_change_form_factor_user_dialog_message">"Áirítear ar na hathruithe:
|
<string name="revanced_change_form_factor_user_dialog_message">"Áirítear leis na hathruithe:
|
||||||
|
|
||||||
Leagan amach an táibléid
|
Leagan amach táibléid
|
||||||
• Tá postálacha pobail i bhfolach
|
• Tá poist phobail i bhfolach
|
||||||
|
|
||||||
Leagan amach feithicleach
|
Leagan amach gluaisteán
|
||||||
• Osclaítear Shorts sa ghnáthsheinnteoir
|
• Gearrscannáin oscailte sa ghnáth-imreoir
|
||||||
• Eagraítear an fotha de réir topaicí agus bealaí"</string>
|
• Tá an fotha eagraithe de réir topaicí agus bealaí"</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.spoofappversion.spoofAppVersionPatch">
|
<patch id="layout.spoofappversion.spoofAppVersionPatch">
|
||||||
<string name="revanced_spoof_app_version_title">Leagan aip spoof</string>
|
<string name="revanced_spoof_app_version_title">Leagan aip bréige</string>
|
||||||
<string name="revanced_spoof_app_version_summary_on">Leagan spoofed</string>
|
<string name="revanced_spoof_app_version_summary_on">Leagan bréagach</string>
|
||||||
<string name="revanced_spoof_app_version_summary_off">Leagan gan bhfoláiste</string>
|
<string name="revanced_spoof_app_version_summary_off">Leagan gan bréag</string>
|
||||||
<string name="revanced_spoof_app_version_user_dialog_message">"Déanfar leagan an aip a spoofadh go leagan níos sine de YouTube.
|
<string name="revanced_spoof_app_version_user_dialog_message">"Déanfar leagan aip a bréagach chuig leagan níos sine de YouTube.
|
||||||
|
|
||||||
Athróidh sé seo cuma agus gnéithe an aip, ach d'fhéadfadh fo-iarsmaí anaithnid a bheith ann.
|
Athróidh sé seo cuma agus gnéithe na haipe, ach d'fhéadfadh fo-iarsmaí anaithnide tarlú.
|
||||||
|
|
||||||
Má dhiúltaítear é níos déanaí, moltar sonraí an aip a ghlanadh chun buganna UI a chosc."</string>
|
Má mhúchtar é níos déanaí, moltar sonraí na haipe a ghlanadh chun fabhtanna UI a chosc."</string>
|
||||||
<string name="revanced_spoof_app_version_target_title">Sprioc leagan aip spoof</string>
|
<string name="revanced_spoof_app_version_target_title">Sprioc leagan aip bréagach</string>
|
||||||
<string name="revanced_spoof_app_version_target_entry_1">20.13.41 - Cuir an barra gníomhaíochta físe neamhchomhbhrúite ar ais</string>
|
<string name="revanced_spoof_app_version_target_entry_1">20.13.41 - Barra gníomhaíochta físe neamh-fhillte a athchóiriú</string>
|
||||||
<string name="revanced_spoof_app_version_target_entry_2">20.05.46 - Athchóirigh feidhmiúlacht tras-scríbhinne</string>
|
<string name="revanced_spoof_app_version_target_entry_2">20.05.46 - Athchóirigh feidhmiúlacht an trascríbhinn</string>
|
||||||
<string name="revanced_spoof_app_version_target_entry_3">19.35.36 - Athchóirigh sean-deilbhíní imreoir Shorts</string>
|
<string name="revanced_spoof_app_version_target_entry_3">19.35.36 - Athchóirigh deilbhíní sean-imreoir Shorts</string>
|
||||||
<string name="revanced_spoof_app_version_target_entry_4">19.01.34 - Athchóirigh deilbhíní nascleanúna sean</string>
|
<string name="revanced_spoof_app_version_target_entry_4">19.01.34 - Athchóirigh deilbhíní nascleanúna sean</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.startpage.changeStartPagePatch">
|
<patch id="layout.startpage.changeStartPagePatch">
|
||||||
@@ -1637,10 +1637,6 @@ D’fhéadfadh sé go mbeadh stad nó go gcaillfí frámaí ag athsheinm físe l
|
|||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Taispeáin i Staitisticí do nerds</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Taispeáin i Staitisticí do nerds</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Taispeántar cineál an chliaint i Staitisticí do nerds</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Taispeántar cineál an chliaint i Staitisticí do nerds</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Tá an cliant curtha i bhfolach i Staitisticí do nerds</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Tá an cliant curtha i bhfolach i Staitisticí do nerds</string>
|
||||||
<string name="revanced_spoof_video_streams_language_title">Teanga an tsrutha fuaime</string>
|
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
<string name="revanced_spoof_video_streams_language_not_available">Chun teanga fuaime ar leith a roghnú, múch \'Fórsaigh teanga fuaime bhunaidh\'</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_android_studio">Níl roghnú theanga an tsrutha ar fáil le Android Studio</string>
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -259,7 +259,6 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -258,7 +258,6 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -1636,10 +1636,6 @@ Az AV1-es videólejátszás akadozhat vagy képkockákat ejthet."</string>
|
|||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Megjelenítés a Statisztikákban</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Megjelenítés a Statisztikákban</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">A kliens típusa a Statisztikákban látható</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">A kliens típusa a Statisztikákban látható</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">A kliens el van rejtve a Statisztikákban</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">A kliens el van rejtve a Statisztikákban</string>
|
||||||
<string name="revanced_spoof_video_streams_language_title">Hangfolyam nyelve</string>
|
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
<string name="revanced_spoof_video_streams_language_not_available">Egy adott hangsáv nyelv kiválasztásához kapcsold ki az \"Eredeti hangsáv nyelv kikényszerítése\" opciót</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_android_studio">Az Android Studio-val nem érhető el a stream nyelvének kiválasztása</string>
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -1640,10 +1640,6 @@ AV1-ով տեսանյութի նվագարկումը կարող է ընդհատ
|
|||||||
<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>
|
||||||
<string name="revanced_spoof_video_streams_language_title">Ձայնային հոսքի լեզուն</string>
|
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
<string name="revanced_spoof_video_streams_language_not_available">Որոշակի ձայնային լեզու ընտրելու համար անջատեք \'Պարտադրել բնօրինակ ձայնային լեզուն\'</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_android_studio">Հոսքի լեզվի ընտրությունը հասանելի չէ Android Studio-ի հետ</string>
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -1638,10 +1638,6 @@ Pemutaran video dengan AV1 mungkin tersendat atau kehilangan bingkai."</string>
|
|||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Tampilkan di Statistik untuk nerds</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Tampilkan di Statistik untuk nerds</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Jenis klien ditampilkan di Statistik untuk nerds</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Jenis klien ditampilkan di Statistik untuk nerds</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Klien disembunyikan di Statistik untuk nerds</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Klien disembunyikan di Statistik untuk nerds</string>
|
||||||
<string name="revanced_spoof_video_streams_language_title">Bahasa aliran audio</string>
|
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
<string name="revanced_spoof_video_streams_language_not_available">Untuk memilih bahasa audio tertentu, matikan \'Paksa bahasa audio asli\'</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_android_studio">Pilihan bahasa streaming tidak tersedia dengan Android Studio</string>
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -1638,10 +1638,6 @@ La riproduzione video con AV1 potrebbe rallentare o perdere fotogrammi."</string
|
|||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Mostra nelle statistiche per nerd</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Mostra nelle statistiche per nerd</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Il tipo di client è mostrato nelle statistiche per nerd</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">Il tipo di client è mostrato nelle statistiche per nerd</string>
|
||||||
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Il client è nascosto nelle statistiche per nerd</string>
|
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">Il client è nascosto nelle statistiche per nerd</string>
|
||||||
<string name="revanced_spoof_video_streams_language_title">Lingua del flusso audio</string>
|
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
<string name="revanced_spoof_video_streams_language_not_available">Per selezionare una lingua audio specifica, disattiva \'Forza lingua audio originale\'</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_android_studio">La selezione della lingua dello stream non è disponibile con Android Studio</string>
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -1641,10 +1641,6 @@ Second \"item\" text"</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>
|
||||||
<string name="revanced_spoof_video_streams_language_title">שפת זרם השמע</string>
|
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
<string name="revanced_spoof_video_streams_language_not_available">כדי לבחור שפת שמע ספציפית, כבה את \'אכוף שפת שמע מקורית\'</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_android_studio">בחירת שפת הזרם אינה זמינה עם אנדרואיד סטודיו</string>
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -282,7 +282,7 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
|
|||||||
<string name="revanced_hide_doodles_summary_off">ロゴの YouTube Doodle アニメーションは表示されます</string>
|
<string name="revanced_hide_doodles_summary_off">ロゴの YouTube Doodle アニメーションは表示されます</string>
|
||||||
<string name="revanced_hide_doodles_user_dialog_message">"YouTube Doodle は、年に数日、祝日や記念日などの特別な日に表示されます。
|
<string name="revanced_hide_doodles_user_dialog_message">"YouTube Doodle は、年に数日、祝日や記念日などの特別な日に表示されます。
|
||||||
|
|
||||||
あなたの地域で Doodle が表示されているとき、この設定をオンにすると検索結果にカテゴリー バーが表示されなくなります。"</string>
|
あなたの地域で Doodle が表示されているとき、この設定をオンにすると検索結果にフィルタバーが表示されなくなります。"</string>
|
||||||
<string name="revanced_hide_channel_bar_title">チャンネルバーを非表示</string>
|
<string name="revanced_hide_channel_bar_title">チャンネルバーを非表示</string>
|
||||||
<string name="revanced_hide_channel_bar_summary_on">チャンネルバーは表示されません</string>
|
<string name="revanced_hide_channel_bar_summary_on">チャンネルバーは表示されません</string>
|
||||||
<string name="revanced_hide_channel_bar_summary_off">チャンネルバーは表示されます</string>
|
<string name="revanced_hide_channel_bar_summary_off">チャンネルバーは表示されます</string>
|
||||||
@@ -350,11 +350,11 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
|
|||||||
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">フィードに表示されません</string>
|
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">フィードに表示されません</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">フィードに表示されます</string>
|
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">フィードに表示されます</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_title">関連動画で非表示</string>
|
<string name="revanced_hide_filter_bar_feed_in_related_videos_title">関連動画で非表示</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">関連動画に表示されません</string>
|
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">関連動画には表示されません</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">関連動画に表示されます</string>
|
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">関連動画には表示されます</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_search_title">検索結果で非表示</string>
|
<string name="revanced_hide_filter_bar_feed_in_search_title">検索結果で非表示</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">検索結果に表示されません</string>
|
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">検索結果には表示されません</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">検索結果に表示されます</string>
|
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">検索結果には表示されます</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_history_title">再生履歴で非表示</string>
|
<string name="revanced_hide_filter_bar_feed_in_history_title">再生履歴で非表示</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">再生履歴に表示されません</string>
|
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">再生履歴に表示されません</string>
|
||||||
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">再生履歴に表示されます</string>
|
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">再生履歴に表示されます</string>
|
||||||
@@ -492,9 +492,9 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
|
|||||||
<string name="revanced_hide_paid_promotion_label_title">「プロモーションを含みます」ラベルを非表示</string>
|
<string name="revanced_hide_paid_promotion_label_title">「プロモーションを含みます」ラベルを非表示</string>
|
||||||
<string name="revanced_hide_paid_promotion_label_summary_on">「プロモーションを含みます」ラベルは表示されません</string>
|
<string name="revanced_hide_paid_promotion_label_summary_on">「プロモーションを含みます」ラベルは表示されません</string>
|
||||||
<string name="revanced_hide_paid_promotion_label_summary_off">「プロモーションを含みます」ラベルは表示されます</string>
|
<string name="revanced_hide_paid_promotion_label_summary_off">「プロモーションを含みます」ラベルは表示されます</string>
|
||||||
<string name="revanced_hide_self_sponsor_ads_title">自己スポンサー カードを非表示</string>
|
<string name="revanced_hide_self_sponsor_ads_title">自己宣伝カードを非表示</string>
|
||||||
<string name="revanced_hide_self_sponsor_ads_summary_on">自己スポンサー カードは表示されません</string>
|
<string name="revanced_hide_self_sponsor_ads_summary_on">自己宣伝カードは表示されません</string>
|
||||||
<string name="revanced_hide_self_sponsor_ads_summary_off">自己スポンサー カードは表示されます</string>
|
<string name="revanced_hide_self_sponsor_ads_summary_off">自己宣伝カードは表示されます</string>
|
||||||
<string name="revanced_hide_shopping_links_title">商品へのリンクを非表示</string>
|
<string name="revanced_hide_shopping_links_title">商品へのリンクを非表示</string>
|
||||||
<string name="revanced_hide_shopping_links_summary_on">動画の概要欄の商品へのリンクは表示されません</string>
|
<string name="revanced_hide_shopping_links_summary_on">動画の概要欄の商品へのリンクは表示されません</string>
|
||||||
<string name="revanced_hide_shopping_links_summary_off">動画の概要欄の商品へのリンクは表示されます</string>
|
<string name="revanced_hide_shopping_links_summary_off">動画の概要欄の商品へのリンクは表示されます</string>
|
||||||
@@ -1142,7 +1142,7 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
|
|||||||
<string name="revanced_sb_settings_ie">設定のインポート / エクスポート</string>
|
<string name="revanced_sb_settings_ie">設定のインポート / エクスポート</string>
|
||||||
<string name="revanced_sb_settings_copy">コピー</string>
|
<string name="revanced_sb_settings_copy">コピー</string>
|
||||||
<string name="revanced_sb_settings_ie_sum">SponsorBlock の設定を JSON 形式のテキストでインポート / エクスポートします。この JSON テキストは他のプラットフォームでも利用可能です</string>
|
<string name="revanced_sb_settings_ie_sum">SponsorBlock の設定を JSON 形式のテキストでインポート / エクスポートします。この JSON テキストは他のプラットフォームでも利用可能です</string>
|
||||||
<string name="revanced_sb_settings_ie_sum_warning">SponsorBlock の設定を他のプラットフォームでも利用可能な JSON 形式のテキストでインポート / エクスポートします。この JSON テキストには非公開ユーザー ID が含まれています。共有する際は十分注意してください</string>
|
<string name="revanced_sb_settings_ie_sum_warning">SponsorBlock の設定を他のプラットフォームでも利用可能な JSON 形式のテキストでインポート / エクスポートします。この JSON テキストには非公開ユーザー ID が含まれています。このテキストを共有する際は十分注意してください</string>
|
||||||
<string name="revanced_sb_settings_import_successful">設定のインポートに成功しました</string>
|
<string name="revanced_sb_settings_import_successful">設定のインポートに成功しました</string>
|
||||||
<string name="revanced_sb_settings_import_failed">インポートに失敗しました: %s</string>
|
<string name="revanced_sb_settings_import_failed">インポートに失敗しました: %s</string>
|
||||||
<string name="revanced_sb_settings_export_failed">エクスポートに失敗しました: %s</string>
|
<string name="revanced_sb_settings_export_failed">エクスポートに失敗しました: %s</string>
|
||||||
@@ -1151,18 +1151,18 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
|
|||||||
このユーザー ID は、パスワードのようなものであり、決して共有すべきではありません。"</string>
|
このユーザー ID は、パスワードのようなものであり、決して共有すべきではありません。"</string>
|
||||||
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">今後表示しない</string>
|
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">今後表示しない</string>
|
||||||
<string name="revanced_sb_diff_segments">セグメントに対する動作を変更</string>
|
<string name="revanced_sb_diff_segments">セグメントに対する動作を変更</string>
|
||||||
<string name="revanced_sb_segments_sponsor">スポンサー</string>
|
<string name="revanced_sb_segments_sponsor">広告</string>
|
||||||
<string name="revanced_sb_segments_sponsor_sum">有料の宣伝 、有料の紹介、直接的な広告。自己宣伝や好意をもって行う、慈善活動、クリエーター、ウェブサイト、製品などの無償の紹介は含まれません</string>
|
<string name="revanced_sb_segments_sponsor_sum">有料の宣伝 、有料の紹介、直接的な広告。自己宣伝や好意をもって行う、慈善活動、クリエーター、ウェブサイト、製品などの無償の紹介は含まれません</string>
|
||||||
<string name="revanced_sb_segments_selfpromo">無報酬の宣伝 / 自己宣伝</string>
|
<string name="revanced_sb_segments_selfpromo">無報酬の宣伝 / 自己宣伝</string>
|
||||||
<string name="revanced_sb_segments_selfpromo_sum">無報酬または自己宣伝である、という点以外は「スポンサー」と同様です。商品、寄付、コラボ相手に関する宣伝などを含みます</string>
|
<string name="revanced_sb_segments_selfpromo_sum">無報酬または自己宣伝である、という点以外は「広告」と同様です。商品、寄付、コラボ相手に関する宣伝などを含みます</string>
|
||||||
<string name="revanced_sb_segments_interaction">視聴者への催促 (登録など)</string>
|
<string name="revanced_sb_segments_interaction">視聴者への催促 (登録など)</string>
|
||||||
<string name="revanced_sb_segments_interaction_sum">動画内に挿入される視聴者への高評価、チャンネル登録、フォローなどの時間的に短い催促。時間的に長い催促またはイベントなどの個別具体的なものに関する催促は、「視聴者への催促」ではなく「自己宣伝」に分類すべきです</string>
|
<string name="revanced_sb_segments_interaction_sum">動画内に挿入される視聴者への高評価、チャンネル登録、フォローなどの時間的に短い催促。時間的に長い催促またはイベントなどの個別具体的なものに関する催促は、「視聴者への催促」ではなく「自己宣伝」に分類すべきです</string>
|
||||||
<string name="revanced_sb_segments_highlight">ハイライト</string>
|
<string name="revanced_sb_segments_highlight">ハイライト</string>
|
||||||
<string name="revanced_sb_segments_highlight_sum">動画の中で最も重要な場面</string>
|
<string name="revanced_sb_segments_highlight_sum">動画の中で最も重要な場面</string>
|
||||||
<string name="revanced_sb_segments_intro">幕間 / オープニング (OP)</string>
|
<string name="revanced_sb_segments_intro">幕間 / オープニング (OP)</string>
|
||||||
<string name="revanced_sb_segments_intro_sum">実際のコンテンツを含まない区間。一時停止、静止画、繰り返しアニメーションなど。情報を含むトランジッション (場面転換) は、このカテゴリーではありません</string>
|
<string name="revanced_sb_segments_intro_sum">実際のコンテンツを含まない区間。一時停止、静止画、繰り返しアニメーションなど。情報を含むトランジッション (場面転換) は、このカテゴリではありません</string>
|
||||||
<string name="revanced_sb_segments_outro">終了画面 / クレジット (ED)</string>
|
<string name="revanced_sb_segments_outro">終了画面 / クレジット (ED)</string>
|
||||||
<string name="revanced_sb_segments_outro_sum">クレジット、または YouTube の終了画面が表示される場面。情報を含む結論、まとめ部分は、このカテゴリーには含まれません</string>
|
<string name="revanced_sb_segments_outro_sum">クレジット、または YouTube の終了画面が表示される場面。情報を含む結論、まとめ部分は、このカテゴリには含まれません</string>
|
||||||
<string name="revanced_sb_segments_hook">フック / あいさつ</string>
|
<string name="revanced_sb_segments_hook">フック / あいさつ</string>
|
||||||
<string name="revanced_sb_segments_hook_sum">今後の動画のナレーション付きの予告編、および開幕と別れのあいさつ。重複しない内容や情報を追加する場面は含まれません</string>
|
<string name="revanced_sb_segments_hook_sum">今後の動画のナレーション付きの予告編、および開幕と別れのあいさつ。重複しない内容や情報を追加する場面は含まれません</string>
|
||||||
<string name="revanced_sb_segments_preview">予告編 / 総集編</string>
|
<string name="revanced_sb_segments_preview">予告編 / 総集編</string>
|
||||||
@@ -1173,7 +1173,7 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
|
|||||||
<string name="revanced_sb_segments_nomusic_sum">ミュージック ビデオ専用。ミュージック ビデオの中で楽曲が流れていない区間であり、公式や他のメディアの音源に存在しない区間</string>
|
<string name="revanced_sb_segments_nomusic_sum">ミュージック ビデオ専用。ミュージック ビデオの中で楽曲が流れていない区間であり、公式や他のメディアの音源に存在しない区間</string>
|
||||||
<string name="revanced_sb_skip_button_compact">スキップ</string>
|
<string name="revanced_sb_skip_button_compact">スキップ</string>
|
||||||
<string name="revanced_sb_skip_button_compact_highlight">ハイライト</string>
|
<string name="revanced_sb_skip_button_compact_highlight">ハイライト</string>
|
||||||
<string name="revanced_sb_skip_button_sponsor"> スポンサーをスキップ</string>
|
<string name="revanced_sb_skip_button_sponsor"> 広告をスキップ</string>
|
||||||
<string name="revanced_sb_skip_button_selfpromo">自己宣伝をスキップ</string>
|
<string name="revanced_sb_skip_button_selfpromo">自己宣伝をスキップ</string>
|
||||||
<string name="revanced_sb_skip_button_interaction">催促をスキップ</string>
|
<string name="revanced_sb_skip_button_interaction">催促をスキップ</string>
|
||||||
<string name="revanced_sb_skip_button_highlight">ハイライトまでスキップ</string>
|
<string name="revanced_sb_skip_button_highlight">ハイライトまでスキップ</string>
|
||||||
@@ -1188,7 +1188,7 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
|
|||||||
<string name="revanced_sb_skip_button_filler">余談をスキップ</string>
|
<string name="revanced_sb_skip_button_filler">余談をスキップ</string>
|
||||||
<string name="revanced_sb_skip_button_nomusic">楽曲以外をスキップ</string>
|
<string name="revanced_sb_skip_button_nomusic">楽曲以外をスキップ</string>
|
||||||
<string name="revanced_sb_skip_button_unsubmitted">セグメントをスキップ</string>
|
<string name="revanced_sb_skip_button_unsubmitted">セグメントをスキップ</string>
|
||||||
<string name="revanced_sb_skipped_sponsor">スポンサーをスキップしました</string>
|
<string name="revanced_sb_skipped_sponsor">広告をスキップしました</string>
|
||||||
<string name="revanced_sb_skipped_selfpromo">自己宣伝をスキップしました</string>
|
<string name="revanced_sb_skipped_selfpromo">自己宣伝をスキップしました</string>
|
||||||
<string name="revanced_sb_skipped_interaction">催促をスキップしました</string>
|
<string name="revanced_sb_skipped_interaction">催促をスキップしました</string>
|
||||||
<string name="revanced_sb_skipped_highlight">ハイライトまでスキップしました</string>
|
<string name="revanced_sb_skipped_highlight">ハイライトまでスキップしました</string>
|
||||||
@@ -1226,13 +1226,13 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
|
|||||||
<string name="revanced_sb_vote_failed_forbidden">セグメントへの投票に失敗しました: %s</string>
|
<string name="revanced_sb_vote_failed_forbidden">セグメントへの投票に失敗しました: %s</string>
|
||||||
<string name="revanced_sb_vote_upvote">高評価</string>
|
<string name="revanced_sb_vote_upvote">高評価</string>
|
||||||
<string name="revanced_sb_vote_downvote">低評価</string>
|
<string name="revanced_sb_vote_downvote">低評価</string>
|
||||||
<string name="revanced_sb_vote_category">カテゴリーの変更</string>
|
<string name="revanced_sb_vote_category">カテゴリの変更</string>
|
||||||
<string name="revanced_sb_vote_no_segments">投票先のセグメントが指定されていません</string>
|
<string name="revanced_sb_vote_no_segments">投票可能なセグメントがありません</string>
|
||||||
<!-- A segment start and end time, such as "02:10 to 03:40". -->
|
<!-- A segment start and end time, such as "02:10 to 03:40". -->
|
||||||
<string name="revanced_sb_vote_segment_time_to_from">%1$s ~ %2$s</string>
|
<string name="revanced_sb_vote_segment_time_to_from">%1$s ~ %2$s</string>
|
||||||
<string name="revanced_sb_new_segment_choose_category">セグメントのカテゴリーを選択してください</string>
|
<string name="revanced_sb_new_segment_choose_category">セグメントのカテゴリを選択してください</string>
|
||||||
<string name="revanced_sb_new_segment_disabled_category">カテゴリーが設定で無効になっています。送信するには、このカテゴリーを有効にしてください。</string>
|
<string name="revanced_sb_new_segment_disabled_category">カテゴリが「無効」に設定されています。送信するには、設定を変更してください。</string>
|
||||||
<string name="revanced_sb_new_segment_title">新しいセグメント</string>
|
<string name="revanced_sb_new_segment_title">新しいセグメント </string>
|
||||||
<string name="revanced_sb_new_segment_mark_time_as_question">%s を新しいセグメント (SponsorBlock) の開始位置 / 終了位置に設定しますか?</string>
|
<string name="revanced_sb_new_segment_mark_time_as_question">%s を新しいセグメント (SponsorBlock) の開始位置 / 終了位置に設定しますか?</string>
|
||||||
<string name="revanced_sb_new_segment_mark_start">開始位置</string>
|
<string name="revanced_sb_new_segment_mark_start">開始位置</string>
|
||||||
<string name="revanced_sb_new_segment_mark_end">終了位置</string>
|
<string name="revanced_sb_new_segment_mark_end">終了位置</string>
|
||||||
@@ -1641,10 +1641,6 @@ AV1 での動画再生は、カクつくまたはコマ落ちが発生する場
|
|||||||
<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>
|
||||||
<string name="revanced_spoof_video_streams_language_title">音声ストリームの言語</string>
|
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
<string name="revanced_spoof_video_streams_language_not_available">特定の音声言語を選択するには、「オリジナルの音声を強制的に使用」を無効にしてください</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_android_studio">Android Studio では、ストリームの言語を選択できません</string>
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -272,7 +272,6 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -1441,11 +1441,11 @@ YouTube Premium 사용자라면 이 설정은 필요하지 않을 수 있습니
|
|||||||
<string name="revanced_header_logo_entry_6">사용자 정의</string>
|
<string name="revanced_header_logo_entry_6">사용자 정의</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
|
||||||
<string name="revanced_bypass_image_region_restrictions_title">이미지 표시 제한 국가 우회하기</string>
|
<string name="revanced_bypass_image_region_restrictions_title">이미지 표시 제한 지역 우회하기</string>
|
||||||
<string name="revanced_bypass_image_region_restrictions_summary_on">이미지 호스트로 yt4.ggpht.com를 사용합니다</string>
|
<string name="revanced_bypass_image_region_restrictions_summary_on">이미지 호스트로 yt4.ggpht.com를 사용합니다</string>
|
||||||
<string name="revanced_bypass_image_region_restrictions_summary_off">"기본 이미지 호스트를 사용합니다
|
<string name="revanced_bypass_image_region_restrictions_summary_off">"기본 이미지 호스트를 사용합니다
|
||||||
|
|
||||||
이 기능을 활성화하면 일부 국가에서 차단된 이미지를 수신할 수 있습니다"</string>
|
이 기능을 활성화하면 일부 지역에서 차단된 이미지를 수신할 수 있습니다"</string>
|
||||||
</patch>
|
</patch>
|
||||||
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
|
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
|
||||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the Home tab. -->
|
<!-- 'Home' should be translated using the same localized wording YouTube displays for the Home tab. -->
|
||||||
@@ -1646,10 +1646,6 @@ AV1이 사용된 동영상 재생이 끊기거나 프레임이 손실될 수 있
|
|||||||
<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>
|
||||||
<string name="revanced_spoof_video_streams_language_title">오디오 스트림 언어</string>
|
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
<string name="revanced_spoof_video_streams_language_not_available">특정 오디오 언어를 선택하려면, \'원본 오디오 언어 강제로 활성화하기\'를 끄세요</string>
|
|
||||||
<string name="revanced_spoof_video_streams_language_android_studio">Android Studio에서는 스트림 언어를 선택할 수 없습니다</string>
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- Copyright 2024 ReVanced. Not licensed under GPL. See https://github.com/ReVanced/revanced-branding -->
|
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||||
@@ -257,7 +257,6 @@ Second \"item\" text"</string>
|
|||||||
</patch>
|
</patch>
|
||||||
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
|
||||||
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
|
||||||
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
|
|
||||||
</patch>
|
</patch>
|
||||||
</app>
|
</app>
|
||||||
<app id="music">
|
<app id="music">
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user