Compare commits

...

32 Commits

Author SHA1 Message Date
semantic-release-bot
526c7c05e2 chore: Release v5.42.0-dev.8 [skip ci]
# [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](9d6731660b))

### Features

* **YouTube Music:** Add `Force original audio` patch ([#6036](https://github.com/ReVanced/revanced-patches/issues/6036)) ([d0d53d1](d0d53d109e))
2025-10-01 15:04:39 +00:00
LisoUseInAIKyrios
d0d53d109e feat(YouTube Music): Add Force original audio patch (#6036) 2025-10-01 18:59:16 +04:00
LisoUseInAIKyrios
9d6731660b fix(YouTube - Force original language): Resolve some videos using Swedish audio track 2025-10-01 18:57:53 +04:00
semantic-release-bot
5a7e199162 chore: Release v5.42.0-dev.7 [skip ci]
# [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](08e8ead04f))
2025-10-01 06:25:01 +00:00
LisoUseInAIKyrios
0c662c8e3b chore(deps): Bump actions/checkout from 4 to 5 2025-10-01 10:19:09 +04:00
Swakshan
08e8ead04f feat(Instagram): Add Open links externally patch (#6012) 2025-10-01 10:17:19 +04:00
semantic-release-bot
d238a42708 chore: Release v5.42.0-dev.6 [skip ci]
# [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](673609c2aa))
2025-09-30 20:09:49 +00:00
LisoUseInAIKyrios
673609c2aa fix(X / Twitter): Remove non functional and obsolete patch Open links with app chooser (#6033) 2025-10-01 00:06:40 +04:00
github-actions[bot]
5f1a485e8f chore: Sync translations (#6034) 2025-10-01 00:06:22 +04:00
LisoUseInAIKyrios
6961babee9 refactor(YouTube - Check watch history domain name resolution): Do not show redundant dialog cancel button 2025-09-30 12:11:06 +04:00
semantic-release-bot
328c9b6bbe chore: Release v5.42.0-dev.5 [skip ci]
# [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](4c8b56f546))
2025-09-28 11:30:51 +00:00
MarcaD
4c8b56f546 feat(YouTube Music): Add Custom branding patch (#6007)
Co-authored-by: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com>
2025-09-28 15:26:12 +04:00
semantic-release-bot
1754023dd6 chore: Release v5.42.0-dev.4 [skip ci]
# [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](328234f39a))
2025-09-28 10:34:39 +00:00
LisoUseInAIKyrios
328234f39a fix(YouTube Music - GmsCore support): Handle sharing links to certain apps such as Instagram (#6026) 2025-09-28 14:31:40 +04:00
github-actions[bot]
326953cfc3 chore: Sync translations (#6028) 2025-09-28 14:30:01 +04:00
semantic-release-bot
725d5dc974 chore: Release v5.42.0-dev.3 [skip ci]
# [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](76b0364c5b))
2025-09-28 10:25:37 +00:00
LisoUseInAIKyrios
76b0364c5b fix(YouTube - Hide end screen cards): Hide new type of end screen card (#6027) 2025-09-28 14:22:42 +04:00
semantic-release-bot
1cbff799ad chore: Release v5.42.0-dev.2 [skip ci]
# [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](080a226614))
2025-09-27 19:57:01 +00:00
LisoUseInAIKyrios
080a226614 fix(Instagram - Hide navigation buttons): Resolve app startup crash 2025-09-27 23:53:35 +04:00
semantic-release-bot
2b71bd80c2 chore: Release v5.42.0-dev.1 [skip ci]
# [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](5cb46c4e91))
2025-09-27 13:02:45 +00:00
Samo Hribar
5cb46c4e91 feat(Viber): Add Hide navigation buttons patch (#5991) 2025-09-27 16:59:51 +04:00
semantic-release-bot
52c369576d chore: Release v5.41.1-dev.2 [skip ci]
## [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](28799a548a))
2025-09-27 12:35:45 +00:00
LisoUseInAIKyrios
28799a548a fix(YouTube Music - Hide cast button): Fix patching error 2025-09-27 16:31:22 +04:00
semantic-release-bot
1c80774d79 chore: Release v5.41.1-dev.1 [skip ci]
## [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](7817885cff))
2025-09-27 12:24:18 +00:00
LisoUseInAIKyrios
7817885cff fix(YouTube Music - Hide cast button): Resolve button not hiding 2025-09-27 16:21:32 +04:00
LisoUseInAIKyrios
9afe9afc67 chore(YouTube): Fix patch description 2025-09-27 11:53:21 +04:00
semantic-release-bot
3a8091ae00 chore: Release v5.41.0 [skip ci]
# [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](6fa404331b))
* **Instagram - Limit feed to followed profiles:** Preserve favorites feed ([#5963](https://github.com/ReVanced/revanced-patches/issues/5963)) ([ef51401](ef514017f4))
* **TikTok:** Show correct dialog restart text, use correct font color for non-dark mode ([d1a1293](d1a12930c3))
* **Twitch - Settings:** Fix missing style resources ([#5970](https://github.com/ReVanced/revanced-patches/issues/5970)) ([8c22995](8c229954d7))
* **YouTube - Hide Shorts components:** Fix "Hide preview comment" ([#5990](https://github.com/ReVanced/revanced-patches/issues/5990)) ([dd4e2cd](dd4e2cd085))
* **YouTube - Return YouTube Dislike:** Do not show error toast if API returns 401 status ([#5949](https://github.com/ReVanced/revanced-patches/issues/5949)) ([58d088a](58d088ab30))
* **YouTube - Settings:** Handle on screen back swipe gesture ([#6002](https://github.com/ReVanced/revanced-patches/issues/6002)) ([6f92b6c](6f92b6c50b))
* **YouTube - Settings:** Use an overlay to show search results ([#5806](https://github.com/ReVanced/revanced-patches/issues/5806)) ([ece8076](ece8076f7c))
* **YouTube - SponsorBlock:** Show category color dot in voting dialog menu ([4be00d0](4be00d09b7))
* **YouTube - SponsorBlock:** Show category color in create new segment menu ([#5987](https://github.com/ReVanced/revanced-patches/issues/5987)) ([ffd933c](ffd933c673))
* **YouTube - Spoof video streams:** Update client side effects summary text ([a0a62dd](a0a62ddad2))

### Features

* **Tumblr:** Add `Disable Tumblr TV` patch ([#5959](https://github.com/ReVanced/revanced-patches/issues/5959)) ([212418b](212418b8db))
* **YouTube - Hide layout components:** Add "Hide Emoji and Timestamp buttons" setting ([#5992](https://github.com/ReVanced/revanced-patches/issues/5992)) ([2b555f6](2b555f67f0))
* **YouTube - Hide layout components:** Add "Hide view count" and "Hide upload time" settings ([#5983](https://github.com/ReVanced/revanced-patches/issues/5983)) ([7a37d85](7a37d858fb))
* **YouTube - Loop video:** Add player button to change loop video state ([#5961](https://github.com/ReVanced/revanced-patches/issues/5961)) ([dfb5407](dfb5407e67))
* **YouTube - Spoof app version:** Add spoof target `20.05.46` that fixes transcript functionality ([5823f0e](5823f0e982))
* **YouTube Music:** Add `Check watch history domain name resolution` ([#5979](https://github.com/ReVanced/revanced-patches/issues/5979)) ([8af70fe](8af70fe2d1))
* **YouTube Music:** Add `Sanitize sharing links` patch ([#5952](https://github.com/ReVanced/revanced-patches/issues/5952)) ([45c1ee8](45c1ee8a12))
* **YouTube Music:** Add `Theme` patch ([#5984](https://github.com/ReVanced/revanced-patches/issues/5984)) ([3bd76d6](3bd76d60d6))
* **YouTube:** Add `Disable video codecs` patch ([#5981](https://github.com/ReVanced/revanced-patches/issues/5981)) ([bfbffbd](bfbffbd1f5))
2025-09-27 07:21:33 +00:00
LisoUseInAIKyrios
6192ece114 chore: Merge branch dev to main (#5950) 2025-09-27 11:17:09 +04:00
github-actions[bot]
5d9971444e chore: Sync translations (#6014) 2025-09-27 11:15:04 +04:00
semantic-release-bot
cdfa75dd5a chore: Release v5.41.0-dev.18 [skip ci]
# [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](6f92b6c50b))
2025-09-26 15:05:03 +00:00
LisoUseInAIKyrios
6f92b6c50b fix(YouTube - Settings): Handle on screen back swipe gesture (#6002) 2025-09-26 19:00:12 +04:00
github-actions[bot]
1e023fa1f3 chore: Sync translations (#6010) 2025-09-26 18:59:48 +04:00
193 changed files with 1580 additions and 846 deletions

View File

@@ -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'

View File

@@ -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

View File

@@ -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

View File

@@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Preprocess strings
env:

View File

@@ -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

View File

@@ -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

View File

@@ -1,3 +1,115 @@
# [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)

View File

@@ -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;
}
}

View File

@@ -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()
);
}
}

View File

@@ -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);
}

View File

@@ -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,

View File

@@ -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);

View File

@@ -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;
}
}
}

View File

@@ -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,

View File

@@ -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) {

View File

@@ -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

View File

@@ -1 +1,3 @@
// Do not remove. Necessary for the extension plugin to be applied to the project.
dependencies {
compileOnly(project(":extensions:shared:library"))
}

View File

@@ -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);
}

View File

@@ -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");

View File

@@ -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()
);
}
}

View File

@@ -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();
}
}

View File

@@ -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);
}
}

View File

@@ -55,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);
@@ -75,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);

View File

@@ -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);
}
}

View File

@@ -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.17
version = 5.42.0-dev.8

View File

@@ -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;
}
@@ -451,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
}
@@ -1306,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;
}
@@ -1407,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 {

View File

@@ -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")
)
}
}
}
}

View File

@@ -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)
}

View File

@@ -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
"""
)
}
}
}
}

View File

@@ -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"
)
)
}
)

View File

@@ -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
}
}

View File

@@ -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(

View File

@@ -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
"""
)
}
}

View File

@@ -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"
)
}

View File

@@ -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
)
)
}

View File

@@ -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() {

View File

@@ -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,
)

View File

@@ -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
}

View File

@@ -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"
)
}

