mirror of
https://github.com/revanced/revanced-patches.git
synced 2025-12-25 18:34:07 +01:00
Compare commits
39 Commits
v5.41.0-de
...
v5.42.0-de
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
526c7c05e2 | ||
|
|
d0d53d109e | ||
|
|
9d6731660b | ||
|
|
5a7e199162 | ||
|
|
0c662c8e3b | ||
|
|
08e8ead04f | ||
|
|
d238a42708 | ||
|
|
673609c2aa | ||
|
|
5f1a485e8f | ||
|
|
6961babee9 | ||
|
|
328c9b6bbe | ||
|
|
4c8b56f546 | ||
|
|
1754023dd6 | ||
|
|
328234f39a | ||
|
|
326953cfc3 | ||
|
|
725d5dc974 | ||
|
|
76b0364c5b | ||
|
|
1cbff799ad | ||
|
|
080a226614 | ||
|
|
2b71bd80c2 | ||
|
|
5cb46c4e91 | ||
|
|
52c369576d | ||
|
|
28799a548a | ||
|
|
1c80774d79 | ||
|
|
7817885cff | ||
|
|
9afe9afc67 | ||
|
|
3a8091ae00 | ||
|
|
6192ece114 | ||
|
|
5d9971444e | ||
|
|
cdfa75dd5a | ||
|
|
6f92b6c50b | ||
|
|
1e023fa1f3 | ||
|
|
00477bfebc | ||
|
|
4be00d09b7 | ||
|
|
50aca3314f | ||
|
|
15a7e540de | ||
|
|
041f7e0140 | ||
|
|
3bd76d60d6 | ||
|
|
1587178ff8 |
4
.github/workflows/build_pull_request.yml
vendored
4
.github/workflows/build_pull_request.yml
vendored
@@ -12,10 +12,10 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
uses: actions/setup-java@v5
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '17'
|
||||
|
||||
2
.github/workflows/open_pull_request.yml
vendored
2
.github/workflows/open_pull_request.yml
vendored
@@ -15,7 +15,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Open pull request
|
||||
uses: repo-sync/pull-request@v2
|
||||
|
||||
2
.github/workflows/pull_strings.yml
vendored
2
.github/workflows/pull_strings.yml
vendored
@@ -14,7 +14,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
ref: dev
|
||||
clean: true
|
||||
|
||||
2
.github/workflows/push_strings.yml
vendored
2
.github/workflows/push_strings.yml
vendored
@@ -14,7 +14,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Preprocess strings
|
||||
env:
|
||||
|
||||
8
.github/workflows/release.yml
vendored
8
.github/workflows/release.yml
vendored
@@ -18,10 +18,10 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
uses: actions/setup-java@v5
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '17'
|
||||
@@ -51,14 +51,14 @@ jobs:
|
||||
fingerprint: ${{ vars.GPG_FINGERPRINT }}
|
||||
|
||||
- name: Release
|
||||
uses: cycjimmy/semantic-release-action@v4
|
||||
uses: cycjimmy/semantic-release-action@v5
|
||||
id: release
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Attest
|
||||
if: steps.release.outputs.new_release_published == 'true'
|
||||
uses: actions/attest-build-provenance@v2
|
||||
uses: actions/attest-build-provenance@v3
|
||||
with:
|
||||
subject-name: 'ReVanced Patches ${{ steps.release.outputs.new_release_git_tag }}'
|
||||
subject-path: patches/build/libs/patches-*.rvp
|
||||
|
||||
2
.github/workflows/update-gradle-wrapper.yml
vendored
2
.github/workflows/update-gradle-wrapper.yml
vendored
@@ -10,7 +10,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Update Gradle Wrapper
|
||||
uses: gradle-update/update-gradle-wrapper-action@v1
|
||||
|
||||
126
CHANGELOG.md
126
CHANGELOG.md
@@ -1,3 +1,129 @@
|
||||
# [5.42.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.42.0-dev.7...v5.42.0-dev.8) (2025-10-01)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Force original language:** Resolve some videos using Swedish audio track ([9d67316](https://github.com/ReVanced/revanced-patches/commit/9d6731660ba0e19b863d05d54aa04f74a879f69b))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube Music:** Add `Force original audio` patch ([#6036](https://github.com/ReVanced/revanced-patches/issues/6036)) ([d0d53d1](https://github.com/ReVanced/revanced-patches/commit/d0d53d109e451759a029326873adfa36fba12b23))
|
||||
|
||||
# [5.42.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.42.0-dev.6...v5.42.0-dev.7) (2025-10-01)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Instagram:** Add `Open links externally` patch ([#6012](https://github.com/ReVanced/revanced-patches/issues/6012)) ([08e8ead](https://github.com/ReVanced/revanced-patches/commit/08e8ead04ffff47a4608a3db7aadc8d5feccd4ad))
|
||||
|
||||
# [5.42.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.42.0-dev.5...v5.42.0-dev.6) (2025-09-30)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **X / Twitter:** Remove non functional and obsolete patch `Open links with app chooser` ([#6033](https://github.com/ReVanced/revanced-patches/issues/6033)) ([673609c](https://github.com/ReVanced/revanced-patches/commit/673609c2aa87988cdc138eab101b9750fe6a7b62))
|
||||
|
||||
# [5.42.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.42.0-dev.4...v5.42.0-dev.5) (2025-09-28)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube Music:** Add `Custom branding` patch ([#6007](https://github.com/ReVanced/revanced-patches/issues/6007)) ([4c8b56f](https://github.com/ReVanced/revanced-patches/commit/4c8b56f5466b244737f501654eb7c5d34b6b2f88))
|
||||
|
||||
# [5.42.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.42.0-dev.3...v5.42.0-dev.4) (2025-09-28)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube Music - GmsCore support:** Handle sharing links to certain apps such as Instagram ([#6026](https://github.com/ReVanced/revanced-patches/issues/6026)) ([328234f](https://github.com/ReVanced/revanced-patches/commit/328234f39ada81542e596f04e8ce410c787c15c8))
|
||||
|
||||
# [5.42.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.42.0-dev.2...v5.42.0-dev.3) (2025-09-28)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Hide end screen cards:** Hide new type of end screen card ([#6027](https://github.com/ReVanced/revanced-patches/issues/6027)) ([76b0364](https://github.com/ReVanced/revanced-patches/commit/76b0364c5b5562c6a0d178d2bbe5b220f48aaca9))
|
||||
|
||||
# [5.42.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.42.0-dev.1...v5.42.0-dev.2) (2025-09-27)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Instagram - Hide navigation buttons:** Resolve app startup crash ([080a226](https://github.com/ReVanced/revanced-patches/commit/080a2266146798be71789c939deef2f289697523))
|
||||
|
||||
# [5.42.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.41.1-dev.2...v5.42.0-dev.1) (2025-09-27)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Viber:** Add `Hide navigation buttons` patch ([#5991](https://github.com/ReVanced/revanced-patches/issues/5991)) ([5cb46c4](https://github.com/ReVanced/revanced-patches/commit/5cb46c4e9180ebc16eddb983dad73d137d8ec047))
|
||||
|
||||
## [5.41.1-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.41.1-dev.1...v5.41.1-dev.2) (2025-09-27)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube Music - Hide cast button:** Fix patching error ([28799a5](https://github.com/ReVanced/revanced-patches/commit/28799a548a73651134ef304cb6cb542cf8e55abe))
|
||||
|
||||
## [5.41.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.41.0...v5.41.1-dev.1) (2025-09-27)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube Music - Hide cast button:** Resolve button not hiding ([7817885](https://github.com/ReVanced/revanced-patches/commit/7817885cffed66608039ab45881537cbd3069c9d))
|
||||
|
||||
# [5.41.0](https://github.com/ReVanced/revanced-patches/compare/v5.40.0...v5.41.0) (2025-09-27)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Instagram - Hide navigation buttons:** Remove button based on name ([#5971](https://github.com/ReVanced/revanced-patches/issues/5971)) ([6fa4043](https://github.com/ReVanced/revanced-patches/commit/6fa404331b5162682d83fba5f38ed570c31495fc))
|
||||
* **Instagram - Limit feed to followed profiles:** Preserve favorites feed ([#5963](https://github.com/ReVanced/revanced-patches/issues/5963)) ([ef51401](https://github.com/ReVanced/revanced-patches/commit/ef514017f46025d9aef6884424caeb0670514e7a))
|
||||
* **TikTok:** Show correct dialog restart text, use correct font color for non-dark mode ([d1a1293](https://github.com/ReVanced/revanced-patches/commit/d1a12930c35f630793a0f240d4203c2ff9060158))
|
||||
* **Twitch - Settings:** Fix missing style resources ([#5970](https://github.com/ReVanced/revanced-patches/issues/5970)) ([8c22995](https://github.com/ReVanced/revanced-patches/commit/8c229954d7f232a7a472ca49f1b5e7cdc475bbcc))
|
||||
* **YouTube - Hide Shorts components:** Fix "Hide preview comment" ([#5990](https://github.com/ReVanced/revanced-patches/issues/5990)) ([dd4e2cd](https://github.com/ReVanced/revanced-patches/commit/dd4e2cd0855ccc51b94593004fdd8150ac3b41cc))
|
||||
* **YouTube - Return YouTube Dislike:** Do not show error toast if API returns 401 status ([#5949](https://github.com/ReVanced/revanced-patches/issues/5949)) ([58d088a](https://github.com/ReVanced/revanced-patches/commit/58d088ab307440a6912a867246da799b7dd6499b))
|
||||
* **YouTube - Settings:** Handle on screen back swipe gesture ([#6002](https://github.com/ReVanced/revanced-patches/issues/6002)) ([6f92b6c](https://github.com/ReVanced/revanced-patches/commit/6f92b6c50beab091f5f7ef7386579eda38cb4c66))
|
||||
* **YouTube - Settings:** Use an overlay to show search results ([#5806](https://github.com/ReVanced/revanced-patches/issues/5806)) ([ece8076](https://github.com/ReVanced/revanced-patches/commit/ece8076f7cefd752b97515014bc50fe4fd80171e))
|
||||
* **YouTube - SponsorBlock:** Show category color dot in voting dialog menu ([4be00d0](https://github.com/ReVanced/revanced-patches/commit/4be00d09b7b87dcfac324de8709af06e9f730791))
|
||||
* **YouTube - SponsorBlock:** Show category color in create new segment menu ([#5987](https://github.com/ReVanced/revanced-patches/issues/5987)) ([ffd933c](https://github.com/ReVanced/revanced-patches/commit/ffd933c6734274cdde5aaec0159b67f173f9228c))
|
||||
* **YouTube - Spoof video streams:** Update client side effects summary text ([a0a62dd](https://github.com/ReVanced/revanced-patches/commit/a0a62ddad26cfab3e04907fae5532e1ba1fdf710))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Tumblr:** Add `Disable Tumblr TV` patch ([#5959](https://github.com/ReVanced/revanced-patches/issues/5959)) ([212418b](https://github.com/ReVanced/revanced-patches/commit/212418b8db9a730ae9efa89ad2bef24952afbadd))
|
||||
* **YouTube - Hide layout components:** Add "Hide Emoji and Timestamp buttons" setting ([#5992](https://github.com/ReVanced/revanced-patches/issues/5992)) ([2b555f6](https://github.com/ReVanced/revanced-patches/commit/2b555f67f07e0de5703c630888ce2fbba3145192))
|
||||
* **YouTube - Hide layout components:** Add "Hide view count" and "Hide upload time" settings ([#5983](https://github.com/ReVanced/revanced-patches/issues/5983)) ([7a37d85](https://github.com/ReVanced/revanced-patches/commit/7a37d858fb937c6bdc2219103dac765b62600e6c))
|
||||
* **YouTube - Loop video:** Add player button to change loop video state ([#5961](https://github.com/ReVanced/revanced-patches/issues/5961)) ([dfb5407](https://github.com/ReVanced/revanced-patches/commit/dfb5407e67222e80e23c8935e04b6dbf1a43d757))
|
||||
* **YouTube - Spoof app version:** Add spoof target `20.05.46` that fixes transcript functionality ([5823f0e](https://github.com/ReVanced/revanced-patches/commit/5823f0e982e87b4a35d30feeca8a7e16edfebc5f))
|
||||
* **YouTube Music:** Add `Check watch history domain name resolution` ([#5979](https://github.com/ReVanced/revanced-patches/issues/5979)) ([8af70fe](https://github.com/ReVanced/revanced-patches/commit/8af70fe2d10c0f4da2d7e53bd00f5b3979775d5d))
|
||||
* **YouTube Music:** Add `Sanitize sharing links` patch ([#5952](https://github.com/ReVanced/revanced-patches/issues/5952)) ([45c1ee8](https://github.com/ReVanced/revanced-patches/commit/45c1ee8a12dc777a371875d90741a05cf5d8e9dd))
|
||||
* **YouTube Music:** Add `Theme` patch ([#5984](https://github.com/ReVanced/revanced-patches/issues/5984)) ([3bd76d6](https://github.com/ReVanced/revanced-patches/commit/3bd76d60d664befff29c24c9de56dac1486a6e67))
|
||||
* **YouTube:** Add `Disable video codecs` patch ([#5981](https://github.com/ReVanced/revanced-patches/issues/5981)) ([bfbffbd](https://github.com/ReVanced/revanced-patches/commit/bfbffbd1f5aa867027053e25b343a51a606216a3))
|
||||
|
||||
# [5.41.0-dev.18](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.17...v5.41.0-dev.18) (2025-09-26)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Settings:** Handle on screen back swipe gesture ([#6002](https://github.com/ReVanced/revanced-patches/issues/6002)) ([6f92b6c](https://github.com/ReVanced/revanced-patches/commit/6f92b6c50beab091f5f7ef7386579eda38cb4c66))
|
||||
|
||||
# [5.41.0-dev.17](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.16...v5.41.0-dev.17) (2025-09-26)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - SponsorBlock:** Show category color dot in voting dialog menu ([4be00d0](https://github.com/ReVanced/revanced-patches/commit/4be00d09b7b87dcfac324de8709af06e9f730791))
|
||||
|
||||
# [5.41.0-dev.16](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.15...v5.41.0-dev.16) (2025-09-26)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube Music:** Add `Theme` patch ([#5984](https://github.com/ReVanced/revanced-patches/issues/5984)) ([3bd76d6](https://github.com/ReVanced/revanced-patches/commit/3bd76d60d664befff29c24c9de56dac1486a6e67))
|
||||
|
||||
# [5.41.0-dev.15](https://github.com/ReVanced/revanced-patches/compare/v5.41.0-dev.14...v5.41.0-dev.15) (2025-09-25)
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package app.revanced.extension.instagram.misc.links;
|
||||
|
||||
import android.net.Uri;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final class OpenLinksExternallyPatch {
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean openExternally(String url) {
|
||||
try {
|
||||
// The "url" parameter to this function will be of the form.
|
||||
// https://l.instagram.com/?u=<actual url>&e=<tracking id>
|
||||
String actualUrl = Uri.parse(url).getQueryParameter("u");
|
||||
if (actualUrl != null) {
|
||||
Utils.openLink(actualUrl);
|
||||
return true;
|
||||
}
|
||||
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "openExternally failure", ex);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package app.revanced.extension.music.patches;
|
||||
|
||||
import app.revanced.extension.music.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class ForceOriginalAudioPatch {
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static void setPreferredLanguage() {
|
||||
app.revanced.extension.shared.patches.ForceOriginalAudioPatch.setEnabled(
|
||||
Settings.FORCE_ORIGINAL_AUDIO.get(),
|
||||
Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get()
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package app.revanced.extension.music.patches.theme;
|
||||
|
||||
import app.revanced.extension.shared.theme.BaseThemePatch;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class ThemePatch extends BaseThemePatch {
|
||||
|
||||
// Color constants used in relation with litho components.
|
||||
private static final int[] DARK_VALUES = {
|
||||
0xFF212121, // Comments box background.
|
||||
0xFF030303, // Button container background in album.
|
||||
0xFF000000, // Button container background in playlist.
|
||||
};
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
* <p>
|
||||
* Change the color of Litho components.
|
||||
* If the color of the component matches one of the values, return the background color.
|
||||
*
|
||||
* @param originalValue The original color value.
|
||||
* @return The new or original color value.
|
||||
*/
|
||||
public static int getValue(int originalValue) {
|
||||
return processColorValue(originalValue, DARK_VALUES, null);
|
||||
}
|
||||
}
|
||||
@@ -32,4 +32,6 @@ public class Settings extends BaseSettings {
|
||||
// Miscellaneous
|
||||
public static final EnumSetting<ClientType> SPOOF_VIDEO_STREAMS_CLIENT_TYPE = new EnumSetting<>("revanced_spoof_video_streams_client_type",
|
||||
ClientType.ANDROID_VR_1_43_32, true, parent(SPOOF_VIDEO_STREAMS));
|
||||
|
||||
public static final BooleanSetting FORCE_ORIGINAL_AUDIO = new BooleanSetting("revanced_force_original_audio", TRUE, true);
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Color;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
@@ -696,6 +697,18 @@ public class Utils {
|
||||
}
|
||||
}
|
||||
|
||||
public static void openLink(String url) {
|
||||
try {
|
||||
Intent intent = new Intent("android.intent.action.VIEW", Uri.parse(url));
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
|
||||
Logger.printInfo(() -> "Opening link with external browser: " + intent);
|
||||
getContext().startActivity(intent);
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "openLink failure", ex);
|
||||
}
|
||||
}
|
||||
|
||||
public enum NetworkType {
|
||||
NONE,
|
||||
MOBILE,
|
||||
|
||||
@@ -46,7 +46,7 @@ public class CheckWatchHistoryDomainNameResolutionPatch {
|
||||
/**
|
||||
* Injection point.
|
||||
*
|
||||
* Checks if s.youtube.com is blacklisted and playback history will fail to work.
|
||||
* Checks if YouTube watch history endpoint cannot be reached.
|
||||
*/
|
||||
public static void checkDnsResolver(Activity context) {
|
||||
if (!Utils.isNetworkConnected() || !BaseSettings.CHECK_WATCH_HISTORY_DOMAIN_NAME.get()) return;
|
||||
@@ -67,28 +67,20 @@ public class CheckWatchHistoryDomainNameResolutionPatch {
|
||||
}
|
||||
|
||||
Utils.runOnMainThread(() -> {
|
||||
try {
|
||||
// Create the custom dialog.
|
||||
Pair<Dialog, LinearLayout> dialogPair = CustomDialog.create(
|
||||
context,
|
||||
str("revanced_check_watch_history_domain_name_dialog_title"), // Title.
|
||||
Html.fromHtml(str("revanced_check_watch_history_domain_name_dialog_message")), // Message (HTML).
|
||||
null, // No EditText.
|
||||
null, // OK button text.
|
||||
() -> {}, // OK button action (just dismiss).
|
||||
() -> {}, // Cancel button action (just dismiss).
|
||||
str("revanced_check_watch_history_domain_name_dialog_ignore"), // Neutral button text.
|
||||
() -> BaseSettings.CHECK_WATCH_HISTORY_DOMAIN_NAME.save(false), // Neutral button action (Ignore).
|
||||
true // Dismiss dialog on Neutral button click.
|
||||
);
|
||||
Pair<Dialog, LinearLayout> dialogPair = CustomDialog.create(
|
||||
context,
|
||||
str("revanced_check_watch_history_domain_name_dialog_title"), // Title.
|
||||
Html.fromHtml(str("revanced_check_watch_history_domain_name_dialog_message")), // Message (HTML).
|
||||
null, // No EditText.
|
||||
null, // OK button text.
|
||||
() -> {}, // OK button action (just dismiss).
|
||||
null, // No cancel button.
|
||||
str("revanced_check_watch_history_domain_name_dialog_ignore"), // Neutral button text.
|
||||
() -> BaseSettings.CHECK_WATCH_HISTORY_DOMAIN_NAME.save(false), // Neutral button action (Ignore).
|
||||
true // Dismiss dialog on Neutral button click.
|
||||
);
|
||||
|
||||
// Show the dialog.
|
||||
Dialog dialog = dialogPair.first;
|
||||
|
||||
Utils.showDialog(context, dialog, false, null);
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "checkDnsResolver dialog creation failure", ex);
|
||||
}
|
||||
Utils.showDialog(context, dialogPair.first, false, null);
|
||||
});
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "checkDnsResolver failure", ex);
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
package app.revanced.extension.shared.patches;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.settings.AppLanguage;
|
||||
import app.revanced.extension.shared.spoof.ClientType;
|
||||
import app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class ForceOriginalAudioPatch {
|
||||
|
||||
private static final String DEFAULT_AUDIO_TRACKS_SUFFIX = ".4";
|
||||
|
||||
private static volatile boolean enabled = false;
|
||||
|
||||
public static void setEnabled(boolean isEnabled, ClientType client) {
|
||||
enabled = isEnabled;
|
||||
|
||||
if (isEnabled
|
||||
&& SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams()
|
||||
&& !client.useAuth) {
|
||||
// If client spoofing does not use authentication and lacks multi-audio streams,
|
||||
// then can use any language code for the request and if that requested language is
|
||||
// not available YT uses the original audio language. Authenticated requests ignore
|
||||
// the language code and always use the account language. Use a language that is
|
||||
// not auto-dubbed by YouTube: https://support.google.com/youtube/answer/15569972
|
||||
// but the language is also supported natively by the Meta Quest device that
|
||||
// Android VR is spoofing.
|
||||
AppLanguage override = AppLanguage.NB; // Norwegian Bokmal.
|
||||
Logger.printDebug(() -> "Setting language override: " + override);
|
||||
SpoofVideoStreamsPatch.setLanguageOverride(override);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean ignoreDefaultAudioStream(boolean original) {
|
||||
if (enabled) {
|
||||
return false;
|
||||
}
|
||||
return original;
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean isDefaultAudioStream(boolean isDefault, String audioTrackId, String audioTrackDisplayName) {
|
||||
try {
|
||||
if (!enabled) {
|
||||
return isDefault;
|
||||
}
|
||||
|
||||
if (audioTrackId.isEmpty()) {
|
||||
// Older app targets can have empty audio tracks and these might be placeholders.
|
||||
// The real audio tracks are called after these.
|
||||
return isDefault;
|
||||
}
|
||||
|
||||
Logger.printDebug(() -> "default: " + String.format("%-5s", isDefault) + " id: "
|
||||
+ String.format("%-8s", audioTrackId) + " name:" + audioTrackDisplayName);
|
||||
|
||||
final boolean isOriginal = audioTrackId.endsWith(DEFAULT_AUDIO_TRACKS_SUFFIX);
|
||||
if (isOriginal) {
|
||||
Logger.printDebug(() -> "Using audio: " + audioTrackId);
|
||||
}
|
||||
|
||||
return isOriginal;
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "isDefaultAudioStream failure", ex);
|
||||
return isDefault;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -36,8 +36,8 @@ public enum AppLanguage {
|
||||
FR,
|
||||
GL,
|
||||
GU,
|
||||
HI,
|
||||
HE, // App uses obsolete 'IW' and not the modern 'HE' ISO code.
|
||||
HI,
|
||||
HR,
|
||||
HU,
|
||||
HY,
|
||||
@@ -60,9 +60,9 @@ public enum AppLanguage {
|
||||
MR,
|
||||
MS,
|
||||
MY,
|
||||
NB,
|
||||
NE,
|
||||
NL,
|
||||
NB,
|
||||
OR,
|
||||
PA,
|
||||
PL,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package app.revanced.extension.youtube.settings.preference;
|
||||
package app.revanced.extension.shared.settings.preference;
|
||||
|
||||
import static app.revanced.extension.shared.StringRef.str;
|
||||
|
||||
@@ -6,17 +6,17 @@ import android.content.Context;
|
||||
import android.preference.SwitchPreference;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
import app.revanced.extension.shared.settings.BaseSettings;
|
||||
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 ForceOriginalAudioSwitchPreference extends SwitchPreference {
|
||||
|
||||
// Spoof stream patch is not included, or is not currently spoofing to Android Studio.
|
||||
private static final boolean available = !SpoofVideoStreamsPatch.isPatchIncluded()
|
||||
|| !(Settings.SPOOF_VIDEO_STREAMS.get()
|
||||
&& Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() == ClientType.ANDROID_CREATOR);
|
||||
|| !(BaseSettings.SPOOF_VIDEO_STREAMS.get()
|
||||
&& SpoofVideoStreamsPatch.getPreferredClient() == ClientType.ANDROID_CREATOR);
|
||||
|
||||
{
|
||||
if (!available) {
|
||||
@@ -66,6 +66,10 @@ public class SpoofVideoStreamsPatch {
|
||||
StreamingDataRequest.setClientOrderToUse(availableClients, client);
|
||||
}
|
||||
|
||||
public static ClientType getPreferredClient() {
|
||||
return preferredClient;
|
||||
}
|
||||
|
||||
public static boolean spoofingToClientWithNoMultiAudioStreams() {
|
||||
return isPatchIncluded()
|
||||
&& SPOOF_STREAMING_DATA
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
package app.revanced.extension.shared.theme;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import app.revanced.extension.shared.Utils;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public abstract class BaseThemePatch {
|
||||
// Background colors.
|
||||
protected static final int BLACK_COLOR = Utils.getResourceColor("yt_black1");
|
||||
protected static final int WHITE_COLOR = Utils.getResourceColor("yt_white1");
|
||||
|
||||
/**
|
||||
* Check if a value matches any of the provided values.
|
||||
*
|
||||
* @param value The value to check.
|
||||
* @param of The array of values to compare against.
|
||||
* @return True if the value matches any of the provided values.
|
||||
*/
|
||||
protected static boolean anyEquals(int value, int... of) {
|
||||
for (int v : of) {
|
||||
if (value == v) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to process color values for Litho components.
|
||||
*
|
||||
* @param originalValue The original color value.
|
||||
* @param darkValues Array of dark mode color values to match.
|
||||
* @param lightValues Array of light mode color values to match.
|
||||
* @return The new or original color value.
|
||||
*/
|
||||
protected static int processColorValue(int originalValue, int[] darkValues, @Nullable int[] lightValues) {
|
||||
if (Utils.isDarkModeEnabled()) {
|
||||
if (anyEquals(originalValue, darkValues)) {
|
||||
return BLACK_COLOR;
|
||||
}
|
||||
} else if (lightValues != null && anyEquals(originalValue, lightValues)) {
|
||||
return WHITE_COLOR;
|
||||
}
|
||||
|
||||
return originalValue;
|
||||
}
|
||||
}
|
||||
@@ -1 +1,3 @@
|
||||
// Do not remove. Necessary for the extension plugin to be applied to the project.
|
||||
dependencies {
|
||||
compileOnly(project(":extensions:shared:library"))
|
||||
}
|
||||
|
||||
@@ -1,15 +1,22 @@
|
||||
package app.revanced.twitter.patches.links;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final class ChangeLinkSharingDomainPatch {
|
||||
private static final String DOMAIN_NAME = "https://fxtwitter.com";
|
||||
private static final String LINK_FORMAT = "%s/%s/status/%s";
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static String formatResourceLink(Object... formatArgs) {
|
||||
String username = (String) formatArgs[0];
|
||||
String tweetId = (String) formatArgs[1];
|
||||
return String.format(LINK_FORMAT, DOMAIN_NAME, username, tweetId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static String formatLink(long tweetId, String username) {
|
||||
return String.format(LINK_FORMAT, DOMAIN_NAME, username, tweetId);
|
||||
}
|
||||
|
||||
@@ -2,11 +2,18 @@ package app.revanced.twitter.patches.links;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
@Deprecated(forRemoval = true)
|
||||
public final class OpenLinksWithAppChooserPatch {
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static void openWithChooser(final Context context, final Intent intent) {
|
||||
Log.d("ReVanced", "Opening intent with chooser: " + intent);
|
||||
Logger.printInfo(() -> "Opening intent with chooser: " + intent);
|
||||
|
||||
intent.setAction("android.intent.action.VIEW");
|
||||
|
||||
|
||||
@@ -1,72 +1,17 @@
|
||||
package app.revanced.extension.youtube.patches;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.settings.AppLanguage;
|
||||
import app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class ForceOriginalAudioPatch {
|
||||
|
||||
private static final String DEFAULT_AUDIO_TRACKS_SUFFIX = ".4";
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static void setPreferredLanguage() {
|
||||
if (Settings.FORCE_ORIGINAL_AUDIO.get()
|
||||
&& SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams()
|
||||
&& !Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get().useAuth) {
|
||||
// If client spoofing does not use authentication and lacks multi-audio streams,
|
||||
// then can use any language code for the request and if that requested language is
|
||||
// not available YT uses the original audio language. Authenticated requests ignore
|
||||
// the language code and always use the account language. Use a language that is
|
||||
// not auto-dubbed by YouTube: https://support.google.com/youtube/answer/15569972
|
||||
// but the language is also supported natively by the Meta Quest device that
|
||||
// Android VR is spoofing.
|
||||
AppLanguage override = AppLanguage.SV;
|
||||
Logger.printDebug(() -> "Setting language override: " + override);
|
||||
SpoofVideoStreamsPatch.setLanguageOverride(override);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean ignoreDefaultAudioStream(boolean original) {
|
||||
if (Settings.FORCE_ORIGINAL_AUDIO.get()) {
|
||||
return false;
|
||||
}
|
||||
return original;
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean isDefaultAudioStream(boolean isDefault, String audioTrackId, String audioTrackDisplayName) {
|
||||
try {
|
||||
if (!Settings.FORCE_ORIGINAL_AUDIO.get()) {
|
||||
return isDefault;
|
||||
}
|
||||
|
||||
if (audioTrackId.isEmpty()) {
|
||||
// Older app targets can have empty audio tracks and these might be placeholders.
|
||||
// The real audio tracks are called after these.
|
||||
return isDefault;
|
||||
}
|
||||
|
||||
Logger.printDebug(() -> "default: " + String.format("%-5s", isDefault) + " id: "
|
||||
+ String.format("%-8s", audioTrackId) + " name:" + audioTrackDisplayName);
|
||||
|
||||
final boolean isOriginal = audioTrackId.endsWith(DEFAULT_AUDIO_TRACKS_SUFFIX);
|
||||
if (isOriginal) {
|
||||
Logger.printDebug(() -> "Using audio: " + audioTrackId);
|
||||
}
|
||||
|
||||
return isOriginal;
|
||||
} catch (Exception ex) {
|
||||
Logger.printException(() -> "isDefaultAudioStream failure", ex);
|
||||
return isDefault;
|
||||
}
|
||||
app.revanced.extension.shared.patches.ForceOriginalAudioPatch.setEnabled(
|
||||
Settings.FORCE_ORIGINAL_AUDIO.get(),
|
||||
Settings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package app.revanced.extension.youtube.patches;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class HideEndScreenCardsPatch {
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static void hideEndScreenCardView(View view) {
|
||||
Utils.hideViewUnderCondition(Settings.HIDE_ENDSCREEN_CARDS, view);
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean hideEndScreenCards() {
|
||||
return Settings.HIDE_ENDSCREEN_CARDS.get();
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
package app.revanced.extension.youtube.patches;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class HideEndscreenCardsPatch {
|
||||
//Used by app.revanced.patches.youtube.layout.hideendscreencards.bytecode.patch.HideEndscreenCardsPatch
|
||||
public static void hideEndscreen(View view) {
|
||||
if (!Settings.HIDE_ENDSCREEN_CARDS.get()) return;
|
||||
view.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
@@ -19,7 +19,7 @@ import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.settings.Setting;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
@SuppressWarnings("SpellCheckingInspection")
|
||||
@SuppressWarnings({"unused", "SpellCheckingInspection"})
|
||||
public final class MiniplayerPatch {
|
||||
|
||||
/**
|
||||
@@ -129,7 +129,7 @@ public final class MiniplayerPatch {
|
||||
(CURRENT_TYPE.isModern() && Settings.MINIPLAYER_DOUBLE_TAP_ACTION.get());
|
||||
|
||||
private static final boolean DRAG_AND_DROP_ENABLED =
|
||||
CURRENT_TYPE.isModern() && Settings.MINIPLAYER_DRAG_AND_DROP.get();
|
||||
CURRENT_TYPE.isModern() && !Settings.MINIPLAYER_DISABLE_DRAG_AND_DROP.get();
|
||||
|
||||
private static final boolean HIDE_OVERLAY_BUTTONS_ENABLED =
|
||||
Settings.MINIPLAYER_HIDE_OVERLAY_BUTTONS.get()
|
||||
@@ -145,10 +145,10 @@ public final class MiniplayerPatch {
|
||||
&& (VersionCheckPatch.IS_19_34_OR_GREATER || Settings.MINIPLAYER_HIDE_REWIND_FORWARD.get());
|
||||
|
||||
private static final boolean MINIPLAYER_ROUNDED_CORNERS_ENABLED =
|
||||
CURRENT_TYPE.isModern() && Settings.MINIPLAYER_ROUNDED_CORNERS.get();
|
||||
CURRENT_TYPE.isModern() && !Settings.MINIPLAYER_DISABLE_ROUNDED_CORNERS.get();
|
||||
|
||||
private static final boolean MINIPLAYER_HORIZONTAL_DRAG_ENABLED =
|
||||
DRAG_AND_DROP_ENABLED && Settings.MINIPLAYER_HORIZONTAL_DRAG.get();
|
||||
DRAG_AND_DROP_ENABLED && !Settings.MINIPLAYER_DISABLE_HORIZONTAL_DRAG.get();
|
||||
|
||||
/**
|
||||
* Remove a broken and always present subtitle text that is only
|
||||
@@ -173,14 +173,14 @@ public final class MiniplayerPatch {
|
||||
public static final class MiniplayerHorizontalDragAvailability implements Setting.Availability {
|
||||
@Override
|
||||
public boolean isAvailable() {
|
||||
return Settings.MINIPLAYER_TYPE.get().isModern() && Settings.MINIPLAYER_DRAG_AND_DROP.get();
|
||||
return Settings.MINIPLAYER_TYPE.get().isModern() && !Settings.MINIPLAYER_DISABLE_DRAG_AND_DROP.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Setting<?>> getParentSettings() {
|
||||
return List.of(
|
||||
Settings.MINIPLAYER_TYPE,
|
||||
Settings.MINIPLAYER_DRAG_AND_DROP
|
||||
Settings.MINIPLAYER_DISABLE_DRAG_AND_DROP
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -192,7 +192,7 @@ public final class MiniplayerPatch {
|
||||
return type == MODERN_4
|
||||
|| (!IS_19_20_OR_GREATER && (type == MODERN_1 || type == MODERN_3))
|
||||
|| (!IS_19_26_OR_GREATER && type == MODERN_1
|
||||
&& !Settings.MINIPLAYER_DOUBLE_TAP_ACTION.get() && !Settings.MINIPLAYER_DRAG_AND_DROP.get())
|
||||
&& !Settings.MINIPLAYER_DOUBLE_TAP_ACTION.get() && Settings.MINIPLAYER_DISABLE_DRAG_AND_DROP.get())
|
||||
|| (IS_19_29_OR_GREATER && type == MODERN_3);
|
||||
}
|
||||
|
||||
@@ -201,7 +201,7 @@ public final class MiniplayerPatch {
|
||||
return List.of(
|
||||
Settings.MINIPLAYER_TYPE,
|
||||
Settings.MINIPLAYER_DOUBLE_TAP_ACTION,
|
||||
Settings.MINIPLAYER_DRAG_AND_DROP
|
||||
Settings.MINIPLAYER_DISABLE_DRAG_AND_DROP
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,16 +1,13 @@
|
||||
package app.revanced.extension.youtube.patches.theme;
|
||||
|
||||
import static app.revanced.extension.youtube.patches.theme.ThemePatch.SplashScreenAnimationStyle.styleFromOrdinal;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.theme.BaseThemePatch;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class ThemePatch {
|
||||
|
||||
public class ThemePatch extends BaseThemePatch {
|
||||
public enum SplashScreenAnimationStyle {
|
||||
DEFAULT(0),
|
||||
FPS_60_ONE_SECOND(1),
|
||||
@@ -43,57 +40,39 @@ public class ThemePatch {
|
||||
}
|
||||
}
|
||||
|
||||
// color constants used in relation with litho components
|
||||
// Color constants used in relation with litho components.
|
||||
private static final int[] WHITE_VALUES = {
|
||||
-1, // comments chip background
|
||||
-394759, // music related results panel background
|
||||
-83886081, // video chapters list background
|
||||
0xFFFFFFFF, // Comments chip background.
|
||||
0xFFF9F9F9, // Music related results panel background.
|
||||
0xFAFFFFFF, // Video chapters list background.
|
||||
};
|
||||
|
||||
private static final int[] DARK_VALUES = {
|
||||
-14145496, // explore drawer background
|
||||
-14606047, // comments chip background
|
||||
-15198184, // music related results panel background
|
||||
-15790321, // comments chip background (new layout)
|
||||
-98492127 // video chapters list background
|
||||
0xFF282828, // Explore drawer background.
|
||||
0xFF212121, // Comments chip background.
|
||||
0xFF181818, // Music related results panel background.
|
||||
0xFF0F0F0F, // Comments chip background (new layout).
|
||||
0xFA212121, // Video chapters list background.
|
||||
};
|
||||
|
||||
// Background colors.
|
||||
private static final int WHITE_COLOR = Utils.getResourceColor("yt_white1");
|
||||
private static final int BLACK_COLOR = Utils.getResourceColor("yt_black1");
|
||||
|
||||
private static final boolean GRADIENT_LOADING_SCREEN_ENABLED = Settings.GRADIENT_LOADING_SCREEN.get();
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*
|
||||
* <p>
|
||||
* Change the color of Litho components.
|
||||
* If the color of the component matches one of the values, return the background color .
|
||||
* If the color of the component matches one of the values, return the background color.
|
||||
*
|
||||
* @param originalValue The original color value.
|
||||
* @return The new or original color value
|
||||
* @return The new or original color value.
|
||||
*/
|
||||
public static int getValue(int originalValue) {
|
||||
if (Utils.isDarkModeEnabled()) {
|
||||
if (anyEquals(originalValue, DARK_VALUES)) return BLACK_COLOR;
|
||||
} else {
|
||||
if (anyEquals(originalValue, WHITE_VALUES)) return WHITE_COLOR;
|
||||
}
|
||||
|
||||
return originalValue;
|
||||
}
|
||||
|
||||
private static boolean anyEquals(int value, int... of) {
|
||||
for (int v : of) if (value == v) return true;
|
||||
|
||||
return false;
|
||||
return processColorValue(originalValue, DARK_VALUES, WHITE_VALUES);
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean gradientLoadingScreenEnabled(boolean original) {
|
||||
return GRADIENT_LOADING_SCREEN_ENABLED;
|
||||
return Settings.GRADIENT_LOADING_SCREEN.get();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -108,7 +87,7 @@ public class ThemePatch {
|
||||
final int replacement = style.style;
|
||||
if (original != replacement) {
|
||||
Logger.printDebug(() -> "Overriding splash screen style from: "
|
||||
+ styleFromOrdinal(original) + " to: " + style);
|
||||
+ SplashScreenAnimationStyle.styleFromOrdinal(original) + " to: " + style);
|
||||
}
|
||||
|
||||
return replacement;
|
||||
|
||||
@@ -11,6 +11,10 @@ import static app.revanced.extension.youtube.patches.ChangeHeaderPatch.HeaderLog
|
||||
import static app.revanced.extension.youtube.patches.ChangeStartPagePatch.ChangeStartPageTypeAvailability;
|
||||
import static app.revanced.extension.youtube.patches.ChangeStartPagePatch.StartPage;
|
||||
import static app.revanced.extension.youtube.patches.ExitFullscreenPatch.FullscreenMode;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerAnyModernAvailability;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerHideOverlayButtonsAvailability;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerHideRewindOrOverlayOpacityAvailability;
|
||||
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.MiniplayerType;
|
||||
import static app.revanced.extension.youtube.patches.MiniplayerPatch.MiniplayerType.MINIMAL;
|
||||
@@ -51,6 +55,7 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting ADVANCED_VIDEO_QUALITY_MENU = new BooleanSetting("revanced_advanced_video_quality_menu", TRUE);
|
||||
public static final BooleanSetting DISABLE_HDR_VIDEO = new BooleanSetting("revanced_disable_hdr_video", FALSE);
|
||||
public static final BooleanSetting FORCE_AVC_CODEC = new BooleanSetting("revanced_force_avc_codec", FALSE, true, "revanced_force_avc_codec_user_dialog_message");
|
||||
public static final BooleanSetting FORCE_ORIGINAL_AUDIO = new BooleanSetting("revanced_force_original_audio", FALSE, true);
|
||||
public static final IntegerSetting VIDEO_QUALITY_DEFAULT_WIFI = new IntegerSetting("revanced_video_quality_default_wifi", -2);
|
||||
public static final IntegerSetting VIDEO_QUALITY_DEFAULT_MOBILE = new IntegerSetting("revanced_video_quality_default_mobile", -2);
|
||||
public static final BooleanSetting REMEMBER_VIDEO_QUALITY_LAST_SELECTED = new BooleanSetting("revanced_remember_video_quality_last_selected", FALSE);
|
||||
@@ -71,9 +76,6 @@ public class Settings extends BaseSettings {
|
||||
public static final StringSetting CUSTOM_PLAYBACK_SPEEDS = new StringSetting("revanced_custom_playback_speeds",
|
||||
"0.25\n0.5\n0.75\n1.0\n1.25\n1.5\n1.75\n2.0\n2.5\n3.0\n4.0\n5.0\n6.0\n7.0\n8.0", true);
|
||||
|
||||
// Audio
|
||||
public static final BooleanSetting FORCE_ORIGINAL_AUDIO = new BooleanSetting("revanced_force_original_audio", FALSE, true);
|
||||
|
||||
// Ads
|
||||
public static final BooleanSetting HIDE_CREATOR_STORE_SHELF = new BooleanSetting("revanced_hide_creator_store_shelf", TRUE);
|
||||
public static final BooleanSetting HIDE_END_SCREEN_STORE_BANNER = new BooleanSetting("revanced_hide_end_screen_store_banner", TRUE, true);
|
||||
@@ -177,15 +179,15 @@ public class Settings extends BaseSettings {
|
||||
|
||||
// Miniplayer
|
||||
public static final EnumSetting<MiniplayerType> MINIPLAYER_TYPE = new EnumSetting<>("revanced_miniplayer_type", MiniplayerType.DEFAULT, true);
|
||||
public static final BooleanSetting MINIPLAYER_DOUBLE_TAP_ACTION = new BooleanSetting("revanced_miniplayer_double_tap_action", TRUE, true, new MiniplayerPatch.MiniplayerAnyModernAvailability());
|
||||
public static final BooleanSetting MINIPLAYER_DRAG_AND_DROP = new BooleanSetting("revanced_miniplayer_drag_and_drop", TRUE, true, new MiniplayerPatch.MiniplayerAnyModernAvailability());
|
||||
public static final BooleanSetting MINIPLAYER_HORIZONTAL_DRAG = new BooleanSetting("revanced_miniplayer_horizontal_drag", FALSE, true, new MiniplayerHorizontalDragAvailability());
|
||||
public static final BooleanSetting MINIPLAYER_HIDE_OVERLAY_BUTTONS = new BooleanSetting("revanced_miniplayer_hide_overlay_buttons", FALSE, true, new MiniplayerPatch.MiniplayerHideOverlayButtonsAvailability());
|
||||
public static final BooleanSetting MINIPLAYER_HIDE_SUBTEXT = new BooleanSetting("revanced_miniplayer_hide_subtext", FALSE, true, new MiniplayerPatch.MiniplayerHideSubtextsAvailability());
|
||||
public static final BooleanSetting MINIPLAYER_DISABLE_DRAG_AND_DROP = new BooleanSetting("revanced_miniplayer_disable_drag_and_drop", FALSE, true, new MiniplayerAnyModernAvailability());
|
||||
public static final BooleanSetting MINIPLAYER_DISABLE_HORIZONTAL_DRAG = new BooleanSetting("revanced_miniplayer_disable_horizontal_drag", FALSE, true, new MiniplayerHorizontalDragAvailability());
|
||||
public static final BooleanSetting MINIPLAYER_DISABLE_ROUNDED_CORNERS = new BooleanSetting("revanced_miniplayer_disable_rounded_corners", FALSE, true, new MiniplayerAnyModernAvailability());
|
||||
public static final BooleanSetting MINIPLAYER_DOUBLE_TAP_ACTION = new BooleanSetting("revanced_miniplayer_double_tap_action", TRUE, true, new MiniplayerAnyModernAvailability());
|
||||
public static final BooleanSetting MINIPLAYER_HIDE_OVERLAY_BUTTONS = new BooleanSetting("revanced_miniplayer_hide_overlay_buttons", FALSE, true, new MiniplayerHideOverlayButtonsAvailability());
|
||||
public static final BooleanSetting MINIPLAYER_HIDE_SUBTEXT = new BooleanSetting("revanced_miniplayer_hide_subtext", FALSE, true, new MiniplayerHideSubtextsAvailability());
|
||||
public static final BooleanSetting MINIPLAYER_HIDE_REWIND_FORWARD = new BooleanSetting("revanced_miniplayer_hide_rewind_forward", TRUE, true, new MiniplayerPatch.MiniplayerHideRewindOrOverlayOpacityAvailability());
|
||||
public static final BooleanSetting MINIPLAYER_ROUNDED_CORNERS = new BooleanSetting("revanced_miniplayer_rounded_corners", TRUE, true, new MiniplayerPatch.MiniplayerAnyModernAvailability());
|
||||
public static final IntegerSetting MINIPLAYER_WIDTH_DIP = new IntegerSetting("revanced_miniplayer_width_dip", 192, true, new MiniplayerPatch.MiniplayerAnyModernAvailability());
|
||||
public static final IntegerSetting MINIPLAYER_OPACITY = new IntegerSetting("revanced_miniplayer_opacity", 100, true, new MiniplayerPatch.MiniplayerHideRewindOrOverlayOpacityAvailability());
|
||||
public static final IntegerSetting MINIPLAYER_WIDTH_DIP = new IntegerSetting("revanced_miniplayer_width_dip", 192, true, new MiniplayerAnyModernAvailability());
|
||||
public static final IntegerSetting MINIPLAYER_OPACITY = new IntegerSetting("revanced_miniplayer_opacity", 100, true, new MiniplayerHideRewindOrOverlayOpacityAvailability());
|
||||
|
||||
// External downloader
|
||||
public static final BooleanSetting EXTERNAL_DOWNLOADER = new BooleanSetting("revanced_external_downloader", FALSE);
|
||||
|
||||
@@ -152,7 +152,7 @@ public class YouTubeActivityHook extends BaseActivityHook {
|
||||
* @return if the original activity finish method should be allowed to run.
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
public static boolean handleFinish() {
|
||||
public static boolean handleBackPress() {
|
||||
return YouTubeSearchViewController.handleFinish(searchViewController);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -302,7 +302,7 @@ public class SponsorBlockUtils {
|
||||
|
||||
SpannableStringBuilder spannableBuilder = new SpannableStringBuilder();
|
||||
|
||||
spannableBuilder.append(segment.category.getTitle().toString());
|
||||
spannableBuilder.append(segment.category.getTitleWithColorDot());
|
||||
spannableBuilder.append('\n');
|
||||
|
||||
String startTime = formatSegmentTime(segment.start);
|
||||
|
||||
@@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
|
||||
org.gradle.parallel = true
|
||||
android.useAndroidX = true
|
||||
kotlin.code.style = official
|
||||
version = 5.41.0-dev.15
|
||||
version = 5.42.0-dev.8
|
||||
|
||||
@@ -284,6 +284,10 @@ public final class app/revanced/patches/instagram/misc/extension/SharedExtension
|
||||
public static final fun getSharedExtensionPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/instagram/misc/links/OpenLinksExternallyPatchKt {
|
||||
public static final fun getOpenLinksExternallyPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/instagram/misc/signature/SignatureCheckPatchKt {
|
||||
public static final fun getSignatureCheckPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -372,6 +376,10 @@ public final class app/revanced/patches/music/interaction/permanentshuffle/Perma
|
||||
public static final fun getPermanentShufflePatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/music/layout/branding/CustomBrandingPatchKt {
|
||||
public static final fun getCustomBrandingPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/music/layout/castbutton/HideCastButtonKt {
|
||||
public static final fun getHideCastButton ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -388,6 +396,10 @@ public final class app/revanced/patches/music/layout/premium/HideGetPremiumPatch
|
||||
public static final fun getHideGetPremiumPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/music/layout/theme/ThemePatchKt {
|
||||
public static final fun getThemePatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/music/layout/upgradebutton/HideUpgradeButtonPatchKt {
|
||||
public static final fun getHideUpgradeButton ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
public static final fun getRemoveUpgradeButton ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
@@ -447,9 +459,14 @@ public final class app/revanced/patches/music/misc/spoof/UserAgentClientSpoofPat
|
||||
public static final fun getUserAgentClientSpoofPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/music/misc/tracks/ForceOriginalAudioPatchKt {
|
||||
public static final fun getForceOriginalAudioPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/music/playservice/VersionCheckPatchKt {
|
||||
public static final fun getVersionCheckPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
|
||||
public static final fun is_7_33_or_greater ()Z
|
||||
public static final fun is_8_10_or_greater ()Z
|
||||
public static final fun is_8_11_or_greater ()Z
|
||||
public static final fun is_8_15_or_greater ()Z
|
||||
}
|
||||
@@ -733,6 +750,11 @@ public final class app/revanced/patches/serviceportalbund/detection/root/RootDet
|
||||
public static final fun getRootDetectionPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/shared/layout/theme/LithoColorHookPatchKt {
|
||||
public static final fun getLithoColorHookPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
public static final fun getLithoColorOverrideHook ()Lkotlin/jvm/functions/Function2;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/shared/misc/checks/BaseCheckEnvironmentPatchKt {
|
||||
public static final fun checkEnvironmentPatch (Lapp/revanced/patcher/Fingerprint;Lapp/revanced/patcher/patch/Patch;[Ljava/lang/String;)Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -1297,6 +1319,10 @@ public final class app/revanced/patches/viber/ads/HideAdsPatchKt {
|
||||
public static final fun getHideAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/viber/misc/navbar/HideNavigationButtonsKt {
|
||||
public static final fun getHideNavigationButtonsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/vsco/misc/pro/UnlockProPatchKt {
|
||||
public static final fun getUnlockProPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -1398,8 +1424,8 @@ public final class app/revanced/patches/youtube/layout/formfactor/ChangeFormFact
|
||||
public static final fun getChangeFormFactorPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/youtube/layout/hide/endscreencards/HideEndscreenCardsPatchKt {
|
||||
public static final fun getHideEndscreenCardsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
public final class app/revanced/patches/youtube/layout/hide/endscreencards/HideEndScreenCardsPatchKt {
|
||||
public static final fun getHideEndScreenCardsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/youtube/layout/hide/endscreensuggestion/HideEndScreenSuggestedVideoPatchKt {
|
||||
|
||||
@@ -3,6 +3,7 @@ package app.revanced.patches.instagram.hide.navigation
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.booleanOption
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.instagram.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.util.addInstructionsAtControlFlowLabel
|
||||
import app.revanced.util.findFreeRegister
|
||||
import app.revanced.util.getReference
|
||||
@@ -24,6 +25,8 @@ val hideNavigationButtonsPatch = bytecodePatch(
|
||||
) {
|
||||
compatibleWith("com.instagram.android")
|
||||
|
||||
dependsOn(sharedExtensionPatch)
|
||||
|
||||
val hideReels by booleanOption(
|
||||
key = "hideReels",
|
||||
default = true,
|
||||
@@ -69,20 +72,22 @@ val hideNavigationButtonsPatch = bytecodePatch(
|
||||
const-string v$freeRegister2, "$enumNameField"
|
||||
invoke-static { v$buttonsListRegister, v$freeRegister, v$freeRegister2 }, $EXTENSION_CLASS_DESCRIPTOR->removeNavigationButtonByName(Ljava/util/List;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
|
||||
move-result-object v$buttonsListRegister
|
||||
"""
|
||||
"""
|
||||
}
|
||||
|
||||
if (hideReels!!)
|
||||
if (hideReels!!) {
|
||||
addInstructionsAtControlFlowLabel(
|
||||
returnIndex,
|
||||
instructionsRemoveButtonByName("fragment_clips")
|
||||
)
|
||||
}
|
||||
|
||||
if (hideCreate!!)
|
||||
if (hideCreate!!) {
|
||||
addInstructionsAtControlFlowLabel(
|
||||
returnIndex,
|
||||
instructionsRemoveButtonByName("fragment_share")
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package app.revanced.patches.instagram.misc.links
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal const val TARGET_STRING = "Tracking.ARG_CLICK_SOURCE"
|
||||
|
||||
internal val inAppBrowserFunctionFingerprint = fingerprint {
|
||||
returns("Z")
|
||||
strings("TrackingInfo.ARG_MODULE_NAME", TARGET_STRING)
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package app.revanced.patches.instagram.misc.links
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.instagram.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/instagram/misc/links/OpenLinksExternallyPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val openLinksExternallyPatch = bytecodePatch(
|
||||
name = "Open links externally",
|
||||
description = "Changes links to always open in your external browser, instead of the in-app browser.",
|
||||
use = false,
|
||||
) {
|
||||
|
||||
dependsOn(sharedExtensionPatch)
|
||||
|
||||
compatibleWith("com.instagram.android")
|
||||
|
||||
execute {
|
||||
inAppBrowserFunctionFingerprint.let {
|
||||
val stringMatchIndex = it.stringMatches?.first { match -> match.string == TARGET_STRING }!!.index
|
||||
|
||||
it.method.apply {
|
||||
val urlResultObjIndex = indexOfFirstInstructionOrThrow(
|
||||
stringMatchIndex, Opcode.MOVE_OBJECT_FROM16
|
||||
)
|
||||
|
||||
// Register that contains the url after moving from a higher register.
|
||||
val urlRegister = getInstruction<TwoRegisterInstruction>(urlResultObjIndex).registerA
|
||||
|
||||
addInstructions(
|
||||
urlResultObjIndex + 1,
|
||||
"""
|
||||
invoke-static { v$urlRegister }, $EXTENSION_CLASS_DESCRIPTOR->openExternally(Ljava/lang/String;)Z
|
||||
move-result v$urlRegister
|
||||
return v$urlRegister
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
package app.revanced.patches.music.layout.branding
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.util.smali.ExternalLabel
|
||||
import app.revanced.patches.shared.layout.branding.baseCustomBrandingPatch
|
||||
import app.revanced.patches.shared.misc.mapping.get
|
||||
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
|
||||
import app.revanced.patches.shared.misc.mapping.resourceMappings
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import app.revanced.util.indexOfFirstInstructionReversed
|
||||
import app.revanced.util.indexOfFirstLiteralInstructionOrThrow
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
|
||||
private val disableSplashAnimationPatch = bytecodePatch {
|
||||
|
||||
dependsOn(resourceMappingPatch)
|
||||
|
||||
execute {
|
||||
// The existing YT animation usually only shows for a fraction of a second,
|
||||
// and the existing animation does not match the new splash screen
|
||||
// causing the original YT Music logo to momentarily flash on screen as the animation starts.
|
||||
//
|
||||
// Could replace the lottie animation file with our own custom animation (app_launch.json),
|
||||
// but the animation is not always the same size as the launch screen and it's still
|
||||
// barely shown. Instead turn off the animation entirely (app will also launch a little faster).
|
||||
cairoSplashAnimationConfigFingerprint.method.apply {
|
||||
val mainActivityLaunchAnimation = resourceMappings["layout", "main_activity_launch_animation"]
|
||||
val literalIndex = indexOfFirstLiteralInstructionOrThrow(
|
||||
mainActivityLaunchAnimation
|
||||
)
|
||||
val insertIndex = indexOfFirstInstructionReversed(literalIndex) {
|
||||
this.opcode == Opcode.INVOKE_VIRTUAL &&
|
||||
getReference<MethodReference>()?.name == "setContentView"
|
||||
} + 1
|
||||
val jumpIndex = indexOfFirstInstructionOrThrow(insertIndex) {
|
||||
opcode == Opcode.INVOKE_VIRTUAL &&
|
||||
getReference<MethodReference>()?.parameterTypes?.firstOrNull() == "Ljava/lang/Runnable;"
|
||||
} + 1
|
||||
|
||||
addInstructionsWithLabels(
|
||||
insertIndex,
|
||||
"goto :skip_animation",
|
||||
ExternalLabel("skip_animation", getInstruction(jumpIndex))
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private const val APP_NAME = "YT Music ReVanced"
|
||||
|
||||
@Suppress("unused")
|
||||
val customBrandingPatch = baseCustomBrandingPatch(
|
||||
defaultAppName = APP_NAME,
|
||||
appNameValues = mapOf(
|
||||
"YT Music ReVanced" to APP_NAME,
|
||||
"Music ReVanced" to "Music ReVanced",
|
||||
"Music" to "Music",
|
||||
"YT Music" to "YT Music",
|
||||
),
|
||||
resourceFolder = "custom-branding/music",
|
||||
iconResourceFileNames = arrayOf(
|
||||
"adaptiveproduct_youtube_music_2024_q4_background_color_108",
|
||||
"adaptiveproduct_youtube_music_2024_q4_foreground_color_108",
|
||||
"ic_launcher_release",
|
||||
),
|
||||
|
||||
block = {
|
||||
dependsOn(disableSplashAnimationPatch)
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.29.52",
|
||||
"8.10.52"
|
||||
)
|
||||
)
|
||||
}
|
||||
)
|
||||
@@ -0,0 +1,12 @@
|
||||
package app.revanced.patches.music.layout.branding
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import app.revanced.patches.music.shared.YOUTUBE_MUSIC_MAIN_ACTIVITY_CLASS_TYPE
|
||||
|
||||
internal val cairoSplashAnimationConfigFingerprint = fingerprint {
|
||||
returns("V")
|
||||
parameters("Landroid/os/Bundle;")
|
||||
custom { method, classDef ->
|
||||
method.name == "onCreate" && method.definingClass == YOUTUBE_MUSIC_MAIN_ACTIVITY_CLASS_TYPE
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,9 @@ import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.music.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.music.misc.settings.settingsPatch
|
||||
import app.revanced.patches.shared.misc.mapping.get
|
||||
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
|
||||
import app.revanced.patches.shared.misc.mapping.resourceMappings
|
||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import app.revanced.util.indexOfFirstLiteralInstructionOrThrow
|
||||
@@ -29,6 +32,7 @@ val hideCastButton = bytecodePatch(
|
||||
sharedExtensionPatch,
|
||||
settingsPatch,
|
||||
addResourcesPatch,
|
||||
resourceMappingPatch
|
||||
)
|
||||
|
||||
compatibleWith(
|
||||
@@ -39,6 +43,8 @@ val hideCastButton = bytecodePatch(
|
||||
)
|
||||
|
||||
execute {
|
||||
playerOverlayChip = resourceMappings["id", "player_overlay_chip"]
|
||||
|
||||
addResources("music", "layout.castbutton.hideCastButton")
|
||||
|
||||
PreferenceScreen.GENERAL.addPreferences(
|
||||
@@ -59,7 +65,7 @@ val hideCastButton = bytecodePatch(
|
||||
|
||||
playerOverlayChipFingerprint.method.apply {
|
||||
val resourceIndex = indexOfFirstLiteralInstructionOrThrow(playerOverlayChip)
|
||||
val targetIndex = indexOfFirstInstructionOrThrow(resourceIndex, Opcode.MOVE_RESULT)
|
||||
val targetIndex = indexOfFirstInstructionOrThrow(resourceIndex, Opcode.MOVE_RESULT_OBJECT)
|
||||
val targetRegister = getInstruction<OneRegisterInstruction>(targetIndex).registerA
|
||||
|
||||
addInstruction(
|
||||
|
||||
@@ -4,6 +4,7 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.PatchException
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
|
||||
@@ -35,7 +36,23 @@ val navigationBarPatch = bytecodePatch(
|
||||
resourceMappingPatch,
|
||||
sharedExtensionPatch,
|
||||
settingsPatch,
|
||||
addResourcesPatch
|
||||
addResourcesPatch,
|
||||
resourcePatch {
|
||||
execute {
|
||||
// Ensure the first ImageView has 'layout_weight' to stay properly sized
|
||||
// when the TextView is hidden.
|
||||
document("res/layout/image_with_text_tab.xml").use { document ->
|
||||
val imageView = document.getElementsByTagName("ImageView").item(0)
|
||||
imageView?.let {
|
||||
if (it.attributes.getNamedItem("android:layout_weight") == null) {
|
||||
val attr = document.createAttribute("android:layout_weight")
|
||||
attr.value = "0.5"
|
||||
it.attributes.setNamedItem(attr)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
compatibleWith(
|
||||
@@ -46,10 +63,7 @@ val navigationBarPatch = bytecodePatch(
|
||||
)
|
||||
|
||||
execute {
|
||||
text1 = resourceMappings[
|
||||
"id",
|
||||
"text1",
|
||||
]
|
||||
text1 = resourceMappings["id", "text1"]
|
||||
|
||||
addResources("music", "layout.navigationbar.navigationBarPatch")
|
||||
|
||||
@@ -71,9 +85,7 @@ val navigationBarPatch = bytecodePatch(
|
||||
)
|
||||
|
||||
tabLayoutTextFingerprint.method.apply {
|
||||
/**
|
||||
* Hide navigation labels.
|
||||
*/
|
||||
// Hide navigation labels.
|
||||
val constIndex = indexOfFirstLiteralInstructionOrThrow(text1)
|
||||
val targetIndex = indexOfFirstInstructionOrThrow(constIndex, Opcode.CHECK_CAST)
|
||||
val targetParameter = getInstruction<ReferenceInstruction>(targetIndex).reference
|
||||
@@ -87,9 +99,7 @@ val navigationBarPatch = bytecodePatch(
|
||||
"invoke-static { v$targetRegister }, $EXTENSION_CLASS_DESCRIPTOR->hideNavigationLabel(Landroid/widget/TextView;)V"
|
||||
)
|
||||
|
||||
/**
|
||||
* Set navigation enum and hide navigation buttons.
|
||||
*/
|
||||
// Set navigation enum and hide navigation buttons.
|
||||
val enumIndex = tabLayoutTextFingerprint.patternMatch!!.startIndex + 3
|
||||
val enumRegister = getInstruction<OneRegisterInstruction>(enumIndex).registerA
|
||||
val insertEnumIndex = indexOfFirstInstructionOrThrow(Opcode.AND_INT_LIT8) - 2
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
package app.revanced.patches.music.layout.theme
|
||||
|
||||
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.shared.layout.theme.THEME_DEFAULT_DARK_COLOR_NAMES
|
||||
import app.revanced.patches.shared.layout.theme.baseThemePatch
|
||||
import app.revanced.patches.shared.layout.theme.baseThemeResourcePatch
|
||||
import app.revanced.patches.shared.layout.theme.darkThemeBackgroundColorOption
|
||||
import app.revanced.patches.shared.misc.settings.overrideThemeColors
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/music/patches/theme/ThemePatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val themePatch = baseThemePatch(
|
||||
extensionClassDescriptor = EXTENSION_CLASS_DESCRIPTOR,
|
||||
|
||||
block = {
|
||||
dependsOn(
|
||||
sharedExtensionPatch,
|
||||
baseThemeResourcePatch(
|
||||
darkColorNames = THEME_DEFAULT_DARK_COLOR_NAMES + setOf(
|
||||
"yt_black_pure",
|
||||
"yt_black_pure_opacity80",
|
||||
"ytm_color_grey_12",
|
||||
"material_grey_800"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.29.52",
|
||||
"8.10.52"
|
||||
)
|
||||
)
|
||||
},
|
||||
|
||||
executeBlock = {
|
||||
overrideThemeColors(
|
||||
null,
|
||||
darkThemeBackgroundColorOption.value!!
|
||||
)
|
||||
}
|
||||
)
|
||||
@@ -0,0 +1,44 @@
|
||||
package app.revanced.patches.music.misc.fileprovider
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.all.misc.packagename.setOrGetFallbackPackageName
|
||||
import app.revanced.patches.music.utils.fix.fileprovider.fileProviderResolverFingerprint
|
||||
|
||||
internal fun fileProviderPatch(
|
||||
youtubePackageName: String,
|
||||
musicPackageName: String
|
||||
) = bytecodePatch(
|
||||
description = "Fixes broken YouTube Music file provider that prevents sharing with specific apps such as Instagram."
|
||||
) {
|
||||
finalize {
|
||||
// Must do modification last, so change package name value is correctly set.
|
||||
val musicChangedPackageName = setOrGetFallbackPackageName(musicPackageName)
|
||||
|
||||
// For some reason, if the app gets "android.support.FILE_PROVIDER_PATHS",
|
||||
// the package name of YouTube is used, not the package name of the YT Music.
|
||||
//
|
||||
// There is no issue in the stock YT Music, but this is an issue in the GmsCore Build.
|
||||
// https://github.com/ReVanced/revanced-patches/issues/55
|
||||
//
|
||||
// To solve this issue, replace the package name of YouTube with YT Music's package name.
|
||||
fileProviderResolverFingerprint.method.addInstructionsWithLabels(
|
||||
0,
|
||||
"""
|
||||
const-string v0, "com.google.android.youtube.fileprovider"
|
||||
invoke-static { p1, v0 }, Ljava/util/Objects;->equals(Ljava/lang/Object;Ljava/lang/Object;)Z
|
||||
move-result v0
|
||||
if-nez v0, :fix
|
||||
const-string v0, "$youtubePackageName.fileprovider"
|
||||
invoke-static { p1, v0 }, Ljava/util/Objects;->equals(Ljava/lang/Object;Ljava/lang/Object;)Z
|
||||
move-result v0
|
||||
if-nez v0, :fix
|
||||
goto :ignore
|
||||
:fix
|
||||
const-string p1, "$musicChangedPackageName.fileprovider"
|
||||
:ignore
|
||||
nop
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package app.revanced.patches.music.utils.fix.fileprovider
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val fileProviderResolverFingerprint = fingerprint {
|
||||
returns("L")
|
||||
strings(
|
||||
"android.support.FILE_PROVIDER_PATHS",
|
||||
"Name must not be empty"
|
||||
)
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import app.revanced.patches.music.misc.gms.Constants.REVANCED_MUSIC_PACKAGE_NAME
|
||||
import app.revanced.patches.music.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.music.misc.settings.settingsPatch
|
||||
import app.revanced.patches.music.misc.spoof.spoofVideoStreamsPatch
|
||||
import app.revanced.patches.music.misc.fileprovider.fileProviderPatch
|
||||
import app.revanced.patches.shared.castContextFetchFingerprint
|
||||
import app.revanced.patches.shared.misc.gms.gmsCoreSupportPatch
|
||||
import app.revanced.patches.shared.misc.settings.preference.IntentPreference
|
||||
@@ -60,6 +61,10 @@ private fun gmsCoreSupportResourcePatch(
|
||||
) {
|
||||
dependsOn(
|
||||
addResourcesPatch,
|
||||
settingsPatch
|
||||
settingsPatch,
|
||||
fileProviderPatch(
|
||||
MUSIC_PACKAGE_NAME,
|
||||
REVANCED_MUSIC_PACKAGE_NAME
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import app.revanced.patches.all.misc.packagename.setOrGetFallbackPackageName
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.music.misc.gms.Constants.MUSIC_PACKAGE_NAME
|
||||
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
|
||||
import app.revanced.patches.shared.misc.settings.preference.BasePreference
|
||||
import app.revanced.patches.shared.misc.settings.preference.BasePreferenceScreen
|
||||
@@ -108,7 +109,8 @@ val settingsPatch = bytecodePatch(
|
||||
modifyActivityForSettingsInjection(
|
||||
googleApiActivityFingerprint.classDef,
|
||||
googleApiActivityFingerprint.method,
|
||||
GOOGLE_API_ACTIVITY_HOOK_CLASS_DESCRIPTOR
|
||||
GOOGLE_API_ACTIVITY_HOOK_CLASS_DESCRIPTOR,
|
||||
true
|
||||
)
|
||||
}
|
||||
|
||||
@@ -125,7 +127,7 @@ fun newIntent(settingsName: String) = IntentPreference.Intent(
|
||||
targetClass = "com.google.android.gms.common.api.GoogleApiActivity"
|
||||
) {
|
||||
// The package name change has to be reflected in the intent.
|
||||
setOrGetFallbackPackageName("com.google.android.apps.youtube.music")
|
||||
setOrGetFallbackPackageName(MUSIC_PACKAGE_NAME)
|
||||
}
|
||||
|
||||
object PreferenceScreen : BasePreferenceScreen() {
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
package app.revanced.patches.music.misc.tracks
|
||||
|
||||
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.music.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.music.misc.settings.settingsPatch
|
||||
import app.revanced.patches.music.playservice.is_8_10_or_greater
|
||||
import app.revanced.patches.music.playservice.versionCheckPatch
|
||||
import app.revanced.patches.music.shared.mainActivityOnCreateFingerprint
|
||||
import app.revanced.patches.shared.misc.audio.forceOriginalAudioPatch
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/music/patches/ForceOriginalAudioPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val forceOriginalAudioPatch = forceOriginalAudioPatch(
|
||||
block = {
|
||||
dependsOn(
|
||||
sharedExtensionPatch,
|
||||
settingsPatch,
|
||||
versionCheckPatch
|
||||
)
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.29.52",
|
||||
"8.10.52"
|
||||
)
|
||||
)
|
||||
},
|
||||
fixUseLocalizedAudioTrackFlag = is_8_10_or_greater,
|
||||
mainActivityOnCreateFingerprint = mainActivityOnCreateFingerprint,
|
||||
subclassExtensionClassDescriptor = EXTENSION_CLASS_DESCRIPTOR,
|
||||
preferenceScreen = PreferenceScreen.MISC,
|
||||
)
|
||||
@@ -7,6 +7,8 @@ import app.revanced.util.findPlayStoreServicesVersion
|
||||
|
||||
var is_7_33_or_greater = false
|
||||
private set
|
||||
var is_8_10_or_greater = false
|
||||
private set
|
||||
var is_8_11_or_greater = false
|
||||
private set
|
||||
var is_8_15_or_greater = false
|
||||
@@ -22,6 +24,7 @@ val versionCheckPatch = resourcePatch(
|
||||
|
||||
// All bug fix releases always seem to use the same play store version as the minor version.
|
||||
is_7_33_or_greater = 245199000 <= playStoreServicesVersion
|
||||
is_8_10_or_greater = 244799000 <= playStoreServicesVersion
|
||||
is_8_11_or_greater = 251199000 <= playStoreServicesVersion
|
||||
is_8_15_or_greater = 251530000 <= playStoreServicesVersion
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package app.revanced.patches.reddit.customclients.boostforreddit.fix.redgifs
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.instructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patches.reddit.customclients.CREATE_NEW_CLIENT_METHOD
|
||||
import app.revanced.patches.reddit.customclients.boostforreddit.misc.extension.sharedExtensionPatch
|
||||
@@ -27,9 +26,7 @@ val fixRedgifsApi = fixRedgifsApiPatch(
|
||||
}
|
||||
replaceInstruction(
|
||||
index,
|
||||
"""
|
||||
invoke-static { }, ${EXTENSION_CLASS_DESCRIPTOR}->$CREATE_NEW_CLIENT_METHOD
|
||||
"""
|
||||
"invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->$CREATE_NEW_CLIENT_METHOD"
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,146 @@
|
||||
package app.revanced.patches.shared.layout.branding
|
||||
|
||||
import app.revanced.patcher.patch.ResourcePatch
|
||||
import app.revanced.patcher.patch.ResourcePatchBuilder
|
||||
import app.revanced.patcher.patch.ResourcePatchContext
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patcher.patch.stringOption
|
||||
import app.revanced.util.ResourceGroup
|
||||
import app.revanced.util.Utils.trimIndentMultiline
|
||||
import app.revanced.util.copyResources
|
||||
import java.io.File
|
||||
import java.nio.file.Files
|
||||
import java.util.logging.Logger
|
||||
|
||||
private const val REVANCED_ICON = "ReVanced*Logo" // Can never be a valid path.
|
||||
|
||||
internal val mipmapDirectories = arrayOf(
|
||||
"xxxhdpi",
|
||||
"xxhdpi",
|
||||
"xhdpi",
|
||||
"hdpi",
|
||||
"mdpi",
|
||||
).map { "mipmap-$it" }.toTypedArray()
|
||||
|
||||
private fun formatResourceFileList(resourceNames: Array<String>) = resourceNames.joinToString("\n") { "- $it" }
|
||||
|
||||
/**
|
||||
* Attempts to fix unescaped and invalid characters not allowed for an Android app name.
|
||||
*/
|
||||
private fun escapeAppName(name: String): String? {
|
||||
// Remove ASCII control characters.
|
||||
val cleanedName = name.filter { it.code >= 32 }
|
||||
|
||||
// Replace invalid XML characters with escaped equivalents.
|
||||
val escapedName = cleanedName
|
||||
.replace("&", "&") // Must be first to avoid double-escaping.
|
||||
.replace("<", "<")
|
||||
.replace(">", ">")
|
||||
.replace(Regex("(?<!&)\""), """)
|
||||
|
||||
// Trim empty spacing.
|
||||
val trimmed = escapedName.trim()
|
||||
|
||||
return trimmed.ifBlank { null }
|
||||
}
|
||||
|
||||
/**
|
||||
* Shared custom branding patch for YouTube and YT Music.
|
||||
*/
|
||||
internal fun baseCustomBrandingPatch(
|
||||
defaultAppName: String,
|
||||
appNameValues: Map<String, String>,
|
||||
resourceFolder: String,
|
||||
iconResourceFileNames: Array<String>,
|
||||
block: ResourcePatchBuilder.() -> Unit = {},
|
||||
executeBlock: ResourcePatchContext.() -> Unit = {}
|
||||
): ResourcePatch = resourcePatch(
|
||||
name = "Custom branding",
|
||||
description = "Applies a custom app name and icon. Defaults to \"$defaultAppName\" and the ReVanced logo.",
|
||||
use = false,
|
||||
) {
|
||||
val iconResourceFileNamesPng = iconResourceFileNames.map { "$it.png" }.toTypedArray<String>()
|
||||
|
||||
val appName by stringOption(
|
||||
key = "appName",
|
||||
default = defaultAppName,
|
||||
values = appNameValues,
|
||||
title = "App name",
|
||||
description = "The name of the app.",
|
||||
)
|
||||
|
||||
val iconPath by stringOption(
|
||||
key = "iconPath",
|
||||
default = REVANCED_ICON,
|
||||
values = mapOf("ReVanced Logo" to REVANCED_ICON),
|
||||
title = "App icon",
|
||||
description = """
|
||||
The icon to apply to the app.
|
||||
|
||||
If a path to a folder is provided, the folder must contain the following folders:
|
||||
|
||||
${formatResourceFileList(mipmapDirectories)}
|
||||
|
||||
Each of these folders must contain the following files:
|
||||
|
||||
${formatResourceFileList(iconResourceFileNamesPng)}
|
||||
""".trimIndentMultiline(),
|
||||
)
|
||||
|
||||
block()
|
||||
|
||||
execute {
|
||||
// Change the app icon and launch screen.
|
||||
val iconResourceGroups = mipmapDirectories.map { directory ->
|
||||
ResourceGroup(
|
||||
directory,
|
||||
*iconResourceFileNamesPng,
|
||||
)
|
||||
}
|
||||
|
||||
val iconPathTrimmed = iconPath!!.trim()
|
||||
if (iconPathTrimmed == REVANCED_ICON) {
|
||||
iconResourceGroups.forEach {
|
||||
copyResources(resourceFolder, it)
|
||||
}
|
||||
} else {
|
||||
val filePath = File(iconPathTrimmed)
|
||||
val resourceDirectory = get("res")
|
||||
|
||||
iconResourceGroups.forEach { group ->
|
||||
val fromDirectory = filePath.resolve(group.resourceDirectoryName)
|
||||
val toDirectory = resourceDirectory.resolve(group.resourceDirectoryName)
|
||||
|
||||
group.resources.forEach { iconFileName ->
|
||||
Files.write(
|
||||
toDirectory.resolve(iconFileName).toPath(),
|
||||
fromDirectory.resolve(iconFileName).readBytes(),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Change the app name.
|
||||
escapeAppName(appName!!)?.let { escapedAppName ->
|
||||
val newValue = "android:label=\"$escapedAppName\""
|
||||
|
||||
val manifest = get("AndroidManifest.xml")
|
||||
val original = manifest.readText()
|
||||
val replacement = original
|
||||
// YouTube
|
||||
.replace("android:label=\"@string/application_name\"", newValue)
|
||||
// YT Music
|
||||
.replace("android:label=\"@string/app_launcher_name\"", newValue)
|
||||
|
||||
if (original == replacement) {
|
||||
Logger.getLogger(this::class.java.name).warning(
|
||||
"Could not replace manifest app name"
|
||||
)
|
||||
}
|
||||
|
||||
manifest.writeText(replacement)
|
||||
}
|
||||
|
||||
executeBlock() // Must be after the main code to rename the new icons for YouTube 19.34+.
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,133 @@
|
||||
package app.revanced.patches.shared.layout.theme
|
||||
|
||||
import app.revanced.patcher.patch.BytecodePatchBuilder
|
||||
import app.revanced.patcher.patch.BytecodePatchContext
|
||||
import app.revanced.patcher.patch.PatchException
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patcher.patch.stringOption
|
||||
import app.revanced.util.childElementsSequence
|
||||
import java.util.Locale
|
||||
|
||||
internal const val THEME_COLOR_OPTION_DESCRIPTION = "Can be a hex color (#RRGGBB) or a color resource reference."
|
||||
|
||||
internal val THEME_DEFAULT_DARK_COLOR_NAMES = setOf(
|
||||
"yt_black0", "yt_black1", "yt_black1_opacity95", "yt_black1_opacity98",
|
||||
"yt_black2", "yt_black3", "yt_black4", "yt_status_bar_background_dark",
|
||||
"material_grey_850"
|
||||
)
|
||||
|
||||
internal val THEME_DEFAULT_LIGHT_COLOR_NAMES = setOf(
|
||||
"yt_white1", "yt_white1_opacity95", "yt_white1_opacity98",
|
||||
"yt_white2", "yt_white3", "yt_white4"
|
||||
)
|
||||
|
||||
/**
|
||||
* @param colorString #AARRGGBB #RRGGBB, or an Android color resource name.
|
||||
*/
|
||||
internal fun validateColorName(colorString: String): Boolean {
|
||||
if (colorString.startsWith("#")) {
|
||||
// #RRGGBB or #AARRGGBB
|
||||
val hex = colorString.substring(1).uppercase(Locale.US)
|
||||
|
||||
if (hex.length == 8) {
|
||||
// Transparent colors will crash the app.
|
||||
if (hex[0] != 'F' || hex[1] != 'F') {
|
||||
return false
|
||||
}
|
||||
} else if (hex.length != 6) {
|
||||
return false
|
||||
}
|
||||
|
||||
return hex.all { it.isDigit() || it in 'A'..'F' }
|
||||
}
|
||||
|
||||
if (colorString.startsWith("@android:color/")) {
|
||||
// Cannot easily validate Android built-in colors, so assume it's a correct color.
|
||||
return true
|
||||
}
|
||||
|
||||
// Allow any color name, because if it's invalid it will
|
||||
// throw an exception during resource compilation.
|
||||
return colorString.startsWith("@color/")
|
||||
}
|
||||
|
||||
/**
|
||||
* Dark theme color option for YouTube and YT Music Theme patches.
|
||||
*/
|
||||
internal val darkThemeBackgroundColorOption = stringOption(
|
||||
key = "darkThemeBackgroundColor",
|
||||
default = "@android:color/black",
|
||||
values = mapOf(
|
||||
"Pure black" to "@android:color/black",
|
||||
"Material You" to "@android:color/system_neutral1_900",
|
||||
"Classic (old YouTube)" to "#212121",
|
||||
"Catppuccin (Mocha)" to "#181825",
|
||||
"Dark pink" to "#290025",
|
||||
"Dark blue" to "#001029",
|
||||
"Dark green" to "#002905",
|
||||
"Dark yellow" to "#282900",
|
||||
"Dark orange" to "#291800",
|
||||
"Dark red" to "#290000",
|
||||
),
|
||||
title = "Dark theme background color",
|
||||
description = THEME_COLOR_OPTION_DESCRIPTION
|
||||
)
|
||||
|
||||
/**
|
||||
* Shared theme patch for YouTube and YT Music.
|
||||
*/
|
||||
internal fun baseThemePatch(
|
||||
extensionClassDescriptor: String,
|
||||
block: BytecodePatchBuilder.() -> Unit = {},
|
||||
executeBlock: BytecodePatchContext.() -> Unit = {}
|
||||
) = bytecodePatch(
|
||||
name = "Theme",
|
||||
description = "Adds options for theming and applies a custom background theme " +
|
||||
"(dark background theme defaults to pure black).",
|
||||
) {
|
||||
darkThemeBackgroundColorOption()
|
||||
|
||||
block()
|
||||
|
||||
dependsOn(lithoColorHookPatch)
|
||||
|
||||
execute {
|
||||
executeBlock()
|
||||
|
||||
lithoColorOverrideHook(extensionClassDescriptor, "getValue")
|
||||
}
|
||||
}
|
||||
|
||||
internal fun baseThemeResourcePatch(
|
||||
darkColorNames: Set<String> = THEME_DEFAULT_DARK_COLOR_NAMES,
|
||||
lightColorNames: Set<String> = THEME_DEFAULT_LIGHT_COLOR_NAMES,
|
||||
lightColorReplacement: (() -> String)? = null
|
||||
) = resourcePatch {
|
||||
|
||||
execute {
|
||||
// After patch option validators are fixed https://github.com/ReVanced/revanced-patcher/issues/372
|
||||
// This should changed to a patch option validator.
|
||||
val darkColor by darkThemeBackgroundColorOption
|
||||
if (!validateColorName(darkColor!!)) {
|
||||
throw PatchException("Invalid dark theme color: $darkColor")
|
||||
}
|
||||
|
||||
val lightColor = lightColorReplacement?.invoke()
|
||||
if (lightColor != null && !validateColorName(lightColor)) {
|
||||
throw PatchException("Invalid light theme color: $lightColor")
|
||||
}
|
||||
|
||||
document("res/values/colors.xml").use { document ->
|
||||
val resourcesNode = document.getElementsByTagName("resources").item(0)
|
||||
|
||||
resourcesNode.childElementsSequence().forEach { node ->
|
||||
val name = node.getAttribute("name")
|
||||
when {
|
||||
name in darkColorNames -> node.textContent = darkColor
|
||||
lightColor != null && name in lightColorNames -> node.textContent = lightColor
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package app.revanced.patches.shared.layout.theme
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val lithoOnBoundsChangeFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PROTECTED, AccessFlags.FINAL)
|
||||
returns("V")
|
||||
parameters("Landroid/graphics/Rect;")
|
||||
opcodes(
|
||||
Opcode.IGET,
|
||||
Opcode.IF_EQZ,
|
||||
Opcode.INVOKE_VIRTUAL,
|
||||
Opcode.MOVE_RESULT,
|
||||
Opcode.IF_NEZ,
|
||||
Opcode.IGET_OBJECT,
|
||||
Opcode.INVOKE_VIRTUAL,
|
||||
Opcode.RETURN_VOID,
|
||||
)
|
||||
custom { method, _ ->
|
||||
method.name == "onBoundsChange"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package app.revanced.patches.shared.layout.theme
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
|
||||
lateinit var lithoColorOverrideHook: (targetMethodClass: String, targetMethodName: String) -> Unit
|
||||
private set
|
||||
|
||||
val lithoColorHookPatch = bytecodePatch(
|
||||
description = "Adds a hook to set color of Litho components.",
|
||||
) {
|
||||
|
||||
execute {
|
||||
var insertionIndex = lithoOnBoundsChangeFingerprint.patternMatch!!.endIndex - 1
|
||||
|
||||
lithoColorOverrideHook = { targetMethodClass, targetMethodName ->
|
||||
lithoOnBoundsChangeFingerprint.method.addInstructions(
|
||||
insertionIndex,
|
||||
"""
|
||||
invoke-static { p1 }, $targetMethodClass->$targetMethodName(I)I
|
||||
move-result p1
|
||||
"""
|
||||
)
|
||||
insertionIndex += 2
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package app.revanced.patches.youtube.video.audio
|
||||
package app.revanced.patches.shared.misc.audio
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import app.revanced.util.containsLiteralInstruction
|
||||
@@ -7,10 +7,14 @@ import com.android.tools.smali.dexlib2.AccessFlags
|
||||
internal val formatStreamModelToStringFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("Ljava/lang/String;")
|
||||
custom { method, classDef ->
|
||||
method.name == "toString" && classDef.type ==
|
||||
"Lcom/google/android/libraries/youtube/innertube/model/media/FormatStreamModel;"
|
||||
custom { method, _ ->
|
||||
method.name == "toString"
|
||||
}
|
||||
strings(
|
||||
// Strings are partial matches.
|
||||
"isDefaultAudioTrack=",
|
||||
"audioTrackId="
|
||||
)
|
||||
}
|
||||
|
||||
internal const val AUDIO_STREAM_IGNORE_DEFAULT_FEATURE_FLAG = 45666189L
|
||||
@@ -20,7 +24,6 @@ internal val selectAudioStreamFingerprint = fingerprint {
|
||||
returns("L")
|
||||
custom { method, _ ->
|
||||
method.parameters.size > 2 // Method has a large number of parameters and may change.
|
||||
&& method.parameters[1].type == "Lcom/google/android/libraries/youtube/innertube/model/media/PlayerConfigModel;"
|
||||
&& method.containsLiteralInstruction(AUDIO_STREAM_IGNORE_DEFAULT_FEATURE_FLAG)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,157 @@
|
||||
package app.revanced.patches.shared.misc.audio
|
||||
|
||||
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.addInstructionsWithLabels
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.BytecodePatchBuilder
|
||||
import app.revanced.patcher.patch.BytecodePatchContext
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableField.Companion.toMutable
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.shared.misc.settings.preference.BasePreferenceScreen
|
||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.util.findMethodFromToString
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import app.revanced.util.insertLiteralOverride
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableField
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/shared/patches/ForceOriginalAudioPatch;"
|
||||
|
||||
/**
|
||||
* Patch shared with YouTube and YT Music.
|
||||
*/
|
||||
internal fun forceOriginalAudioPatch(
|
||||
block: BytecodePatchBuilder.() -> Unit = {},
|
||||
executeBlock: BytecodePatchContext.() -> Unit = {},
|
||||
fixUseLocalizedAudioTrackFlag: Boolean,
|
||||
mainActivityOnCreateFingerprint: Fingerprint,
|
||||
subclassExtensionClassDescriptor: String,
|
||||
preferenceScreen: BasePreferenceScreen.Screen
|
||||
) = bytecodePatch(
|
||||
name = "Force original audio",
|
||||
description = "Adds an option to always use the original audio track.",
|
||||
) {
|
||||
|
||||
block()
|
||||
|
||||
dependsOn(addResourcesPatch)
|
||||
|
||||
execute {
|
||||
addResources("shared", "misc.audio.forceOriginalAudioPatch")
|
||||
|
||||
preferenceScreen.addPreferences(
|
||||
SwitchPreference(
|
||||
key = "revanced_force_original_audio",
|
||||
tag = "app.revanced.extension.shared.settings.preference.ForceOriginalAudioSwitchPreference"
|
||||
)
|
||||
)
|
||||
|
||||
mainActivityOnCreateFingerprint.method.addInstruction(
|
||||
0,
|
||||
"invoke-static { }, $subclassExtensionClassDescriptor->setPreferredLanguage()V"
|
||||
)
|
||||
|
||||
// Disable feature flag that ignores the default track flag
|
||||
// and instead overrides to the user region language.
|
||||
if (fixUseLocalizedAudioTrackFlag) {
|
||||
selectAudioStreamFingerprint.method.insertLiteralOverride(
|
||||
AUDIO_STREAM_IGNORE_DEFAULT_FEATURE_FLAG,
|
||||
"$EXTENSION_CLASS_DESCRIPTOR->ignoreDefaultAudioStream(Z)Z"
|
||||
)
|
||||
}
|
||||
|
||||
formatStreamModelToStringFingerprint.let {
|
||||
val isDefaultAudioTrackMethod = it.originalMethod.findMethodFromToString("isDefaultAudioTrack=")
|
||||
val audioTrackDisplayNameMethod = it.originalMethod.findMethodFromToString("audioTrackDisplayName=")
|
||||
val audioTrackIdMethod = it.originalMethod.findMethodFromToString("audioTrackId=")
|
||||
|
||||
it.classDef.apply {
|
||||
// Add a new field to store the override.
|
||||
val helperFieldName = "patch_isDefaultAudioTrackOverride"
|
||||
fields.add(
|
||||
ImmutableField(
|
||||
type,
|
||||
helperFieldName,
|
||||
"Ljava/lang/Boolean;",
|
||||
// Boolean is a 100% immutable class (all fields are final)
|
||||
// and safe to write to a shared field without volatile/synchronization,
|
||||
// but without volatile the field can show stale data
|
||||
// and the same field is calculated more than once by different threads.
|
||||
AccessFlags.PRIVATE.value or AccessFlags.VOLATILE.value,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
).toMutable()
|
||||
)
|
||||
|
||||
// Add a helper method because the isDefaultAudioTrack() has only 2 registers and 3 are needed.
|
||||
val helperMethodClass = type
|
||||
val helperMethodName = "patch_isDefaultAudioTrack"
|
||||
val helperMethod = ImmutableMethod(
|
||||
helperMethodClass,
|
||||
helperMethodName,
|
||||
listOf(ImmutableMethodParameter("Z", null, null)),
|
||||
"Z",
|
||||
AccessFlags.PRIVATE.value,
|
||||
null,
|
||||
null,
|
||||
MutableMethodImplementation(6),
|
||||
).toMutable().apply {
|
||||
addInstructionsWithLabels(
|
||||
0,
|
||||
"""
|
||||
iget-object v0, p0, $helperMethodClass->$helperFieldName:Ljava/lang/Boolean;
|
||||
if-eqz v0, :call_extension
|
||||
invoke-virtual { v0 }, Ljava/lang/Boolean;->booleanValue()Z
|
||||
move-result v3
|
||||
return v3
|
||||
|
||||
:call_extension
|
||||
invoke-virtual { p0 }, $audioTrackIdMethod
|
||||
move-result-object v1
|
||||
|
||||
invoke-virtual { p0 }, $audioTrackDisplayNameMethod
|
||||
move-result-object v2
|
||||
|
||||
invoke-static { p1, v1, v2 }, $EXTENSION_CLASS_DESCRIPTOR->isDefaultAudioStream(ZLjava/lang/String;Ljava/lang/String;)Z
|
||||
move-result v3
|
||||
|
||||
invoke-static { v3 }, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;
|
||||
move-result-object v0
|
||||
iput-object v0, p0, $helperMethodClass->$helperFieldName:Ljava/lang/Boolean;
|
||||
return v3
|
||||
"""
|
||||
)
|
||||
}
|
||||
methods.add(helperMethod)
|
||||
|
||||
// Modify isDefaultAudioTrack() to call extension helper method.
|
||||
isDefaultAudioTrackMethod.apply {
|
||||
val index = indexOfFirstInstructionOrThrow(Opcode.RETURN)
|
||||
val register = getInstruction<OneRegisterInstruction>(index).registerA
|
||||
|
||||
addInstructions(
|
||||
index,
|
||||
"""
|
||||
invoke-direct { p0, v$register }, $helperMethodClass->$helperMethodName(Z)Z
|
||||
move-result v$register
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
executeBlock()
|
||||
}
|
||||
}
|
||||
@@ -26,26 +26,26 @@ fun settingsPatch (
|
||||
preferences: Set<BasePreference>,
|
||||
) = settingsPatch(listOf(rootPreference), preferences)
|
||||
|
||||
private var themeForegroundColor : String? = null
|
||||
private var themeBackgroundColor : String? = null
|
||||
private var lightThemeColor : String? = null
|
||||
private var darkThemeColor : String? = null
|
||||
|
||||
/**
|
||||
* Sets the default theme colors used in various ReVanced specific settings menus.
|
||||
* By default these colors are white and black, but instead can be set to the
|
||||
* same color the target app uses for it's own settings.
|
||||
*/
|
||||
fun overrideThemeColors(foregroundColor: String, backgroundColor: String) {
|
||||
themeForegroundColor = foregroundColor
|
||||
themeBackgroundColor = backgroundColor
|
||||
fun overrideThemeColors(lightThemeColorString: String?, darkThemeColorString: String) {
|
||||
lightThemeColor = lightThemeColorString
|
||||
darkThemeColor = darkThemeColorString
|
||||
}
|
||||
|
||||
private val settingsColorPatch = bytecodePatch {
|
||||
finalize {
|
||||
if (themeForegroundColor != null) {
|
||||
themeLightColorResourceNameFingerprint.method.returnEarly(themeForegroundColor!!)
|
||||
if (lightThemeColor != null) {
|
||||
themeLightColorResourceNameFingerprint.method.returnEarly(lightThemeColor!!)
|
||||
}
|
||||
if (themeBackgroundColor != null) {
|
||||
themeDarkColorResourceNameFingerprint.method.returnEarly(themeBackgroundColor!!)
|
||||
if (darkThemeColor != null) {
|
||||
themeDarkColorResourceNameFingerprint.method.returnEarly(darkThemeColor!!)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,9 +12,8 @@ val dynamicColorPatch = resourcePatch(
|
||||
) {
|
||||
compatibleWith(
|
||||
"com.twitter.android"(
|
||||
"10.86.0-release.0",
|
||||
"10.60.0-release.0",
|
||||
"10.48.0-release.0"
|
||||
"10.86.0-release.0",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package app.revanced.patches.twitter.misc.extension
|
||||
|
||||
import app.revanced.patches.shared.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.twitter.misc.extension.hooks.applicationInitHook
|
||||
|
||||
val sharedExtensionPatch = sharedExtensionPatch("twitter")
|
||||
val sharedExtensionPatch = sharedExtensionPatch("twitter", applicationInitHook)
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package app.revanced.patches.twitter.misc.extension.hooks
|
||||
|
||||
import app.revanced.patches.shared.misc.extension.extensionHook
|
||||
|
||||
internal val applicationInitHook =
|
||||
extensionHook {
|
||||
custom { method, classDef ->
|
||||
classDef.type == "Lcom/twitter/app/TwitterApplication;" && method.name == "onCreate"
|
||||
}
|
||||
}
|
||||
@@ -13,11 +13,8 @@ fun hookPatch(
|
||||
|
||||
compatibleWith(
|
||||
"com.twitter.android"(
|
||||
// Only v10.85 uses Pairip and requires additional changes to work.
|
||||
"10.86.0-release.0",
|
||||
// Confirmed to not show reply ads. Slightly newer versions may also work.
|
||||
"10.60.0-release.0",
|
||||
"10.48.0-release.0"
|
||||
"10.86.0-release.0",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -39,9 +39,8 @@ val changeLinkSharingDomainPatch = bytecodePatch(
|
||||
|
||||
compatibleWith(
|
||||
"com.twitter.android"(
|
||||
"10.86.0-release.0",
|
||||
"10.60.0-release.0",
|
||||
"10.48.0-release.0"
|
||||
"10.86.0-release.0",
|
||||
)
|
||||
)
|
||||
|
||||
@@ -54,28 +53,28 @@ val changeLinkSharingDomainPatch = bytecodePatch(
|
||||
)
|
||||
|
||||
execute {
|
||||
val replacementIndex =
|
||||
linkSharingDomainFingerprint.stringMatches!!.first().index
|
||||
val domainRegister =
|
||||
linkSharingDomainFingerprint.method.getInstruction<OneRegisterInstruction>(replacementIndex).registerA
|
||||
linkSharingDomainFingerprint.let {
|
||||
val replacementIndex = it.stringMatches!!.first().index
|
||||
val domainRegister = it.method.getInstruction<OneRegisterInstruction>(
|
||||
replacementIndex
|
||||
).registerA
|
||||
|
||||
linkSharingDomainFingerprint.method.replaceInstruction(
|
||||
replacementIndex,
|
||||
"const-string v$domainRegister, \"https://$domainName\"",
|
||||
)
|
||||
|
||||
// Replace the domain name when copying a link with "Copy link" button.
|
||||
linkBuilderFingerprint.method.apply {
|
||||
addInstructions(
|
||||
0,
|
||||
"""
|
||||
invoke-static { p0, p1, p2 }, $EXTENSION_CLASS_DESCRIPTOR->formatLink(JLjava/lang/String;)Ljava/lang/String;
|
||||
move-result-object p0
|
||||
return-object p0
|
||||
""",
|
||||
it.method.replaceInstruction(
|
||||
replacementIndex,
|
||||
"const-string v$domainRegister, \"https://$domainName\"",
|
||||
)
|
||||
}
|
||||
|
||||
// Replace the domain name when copying a link with "Copy link" button.
|
||||
linkBuilderFingerprint.method.addInstructions(
|
||||
0,
|
||||
"""
|
||||
invoke-static { p0, p1, p2 }, $EXTENSION_CLASS_DESCRIPTOR->formatLink(JLjava/lang/String;)Ljava/lang/String;
|
||||
move-result-object p0
|
||||
return-object p0
|
||||
"""
|
||||
)
|
||||
|
||||
// Used in the Share via... dialog.
|
||||
linkResourceGetterFingerprint.method.apply {
|
||||
val templateIdConstIndex = indexOfFirstLiteralInstructionOrThrow(tweetShareLinkTemplateId)
|
||||
|
||||
@@ -4,12 +4,12 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.twitter.misc.extension.sharedExtensionPatch
|
||||
|
||||
@Deprecated("Patch is obsolete and no longer needed with the highest supported app target. " +
|
||||
"This patch will soon be deleted.")
|
||||
@Suppress("unused")
|
||||
val openLinksWithAppChooserPatch = bytecodePatch(
|
||||
name = "Open links with app chooser",
|
||||
description = "Instead of opening links directly, open them with an app chooser. " +
|
||||
"As a result you can select a browser to open the link with.",
|
||||
use = false,
|
||||
"As a result you can select a browser to open the link with.",
|
||||
) {
|
||||
dependsOn(sharedExtensionPatch)
|
||||
|
||||
@@ -18,7 +18,7 @@ val openLinksWithAppChooserPatch = bytecodePatch(
|
||||
execute {
|
||||
val methodReference =
|
||||
"Lapp/revanced/extension/twitter/patches/links/OpenLinksWithAppChooserPatch;->" +
|
||||
"openWithChooser(Landroid/content/Context;Landroid/content/Intent;)V"
|
||||
"openWithChooser(Landroid/content/Context;Landroid/content/Intent;)V"
|
||||
|
||||
openLinkFingerprint.method.addInstructions(
|
||||
0,
|
||||
|
||||
@@ -10,9 +10,8 @@ val sanitizeSharingLinksPatch = bytecodePatch(
|
||||
) {
|
||||
compatibleWith(
|
||||
"com.twitter.android"(
|
||||
"10.86.0-release.0",
|
||||
"10.60.0-release.0",
|
||||
"10.48.0-release.0"
|
||||
"10.86.0-release.0",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package app.revanced.patches.viber.misc.navbar
|
||||
import app.revanced.patcher.fingerprint
|
||||
import app.revanced.patcher.patch.BytecodePatchContext
|
||||
|
||||
internal val tabIdClassFingerprint = fingerprint {
|
||||
strings("shouldShowTabId")
|
||||
}
|
||||
|
||||
context(BytecodePatchContext)
|
||||
internal val shouldShowTabIdMethodFingerprint get() = fingerprint {
|
||||
parameters("I", "I")
|
||||
returns("Z")
|
||||
custom { methodDef, classDef ->
|
||||
classDef == tabIdClassFingerprint.classDef
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
package app.revanced.patches.viber.misc.navbar
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||
import app.revanced.patcher.patch.booleanOption
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import java.util.logging.Logger
|
||||
import kotlin.collections.joinToString
|
||||
|
||||
|
||||
private const val instructionsFooter = """
|
||||
# If we reach this, it means that this tab has been disabled by user
|
||||
const/4 v0, 0
|
||||
return v0 # return false as "This tab is not enabled"
|
||||
|
||||
# Proceed with default execution
|
||||
:continue
|
||||
nop
|
||||
"""
|
||||
|
||||
@Suppress("unused")
|
||||
val hideNavigationButtonsPatch = bytecodePatch(
|
||||
name = "Hide navigation buttons",
|
||||
description = "Permanently hides navigation bar buttons, such as Explore and Marketplace.",
|
||||
use = false
|
||||
) {
|
||||
compatibleWith("com.viber.voip")
|
||||
|
||||
val hideOptions = AllowedNavigationItems.entries.associateWith {
|
||||
booleanOption(
|
||||
key = it.key,
|
||||
default = it.defaultHideOption,
|
||||
title = it.title,
|
||||
description = it.description,
|
||||
)
|
||||
}
|
||||
|
||||
execute {
|
||||
// Items that won't be forcefully hidden.
|
||||
val allowedItems = hideOptions.filter { (option, enabled) -> enabled.value != true }
|
||||
|
||||
if (allowedItems.size == AllowedNavigationItems.entries.size) {
|
||||
return@execute Logger.getLogger(this::class.java.name).warning(
|
||||
"No hide navigation buttons options are enabled. No changes made."
|
||||
)
|
||||
}
|
||||
|
||||
val injectionInstructions = allowedItems
|
||||
.map { it.key.buildAllowInstruction() }
|
||||
.joinToString("\n") + instructionsFooter
|
||||
|
||||
shouldShowTabIdMethodFingerprint
|
||||
.method
|
||||
.addInstructionsWithLabels(0, injectionInstructions)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Navigation items taken from source code.
|
||||
* They appear in code like new NavigationItem(0, R.string.bottom_tab_chats, R.drawable.ic_tab_chats).
|
||||
*/
|
||||
private enum class AllowedNavigationItems(
|
||||
val defaultHideOption: Boolean,
|
||||
private val itemName: String,
|
||||
private vararg val ids: Int
|
||||
) {
|
||||
CHATS(false, "Chats", 0),
|
||||
CALLS(false, "Calls", 1, 7),
|
||||
EXPLORE(true, "Explore", 2),
|
||||
MORE(false, "More", 3),
|
||||
PAY(true, "Pay", 5),
|
||||
CAMERA(true, "Camera", 6),
|
||||
MARKETPLACE(true, "Marketplace", 8);
|
||||
|
||||
val key = "hide$itemName"
|
||||
val title = "Hide $itemName"
|
||||
val description = "Permanently hides the $itemName button."
|
||||
|
||||
fun buildAllowInstruction(): String =
|
||||
ids.joinToString("\n") { id ->
|
||||
"""
|
||||
const/4 v0, $id # If tabId == $id ($itemName), don't hide it
|
||||
if-eq p1, v0, :continue
|
||||
"""
|
||||
}
|
||||
}
|
||||
@@ -1,141 +1,56 @@
|
||||
package app.revanced.patches.youtube.layout.branding
|
||||
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patcher.patch.stringOption
|
||||
import app.revanced.patches.youtube.misc.playservice.is_19_34_or_greater
|
||||
import app.revanced.patches.youtube.misc.playservice.versionCheckPatch
|
||||
import app.revanced.util.ResourceGroup
|
||||
import app.revanced.util.Utils.trimIndentMultiline
|
||||
import app.revanced.util.copyResources
|
||||
import java.io.File
|
||||
import app.revanced.patches.shared.layout.branding.baseCustomBrandingPatch
|
||||
import app.revanced.patches.shared.layout.branding.mipmapDirectories
|
||||
import java.nio.file.Files
|
||||
|
||||
private const val REVANCED_ICON = "ReVanced*Logo" // Can never be a valid path.
|
||||
private const val APP_NAME = "YouTube ReVanced"
|
||||
|
||||
private val iconResourceFileNames = arrayOf(
|
||||
"adaptiveproduct_youtube_background_color_108",
|
||||
"adaptiveproduct_youtube_foreground_color_108",
|
||||
"ic_launcher",
|
||||
"ic_launcher_round",
|
||||
).map { "$it.png" }.toTypedArray()
|
||||
|
||||
private val iconResourceFileNamesNew = mapOf(
|
||||
private val youtubeIconResourceFileNames_19_34 = mapOf(
|
||||
"adaptiveproduct_youtube_foreground_color_108" to "adaptiveproduct_youtube_2024_q4_foreground_color_108",
|
||||
"adaptiveproduct_youtube_background_color_108" to "adaptiveproduct_youtube_2024_q4_background_color_108",
|
||||
)
|
||||
|
||||
private val mipmapDirectories = arrayOf(
|
||||
"xxxhdpi",
|
||||
"xxhdpi",
|
||||
"xhdpi",
|
||||
"hdpi",
|
||||
"mdpi",
|
||||
).map { "mipmap-$it" }
|
||||
|
||||
@Suppress("unused")
|
||||
val customBrandingPatch = resourcePatch(
|
||||
name = "Custom branding",
|
||||
description = "Applies a custom app name and icon. Defaults to \"YouTube ReVanced\" and the ReVanced logo.",
|
||||
use = false,
|
||||
) {
|
||||
dependsOn(versionCheckPatch)
|
||||
val customBrandingPatch = baseCustomBrandingPatch(
|
||||
defaultAppName = APP_NAME,
|
||||
appNameValues = mapOf(
|
||||
"YouTube ReVanced" to APP_NAME,
|
||||
"YT ReVanced" to "YT ReVanced",
|
||||
"YT" to "YT",
|
||||
"YouTube" to "YouTube",
|
||||
),
|
||||
resourceFolder = "custom-branding/youtube",
|
||||
iconResourceFileNames = arrayOf(
|
||||
"adaptiveproduct_youtube_background_color_108",
|
||||
"adaptiveproduct_youtube_foreground_color_108",
|
||||
"ic_launcher",
|
||||
"ic_launcher_round",
|
||||
),
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"20.07.39",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
val appName by stringOption(
|
||||
key = "appName",
|
||||
default = APP_NAME,
|
||||
values = mapOf(
|
||||
"YouTube ReVanced" to APP_NAME,
|
||||
"YT ReVanced" to "YT ReVanced",
|
||||
"YT" to "YT",
|
||||
"YouTube" to "YouTube",
|
||||
),
|
||||
title = "App name",
|
||||
description = "The name of the app.",
|
||||
)
|
||||
|
||||
val icon by stringOption(
|
||||
key = "iconPath",
|
||||
default = REVANCED_ICON,
|
||||
values = mapOf("ReVanced Logo" to REVANCED_ICON),
|
||||
title = "App icon",
|
||||
description = """
|
||||
The icon to apply to the app.
|
||||
|
||||
If a path to a folder is provided, the folder must contain the following folders:
|
||||
|
||||
${mipmapDirectories.joinToString("\n") { "- $it" }}
|
||||
|
||||
Each of these folders must contain the following files:
|
||||
|
||||
${iconResourceFileNames.joinToString("\n") { "- $it" }}
|
||||
""".trimIndentMultiline(),
|
||||
)
|
||||
|
||||
execute {
|
||||
icon?.let { icon ->
|
||||
// Change the app icon.
|
||||
mipmapDirectories.map { directory ->
|
||||
ResourceGroup(
|
||||
directory,
|
||||
*iconResourceFileNames,
|
||||
)
|
||||
}.let { resourceGroups ->
|
||||
if (icon != REVANCED_ICON) {
|
||||
val path = File(icon)
|
||||
val resourceDirectory = get("res")
|
||||
|
||||
resourceGroups.forEach { group ->
|
||||
val fromDirectory = path.resolve(group.resourceDirectoryName)
|
||||
val toDirectory = resourceDirectory.resolve(group.resourceDirectoryName)
|
||||
|
||||
group.resources.forEach { iconFileName ->
|
||||
Files.write(
|
||||
toDirectory.resolve(iconFileName).toPath(),
|
||||
fromDirectory.resolve(iconFileName).readBytes(),
|
||||
)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
resourceGroups.forEach { copyResources("custom-branding", it) }
|
||||
}
|
||||
}
|
||||
|
||||
if (is_19_34_or_greater) {
|
||||
val resourceDirectory = get("res")
|
||||
|
||||
mipmapDirectories.forEach { directory ->
|
||||
val targetDirectory = resourceDirectory.resolve(directory)
|
||||
|
||||
iconResourceFileNamesNew.forEach { (old, new) ->
|
||||
val oldFile = targetDirectory.resolve("$old.png")
|
||||
val newFile = targetDirectory.resolve("$new.png")
|
||||
|
||||
Files.write(newFile.toPath(), oldFile.readBytes())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
appName?.let { name ->
|
||||
// Change the app name.
|
||||
val manifest = get("AndroidManifest.xml")
|
||||
manifest.writeText(
|
||||
manifest.readText()
|
||||
.replace(
|
||||
"android:label=\"@string/application_name",
|
||||
"android:label=\"$name",
|
||||
),
|
||||
block = {
|
||||
compatibleWith(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"20.07.39",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
},
|
||||
|
||||
executeBlock = {
|
||||
val resourceDirectory = get("res")
|
||||
|
||||
mipmapDirectories.forEach { directory ->
|
||||
val targetDirectory = resourceDirectory.resolve(directory)
|
||||
|
||||
youtubeIconResourceFileNames_19_34.forEach { (old, new) ->
|
||||
val oldFile = targetDirectory.resolve("$old.png")
|
||||
val newFile = targetDirectory.resolve("$new.png")
|
||||
|
||||
Files.write(newFile.toPath(), oldFile.readBytes())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
package app.revanced.patches.youtube.layout.hide.endscreencards
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import app.revanced.util.containsLiteralInstruction
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstruction
|
||||
import app.revanced.util.literal
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.reference.FieldReference
|
||||
|
||||
internal val layoutCircleFingerprint = fingerprint {
|
||||
returns("Landroid/view/View;")
|
||||
@@ -38,3 +43,19 @@ internal val layoutVideoFingerprint = fingerprint {
|
||||
)
|
||||
literal { layoutVideo }
|
||||
}
|
||||
|
||||
internal val showEndscreenCardsFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("V")
|
||||
parameters("L")
|
||||
custom { method, classDef ->
|
||||
classDef.methods.count() == 5
|
||||
&& method.containsLiteralInstruction(0)
|
||||
&& method.containsLiteralInstruction(5)
|
||||
&& method.containsLiteralInstruction(8)
|
||||
&& method.indexOfFirstInstruction {
|
||||
val reference = getReference<FieldReference>()
|
||||
reference?.type == "Lcom/google/android/libraries/youtube/innertube/model/player/PlayerResponseModel;"
|
||||
} >= 0
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package app.revanced.patches.youtube.layout.hide.endscreencards
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
@@ -11,6 +12,8 @@ import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
|
||||
import app.revanced.patches.shared.misc.mapping.resourceMappings
|
||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.playservice.is_19_43_or_greater
|
||||
import app.revanced.patches.youtube.misc.playservice.versionCheckPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
@@ -22,7 +25,7 @@ internal var layoutIcon = -1L
|
||||
internal var layoutVideo = -1L
|
||||
private set
|
||||
|
||||
private val hideEndscreenCardsResourcePatch = resourcePatch {
|
||||
private val hideEndScreenCardsResourcePatch = resourcePatch {
|
||||
dependsOn(
|
||||
settingsPatch,
|
||||
resourceMappingPatch,
|
||||
@@ -30,7 +33,7 @@ private val hideEndscreenCardsResourcePatch = resourcePatch {
|
||||
)
|
||||
|
||||
execute {
|
||||
addResources("youtube", "layout.hide.endscreencards.hideEndscreenCardsResourcePatch")
|
||||
addResources("youtube", "layout.hide.endscreencards.hideEndScreenCardsResourcePatch")
|
||||
|
||||
PreferenceScreen.PLAYER.addPreferences(
|
||||
SwitchPreference("revanced_hide_endscreen_cards"),
|
||||
@@ -45,16 +48,17 @@ private val hideEndscreenCardsResourcePatch = resourcePatch {
|
||||
}
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/HideEndscreenCardsPatch;"
|
||||
"Lapp/revanced/extension/youtube/patches/HideEndScreenCardsPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val hideEndscreenCardsPatch = bytecodePatch(
|
||||
val hideEndScreenCardsPatch = bytecodePatch(
|
||||
name = "Hide end screen cards",
|
||||
description = "Adds an option to hide suggested video cards at the end of videos.",
|
||||
) {
|
||||
dependsOn(
|
||||
sharedExtensionPatch,
|
||||
hideEndscreenCardsResourcePatch,
|
||||
hideEndScreenCardsResourcePatch,
|
||||
versionCheckPatch
|
||||
)
|
||||
|
||||
compatibleWith(
|
||||
@@ -78,9 +82,24 @@ val hideEndscreenCardsPatch = bytecodePatch(
|
||||
|
||||
addInstruction(
|
||||
insertIndex,
|
||||
"invoke-static { v$viewRegister }, $EXTENSION_CLASS_DESCRIPTOR->hideEndscreen(Landroid/view/View;)V",
|
||||
"invoke-static { v$viewRegister }, " +
|
||||
"$EXTENSION_CLASS_DESCRIPTOR->hideEndScreenCardView(Landroid/view/View;)V",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
if (is_19_43_or_greater) {
|
||||
showEndscreenCardsFingerprint.method.addInstructionsWithLabels(
|
||||
0,
|
||||
"""
|
||||
invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->hideEndScreenCards()Z
|
||||
move-result v0
|
||||
if-eqz v0, :show
|
||||
return-void
|
||||
:show
|
||||
nop
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -186,15 +186,15 @@ val miniplayerPatch = bytecodePatch(
|
||||
if (!is_19_29_or_greater) {
|
||||
preferences += SwitchPreference("revanced_miniplayer_double_tap_action")
|
||||
}
|
||||
preferences += SwitchPreference("revanced_miniplayer_drag_and_drop")
|
||||
preferences += SwitchPreference("revanced_miniplayer_disable_drag_and_drop")
|
||||
}
|
||||
|
||||
if (is_19_43_or_greater) {
|
||||
preferences += SwitchPreference("revanced_miniplayer_horizontal_drag")
|
||||
preferences += SwitchPreference("revanced_miniplayer_disable_horizontal_drag")
|
||||
}
|
||||
|
||||
if (is_19_36_or_greater) {
|
||||
preferences += SwitchPreference("revanced_miniplayer_rounded_corners")
|
||||
preferences += SwitchPreference("revanced_miniplayer_disable_rounded_corners")
|
||||
}
|
||||
|
||||
preferences += SwitchPreference("revanced_miniplayer_hide_subtext")
|
||||
|
||||
@@ -10,13 +10,12 @@ import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
|
||||
import app.revanced.patches.shared.layout.theme.lithoColorHookPatch
|
||||
import app.revanced.patches.shared.layout.theme.lithoColorOverrideHook
|
||||
import app.revanced.patches.shared.misc.mapping.get
|
||||
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
|
||||
import app.revanced.patches.shared.misc.mapping.resourceMappings
|
||||
import app.revanced.patches.youtube.layout.theme.lithoColorHookPatch
|
||||
import app.revanced.patches.youtube.layout.theme.lithoColorOverrideHook
|
||||
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.playservice.is_19_25_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
|
||||
@@ -108,11 +107,6 @@ private val seekbarColorResourcePatch = resourcePatch {
|
||||
scaleNode.replaceChild(replacementNode, shapeNode)
|
||||
}
|
||||
|
||||
|
||||
if (!is_19_25_or_greater) {
|
||||
return@execute
|
||||
}
|
||||
|
||||
ytYoutubeMagentaColorId = resourceMappings[
|
||||
"color",
|
||||
"yt_youtube_magenta",
|
||||
@@ -260,10 +254,6 @@ val seekbarColorPatch = bytecodePatch(
|
||||
|
||||
lithoColorOverrideHook(EXTENSION_CLASS_DESCRIPTOR, "getLithoColor")
|
||||
|
||||
if (!is_19_25_or_greater) {
|
||||
return@execute
|
||||
}
|
||||
|
||||
// 19.25+ changes
|
||||
|
||||
arrayOf(
|
||||
|
||||
@@ -161,7 +161,7 @@ val openShortsInRegularPlayerPatch = bytecodePatch(
|
||||
addInstructions(
|
||||
index + 1,
|
||||
"""
|
||||
invoke-static { v$register }, ${EXTENSION_CLASS_DESCRIPTOR}->overrideBackPressToExit(Z)Z
|
||||
invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->overrideBackPressToExit(Z)Z
|
||||
move-result v$register
|
||||
"""
|
||||
)
|
||||
|
||||
@@ -3,27 +3,6 @@ package app.revanced.patches.youtube.layout.theme
|
||||
import app.revanced.patcher.fingerprint
|
||||
import app.revanced.patches.youtube.shared.YOUTUBE_MAIN_ACTIVITY_CLASS_TYPE
|
||||
import app.revanced.util.literal
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val lithoThemeFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PROTECTED, AccessFlags.FINAL)
|
||||
returns("V")
|
||||
parameters("Landroid/graphics/Rect;")
|
||||
opcodes(
|
||||
Opcode.IGET,
|
||||
Opcode.IF_EQZ,
|
||||
Opcode.INVOKE_VIRTUAL,
|
||||
Opcode.MOVE_RESULT,
|
||||
Opcode.IF_NEZ,
|
||||
Opcode.IGET_OBJECT,
|
||||
Opcode.INVOKE_VIRTUAL,
|
||||
Opcode.RETURN_VOID,
|
||||
)
|
||||
custom { method, _ ->
|
||||
method.name == "onBoundsChange"
|
||||
}
|
||||
}
|
||||
|
||||
internal const val GRADIENT_LOADING_SCREEN_AB_CONSTANT = 45412406L
|
||||
|
||||
|
||||
@@ -1,28 +1,19 @@
|
||||
package app.revanced.patches.youtube.layout.theme
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
|
||||
|
||||
@Deprecated("Function was moved", ReplaceWith("app.revanced.patches.shared.layout.theme.lithoColorOverrideHook"))
|
||||
@Suppress("unused")
|
||||
lateinit var lithoColorOverrideHook: (targetMethodClass: String, targetMethodName: String) -> Unit
|
||||
private set
|
||||
|
||||
val lithoColorHookPatch = bytecodePatch(
|
||||
description = "Adds a hook to set color of Litho components.",
|
||||
) {
|
||||
@Deprecated("Patch was moved", ReplaceWith("app.revanced.patches.shared.layout.theme.lithoColorHookPatch"))
|
||||
@Suppress("unused")
|
||||
val lithoColorHookPatch = bytecodePatch{
|
||||
dependsOn(app.revanced.patches.shared.layout.theme.lithoColorHookPatch)
|
||||
|
||||
execute {
|
||||
|
||||
var insertionIndex = lithoThemeFingerprint.patternMatch!!.endIndex - 1
|
||||
|
||||
lithoColorOverrideHook = { targetMethodClass, targetMethodName ->
|
||||
lithoThemeFingerprint.method.addInstructions(
|
||||
insertionIndex,
|
||||
"""
|
||||
invoke-static { p1 }, $targetMethodClass->$targetMethodName(I)I
|
||||
move-result p1
|
||||
""",
|
||||
)
|
||||
insertionIndex += 2
|
||||
}
|
||||
lithoColorOverrideHook = app.revanced.patches.shared.layout.theme.lithoColorOverrideHook
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
package app.revanced.patches.youtube.layout.theme
|
||||
|
||||
import app.revanced.patcher.patch.PatchException
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.resourcePatch
|
||||
import app.revanced.patcher.patch.stringOption
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.shared.layout.theme.THEME_COLOR_OPTION_DESCRIPTION
|
||||
import app.revanced.patches.shared.layout.theme.baseThemePatch
|
||||
import app.revanced.patches.shared.layout.theme.baseThemeResourcePatch
|
||||
import app.revanced.patches.shared.layout.theme.darkThemeBackgroundColorOption
|
||||
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
|
||||
import app.revanced.patches.shared.misc.settings.overrideThemeColors
|
||||
import app.revanced.patches.shared.misc.settings.preference.BasePreference
|
||||
import app.revanced.patches.shared.misc.settings.preference.InputType
|
||||
import app.revanced.patches.shared.misc.settings.preference.ListPreference
|
||||
import app.revanced.patches.shared.misc.settings.preference.PreferenceCategory
|
||||
@@ -17,126 +19,54 @@ import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.patches.shared.misc.settings.preference.TextPreference
|
||||
import app.revanced.patches.youtube.layout.seekbar.seekbarColorPatch
|
||||
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.playservice.is_19_25_or_greater
|
||||
import app.revanced.patches.youtube.misc.playservice.is_19_47_or_greater
|
||||
import app.revanced.patches.youtube.misc.playservice.versionCheckPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
import app.revanced.util.childElementsSequence
|
||||
import app.revanced.util.forEachChildElement
|
||||
import app.revanced.util.insertLiteralOverride
|
||||
import org.w3c.dom.Element
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/youtube/patches/theme/ThemePatch;"
|
||||
|
||||
val themePatch = bytecodePatch(
|
||||
name = "Theme",
|
||||
description = "Adds options for theming and applies a custom background theme " +
|
||||
"(dark background theme defaults to amoled black).",
|
||||
) {
|
||||
val amoledBlackColor = "@android:color/black"
|
||||
val whiteColor = "@android:color/white"
|
||||
val themePatch = baseThemePatch(
|
||||
extensionClassDescriptor = EXTENSION_CLASS_DESCRIPTOR,
|
||||
|
||||
val darkThemeBackgroundColor by stringOption(
|
||||
key = "darkThemeBackgroundColor",
|
||||
default = amoledBlackColor,
|
||||
values = mapOf(
|
||||
"Amoled black" to amoledBlackColor,
|
||||
"Material You" to "@android:color/system_neutral1_900",
|
||||
"Classic (old YouTube)" to "#FF212121",
|
||||
"Catppuccin (Mocha)" to "#FF181825",
|
||||
"Dark pink" to "#FF290025",
|
||||
"Dark blue" to "#FF001029",
|
||||
"Dark green" to "#FF002905",
|
||||
"Dark yellow" to "#FF282900",
|
||||
"Dark orange" to "#FF291800",
|
||||
"Dark red" to "#FF290000",
|
||||
),
|
||||
title = "Dark theme background color",
|
||||
description = "Can be a hex color (#AARRGGBB) or a color resource reference.",
|
||||
)
|
||||
block = {
|
||||
val lightThemeBackgroundColor by stringOption(
|
||||
key = "lightThemeBackgroundColor",
|
||||
default = "@android:color/white",
|
||||
values = mapOf(
|
||||
"White" to "@android:color/white",
|
||||
"Material You" to "@android:color/system_neutral1_50",
|
||||
"Catppuccin (Latte)" to "#E6E9EF",
|
||||
"Light pink" to "#FCCFF3",
|
||||
"Light blue" to "#D1E0FF",
|
||||
"Light green" to "#CCFFCC",
|
||||
"Light yellow" to "#FDFFCC",
|
||||
"Light orange" to "#FFE6CC",
|
||||
"Light red" to "#FFD6D6",
|
||||
),
|
||||
title = "Light theme background color",
|
||||
description = THEME_COLOR_OPTION_DESCRIPTION
|
||||
)
|
||||
|
||||
val lightThemeBackgroundColor by stringOption(
|
||||
key = "lightThemeBackgroundColor",
|
||||
default = whiteColor,
|
||||
values = mapOf(
|
||||
"White" to whiteColor,
|
||||
"Material You" to "@android:color/system_neutral1_50",
|
||||
"Catppuccin (Latte)" to "#FFE6E9EF",
|
||||
"Light pink" to "#FFFCCFF3",
|
||||
"Light blue" to "#FFD1E0FF",
|
||||
"Light green" to "#FFCCFFCC",
|
||||
"Light yellow" to "#FFFDFFCC",
|
||||
"Light orange" to "#FFFFE6CC",
|
||||
"Light red" to "#FFFFD6D6",
|
||||
),
|
||||
title = "Light theme background color",
|
||||
description = "Can be a hex color (#AARRGGBB) or a color resource reference.",
|
||||
)
|
||||
|
||||
dependsOn(
|
||||
sharedExtensionPatch,
|
||||
settingsPatch,
|
||||
addResourcesPatch,
|
||||
lithoColorHookPatch,
|
||||
seekbarColorPatch,
|
||||
versionCheckPatch,
|
||||
resourcePatch {
|
||||
dependsOn(
|
||||
settingsPatch,
|
||||
resourceMappingPatch,
|
||||
)
|
||||
val themeResourcePatch = resourcePatch {
|
||||
dependsOn(resourceMappingPatch)
|
||||
|
||||
execute {
|
||||
val preferences = mutableSetOf<BasePreference>(
|
||||
SwitchPreference("revanced_seekbar_custom_color"),
|
||||
TextPreference("revanced_seekbar_custom_color_primary",
|
||||
tag = "app.revanced.extension.shared.settings.preference.ColorPickerPreference",
|
||||
inputType = InputType.TEXT_CAP_CHARACTERS),
|
||||
overrideThemeColors(
|
||||
lightThemeBackgroundColor!!,
|
||||
darkThemeBackgroundColorOption.value!!
|
||||
)
|
||||
|
||||
if (is_19_25_or_greater) {
|
||||
preferences += TextPreference("revanced_seekbar_custom_color_accent",
|
||||
tag = "app.revanced.extension.shared.settings.preference.ColorPickerPreference",
|
||||
inputType = InputType.TEXT_CAP_CHARACTERS)
|
||||
}
|
||||
|
||||
PreferenceScreen.SEEKBAR.addPreferences(
|
||||
PreferenceCategory(
|
||||
titleKey = null,
|
||||
sorting = Sorting.UNSORTED,
|
||||
tag = "app.revanced.extension.shared.settings.preference.NoTitlePreferenceCategory",
|
||||
preferences = preferences
|
||||
)
|
||||
)
|
||||
|
||||
overrideThemeColors(lightThemeBackgroundColor!!, darkThemeBackgroundColor!!)
|
||||
|
||||
// Edit theme colors via resources.
|
||||
document("res/values/colors.xml").use { document ->
|
||||
val resourcesNode = document.getElementsByTagName("resources").item(0) as Element
|
||||
|
||||
resourcesNode.childElementsSequence().forEach { node ->
|
||||
when (node.getAttribute("name")) {
|
||||
"yt_black0", "yt_black1", "yt_black1_opacity95", "yt_black1_opacity98",
|
||||
"yt_black2", "yt_black3", "yt_black4", "yt_status_bar_background_dark",
|
||||
"material_grey_850",
|
||||
-> node.textContent = darkThemeBackgroundColor
|
||||
|
||||
"yt_white1", "yt_white1_opacity95", "yt_white1_opacity98",
|
||||
"yt_white2", "yt_white3", "yt_white4",
|
||||
-> node.textContent = lightThemeBackgroundColor
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun addColorResource(
|
||||
resourceFile: String,
|
||||
colorName: String,
|
||||
colorValue: String,
|
||||
) {
|
||||
document(resourceFile).use { document ->
|
||||
val resourcesNode = document.getElementsByTagName("resources").item(0) as Element
|
||||
val resourcesNode =
|
||||
document.getElementsByTagName("resources").item(0) as Element
|
||||
|
||||
resourcesNode.appendChild(
|
||||
document.createElement("color").apply {
|
||||
@@ -150,18 +80,31 @@ val themePatch = bytecodePatch(
|
||||
|
||||
// Add a dynamic background color to the colors.xml file.
|
||||
val splashBackgroundColorKey = "revanced_splash_background_color"
|
||||
addColorResource("res/values/colors.xml", splashBackgroundColorKey, lightThemeBackgroundColor!!)
|
||||
addColorResource("res/values-night/colors.xml", splashBackgroundColorKey, darkThemeBackgroundColor!!)
|
||||
addColorResource(
|
||||
"res/values/colors.xml",
|
||||
splashBackgroundColorKey,
|
||||
lightThemeBackgroundColor!!
|
||||
)
|
||||
addColorResource(
|
||||
"res/values-night/colors.xml",
|
||||
splashBackgroundColorKey,
|
||||
darkThemeBackgroundColorOption.value!!
|
||||
)
|
||||
|
||||
// Edit splash screen files and change the background color,
|
||||
// Edit splash screen files and change the background color.
|
||||
arrayOf(
|
||||
"res/drawable/quantum_launchscreen_youtube.xml",
|
||||
"res/drawable-sw600dp/quantum_launchscreen_youtube.xml",
|
||||
).forEach editSplashScreen@{ resourceFileName ->
|
||||
document(resourceFileName).use { document ->
|
||||
document.getElementsByTagName("layer-list").item(0).forEachChildElement { node ->
|
||||
document.getElementsByTagName(
|
||||
"layer-list"
|
||||
).item(0).forEachChildElement { node ->
|
||||
if (node.hasAttribute("android:drawable")) {
|
||||
node.setAttribute("android:drawable", "@color/$splashBackgroundColorKey")
|
||||
node.setAttribute(
|
||||
"android:drawable",
|
||||
"@color/$splashBackgroundColorKey"
|
||||
)
|
||||
return@editSplashScreen
|
||||
}
|
||||
}
|
||||
@@ -172,7 +115,6 @@ val themePatch = bytecodePatch(
|
||||
|
||||
// Fix the splash screen dark mode background color.
|
||||
// In 19.32+ the dark mode splash screen is white and fades to black.
|
||||
// Maybe it's a bug in YT, or maybe it intentionally. Who knows.
|
||||
document("res/values-night-v27/styles.xml").use { document ->
|
||||
// Create a night mode specific override for the splash screen background.
|
||||
val style = document.createElement("style")
|
||||
@@ -195,29 +137,63 @@ val themePatch = bytecodePatch(
|
||||
style.appendChild(styleItem)
|
||||
}
|
||||
|
||||
val resourcesNode = document.getElementsByTagName("resources").item(0) as Element
|
||||
val resourcesNode =
|
||||
document.getElementsByTagName("resources").item(0) as Element
|
||||
resourcesNode.appendChild(style)
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"20.07.39",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
dependsOn(
|
||||
sharedExtensionPatch,
|
||||
settingsPatch,
|
||||
addResourcesPatch,
|
||||
seekbarColorPatch,
|
||||
baseThemeResourcePatch(
|
||||
lightColorReplacement = { lightThemeBackgroundColor!! }
|
||||
),
|
||||
themeResourcePatch
|
||||
)
|
||||
)
|
||||
|
||||
execute {
|
||||
compatibleWith(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"20.07.39",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
},
|
||||
|
||||
executeBlock = {
|
||||
addResources("youtube", "layout.theme.themePatch")
|
||||
|
||||
PreferenceScreen.GENERAL_LAYOUT.addPreferences(
|
||||
SwitchPreference("revanced_gradient_loading_screen")
|
||||
)
|
||||
|
||||
val preferences = mutableSetOf(
|
||||
SwitchPreference("revanced_seekbar_custom_color"),
|
||||
TextPreference(
|
||||
"revanced_seekbar_custom_color_primary",
|
||||
tag = "app.revanced.extension.shared.settings.preference.ColorPickerPreference",
|
||||
inputType = InputType.TEXT_CAP_CHARACTERS
|
||||
),
|
||||
TextPreference(
|
||||
"revanced_seekbar_custom_color_accent",
|
||||
tag = "app.revanced.extension.shared.settings.preference.ColorPickerPreference",
|
||||
inputType = InputType.TEXT_CAP_CHARACTERS
|
||||
)
|
||||
)
|
||||
|
||||
PreferenceScreen.SEEKBAR.addPreferences(
|
||||
PreferenceCategory(
|
||||
titleKey = null,
|
||||
sorting = Sorting.UNSORTED,
|
||||
tag = "app.revanced.extension.shared.settings.preference.NoTitlePreferenceCategory",
|
||||
preferences = preferences
|
||||
)
|
||||
)
|
||||
|
||||
if (is_19_47_or_greater) {
|
||||
PreferenceScreen.GENERAL_LAYOUT.addPreferences(
|
||||
ListPreference("revanced_splash_screen_animation_style")
|
||||
@@ -236,7 +212,5 @@ val themePatch = bytecodePatch(
|
||||
"$EXTENSION_CLASS_DESCRIPTOR->getLoadingScreenType(I)I"
|
||||
)
|
||||
}
|
||||
|
||||
lithoColorOverrideHook(EXTENSION_CLASS_DESCRIPTOR, "getValue")
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
@@ -164,7 +164,7 @@ val navigationBarHookPatch = bytecodePatch(description = "Hooks the active navig
|
||||
|
||||
addInstruction(
|
||||
index + 1,
|
||||
"invoke-static { v$register }, ${EXTENSION_CLASS_DESCRIPTOR}->setToolbar(Landroid/widget/FrameLayout;)V"
|
||||
"invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->setToolbar(Landroid/widget/FrameLayout;)V"
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ var is_19_32_or_greater = false
|
||||
@Deprecated("19.34.42 is the lowest supported version")
|
||||
var is_19_33_or_greater = false
|
||||
private set
|
||||
@Deprecated("19.34.42 is the lowest supported version")
|
||||
var is_19_34_or_greater = false
|
||||
private set
|
||||
var is_19_35_or_greater = false
|
||||
|
||||
@@ -218,7 +218,8 @@ val settingsPatch = bytecodePatch(
|
||||
modifyActivityForSettingsInjection(
|
||||
licenseActivityOnCreateFingerprint.classDef,
|
||||
licenseActivityOnCreateFingerprint.method,
|
||||
YOUTUBE_ACTIVITY_HOOK_CLASS_DESCRIPTOR
|
||||
YOUTUBE_ACTIVITY_HOOK_CLASS_DESCRIPTOR,
|
||||
false
|
||||
)
|
||||
}
|
||||
|
||||
@@ -233,7 +234,8 @@ val settingsPatch = bytecodePatch(
|
||||
internal fun modifyActivityForSettingsInjection(
|
||||
activityOnCreateClass: MutableClass,
|
||||
activityOnCreateMethod: MutableMethod,
|
||||
extensionClassType: String
|
||||
extensionClassType: String,
|
||||
isYouTubeMusic: Boolean
|
||||
) {
|
||||
// Modify Activity and remove all existing layout code.
|
||||
// Must modify an existing activity and cannot add a new activity to the manifest,
|
||||
@@ -275,7 +277,7 @@ internal fun modifyActivityForSettingsInjection(
|
||||
// Override finish() to intercept back gesture.
|
||||
ImmutableMethod(
|
||||
activityOnCreateClass.type,
|
||||
"finish",
|
||||
if (isYouTubeMusic) "finish" else "onBackPressed",
|
||||
emptyList(),
|
||||
"V",
|
||||
AccessFlags.PUBLIC.value,
|
||||
@@ -283,13 +285,16 @@ internal fun modifyActivityForSettingsInjection(
|
||||
null,
|
||||
MutableMethodImplementation(3),
|
||||
).toMutable().apply {
|
||||
// Slightly different hooks are needed, otherwise the back button can behave wrong.
|
||||
val extensionMethodName = if (isYouTubeMusic) "handleFinish" else "handleBackPress"
|
||||
val invokeFinishOpcode = if (isYouTubeMusic) "invoke-super" else "invoke-virtual"
|
||||
|
||||
addInstructions(
|
||||
"""
|
||||
invoke-static {}, $extensionClassType->handleFinish()Z
|
||||
invoke-static {}, $extensionClassType->$extensionMethodName()Z
|
||||
move-result v0
|
||||
if-nez v0, :search_handled
|
||||
invoke-super { p0 }, Landroid/app/Activity;->finish()V
|
||||
return-void
|
||||
$invokeFinishOpcode { p0 }, Landroid/app/Activity;->finish()V
|
||||
:search_handled
|
||||
return-void
|
||||
"""
|
||||
|
||||
@@ -1,159 +1,36 @@
|
||||
package app.revanced.patches.youtube.video.audio
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
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.patcher.util.proxy.mutableTypes.MutableField.Companion.toMutable
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.patches.shared.misc.audio.forceOriginalAudioPatch
|
||||
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.youtube.misc.playservice.is_20_07_or_greater
|
||||
import app.revanced.patches.youtube.misc.playservice.versionCheckPatch
|
||||
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.youtube.misc.settings.settingsPatch
|
||||
import app.revanced.patches.youtube.shared.mainActivityOnCreateFingerprint
|
||||
import app.revanced.util.findMethodFromToString
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import app.revanced.util.insertLiteralOverride
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableField
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
|
||||
import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR =
|
||||
"Lapp/revanced/extension/youtube/patches/ForceOriginalAudioPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val forceOriginalAudioPatch = bytecodePatch(
|
||||
name = "Force original audio",
|
||||
description = "Adds an option to always use the original audio track.",
|
||||
) {
|
||||
dependsOn(
|
||||
sharedExtensionPatch,
|
||||
settingsPatch,
|
||||
addResourcesPatch,
|
||||
versionCheckPatch
|
||||
)
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"20.07.39",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
val forceOriginalAudioPatch = forceOriginalAudioPatch(
|
||||
block = {
|
||||
dependsOn(
|
||||
sharedExtensionPatch,
|
||||
settingsPatch,
|
||||
versionCheckPatch
|
||||
)
|
||||
)
|
||||
|
||||
execute {
|
||||
addResources("youtube", "video.audio.forceOriginalAudioPatch")
|
||||
|
||||
PreferenceScreen.VIDEO.addPreferences(
|
||||
SwitchPreference(
|
||||
key = "revanced_force_original_audio",
|
||||
tag = "app.revanced.extension.youtube.settings.preference.ForceOriginalAudioSwitchPreference"
|
||||
compatibleWith(
|
||||
"com.google.android.youtube"(
|
||||
"19.34.42",
|
||||
"20.07.39",
|
||||
"20.13.41",
|
||||
"20.14.43",
|
||||
)
|
||||
)
|
||||
|
||||
mainActivityOnCreateFingerprint.method.addInstruction(
|
||||
0,
|
||||
"invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->setPreferredLanguage()V"
|
||||
)
|
||||
|
||||
// Disable feature flag that ignores the default track flag
|
||||
// and instead overrides to the user region language.
|
||||
if (is_20_07_or_greater) {
|
||||
selectAudioStreamFingerprint.method.insertLiteralOverride(
|
||||
AUDIO_STREAM_IGNORE_DEFAULT_FEATURE_FLAG,
|
||||
"$EXTENSION_CLASS_DESCRIPTOR->ignoreDefaultAudioStream(Z)Z"
|
||||
)
|
||||
}
|
||||
|
||||
formatStreamModelToStringFingerprint.let {
|
||||
val isDefaultAudioTrackMethod = it.originalMethod.findMethodFromToString("isDefaultAudioTrack=")
|
||||
val audioTrackDisplayNameMethod = it.originalMethod.findMethodFromToString("audioTrackDisplayName=")
|
||||
val audioTrackIdMethod = it.originalMethod.findMethodFromToString("audioTrackId=")
|
||||
|
||||
it.classDef.apply {
|
||||
// Add a new field to store the override.
|
||||
val helperFieldName = "patch_isDefaultAudioTrackOverride"
|
||||
fields.add(
|
||||
ImmutableField(
|
||||
type,
|
||||
helperFieldName,
|
||||
"Ljava/lang/Boolean;",
|
||||
// Boolean is a 100% immutable class (all fields are final)
|
||||
// and safe to write to a shared field without volatile/synchronization,
|
||||
// but without volatile the field can show stale data
|
||||
// and the same field is calculated more than once by different threads.
|
||||
AccessFlags.PRIVATE.value or AccessFlags.VOLATILE.value,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
).toMutable()
|
||||
)
|
||||
|
||||
// Add a helper method because the isDefaultAudioTrack() has only 2 registers and 3 are needed.
|
||||
val helperMethodClass = type
|
||||
val helperMethodName = "patch_isDefaultAudioTrack"
|
||||
val helperMethod = ImmutableMethod(
|
||||
helperMethodClass,
|
||||
helperMethodName,
|
||||
listOf(ImmutableMethodParameter("Z", null, null)),
|
||||
"Z",
|
||||
AccessFlags.PRIVATE.value,
|
||||
null,
|
||||
null,
|
||||
MutableMethodImplementation(6),
|
||||
).toMutable().apply {
|
||||
addInstructionsWithLabels(
|
||||
0,
|
||||
"""
|
||||
iget-object v0, p0, $helperMethodClass->$helperFieldName:Ljava/lang/Boolean;
|
||||
if-eqz v0, :call_extension
|
||||
invoke-virtual { v0 }, Ljava/lang/Boolean;->booleanValue()Z
|
||||
move-result v3
|
||||
return v3
|
||||
|
||||
:call_extension
|
||||
invoke-virtual { p0 }, $audioTrackIdMethod
|
||||
move-result-object v1
|
||||
|
||||
invoke-virtual { p0 }, $audioTrackDisplayNameMethod
|
||||
move-result-object v2
|
||||
|
||||
invoke-static { p1, v1, v2 }, $EXTENSION_CLASS_DESCRIPTOR->isDefaultAudioStream(ZLjava/lang/String;Ljava/lang/String;)Z
|
||||
move-result v3
|
||||
|
||||
invoke-static { v3 }, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;
|
||||
move-result-object v0
|
||||
iput-object v0, p0, $helperMethodClass->$helperFieldName:Ljava/lang/Boolean;
|
||||
return v3
|
||||
"""
|
||||
)
|
||||
}
|
||||
methods.add(helperMethod)
|
||||
|
||||
// Modify isDefaultAudioTrack() to call extension helper method.
|
||||
isDefaultAudioTrackMethod.apply {
|
||||
val index = indexOfFirstInstructionOrThrow(Opcode.RETURN)
|
||||
val register = getInstruction<OneRegisterInstruction>(index).registerA
|
||||
|
||||
addInstructions(
|
||||
index,
|
||||
"""
|
||||
invoke-direct { p0, v$register }, $helperMethodClass->$helperMethodName(Z)Z
|
||||
move-result v$register
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
fixUseLocalizedAudioTrackFlag = is_20_07_or_greater,
|
||||
mainActivityOnCreateFingerprint = mainActivityOnCreateFingerprint,
|
||||
subclassExtensionClassDescriptor = EXTENSION_CLASS_DESCRIPTOR,
|
||||
preferenceScreen = PreferenceScreen.VIDEO,
|
||||
)
|
||||
|
||||
@@ -14,8 +14,7 @@ internal val settingsMenuVideoQualityGroup = mutableSetOf<BasePreference>()
|
||||
@Suppress("unused")
|
||||
val videoQualityPatch = bytecodePatch(
|
||||
name = "Video quality",
|
||||
description = "Adds options to use the advanced video quality menu, set default video qualities, " +
|
||||
"and disable video codecs such as VP9/HDR."
|
||||
description = "Adds options to set default video qualities and always use the advanced video quality menu."
|
||||
) {
|
||||
dependsOn(
|
||||
rememberVideoQualityPatch,
|
||||
|
||||
@@ -59,6 +59,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<!-- For localization, it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc.) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
@@ -133,7 +135,7 @@ Second \"item\" text"</string>
|
||||
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
|
||||
<!-- 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'. -->
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
</patch>
|
||||
<patch id="layout.hide.fullscreenambientmode.disableFullscreenAmbientModePatch">
|
||||
</patch>
|
||||
|
||||
@@ -59,6 +59,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<!-- For localization, it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc.) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
@@ -133,7 +135,7 @@ Second \"item\" text"</string>
|
||||
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
|
||||
<!-- 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'. -->
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
</patch>
|
||||
<patch id="layout.hide.fullscreenambientmode.disableFullscreenAmbientModePatch">
|
||||
</patch>
|
||||
|
||||
@@ -397,6 +397,20 @@ Second \"item\" text"</string>
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<string name="revanced_custom_filter_strings_summary">قائمة سلاسل منشئ مسار المكونات المراد تصفيتها مفصولة بسطر جديد</string>
|
||||
<string name="revanced_custom_filter_toast_invalid_syntax">فلتر مخصص غير صالح: %s</string>
|
||||
<string name="revanced_hide_view_count_title">إخفاء عدد المشاهدات</string>
|
||||
<string name="revanced_hide_view_count_summary_on">عدد المشاهدات مخفي في الموجز ونتائج البحث</string>
|
||||
<string name="revanced_hide_view_count_summary_off">عدد المشاهدات ظاهر في الموجز ونتائج البحث</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<string name="revanced_hide_view_count_user_dialog_message">"قيود:
|
||||
• رفوف Shorts وصفحات القنوات ونتائج البحث قد تظل تعرض أعداد المشاهدات
|
||||
• هذه الميزة لا تعمل مع عامل الشكل الخاص بالسيارات"</string>
|
||||
<string name="revanced_hide_upload_time_title">إخفاء وقت التحميل</string>
|
||||
<string name="revanced_hide_upload_time_summary_on">وقت التحميل مخفي في الخلاصة ونتائج البحث</string>
|
||||
<string name="revanced_hide_upload_time_summary_off">وقت التحميل معروض في الخلاصة ونتائج البحث</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<string name="revanced_hide_upload_time_user_dialog_message">"القيود:
|
||||
• قد تظل أرفف Shorts وصفحات القنوات ونتائج البحث تُظهر أوقات التحميل
|
||||
• هذه الميزة لا تعمل مع عامل شكل السيارات"</string>
|
||||
<string name="revanced_hide_keyword_content_screen_title">إخفاء محتوى الكلمات المفتاحية</string>
|
||||
<string name="revanced_hide_keyword_content_screen_summary">إخفاء فيديوهات البحث والموجز باستخدام فلاتر الكلمات المفتاحية</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">إخفاء فيديوهات الصفحة الرئيسية بواسطة الكلمات المفتاحية</string>
|
||||
@@ -783,7 +797,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_on">تم إخفاء الأزرار</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_off">يتم عرض الأزرار</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
<string name="revanced_hide_endscreen_cards_title">إخفاء بطاقات شاشة النهاية</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_on">تم إخفاء بطاقات شاشة النهاية</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_off">يتم عرض بطاقات شاشة النهاية</string>
|
||||
@@ -1338,25 +1352,25 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">حديث 2</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">حديث 3</string>
|
||||
<string name="revanced_miniplayer_type_entry_7">حديث 4</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_title">تمكين الزوايا المستديرة</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">الزوايا مستديرة</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">الزوايا مربعة</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_title">تعطيل الزوايا الدائرية</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_on">الزوايا مربعة</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_off">الزوايا مستديرة</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">تمكين النقر المزدوج والضغط لتغيير الحجم</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"تم تمكين إجراء الضغط المزدوج والضغط لتغيير الحجم
|
||||
|
||||
• النقر المزدوج لزيادة حجم المشغل المصغر
|
||||
• النقر المزدوج مرة أخرى لاستعادة الحجم الأصلي"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">إجراء النقر المزدوج والضغط لتغيير الحجم معطل</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">تمكين السحب والإفلات</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"السحب والإفلات مفعلان
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_title">تعطيل السحب والإفلات</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_on">تم تعطيل السحب والإفلات</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_off">"السحب والإفلات مفعلان
|
||||
|
||||
يمكن سحب المشغل المصغر إلى أي زاوية من الشاشة"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">تم تعطيل السحب والإفلات</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">تمكين إيماءة السحب الأفقية</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"تم تمكين إيماءة السحب الأفقية
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_title">تعطيل إيماءة السحب الأفقي</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_on">تم تعطيل إيماءة السحب الأفقية</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_off">"تم تمكين إيماءة السحب الأفقية
|
||||
|
||||
يمكن سحب المشغل المصغر خارج الشاشة إلى اليسار أو اليمين"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">تم تعطيل إيماءة السحب الأفقية</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_title">إخفاء أزرار الواجهة</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_on">تم إخفاء أزرار الواجهة</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_off">يتم عرض أزرار الواجهة</string>
|
||||
|
||||
@@ -60,6 +60,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<!-- For localization, it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc.) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
@@ -134,7 +136,7 @@ Second \"item\" text"</string>
|
||||
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
|
||||
<!-- 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'. -->
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
</patch>
|
||||
<patch id="layout.hide.fullscreenambientmode.disableFullscreenAmbientModePatch">
|
||||
</patch>
|
||||
|
||||
@@ -65,9 +65,9 @@ Second \"item\" text"</string>
|
||||
• Valideyn tənzimləmələri qapadılan uşaq tənzimləmələrin üstündə görünür"</string>
|
||||
<string name="revanced_settings_search_empty_history_title">Axtarış tarixçəsi boşdur</string>
|
||||
<string name="revanced_settings_search_empty_history_summary">Axtarış tarixçəsini saxlamaq üçün axtarış sorğusu yazın və Daxil Et basın</string>
|
||||
<string name="revanced_settings_search_history_title">Axtarış tarixçəsi tənzimləməsin göstər</string>
|
||||
<string name="revanced_settings_search_history_summary_on">Axtarış tarixçəsi tənzimləməsi göstərilir</string>
|
||||
<string name="revanced_settings_search_history_summary_off">Axtarış tarixçəsi tənzimləməsi göstərilmir</string>
|
||||
<string name="revanced_settings_search_history_title">Tənzimləmə axtarış tarixçəsin göstər</string>
|
||||
<string name="revanced_settings_search_history_summary_on">Tənzimləmə axtarış tarixçəsi göstərilir</string>
|
||||
<string name="revanced_settings_search_history_summary_off">Tənzimləmə axtarış tarixçəsi görünmür</string>
|
||||
<string name="revanced_show_menu_icons_title">ReVanced tənzimləmə nişanların göstər</string>
|
||||
<string name="revanced_show_menu_icons_summary_on">Tənzimləmə nişanları göstərilir</string>
|
||||
<string name="revanced_show_menu_icons_summary_off">Tənzimləmə nişanları göstərilmir</string>
|
||||
@@ -146,9 +146,9 @@ Gözlənilməz hallardan xəbərdar olmayacaqsınız."</string>
|
||||
<string name="revanced_debug_logs_clear_toast">Qeydlər silindi</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">Paylaşım keçidlərini təmizlə</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_on">İzləmə sorğu parametri paylaşılan keçidlərdən silinir</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_off">İzləmə sorğu parametri paylaşılan keçidlərdən silinmir</string>
|
||||
<string name="revanced_sanitize_sharing_links_title">Paylaşım linklərin təmizlə</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_on">İzləmə sorğusu faktoru paylaşılan linklərdən silinir</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_off">İzləmə sorğusu faktoru paylaşılan linklərdən silinmir</string>
|
||||
<string name="revanced_replace_music_with_youtube_title">Paylaşma keçidlərini youtube.com-a dəyişdir</string>
|
||||
<string name="revanced_replace_music_with_youtube_summary_on">Paylaşılan keçidlər youtube.com istifadə edir</string>
|
||||
<string name="revanced_replace_music_with_youtube_summary_off">Paylaşılan keçidlər music.youtube.com istifadə edir</string>
|
||||
@@ -381,7 +381,7 @@ Hər halda, bunu aktivləşdirmə IP ünvanınız kimi bəzi istifadəçi məlum
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">Short yarat düyməsi görünür</string>
|
||||
<string name="revanced_hide_comments_emoji_and_timestamp_buttons_title">Emoji və Vaxt damğası düymələrini gizlət</string>
|
||||
<string name="revanced_hide_comments_emoji_and_timestamp_buttons_summary_on">Emoji və Vaxt damğası düymələri gizlədilib</string>
|
||||
<string name="revanced_hide_comments_emoji_and_timestamp_buttons_summary_off">Emoji və Vaxt damğası düymələri göstərilir</string>
|
||||
<string name="revanced_hide_comments_emoji_and_timestamp_buttons_summary_off">Emoji və Vaxt damğası düymələri görünür</string>
|
||||
<string name="revanced_hide_comments_preview_comment_title">Önbaxış şərhin gizlət</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_on">Önbaxış şərhi gizlədilib</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_off">Önbaxış şərhi göstərilir</string>
|
||||
@@ -397,6 +397,20 @@ Hər halda, bunu aktivləşdirmə IP ünvanınız kimi bəzi istifadəçi məlum
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<string name="revanced_custom_filter_strings_summary">Yeni sətirlə ayrılmış filtr üçün element yol qurucusu sətirlərinin siyahısı</string>
|
||||
<string name="revanced_custom_filter_toast_invalid_syntax">Etibarsız fərdi filtr: %s</string>
|
||||
<string name="revanced_hide_view_count_title">Baxış sayını gizlət</string>
|
||||
<string name="revanced_hide_view_count_summary_on">Baxış sayı lentdə və axtarış nəticələrində gizlədilib</string>
|
||||
<string name="revanced_hide_view_count_summary_off">Baxış sayı lentdə və axtarış nəticələrində göstərilib</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<string name="revanced_hide_view_count_user_dialog_message">"Məhdudiyyətlər:
|
||||
• Shorts rəfləri, kanal səhifələri və axtarış nəticələri hələ də baxış saylarını göstərə bilər
|
||||
• Bu funksiya avtomobil form faktoru ilə işləmir"</string>
|
||||
<string name="revanced_hide_upload_time_title">Yükləmə vaxtını gizlət</string>
|
||||
<string name="revanced_hide_upload_time_summary_on">Yükləmə vaxtı lentdə və axtarış nəticələrində gizlədilib</string>
|
||||
<string name="revanced_hide_upload_time_summary_off">Yükləmə vaxtı lentdə və axtarış nəticələrində göstərilir</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<string name="revanced_hide_upload_time_user_dialog_message">"Məhdudiyyətlər:
|
||||
• Shorts rəflərində, kanal səhifələrində və axtarış nəticələrində yükləmə vaxtları hələ də göstərilə bilər
|
||||
• Bu funksiya avtomobil form faktoru ilə işləmir"</string>
|
||||
<string name="revanced_hide_keyword_content_screen_title">Açar söz məzmununu gizlət</string>
|
||||
<string name="revanced_hide_keyword_content_screen_summary">Açar söz filtrləri ilə axtarış və axın videolarını gizlət</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">Ev videolarını açar sözlərə görə gizlət</string>
|
||||
@@ -783,7 +797,7 @@ Səs treki menyusunu göstərmək üçün \"Video yayımları saxtalaşdır\"ı
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_on">Düymələr gizlidir</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_off">Düymələr göstərilir</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
<string name="revanced_hide_endscreen_cards_title">Son ekran kartlarını gizlət</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_on">Son ekran kartları gizlidir</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_off">Son ekran kartları göstərilir</string>
|
||||
@@ -1337,25 +1351,25 @@ Məhdudiyyət: Alətlər cizgisindəki geri düyməsin istifadə işləməyə bi
|
||||
<string name="revanced_miniplayer_type_entry_5">Müasir 2</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">Müasir 3</string>
|
||||
<string name="revanced_miniplayer_type_entry_7">Müasir 4</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_title">Dairəvi küncləri aktivləşdir</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Künclər dairəvidir</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Künclər kvadratdır</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_title">Dəyirmi küncləri qapat</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_on">Künclər kvadratdır</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_off">Künclər dairəvidir</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">Ölçüsünü dəyişmək üçün cüt toxunmanı və çimdikləməni aktiv et</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"Ölçüsün dəyişmək üçün cüt kliklə və çimdiklə
|
||||
|
||||
• Kiçik oynadıcı ölçüsün artırmaq üçün cüt toxun
|
||||
• Orijinal ölçünü bərpa etmək üçün təkrar cüt toxun"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">Ölçüsünü dəyişdirmək üçün cüt toxunma fəaliyyəti və çimdikləmə yoxdur</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">\"Sürüklə və burax\"ı aktivləşdir</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"Sürüklə və burax aktivdir
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_title">Sürüklə və burax-ı qapat</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_on">\"Sürüklə və burax\" aktiv deyil</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_off">"Sürüklə və burax aktivdir
|
||||
|
||||
Kiçik oynadıcı ekranın istənilən küncünə sürüklənə bilər"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">\"Sürüklə və burax\" aktiv deyil</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">Üfüqi sürükləmə jestini aktivləşdir</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Üfüqi sürükləmə jesti aktivdir
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_title">Üfüqi sürükləmə jestini qapat</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_on">Üfüqi sürükləmə jesti qapatıldı</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_off">"Üfüqi sürükləmə jesti aktivdir
|
||||
|
||||
Kiçik oynadıcı ekrandan sola və ya sağa sürüklənə bilər"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Üfüqi sürükləmə jesti qapatıldı</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_title">Örtük düymələrini gizlət</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_on">Örtük düymələri gizlidir</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_off">Örtük düymələri görünür</string>
|
||||
|
||||
@@ -397,6 +397,20 @@ Second \"item\" text"</string>
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<string name="revanced_custom_filter_strings_summary">Спіс радкоў канструктара шляхоў кампанентаў для фільтрацыі, раздзеленых новым радком</string>
|
||||
<string name="revanced_custom_filter_toast_invalid_syntax">Няправільны карыстацкі фільтр: %s</string>
|
||||
<string name="revanced_hide_view_count_title">Схаваць колькасць праглядаў</string>
|
||||
<string name="revanced_hide_view_count_summary_on">Колькасць праглядаў схавана ў стужцы і выніках пошуку</string>
|
||||
<string name="revanced_hide_view_count_summary_off">Колькасць праглядаў паказана ў стужцы і выніках пошуку</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<string name="revanced_hide_view_count_user_dialog_message">"Абмежаванні:
|
||||
• На паліцах Shorts, старонках каналаў і ў выніках пошуку ўсё яшчэ можа адлюстроўвацца колькасць праглядаў
|
||||
• Гэта функцыя не працуе з аўтамабільным форм-фактарам"</string>
|
||||
<string name="revanced_hide_upload_time_title">Схаваць час загрузкі</string>
|
||||
<string name="revanced_hide_upload_time_summary_on">Час загрузкі схаваны ў стужцы і выніках пошуку</string>
|
||||
<string name="revanced_hide_upload_time_summary_off">Час загрузкі паказаны ў стужцы і выніках пошуку</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<string name="revanced_hide_upload_time_user_dialog_message">"Абмежаванні:
|
||||
• На паліцах Shorts, старонках каналаў і ў выніках пошуку ўсё яшчэ можа адлюстроўвацца час загрузкі
|
||||
• Гэтая функцыя не працуе з аўтамабільным форм-фактарам"</string>
|
||||
<string name="revanced_hide_keyword_content_screen_title">Схаваць змест ключавых слоў</string>
|
||||
<string name="revanced_hide_keyword_content_screen_summary">Схавайце відэа для пошуку і стужкі з дапамогай фільтраў па ключавых словах</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">Схаваць хатняе відэа па ключавых словах</string>
|
||||
@@ -783,7 +797,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_on">Кнопкі схаваныя</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_off">Паказваюцца кнопкі</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
<string name="revanced_hide_endscreen_cards_title">Схаваць карткі канцавога экрана</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_on">Карткі канцавога экрана схаваны</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_off">Паказваюцца карткі канцавога экрана</string>
|
||||
@@ -1339,25 +1353,25 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Сучасны 2</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">Сучасны 3</string>
|
||||
<string name="revanced_miniplayer_type_entry_7">Сучасны 4</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_title">Включить закругленные углы</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Углы закруглены</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Углы квадратные</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_title">Адключыць закругленыя вуглы</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_on">Углы квадратные</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_off">Углы закруглены</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">Включить двойное нажатие и масштабирование с помощьющипка</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"Уключана дзеянне «подвойнае націсканне» і «шчыпкі для змены памеру»
|
||||
|
||||
• Подвойнае націсканне, каб павялічыць памер міні-прайгравальніка
|
||||
• Подвойнае націсканне яшчэ раз, каб аднавіць першапачатковы памер"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">Двойное нажатие и scalewithpinch отключены</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">Включить перетаскивание</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"Уключана перацягванне і кіданне
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_title">Адключыць перацягванне</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_on">Перетаскивание отключено</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_off">"Уключана перацягванне і кіданне
|
||||
|
||||
Міні-прайгравальнік можна перацягнуць у любы куток экрана"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">Перетаскивание отключено</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">Включить горизонтальный жест перетаскивания</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Уключаны жэст гарызантальнага перацягвання
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_title">Адключыць гарызантальны жэст перацягвання</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_on">Горизонтальный жест перетаскивания отключен</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_off">"Уключаны жэст гарызантальнага перацягвання
|
||||
|
||||
Міні-прайгравальнік можна перацягнуць за межы экрана ўлева ці ўправа"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Горизонтальный жест перетаскивания отключен</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_title">Схаваць кнопкі накладання</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_on">Кнопкі накладання схаваныя</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_off">Кнопкі накладання паказаны</string>
|
||||
|
||||
@@ -397,6 +397,20 @@ Second \"item\" text"</string>
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<string name="revanced_custom_filter_strings_summary">Списък с низове за изграждане на пътя на компонента, които да се филтрират, разделени с нов ред</string>
|
||||
<string name="revanced_custom_filter_toast_invalid_syntax">Невалиден потребителски филтър: %s</string>
|
||||
<string name="revanced_hide_view_count_title">Скриване на броя на преглежданията</string>
|
||||
<string name="revanced_hide_view_count_summary_on">Броят на преглежданията е скрит във фийда и резултатите от търсенето</string>
|
||||
<string name="revanced_hide_view_count_summary_off">Броят на преглежданията е показан във фийда и резултатите от търсенето</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<string name="revanced_hide_view_count_user_dialog_message">"Ограничения:
|
||||
• Рафтовете с Shorts, страниците на каналите и резултатите от търсенето може все още да показват броя на преглежданията
|
||||
• Тази функция не работи с автомобилен форм фактор"</string>
|
||||
<string name="revanced_hide_upload_time_title">Скриване на часа на качване</string>
|
||||
<string name="revanced_hide_upload_time_summary_on">Часът на качване е скрит в емисията и резултатите от търсенето</string>
|
||||
<string name="revanced_hide_upload_time_summary_off">Часът на качване е показан в емисията и резултатите от търсенето</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<string name="revanced_hide_upload_time_user_dialog_message">"Ограничения:
|
||||
• Рафтовете с Shorts, страниците на канали и резултатите от търсене може все още да показват часове на качване
|
||||
• Тази функция не работи с автомобилни форм-фактори"</string>
|
||||
<string name="revanced_hide_keyword_content_screen_title">Скриване на съдържанието с ключови думи</string>
|
||||
<string name="revanced_hide_keyword_content_screen_summary">Скриване на видеоклипове в резултатите от търсенуя и в новинарския поток с помощта на филтри с ключови думи</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">Скриване на видеоклипове в началната страница с ключови думи</string>
|
||||
@@ -783,7 +797,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_on">Бутоните са скрити</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_off">Бутоните се показват</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
<string name="revanced_hide_endscreen_cards_title">Скриване на препоръките в края</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_on">Препоръките в края са скрити</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_off">Препоръките в края се показват</string>
|
||||
@@ -1338,25 +1352,25 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Модерен 2</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">Модерен 3</string>
|
||||
<string name="revanced_miniplayer_type_entry_7">Модерен 4</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_title">Активирайте заоблени ъгли</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Ъглите са заоблени</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Ъглите са нормални</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_title">Деактивиране на заоблени ъгли</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_on">Ъглите са нормални</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_off">Ъглите са заоблени</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">Активирайте двойното докосване и щипване за преоразмеряване</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"Активирано е двойно докосване и щипка за преоразмеряване
|
||||
|
||||
• Двойно докосване за увеличаване на размера на мини плейъра
|
||||
• Двойно докосване отново, за да възстановите оригиналния размер"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">Двойно докосване и щипване за преоразмеряване е деактивирано</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">Разрешете плъзгане и местене</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"Включено е плъзгане и пускане
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_title">Деактивиране на плъзгане и пускане</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_on">Плъзгането и преместването е деактивирано</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_off">"Включено е плъзгане и пускане
|
||||
|
||||
Мини плейърът може да бъде плъзган до всеки ъгъл на екрана"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">Плъзгането и преместването е деактивирано</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">Активиране на хоризонтално плъзгане</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Активиран е хоризонтален жест за плъзгане
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_title">Деактивиране на хоризонтален жест за плъзгане</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_on">Жестът за хоризонтално плъзгане е деактивиран</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_off">"Активиран е хоризонтален жест за плъзгане
|
||||
|
||||
Мини плейърът може да бъде плъзган извън екрана наляво или надясно"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Жестът за хоризонтално плъзгане е деактивиран</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_title">Скриване на бутоните за наслагване</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_on">Бутоните за наслагване са скрити</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_off">Бутоните за наслагване са показани</string>
|
||||
|
||||
@@ -393,6 +393,20 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<string name="revanced_custom_filter_strings_summary">নতুন লাইন দ্বারা পৃথক করা ফিল্টার করার জন্য উপাদান পাথ বিল্ডার স্ট্রিং এর তালিকা</string>
|
||||
<string name="revanced_custom_filter_toast_invalid_syntax">ত্রুটিপূর্ণ কাস্টম ফিল্টার: %s</string>
|
||||
<string name="revanced_hide_view_count_title">দেখার সংখ্যা লুকান</string>
|
||||
<string name="revanced_hide_view_count_summary_on">ফিড এবং অনুসন্ধানের ফলাফলে দেখার সংখ্যা লুকানো আছে</string>
|
||||
<string name="revanced_hide_view_count_summary_off">ফিড এবং অনুসন্ধানের ফলাফলে দেখার সংখ্যা দেখানো আছে</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<string name="revanced_hide_view_count_user_dialog_message">"সীমাবদ্ধতা:
|
||||
• Shorts শেল্ফ, চ্যানেল পেজ এবং অনুসন্ধানের ফলাফলে এখনও দেখার সংখ্যা দেখানো হতে পারে
|
||||
• এই বৈশিষ্ট্যটি অটোমোটিভ ফর্ম ফ্যাক্টরের সাথে কাজ করে না"</string>
|
||||
<string name="revanced_hide_upload_time_title">আপলোডের সময় লুকান</string>
|
||||
<string name="revanced_hide_upload_time_summary_on">আপলোডের সময় ফিড এবং সার্চ ফলাফলে লুকানো আছে</string>
|
||||
<string name="revanced_hide_upload_time_summary_off">আপলোডের সময় ফিড এবং সার্চ ফলাফলে দেখানো আছে</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<string name="revanced_hide_upload_time_user_dialog_message">"সীমাবদ্ধতা:
|
||||
• Shorts শেলফ, চ্যানেল পেজ এবং সার্চ ফলাফলে এখনও আপলোডের সময় দেখানো হতে পারে
|
||||
• এই বৈশিষ্ট্যটি অটোমোটিভ ফর্ম ফ্যাক্টরের সাথে কাজ করে না"</string>
|
||||
<string name="revanced_hide_keyword_content_screen_title">কীওয়ার্ড কনটেন্ট লুকান</string>
|
||||
<string name="revanced_hide_keyword_content_screen_summary">কীওয়ার্ড ফিল্টার ব্যবহার করে অনুসন্ধান এবং ফিড ভিডিও লুকান</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">কীওয়ার্ড ব্যবহার করে প্রধান পাতার ভিডিও লুকান</string>
|
||||
@@ -779,7 +793,7 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_on">বোতাম লুকানো হয়</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_off">বোতাম দেখানো হয়</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
<string name="revanced_hide_endscreen_cards_title">শেষ স্ক্রীন কার্ড লুকান</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_on">শেষ স্ক্রীন কার্ড লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_off">শেষ স্ক্রীন কার্ড প্রদর্শিত হয়েছে</string>
|
||||
@@ -1334,25 +1348,25 @@ YouTube সেটিংসে অটো প্লে পরিবর্তন
|
||||
<string name="revanced_miniplayer_type_entry_5">মর্ডান ২</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">মর্ডান ৩</string>
|
||||
<string name="revanced_miniplayer_type_entry_7">আধুনিক ৪</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_title">গোলাকার কোণ সক্ষম করুন</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">কোণগুলি গোলাকার</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">কোণগুলি বর্গাকার</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_title">গোলাকার কোণা নিষ্ক্রিয় করুন</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_on">কোণগুলি বর্গাকার</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_off">কোণগুলি গোলাকার</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">ডাবল-ট্যাপ এবং পিঞ্চ টু রিসাইজ সক্ষম করুন</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"ডাবল-ট্যাপ করার ক্রিয়া এবং আকার পরিবর্তন করার জন্য চিমটি দেওয়া সক্রিয়
|
||||
|
||||
• miniplayer আকার বৃদ্ধি করতে ডাবল ট্যাপ করুন
|
||||
• মূল আকার পুনরুদ্ধার করতে আবার ডাবল ট্যাপ করুন"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">ডাবল-ট্যাপ অ্যাকশন এবং পিঞ্চ টু রিসাইজ অক্ষম</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">ড্র্যাগ এবং ড্রপ সক্ষম করুন</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"ড্র্যাগ এবং ড্রপ সক্রিয়
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_title">টেনে-ছেড়ে দেওয়া নিষ্ক্রিয় করুন</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_on">ড্র্যাগ এবং ড্রপ অক্ষম</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_off">"ড্র্যাগ এবং ড্রপ সক্রিয়
|
||||
|
||||
Miniplayer স্ক্রিনের যেকোনো কোণে টানা যাবে"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">ড্র্যাগ এবং ড্রপ অক্ষম</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">অনুভূমিক ড্র্যাগ অঙ্গভঙ্গি সক্ষম করুন</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"ক্ষैতিকভাবে টানার ভঙ্গি সক্রিয়
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_title">অনুভূমিক টেনে নেওয়ার ভঙ্গি নিষ্ক্রিয় করুন</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_on">অনুভূমিক ড্র্যাগ অঙ্গভঙ্গি অক্ষম</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_off">"ক্ষैতিকভাবে টানার ভঙ্গি সক্রিয়
|
||||
|
||||
Miniplayer স্ক্রিন থেকে বামে বা ডানে টানা যাবে"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">অনুভূমিক ড্র্যাগ অঙ্গভঙ্গি অক্ষম</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_title">ওভারলে বোতাম লুকান</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_on">ওভারলে বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_off">ওভারলে বোতাম দেখানো হয়েছে</string>
|
||||
|
||||
@@ -59,6 +59,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<!-- For localization, it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc.) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
@@ -133,7 +135,7 @@ Second \"item\" text"</string>
|
||||
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
|
||||
<!-- 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'. -->
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
</patch>
|
||||
<patch id="layout.hide.fullscreenambientmode.disableFullscreenAmbientModePatch">
|
||||
</patch>
|
||||
|
||||
@@ -59,6 +59,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<!-- For localization, it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc.) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
@@ -133,7 +135,7 @@ Second \"item\" text"</string>
|
||||
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
|
||||
<!-- 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'. -->
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
</patch>
|
||||
<patch id="layout.hide.fullscreenambientmode.disableFullscreenAmbientModePatch">
|
||||
</patch>
|
||||
|
||||
@@ -397,6 +397,20 @@ Pokud se Doodle v současné době zobrazuje ve vaší oblasti a toto nastavení
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<string name="revanced_custom_filter_strings_summary">Seznam řetězců builderu cest komponent oddělených novým řádkem</string>
|
||||
<string name="revanced_custom_filter_toast_invalid_syntax">Neplatný vlastní filtr: %s</string>
|
||||
<string name="revanced_hide_view_count_title">Skrýt počet zhlédnutí</string>
|
||||
<string name="revanced_hide_view_count_summary_on">Počet zhlédnutí je skrytý ve zdroji a výsledcích vyhledávání</string>
|
||||
<string name="revanced_hide_view_count_summary_off">Počet zhlédnutí je zobrazený ve zdroji a výsledcích vyhledávání</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<string name="revanced_hide_view_count_user_dialog_message">"Omezení:
|
||||
• Police Shorts, stránky kanálů a výsledky vyhledávání mohou stále zobrazovat počty zhlédnutí
|
||||
• Tato funkce nefunguje s automobilovým provedením"</string>
|
||||
<string name="revanced_hide_upload_time_title">Skrýt čas nahrání</string>
|
||||
<string name="revanced_hide_upload_time_summary_on">Čas nahrání je skryt ve feedu a výsledcích vyhledávání</string>
|
||||
<string name="revanced_hide_upload_time_summary_off">Čas nahrání je zobrazen ve feedu a výsledcích vyhledávání</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<string name="revanced_hide_upload_time_user_dialog_message">"Omezení:
|
||||
• Police Shorts, stránky kanálů a výsledky vyhledávání mohou stále zobrazovat časy nahrání
|
||||
• Tato funkce nefunguje s automobilovým provedením"</string>
|
||||
<string name="revanced_hide_keyword_content_screen_title">Skrýt obsah s klíčovými slovy</string>
|
||||
<string name="revanced_hide_keyword_content_screen_summary">Skrýt videa ve vyhledávání a feedu pomocí filtrů klíčových slov</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">Skrýt domácí videa podle klíčových slov</string>
|
||||
@@ -783,7 +797,7 @@ Chcete-li zobrazit nabídku zvukové stopy, změňte 'Zfalšovat streamy videa'
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_on">Tlačítka jsou skryta</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_off">Tlačítka jsou zobrazena</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
<string name="revanced_hide_endscreen_cards_title">Skrýt karty s informacemi o videu</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_on">Karty s informacemi o videu jsou skryty</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_off">Karty s informacemi o videu jsou zobrazeny</string>
|
||||
@@ -1338,25 +1352,25 @@ Omezení: Použití tlačítka zpět na panelu nástrojů nemusí fungovat"</str
|
||||
<string name="revanced_miniplayer_type_entry_5">Moderní 2</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">Moderní 3</string>
|
||||
<string name="revanced_miniplayer_type_entry_7">Moderní 4</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_title">Povolit zaoblené rohy</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Rohy jsou zaoblené</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Rohy jsou čtvercové</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_title">Zakázat zaoblené rohy</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_on">Rohy jsou čtvercové</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_off">Rohy jsou zaoblené</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">Povolit dvojitý klepnutí a přiblížení pro změnu velikosti</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"Aktivováno dvojitým klepnutím a přiblížením pro změnu velikosti
|
||||
|
||||
• Dvojitým klepnutím zvětšíte velikost \"miniplayeru\"
|
||||
• Dvojitým klepnutím znovu obnovíte původní velikost"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">Dvojitý klepnutí a přiblížení pro změnu velikosti je zakázáno</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">Povolit přetažení</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"Aktivováno přetahování
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_title">Zakázat přetahování</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_on">Přetažení je zakázáno</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_off">"Aktivováno přetahování
|
||||
|
||||
\"Miniplayer\" lze přetáhnout do libovolného rohu obrazovky"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">Přetažení je zakázáno</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">Povolit horizontální posun</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Aktivováno horizontální přetahování
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_title">Zakázat horizontální gesto přetahování</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_on">Horizontální posun je zakázán</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_off">"Aktivováno horizontální přetahování
|
||||
|
||||
\"Miniplayer\" lze přetáhnout z obrazovky doleva nebo doprava"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Horizontální posun je zakázán</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_title">Skrýt tlačítka překrytí</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_on">Tlačítka překrytí jsou skrytá</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_off">Tlačítka překrytí jsou zobrazena</string>
|
||||
|
||||
@@ -397,6 +397,20 @@ Hvis et Doodle vises i øjeblikket i din region, og denne skjuleindstilling er a
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<string name="revanced_custom_filter_strings_summary">Liste over stigenereringsstrenge til filtrering adskilt af ny linje</string>
|
||||
<string name="revanced_custom_filter_toast_invalid_syntax">Ugyldigt brugerdefineret filter: %s</string>
|
||||
<string name="revanced_hide_view_count_title">Skjul antal visninger</string>
|
||||
<string name="revanced_hide_view_count_summary_on">Antal visninger er skjult i feed og søgeresultater</string>
|
||||
<string name="revanced_hide_view_count_summary_off">Antal visninger vises i feed og søgeresultater</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<string name="revanced_hide_view_count_user_dialog_message">"Begrænsninger:
|
||||
• Shorts-hylder, kanalsider og søgeresultater kan stadig vise antal visninger
|
||||
• Denne funktion virker ikke med bilformat"</string>
|
||||
<string name="revanced_hide_upload_time_title">Skjul uploadtid</string>
|
||||
<string name="revanced_hide_upload_time_summary_on">Uploadtid er skjult i feed og søgeresultater</string>
|
||||
<string name="revanced_hide_upload_time_summary_off">Uploadtid vises i feed og søgeresultater</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<string name="revanced_hide_upload_time_user_dialog_message">"Begrænsninger:
|
||||
• Shorts hylder, kanalsider og søgeresultater kan stadig vise uploadtider
|
||||
• Denne funktion virker ikke med bilformat"</string>
|
||||
<string name="revanced_hide_keyword_content_screen_title">Skjul nøgleordsindhold</string>
|
||||
<string name="revanced_hide_keyword_content_screen_summary">Skjul søge- og feed videoer ved hjælp af søgeordsfiltre</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">Skjul hjemmevideoer med søgeord</string>
|
||||
@@ -783,7 +797,7 @@ For at vise lydsporsmenuen, skift 'Spoof videostreams' til iPadOS"</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_on">Knapper er skjult</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_off">Knapper vises</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
<string name="revanced_hide_endscreen_cards_title">Skjul slutskærmkort</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_on">Slutskærmskortene er skjult</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_off">Kort til slutskærm vises</string>
|
||||
@@ -1340,25 +1354,25 @@ Begrænsning: Brug af tilbage-knappen på værktøjslinjen fungerer muligvis ikk
|
||||
<string name="revanced_miniplayer_type_entry_5">Moderne 2</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">Moderne 3</string>
|
||||
<string name="revanced_miniplayer_type_entry_7">Moderne 4</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_title">Aktiver afrundede hjørner</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Hjørner er afrundede</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Hjørner er firkantede</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_title">Deaktiver afrundede hjørner</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_on">Hjørner er firkantede</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_off">Hjørner er afrundede</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">Aktiver dobbelttryk og klemme for at ændre størrelse</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"Dobbelttrykshandling og knib for at ændre størrelse er aktiveret
|
||||
|
||||
● Dobbelttryk for at øge miniafspillerstørrelsen
|
||||
● Dobbelttryk igen for at gendanne den oprindelige størrelse"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">Dobbelttryk handling og klemme for at ændre størrelse er deaktiveret</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">Aktiver træk og slip</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"Træk og slip er aktiveret
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_title">Deaktiver træk og slip</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_on">Træk og slip er deaktiveret</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_off">"Træk og slip er aktiveret
|
||||
|
||||
Miniafspiller kan trækkes til et hvilket som helst hjørne af skærmen"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">Træk og slip er deaktiveret</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">Aktiver vandret træk-bevægelse</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Vandret træk-bevægelse aktiveret
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_title">Deaktiver vandret trækbevægelse</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_on">Vandret trækbevægelse deaktiveret</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_off">"Vandret træk-bevægelse aktiveret
|
||||
|
||||
Miniafspiller kan trækkes ud over skærmen til venstre eller højre"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Vandret trækbevægelse deaktiveret</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_title">Skjul overlay-knapper</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_on">Overlay-knapper er skjult</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_off">Overlay-knapper vises</string>
|
||||
|
||||
@@ -396,6 +396,20 @@ Wenn ein Doodle zurzeit in Ihrer Region angezeigt wird und diese Einstellung zum
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<string name="revanced_custom_filter_strings_summary">Liste der Komponenten-Pfad-Generator-Zeichenketten zum Filtern durch neue Zeile getrennt</string>
|
||||
<string name="revanced_custom_filter_toast_invalid_syntax">Ungültiger benutzerdefinierter Filter: %s</string>
|
||||
<string name="revanced_hide_view_count_title">Aufrufe ausblenden</string>
|
||||
<string name="revanced_hide_view_count_summary_on">Aufrufe sind im Feed und in den Suchergebnissen ausgeblendet</string>
|
||||
<string name="revanced_hide_view_count_summary_off">Aufrufe werden im Feed und in den Suchergebnissen angezeigt</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<string name="revanced_hide_view_count_user_dialog_message">"Einschränkungen:
|
||||
• Shorts-Regale, Kanalseiten und Suchergebnisse können weiterhin Aufrufe anzeigen
|
||||
• Diese Funktion funktioniert nicht mit dem Automotive-Formfaktor"</string>
|
||||
<string name="revanced_hide_upload_time_title">Upload-Zeit ausblenden</string>
|
||||
<string name="revanced_hide_upload_time_summary_on">Die Upload-Zeit ist im Feed und in den Suchergebnissen ausgeblendet</string>
|
||||
<string name="revanced_hide_upload_time_summary_off">Die Upload-Zeit wird im Feed und in den Suchergebnissen angezeigt</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<string name="revanced_hide_upload_time_user_dialog_message">"Einschränkungen:
|
||||
• Shorts-Regale, Kanalseiten und Suchergebnisse können weiterhin Upload-Zeiten anzeigen
|
||||
• Diese Funktion funktioniert nicht mit dem Automobil-Formfaktor"</string>
|
||||
<string name="revanced_hide_keyword_content_screen_title">Keyword-Inhalt ausblenden</string>
|
||||
<string name="revanced_hide_keyword_content_screen_summary">Verstecke Such- und Feed-Videos mit Schlüsselwortfilter</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">Home-Videos nach Schlüsselwörtern ausblenden</string>
|
||||
@@ -546,7 +560,7 @@ Passen Sie die Helligkeit an, indem Sie auf der linken Seite des Bildschirms ver
|
||||
<string name="revanced_swipe_volume_summary_off">Die Vollbild-Lautstärkegeste ist deaktiviert</string>
|
||||
<string name="revanced_swipe_press_to_engage_title">Wischen durch Drücken aktivieren</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_on">Wischen durch Drücken ist aktiviert</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_off">Wischen durch Drücken ist deaktiviert</string>
|
||||
<string name="revanced_swipe_press_to_engage_summary_off">Wischgeste durch Drücken ist deaktiviert</string>
|
||||
<string name="revanced_swipe_haptic_feedback_title">Haptisches Feedback aktivieren</string>
|
||||
<string name="revanced_swipe_haptic_feedback_summary_on">Haptisches Feedback ist aktiviert</string>
|
||||
<string name="revanced_swipe_haptic_feedback_summary_off">Haptisches Feedback ist deaktiviert</string>
|
||||
@@ -780,7 +794,7 @@ Um das Audiotrack-Menü anzuzeigen, ändern Sie \"Video-Streams fälschen\" zu i
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_on">Buttons sind ausgeblendet</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_off">Tasten werden angezeigt</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
<string name="revanced_hide_endscreen_cards_title">Endkarte ausblenden</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_on">Endbildschirmkarten sind ausgeblendet</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_off">Endbildschirmkarten werden angezeigt</string>
|
||||
@@ -1335,25 +1349,25 @@ Einschränkung: Die Verwendung der Zurück-Taste auf der Symbolleiste funktionie
|
||||
<string name="revanced_miniplayer_type_entry_5">Modern 2</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">Modern 3</string>
|
||||
<string name="revanced_miniplayer_type_entry_7">Modern 4</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_title">Abgerundete Ecken aktivieren</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Ecken sind abgerundet</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Ecken sind Quadrat</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_title">Abgerundete Ecken deaktivieren</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_on">Ecken sind Quadrat</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_off">Ecken sind abgerundet</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">Aktiviere doppeltes Tippen und Pratzen um die Größe zu ändern</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"Doppeltippen und mit zwei Fingern vergrößern/verkleinern ist aktiviert
|
||||
|
||||
• Doppeltippen, um die Größe des Mini-Players zu vergrößern
|
||||
• Nochmals doppeltippen, um die ursprüngliche Größe wiederherzustellen"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">Doppel-Tipp-Aktion und Pinch um die Größe zu verändern, ist deaktiviert</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">Drag and Drop aktivieren</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"Drag-and-Drop ist aktiviert
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_title">Drag & Drop deaktivieren</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_on">Drag and Drop ist deaktiviert</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_off">"Drag-and-Drop ist aktiviert
|
||||
|
||||
Der Mini-Player kann in jede Ecke des Bildschirms gezogen werden"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">Drag and Drop ist deaktiviert</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">Horizontales Ziehen aktivieren</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Horizontale Ziehgeste aktiviert
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_title">Horizontale Ziehgeste deaktivieren</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_on">Horizontale Drag Geste deaktiviert</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_off">"Horizontale Ziehgeste aktiviert
|
||||
|
||||
Der Mini-Player kann mit einer Wischgeste vom Bildschirm nach links oder rechts gezogen werden"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Horizontale Drag Geste deaktiviert</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_title">Overlay-Buttons ausblenden</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_on">Overlay-Buttons sind ausgeblendet</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_off">Overlay-Buttons werden angezeigt</string>
|
||||
|
||||
@@ -399,6 +399,20 @@ Second \"item\" text"</string>
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<string name="revanced_custom_filter_strings_summary">Λίστα από συμβολοσειρές στοιχείων για φιλτράρισμα, διαχωρισμένες σε νέες γραμμές</string>
|
||||
<string name="revanced_custom_filter_toast_invalid_syntax">Μη έγκυρο προσαρμοσμένο φίλτρο: %s</string>
|
||||
<string name="revanced_hide_view_count_title">Αριθμός προβολών στη ροή και στα αποτελέσματα αναζήτησης</string>
|
||||
<string name="revanced_hide_view_count_summary_on">Κρυμμένος</string>
|
||||
<string name="revanced_hide_view_count_summary_off">Εμφανίζεται</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<string name="revanced_hide_view_count_user_dialog_message">"Περιορισμοί:
|
||||
• Οι ενότητες Shorts, οι σελίδες καναλιών και τα αποτελέσματα αναζήτησης ενδέχεται να εξακολουθούν να εμφανίζουν τους αριθμούς προβολών
|
||||
• Αυτή η λειτουργία δεν λειτουργεί με την διάταξη αυτοκινήτου"</string>
|
||||
<string name="revanced_hide_upload_time_title">Χρόνος μεταμόρφωσης στη ροή και στα αποτελέσματα αναζήτησης</string>
|
||||
<string name="revanced_hide_upload_time_summary_on">Κρυμμένος</string>
|
||||
<string name="revanced_hide_upload_time_summary_off">Εμφανίζεται</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<string name="revanced_hide_upload_time_user_dialog_message">"Περιορισμοί:
|
||||
• Οι ενότητες Shorts, οι σελίδες καναλιών και τα αποτελέσματα αναζήτησης ενδέχεται να εξακολουθούν να εμφανίζουν τον χρόνο μεταμόρφωσης
|
||||
• Αυτή η λειτουργία δεν λειτουργεί με την διάταξη αυτοκινήτου"</string>
|
||||
<string name="revanced_hide_keyword_content_screen_title">Απόκρυψη περιεχομένου λέξεων-κλειδιών</string>
|
||||
<string name="revanced_hide_keyword_content_screen_summary">Απόκρυψη βίντεο ροής και αναζήτησης χρησιμοποιώντας φίλτρα λέξεων-κλειδιών</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">Φιλτράρισμα αρχικής ροής</string>
|
||||
@@ -785,7 +799,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_on">Κρυμμένα</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_off">Εμφανίζονται</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
<string name="revanced_hide_endscreen_cards_title">Κάρτες τελικής οθόνης</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_on">Κρυμμένες</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_off">Εμφανίζονται</string>
|
||||
@@ -1339,25 +1353,25 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Μοντέρνος 2</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">Μοντέρνος 3</string>
|
||||
<string name="revanced_miniplayer_type_entry_7">Μοντέρνος 4</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_title">Στρογγυλεμένες γωνίες</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Οι γωνίες είναι στρογγυλεμένες</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Οι γωνίες είναι τετράγωνες</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_title">Απενεργοποίηση στρογγυλεμένων γωνιών</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_on">Οι γωνίες είναι τετράγωνες</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_off">Οι γωνίες είναι στρογγυλεμένες</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">Διπλό πάτημα & τσίμπημα για αλλαγή μεγέθους</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"Η λειτουργία διπλού πατήματος και τσιμπήματος για αλλαγή μεγέθους είναι ενεργοποιημένη
|
||||
|
||||
• Πατήστε δύο φορές για να αυξήσετε το μέγεθος της ελαχιστοποιημένης οθόνης
|
||||
• Πατήστε ξανά δύο φορές για επαναφορά στο αρχικό της μέγεθος"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">Η λειτουργία διπλού πατήματος και τσιμπήματος για αλλαγή μεγέθους είναι απενεργοποιημένη</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">Λειτουργία μεταφοράς και απόθεσης</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"Η λειτουργία μεταφοράς και απόθεσης είναι ενεργοποιημένη
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_title">Απενεργοποίηση λειτουργίας μεταφοράς και απόθεσης</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_on">Η λειτουργία μεταφοράς και απόθεσης είναι απενεργοποιημένη</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_off">"Η λειτουργία μεταφοράς και απόθεσης είναι ενεργοποιημένη
|
||||
|
||||
Η ελαχιστοποιημένη οθόνη αναπαραγωγής μπορεί να μετακινηθεί σε οποιαδήποτε γωνία της οθόνης"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">Η λειτουργία μεταφοράς και απόθεσης είναι απενεργοποιημένη</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">Χειρονομία οριζόντιας σύρσης</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Η χειρονομία οριζόντιας σύρσης είναι ενεργοποιημένη
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_title">Απενεργοποίηση χειρονομίας οριζόντιας σύρσης</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_on">Η χειρονομία οριζόντιας σύρσης είναι απενεργοποιημένη</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_off">"Η χειρονομία οριζόντιας σύρσης είναι ενεργοποιημένη
|
||||
|
||||
Η ελαχιστοποιημένη οθόνη μπορεί να συρθεί εκτός οθόνης προς τα αριστερά ή δεξιά"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Η χειρονομία οριζόντιας σύρσης είναι απενεργοποιημένη</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_title">Κουμπιά επικάλυψης οθόνης αναπαραγωγής</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_on">Κρυμμένα</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_off">Εμφανίζονται</string>
|
||||
|
||||
@@ -397,6 +397,20 @@ Si un doodle se está mostrando actualmente en tu región y este ajuste de ocult
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<string name="revanced_custom_filter_strings_summary">Lista de cadenas del constructor de rutas del componente para filtrar separadas por una nueva línea</string>
|
||||
<string name="revanced_custom_filter_toast_invalid_syntax">Filtro personalizado no válido: %s</string>
|
||||
<string name="revanced_hide_view_count_title">Ocultar recuento de visualizaciones</string>
|
||||
<string name="revanced_hide_view_count_summary_on">El recuento de visualizaciones está oculto en el feed y los resultados de búsqueda</string>
|
||||
<string name="revanced_hide_view_count_summary_off">El recuento de visualizaciones se muestra en el feed y los resultados de búsqueda</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<string name="revanced_hide_view_count_user_dialog_message">"Limitaciones:
|
||||
• Las estanterías de Shorts, las páginas de canal y los resultados de búsqueda aún pueden mostrar el recuento de visualizaciones
|
||||
• Esta característica no funciona con el factor de forma automotriz"</string>
|
||||
<string name="revanced_hide_upload_time_title">Ocultar hora de subida</string>
|
||||
<string name="revanced_hide_upload_time_summary_on">La hora de subida está oculta en el feed y los resultados de búsqueda</string>
|
||||
<string name="revanced_hide_upload_time_summary_off">La hora de subida se muestra en el feed y los resultados de búsqueda</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<string name="revanced_hide_upload_time_user_dialog_message">"Limitaciones:
|
||||
• Las estanterías de Shorts, las páginas de canales y los resultados de búsqueda aún pueden mostrar los tiempos de subida
|
||||
• Esta función no funciona con el factor de forma automotriz"</string>
|
||||
<string name="revanced_hide_keyword_content_screen_title">Ocultar contenido de palabra clave</string>
|
||||
<string name="revanced_hide_keyword_content_screen_summary">Ocultar videos de búsqueda y feed usando filtros de palabras clave</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">Ocultar videos domésticos por palabras clave</string>
|
||||
@@ -783,7 +797,7 @@ Para mostrar el menú de la pista de audio, cambia 'Suplantar transmisiones de v
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_on">Los botones están ocultos</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_off">Los botones se muestran</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
<string name="revanced_hide_endscreen_cards_title">Ocultar tarjetas de pantalla final</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_on">Las tarjetas de pantalla de fin están ocultas</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_off">Se muestran las tarjetas de la pantalla final</string>
|
||||
@@ -1329,25 +1343,25 @@ Limitación: Es posible que el uso del botón de retroceso en la barra de herram
|
||||
<string name="revanced_miniplayer_type_entry_5">Moderna 2</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">Moderna 3</string>
|
||||
<string name="revanced_miniplayer_type_entry_7">Moderno 4</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_title">Habilitar esquinas redondeadas</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Las esquinas están redondeadas</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Las esquinas son cuadradas</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_title">Desactivar esquinas redondeadas</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_on">Las esquinas son cuadradas</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_off">Las esquinas están redondeadas</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">Habilitar doble toque y pellizco para redimensionar</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"La acción de doble toque y el pellizco para cambiar el tamaño están activados
|
||||
|
||||
• Toca dos veces para aumentar el tamaño del minireproductor
|
||||
• Toca dos veces de nuevo para restaurar el tamaño original"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">Acción de doble toque y pellizco para redimensionar está desactivado</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">Activar arrastrar y soltar</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"La función de arrastrar y soltar está activada
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_title">Desactivar arrastrar y soltar</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_on">Arrastre y suelte está desactivado</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_off">"La función de arrastrar y soltar está activada
|
||||
|
||||
El minireproductor se puede arrastrar a cualquier esquina de la pantalla"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">Arrastre y suelte está desactivado</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">Activar gesto de arrastre horizontal</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"El gesto de arrastre horizontal está activado
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_title">Desactivar gesto de arrastre horizontal</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_on">Gesto de arrastre horizontal desactivado</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_off">"El gesto de arrastre horizontal está activado
|
||||
|
||||
El minireproductor se puede arrastrar fuera de la pantalla hacia la izquierda o la derecha"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Gesto de arrastre horizontal desactivado</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_title">Ocultar botones de superposición</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_on">Los botones de superposición están ocultos</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_off">Se muestran los botones de superposición</string>
|
||||
|
||||
@@ -397,6 +397,20 @@ Kui Doodle on teie piirkonnas praegu nähtav ja see peitmise seade on sisse lül
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<string name="revanced_custom_filter_strings_summary">Rea ridadega eraldatud elementide loendi filtreerimiseks</string>
|
||||
<string name="revanced_custom_filter_toast_invalid_syntax">Kehtetu kohandatud filter: %s</string>
|
||||
<string name="revanced_hide_view_count_title">Peida vaatamiste arv</string>
|
||||
<string name="revanced_hide_view_count_summary_on">Vaatamiste arv on peidetud voos ja otsingutulemustes</string>
|
||||
<string name="revanced_hide_view_count_summary_off">Vaatamiste arv on nähtav voos ja otsingutulemustes</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<string name="revanced_hide_view_count_user_dialog_message">"Piirangud:
|
||||
• Shorts-i riiulid, kanalilehed ja otsingutulemused võivad endiselt kuvada vaatamiste arvu
|
||||
• See funktsioon ei tööta autotööstuse vormiteguriga"</string>
|
||||
<string name="revanced_hide_upload_time_title">Peida üleslaadimisaeg</string>
|
||||
<string name="revanced_hide_upload_time_summary_on">Üleslaadimisaeg on peidetud voost ja otsingutulemustest</string>
|
||||
<string name="revanced_hide_upload_time_summary_off">Üleslaadimisaeg on nähtav voos ja otsingutulemustes</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<string name="revanced_hide_upload_time_user_dialog_message">"Piirangud:
|
||||
• Shorts riiulitel, kanalilehtedel ja otsingutulemustes võib üleslaadimisaeg endiselt nähtav olla
|
||||
• See funktsioon ei tööta autodele mõeldud vorminguga"</string>
|
||||
<string name="revanced_hide_keyword_content_screen_title">Peida video sisu märksõna abil</string>
|
||||
<string name="revanced_hide_keyword_content_screen_summary">Peida otsingu ja voo videod, kasutades märksõna filtreid</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">Peida kodu videod märksõnade abil</string>
|
||||
@@ -783,7 +797,7 @@ Heliraja menüü nägemiseks muutke \"Video voogude võltsimine\" iPadOS-iks"</s
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_on">Nupud on peidetud</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_off">Nupud on nähtavad</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
<string name="revanced_hide_endscreen_cards_title">Peida lõpukujunduse kaardid</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_on">Lõpukujunduse kaardid on peidetud</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_off">Lõpukujunduse kaardid on nähtavad</string>
|
||||
@@ -1338,25 +1352,25 @@ Piirang: tööriistaribal tagasinupp ei pruugi töötada"</string>
|
||||
<string name="revanced_miniplayer_type_entry_5">Kaasaegne 2</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">Kaasaegne 3</string>
|
||||
<string name="revanced_miniplayer_type_entry_7">Moodne 4</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_title">Lülita ümarate nurkade režiim sisse</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Nurgad on ümarad</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Nurgad on ruudukujulised</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_title">Keela ümarad nurgad</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_on">Nurgad on ruudukujulised</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_off">Nurgad on ümarad</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">Lülita kahekordne puudutus ja pigistamine suuruse muutmiseks sisse</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"Topeltklõpsamise toiming ja tihendamisega suuruse muutmine on lubatud
|
||||
|
||||
• Topeltklõpsake, et suurendada minimaalse mängija suurust
|
||||
• Topeltklõpsake uuesti, et taastada algne suurus"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">Kahekordse puudutuse toiming ja pigistamine suuruse muutmiseks on keelatud</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">Lülita lohistamine sisse</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"Lohistamine on lubatud
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_title">Keela lohistamine</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_on">Lohistamine on keelatud</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_off">"Lohistamine on lubatud
|
||||
|
||||
Minimaalset mängijat saab lohistada ekraani mis tahes nurka"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">Lohistamine on keelatud</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">Lülita horisontaalse lohistamise žest sisse</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Horisontaalne lohistamise žest on lubatud
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_title">Keela horisontaalne lohistamisžest</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_on">Horisontaalse lohistamise žest on keelatud</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_off">"Horisontaalne lohistamise žest on lubatud
|
||||
|
||||
Minimaalset mängijat saab lohistada ekraanilt vasakule või paremale"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Horisontaalse lohistamise žest on keelatud</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_title">Peida ülekatteliidese nupud</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_on">Ülekatteliidese nupud on peidetud</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_off">Ülekatteliidese nupud on nähtaval</string>
|
||||
|
||||
@@ -59,6 +59,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<!-- For localization, it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc.) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
@@ -133,7 +135,7 @@ Second \"item\" text"</string>
|
||||
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
|
||||
<!-- 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'. -->
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
</patch>
|
||||
<patch id="layout.hide.fullscreenambientmode.disableFullscreenAmbientModePatch">
|
||||
</patch>
|
||||
|
||||
@@ -106,6 +106,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<!-- For localization, it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc.) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
@@ -180,7 +182,7 @@ Second \"item\" text"</string>
|
||||
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
|
||||
<!-- 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'. -->
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
</patch>
|
||||
<patch id="layout.hide.fullscreenambientmode.disableFullscreenAmbientModePatch">
|
||||
</patch>
|
||||
|
||||
@@ -147,8 +147,8 @@ Et saa ilmoituksia odottamattomista tapahtumista."</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">Puhdista jakamislinkit</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_on">Seurantamoduulin parametri poistetaan jaetuista linkeistä</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_off">Seurantamoduulin parametria ei poisteta jaetuista linkeistä</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_on">Seurantakyselyparametrit poistetaan jaetuista linkeistä</string>
|
||||
<string name="revanced_sanitize_sharing_links_summary_off">Seurantakyselyparametrejä ei poisteta jaetuista linkeistä</string>
|
||||
<string name="revanced_replace_music_with_youtube_title">Muuta jakolinkit youtube.com-sivustoksi</string>
|
||||
<string name="revanced_replace_music_with_youtube_summary_on">Jaetut linkit käyttävät youtube.com-sivustoa</string>
|
||||
<string name="revanced_replace_music_with_youtube_summary_off">Jaetut linkit käyttävät music.youtube.com-sivustoa</string>
|
||||
@@ -187,138 +187,138 @@ Tämän käyttöönotto kirjaa myös joitakin käyttäjätietoja, kuten IP-osoit
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<string name="revanced_hide_album_cards_title">Piilota albumikortit</string>
|
||||
<string name="revanced_hide_album_cards_summary_on">Albumikortit on piilotettu</string>
|
||||
<string name="revanced_hide_album_cards_summary_on">Albumikortit piilotetaan</string>
|
||||
<string name="revanced_hide_album_cards_summary_off">Albumikortit näytetään</string>
|
||||
<string name="revanced_hide_artist_cards_title">Piilota artistikortit</string>
|
||||
<string name="revanced_hide_artist_cards_summary_on">Artistikortit on piilotettu</string>
|
||||
<string name="revanced_hide_artist_cards_summary_on">Artistikortit piilotetaan</string>
|
||||
<string name="revanced_hide_artist_cards_summary_off">Artistikortit näytetään</string>
|
||||
<string name="revanced_hide_chips_shelf_title">Piilota siruhylly</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_on">Siruhylly on piilotettu</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_on">Siruhylly piilotetaan</string>
|
||||
<string name="revanced_hide_chips_shelf_summary_off">Siruhylly näytetään</string>
|
||||
<string name="revanced_hide_community_posts_title">Piilota yhteisöpostaukset</string>
|
||||
<string name="revanced_hide_community_posts_summary_on">Yhteisöpostaukset on piilotettu</string>
|
||||
<string name="revanced_hide_community_posts_summary_on">Yhteisöpostaukset piilotetaan</string>
|
||||
<string name="revanced_hide_community_posts_summary_off">Yhteisöpostaukset näytetään</string>
|
||||
<string name="revanced_hide_compact_banner_title">Piilota kompaktit bannerit</string>
|
||||
<string name="revanced_hide_compact_banner_summary_on">Kompaktit bannerit on piilotettu</string>
|
||||
<string name="revanced_hide_compact_banner_summary_on">Kompaktit bannerit piilotetaan</string>
|
||||
<string name="revanced_hide_compact_banner_summary_off">Kompaktit bannerit näytetään</string>
|
||||
<string name="revanced_hide_crowdfunding_box_title">Piilota joukkorahoituslaatikko</string>
|
||||
<string name="revanced_hide_crowdfunding_box_summary_on">Joukkorahoituslaatikko on piilotettu</string>
|
||||
<string name="revanced_hide_crowdfunding_box_summary_on">Joukkorahoituslaatikko piilotetaan</string>
|
||||
<string name="revanced_hide_crowdfunding_box_summary_off">Joukkorahoituslaatikko näytetään</string>
|
||||
<string name="revanced_hide_expandable_card_title">Piilota laajennettava kortti</string>
|
||||
<string name="revanced_hide_expandable_card_summary_on">Laajennettava kortti on piilotettu videoiden alla</string>
|
||||
<string name="revanced_hide_expandable_card_summary_on">Laajennettava kortti videoiden alla piilotetaan</string>
|
||||
<string name="revanced_hide_expandable_card_summary_off">Laajennettava kortti näytetään videoiden alla</string>
|
||||
<string name="revanced_hide_floating_microphone_button_title">Piilota kelluva mikrofonipainike</string>
|
||||
<string name="revanced_hide_floating_microphone_button_summary_on">Kelluva mikrofonipainike on piilotettu haussa</string>
|
||||
<string name="revanced_hide_floating_microphone_button_summary_on">Kelluva mikrofonipainike piilotetaan haussa</string>
|
||||
<string name="revanced_hide_floating_microphone_button_summary_off">Kelluva mikrofonipainike näytetään haussa</string>
|
||||
<string name="revanced_hide_horizontal_shelves_title">Piilota vaakasuuntaiset hyllyt</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">"Vaakahyllyt on piilotettu, kuten:
|
||||
<string name="revanced_hide_horizontal_shelves_summary_on">"Vaakahyllyt piilotetaan:
|
||||
• Tuoreimmat uutiset
|
||||
• Jatka katselua
|
||||
• Tutustu useampiin kanaviin
|
||||
• Olennaisimmat
|
||||
• Tutustu muihin kanaviin
|
||||
• Osuvimmat
|
||||
• Ostokset
|
||||
• Katso uudelleen"</string>
|
||||
<string name="revanced_hide_horizontal_shelves_summary_off">Vaakasuuntaiset hyllyt näytetään</string>
|
||||
<string name="revanced_hide_image_shelf_title">Piilota kuvahylly</string>
|
||||
<string name="revanced_hide_image_shelf_summary_on">Kuvahylly on piilotettu hakutuloksissa</string>
|
||||
<string name="revanced_hide_image_shelf_summary_on">Kuvahylly piilotetaan\' hakutuloksissa</string>
|
||||
<string name="revanced_hide_image_shelf_summary_off">Kuvahylly näytetään hakutuloksissa</string>
|
||||
<string name="revanced_hide_latest_posts_title">Piilota uusimmat postaukset</string>
|
||||
<string name="revanced_hide_latest_posts_summary_on">Uusimmat postaukset on piilotettu</string>
|
||||
<string name="revanced_hide_latest_posts_summary_on">Uusimmat postaukset piilotetaan</string>
|
||||
<string name="revanced_hide_latest_posts_summary_off">Uusimmat postaukset näytetään</string>
|
||||
<string name="revanced_hide_mix_playlists_title">Piilota mix-soittolistat</string>
|
||||
<string name="revanced_hide_mix_playlists_summary_on">Mix-soittolistat piilotettu</string>
|
||||
<string name="revanced_hide_mix_playlists_summary_on">Mix-soittolistat piilotetaan</string>
|
||||
<string name="revanced_hide_mix_playlists_summary_off">Mix-soittolistat näytetään</string>
|
||||
<string name="revanced_hide_movies_section_title">Piilota elokuvat-osio</string>
|
||||
<string name="revanced_hide_movies_section_summary_on">Elokuvat-osio on piilotettu</string>
|
||||
<string name="revanced_hide_movies_section_summary_on">Elokuvat-osio piilotetaan</string>
|
||||
<string name="revanced_hide_movies_section_summary_off">Elokuvat-osio näytetään</string>
|
||||
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
|
||||
This item appear in the Subscriptions feed for future livestreams or unreleased videos. -->
|
||||
<string name="revanced_hide_notify_me_button_title">Piilota \"Ilmoita minulle\" -painike</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_on">Ilmoita minulle -painike on piilotettu</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_on">Ilmoita minulle -painike piilotetaan</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_off">Ilmoita minulle -painike näytetään</string>
|
||||
<string name="revanced_hide_playables_title">Piilota Pelattavat</string>
|
||||
<string name="revanced_hide_playables_summary_on">Pelattavat on piilotettu</string>
|
||||
<string name="revanced_hide_playables_summary_on">Pelattavat piilotetaan</string>
|
||||
<string name="revanced_hide_playables_summary_off">Pelattavat näytetään</string>
|
||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears when searching for a YT creator. -->
|
||||
<string name="revanced_hide_show_more_button_title">Piilota \"Näytä lisää\" -painike</string>
|
||||
<string name="revanced_hide_show_more_button_summary_on">Näytä lisää -painike on piilotettu hakutuloksissa</string>
|
||||
<string name="revanced_hide_show_more_button_summary_on">Näytä lisää -painike piilotetaan hakutuloksissa</string>
|
||||
<string name="revanced_hide_show_more_button_summary_off">Näytä lisää -painike näytetään hakutuloksissa</string>
|
||||
<string name="revanced_hide_surveys_title">Piilota kyselyt</string>
|
||||
<string name="revanced_hide_surveys_summary_on">Kyselyt on piilotettu</string>
|
||||
<string name="revanced_hide_surveys_summary_on">Kyselyt piilotetaan</string>
|
||||
<string name="revanced_hide_surveys_summary_off">Kyselyt näytetään</string>
|
||||
<string name="revanced_hide_ticket_shelf_title">Piilota lippuhylly</string>
|
||||
<string name="revanced_hide_ticket_shelf_summary_on">Lippuhylly on piilotettu</string>
|
||||
<string name="revanced_hide_ticket_shelf_summary_on">Lippuhylly piilotetaan</string>
|
||||
<string name="revanced_hide_ticket_shelf_summary_off">Lippuhylly näytetään</string>
|
||||
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_video_recommendation_labels_title">Piilota videosuositusten tunnisteet</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_on">\'Ihmiset katsoivat myös\' ja \'Saatat myös pitää\' -merkinnät hakutuloksissa ovat piilotettuna</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_on">\'Ihmiset katsoivat myös\' ja \'Saatat myös pitää\' -tunnisteet piilotetaan hakutuloksissa</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_off">\"Ihmiset katsoivat myös\" ja \"Saatat myös pitää\" -otsikot näkyvät hakutuloksissa</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">Piilota YouTube Doodlet</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Logon YouTube Doodles -animaatio on piilotettu</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Logon YouTube Doodles -animaatio piilotetaan</string>
|
||||
<string name="revanced_hide_doodles_summary_off">Logon YouTube Doodles -animaatio näytetään</string>
|
||||
<string name="revanced_hide_doodles_user_dialog_message">"YouTube Doodlet näkyvät muutamana päivänä vuodessa.
|
||||
|
||||
Jos Doodle näkyy tällä hetkellä alueellasi ja tämä piilotusasetus on käytössä, myös hakupalkin alla oleva suodatinpalkki piilotetaan."</string>
|
||||
<string name="revanced_hide_channel_bar_title">Piilota kanavapalkki</string>
|
||||
<string name="revanced_hide_channel_bar_summary_on">Kanavapalkki on piilotettu</string>
|
||||
<string name="revanced_hide_channel_bar_summary_on">Kanavapalkki piilotetaan</string>
|
||||
<string name="revanced_hide_channel_bar_summary_off">Kanavapalkki näytetään</string>
|
||||
<string name="revanced_hide_channel_watermark_title">Piilota kanavan vesileima</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_on">Vesileima on piilotettu</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_on">Vesileima piilotetaan</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">Vesileima näytetään</string>
|
||||
<string name="revanced_hide_emergency_box_title">Piilota hätätilannelaatikot</string>
|
||||
<string name="revanced_hide_emergency_box_summary_on">Hätätilannelaatikot on piilotettu</string>
|
||||
<string name="revanced_hide_emergency_box_summary_on">Hätätilannelaatikot piilotetaan</string>
|
||||
<string name="revanced_hide_emergency_box_summary_off">Hätätilannelaatikot näytetään</string>
|
||||
<string name="revanced_hide_info_panels_title">Piilota tietopaneelit</string>
|
||||
<string name="revanced_hide_info_panels_summary_on">Tietopaneelit on piilotettu</string>
|
||||
<string name="revanced_hide_info_panels_summary_on">Tietopaneelit piilotetaan</string>
|
||||
<string name="revanced_hide_info_panels_summary_off">Tietopaneelit näytetään</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
<string name="revanced_hide_join_membership_button_title">Piilota Liity-painike</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_on">Liity-painike on piilotettu</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_on">Liity-painike piilotetaan</string>
|
||||
<string name="revanced_hide_join_membership_button_summary_off">Liity-painike näytetään</string>
|
||||
<string name="revanced_hide_medical_panels_title">Piilota lääketieteelliset paneelit</string>
|
||||
<string name="revanced_hide_medical_panels_summary_on">Lääketieteelliset paneelit on piilotettu</string>
|
||||
<string name="revanced_hide_medical_panels_summary_on">Lääketieteelliset paneelit piilotetaan</string>
|
||||
<string name="revanced_hide_medical_panels_summary_off">Lääketieteelliset paneelit näytetään</string>
|
||||
<string name="revanced_hide_quick_actions_title">Piilota pikatoiminnot</string>
|
||||
<string name="revanced_hide_quick_actions_summary_on">Pikatoiminnot on piilotettu kokoruututilassa</string>
|
||||
<string name="revanced_hide_quick_actions_summary_on">Pikatoiminnot piilotetaan kokoruututilassa</string>
|
||||
<string name="revanced_hide_quick_actions_summary_off">Pikatoiminnot näytetään kokoruututilassa</string>
|
||||
<string name="revanced_hide_related_videos_title">Piilota liittyvät videot</string>
|
||||
<string name="revanced_hide_related_videos_summary_on">Liittyvät videot on piilotettu pikatoiminnoissa</string>
|
||||
<string name="revanced_hide_related_videos_summary_on">Liittyvät videot piilotetaan pikatoiminnoissa</string>
|
||||
<string name="revanced_hide_related_videos_summary_off">Liittyvät videot näytetään pikatoiminnoissa</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_title">Piilota tilaajien säännöt</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_on">Tilaajien yhteisön säännöt on piilotettu</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_on">Tilaajien yhteisön säännöt piilotetaan</string>
|
||||
<string name="revanced_hide_subscribers_community_guidelines_summary_off">Tilaajien yhteisön säännöt näytetään</string>
|
||||
<string name="revanced_hide_timed_reactions_title">Piilota ajoitetut reaktiot</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_on">Ajoitetut reaktiot on piilotettu</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_on">Ajoitetut reaktiot piilotetaan</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_off">Ajoitetut reaktiot näytetään</string>
|
||||
<string name="revanced_hide_ai_generated_video_summary_section_title">Piilota \"tekoälyn luoma videoyhteenveto\"</string>
|
||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Tekoälyn luoma videon yhteenveto-osio on piilotettu</string>
|
||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Tekoälyn luoma videon yhteenveto-osio piilotetaan</string>
|
||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Tekoälyn luoma videon yhteenveto-osio näytetään</string>
|
||||
<string name="revanced_hide_ask_section_title">Piilota Ask</string>
|
||||
<string name="revanced_hide_ask_section_summary_on">Ask-osio on piilotettu</string>
|
||||
<string name="revanced_hide_ask_section_summary_on">Ask-osio piilotetaan</string>
|
||||
<string name="revanced_hide_ask_section_summary_off">Ask-osio näytetään</string>
|
||||
<string name="revanced_hide_attributes_section_title">Piilota Määritteet</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">Esitellyt paikat, Pelit, Musiikki ja Mainitut ihmiset -osiot on piilotettu</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">Esitellyt paikat, Pelit, Musiikki ja Mainitut ihmiset -osiot piilotetaan</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">Esitellyt paikat, Pelit, Musiikki ja Mainitut ihmiset -osiot näytetään</string>
|
||||
<string name="revanced_hide_chapters_section_title">Piilota Videon osat</string>
|
||||
<string name="revanced_hide_chapters_section_summary_on">Videon osat -osio on piilotettu</string>
|
||||
<string name="revanced_hide_chapters_section_summary_on">Videon osat -osio piilotetaan</string>
|
||||
<string name="revanced_hide_chapters_section_summary_off">Videon osat -osio näytetään</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_title">Piilota \"Miten sisältö on luotu\"</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_on">Miten sisältö on luotu -osio on piilotettu</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_on">Miten sisältö on luotu -osio piilotetaan</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_off">Miten sisältö on luotu -osio näytetään</string>
|
||||
<string name="revanced_hide_podcast_section_title">Piilota \"Tutustu podcastiin\"</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Tutustu podcastiin -osio on piilotettu</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Tutustu podcastiin -osio piilotetaan</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Tutustu podcastiin -osio näytetään</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Piilota tietokortit</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">Infokortit-osio on piilotettu</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">Infokortit-osio piilotetaan</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">Infokortit-osio näytetään</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">Piilota \"Keskeiset käsitteet\"</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Keskeiset käsitteet -osio on piilotettu</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Keskeiset käsitteet -osio piilotetaan</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Keskeiset käsitteet -osio näytetään</string>
|
||||
<string name="revanced_hide_transcript_section_title">Piilota transkriptio</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">Transkriptio-osio on piilotettu</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">Transkriptio-osio piilotetaan</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">Transkriptio-osio näytetään</string>
|
||||
<string name="revanced_hide_description_components_screen_title">Videon kuvaus</string>
|
||||
<string name="revanced_hide_description_components_screen_summary">Piilota tai näytä videon kuvauksen osia</string>
|
||||
@@ -328,10 +328,10 @@ Jos Doodle näkyy tällä hetkellä alueellasi ja tämä piilotusasetus on käyt
|
||||
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Piilotettu syötteissä</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Näytetään syötteissä</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_title">Piilota liittyvissä videoissa</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">Piilotettu liittyvissä videoissa</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">Piilotetaan liittyvissä videoissa</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">Näytetään liittyvissä videoissa</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_search_title">Piilota hakutuloksissa</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Piilotettu hakutuloksissa</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Piilotetaan hakutuloksissa</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_search_summary_off">Näytetään hakutuloksissa</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_history_title">Piilota katseluhistoriassa</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_history_summary_on">Piilotettu katseluhistoriassa</string>
|
||||
@@ -340,53 +340,53 @@ Jos Doodle näkyy tällä hetkellä alueellasi ja tämä piilotusasetus on käyt
|
||||
<string name="revanced_channel_screen_summary">Piilota tai näytä kanavasivun osia</string>
|
||||
<!-- 'For You' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">Piilota \"\'Sinulle\" -hylly</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Sinulle-hylly on piilotettu</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Sinulle-hylly piilotetaan</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">Sinulle-hylly näytetään</string>
|
||||
<string name="revanced_hide_links_preview_title">Piilota linkkien esikatselu</string>
|
||||
<string name="revanced_hide_links_preview_summary_on">Linkkien esikatselu on piilotettu</string>
|
||||
<string name="revanced_hide_links_preview_summary_on">Linkkien esikatselu piilotetaan</string>
|
||||
<string name="revanced_hide_links_preview_summary_off">Linkkien esikatselu näytetään</string>
|
||||
<string name="revanced_hide_members_shelf_title">Piilota jäsenhylly</string>
|
||||
<string name="revanced_hide_members_shelf_summary_on">Jäsenhylly on piilotettu</string>
|
||||
<string name="revanced_hide_members_shelf_summary_off">Jäsenhylly näytetään</string>
|
||||
<string name="revanced_hide_members_shelf_title">Piilota jäsenet-hylly</string>
|
||||
<string name="revanced_hide_members_shelf_summary_on">Jäsenet-hylly piilotetaan</string>
|
||||
<string name="revanced_hide_members_shelf_summary_off">Jäsenet-hylly näytetään</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_community_button_title">Piilota \"Tutustu yhteisöön\" -painike</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_on">\"Tutustu yhteisöön\" -painike on piilotettu</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_on">\"Tutustu yhteisöön\" -painike piilotetaan</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_off">\"Tutustu yhteisöön\" -painike näytetään</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">Piilota \"Vieraile kaupassa\" -painike kanavasivuilla</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Kaupan \"Näytä kaikki\" -painike on piilotettu</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Kaupan \"Näytä kaikki\" -painike piilotetaan</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Kaupan \"Näytä kaikki\" -painike näytetään</string>
|
||||
<string name="revanced_comments_screen_title">Kommentit</string>
|
||||
<string name="revanced_comments_screen_summary">Piilota tai näytä kommenttiosion osia</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_title">Piilota tekoälyn luoma chat-yhteenveto</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_summary_on">Tekoälyn luoma chat-yhteenveto on piilotettu</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_summary_on">Tekoälyn luoma chat-yhteenveto piilotetaan</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_summary_off">Tekoälyn luoma chat-yhteenveto näytetään</string>
|
||||
<string name="revanced_hide_comments_ai_summary_title">Piilota tekoälyn luoma kommenttiyhteenveto</string>
|
||||
<string name="revanced_hide_comments_ai_summary_summary_on">Tekoälyn luoma kommenttien yhteenveto on piilotettu</string>
|
||||
<string name="revanced_hide_comments_ai_summary_summary_on">Tekoälyn luoma kommenttien yhteenveto piilotetaan</string>
|
||||
<string name="revanced_hide_comments_ai_summary_summary_off">Tekoälyn luoma kommenttien yhteenveto näytetään</string>
|
||||
<string name="revanced_hide_comments_channel_guidelines_title">Piilota kanavan säännöt</string>
|
||||
<string name="revanced_hide_comments_channel_guidelines_summary_on">Kanavan säännöt on piilotettu</string>
|
||||
<string name="revanced_hide_comments_channel_guidelines_summary_on">Kanavan säännöt piilotetaan</string>
|
||||
<string name="revanced_hide_comments_channel_guidelines_summary_off">Kanavan säännöt näytetään</string>
|
||||
<string name="revanced_hide_comments_by_members_header_title">Piilota \"Jäsenten kommentit\" -ylätunniste</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">Jäsenten kommentit -ylätunniste on piilotettu</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_on">Jäsenten kommentit -ylätunniste piilotetaan</string>
|
||||
<string name="revanced_hide_comments_by_members_header_summary_off">Jäsenten kommentit -ylätunniste näytetään</string>
|
||||
<string name="revanced_hide_comments_section_title">Piilota kommenttiosio</string>
|
||||
<string name="revanced_hide_comments_section_summary_on">Kommenttiosio on piilotettu</string>
|
||||
<string name="revanced_hide_comments_section_summary_on">Kommenttiosio piilotetaan</string>
|
||||
<string name="revanced_hide_comments_section_summary_off">Kommenttiosio näytetään</string>
|
||||
<string name="revanced_hide_comments_community_guidelines_title">Piilota yhteisön säännöt</string>
|
||||
<string name="revanced_hide_comments_community_guidelines_summary_on">Yhteisön säännöt on piilotettu</string>
|
||||
<string name="revanced_hide_comments_community_guidelines_summary_on">Yhteisön säännöt piilotetaan</string>
|
||||
<string name="revanced_hide_comments_community_guidelines_summary_off">Yhteisön säännöt näytetään</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_title">Piilota \"Luo Shorts-video\" -painike</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_on">Luo Shorts-video -painike on piilotettu</string>
|
||||
<string name="revanced_hide_comments_create_a_short_button_summary_off">Luo Shorts-video -painike näytetään</string>
|
||||
<string name="revanced_hide_comments_emoji_and_timestamp_buttons_title">Piilota emoji- ja aikaleima-painikkeet</string>
|
||||
<string name="revanced_hide_comments_emoji_and_timestamp_buttons_summary_on">Emoji- ja aikaleima-painikkeet ovat piilotettu</string>
|
||||
<string name="revanced_hide_comments_emoji_and_timestamp_buttons_summary_off">Emoji- ja aikaleima-painikkeet ovat näytetty</string>
|
||||
<string name="revanced_hide_comments_emoji_and_timestamp_buttons_summary_on">Emoji- ja aikaleima-painikkeet piilotetaan</string>
|
||||
<string name="revanced_hide_comments_emoji_and_timestamp_buttons_summary_off">Emoji- ja aikaleima-painikkeet näytetään</string>
|
||||
<string name="revanced_hide_comments_preview_comment_title">Piilota kommentin esikatselu</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_on">Kommentin esikatselu on piilotettu</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_on">Kommentin esikatselu piilotetaan</string>
|
||||
<string name="revanced_hide_comments_preview_comment_summary_off">Kommentin esikatselu näytetään</string>
|
||||
<string name="revanced_hide_comments_thanks_button_title">Piilota Kiitos-painike</string>
|
||||
<string name="revanced_hide_comments_thanks_button_summary_on">Kiitos-painike on piilotettu</string>
|
||||
<string name="revanced_hide_comments_thanks_button_summary_on">Kiitos-painike piilotetaan</string>
|
||||
<string name="revanced_hide_comments_thanks_button_summary_off">Kiitos-painike näytetään</string>
|
||||
<string name="revanced_custom_filter_screen_title">Mukautettu suodatin</string>
|
||||
<string name="revanced_custom_filter_screen_summary">Piilota osia mukautetuilla suodattimilla</string>
|
||||
@@ -397,6 +397,20 @@ Jos Doodle näkyy tällä hetkellä alueellasi ja tämä piilotusasetus on käyt
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<string name="revanced_custom_filter_strings_summary">Luettelo komponentin polun rakentajan merkkijonoista suodatettavaksi uudella rivillä erotettuna</string>
|
||||
<string name="revanced_custom_filter_toast_invalid_syntax">Virheellinen mukautettu suodatin: %s</string>
|
||||
<string name="revanced_hide_view_count_title">Piilota katselukerrat</string>
|
||||
<string name="revanced_hide_view_count_summary_on">Katselukerrat piilotetaan syötteessä ja hakutuloksissa</string>
|
||||
<string name="revanced_hide_view_count_summary_off">Katselukerrat näytetään syötteessä ja hakutuloksissa</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<string name="revanced_hide_view_count_user_dialog_message">"Rajoitukset:
|
||||
• Shorts-hyllyt, kanavasivut ja hakutulokset saattavat edelleen näyttää katselukertoja
|
||||
• Tämä ominaisuus ei toimi ajoneuvo-käyttöliittymäasettelussa"</string>
|
||||
<string name="revanced_hide_upload_time_title">Piilota julkaisuaika</string>
|
||||
<string name="revanced_hide_upload_time_summary_on">Julkaisuaika piilotetaan syötteessä ja hakutuloksissa</string>
|
||||
<string name="revanced_hide_upload_time_summary_off">Julkaisuaika näytetään syötteessä ja hakutuloksissa</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<string name="revanced_hide_upload_time_user_dialog_message">"Rajoitukset:
|
||||
• Shorts-hyllyt, kanavasivut ja hakutulokset saattavat edelleen näyttää julkaisuaikoja
|
||||
• Tämä ominaisuus ei toimi ajoneuvo-käyttöliittymäasettelussa"</string>
|
||||
<string name="revanced_hide_keyword_content_screen_title">Piilota sisältöä avainsanojen mukaan</string>
|
||||
<string name="revanced_hide_keyword_content_screen_summary">Piilota haku- ja syötevideoita avainsanasuodattimilla</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">Piilota koti-videoita avainsanojen mukaan</string>
|
||||
@@ -435,48 +449,48 @@ Rajoitukset
|
||||
</patch>
|
||||
<patch id="ad.general.hideAdsResourcePatch">
|
||||
<string name="revanced_hide_creator_store_shelf_title">Piilota sisällöntuottajan kauppahylly</string>
|
||||
<string name="revanced_hide_creator_store_shelf_summary_on">Sisällöntuottajan kauppahylly videosoittimen alla on piilotettu</string>
|
||||
<string name="revanced_hide_creator_store_shelf_summary_on">Sisällöntuottajan kauppahylly piilotetaan videosoittimen alla</string>
|
||||
<string name="revanced_hide_creator_store_shelf_summary_off">Sisällöntuottajan kauppahylly videosoittimen alla näytetään</string>
|
||||
<string name="revanced_hide_end_screen_store_banner_title">Piilota loppunäytön kauppabanneri</string>
|
||||
<string name="revanced_hide_end_screen_store_banner_summary_on">Loppunäytön kauppabanneri on piilotettu</string>
|
||||
<string name="revanced_hide_end_screen_store_banner_summary_on">Loppunäytön kauppabanneri piilotetaan</string>
|
||||
<string name="revanced_hide_end_screen_store_banner_summary_off">Loppunäytön kauppabanneri näytetään</string>
|
||||
<string name="revanced_hide_fullscreen_ads_title">Piilota koko näytön mainokset</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">"Koko näytön mainokset on piilotettu
|
||||
<string name="revanced_hide_fullscreen_ads_summary_on">"Koko näytön mainokset piilotetaan
|
||||
|
||||
Tämä ominaisuus on käytettävissä vain vanhemmilla laitteilla"</string>
|
||||
<string name="revanced_hide_fullscreen_ads_summary_off">Koko näytön mainokset näytetään</string>
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="revanced_hide_fullscreen_ads_feature_not_available_toast">Koko näytön mainosten piilottaminen toimii vain vanhemmilla laitteilla</string>
|
||||
<string name="revanced_hide_general_ads_title">Piilota yleiset mainokset</string>
|
||||
<string name="revanced_hide_general_ads_summary_on">Yleiset mainokset on piilotettu</string>
|
||||
<string name="revanced_hide_general_ads_summary_on">Yleiset mainokset piilotetaan</string>
|
||||
<string name="revanced_hide_general_ads_summary_off">Yleiset mainokset näytetään</string>
|
||||
<string name="revanced_hide_merchandise_banners_title">Piilota tuotebannerit</string>
|
||||
<string name="revanced_hide_merchandise_banners_summary_on">Tuotebannerit on piilotettu</string>
|
||||
<string name="revanced_hide_merchandise_banners_summary_on">Tuotebannerit piilotetaan</string>
|
||||
<string name="revanced_hide_merchandise_banners_summary_off">Tuotebannerit näytetään</string>
|
||||
<string name="revanced_hide_paid_promotion_label_title">Piilota maksetun mainostuksen tunniste</string>
|
||||
<string name="revanced_hide_paid_promotion_label_summary_on">Maksetun mainostuksen tunniste on piilotettu</string>
|
||||
<string name="revanced_hide_paid_promotion_label_summary_on">Maksetun mainostuksen tunniste piilotetaan</string>
|
||||
<string name="revanced_hide_paid_promotion_label_summary_off">Maksetun mainostuksen tunniste näytetään</string>
|
||||
<string name="revanced_hide_self_sponsor_ads_title">Piilota itse-sponsoroidut kortit</string>
|
||||
<string name="revanced_hide_self_sponsor_ads_summary_on">Itse-sponsoroidut kortit ovat piilotettu</string>
|
||||
<string name="revanced_hide_self_sponsor_ads_summary_on">Itse-sponsoroidut kortit piilotetaan</string>
|
||||
<string name="revanced_hide_self_sponsor_ads_summary_off">Itse-sponsoroidut kortit näytetään</string>
|
||||
<string name="revanced_hide_shopping_links_title">Piilota ostoslinkit</string>
|
||||
<string name="revanced_hide_shopping_links_summary_on">Ostoslinkit videon kuvauksessa on piilotettu</string>
|
||||
<string name="revanced_hide_shopping_links_summary_on">Ostoslinkit videon kuvauksessa piilotetaan</string>
|
||||
<string name="revanced_hide_shopping_links_summary_off">Ostoslinkit videon kuvauksessa näytetään</string>
|
||||
<string name="revanced_hide_view_products_banner_title">Piilota \"Näytä tuotteet\" -banneri</string>
|
||||
<string name="revanced_hide_view_products_banner_summary_on">Videon peittokuvan tuotebannerit on piilotettu</string>
|
||||
<string name="revanced_hide_view_products_banner_summary_on">Videon peittokuvan tuotebannerit piilotetaan</string>
|
||||
<string name="revanced_hide_view_products_banner_summary_off">Videon peittokuvan tuotebannerit näytetään</string>
|
||||
<string name="revanced_hide_web_search_results_title">Piilota verkkohakutulokset</string>
|
||||
<string name="revanced_hide_web_search_results_summary_on">Verkkohakutulokset on piilotettu</string>
|
||||
<string name="revanced_hide_web_search_results_summary_on">Verkkohakutulokset piilotetaan</string>
|
||||
<string name="revanced_hide_web_search_results_summary_off">Verkkohakutulokset näytetään</string>
|
||||
</patch>
|
||||
<patch id="ad.getpremium.hideGetPremiumPatch">
|
||||
<string name="revanced_hide_get_premium_title">Piilota YouTube Premium -mainokset</string>
|
||||
<string name="revanced_hide_get_premium_summary_on">YouTube Premium -mainokset videosoittimen alla on piilotettu</string>
|
||||
<string name="revanced_hide_get_premium_summary_on">YouTube Premium -mainokset videosoittimen alla piilotetaan</string>
|
||||
<string name="revanced_hide_get_premium_summary_off">YouTube Premium -mainokset videosoittimen alla näytetään</string>
|
||||
</patch>
|
||||
<patch id="ad.video.videoAdsPatch">
|
||||
<string name="revanced_hide_video_ads_title">Piilota videomainokset</string>
|
||||
<string name="revanced_hide_video_ads_summary_on">Videomainokset on piilotettu</string>
|
||||
<string name="revanced_hide_video_ads_summary_on">Videomainokset piilotetaan</string>
|
||||
<string name="revanced_hide_video_ads_summary_off">Videomainokset näytetään</string>
|
||||
</patch>
|
||||
<patch id="interaction.copyvideourl.copyVideoUrlResourcePatch">
|
||||
@@ -510,7 +524,7 @@ Tämä ominaisuus on käytettävissä vain vanhemmilla laitteilla"</string>
|
||||
<string name="revanced_external_downloader_screen_summary">Asetukset ulkoisen lataajan käyttämiselle</string>
|
||||
<string name="revanced_external_downloader_title">Näytä ulkoinen lataus -painike</string>
|
||||
<string name="revanced_external_downloader_summary_on">Lataa-painike näytetään soittimessa</string>
|
||||
<string name="revanced_external_downloader_summary_off">Lataa-painike on piilotettu soittimessa</string>
|
||||
<string name="revanced_external_downloader_summary_off">Lataa-painike piilotetaan soittimessa</string>
|
||||
<!-- 'Download action button' should be translated using the same wording as the translation of 'revanced_hide_download_button_title'. -->
|
||||
<string name="revanced_external_downloader_action_button_title">Korvaa Lataa-toimintopainike</string>
|
||||
<string name="revanced_external_downloader_action_button_summary_on">Lataa-painike avaa ulkoisen lataajan</string>
|
||||
@@ -600,62 +614,62 @@ Säädä äänenvoimakkuutta pyyhkäisemällä pystysuoraan näytön oikealta pu
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_on">Tykkää- ja Tilaa-painikkeet eivät hehku mainittaessa</string>
|
||||
<string name="revanced_disable_like_subscribe_glow_summary_off">Tykkää- ja Tilaa-painikkeet hehkuvat mainittaessa</string>
|
||||
<string name="revanced_hide_like_dislike_button_title">Piilota Tykkää ja En tykkää</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_on">Tykkää- ja En tykkää -painikkeet on piilotettu</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_on">Tykkää- ja En tykkää -painikkeet piilotetaan</string>
|
||||
<string name="revanced_hide_like_dislike_button_summary_off">Tykkää- ja En tykkää -painikkeet näytetään</string>
|
||||
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_share_button_title">Piilota Jaa</string>
|
||||
<string name="revanced_hide_share_button_summary_on">Jaa-painike on piilotettu</string>
|
||||
<string name="revanced_hide_share_button_summary_on">Jaa-painike piilotetaan</string>
|
||||
<string name="revanced_hide_share_button_summary_off">Jaa-painike näytetään</string>
|
||||
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_stop_ads_button_title">Piilota \"Estä mainokset\"</string>
|
||||
<string name="revanced_hide_stop_ads_button_summary_on">Estä mainokset -painike on piilotettu</string>
|
||||
<string name="revanced_hide_stop_ads_button_summary_on">Estä mainokset -painike piilotetaan</string>
|
||||
<string name="revanced_hide_stop_ads_button_summary_off">Estä mainokset -painike näytetään</string>
|
||||
<!-- Button does not have any text and is only shown as an icon, and only when the video information area is collapsed to a compact state. -->
|
||||
<string name="revanced_hide_comments_button_title">Piilota Kommentit</string>
|
||||
<string name="revanced_hide_comments_button_summary_on">Kommentit-painike on piilotettu</string>
|
||||
<string name="revanced_hide_comments_button_summary_on">Kommentit-painike piilotetaan</string>
|
||||
<string name="revanced_hide_comments_button_summary_off">Kommentit-painike näytetään</string>
|
||||
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually only shows on live streams. -->
|
||||
<string name="revanced_hide_report_button_title">Piilota Tee ilmoitus</string>
|
||||
<string name="revanced_hide_report_button_summary_on">Tee ilmoitus -painike on piilotettu</string>
|
||||
<string name="revanced_hide_report_button_summary_on">Tee ilmoitus -painike piilotetaan</string>
|
||||
<string name="revanced_hide_report_button_summary_off">Tee ilmoitus -painike näytetään</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_remix_button_title">Piilota Remix</string>
|
||||
<string name="revanced_hide_remix_button_summary_on">Remix-painike on piilotettu</string>
|
||||
<string name="revanced_hide_remix_button_summary_on">Remix-painike piilotetaan</string>
|
||||
<string name="revanced_hide_remix_button_summary_off">Remix-painike näytetään</string>
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_download_button_title">Piilota Lataa</string>
|
||||
<string name="revanced_hide_download_button_summary_on">Lataa-painike on piilotettu</string>
|
||||
<string name="revanced_hide_download_button_summary_on">Lataa-painike piilotetaan</string>
|
||||
<string name="revanced_hide_download_button_summary_off">Lataa-painike näytetään</string>
|
||||
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
|
||||
This button only shows on videos uploaded by the logged in user. -->
|
||||
<string name="revanced_hide_hype_button_title">Piilota Hypetä</string>
|
||||
<string name="revanced_hide_hype_button_summary_on">Hypetä-painike on piilotettu</string>
|
||||
<string name="revanced_hide_hype_button_summary_on">Hypetä-painike piilotetaan</string>
|
||||
<string name="revanced_hide_hype_button_summary_off">Hypetä-painike näytetään</string>
|
||||
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_promote_button_title">Piilota Mainosta</string>
|
||||
<string name="revanced_hide_promote_button_summary_on">Mainosta-painike on piilotettu</string>
|
||||
<string name="revanced_hide_promote_button_summary_on">Mainosta-painike piilotetaan</string>
|
||||
<string name="revanced_hide_promote_button_summary_off">Mainosta-painike näytetään</string>
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_thanks_button_title">Piilota Kiitos</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Kiitos-painike on piilotettu</string>
|
||||
<string name="revanced_hide_thanks_button_summary_on">Kiitos-painike piilotetaan</string>
|
||||
<string name="revanced_hide_thanks_button_summary_off">Kiitos-painike näytetään</string>
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
This button only shows if the user ip is from specific region such as the USA or EU. -->
|
||||
<string name="revanced_hide_ask_button_title">Piilota Ask</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Ask-painike on piilotettu</string>
|
||||
<string name="revanced_hide_ask_button_summary_on">Ask-painike piilotetaan</string>
|
||||
<string name="revanced_hide_ask_button_summary_off">Ask-painike näytetään</string>
|
||||
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_clip_button_title">Piilota Klippi</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Klippi-painike on piilotettu</string>
|
||||
<string name="revanced_hide_clip_button_summary_on">Klippi-painike piilotetaan</string>
|
||||
<string name="revanced_hide_clip_button_summary_off">Klippi-painike näytetään</string>
|
||||
<!-- 'Shop' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_shop_button_title">Piilota Kauppa</string>
|
||||
<string name="revanced_hide_shop_button_summary_on">Kauppa-painike on piilotettu</string>
|
||||
<string name="revanced_hide_shop_button_summary_on">Kauppa-painike piilotetaan</string>
|
||||
<string name="revanced_hide_shop_button_summary_off">Kauppa-painike näytetään</string>
|
||||
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_save_button_title">Piilota Tallenna</string>
|
||||
<string name="revanced_hide_save_button_summary_on">Tallenna-painike on piilotettu</string>
|
||||
<string name="revanced_hide_save_button_summary_on">Tallenna-painike piilotetaan</string>
|
||||
<string name="revanced_hide_save_button_summary_off">Tallenna-painike näytetään</string>
|
||||
</patch>
|
||||
<patch id="layout.buttons.navigation.navigationButtonsPatch">
|
||||
@@ -663,22 +677,22 @@ Säädä äänenvoimakkuutta pyyhkäisemällä pystysuoraan näytön oikealta pu
|
||||
<string name="revanced_navigation_buttons_screen_summary">Piilota tai muuta navigointipalkin painikkeita</string>
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the tab. -->
|
||||
<string name="revanced_hide_home_button_title">Piilota Koti</string>
|
||||
<string name="revanced_hide_home_button_summary_on">Koti-painike on piilotettu</string>
|
||||
<string name="revanced_hide_home_button_summary_on">Koti-painike piilotetaan</string>
|
||||
<string name="revanced_hide_home_button_summary_off">Koti-painike näytetään</string>
|
||||
<!-- 'Shorts' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_hide_shorts_button_title">Piilota Shorts</string>
|
||||
<string name="revanced_hide_shorts_button_summary_on">Shorts-painike on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_button_summary_on">Shorts-painike piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_button_summary_off">Shorts-painike näytetään</string>
|
||||
<!-- 'Create' has no display name. Translate normally. -->
|
||||
<string name="revanced_hide_create_button_title">Piilota Luo</string>
|
||||
<string name="revanced_hide_create_button_summary_on">Luo-painike on piilotettu</string>
|
||||
<string name="revanced_hide_create_button_summary_on">Luo-painike piilotetaan</string>
|
||||
<string name="revanced_hide_create_button_summary_off">Luo-painike näytetään</string>
|
||||
<!-- 'Subscriptions' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_hide_subscriptions_button_title">Piilota Tilaukset</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_on">Tilaukset-painike on piilotettu</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_on">Tilaukset-painike piilotetaan</string>
|
||||
<string name="revanced_hide_subscriptions_button_summary_off">Tilaukset-painike näytetään</string>
|
||||
<string name="revanced_hide_notifications_button_title">Piilota Ilmoitukset</string>
|
||||
<string name="revanced_hide_notifications_button_summary_on">Ilmoitukset-painike on piilotettu</string>
|
||||
<string name="revanced_hide_notifications_button_summary_on">Ilmoitukset-painike piilotetaan</string>
|
||||
<string name="revanced_hide_notifications_button_summary_off">Ilmoitukset-painike näytetään</string>
|
||||
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
|
||||
<string name="revanced_switch_create_with_notifications_button_title">Vaihda Luo ja Ilmoitukset</string>
|
||||
@@ -690,7 +704,7 @@ Huomaa: Tämä piilottaa väkisin myös videomainokset"</string>
|
||||
|
||||
Jos tämän asetuksen muuttaminen ei tule voimaan, kokeile vaihtaa Incognito-tilaan."</string>
|
||||
<string name="revanced_hide_navigation_button_labels_title">Piilota navigointipainikkeiden tunnisteet</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">Tunnisteet on piilotettu</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_on">Tunnisteet piilotetaan</string>
|
||||
<string name="revanced_hide_navigation_button_labels_summary_off">Tunnisteet näytetään</string>
|
||||
<string name="revanced_disable_translucent_status_bar_title">Poista läpikuultava tilapalkki käytöstä</string>
|
||||
<string name="revanced_disable_translucent_status_bar_summary_on">Tilapalkki on läpinäkymätön</string>
|
||||
@@ -708,84 +722,84 @@ Jos tämän asetuksen muuttaminen ei tule voimaan, kokeile vaihtaa Incognito-til
|
||||
<string name="revanced_hide_player_flyout_summary">Piilota tai näytä soittimen flyout-valikon kohteita</string>
|
||||
<!-- 'Captions' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_captions_title">Piilota Tekstitykset</string>
|
||||
<string name="revanced_hide_player_flyout_captions_summary_on">Tekstitykset-valikko on piilotettu</string>
|
||||
<string name="revanced_hide_player_flyout_captions_summary_on">Tekstitykset-valinta piilotetaan</string>
|
||||
<string name="revanced_hide_player_flyout_captions_summary_off">Tekstitykset-valikko näytetään</string>
|
||||
<!-- 'Additional settings' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_additional_settings_title">Piilota Lisäasetukset</string>
|
||||
<string name="revanced_hide_player_flyout_additional_settings_summary_on">Lisäasetukset-valikko on piilotettu</string>
|
||||
<string name="revanced_hide_player_flyout_additional_settings_summary_on">Lisäasetukset-valinta piilotetaan</string>
|
||||
<string name="revanced_hide_player_flyout_additional_settings_summary_off">Lisäasetukset-valikko näytetään</string>
|
||||
<!-- 'Sleep timer' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_title">Piilota Nukahtamisajastin</string>
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_summary_on">Nukahtamisajastimen valikko on piilotettu</string>
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_summary_on">Nukahtamisajastin-valinta piilotetaan</string>
|
||||
<string name="revanced_hide_player_flyout_sleep_timer_summary_off">Nukahtamisajastimen valikko näytetään</string>
|
||||
<!-- 'Loop video' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_loop_video_title">Piilota Toista videota jatkuvasti</string>
|
||||
<string name="revanced_hide_player_flyout_loop_video_summary_on">Toista videota jatkuvasti -valinta on piilotettu</string>
|
||||
<string name="revanced_hide_player_flyout_loop_video_summary_on">Toista videota jatkuvasti -valinta piilotetaan</string>
|
||||
<string name="revanced_hide_player_flyout_loop_video_summary_off">Toista videota jatkuvasti -valinta näytetään</string>
|
||||
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_title">Piilota Elokuvatila</string>
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_summary_on">Elokuvatila-valinta on piilotettu</string>
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_summary_on">Elokuvatila-valinta piilotetaan</string>
|
||||
<string name="revanced_hide_player_flyout_ambient_mode_summary_off">Elokuvatila-valinta näytetään</string>
|
||||
<string name="revanced_hide_player_flyout_stable_volume_title">Piilota Tasainen äänenvoimakkuus</string>
|
||||
<string name="revanced_hide_player_flyout_stable_volume_summary_off">Tasainen äänenvoimakkuus -valinta näytetään</string>
|
||||
<string name="revanced_hide_player_flyout_stable_volume_summary_on">Tasainen äänenvoimakkuus -valinta on piilotettu</string>
|
||||
<string name="revanced_hide_player_flyout_stable_volume_summary_on">Tasainen äänenvoimakkuus -valinta piilotetaan</string>
|
||||
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_help_title">Piilota Ohjeet ja palaute</string>
|
||||
<string name="revanced_hide_player_flyout_help_summary_on">Ohjeet ja palaute -valinta on piilotettu</string>
|
||||
<string name="revanced_hide_player_flyout_help_summary_on">Ohjeet ja palaute -valinta piilotetaan</string>
|
||||
<string name="revanced_hide_player_flyout_help_summary_off">Ohjeet ja palaute -valinta näytetään</string>
|
||||
<!-- 'Playback speed' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_speed_title">Piilota Toistonopeus</string>
|
||||
<string name="revanced_hide_player_flyout_speed_summary_on">Toistonopeusvalikko on piilotettu</string>
|
||||
<string name="revanced_hide_player_flyout_speed_summary_on">Toistonopeusvalikko piilotetaan</string>
|
||||
<string name="revanced_hide_player_flyout_speed_summary_off">Toistonopeusvalikko näytetään</string>
|
||||
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
|
||||
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
|
||||
<string name="revanced_hide_player_flyout_more_info_title">Piilota Lisätietoja</string>
|
||||
<string name="revanced_hide_player_flyout_more_info_summary_on">Lisätietoja-valinta on piilotettu</string>
|
||||
<string name="revanced_hide_player_flyout_more_info_summary_on">Lisätietoja-valinta piilotetaan</string>
|
||||
<string name="revanced_hide_player_flyout_more_info_summary_off">Lisätietoja-valinta näytetään </string>
|
||||
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_lock_screen_title">Piilota Näytön lukitus</string>
|
||||
<string name="revanced_hide_player_flyout_lock_screen_summary_on">Näytön lukitus -valinta on piilotettu</string>
|
||||
<string name="revanced_hide_player_flyout_lock_screen_summary_on">Näytön lukitus -valinta piilotetaan</string>
|
||||
<string name="revanced_hide_player_flyout_lock_screen_summary_off">Näytön lukitus -valinta näytetään</string>
|
||||
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_audio_track_title">Piilota Ääniraita</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_on">Ääniraitavalikko on piilotettu</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_on">Ääniraitavalikko piilotetaan</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_off">Ääniraitavalikko näytetään</string>
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
|
||||
<string name="revanced_hide_player_flyout_audio_track_not_available">"Ääniraitavalikko on piilotettu
|
||||
<string name="revanced_hide_player_flyout_audio_track_not_available">"Ääniraitavalikko piilotetaan
|
||||
|
||||
Näyttääksesi ääniraitavalikon, muuta \"Videostriimien naamioiminen\" iPadOS:ksi"</string>
|
||||
Näyttääksesi ääniraitavalikon, muuta \"Videostriimien naamioiminen\" iPadOS:äksi"</string>
|
||||
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_title">Piilota Katso VR-tilassa</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Katso VR-tilassa -valinta on piilotettu</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Katso VR-tilassa -valinta piilotetaan</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Katso VR-tilassa -valinta näytetään</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_title">Piilota videolaatuvalikko</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_summary_on">Videolaatuvalikko on piilotettu</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_summary_on">Videolaatuvalikko piilotetaan</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_summary_off">Videolaatuvalikko näytetään</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_title">Piilota videolaatuvalikon alatunniste</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Videolaatuvalikon alatunniste on piilotettu</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Videolaatuvalikon alatunniste piilotetaan</string>
|
||||
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Videolaatuvalikon alatunniste näytetään</string>
|
||||
</patch>
|
||||
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
|
||||
<string name="revanced_hide_autoplay_button_title">Piilota Automaattinen toisto -painike</string>
|
||||
<string name="revanced_hide_autoplay_button_summary_on">Automaattinen toisto -painike on piilotettu</string>
|
||||
<string name="revanced_hide_autoplay_button_summary_on">Automaattinen toisto -painike piilotetaan</string>
|
||||
<string name="revanced_hide_autoplay_button_summary_off">Automaattinen toisto -painike näytetään</string>
|
||||
<!-- This button does not display any text, but 'Captions' should be translated using the same wording used as the translation of 'revanced_hide_player_flyout_captions_title'. -->
|
||||
<string name="revanced_hide_captions_button_title">Piilota Tekstitykset -painike</string>
|
||||
<string name="revanced_hide_captions_button_summary_on">Tekstitykset-painike on piilotettu</string>
|
||||
<string name="revanced_hide_captions_button_summary_on">Tekstitykset-painike piilotetaan</string>
|
||||
<string name="revanced_hide_captions_button_summary_off">Tekstitykset-painike näytetään</string>
|
||||
<string name="revanced_hide_cast_button_title">Piilota Cast-painike</string>
|
||||
<string name="revanced_hide_cast_button_summary_on">Cast-painike on piilotettu</string>
|
||||
<string name="revanced_hide_cast_button_summary_on">Cast-painike piilotetaan</string>
|
||||
<string name="revanced_hide_cast_button_summary_off">Cast-painike näytetään</string>
|
||||
<string name="revanced_hide_player_control_buttons_background_title">Piilota soittimen ohjainten tausta</string>
|
||||
<string name="revanced_hide_player_control_buttons_background_summary_on">Soittimen ohjainten tausta on piilotettu</string>
|
||||
<string name="revanced_hide_player_control_buttons_background_summary_on">Soittimen ohjainten tausta piilotetaan</string>
|
||||
<string name="revanced_hide_player_control_buttons_background_summary_off">Soittimen ohjainten tausta näytetään</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_title">Piilota Edellinen & Seuraava -painikkeet</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_on">Painikkeet on piilotettu</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_on">Edellinen- ja Seuraava-painikkeet piilotetaan</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_off">Painikkeet näytetään</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
<string name="revanced_hide_endscreen_cards_title">Piilota loppunäytön kortit</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_on">Loppunäytön kortit on piilotettu</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_on">Loppunäytön kortit piilotetaan</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_off">Loppunäytön kortit näytetään</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.fullscreenambientmode.disableFullscreenAmbientModePatch">
|
||||
@@ -795,7 +809,7 @@ Näyttääksesi ääniraitavalikon, muuta \"Videostriimien naamioiminen\" iPadOS
|
||||
</patch>
|
||||
<patch id="layout.hide.infocards.hideInfocardsResourcePatch">
|
||||
<string name="revanced_hide_info_cards_title">Piilota tietokortit</string>
|
||||
<string name="revanced_hide_info_cards_summary_on">Tietokortit on piilotettu</string>
|
||||
<string name="revanced_hide_info_cards_summary_on">Tietokortit piilotetaan</string>
|
||||
<string name="revanced_hide_info_cards_summary_off">Tietokortit näytetään</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.rollingnumber.disableRollingNumberAnimationPatch">
|
||||
@@ -805,125 +819,125 @@ Näyttääksesi ääniraitavalikon, muuta \"Videostriimien naamioiminen\" iPadOS
|
||||
</patch>
|
||||
<patch id="layout.hide.seekbar.hideSeekbarPatch">
|
||||
<string name="revanced_hide_seekbar_title">Piilota videosoittimen etenemispalkki</string>
|
||||
<string name="revanced_hide_seekbar_summary_on">Videosoittimen etenemispalkki on piilotettu</string>
|
||||
<string name="revanced_hide_seekbar_summary_on">Videosoittimen etenemispalkki piilotetaan</string>
|
||||
<string name="revanced_hide_seekbar_summary_off">Videosoittimen etenemispalkki näytetää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. -->
|
||||
<string name="revanced_hide_seekbar_thumbnail_title">Piilota videoiden pikkukuvien etenemispalkki</string>
|
||||
<string name="revanced_hide_seekbar_thumbnail_summary_on">Videoiden pikkukuvien etenemispalkki on piilotettu</string>
|
||||
<string name="revanced_hide_seekbar_thumbnail_summary_on">Videoiden pikkukuvien etenemispalkki piilotetaan</string>
|
||||
<string name="revanced_hide_seekbar_thumbnail_summary_off">Videoiden pikkukuvien etenemispalkki näytetään</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.shorts.hideShortsComponentsResourcePatch">
|
||||
<string name="revanced_shorts_player_screen_title">Shorts-soitin</string>
|
||||
<string name="revanced_shorts_player_screen_summary">Piilota tai näytä Shorts-soittimen osia</string>
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube displays for the Home tab. -->
|
||||
<string name="revanced_hide_shorts_home_title">Piilota Shortsit kotisyötteessä</string>
|
||||
<string name="revanced_hide_shorts_home_summary_on">Piilotettu kotisyötteessä ja liittyvissä videoissa</string>
|
||||
<string name="revanced_hide_shorts_home_summary_off">Näytetään kotisyötteessä ja liittyvissä videoissa</string>
|
||||
<string name="revanced_hide_shorts_home_title">Piilota Shortsit Koti-syötteessä</string>
|
||||
<string name="revanced_hide_shorts_home_summary_on">Piilotetaan Koti-syötteessä ja liittyvissä videoissa</string>
|
||||
<string name="revanced_hide_shorts_home_summary_off">Näytetään Koti-syötteessä ja liittyvissä videoissa</string>
|
||||
<string name="revanced_hide_shorts_search_title">Piilota Shortsit hakutuloksissa</string>
|
||||
<string name="revanced_hide_shorts_search_summary_on">Piilotettu hakutuloksissa</string>
|
||||
<string name="revanced_hide_shorts_search_summary_on">Piilotetaan hakutuloksissa</string>
|
||||
<string name="revanced_hide_shorts_search_summary_off">Näytetään hakutuloksissa</string>
|
||||
<!-- 'Subscriptions' should be translated using the same localized wording YouTube displays for the Subscriptions tab. -->
|
||||
<string name="revanced_hide_shorts_subscriptions_title">Piilota Shortsit Tilaukset-syötteessä</string>
|
||||
<string name="revanced_hide_shorts_subscriptions_summary_on">Piilotettu tilaukset-syötteessä</string>
|
||||
<string name="revanced_hide_shorts_subscriptions_summary_on">Piilotetaan Tilaukset-syötteessä</string>
|
||||
<string name="revanced_hide_shorts_subscriptions_summary_off">Näytetään tilaukset-syötteessä</string>
|
||||
<string name="revanced_hide_shorts_history_title">Piilota Shortsit katseluhistoriassa</string>
|
||||
<string name="revanced_hide_shorts_history_summary_on">Piilotettu katseluhistoriassa</string>
|
||||
<string name="revanced_hide_shorts_history_summary_on">Piilotetaan katseluhistoriassa</string>
|
||||
<string name="revanced_hide_shorts_history_summary_off">Näytetään katseluhistoriassa</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_title">Piilota Osta Superkiitos -painike</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_on">Osta Superkiitos -painike on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_on">Osta Superkiitos -painike piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_off">Osta Superkiitos -painike näytetään</string>
|
||||
<string name="revanced_hide_shorts_effect_button_title">Piilota Tehoste-painike</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_on">Tehoste-painike on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_on">Tehoste-painike piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_off">Tehoste-painike näytetään</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">Piilota Vihertausta-painike</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_on">Vihertausta-painike on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_on">Vihertausta-painike piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_off">Vihertausta-painike näytetään</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_title">Piilota Hashtag-painike</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_summary_on">Hashtag-painike on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_summary_on">Hashtag-painike piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_summary_off">Hashtag-painike näytetään</string>
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
<string name="revanced_hide_shorts_join_button_title">Piilota Liity-painike</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_on">Liity-painike on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_on">Liity-painike piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_off">Liity-painike näytetään</string>
|
||||
<string name="revanced_hide_shorts_location_label_title">Piilota sijaintitieto</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_on">Sijaintitieto on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_on">Sijaintitieto piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_off">Sijaintitieto näytetään</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">Piilota Uudet postaukset -painike</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_on">Uudet postaukset -painike on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_on">Uudet postaukset -painike piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_off">Uudet postaukset -painike näytetään</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_title">Piilota pysäytysruudun painikkeet</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_on">Pysäytysruudun painikkeet on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_on">Pysäytysruudun painikkeet piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_off">Pysäytysruudun painikkeet näytetään</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_title">Piilota kommentin esikatselu</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_on">Kommentin esikatselu on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_on">Kommentin esikatselu piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_off">Kommentin esikatselu näytetään</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">Piilota Tallenna musiikki -painike</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_on">Tallenna musiikki -painike on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_on">Tallenna musiikki -painike piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_off">Tallenna musiikki -painike näytetään</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_title">Piilota hakuehdotukset</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_summary_on">Hakuehdotukset on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_summary_on">Hakuehdotukset piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_summary_off">Hakuehdotukset näytetään</string>
|
||||
<string name="revanced_hide_shorts_shop_button_title">Piilota Kauppa-painike</string>
|
||||
<string name="revanced_hide_shorts_shop_button_summary_on">Kauppa-painike on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_shop_button_summary_on">Kauppa-painike piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_shop_button_summary_off">Kauppa-painike näytetään</string>
|
||||
<string name="revanced_hide_shorts_stickers_title">Piilota tarrat</string>
|
||||
<string name="revanced_hide_shorts_stickers_summary_on">Tarrat on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_stickers_summary_on">Tarrat piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_stickers_summary_off">Tarrat näytetään</string>
|
||||
<string name="revanced_hide_shorts_subscribe_button_title">Piilota Tilaa-painike</string>
|
||||
<string name="revanced_hide_shorts_subscribe_button_summary_on">Tilaa-painike on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_subscribe_button_summary_on">Tilaa-painike piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_subscribe_button_summary_off">Tilaa-painike näytetään</string>
|
||||
<string name="revanced_hide_shorts_tagged_products_title">Piilota tagatut tuotteet</string>
|
||||
<string name="revanced_hide_shorts_tagged_products_summary_on">Tagatut tuotteet on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_tagged_products_summary_on">Tagatut tuotteet piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_tagged_products_summary_off">Tagatut tuotteet näytetään</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_title">Piilota Tulossa-painike</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_on">Tulossa-painike on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_on">Tulossa-painike piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_off">Tulossa-painike näytetään</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_title">Piilota Käytä tätä ääntä -painike</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_on">Käytä tätä ääntä -painike on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_on">Käytä tätä ääntä -painike piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_off">Käytä tätä ääntä -painike näytetään</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_title">Piilota Käytä tätä mallia -painike</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_on">Käytä tätä mallia -painike on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_on">Käytä tätä mallia -painike piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_off">Käytä tätä mallia -painike näytetään</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_title">Piilota Tykkää-painikkeen suihkulähdeanimaatio</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_summary_on">Tykkää-painikkeen suihkulähdeanimaatio on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_summary_on">Tykkää-painikkeen suihkulähdeanimaatio piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_summary_off">Tykkää-painikkeen suihkulähdeanimaatio näytetään</string>
|
||||
<string name="revanced_hide_shorts_like_button_title">Piilota Tykkää-painike</string>
|
||||
<string name="revanced_hide_shorts_like_button_summary_on">Tykkää-painike on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_like_button_summary_on">Tykkää-painike piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_like_button_summary_off">Tykkää-painike näytetään</string>
|
||||
<string name="revanced_hide_shorts_dislike_button_title">Piilota En tykkää -painike</string>
|
||||
<string name="revanced_hide_shorts_dislike_button_summary_on">En tykkää -painike on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_dislike_button_summary_on">En tykkää -painike piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_dislike_button_summary_off">En tykkää -painike näytetään</string>
|
||||
<string name="revanced_hide_shorts_comments_button_title">Piilota Kommentit-painike</string>
|
||||
<string name="revanced_hide_shorts_comments_button_summary_on">Kommentit-painike on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_comments_button_summary_on">Kommentit-painike piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_comments_button_summary_off">Kommentit-painike näytetään</string>
|
||||
<!-- 'Share' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
<string name="revanced_hide_shorts_share_button_title">Piilota Jaa-painike</string>
|
||||
<string name="revanced_hide_shorts_share_button_summary_on">Jaa-painike on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_share_button_summary_on">Jaa-painike piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_share_button_summary_off">Jaa-painike näytetään</string>
|
||||
<!-- 'Remix' should be translated using the same localized wording YouTube displays for the button. -->
|
||||
<string name="revanced_hide_shorts_remix_button_title">Piilota Remix-painike</string>
|
||||
<string name="revanced_hide_shorts_remix_button_summary_on">Remix-painike on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_remix_button_summary_on">Remix-painike piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_remix_button_summary_off">Remix-painike näytetään</string>
|
||||
<string name="revanced_hide_shorts_sound_button_title">Piilota äänipainike</string>
|
||||
<string name="revanced_hide_shorts_sound_button_summary_on">Äänipainike on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_sound_button_summary_on">Äänipainike piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_sound_button_summary_off">Äänipainike näytetään</string>
|
||||
<string name="revanced_hide_shorts_info_panel_title">Piilota tietopaneeli</string>
|
||||
<string name="revanced_hide_shorts_info_panel_summary_on">Tietopaneeli on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_info_panel_summary_on">Tietopaneeli piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_info_panel_summary_off">Tietopaneeli näytetään</string>
|
||||
<string name="revanced_hide_shorts_channel_bar_title">Piilota kanavapalkki</string>
|
||||
<string name="revanced_hide_shorts_channel_bar_summary_on">Kanavapalkki on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_channel_bar_summary_on">Kanavapalkki piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_channel_bar_summary_off">Kanavapalkki näytetään</string>
|
||||
<string name="revanced_hide_shorts_video_title_title">Piilota videon otsikko</string>
|
||||
<string name="revanced_hide_shorts_video_title_summary_on">Videon otsikko on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_video_title_summary_on">Videon otsikko piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_video_title_summary_off">Videon otsikko näytetään</string>
|
||||
<string name="revanced_hide_shorts_sound_metadata_label_title">Piilota äänen metadata-tunniste</string>
|
||||
<string name="revanced_hide_shorts_sound_metadata_label_summary_on">Äänen metatietojen tunniste on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_sound_metadata_label_summary_on">Äänen metatietojen tunniste piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_sound_metadata_label_summary_off">Äänen metatietojen tunniste näytetään</string>
|
||||
<string name="revanced_hide_shorts_full_video_link_label_title">Piilota videolinkin tunniste</string>
|
||||
<string name="revanced_hide_shorts_full_video_link_label_summary_on">Videolinkin tunniste on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_full_video_link_label_summary_on">Videolinkin tunniste piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_full_video_link_label_summary_off">Videolinkin tunniste näytetään</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_title">Piilota navigointipalkki</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_summary_on">Navigointipalkki on piilotettu</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_summary_on">Navigointipalkki piilotetaan</string>
|
||||
<string name="revanced_hide_shorts_navigation_bar_summary_off">Navigointipalkki näytetään</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
|
||||
@@ -936,17 +950,17 @@ Asetukset → Toisto → Toista seuraava video automaattisesti"</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
|
||||
<string name="revanced_hide_related_videos_overlay_title">Piilota liittyvät videot -peittokuva</string>
|
||||
<string name="revanced_hide_related_videos_overlay_summary_on">Liittyvät videot -peittokuva on piilotettu kokoruututilassa</string>
|
||||
<string name="revanced_hide_related_videos_overlay_summary_on">Liittyvät videot -peittokuva piilotetaan kokoruututilassa</string>
|
||||
<string name="revanced_hide_related_videos_overlay_summary_off">Liittyvät videot -peittokuva näytetään kokoruututilassa</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.time.hideTimestampPatch">
|
||||
<string name="revanced_hide_timestamp_title">Piilota videon aikaleima</string>
|
||||
<string name="revanced_hide_timestamp_summary_on">Aikaleima on piilotettu</string>
|
||||
<string name="revanced_hide_timestamp_summary_on">Aikaleima piilotetaan</string>
|
||||
<string name="revanced_hide_timestamp_summary_off">Aikaleima näytetään</string>
|
||||
</patch>
|
||||
<patch id="layout.panels.popup.playerPopupPanelsPatch">
|
||||
<string name="revanced_hide_player_popup_panels_title">Piilota soittimen ponnahdusikkunat</string>
|
||||
<string name="revanced_hide_player_popup_panels_summary_on">Soittimen ponnahdusikkunat on piilotettu</string>
|
||||
<string name="revanced_hide_player_popup_panels_summary_on">Soittimen ponnahdusikkunat piilotetaan</string>
|
||||
<string name="revanced_hide_player_popup_panels_summary_off">Soittimen ponnahdusikkunat näytetään</string>
|
||||
</patch>
|
||||
<patch id="layout.player.fullscreen.exitFullscreenPatch">
|
||||
@@ -1246,7 +1260,7 @@ Oletko valmis lähettämään?"</string>
|
||||
<string name="revanced_sb_about_api_summary">Tiedot tarjoaa SponsorBlock API. Napauta tätä saadaksesi lisätietoja ja nähdäksesi lataukset muille alustoille</string>
|
||||
</patch>
|
||||
<patch id="layout.formfactor.changeFormFactorPatch">
|
||||
<string name="revanced_change_form_factor_title">Ulkoasun asettelu</string>
|
||||
<string name="revanced_change_form_factor_title">Käyttöliittymän asettelu</string>
|
||||
<string name="revanced_change_form_factor_entry_1">Oletus</string>
|
||||
<string name="revanced_change_form_factor_entry_2">Puhelin</string>
|
||||
<string name="revanced_change_form_factor_entry_3">Tabletti</string>
|
||||
@@ -1338,30 +1352,30 @@ Rajoitus: Työkalupalkin takaisin-painikkeen käyttäminen ei välttämättä to
|
||||
<string name="revanced_miniplayer_type_entry_5">Moderni 2</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">Moderni 3</string>
|
||||
<string name="revanced_miniplayer_type_entry_7">Moderni 4</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_title">Ota pyöristetyt kulmat käyttöön</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Kulmat on pyöristetty</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Kulmat ovat suorakulmaisia</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_title">Poista pyöristetyt kulmat käytöstä</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_on">Kulmat ovat suorakulmaisia</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_off">Kulmat on pyöristetty</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">Ota kaksoisnapautus ja koon muuttaminen nipistämällä käyttöön</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"Kaksoisnapautustoiminto ja koon muuttaminen nipistämällä ovat käytössä
|
||||
|
||||
• Kaksoisnapauta suurentaaksesi minisoittimen kokoa
|
||||
• Kaksoisnapauta uudelleen alkuperäisen koon palauttamiseksi"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">Kaksoisnapautustoiminto ja koon muuttaminen nipistämällä eivät olet käytössä</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">Ota vedä ja pudota käyttöön</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"Vedä ja pudota on käytössä
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_title">Poista vedä ja pudota käytöstä</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_on">Vedä ja pudota ei ole käytössä</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_off">"Vedä ja pudota on käytössä
|
||||
|
||||
Minisoitin voidaan vetää mihin tahansa näytön kulmaan"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">Vedä ja pudota ei ole käytössä</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">Ota vaakasuuntainen vetoele käyttöön</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Vaakasuuntainen vetoele on käytössä
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_title">Poista vaakasuuntainen vetoele käytöstä</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_on">Vaakasuuntainen vetoele ei ole käytössä</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_off">"Vaakasuuntainen vetoele on käytössä
|
||||
|
||||
Minisoitin voidaan vetää pois näytöltä vasemmalle tai oikealle"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Vaakasuuntainen vetoele ei ole käytössä</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_title">Piilota peittokuvan painikkeet</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_on">Peittokuvan painikkeet on piilotettu</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_on">Peittokuvan painikkeet piilotetaan</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_off">Peittokuvan painikkeet näytetään</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_title">Piilota alatekstit</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_on">Alatekstit on piilotettu</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_on">Alatekstit piilotetaan</string>
|
||||
<string name="revanced_miniplayer_hide_subtext_summary_off">Alatekstit näytetään</string>
|
||||
<string name="revanced_miniplayer_hide_rewind_forward_title">Piilota eteenpäin- ja taaksepäin-painikkeet</string>
|
||||
<string name="revanced_miniplayer_hide_rewind_forward_summary_on">Eteenpäin ja taaksepäin on piilotettu</string>
|
||||
@@ -1601,7 +1615,7 @@ Rajoitukset:
|
||||
<string name="revanced_spoof_video_streams_about_no_force_original_audio">• Pakota alkuperäinen ääni ei ole käytettävissä</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_off">Asiakastyyppi on piilotettu 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>
|
||||
@@ -1618,7 +1632,7 @@ Rajoitukset:
|
||||
</patch>
|
||||
<patch id="ad.video.hideVideoAdsPatch">
|
||||
<string name="revanced_music_hide_video_ads_title">Piilota videomainokset</string>
|
||||
<string name="revanced_music_hide_video_ads_summary_on">Videomainokset on piilotettu</string>
|
||||
<string name="revanced_music_hide_video_ads_summary_on">Videomainokset piilotetaan</string>
|
||||
<string name="revanced_music_hide_video_ads_summary_off">Videomainokset näytetään</string>
|
||||
</patch>
|
||||
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
|
||||
@@ -1628,12 +1642,12 @@ Rajoitukset:
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
<string name="revanced_music_hide_cast_button_title">Piilota Cast-painike</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_on">Cast-painike on piilotettu</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_on">Cast-painike piilotetaan</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_off">Cast-painike näytetään</string>
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
<string name="revanced_music_hide_category_bar_title">Piilota kategoriapalkki</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_on">Kategoriapalkki on piilotettu</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_on">Kategoriapalkki piilotetaan</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_off">Kategoriapalkki näytetään</string>
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
@@ -1641,26 +1655,26 @@ Rajoitukset:
|
||||
<string name="revanced_music_navigation_bar_screen_summary">Piilota tai muuta navigointipalkin painikkeita</string>
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
<string name="revanced_music_hide_navigation_bar_home_button_title">Piilota Koti</string>
|
||||
<string name="revanced_music_hide_navigation_bar_home_button_summary_on">Koti-painike on piilotettu</string>
|
||||
<string name="revanced_music_hide_navigation_bar_home_button_summary_on">Koti-painike piilotetaan</string>
|
||||
<string name="revanced_music_hide_navigation_bar_home_button_summary_off">Koti-painike näytetään</string>
|
||||
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
<string name="revanced_music_hide_navigation_bar_samples_button_title">Piilota Samples</string>
|
||||
<string name="revanced_music_hide_navigation_bar_samples_button_summary_on">Samples-painike on piilotettu</string>
|
||||
<string name="revanced_music_hide_navigation_bar_samples_button_summary_on">Samples-painike piilotetaan</string>
|
||||
<string name="revanced_music_hide_navigation_bar_samples_button_summary_off">Samples-painike näytetään</string>
|
||||
<!-- 'Explore' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
<string name="revanced_music_hide_navigation_bar_explore_button_title">Piilota Tutki</string>
|
||||
<string name="revanced_music_hide_navigation_bar_explore_button_summary_on">Tutki-painike on piilotettu</string>
|
||||
<string name="revanced_music_hide_navigation_bar_explore_button_summary_on">Tutustu-painike piilotetaan</string>
|
||||
<string name="revanced_music_hide_navigation_bar_explore_button_summary_off">Tutki-painike näytetään</string>
|
||||
<!-- 'Library' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
<string name="revanced_music_hide_navigation_bar_library_button_title">Piilota Kirjasto</string>
|
||||
<string name="revanced_music_hide_navigation_bar_library_button_summary_on">Kirjasto-painike on piilotettu</string>
|
||||
<string name="revanced_music_hide_navigation_bar_library_button_summary_on">Kirjasto-painike piilotetaan</string>
|
||||
<string name="revanced_music_hide_navigation_bar_library_button_summary_off">Kirjasto-painike näytetään</string>
|
||||
<!-- 'Upgrade' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
<string name="revanced_music_hide_navigation_bar_upgrade_button_title">Piilota Päivitä</string>
|
||||
<string name="revanced_music_hide_navigation_bar_upgrade_button_summary_on">Päivitä-painike on piilotettu</string>
|
||||
<string name="revanced_music_hide_navigation_bar_upgrade_button_summary_on">Päivitä-painike piilotetaan</string>
|
||||
<string name="revanced_music_hide_navigation_bar_upgrade_button_summary_off">Päivitä-painike näytetään</string>
|
||||
<string name="revanced_music_hide_navigation_bar_title">Piilota navigointipalkki</string>
|
||||
<string name="revanced_music_hide_navigation_bar_summary_on">Navigointipalkki on piilotettu</string>
|
||||
<string name="revanced_music_hide_navigation_bar_summary_on">Navigointipalkki piilotetaan</string>
|
||||
<string name="revanced_music_hide_navigation_bar_summary_off">Navigointipalkki näytetään</string>
|
||||
<string name="revanced_music_hide_navigation_bar_labels_title">Piilota navigointipainikkeiden tunnisteet</string>
|
||||
<string name="revanced_music_hide_navigation_bar_labels_summary_on">Tunnisteet on piilotettu</string>
|
||||
@@ -1668,12 +1682,12 @@ Rajoitukset:
|
||||
</patch>
|
||||
<patch id="layout.premium.hideGetPremiumPatch">
|
||||
<string name="revanced_music_hide_get_premium_label_title">Piilota \"Hanki Music Premium\" -tunniste</string>
|
||||
<string name="revanced_music_hide_get_premium_label_summary_on">Tunniste on piilotettu</string>
|
||||
<string name="revanced_music_hide_get_premium_label_summary_on">Tunniste piilotetaan</string>
|
||||
<string name="revanced_music_hide_get_premium_label_summary_off">Tunniste näytetään</string>
|
||||
</patch>
|
||||
<patch id="layout.upgradebutton.hideUpgradeButtonPatch">
|
||||
<string name="revanced_music_hide_upgrade_button_title">Piilota päivitä-painike</string>
|
||||
<string name="revanced_music_hide_upgrade_button_summary_on">Painike on piilotettu</string>
|
||||
<string name="revanced_music_hide_upgrade_button_summary_on">Painike piilotetaan</string>
|
||||
<string name="revanced_music_hide_upgrade_button_summary_off">Painike näytetään</string>
|
||||
</patch>
|
||||
</app>
|
||||
|
||||
@@ -397,6 +397,20 @@ Kung ang isang Doodle ay kasalukuyang ipinapakita sa iyong rehiyon at ang settin
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<string name="revanced_custom_filter_strings_summary">Listahan ng mga string ng tagabuo ng bahagi ng path na i-filter na pinaghihiwalay ng bagong linya</string>
|
||||
<string name="revanced_custom_filter_toast_invalid_syntax">Di-wastong custom na filter: %s</string>
|
||||
<string name="revanced_hide_view_count_title">Itago ang bilang ng panonood</string>
|
||||
<string name="revanced_hide_view_count_summary_on">Ang bilang ng panonood ay nakatago sa feed at mga resulta ng paghahanap</string>
|
||||
<string name="revanced_hide_view_count_summary_off">Ang bilang ng panonood ay ipinapakita sa feed at mga resulta ng paghahanap</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<string name="revanced_hide_view_count_user_dialog_message">"Mga Limitasyon:
|
||||
• Ang mga Shorts shelves, mga pahina ng channel, at mga resulta ng paghahanap ay maaari pa ring magpakita ng mga bilang ng panonood
|
||||
• Ang tampok na ito ay hindi gumagana sa automotive form factor"</string>
|
||||
<string name="revanced_hide_upload_time_title">Itago ang oras ng pag-upload</string>
|
||||
<string name="revanced_hide_upload_time_summary_on">Nakatago ang oras ng pag-upload sa feed at mga resulta ng paghahanap</string>
|
||||
<string name="revanced_hide_upload_time_summary_off">Ipinapakita ang oras ng pag-upload sa feed at mga resulta ng paghahanap</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<string name="revanced_hide_upload_time_user_dialog_message">"Mga Limitasyon:
|
||||
• Ang mga seksyon ng Shorts, mga pahina ng channel, at mga resulta ng paghahanap ay maaaring magpakita pa rin ng mga oras ng pag-upload
|
||||
• Hindi gumagana ang feature na ito sa form factor ng sasakyan"</string>
|
||||
<string name="revanced_hide_keyword_content_screen_title">Itago ang nilalaman ng keyword</string>
|
||||
<string name="revanced_hide_keyword_content_screen_summary">Itago ang paghahanap at feed ng mga video gamit ang mga filter ng keyword</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">Itago ang mga home video sa pamamagitan ng mga keyword</string>
|
||||
@@ -781,7 +795,7 @@ Upang ipakita ang menu ng Audio track, baguhin ang 'Spoof video streams' sa iPad
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_on">Nakatago ang mga pindutan</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_off">Ang mga pindutan ay ipinapakita</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
<string name="revanced_hide_endscreen_cards_title">Itago ang mga end screen card</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_on">Nakatago ang mga end screen card</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_off">Ipinapakita ang mga end screen card</string>
|
||||
@@ -1336,25 +1350,25 @@ Limitasyon: Maaaring hindi gumana ang paggamit ng back button sa toolbar"</strin
|
||||
<string name="revanced_miniplayer_type_entry_5">Moderno 2</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">Moderno 3</string>
|
||||
<string name="revanced_miniplayer_type_entry_7">Makabagong 4</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_title">Paganahin ang mga bilugan na sulok</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Bilugan ang mga sulok</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Parihaba ang mga sulok</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_title">Huwag paganahin ang bilog na mga sulok</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_on">Parihaba ang mga sulok</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_off">Bilugan ang mga sulok</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">Paganahin ang pag-resize gamit ang double-tap at pinch</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"Ang pagkilos ng double-tap at pinch upang baguhin ang laki ay pinagana
|
||||
|
||||
• Double tap upang dagdagan ang laki ng \"miniplayer\"
|
||||
• Double tap muli upang ibalik ang orihinal na laki"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">Hindi pinagana ang pagkilos ng double-tap at pag-resize gamit ang pinch</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">Paganahin ang drag and drop</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"Ang drag and drop ay pinagana
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_title">Huwag paganahin ang pagkaladkad at paghulog</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_on">Hindi pinagana ang drag and drop</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_off">"Ang drag and drop ay pinagana
|
||||
|
||||
Ang \"miniplayer\" ay maaaring i-drag sa anumang sulok ng screen"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">Hindi pinagana ang drag and drop</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">Paganahin ang pahalang na drag gesture</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Ang horizontal drag gesture ay pinagana
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_title">Huwag paganahin ang pahalang na kilos ng pagkaladkad</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_on">Hindi pinagana ang pahalang na drag gesture</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_off">"Ang horizontal drag gesture ay pinagana
|
||||
|
||||
Ang \"miniplayer\" ay maaaring i-drag palabas ng screen sa kaliwa o kanan"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Hindi pinagana ang pahalang na drag gesture</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_title">Itago ang mga button ng overlay</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_on">Nakatago ang mga button ng overlay</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_off">Ipinapakita ang mga button ng overlay</string>
|
||||
|
||||
@@ -397,6 +397,20 @@ Si un Doodle est actuellement affiché dans votre région et que cette option de
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<string name="revanced_custom_filter_strings_summary">Liste des chemins des composants à filtrer, séparés par un retour à la ligne</string>
|
||||
<string name="revanced_custom_filter_toast_invalid_syntax">Filtre personnalisé invalide : %s</string>
|
||||
<string name="revanced_hide_view_count_title">Masquer le nombre de vues</string>
|
||||
<string name="revanced_hide_view_count_summary_on">Le nombre de vues est masqué dans le fil d\'actualité et les résultats de recherche</string>
|
||||
<string name="revanced_hide_view_count_summary_off">Le nombre de vues est affiché dans le fil d\'actualité et les résultats de recherche</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<string name="revanced_hide_view_count_user_dialog_message">"Limitations :
|
||||
• Les nombres de vues peuvent encore être affichés dans les étagères à Shorts, les pages de chaînes et les résultats de recherche
|
||||
• Cette fonctionnalité ne fonctionne pas avec le format de mise en page Automotive"</string>
|
||||
<string name="revanced_hide_upload_time_title">Masquer l\'heure de mise en ligne</string>
|
||||
<string name="revanced_hide_upload_time_summary_on">L\'heure de mise en ligne est masquée dans le flux et les résultats de recherche</string>
|
||||
<string name="revanced_hide_upload_time_summary_off">L\'heure de mise en ligne est affichée dans le flux et les résultats de recherche</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<string name="revanced_hide_upload_time_user_dialog_message">"Limitations :
|
||||
• Les heures de mise en ligne peuvent encore être affichées dans les étagères à Shorts, les pages de chaînes et les résultats de recherche
|
||||
• Cette fonctionnalité ne fonctionne pas avec le format de mise en page Automotive"</string>
|
||||
<string name="revanced_hide_keyword_content_screen_title">Masquer des contenus par mot-clé</string>
|
||||
<string name="revanced_hide_keyword_content_screen_summary">Filtrez les vidéos par mot-clé dans les recherches et le flux</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">Filtrer les vidéos de l\'accueil par mot-clé</string>
|
||||
@@ -783,7 +797,7 @@ Pour afficher le menu Piste audio, définissez \"Falsifier les flux vidéo\" sur
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_on">Les boutons sont masqués</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_off">Les boutons sont affichés</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
<string name="revanced_hide_endscreen_cards_title">Masquer les écrans de fin au format fiche</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_on">Les écrans de fin au format fiche sont masqués</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_off">Les écrans de fin au format fiche sont affichés</string>
|
||||
@@ -1339,25 +1353,25 @@ Limitation : Il se peut que le bouton Retour dans la barre d'outils ne fonction
|
||||
<string name="revanced_miniplayer_type_entry_5">Moderne 2</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">Moderne 3</string>
|
||||
<string name="revanced_miniplayer_type_entry_7">Moderne 4</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_title">Activer les coins arrondis</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Les coins sont arrondis</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Les coins sont carrés</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_title">Désactiver les coins arrondis</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_on">Les coins sont carrés</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_off">Les coins sont arrondis</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">Activer le double appui et Pincer pour redimensionner</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"L'action de double appui et Pincer pour redimensionner sont activés
|
||||
|
||||
• Appuyez deux fois pour augmenter la taille du lecteur réduit
|
||||
• Appuyez deux fois à nouveau pour rétablir la taille d'origine"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">Action de double appui et Pincer pour redimensionner sont désactivés</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">Activer le glisser-déposer</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"Le glisser-déposer est activé
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_title">Désactiver le glisser-déposer</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_on">Le glisser-déposer est désactivé</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_off">"Le glisser-déposer est activé
|
||||
|
||||
Le lecteur réduit peut être déplacé vers n'importe quel coin de l'écran"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">Le glisser-déposer est désactivé</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">Activer le geste de déplacement horizontal</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Le geste de déplacement horizontal est activé
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_title">Désactiver le geste de glissement horizontal</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_on">Geste de glissement horizontal désactivé</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_off">"Geste de glissement horizontal activé
|
||||
|
||||
Le lecteur réduit peut être déplacé hors de l'écran, à gauche comme à droite"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Geste de déplacement horizontal désactivé</string>
|
||||
Le lecteur réduit peut être glissé hors de l'écran, à gauche comme à droite"</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_title">Masquer les boutons en superposition</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_on">Les boutons en superposition sont masqués</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_off">Les boutons en superposition sont affichés</string>
|
||||
@@ -1576,7 +1590,7 @@ Activer cette option peut déverrouiller des qualités vidéo supérieures"</str
|
||||
|
||||
Limitations :
|
||||
• La résolution maximale est 1080p
|
||||
• La lecture vidéo utilisera plus de données Internet que VP9 ou AV1
|
||||
• La lecture vidéo utilisera plus de données Internet qu'avec VP9 ou AV1
|
||||
• Les vidéos HDR n'utiliseront pas AVC
|
||||
• Certains appareils ne peuvent pas forcer l'utilisation d'AVC"</string>
|
||||
</patch>
|
||||
|
||||
@@ -397,6 +397,20 @@ Má tá Doodle á thaispeáint faoi láthair i do réigiún agus má tá an tsu
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<string name="revanced_custom_filter_strings_summary">Liosta de na teaghráin tógála cosáin comhpháirteanna le scagadh scartha le líne nua</string>
|
||||
<string name="revanced_custom_filter_toast_invalid_syntax">Scagaire saincheaptha neamhbhailí: %s</string>
|
||||
<string name="revanced_hide_view_count_title">Folaigh líon radharcanna</string>
|
||||
<string name="revanced_hide_view_count_summary_on">Tá líon radharcanna i bhfolach sa fhotha agus sna torthaí cuardaigh</string>
|
||||
<string name="revanced_hide_view_count_summary_off">Taispeántar líon radharcanna sa fhotha agus sna torthaí cuardaigh</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<string name="revanced_hide_view_count_user_dialog_message">"Teorainneacha:
|
||||
• Is féidir le seilfeanna Shorts, leathanaigh cainéil, agus torthaí cuardaigh líon na radharcanna a thaispeáint fós
|
||||
• Ní oibríonn an ghné seo le fachtóir foirme feithicleach"</string>
|
||||
<string name="revanced_hide_upload_time_title">Folaigh am uaslódála</string>
|
||||
<string name="revanced_hide_upload_time_summary_on">Tá am uaslódála folaithe i bhfotha agus i dtorthaí cuardaigh</string>
|
||||
<string name="revanced_hide_upload_time_summary_off">Tá am uaslódála le feiceáil i bhfotha agus i dtorthaí cuardaigh</string>
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<string name="revanced_hide_upload_time_user_dialog_message">"Teorainneacha:
|
||||
• Is féidir le seilfeanna Shorts, leathanaigh chainéal, agus torthaí cuardaigh fós amanna uaslódála a thaispeáint
|
||||
• Ní oibríonn an ghné seo le fachtóir foirme feithicleach"</string>
|
||||
<string name="revanced_hide_keyword_content_screen_title">Folaigh ábhair eochairfhocal</string>
|
||||
<string name="revanced_hide_keyword_content_screen_summary">Folaigh físeáin chuardaigh agus fotha ag baint úsáide as scagairí eochairfhocail</string>
|
||||
<string name="revanced_hide_keyword_content_home_title">Folaigh físeáin bhaile de réir eochair</string>
|
||||
@@ -783,7 +797,7 @@ Chun roghchlár an rian fuaime a thaispeáint, athraigh 'Sruthanna físeáin bhr
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_on">Tá cnaipí i bhfolach</string>
|
||||
<string name="revanced_hide_player_previous_next_buttons_summary_off">Taispeántar cnaipí</string>
|
||||
</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_summary_on">Tá cártaí scáileáin deiridh i bhfolach</string>
|
||||
<string name="revanced_hide_endscreen_cards_summary_off">Taispeántar cártaí scáileáin deireadh</string>
|
||||
@@ -1338,25 +1352,25 @@ Teorainn: Seans nach n-oibreoidh úsáid a bhaint as an gcnaipe cúil ar an mbar
|
||||
<string name="revanced_miniplayer_type_entry_5">Nua-Aimseartha 2</string>
|
||||
<string name="revanced_miniplayer_type_entry_6">Nua-aimseartha 3</string>
|
||||
<string name="revanced_miniplayer_type_entry_7">Nua-aimseartha 4</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_title">Cumasaigh coirnéil chothromú</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_on">Déantar coirnéil a shlánú</string>
|
||||
<string name="revanced_miniplayer_rounded_corners_summary_off">Tá coirnéil cearnach</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_title">Díchumasaigh coirnéil chruinn</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_on">Tá coirnéil cearnach</string>
|
||||
<string name="revanced_miniplayer_disable_rounded_corners_summary_off">Déantar coirnéil a shlánú</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_title">Cumasaigh sconna dúbailte agus pinch chun méid a athrú</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_on">"Gníomh tap dúbailte agus pinch le méid a athrú cumasaithe
|
||||
|
||||
• Tap dúbailte chun méid an mhion-imreora a mhéadú
|
||||
• Tap dúbailte arís chun an méid bunaidh a athchóiriú"</string>
|
||||
<string name="revanced_miniplayer_double_tap_action_summary_off">Díchumasaíodh gníomh tapáil faoi dhó agus pinch chun méid a athrú</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_title">Cumasaigh tarraing agus scaoil</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_on">"Tá drag-and-drop cumasaithe
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_title">Díchumasaigh tarraing agus scaoil</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_on">Tá tarraing agus scaoil díchumasaithe</string>
|
||||
<string name="revanced_miniplayer_disable_drag_and_drop_summary_off">"Tá drag-and-drop cumasaithe
|
||||
|
||||
Is féidir an mhion-imreoir a tharraingt go haon chúinne den scáileán"</string>
|
||||
<string name="revanced_miniplayer_drag_and_drop_summary_off">Tá tarraing agus scaoil díchumasaithe</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_title">Cumasaigh gotha tarraingthe cothrománach</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_on">"Cumasaithe geastú tarraingthe cothrománach
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_title">Díchumasaigh gotha tarraingthe cothrománach</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_on">Díchumasaíodh an comhartha tarraingthe cothrománach</string>
|
||||
<string name="revanced_miniplayer_disable_horizontal_drag_summary_off">"Cumasaithe geastú tarraingthe cothrománach
|
||||
|
||||
Is féidir an mhion-imreoir a tharraingt as an scáileán ar chlé nó ar dheis"</string>
|
||||
<string name="revanced_miniplayer_horizontal_drag_summary_off">Díchumasaíodh an comhartha tarraingthe cothrománach</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_title">Folaigh cnaipí forleathana</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_on">Tá cnaipí forleathana i bhfolach</string>
|
||||
<string name="revanced_miniplayer_hide_overlay_buttons_summary_off">Taispeántar cnaipí forleathana</string>
|
||||
|
||||
@@ -59,6 +59,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<!-- For localization, it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc.) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
@@ -133,7 +135,7 @@ Second \"item\" text"</string>
|
||||
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
|
||||
<!-- 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'. -->
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
</patch>
|
||||
<patch id="layout.hide.fullscreenambientmode.disableFullscreenAmbientModePatch">
|
||||
</patch>
|
||||
|
||||
@@ -59,6 +59,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
<!-- For localization, it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
|
||||
<!-- Translations _must_ use a localized example. For languages that do not use spaces between words (Chinese, Japanese, etc.) the English AI example should be used since no localized examples exist. Or if using machine translations, or if nobody wants to think of a localized example, then the English 'ai' example should be left as-is. -->
|
||||
@@ -133,7 +135,7 @@ Second \"item\" text"</string>
|
||||
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
|
||||
<!-- 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'. -->
|
||||
</patch>
|
||||
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
|
||||
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
|
||||
</patch>
|
||||
<patch id="layout.hide.fullscreenambientmode.disableFullscreenAmbientModePatch">
|
||||
</patch>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user