View File

@@ -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("&", "&amp;") // Must be first to avoid double-escaping.
.replace("<", "&lt;")
.replace(">", "&gt;")
.replace(Regex("(?<!&)\""), "&quot;")
// 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+.
}
}

View File

@@ -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)
}
}

View File

@@ -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()
}
}

View File

@@ -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",
)
)

View File

@@ -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)

View File

@@ -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"
}
}

View File

@@ -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",
)
)

View File

@@ -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)

View File

@@ -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,

View File

@@ -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",
)
)

View File

@@ -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
}
}

View File

@@ -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
"""
}
}

View File

@@ -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())
}
}
}
}
)

View File

@@ -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
}
}

View File

@@ -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
"""
)
}
}
}

View File

@@ -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
"""
)

View File

@@ -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"
)
}

View File

@@ -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

View File

@@ -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
"""

View File

@@ -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,
)

View File

@@ -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,

View File

@@ -135,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>

View File

@@ -135,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>

View File

@@ -797,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>

View File

@@ -136,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>

View File

@@ -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>
@@ -797,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>
@@ -1351,7 +1351,7 @@ 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_disable_rounded_corners_title">Yuvarlaq küncləri söndü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>
@@ -1360,12 +1360,12 @@ Məhdudiyyət: Alətlər cizgisindəki geri düyməsin istifadə işləməyə bi
• 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_disable_drag_and_drop_title">Sürük-burax funksiyasını söndür</string>
<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_disable_horizontal_drag_title">Üfüqi sürükləmə jestini söndür</string>
<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

View File

@@ -797,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>

View File

@@ -797,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>

View File

@@ -793,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>

View File

@@ -135,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>

View File

@@ -135,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>

View File

@@ -797,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>

View File

@@ -797,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>

View File

@@ -560,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>
@@ -794,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>

View File

@@ -799,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>

View File

@@ -797,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>

View File

@@ -797,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>

View File

@@ -135,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>

View File

@@ -182,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>

View File

@@ -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,20 +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 katselukertojen määrä</string>
<string name="revanced_hide_view_count_summary_on">Katselukertojen määrä on piilotettu syötteestä ja hakutuloksista</string>
<string name="revanced_hide_view_count_summary_off">Katselukertojen määrä näytetään syötteessä ja hakutuloksissa</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 autojen muotokertoimella"</string>
<string name="revanced_hide_upload_time_title">Piilota latausaika</string>
<string name="revanced_hide_upload_time_summary_on">Latausaika on piilotettu syötteestä ja hakutuloksista</string>
<string name="revanced_hide_upload_time_summary_off">Latausaika näkyy syötteessä ja hakutuloksissa</string>
• 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ää latausajat
• Tämä ominaisuus ei toimi autokäyttöliittymän kanssa"</string>
• 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>
@@ -449,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">
@@ -524,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>
@@ -614,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">
@@ -677,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>
@@ -704,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>
@@ -722,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 &amp; 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">
@@ -809,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">
@@ -819,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">
@@ -950,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">
@@ -1260,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>
@@ -1372,10 +1372,10 @@ Minisoitin voidaan vetää mihin tahansa näytön kulmaan"</string>
Minisoitin voidaan vetää pois näytöltä vasemmalle tai oikealle"</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>
@@ -1615,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>
@@ -1632,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">
@@ -1642,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">
@@ -1655,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>
@@ -1682,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>

View File

@@ -795,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>

View File

@@ -797,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>
@@ -1368,10 +1368,10 @@ Limitation : Il se peut que le bouton Retour dans la barre d'outils ne fonction
Le lecteur réduit peut être déplacé vers n'importe quel coin de l'écran"</string>
<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 déplacement horizontal désactivé</string>
<string name="revanced_miniplayer_disable_horizontal_drag_summary_off">"Le geste de déplacement horizontal est activé
<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>
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>

View File

@@ -797,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>

View File

@@ -135,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>

View File

@@ -135,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>

View File

@@ -137,7 +137,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>

View File

@@ -136,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>

View File

@@ -797,7 +797,7 @@ Az hangsáv menü megjelenítéséhez állítsa a 'Videó stream-ek meghamisít
<string name="revanced_hide_player_previous_next_buttons_summary_on">A gombok elrejtve</string>
<string name="revanced_hide_player_previous_next_buttons_summary_off">A gombok megjelennek</string>
</patch>
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
<string name="revanced_hide_endscreen_cards_title">Záróképernyő kártyák elrejtése</string>
<string name="revanced_hide_endscreen_cards_summary_on">A záróképernyő kártyák el vannak rejtve</string>
<string name="revanced_hide_endscreen_cards_summary_off">A záróképernyő kártyák megjelennek</string>

View File

@@ -797,7 +797,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>

View File

@@ -402,14 +402,14 @@ Jika Doodle saat ini ditampilkan di wilayah Anda dan pengaturan penyembunyi ini
<string name="revanced_hide_view_count_summary_off">Jumlah penayangan ditampilkan di umpan dan hasil pencarian</string>
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
<string name="revanced_hide_view_count_user_dialog_message">"Keterbatasan:
• Rak Shorts, halaman channel, dan hasil pencarian mungkin masih menampilkan jumlah penayangan
• Rak Shorts, halaman saluran, dan hasil pencarian mungkin masih menampilkan jumlah penayangan
• Fitur ini tidak berfungsi dengan faktor bentuk otomotif"</string>
<string name="revanced_hide_upload_time_title">Sembunyikan waktu unggah</string>
<string name="revanced_hide_upload_time_summary_on">Waktu unggah disembunyikan di umpan dan hasil penelusuran</string>
<string name="revanced_hide_upload_time_summary_off">Waktu unggah ditampilkan di umpan dan hasil penelusuran</string>
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
<string name="revanced_hide_upload_time_user_dialog_message">"Keterbatasan:
• Rak Shorts, halaman channel, dan hasil penelusuran mungkin masih menampilkan waktu unggah
• Rak Shorts, halaman saluran, dan hasil penelusuran mungkin masih menampilkan waktu unggah
• Fitur ini tidak berfungsi dengan faktor bentuk otomotif"</string>
<string name="revanced_hide_keyword_content_screen_title">Sembunyikan kata kunci konten</string>
<string name="revanced_hide_keyword_content_screen_summary">Sembunyikan pencarian dan feed video menggunakan penyaring kata kunci</string>
@@ -797,7 +797,7 @@ Untuk menampilkan menu trek audio, ubah 'Palsukan aliran video' ke iPadOS"</stri
<string name="revanced_hide_player_previous_next_buttons_summary_on">Tombol disembunyikan</string>
<string name="revanced_hide_player_previous_next_buttons_summary_off">Tombol ditampilkan</string>
</patch>
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
<string name="revanced_hide_endscreen_cards_title">Sembunyikan kartu layar akhir</string>
<string name="revanced_hide_endscreen_cards_summary_on">Kartu layar akhir disembunyikan</string>
<string name="revanced_hide_endscreen_cards_summary_off">Kartu layar akhir ditampilkan</string>

View File

@@ -135,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>

View File

@@ -797,7 +797,7 @@ Per mostrare il menu della traccia audio, cambia \"Falsifica flussi video\" su i
<string name="revanced_hide_player_previous_next_buttons_summary_on">I pulsanti sono nascosti</string>
<string name="revanced_hide_player_previous_next_buttons_summary_off">I pulsanti sono visibili</string>
</patch>
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
<patch id="layout.hide.endscreencards.hideEndScreenCardsResourcePatch">
<string name="revanced_hide_endscreen_cards_title">Nascondi le schede della schermata finale</string>
<string name="revanced_hide_endscreen_cards_summary_on">Le schede della schermata finale sono nascoste</string>
<string name="revanced_hide_endscreen_cards_summary_off">Le schede della schermata finale sono visibili</string>

View File

@@ -797,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>

View File

@@ -69,8 +69,8 @@ Second \"item\" text"</string>
<string name="revanced_settings_search_history_summary_on">設定の検索履歴は表示されます</string>
<string name="revanced_settings_search_history_summary_off">設定の検索履歴は表示されません</string>
<string name="revanced_show_menu_icons_title">ReVanced の設定にアイコンを表示</string>
<string name="revanced_show_menu_icons_summary_on">ReVanced の設定アイコンが表示されます</string>
<string name="revanced_show_menu_icons_summary_off">ReVanced の設定アイコンは表示されません</string>
<string name="revanced_show_menu_icons_summary_on">ReVanced の設定メニューにはアイコンが表示されます</string>
<string name="revanced_show_menu_icons_summary_off">ReVanced の設定メニューにはアイコンは表示されません</string>
<string name="revanced_language_title">ReVanced 設定の言語</string>
<string name="revanced_language_user_dialog_message">"一部の言語の翻訳が欠落しているまたは不完全である可能性があります。
@@ -94,7 +94,7 @@ Second \"item\" text"</string>
<string name="gms_core_dialog_title">操作が必要です</string>
<string name="gms_core_dialog_not_whitelisted_not_allowed_in_background_message">"GmsCore はバックグラウンドで実行する権限がありません。
お使いのデバイスの「Don't kill my app!」ガイドに従い、GmsCore のインストール手順を適用してください。
お使いのデバイスの「Don't kill my app!」ガイドに従い、GmsCore に対するデバイスの設定を変更してください。
これはアプリが正常に動作するために必要です。"</string>
<string name="gms_core_dialog_open_website_text">ウェブサイトを開く</string>
@@ -107,7 +107,7 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<string name="revanced_spoof_video_streams_screen_title">動画ストリームを偽装</string>
<string name="revanced_spoof_video_streams_screen_summary">動画再生失敗を回避するために、クライアントの動画ストリームを偽装します</string>
<string name="revanced_spoof_video_streams_screen_summary">動画再生失敗しないために、クライアントの動画ストリームを偽装します</string>
<string name="revanced_spoof_video_streams_screen_title">動画ストリームを偽装</string>
<string name="revanced_spoof_video_streams_screen_summary">動画再生の失敗を回避するために、クライアントの動画ストリームを偽装します</string>
<string name="revanced_spoof_video_streams_title">動画ストリームを偽装</string>
@@ -122,33 +122,33 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
</patch>
<patch id="misc.debugging.enableDebuggingPatch">
<string name="revanced_debug_screen_title">デバッグ</string>
<string name="revanced_debug_screen_summary">デバッグオプションを有効または無効にします</string>
<string name="revanced_debug_screen_summary">デバッグ オプションを有効または無効にします</string>
<string name="revanced_debug_title">デバッグログを有効化</string>
<string name="revanced_debug_summary_on">デバッグログは有効です</string>
<string name="revanced_debug_summary_off">デバッグログは無効です</string>
<string name="revanced_debug_stacktrace_title">スタック トレースをログに記録</string>
<string name="revanced_debug_stacktrace_summary_on">デバッグログにスタック トレースが含まれます</string>
<string name="revanced_debug_stacktrace_summary_off">デバッグログにスタック トレースは含まれません</string>
<string name="revanced_debug_stacktrace_title">スタック トレースをログに保存</string>
<string name="revanced_debug_stacktrace_summary_on">デバッグログにスタック トレースが含まれます</string>
<string name="revanced_debug_stacktrace_summary_off">デバッグログにスタック トレースは含まれません</string>
<string name="revanced_debug_toast_on_error_title">ReVanced のエラー時にトーストを表示</string>
<string name="revanced_debug_toast_on_error_summary_on">エラーが発生した場合にトーストが表示されます</string>
<string name="revanced_debug_toast_on_error_summary_off">エラーが発生してもトーストは表示されません</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"エラートーストをオフにすると、ReVanced のすべてのエラー通知が表示なります。
<string name="revanced_debug_toast_on_error_summary_on">エラーが発生した場合にトースト通知が表示されます</string>
<string name="revanced_debug_toast_on_error_summary_off">エラーが発生した場合にトースト通知は表示されません</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"エラートースト通知をオフにすると、ReVanced のすべてのエラー通知が表示されなくなります。
予期しないイベントが発生した場合でも通知されなくなります。"</string>
<string name="revanced_debug_export_logs_to_clipboard_title">デバッグログのエクスポート</string>
<string name="revanced_debug_export_logs_to_clipboard_summary">ReVanced のデバッグログをクリップボードにコピーします</string>
<string name="revanced_debug_logs_disabled">デバッグログ無効</string>
<string name="revanced_debug_logs_disabled">デバッグログ無効になっていま</string>
<string name="revanced_debug_logs_none_found">ログが見つかりませんでした</string>
<string name="revanced_debug_logs_copied_to_clipboard">ログをコピーしました</string>
<string name="revanced_debug_logs_failed_to_export">ログのエクスポートに失敗しました: %s</string>
<string name="revanced_debug_logs_clear_buffer_title">デバッグログを消去</string>
<string name="revanced_debug_logs_clear_buffer_summary">保存されているすべての ReVanced デバッグログを消去します</string>
<string name="revanced_debug_logs_clear_buffer_summary">保存されている ReVanced のすべてのデバッグログを消去します</string>
<string name="revanced_debug_logs_clear_toast">ログを消去しました</string>
</patch>
<patch id="misc.privacy.sanitizeSharingLinksPatch">
<string name="revanced_sanitize_sharing_links_title">共有リンクを無害化</string>
<string name="revanced_sanitize_sharing_links_summary_on">トラッキング クエリ パラメータが共有リンクから削除されます</string>
<string name="revanced_sanitize_sharing_links_summary_off">トラッキング クエリ パラメータは共有リンクから削除されません</string>
<string name="revanced_sanitize_sharing_links_summary_on">共有リンクから追跡パラメータが削除されます</string>
<string name="revanced_sanitize_sharing_links_summary_off">共有リンクから追跡パラメータは削除されません</string>
<string name="revanced_replace_music_with_youtube_title">共有リンクを youtube.com に変更</string>
<string name="revanced_replace_music_with_youtube_summary_on">共有リンクには youtube.com が使用されます</string>
<string name="revanced_replace_music_with_youtube_summary_off">共有リンクには music.youtube.com が使用されます</string>
@@ -168,8 +168,8 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
<string name="revanced_settings_screen_11_misc_title">その他</string>
<string name="revanced_settings_screen_12_video_title">動画</string>
<string name="revanced_restore_old_settings_menus_title">古い設定メニューを復元</string>
<string name="revanced_restore_old_settings_menus_summary_on">旧バージョンの設定メニューが表示されます</string>
<string name="revanced_restore_old_settings_menus_summary_off">旧バージョンの設定メニュー表示されません</string>
<string name="revanced_restore_old_settings_menus_summary_on">古いスタイルの設定メニューが表示されます</string>
<string name="revanced_restore_old_settings_menus_summary_off">新しいスタイルの設定メニュー表示されま</string>
</patch>
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
<string name="revanced_shorts_disable_background_playback_title">ショートのバックグラウンド再生を無効化</string>
@@ -177,9 +177,9 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
<string name="revanced_shorts_disable_background_playback_summary_off">ショート動画のバックグラウンド再生は有効です</string>
</patch>
<patch id="misc.debugging.enableDebuggingPatch">
<string name="revanced_debug_protobuffer_title">プロトコルバッファを記録</string>
<string name="revanced_debug_protobuffer_summary_on">デバッグログに protocol buffer が含まれます</string>
<string name="revanced_debug_protobuffer_summary_off">デバッグログに protocol buffer は含まれません</string>
<string name="revanced_debug_protobuffer_title">protocol buffer をログに保存</string>
<string name="revanced_debug_protobuffer_summary_on">デバッグログに protocol buffer が含まれます</string>
<string name="revanced_debug_protobuffer_summary_off">デバッグログに protocol buffer は含まれません</string>
<string name="revanced_debug_protobuffer_user_dialog_message">"この設定を有効にすると、一部の UI コンポーネントの画面上のテキストを含む、追加のレイアウトデータがログに記録されます。
これは、カスタムフィルターを作成する際にコンポーネントを識別するのに役立ちます。
@@ -670,7 +670,7 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
<string name="revanced_hide_shop_button_summary_on">購入ボタンは表示されません</string>
<string name="revanced_hide_shop_button_summary_off">購入ボタンは表示されます</string>
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_save_button_title">保存を非表示にする</string>
<string name="revanced_hide_save_button_title">保存ボタンを非表示</string>
<string name="revanced_hide_save_button_summary_on">「保存」ボタンは表示されません</string>
<string name="revanced_hide_save_button_summary_off">「保存」ボタンは表示されます</string>
</patch>
@@ -708,16 +708,16 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
<string name="revanced_hide_navigation_button_labels_title">ボタンをアイコンのみで表示</string>
<string name="revanced_hide_navigation_button_labels_summary_on">ナビゲーション ボタンはアイコンのみで表示されます</string>
<string name="revanced_hide_navigation_button_labels_summary_off">ナビゲーション ボタンはアイコンと文字で表示されます</string>
<string name="revanced_disable_translucent_status_bar_title">ステータスバーの半透明化を無効化</string>
<string name="revanced_disable_translucent_status_bar_title">半透明ステータスバーを無効化</string>
<string name="revanced_disable_translucent_status_bar_summary_on">ステータスバーは常に透けません</string>
<string name="revanced_disable_translucent_status_bar_summary_off">ステータスバーは状況に応じて透けます</string>
<string name="revanced_disable_translucent_status_bar_user_dialog_message">一部のデバイスでは、この機能を有効にすると、システムのナビゲーション バーが半透明になりアプリ内のコンポーネントに重なってしまう可能性があります。</string>
<string name="revanced_disable_translucent_navigation_bar_light_title">ライトモード時のナビゲーション バーの半透明を無効にする</string>
<string name="revanced_disable_translucent_navigation_bar_light_summary_on">ライトモード時にナビゲーション バーは透けません</string>
<string name="revanced_disable_translucent_navigation_bar_light_summary_off">ライトモード時にナビゲーション バーが状況に応じて透けます</string>
<string name="revanced_disable_translucent_navigation_bar_dark_title">ダークモード時のナビゲーション バーの半透明を無効にする</string>
<string name="revanced_disable_translucent_navigation_bar_dark_summary_on">ダークモード時にナビゲーション バーは透けません</string>
<string name="revanced_disable_translucent_navigation_bar_dark_summary_off">ダークモード時にナビゲーション バー状況に応じて透けます</string>
<string name="revanced_disable_translucent_navigation_bar_light_title">ライトモード時の半透明バーを無効</string>
<string name="revanced_disable_translucent_navigation_bar_light_summary_on">ライトモード時にナビゲーション バーは透けません</string>
<string name="revanced_disable_translucent_navigation_bar_light_summary_off">ライトモード時にナビゲーション バーが状況に応じて透けます</string>
<string name="revanced_disable_translucent_navigation_bar_dark_title">ダークモード時の半透明バーを無効</string>
<string name="revanced_disable_translucent_navigation_bar_dark_summary_on">ダークモード時にナビゲーション バーは透けません</string>
<string name="revanced_disable_translucent_navigation_bar_dark_summary_off">ダークモード時にナビゲーション バー状況に応じて透けます</string>
</patch>
<patch id="layout.hide.player.flyoutmenupanel.hidePlayerFlyoutMenuPatch">
<string name="revanced_hide_player_flyout_title">フライアウト メニュー</string>
@@ -799,7 +799,7 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
<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>
@@ -833,18 +833,18 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
<string name="revanced_shorts_player_screen_summary">ショート プレーヤーのコンポーネントを表示または非表示にします</string>
<!-- 'Home' should be translated using the same localized wording YouTube displays for the Home tab. -->
<string name="revanced_hide_shorts_home_title">ホームフィードでショートを非表示</string>
<string name="revanced_hide_shorts_home_summary_on">ショート動画はホームフィードおよび関連動画に表示されません</string>
<string name="revanced_hide_shorts_home_summary_off">ショート動画はホームフィードおよび関連動画に表示されます</string>
<string name="revanced_hide_shorts_home_summary_on">ホームフィードおよび関連動画にはショート動画は表示されません</string>
<string name="revanced_hide_shorts_home_summary_off">ホームフィードおよび関連動画にはショート動画が表示されます</string>
<string name="revanced_hide_shorts_search_title">検索結果でショートを非表示</string>
<string name="revanced_hide_shorts_search_summary_on">ショート動画は検索結果に表示されません</string>
<string name="revanced_hide_shorts_search_summary_off">ショート動画は検索結果に表示されます</string>
<string name="revanced_hide_shorts_search_summary_on">検索結果にはショート動画は表示されません</string>
<string name="revanced_hide_shorts_search_summary_off">検索結果にはショート動画が表示されます</string>
<!-- 'Subscriptions' should be translated using the same localized wording YouTube displays for the Subscriptions tab. -->
<string name="revanced_hide_shorts_subscriptions_title">登録チャンネル フィードでショートを非表示</string>
<string name="revanced_hide_shorts_subscriptions_summary_on">ショート動画は登録チャンネル フィードに表示されません</string>
<string name="revanced_hide_shorts_subscriptions_summary_off">ショート動画は登録チャンネル フィードに表示されます</string>
<string name="revanced_hide_shorts_subscriptions_summary_on">登録チャンネル フィードにはショート動画は表示されません</string>
<string name="revanced_hide_shorts_subscriptions_summary_off">登録チャンネル フィードにはショート動画が表示されます</string>
<string name="revanced_hide_shorts_history_title">再生履歴でショートを非表示</string>
<string name="revanced_hide_shorts_history_summary_on">ショート動画は再生履歴に表示されません</string>
<string name="revanced_hide_shorts_history_summary_off">ショート動画は再生履歴に表示されます</string>
<string name="revanced_hide_shorts_history_summary_on">再生履歴にはショート動画は表示されません</string>
<string name="revanced_hide_shorts_history_summary_off">再生履歴にはショート動画が表示されます</string>
<string name="revanced_hide_shorts_super_thanks_button_title">「Super Thanks を購入する」ボタンを非表示</string>
<string name="revanced_hide_shorts_super_thanks_button_summary_on">「Super Thanks を購入する」ボタンは表示されません</string>
<string name="revanced_hide_shorts_super_thanks_button_summary_off">「Super Thanks を購入する」ボタンは表示されます</string>
@@ -1047,7 +1047,7 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
シークバー サムネイルは、再生中の動画と同じ画質になります。
この機能は、非常に高速なインターネット接続を使用して 720P 以下の画質で動画を視聴する場合に最適です。"</string>
<string name="revanced_restore_old_seekbar_thumbnails_title">古いスタイルのシークバー サムネイルを復元</string>
<string name="revanced_restore_old_seekbar_thumbnails_title">古いシークバー サムネイルを復元</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">シーク中のサムネイルはシークバーの上に表示されます</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">シーク中のサムネイルはプレーヤー画面全体に表示されます</string>
</patch>
@@ -1058,7 +1058,7 @@ YouTube Premium ユーザーの場合、この設定は必要ない可能性が
<string name="revanced_sb_enable_voting">投票ボタンを表示</string>
<string name="revanced_sb_enable_voting_sum_on">セグメントへの投票ボタンがプレーヤー オーバーレイに表示されます</string>
<string name="revanced_sb_enable_voting_sum_off">セグメントへの投票ボタンはプレーヤー オーバーレイに表示されません</string>
<string name="revanced_sb_square_layout">四角ボタンを使用</string>
<string name="revanced_sb_square_layout">ボタンとコントロールを直角化</string>
<string name="revanced_sb_square_layout_sum_on">ボタンとコントロールの角は直角です</string>
<string name="revanced_sb_square_layout_sum_off">ボタンとコントロールの角は丸角です</string>
<!-- Translations should use language similar to 'revanced_ryd_compact_layout_title'. -->
@@ -1287,7 +1287,7 @@ Automotive レイアウト
再び偽装を無効にする場合には、UI のバグを防ぐためにアプリデータを消去することをお勧めします。"</string>
<string name="revanced_spoof_app_version_target_title">アプリバージョンの偽装先</string>
<string name="revanced_spoof_app_version_target_entry_1">20.13.41 - アクション ボタンの文字表示を復元</string>
<string name="revanced_spoof_app_version_target_entry_1">20.13.41 - アクション ボタンの文字の常時表示を復元</string>
<string name="revanced_spoof_app_version_target_entry_2">20.05.46 - 文字起こし機能を復元</string>
<string name="revanced_spoof_app_version_target_entry_3">19.35.36 - 古いショート プレーヤーのアイコンを復元</string>
<string name="revanced_spoof_app_version_target_entry_4">19.01.34 - 古いナビゲーション アイコンを復元</string>
@@ -1355,7 +1355,7 @@ Automotive レイアウト
<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_disable_rounded_corners_title">丸角を無効</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>
@@ -1368,12 +1368,12 @@ Automotive レイアウト
<string name="revanced_miniplayer_disable_drag_and_drop_summary_on">ドラッグ&ドロップは無効です</string>
<string name="revanced_miniplayer_disable_drag_and_drop_summary_off">"ドラッグ&ドロップは有効です
ミニプレーヤーを画面の四隅に移動できます"</string>
ミニプレーヤーをドラッグして画面の四隅に移動できます"</string>
<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>
<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>
@@ -1415,11 +1415,11 @@ Automotive レイアウト
<string name="revanced_header_logo_entry_6">カスタム</string>
</patch>
<patch id="layout.thumbnails.bypassImageRegionRestrictionsPatch">
<string name="revanced_bypass_image_region_restrictions_title">画像表示の地域制限を回避する</string>
<string name="revanced_bypass_image_region_restrictions_title">画像表示の地域制限を回避</string>
<string name="revanced_bypass_image_region_restrictions_summary_on">yt4.ggpht.com から画像を取得します</string>
<string name="revanced_bypass_image_region_restrictions_summary_off">"オリジナルの画像ホストから画像を取得します
この機能を有効にすると、一部の地域でブロックされている画像が表示される可能性があります"</string>
この機能を有効にすると、一部の地域でブロックされている画像が表示されるようになる可能性があります"</string>
</patch>
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
<!-- 'Home' should be translated using the same localized wording YouTube displays for the Home tab. -->
@@ -1456,10 +1456,10 @@ Automotive レイアウト
<string name="revanced_alt_thumbnail_dearrow_error_generic">DeArrow は一時的に利用できません</string>
</patch>
<patch id="misc.announcements.announcementsPatch">
<string name="revanced_announcements_title">ReVanced のお知らせを表示する</string>
<string name="revanced_announcements_summary_on">お知らせは、アプリ起動時に表示されます</string>
<string name="revanced_announcements_summary_off">お知らせは、アプリ起動時に表示されません</string>
<string name="revanced_announcements_enabled_summary">アプリ起動時にお知らせを表示す</string>
<string name="revanced_announcements_title">ReVanced のお知らせを表示</string>
<string name="revanced_announcements_summary_on">アプリ起動時にお知らせが表示されます</string>
<string name="revanced_announcements_summary_off">アプリ起動時にお知らせは表示されません</string>
<string name="revanced_announcements_enabled_summary">アプリ起動時にお知らせを表示しま</string>
<string name="revanced_announcements_connection_failed">お知らせの取得に失敗しました</string>
<string name="revanced_announcements_dialog_dismiss">閉じる</string>
</patch>
@@ -1489,16 +1489,16 @@ Automotive レイアウト
<patch id="misc.hapticfeedback.disableHapticFeedbackPatch">
<string name="revanced_disable_haptic_feedback_title">触覚フィードバック</string>
<string name="revanced_disable_haptic_feedback_summary">触覚フィードバックの設定を変更します</string>
<string name="revanced_disable_haptic_feedback_chapters_title">チャプターの触覚フィードバックを無効にする</string>
<string name="revanced_disable_haptic_feedback_chapters_title">チャプターの触覚フィードバックを無効</string>
<string name="revanced_disable_haptic_feedback_chapters_summary_on">チャプターの触覚フィードバックは無効です</string>
<string name="revanced_disable_haptic_feedback_chapters_summary_off">チャプターの触覚フィードバックは有効です</string>
<string name="revanced_disable_haptic_feedback_precise_seeking_title">精密シークの触覚フィードバックを無効化</string>
<string name="revanced_disable_haptic_feedback_precise_seeking_summary_on">精密シークの触覚フィードバックは無効です</string>
<string name="revanced_disable_haptic_feedback_precise_seeking_summary_off">精密シークの触覚フィードバックは有効です</string>
<string name="revanced_disable_haptic_feedback_seek_undo_title">シーク取り消しの触覚フィードバックを無効にする</string>
<string name="revanced_disable_haptic_feedback_seek_undo_title">シーク取り消しの触覚フィードバックを無効</string>
<string name="revanced_disable_haptic_feedback_seek_undo_summary_on">シーク取り消しの触覚フィードバックは無効です</string>
<string name="revanced_disable_haptic_feedback_seek_undo_summary_off">シーク取り消しの触覚フィードバックは有効です</string>
<string name="revanced_disable_haptic_feedback_zoom_title">ズームの触覚フィードバックを無効にする</string>
<string name="revanced_disable_haptic_feedback_zoom_title">ズームの触覚フィードバックを無効</string>
<string name="revanced_disable_haptic_feedback_zoom_summary_on">ズームの触覚フィードバックは無効です</string>
<string name="revanced_disable_haptic_feedback_zoom_summary_off">ズームの触覚フィードバックは有効です</string>
</patch>
@@ -1506,8 +1506,8 @@ Automotive レイアウト
<string name="microg_offline_account_login_error">最近アカウントのログイン情報を変更した場合は、MicroG をアンインストールして再インストールしてください。</string>
</patch>
<patch id="misc.links.bypassURLRedirectsPatch">
<string name="revanced_bypass_url_redirects_title">URL リダイレクトを回避する</string>
<string name="revanced_bypass_url_redirects_summary_on">YouTube の URL リダイレクトを経由せずにリンクへ移動します</string>
<string name="revanced_bypass_url_redirects_title">URL リダイレクトを回避</string>
<string name="revanced_bypass_url_redirects_summary_on">YouTube の URL リダイレクトを経由せずにリンクへ移動します</string>
<string name="revanced_bypass_url_redirects_summary_off">YouTube の URL リダイレクトを経由してリンク先へ移動します</string>
</patch>
<patch id="misc.links.openLinksExternallyPatch">
@@ -1525,23 +1525,23 @@ Automotive レイアウト
<patch id="video.quality.rememberVideoQualityPatch">
<!-- Translations should use the same text as 'revanced_custom_playback_speeds_auto'. -->
<string name="revanced_video_quality_default_entry_1">自動</string>
<string name="revanced_remember_video_quality_last_selected_title">画質の変更を保存する</string>
<string name="revanced_remember_video_quality_last_selected_title">画質の変更を保存</string>
<string name="revanced_remember_video_quality_last_selected_summary_on">画質の変更はすべての動画に適用されます</string>
<string name="revanced_remember_video_quality_last_selected_summary_off">画質の変更は現在の動画にのみ適用されます</string>
<string name="revanced_remember_video_quality_last_selected_toast_title">画質の変更時にトーストを表示</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_on">デフォルトの画質が変更されたとき、トーストが表示されます</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_off">デフォルトの画質が変更されたとき、トーストは表示されません</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_on">デフォルトの画質が変更された場合にトースト通知が表示されます</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_off">デフォルトの画質が変更された場合にトースト通知は表示されません</string>
<string name="revanced_video_quality_default_wifi_title">デフォルトの画質Wi-Fi</string>
<string name="revanced_video_quality_default_mobile_title">デフォルトの画質(携帯回線)</string>
<string name="revanced_remember_shorts_quality_last_selected_title">ショートの画質の変更を保存する</string>
<string name="revanced_remember_shorts_quality_last_selected_title">ショートの画質の変更を保存</string>
<string name="revanced_remember_shorts_quality_last_selected_summary_on">画質の変更はすべてのショート動画に適用されます</string>
<string name="revanced_remember_shorts_quality_last_selected_summary_off">画質の変更は現在のショート動画にのみ適用されます</string>
<string name="revanced_shorts_quality_default_wifi_title">デフォルトのショートの画質Wi-Fi</string>
<string name="revanced_shorts_quality_default_mobile_title">デフォルトのショートの画質(携帯回線)</string>
<string name="revanced_remember_video_quality_mobile">携帯回線</string>
<string name="revanced_remember_video_quality_wifi">Wi-Fi</string>
<string name="revanced_remember_video_quality_toast">デフォルトの画質 (%1$s): %2$s</string>
<string name="revanced_remember_video_quality_toast_shorts">ショートの画質 (%1$s): %2$s</string>
<string name="revanced_remember_video_quality_toast">デフォルトの画質の変更 (%1$s): %2$s</string>
<string name="revanced_remember_video_quality_toast_shorts">ショートの画質の変更 (%1$s): %2$s</string>
</patch>
<patch id="video.speed.button.playbackSpeedButtonPatch">
<string name="revanced_playback_speed_dialog_button_title">再生速度設定ボタンを表示</string>
@@ -1561,25 +1561,25 @@ Automotive レイアウト
<string name="revanced_restore_old_speed_menu_summary_on">古いスタイルの再生速度メニューが表示されます</string>
<string name="revanced_restore_old_speed_menu_summary_off">新しいスタイルの再生速度メニューが表示されます</string>
<string name="revanced_custom_playback_speeds_title">カスタム再生速度リスト</string>
<string name="revanced_custom_playback_speeds_summary">カスタム再生速度を追加または変更します</string>
<string name="revanced_custom_playback_speeds_invalid">再生速度は %s 未満である必要があります</string>
<string name="revanced_custom_playback_speeds_parse_exception">カスタム再生速度が無効です</string>
<string name="revanced_custom_playback_speeds_summary">カスタム再生速度リストを編集します</string>
<string name="revanced_custom_playback_speeds_invalid">再生速度は %s 未満でなければなりません</string>
<string name="revanced_custom_playback_speeds_parse_exception">カスタム再生速度リストの値が無効です</string>
<string name="revanced_custom_playback_speeds_auto">自動</string>
<string name="revanced_speed_tap_and_hold_title">長押し倍速再生の速度</string>
<string name="revanced_speed_tap_and_hold_summary">再生速度の範囲は 0-8 で、0 および 8 は含まれません</string>
</patch>
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
<string name="revanced_remember_playback_speed_last_selected_title">再生速度の変更を保存する</string>
<string name="revanced_remember_playback_speed_last_selected_title">再生速度の変更を保存</string>
<string name="revanced_remember_playback_speed_last_selected_summary_on">再生速度の変更はすべての動画に適用されます</string>
<string name="revanced_remember_playback_speed_last_selected_summary_off">再生速度の変更は現在の動画にのみ適用されます</string>
<string name="revanced_remember_playback_speed_last_selected_toast_title">再生速度の変更時にトーストを表示</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_on">デフォルトの再生速度が変更されたときトーストが表示されます</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_off">デフォルトの再生速度が変更されたときトーストは表示されません</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_on">デフォルトの再生速度が変更されたときトースト通知が表示されます</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_off">デフォルトの再生速度が変更されたときトースト通知は表示されません</string>
<string name="revanced_playback_speed_default_title">デフォルトの再生速度</string>
<string name="revanced_remember_playback_speed_toast">デフォルトの再生速度: %s</string>
<string name="revanced_remember_playback_speed_toast">デフォルトの再生速度の変更: %s</string>
</patch>
<patch id="video.codecs.disableVideoCodecsPatch">
<string name="revanced_disable_hdr_video_title">HDR 動画を無効にする</string>
<string name="revanced_disable_hdr_video_title">HDR 動画を無効</string>
<string name="revanced_disable_hdr_video_summary_on">HDR 動画は無効です</string>
<string name="revanced_disable_hdr_video_summary_off">HDR 動画は有効です</string>
<string name="revanced_force_avc_codec_title">AVC (H.264) を強制的に使用</string>
@@ -1615,9 +1615,9 @@ Automotive レイアウト
<string name="revanced_spoof_video_streams_about_kids_videos">• ログアウト時またはシークレット モード時に、子ども向け動画が再生されない可能性がある</string>
<!-- "Force original audio" should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_about_no_force_original_audio">•「オリジナルの音声を強制的に使用」が利用できない</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">統計情報に表示する</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">統計情報に現在のクライアントが表示されます</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">統計情報に現在のクライアントは表示されません</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">統計情報にクライアントを表示</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">統計情報に現在のクライアントが表示されます</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">統計情報に現在のクライアントは表示されません</string>
<string name="revanced_spoof_video_streams_language_title">音声ストリームの言語</string>
<!-- 'Force original audio language' should use the same text as revanced_force_original_audio_title -->
<string name="revanced_spoof_video_streams_language_not_available">特定の音声言語を選択するには、「オリジナルの音声を強制的に使用」を無効にしてください</string>
@@ -1640,7 +1640,7 @@ Automotive レイアウト
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
<string name="revanced_music_play_permanent_repeat_title">常時リピートを有効化</string>
<string name="revanced_music_play_permanent_repeat_summary_on">常時リピートは有効です\n\nリピート設定が保存され常時適用されます</string>
<string name="revanced_music_play_permanent_repeat_summary_off">常時リピートは無効です\n\nリピート設定は保存されずリセットされます</string>
<string name="revanced_music_play_permanent_repeat_summary_off">常時リピートは無効です\n\nリピート設定は保存されず毎回リセットされます</string>
</patch>
<patch id="layout.castbutton.hideCastButton">
<string name="revanced_music_hide_cast_button_title">キャストボタンを非表示</string>
@@ -1714,10 +1714,10 @@ Automotive レイアウト
</patch>
<patch id="chat.antidelete.showDeletedMessagesPatch">
<string name="revanced_deleted_msg">メッセージを削除しました</string>
<string name="revanced_show_deleted_messages_title">削除されたメッセージ表示</string>
<string name="revanced_show_deleted_messages_title">削除されたメッセージ表示方法</string>
<string name="revanced_show_deleted_messages_entry_1">削除されたメッセージを表示しない</string>
<string name="revanced_show_deleted_messages_entry_2">スポイラーの後ろに削除されたメッセージを非表示にする</string>
<string name="revanced_show_deleted_messages_entry_3">クロスアウトテキストとして削除されたメッセージを表示</string>
<string name="revanced_show_deleted_messages_entry_2">削除されたメッセージをスポイラー表示で隠して表示する</string>
<string name="revanced_show_deleted_messages_entry_3">削除されたメッセージを取り消し線つきで表示する</string>
</patch>
<patch id="chat.autoclaim.autoClaimChannelPointsPatch">
<string name="revanced_auto_claim_channel_points_title">チャンネルポイントを自動的に獲得する</string>

View File

@@ -135,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>

View File

@@ -135,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>

View File

@@ -135,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>

View File

@@ -150,7 +150,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>

View File

@@ -796,7 +796,7 @@ YouTube Premium 사용자라면 이 설정은 필요하지 않을 수 있습니
<string name="revanced_hide_player_previous_next_buttons_summary_on">이전 &amp; 다음 동영상 버튼이 숨겨집니다</string>
<string name="revanced_hide_player_previous_next_buttons_summary_off">이전 &amp; 다음 동영상 버튼이 표시됩니다</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>
@@ -1067,12 +1067,12 @@ YouTube Premium 사용자라면 이 설정은 필요하지 않을 수 있습니
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_on">건너뛰기 버튼이 몇 초 후에 숨겨집니다</string>
<string name="revanced_sb_enable_auto_hide_skip_segment_button_sum_off">건너뛰기 버튼이 해당 구간이 끝날 때까지 표시됩니다</string>
<string name="revanced_sb_auto_hide_skip_button_duration">건너뛰기 버튼 표시 시간</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">건너뛰기 및 하이라이트로 건너뛰기 버튼이 자동으로 숨겨지기 전까지 표시되는 시간을 정할 수 있습니다</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">건너뛰기 및 하이라이트로 건너뛰기 버튼이 자동으로 숨겨지기 전까지 표시되는 시간을 정할 수 있습니다</string>
<string name="revanced_sb_general_skiptoast">건너뛰기 취소 메시지 표시하기</string>
<string name="revanced_sb_general_skiptoast_sum_on">구간을 자동으로 건너뛰는 경우에 팝업 메시지를 표시합니다\n\n팝업 메시지를 탭하여 건너뛰기를 취소할 수 있습니다</string>
<string name="revanced_sb_general_skiptoast_sum_off">팝업 메시지를 표시하지 않습니다</string>
<string name="revanced_sb_toast_on_skip_duration">건너뛰기 취소 메시지 표시 시간</string>
<string name="revanced_sb_toast_on_skip_duration_sum">건너뛰기 취소 팝업 메시지가 표시되는 시간을 정할 수 있습니다</string>
<string name="revanced_sb_toast_on_skip_duration_sum">건너뛰기 취소 팝업 메시지가 표시되는 시간을 정할 수 있습니다</string>
<string name="revanced_sb_duration_1s">1 초</string>
<string name="revanced_sb_duration_2s">2 초</string>
<string name="revanced_sb_duration_3s">3 초</string>
@@ -1108,7 +1108,7 @@ YouTube Premium 사용자라면 이 설정은 필요하지 않을 수 있습니
<string name="revanced_sb_general_skipcount_sum_off">건너뛴 횟수 기록을 비활성화합니다</string>
<string name="revanced_sb_general_min_duration">건너뛸 최소 구간 길이</string>
<string name="revanced_sb_general_min_duration_sum">설정한 값(초)보다 작은 구간은 건너뛰지 않으며, 재생바에도 표시되지 않습니다</string>
<string name="revanced_sb_general_min_duration_invalid">잘못된 지속 시간입니다</string>
<string name="revanced_sb_general_min_duration_invalid">잘못된 표시 시간입니다</string>
<string name="revanced_sb_general_uuid">비공개 사용자 아이디</string>
<string name="revanced_sb_general_uuid_sum">비공개 사용자 아이디는 SponsorBlock 서버에서 구간을 제출하거나 건너뛴 구간 정보를 기록하는데 사용되는 고유 아이디 입니다. 절대 다른 이에게 공개하지 마세요</string>
<string name="revanced_sb_general_uuid_invalid">비공개 사용자 아이디는 30자 이상이어야 합니다</string>

View File

@@ -135,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>

View File

@@ -135,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