mirror of
https://github.com/ReVanced/revanced-patches.git
synced 2026-01-12 22:17:41 +00:00
Compare commits
62 Commits
v5.46.0-de
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
73e43b2a49 | ||
|
|
918f04793f | ||
|
|
f1a9537f01 | ||
|
|
1f4f252c81 | ||
|
|
2b560f5fe9 | ||
|
|
f8bd1239cc | ||
|
|
c825ebda37 | ||
|
|
255c00b183 | ||
|
|
0ea3491227 | ||
|
|
5d437b08dd | ||
|
|
018d176914 | ||
|
|
9a77beea8a | ||
|
|
ded8370207 | ||
|
|
4d1104fc32 | ||
|
|
34830ba63b | ||
|
|
7a6894d809 | ||
|
|
144e6e2694 | ||
|
|
847ee189a9 | ||
|
|
dc813fe617 | ||
|
|
02831a6069 | ||
|
|
5228fd4b58 | ||
|
|
6bd7dca75b | ||
|
|
22ed7bfbb3 | ||
|
|
a7c220a4ae | ||
|
|
d8ca4ee931 | ||
|
|
a5d197b977 | ||
|
|
a0ec4c07f7 | ||
|
|
0928dcd00d | ||
|
|
bbd8932b2e | ||
|
|
300b12f948 | ||
|
|
ac583d40d0 | ||
|
|
c400188c38 | ||
|
|
0af0ee92c4 | ||
|
|
fff29544b9 | ||
|
|
9495cf49ef | ||
|
|
15675b5164 | ||
|
|
654d091e65 | ||
|
|
98371be33c | ||
|
|
2f0de15e67 | ||
|
|
df160370e2 | ||
|
|
bb745b555b | ||
|
|
8df9a46721 | ||
|
|
94ae84ad0f | ||
|
|
4febb2e2e9 | ||
|
|
b9bc7e3e58 | ||
|
|
9f3bb26cb9 | ||
|
|
d64dfc2884 | ||
|
|
a39ef1e0a4 | ||
|
|
1d8e977a43 | ||
|
|
da4cf94091 | ||
|
|
d23fa5e3b7 | ||
|
|
34d29abdfa | ||
|
|
ab808aeb77 | ||
|
|
a6b07cceb1 | ||
|
|
d291881215 | ||
|
|
7a18ebc7ab | ||
|
|
475197af45 | ||
|
|
d390b54dab | ||
|
|
4d1eaa6b14 | ||
|
|
c6364f5b49 | ||
|
|
f177eae385 | ||
|
|
2e9d6959c9 |
220
CHANGELOG.md
220
CHANGELOG.md
@@ -1,3 +1,223 @@
|
||||
# [5.47.0](https://github.com/ReVanced/revanced-patches/compare/v5.46.0...v5.47.0) (2025-12-18)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Instagram - Disable signature check:** Change patch to default excluded ([#6283](https://github.com/ReVanced/revanced-patches/issues/6283)) ([bb745b5](https://github.com/ReVanced/revanced-patches/commit/bb745b555b3808b7679c5995319aa365630fbd76))
|
||||
* **Lightroom:** Add `Disable version check` patch to fix opening the app ([#6315](https://github.com/ReVanced/revanced-patches/issues/6315)) ([018d176](https://github.com/ReVanced/revanced-patches/commit/018d176914a06a30e9007a3eb2e6b0f459078413))
|
||||
* **Reddit - Hide ads:** Update patch for new versions of Reddit ([#6342](https://github.com/ReVanced/revanced-patches/issues/6342)) ([f8bd123](https://github.com/ReVanced/revanced-patches/commit/f8bd1239cc0f0bd1c2dca39f846951bf512891e3))
|
||||
* **Spotify:** Make patches work with latest versions again ([#6359](https://github.com/ReVanced/revanced-patches/issues/6359)) ([34830ba](https://github.com/ReVanced/revanced-patches/commit/34830ba63b436146064f0f89f948d51cd0cb9146))
|
||||
* **YouTube - Hide layout components:** Fix "Hide Subscribe button" in channel page not working ([#6363](https://github.com/ReVanced/revanced-patches/issues/6363)) ([ded8370](https://github.com/ReVanced/revanced-patches/commit/ded83702077701aac8a8749d71bf7376427f37d6))
|
||||
* **YouTube - Hide player flyout menu items:** Allow hiding audio menu with 'Android No SDK' client type ([9495cf4](https://github.com/ReVanced/revanced-patches/commit/9495cf49ef8a872be64de6c971c1919b4b9a8720))
|
||||
* **YouTube - Sanitize sharing links:** Handle non hierarchical urls ([654d091](https://github.com/ReVanced/revanced-patches/commit/654d091e650cda37650b57cbf3ba6f1cdd6d47d3))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Disney+ - SkipAds:** Add other package names the patch is compatible with ([#6372](https://github.com/ReVanced/revanced-patches/issues/6372)) ([1f4f252](https://github.com/ReVanced/revanced-patches/commit/1f4f252c81e9a89267f6e37548e66027b1bc1a1a))
|
||||
* **Disney+:** Add `Skip ads` patch ([#6343](https://github.com/ReVanced/revanced-patches/issues/6343)) ([6bd7dca](https://github.com/ReVanced/revanced-patches/commit/6bd7dca75bd2ea335a596aa93a8b767d39be5f83))
|
||||
* **IdAustria - Remove device integrity check:** Update patch to work with latest version ([#6360](https://github.com/ReVanced/revanced-patches/issues/6360)) ([0ea3491](https://github.com/ReVanced/revanced-patches/commit/0ea3491227fc50c03555d43d3fec78eb82906b26))
|
||||
* **Instagram:** Add `Anonymous story viewing` patch ([#6263](https://github.com/ReVanced/revanced-patches/issues/6263)) ([94ae84a](https://github.com/ReVanced/revanced-patches/commit/94ae84ad0fc3a9197c82d5356301d464730c3b17))
|
||||
* **Instagram:** Add `Disable auto story flipping` patch ([#6262](https://github.com/ReVanced/revanced-patches/issues/6262)) ([2f0de15](https://github.com/ReVanced/revanced-patches/commit/2f0de15e67e4f99ed6ecdc136d04cceb23b0d069))
|
||||
* **Instagram:** Add `Disable Reels scrolling` patch ([#6317](https://github.com/ReVanced/revanced-patches/issues/6317)) ([0928dcd](https://github.com/ReVanced/revanced-patches/commit/0928dcd00dc2a9c1eef9a23c1e26ff5dc9ee670a))
|
||||
* **Letterboxd:** Add `Hide ads` patch ([#6309](https://github.com/ReVanced/revanced-patches/issues/6309)) ([0af0ee9](https://github.com/ReVanced/revanced-patches/commit/0af0ee92c48bb2ffc332197e05439e20c5c05d83))
|
||||
* **Peacock TV:** Add `Hide ads` patch ([#6348](https://github.com/ReVanced/revanced-patches/issues/6348)) ([847ee18](https://github.com/ReVanced/revanced-patches/commit/847ee189a971e6d4a99823998569f8e561b8319c))
|
||||
* **ProtonVPN:** Add `Remove delay` patch ([#6326](https://github.com/ReVanced/revanced-patches/issues/6326)) ([bbd8932](https://github.com/ReVanced/revanced-patches/commit/bbd8932b2e740aff96ba047332e541bff3e09436))
|
||||
* **Spoof SIM provider:** Spoof additional TelephonyManager methods ([#6293](https://github.com/ReVanced/revanced-patches/issues/6293)) ([ac583d4](https://github.com/ReVanced/revanced-patches/commit/ac583d40d0f4c0e6544e3661ff3e82a25912f2b0))
|
||||
* **YouTube - Hide layout components:** Add "Hide cell divider", "Hide featured links", and "Hide featured videos" options ([#6335](https://github.com/ReVanced/revanced-patches/issues/6335)) ([a5d197b](https://github.com/ReVanced/revanced-patches/commit/a5d197b9775b98d7a37bfdee9e5f726d5e04d8cf))
|
||||
* **YouTube - Hide layout components:** Add "Hide Join button" and "Hide Subscribe button" options for channel page ([#6345](https://github.com/ReVanced/revanced-patches/issues/6345)) ([02831a6](https://github.com/ReVanced/revanced-patches/commit/02831a6069fc30ffa3a87f8e4de653d003a2187e))
|
||||
* **YouTube - Hide Shorts components:** Add "Hide auto-dubbed label" and "Hide live preview" options ([#6334](https://github.com/ReVanced/revanced-patches/issues/6334)) ([a7c220a](https://github.com/ReVanced/revanced-patches/commit/a7c220a4aea93ea7ae7005b5760443d7571c4228))
|
||||
|
||||
# [5.47.0-dev.18](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.17...v5.47.0-dev.18) (2025-12-18)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Disney+ - SkipAds:** Add other package names the patch is compatible with ([#6372](https://github.com/ReVanced/revanced-patches/issues/6372)) ([1f4f252](https://github.com/ReVanced/revanced-patches/commit/1f4f252c81e9a89267f6e37548e66027b1bc1a1a))
|
||||
|
||||
# [5.47.0-dev.17](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.16...v5.47.0-dev.17) (2025-12-18)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Reddit - Hide ads:** Update patch for new versions of Reddit ([#6342](https://github.com/ReVanced/revanced-patches/issues/6342)) ([f8bd123](https://github.com/ReVanced/revanced-patches/commit/f8bd1239cc0f0bd1c2dca39f846951bf512891e3))
|
||||
|
||||
# [5.47.0-dev.16](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.15...v5.47.0-dev.16) (2025-12-15)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Lightroom:** Add `Disable version check` patch to fix opening the app ([#6315](https://github.com/ReVanced/revanced-patches/issues/6315)) ([018d176](https://github.com/ReVanced/revanced-patches/commit/018d176914a06a30e9007a3eb2e6b0f459078413))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **IdAustria - Remove device integrity check:** Update patch to work with latest version ([#6360](https://github.com/ReVanced/revanced-patches/issues/6360)) ([0ea3491](https://github.com/ReVanced/revanced-patches/commit/0ea3491227fc50c03555d43d3fec78eb82906b26))
|
||||
|
||||
# [5.47.0-dev.15](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.14...v5.47.0-dev.15) (2025-12-13)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Hide layout components:** Fix "Hide Subscribe button" in channel page not working ([#6363](https://github.com/ReVanced/revanced-patches/issues/6363)) ([ded8370](https://github.com/ReVanced/revanced-patches/commit/ded83702077701aac8a8749d71bf7376427f37d6))
|
||||
|
||||
# [5.47.0-dev.14](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.13...v5.47.0-dev.14) (2025-12-13)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Spotify:** Make patches work with latest versions again ([#6359](https://github.com/ReVanced/revanced-patches/issues/6359)) ([34830ba](https://github.com/ReVanced/revanced-patches/commit/34830ba63b436146064f0f89f948d51cd0cb9146))
|
||||
|
||||
# [5.47.0-dev.13](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.12...v5.47.0-dev.13) (2025-12-10)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Peacock TV:** Add `Hide ads` patch ([#6348](https://github.com/ReVanced/revanced-patches/issues/6348)) ([847ee18](https://github.com/ReVanced/revanced-patches/commit/847ee189a971e6d4a99823998569f8e561b8319c))
|
||||
|
||||
# [5.47.0-dev.12](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.11...v5.47.0-dev.12) (2025-12-08)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Hide layout components:** Add "Hide Join button" and "Hide Subscribe button" options for channel page ([#6345](https://github.com/ReVanced/revanced-patches/issues/6345)) ([02831a6](https://github.com/ReVanced/revanced-patches/commit/02831a6069fc30ffa3a87f8e4de653d003a2187e))
|
||||
|
||||
# [5.47.0-dev.11](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.10...v5.47.0-dev.11) (2025-12-08)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Disney+:** Add `Skip ads` patch ([#6343](https://github.com/ReVanced/revanced-patches/issues/6343)) ([6bd7dca](https://github.com/ReVanced/revanced-patches/commit/6bd7dca75bd2ea335a596aa93a8b767d39be5f83))
|
||||
|
||||
# [5.47.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.9...v5.47.0-dev.10) (2025-12-08)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Hide Shorts components:** Add "Hide auto-dubbed label" and "Hide live preview" options ([#6334](https://github.com/ReVanced/revanced-patches/issues/6334)) ([a7c220a](https://github.com/ReVanced/revanced-patches/commit/a7c220a4aea93ea7ae7005b5760443d7571c4228))
|
||||
|
||||
# [5.47.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.8...v5.47.0-dev.9) (2025-12-08)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Hide layout components:** Add "Hide cell divider", "Hide featured links", and "Hide featured videos" options ([#6335](https://github.com/ReVanced/revanced-patches/issues/6335)) ([a5d197b](https://github.com/ReVanced/revanced-patches/commit/a5d197b9775b98d7a37bfdee9e5f726d5e04d8cf))
|
||||
|
||||
# [5.47.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.7...v5.47.0-dev.8) (2025-12-08)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Instagram:** Add `Disable Reels scrolling` patch ([#6317](https://github.com/ReVanced/revanced-patches/issues/6317)) ([0928dcd](https://github.com/ReVanced/revanced-patches/commit/0928dcd00dc2a9c1eef9a23c1e26ff5dc9ee670a))
|
||||
* **ProtonVPN:** Add `Remove delay` patch ([#6326](https://github.com/ReVanced/revanced-patches/issues/6326)) ([bbd8932](https://github.com/ReVanced/revanced-patches/commit/bbd8932b2e740aff96ba047332e541bff3e09436))
|
||||
|
||||
# [5.47.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.6...v5.47.0-dev.7) (2025-12-03)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Spoof SIM provider:** Spoof additional TelephonyManager methods ([#6293](https://github.com/ReVanced/revanced-patches/issues/6293)) ([ac583d4](https://github.com/ReVanced/revanced-patches/commit/ac583d40d0f4c0e6544e3661ff3e82a25912f2b0))
|
||||
|
||||
# [5.47.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.5...v5.47.0-dev.6) (2025-11-24)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Letterboxd:** Add `Hide ads` patch ([#6309](https://github.com/ReVanced/revanced-patches/issues/6309)) ([0af0ee9](https://github.com/ReVanced/revanced-patches/commit/0af0ee92c48bb2ffc332197e05439e20c5c05d83))
|
||||
|
||||
# [5.47.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.4...v5.47.0-dev.5) (2025-11-13)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Hide player flyout menu items:** Allow hiding audio menu with 'Android No SDK' client type ([9495cf4](https://github.com/ReVanced/revanced-patches/commit/9495cf49ef8a872be64de6c971c1919b4b9a8720))
|
||||
|
||||
# [5.47.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.3...v5.47.0-dev.4) (2025-11-12)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Sanitize sharing links:** Handle non hierarchical urls ([654d091](https://github.com/ReVanced/revanced-patches/commit/654d091e650cda37650b57cbf3ba6f1cdd6d47d3))
|
||||
|
||||
# [5.47.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.2...v5.47.0-dev.3) (2025-11-12)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Instagram:** Add `Disable auto story flipping` patch ([#6262](https://github.com/ReVanced/revanced-patches/issues/6262)) ([2f0de15](https://github.com/ReVanced/revanced-patches/commit/2f0de15e67e4f99ed6ecdc136d04cceb23b0d069))
|
||||
|
||||
# [5.47.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.1...v5.47.0-dev.2) (2025-11-12)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Instagram - Disable signature check:** Change patch to default excluded ([#6283](https://github.com/ReVanced/revanced-patches/issues/6283)) ([bb745b5](https://github.com/ReVanced/revanced-patches/commit/bb745b555b3808b7679c5995319aa365630fbd76))
|
||||
|
||||
# [5.47.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.46.0...v5.47.0-dev.1) (2025-11-12)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Instagram:** Add `Anonymous story viewing` patch ([#6263](https://github.com/ReVanced/revanced-patches/issues/6263)) ([94ae84a](https://github.com/ReVanced/revanced-patches/commit/94ae84ad0fc3a9197c82d5356301d464730c3b17))
|
||||
|
||||
# [5.46.0](https://github.com/ReVanced/revanced-patches/compare/v5.45.0...v5.46.0) (2025-11-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Duolingo - Disable ads:** Constrain patch to last working app target ([f238ae9](https://github.com/ReVanced/revanced-patches/commit/f238ae9895000f01d1dccb800cc8efde0d5362bd))
|
||||
* **Instagram - Hide navigation buttons:** Constrain patch to last working app target ([e030e9c](https://github.com/ReVanced/revanced-patches/commit/e030e9c07a7748e117ac44f6776a9f6317b20623))
|
||||
* **Spotify - Hide Create button:** Remove obsolete patch that is no longer needed ([#6252](https://github.com/ReVanced/revanced-patches/issues/6252)) ([59d85b2](https://github.com/ReVanced/revanced-patches/commit/59d85b28a7fcb285ff5f2bb6ae654020d76b2019))
|
||||
* **YouTube - Check watch history domain name resolution:** Fix false positive warning message if the internet connection fails halfway into the DNS check ([5726353](https://github.com/ReVanced/revanced-patches/commit/57263538c79f5a561c449229ac8e068c641285d3))
|
||||
* **YouTube - Hide layout components:** Fix "Hide Hype points" ([#6247](https://github.com/ReVanced/revanced-patches/issues/6247)) ([5821440](https://github.com/ReVanced/revanced-patches/commit/582144026d28e57bb7adcbba39244f3c7cdbc0f3))
|
||||
* **YouTube - Settings:** Add additional languages to ReVanced language preference ([d390b54](https://github.com/ReVanced/revanced-patches/commit/d390b54dab92d75b4e0d3e38344eae489dd69d98))
|
||||
* **YouTube - Settings:** Resolve settings search crash when searching for specific words ([#6231](https://github.com/ReVanced/revanced-patches/issues/6231)) ([76dcfae](https://github.com/ReVanced/revanced-patches/commit/76dcfaefd8679e45a70f265b0239436e60c055cf))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Debugging:** Add setting to block experimental client flags ([#6196](https://github.com/ReVanced/revanced-patches/issues/6196)) ([2e9d695](https://github.com/ReVanced/revanced-patches/commit/2e9d6959c94df7588b9e34b18770e9f437e91926))
|
||||
* **YouTube - Hide layout components:** Add "Hide Hype points" ([#6230](https://github.com/ReVanced/revanced-patches/issues/6230)) ([a52c015](https://github.com/ReVanced/revanced-patches/commit/a52c0153b12c3f6f0ad260e03d2e9850c0466392))
|
||||
* **YouTube - Hide layout components:** Add video description "Hide Featured content" and "Hide Subscribe button" ([#6253](https://github.com/ReVanced/revanced-patches/issues/6253)) ([da4cf94](https://github.com/ReVanced/revanced-patches/commit/da4cf940911a4406e2c9dd558b60305385a80c61))
|
||||
* **YouTube - Hide player flyout menu items:** Add "Hide Listen with YouTube Music" ([#6232](https://github.com/ReVanced/revanced-patches/issues/6232)) ([858edbf](https://github.com/ReVanced/revanced-patches/commit/858edbf3e7f394fcc766d767c8dc54cf5ba24370))
|
||||
* **YouTube Music:** Add `Change miniplayer color` patch ([#6259](https://github.com/ReVanced/revanced-patches/issues/6259)) ([ab808ae](https://github.com/ReVanced/revanced-patches/commit/ab808aeb773592cb26c848d8456478a346ec3bad))
|
||||
* **YouTube Music:** Add `Hide buttons` patch ([#6255](https://github.com/ReVanced/revanced-patches/issues/6255)) ([7a18ebc](https://github.com/ReVanced/revanced-patches/commit/7a18ebc7ab74ba30c5d5284a4856c55cdfc31097))
|
||||
|
||||
# [5.46.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.46.0-dev.9...v5.46.0-dev.10) (2025-11-09)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Hide layout components:** Add video description "Hide Featured content" and "Hide Subscribe button" ([#6253](https://github.com/ReVanced/revanced-patches/issues/6253)) ([da4cf94](https://github.com/ReVanced/revanced-patches/commit/da4cf940911a4406e2c9dd558b60305385a80c61))
|
||||
|
||||
# [5.46.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v5.46.0-dev.8...v5.46.0-dev.9) (2025-11-09)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube Music:** Add `Change miniplayer color` patch ([#6259](https://github.com/ReVanced/revanced-patches/issues/6259)) ([ab808ae](https://github.com/ReVanced/revanced-patches/commit/ab808aeb773592cb26c848d8456478a346ec3bad))
|
||||
|
||||
# [5.46.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.46.0-dev.7...v5.46.0-dev.8) (2025-11-09)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube Music:** Add `Hide buttons` patch ([#6255](https://github.com/ReVanced/revanced-patches/issues/6255)) ([7a18ebc](https://github.com/ReVanced/revanced-patches/commit/7a18ebc7ab74ba30c5d5284a4856c55cdfc31097))
|
||||
|
||||
# [5.46.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.46.0-dev.6...v5.46.0-dev.7) (2025-11-08)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Settings:** Add additional languages to ReVanced language preference ([d390b54](https://github.com/ReVanced/revanced-patches/commit/d390b54dab92d75b4e0d3e38344eae489dd69d98))
|
||||
|
||||
# [5.46.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.46.0-dev.5...v5.46.0-dev.6) (2025-11-08)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **YouTube - Debugging:** Add setting to block experimental client flags ([#6196](https://github.com/ReVanced/revanced-patches/issues/6196)) ([2e9d695](https://github.com/ReVanced/revanced-patches/commit/2e9d6959c94df7588b9e34b18770e9f437e91926))
|
||||
|
||||
# [5.46.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.46.0-dev.4...v5.46.0-dev.5) (2025-11-07)
|
||||
|
||||
|
||||
|
||||
@@ -97,9 +97,9 @@ Thank you for considering contributing to ReVanced Patches. You can find the con
|
||||
|
||||
To build ReVanced Patches, you can follow the [ReVanced documentation](https://github.com/ReVanced/revanced-documentation).
|
||||
|
||||
## 📜 Licence
|
||||
## 📜 License
|
||||
|
||||
ReVanced Patches is licensed under the GPLv3 license. Please see the [license file](LICENSE) for more information.
|
||||
[tl;dr](https://www.tldrlegal.com/license/gnu-general-public-license-v3-gpl-3) you may copy, distribute and modify ReVanced Patches as long as you track changes/dates in source files.
|
||||
Any modifications to ReVanced Patches must also be made available under the GPL,
|
||||
along with build & install instructions.
|
||||
along with build & install instructions.
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package app.revanced.extension.music.patches;
|
||||
|
||||
import app.revanced.extension.music.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class ChangeMiniplayerColorPatch {
|
||||
|
||||
/**
|
||||
* Injection point
|
||||
*/
|
||||
public static boolean changeMiniplayerColor() {
|
||||
return Settings.CHANGE_MINIPLAYER_COLOR.get();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package app.revanced.extension.music.patches;
|
||||
|
||||
import static app.revanced.extension.shared.Utils.hideViewBy0dpUnderCondition;
|
||||
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import app.revanced.extension.music.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class HideButtonsPatch {
|
||||
|
||||
/**
|
||||
* Injection point
|
||||
*/
|
||||
public static int hideCastButton(int original) {
|
||||
return Settings.HIDE_CAST_BUTTON.get() ? View.GONE : original;
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point
|
||||
*/
|
||||
public static void hideCastButton(View view) {
|
||||
hideViewBy0dpUnderCondition(Settings.HIDE_CAST_BUTTON, view);
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point
|
||||
*/
|
||||
public static boolean hideHistoryButton(boolean original) {
|
||||
return original && !Settings.HIDE_HISTORY_BUTTON.get();
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point
|
||||
*/
|
||||
public static void hideNotificationButton(View view) {
|
||||
if (view.getParent() instanceof ViewGroup viewGroup) {
|
||||
hideViewBy0dpUnderCondition(Settings.HIDE_NOTIFICATION_BUTTON, viewGroup);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point
|
||||
*/
|
||||
public static void hideSearchButton(View view) {
|
||||
hideViewBy0dpUnderCondition(Settings.HIDE_SEARCH_BUTTON, view);
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
package app.revanced.extension.music.patches;
|
||||
|
||||
import static app.revanced.extension.shared.Utils.hideViewBy0dpUnderCondition;
|
||||
|
||||
import android.view.View;
|
||||
import app.revanced.extension.music.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class HideCastButtonPatch {
|
||||
|
||||
/**
|
||||
* Injection point
|
||||
*/
|
||||
public static int hideCastButton(int original) {
|
||||
return Settings.HIDE_CAST_BUTTON.get() ? View.GONE : original;
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point
|
||||
*/
|
||||
public static void hideCastButton(View view) {
|
||||
hideViewBy0dpUnderCondition(Settings.HIDE_CAST_BUTTON, view);
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package app.revanced.extension.music.patches;
|
||||
import static app.revanced.extension.shared.Utils.hideViewBy0dpUnderCondition;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
import app.revanced.extension.music.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
|
||||
@@ -16,8 +16,11 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting HIDE_GET_PREMIUM_LABEL = new BooleanSetting("revanced_music_hide_get_premium_label", TRUE, true);
|
||||
|
||||
// General
|
||||
public static final BooleanSetting HIDE_CAST_BUTTON = new BooleanSetting("revanced_music_hide_cast_button", TRUE, false);
|
||||
public static final BooleanSetting HIDE_CAST_BUTTON = new BooleanSetting("revanced_music_hide_cast_button", TRUE, true);
|
||||
public static final BooleanSetting HIDE_CATEGORY_BAR = new BooleanSetting("revanced_music_hide_category_bar", FALSE, true);
|
||||
public static final BooleanSetting HIDE_HISTORY_BUTTON = new BooleanSetting("revanced_music_hide_history_button", FALSE, true);
|
||||
public static final BooleanSetting HIDE_SEARCH_BUTTON = new BooleanSetting("revanced_music_hide_search_button", FALSE, true);
|
||||
public static final BooleanSetting HIDE_NOTIFICATION_BUTTON = new BooleanSetting("revanced_music_hide_notification_button", FALSE, true);
|
||||
public static final BooleanSetting HIDE_NAVIGATION_BAR_HOME_BUTTON = new BooleanSetting("revanced_music_hide_navigation_bar_home_button", FALSE, true);
|
||||
public static final BooleanSetting HIDE_NAVIGATION_BAR_SAMPLES_BUTTON = new BooleanSetting("revanced_music_hide_navigation_bar_samples_button", FALSE, true);
|
||||
public static final BooleanSetting HIDE_NAVIGATION_BAR_EXPLORE_BUTTON = new BooleanSetting("revanced_music_hide_navigation_bar_explore_button", FALSE, true);
|
||||
@@ -27,6 +30,7 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting HIDE_NAVIGATION_BAR_LABEL = new BooleanSetting("revanced_music_hide_navigation_bar_labels", FALSE, true);
|
||||
|
||||
// Player
|
||||
public static final BooleanSetting CHANGE_MINIPLAYER_COLOR = new BooleanSetting("revanced_music_change_miniplayer_color", FALSE, true);
|
||||
public static final BooleanSetting PERMANENT_REPEAT = new BooleanSetting("revanced_music_play_permanent_repeat", FALSE, true);
|
||||
|
||||
// Miscellaneous
|
||||
|
||||
@@ -16,6 +16,7 @@ import java.util.Arrays;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.ui.Dim;
|
||||
|
||||
import com.amazon.video.sdk.player.Player;
|
||||
|
||||
@@ -64,9 +65,8 @@ public class PlaybackSpeedPatch {
|
||||
SpeedIconDrawable speedIcon = new SpeedIconDrawable();
|
||||
speedButton.setImageDrawable(speedIcon);
|
||||
|
||||
int buttonSize = Utils.dipToPixels(48);
|
||||
speedButton.setMinimumWidth(buttonSize);
|
||||
speedButton.setMinimumHeight(buttonSize);
|
||||
speedButton.setMinimumWidth(Dim.dp48);
|
||||
speedButton.setMinimumHeight(Dim.dp48);
|
||||
|
||||
return speedButton;
|
||||
}
|
||||
@@ -197,11 +197,11 @@ class SpeedIconDrawable extends Drawable {
|
||||
|
||||
@Override
|
||||
public int getIntrinsicWidth() {
|
||||
return Utils.dipToPixels(32);
|
||||
return Dim.dp32;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIntrinsicHeight() {
|
||||
return Utils.dipToPixels(32);
|
||||
return Dim.dp32;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,9 +23,7 @@ import android.os.Looper;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceGroup;
|
||||
import android.preference.PreferenceScreen;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Pair;
|
||||
import android.util.TypedValue;
|
||||
import android.view.Gravity;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@@ -34,11 +32,7 @@ import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.view.animation.Animation;
|
||||
import android.view.animation.AnimationUtils;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.Toast;
|
||||
import android.widget.Toolbar;
|
||||
|
||||
import androidx.annotation.ColorInt;
|
||||
import androidx.annotation.NonNull;
|
||||
@@ -63,6 +57,7 @@ import app.revanced.extension.shared.settings.AppLanguage;
|
||||
import app.revanced.extension.shared.settings.BaseSettings;
|
||||
import app.revanced.extension.shared.settings.BooleanSetting;
|
||||
import app.revanced.extension.shared.settings.preference.ReVancedAboutPreference;
|
||||
import app.revanced.extension.shared.ui.Dim;
|
||||
|
||||
@SuppressWarnings("NewApi")
|
||||
public class Utils {
|
||||
@@ -760,31 +755,25 @@ public class Utils {
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide a view by setting its layout params to 0x0
|
||||
* @param view The view to hide.
|
||||
* Hides a view by setting its layout width and height to 0dp.
|
||||
* Handles null layout params safely.
|
||||
*
|
||||
* @param view The view to hide. If null, does nothing.
|
||||
*/
|
||||
public static void hideViewByLayoutParams(View view) {
|
||||
if (view instanceof LinearLayout) {
|
||||
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(0, 0);
|
||||
view.setLayoutParams(layoutParams);
|
||||
} else if (view instanceof FrameLayout) {
|
||||
FrameLayout.LayoutParams layoutParams2 = new FrameLayout.LayoutParams(0, 0);
|
||||
view.setLayoutParams(layoutParams2);
|
||||
} else if (view instanceof RelativeLayout) {
|
||||
RelativeLayout.LayoutParams layoutParams3 = new RelativeLayout.LayoutParams(0, 0);
|
||||
view.setLayoutParams(layoutParams3);
|
||||
} else if (view instanceof Toolbar) {
|
||||
Toolbar.LayoutParams layoutParams4 = new Toolbar.LayoutParams(0, 0);
|
||||
view.setLayoutParams(layoutParams4);
|
||||
} else if (view instanceof ViewGroup) {
|
||||
ViewGroup.LayoutParams layoutParams5 = new ViewGroup.LayoutParams(0, 0);
|
||||
view.setLayoutParams(layoutParams5);
|
||||
public static void hideViewByLayoutParams(@Nullable View view) {
|
||||
if (view == null) return;
|
||||
|
||||
ViewGroup.LayoutParams params = view.getLayoutParams();
|
||||
|
||||
if (params == null) {
|
||||
// Create generic 0x0 layout params accepted by all ViewGroups.
|
||||
params = new ViewGroup.LayoutParams(0, 0);
|
||||
} else {
|
||||
ViewGroup.LayoutParams params = view.getLayoutParams();
|
||||
params.width = 0;
|
||||
params.height = 0;
|
||||
view.setLayoutParams(params);
|
||||
}
|
||||
|
||||
view.setLayoutParams(params);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -801,13 +790,10 @@ public class Utils {
|
||||
public static void setDialogWindowParameters(Window window, int gravity, int yOffsetDip, int widthPercentage, boolean dimAmount) {
|
||||
WindowManager.LayoutParams params = window.getAttributes();
|
||||
|
||||
DisplayMetrics displayMetrics = Resources.getSystem().getDisplayMetrics();
|
||||
int portraitWidth = Math.min(displayMetrics.widthPixels, displayMetrics.heightPixels);
|
||||
|
||||
params.width = (int) (portraitWidth * (widthPercentage / 100.0f)); // Set width based on parameters.
|
||||
params.width = Dim.pctPortraitWidth(widthPercentage);
|
||||
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
|
||||
params.gravity = gravity;
|
||||
params.y = yOffsetDip > 0 ? dipToPixels(yOffsetDip) : 0;
|
||||
params.y = yOffsetDip > 0 ? Dim.dp(yOffsetDip) : 0;
|
||||
if (dimAmount) {
|
||||
params.dimAmount = 0f;
|
||||
}
|
||||
@@ -816,18 +802,6 @@ public class Utils {
|
||||
window.setBackgroundDrawable(null); // Remove default dialog background
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an array of corner radii for a rounded rectangle shape.
|
||||
*
|
||||
* @param dp Radius in density-independent pixels (dip) to apply to all corners.
|
||||
* @return An array of eight float values representing the corner radii
|
||||
* (top-left, top-right, bottom-right, bottom-left).
|
||||
*/
|
||||
public static float[] createCornerRadii(float dp) {
|
||||
final float radius = dipToPixels(dp);
|
||||
return new float[]{radius, radius, radius, radius, radius, radius, radius, radius};
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the theme light color used by the app.
|
||||
*/
|
||||
@@ -1132,42 +1106,6 @@ public class Utils {
|
||||
return getResourceColor(colorString);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts dip value to actual device pixels.
|
||||
*
|
||||
* @param dip The density-independent pixels value.
|
||||
* @return The device pixel value.
|
||||
*/
|
||||
public static int dipToPixels(float dip) {
|
||||
return (int) TypedValue.applyDimension(
|
||||
TypedValue.COMPLEX_UNIT_DIP,
|
||||
dip,
|
||||
Resources.getSystem().getDisplayMetrics()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a percentage of the screen height to actual device pixels.
|
||||
*
|
||||
* @param percentage The percentage of the screen height (e.g., 30 for 30%).
|
||||
* @return The device pixel value corresponding to the percentage of screen height.
|
||||
*/
|
||||
public static int percentageHeightToPixels(int percentage) {
|
||||
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
|
||||
return (int) (metrics.heightPixels * (percentage / 100.0f));
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a percentage of the screen width to actual device pixels.
|
||||
*
|
||||
* @param percentage The percentage of the screen width (e.g., 30 for 30%).
|
||||
* @return The device pixel value corresponding to the percentage of screen width.
|
||||
*/
|
||||
public static int percentageWidthToPixels(int percentage) {
|
||||
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
|
||||
return (int) (metrics.widthPixels * (percentage / 100.0f));
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses {@link #adjustColorBrightness(int, float)} depending if light or dark mode is active.
|
||||
*/
|
||||
|
||||
@@ -5,6 +5,7 @@ import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.Color;
|
||||
import android.view.View;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -71,6 +72,17 @@ public class CustomBrandingPatch {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static View getLottieViewOrNull(View lottieStartupView) {
|
||||
if (BaseSettings.CUSTOM_BRANDING_ICON.get() == BrandingTheme.ORIGINAL) {
|
||||
return lottieStartupView;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package app.revanced.extension.shared.patches;
|
||||
|
||||
import static java.lang.Boolean.TRUE;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
|
||||
@@ -21,12 +25,28 @@ public final class EnableDebuggingPatch {
|
||||
? new ConcurrentHashMap<>(800, 0.5f, 1)
|
||||
: null;
|
||||
|
||||
private static final Set<Long> DISABLED_FEATURE_FLAGS = parseFlags(BaseSettings.DISABLED_FEATURE_FLAGS.get());
|
||||
|
||||
// Log all disabled flags on app startup.
|
||||
static {
|
||||
if (LOG_FEATURE_FLAGS && !DISABLED_FEATURE_FLAGS.isEmpty()) {
|
||||
StringBuilder sb = new StringBuilder("Disabled feature flags:\n");
|
||||
for (Long flag : DISABLED_FEATURE_FLAGS) {
|
||||
sb.append(" ").append(flag).append('\n');
|
||||
}
|
||||
Logger.printDebug(sb::toString);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean isBooleanFeatureFlagEnabled(boolean value, Long flag) {
|
||||
if (LOG_FEATURE_FLAGS && value) {
|
||||
if (featureFlags.putIfAbsent(flag, true) == null) {
|
||||
if (DISABLED_FEATURE_FLAGS.contains(flag)) {
|
||||
return false;
|
||||
}
|
||||
if (featureFlags.putIfAbsent(flag, TRUE) == null) {
|
||||
Logger.printDebug(() -> "boolean feature is enabled: " + flag);
|
||||
}
|
||||
}
|
||||
@@ -70,10 +90,44 @@ public final class EnableDebuggingPatch {
|
||||
if (LOG_FEATURE_FLAGS && !defaultValue.equals(value)) {
|
||||
if (featureFlags.putIfAbsent(flag, true) == null) {
|
||||
Logger.printDebug(() -> " string feature is enabled: " + flag
|
||||
+ " value: " + value + (defaultValue.isEmpty() ? "" : " default: " + defaultValue));
|
||||
+ " value: " + value + (defaultValue.isEmpty() ? "" : " default: " + defaultValue));
|
||||
}
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all logged feature flags.
|
||||
* @return Set of all known flags
|
||||
*/
|
||||
public static Set<Long> getAllLoggedFlags() {
|
||||
if (featureFlags != null) {
|
||||
return new HashSet<>(featureFlags.keySet());
|
||||
}
|
||||
|
||||
return new HashSet<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Public method for parsing flags.
|
||||
* @param flags String containing newline-separated flag IDs
|
||||
* @return Set of parsed flag IDs
|
||||
*/
|
||||
public static Set<Long> parseFlags(String flags) {
|
||||
Set<Long> parsedFlags = new HashSet<>();
|
||||
if (!flags.isBlank()) {
|
||||
for (String flag : flags.split("\n")) {
|
||||
String trimmedFlag = flag.trim();
|
||||
if (trimmedFlag.isEmpty()) continue; // Skip empty lines.
|
||||
try {
|
||||
parsedFlags.add(Long.parseLong(trimmedFlag));
|
||||
} catch (NumberFormatException e) {
|
||||
Logger.printException(() -> "Invalid flag ID: " + flag);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return parsedFlags;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,6 +35,15 @@ public class LinkSanitizer {
|
||||
|
||||
public Uri sanitizeUri(Uri uri) {
|
||||
try {
|
||||
String scheme = uri.getScheme();
|
||||
if (scheme == null || !(scheme.equals("http") || scheme.equals("https"))) {
|
||||
// Opening YouTube share sheet 'other' option passes the video title as a URI.
|
||||
// Checking !uri.isHierarchical() works for all cases, except if the
|
||||
// video title starts with / and then it's hierarchical but still an invalid URI.
|
||||
Logger.printDebug(() -> "Ignoring uri: " + uri);
|
||||
return uri;
|
||||
}
|
||||
|
||||
Uri.Builder builder = uri.buildUpon().clearQuery();
|
||||
|
||||
if (!parametersToRemove.isEmpty()) {
|
||||
|
||||
@@ -7,7 +7,6 @@ import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.preference.PreferenceFragment;
|
||||
import android.util.TypedValue;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
@@ -16,6 +15,7 @@ import android.widget.Toolbar;
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.settings.preference.ToolbarPreferenceFragment;
|
||||
import app.revanced.extension.shared.ui.Dim;
|
||||
|
||||
/**
|
||||
* Base class for hooking activities to inject a custom PreferenceFragment with a toolbar.
|
||||
@@ -109,13 +109,12 @@ public abstract class BaseActivityHook extends Activity {
|
||||
toolbar.setNavigationOnClickListener(getNavigationClickListener(activity));
|
||||
toolbar.setTitle(STRING_REVANCED_SETTINGS_TITLE);
|
||||
|
||||
final int margin = Utils.dipToPixels(16);
|
||||
toolbar.setTitleMarginStart(margin);
|
||||
toolbar.setTitleMarginEnd(margin);
|
||||
toolbar.setTitleMarginStart(Dim.dp16);
|
||||
toolbar.setTitleMarginEnd(Dim.dp16);
|
||||
TextView toolbarTextView = Utils.getChildView(toolbar, false, view -> view instanceof TextView);
|
||||
if (toolbarTextView != null) {
|
||||
toolbarTextView.setTextColor(Utils.getAppForegroundColor());
|
||||
toolbarTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
|
||||
toolbarTextView.setTextSize(20);
|
||||
}
|
||||
setToolbarLayoutParams(toolbar);
|
||||
|
||||
|
||||
@@ -42,4 +42,6 @@ public class BaseSettings {
|
||||
|
||||
public static final EnumSetting<BrandingTheme> CUSTOM_BRANDING_ICON = new EnumSetting<>("revanced_custom_branding_icon", BrandingTheme.ORIGINAL, true);
|
||||
public static final IntegerSetting CUSTOM_BRANDING_NAME = new IntegerSetting("revanced_custom_branding_name", 1, true);
|
||||
|
||||
public static final StringSetting DISABLED_FEATURE_FLAGS = new StringSetting("revanced_disabled_feature_flags", "", true, parent(DEBUG));
|
||||
}
|
||||
|
||||
@@ -58,6 +58,23 @@ public abstract class Setting<T> {
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Availability based on a single parent setting being disabled.
|
||||
*/
|
||||
public static Availability parentNot(BooleanSetting parent) {
|
||||
return new Availability() {
|
||||
@Override
|
||||
public boolean isAvailable() {
|
||||
return !parent.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Setting<?>> getParentSettings() {
|
||||
return Collections.singletonList(parent);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Availability based on all parents being enabled.
|
||||
*/
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package app.revanced.extension.shared.settings.preference;
|
||||
|
||||
import static app.revanced.extension.shared.StringRef.str;
|
||||
import static app.revanced.extension.shared.Utils.dipToPixels;
|
||||
import static app.revanced.extension.shared.Utils.getResourceIdentifierOrThrow;
|
||||
|
||||
import android.app.Dialog;
|
||||
@@ -37,6 +36,7 @@ import app.revanced.extension.shared.settings.Setting;
|
||||
import app.revanced.extension.shared.settings.StringSetting;
|
||||
import app.revanced.extension.shared.ui.ColorDot;
|
||||
import app.revanced.extension.shared.ui.CustomDialog;
|
||||
import app.revanced.extension.shared.ui.Dim;
|
||||
|
||||
/**
|
||||
* A custom preference for selecting a color via a hexadecimal code or a color picker dialog.
|
||||
@@ -310,11 +310,8 @@ public class ColorPickerPreference extends EditTextPreference {
|
||||
inputLayout.setGravity(Gravity.CENTER_VERTICAL);
|
||||
|
||||
dialogColorDot = new View(context);
|
||||
LinearLayout.LayoutParams previewParams = new LinearLayout.LayoutParams(
|
||||
dipToPixels(20),
|
||||
dipToPixels(20)
|
||||
);
|
||||
previewParams.setMargins(dipToPixels(16), 0, dipToPixels(10), 0);
|
||||
LinearLayout.LayoutParams previewParams = new LinearLayout.LayoutParams(Dim.dp20,Dim.dp20);
|
||||
previewParams.setMargins(Dim.dp16, 0, Dim.dp10, 0);
|
||||
dialogColorDot.setLayoutParams(previewParams);
|
||||
inputLayout.addView(dialogColorDot);
|
||||
updateDialogColorDot();
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package app.revanced.extension.shared.settings.preference;
|
||||
|
||||
import static app.revanced.extension.shared.Utils.dipToPixels;
|
||||
import static app.revanced.extension.shared.settings.preference.ColorPickerPreference.getColorString;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
@@ -21,6 +20,7 @@ import androidx.annotation.ColorInt;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.ui.Dim;
|
||||
|
||||
/**
|
||||
* A custom color picker view that allows the user to select a color using a hue slider, a saturation-value selector
|
||||
@@ -54,28 +54,28 @@ public class ColorPickerView extends View {
|
||||
}
|
||||
|
||||
/** Expanded touch area for the hue and opacity bars to increase the touch-sensitive area. */
|
||||
public static final float TOUCH_EXPANSION = dipToPixels(20f);
|
||||
public static final float TOUCH_EXPANSION = Dim.dp20;
|
||||
|
||||
/** Margin between different areas of the view (saturation-value selector, hue bar, and opacity slider). */
|
||||
private static final float MARGIN_BETWEEN_AREAS = dipToPixels(24);
|
||||
private static final float MARGIN_BETWEEN_AREAS = Dim.dp24;
|
||||
|
||||
/** Padding around the view. */
|
||||
private static final float VIEW_PADDING = dipToPixels(16);
|
||||
private static final float VIEW_PADDING = Dim.dp16;
|
||||
|
||||
/** Height of the hue bar. */
|
||||
private static final float HUE_BAR_HEIGHT = dipToPixels(12);
|
||||
private static final float HUE_BAR_HEIGHT = Dim.dp12;
|
||||
|
||||
/** Height of the opacity slider. */
|
||||
private static final float OPACITY_BAR_HEIGHT = dipToPixels(12);
|
||||
private static final float OPACITY_BAR_HEIGHT = Dim.dp12;
|
||||
|
||||
/** Corner radius for the hue bar. */
|
||||
private static final float HUE_CORNER_RADIUS = dipToPixels(6);
|
||||
private static final float HUE_CORNER_RADIUS = Dim.dp6;
|
||||
|
||||
/** Corner radius for the opacity slider. */
|
||||
private static final float OPACITY_CORNER_RADIUS = dipToPixels(6);
|
||||
private static final float OPACITY_CORNER_RADIUS = Dim.dp6;
|
||||
|
||||
/** Radius of the selector handles. */
|
||||
private static final float SELECTOR_RADIUS = dipToPixels(12);
|
||||
private static final float SELECTOR_RADIUS = Dim.dp12;
|
||||
|
||||
/** Stroke width for the selector handle outlines. */
|
||||
private static final float SELECTOR_STROKE_WIDTH = 8;
|
||||
@@ -202,7 +202,7 @@ public class ColorPickerView extends View {
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
final float DESIRED_ASPECT_RATIO = 0.8f; // height = width * 0.8
|
||||
|
||||
final int minWidth = dipToPixels(250);
|
||||
final int minWidth = Dim.dp(250);
|
||||
final int minHeight = (int) (minWidth * DESIRED_ASPECT_RATIO) + (int) (HUE_BAR_HEIGHT + MARGIN_BETWEEN_AREAS)
|
||||
+ (opacitySliderEnabled ? (int) (OPACITY_BAR_HEIGHT + MARGIN_BETWEEN_AREAS) : 0);
|
||||
|
||||
|
||||
@@ -0,0 +1,623 @@
|
||||
package app.revanced.extension.shared.settings.preference;
|
||||
|
||||
import static app.revanced.extension.shared.StringRef.str;
|
||||
import static app.revanced.extension.shared.Utils.getResourceIdentifierOrThrow;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.ShapeDrawable;
|
||||
import android.graphics.drawable.shapes.RoundRectShape;
|
||||
import android.preference.Preference;
|
||||
import android.text.Editable;
|
||||
import android.text.InputType;
|
||||
import android.text.TextUtils;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Pair;
|
||||
import android.util.SparseBooleanArray;
|
||||
import android.view.Gravity;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.Window;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ListView;
|
||||
import android.widget.Space;
|
||||
import android.widget.TextView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.patches.EnableDebuggingPatch;
|
||||
import app.revanced.extension.shared.settings.BaseSettings;
|
||||
import app.revanced.extension.shared.ui.CustomDialog;
|
||||
import app.revanced.extension.shared.ui.Dim;
|
||||
|
||||
/**
|
||||
* A custom preference that opens a dialog for managing feature flags.
|
||||
* Allows moving boolean flags between active and blocked states with advanced selection.
|
||||
*/
|
||||
@SuppressWarnings({"deprecation", "unused"})
|
||||
public class FeatureFlagsManagerPreference extends Preference {
|
||||
|
||||
private static final int DRAWABLE_REVANCED_SETTINGS_SELECT_ALL =
|
||||
getResourceIdentifierOrThrow("revanced_settings_select_all", "drawable");
|
||||
private static final int DRAWABLE_REVANCED_SETTINGS_DESELECT_ALL =
|
||||
getResourceIdentifierOrThrow("revanced_settings_deselect_all", "drawable");
|
||||
private static final int DRAWABLE_REVANCED_SETTINGS_COPY_ALL =
|
||||
getResourceIdentifierOrThrow("revanced_settings_copy_all", "drawable");
|
||||
private static final int DRAWABLE_REVANCED_SETTINGS_ARROW_RIGHT_ONE =
|
||||
getResourceIdentifierOrThrow("revanced_settings_arrow_right_one", "drawable");
|
||||
private static final int DRAWABLE_REVANCED_SETTINGS_ARROW_RIGHT_DOUBLE =
|
||||
getResourceIdentifierOrThrow("revanced_settings_arrow_right_double", "drawable");
|
||||
private static final int DRAWABLE_REVANCED_SETTINGS_ARROW_LEFT_ONE =
|
||||
getResourceIdentifierOrThrow("revanced_settings_arrow_left_one", "drawable");
|
||||
private static final int DRAWABLE_REVANCED_SETTINGS_ARROW_LEFT_DOUBLE =
|
||||
getResourceIdentifierOrThrow("revanced_settings_arrow_left_double", "drawable");
|
||||
|
||||
/**
|
||||
* Flags to hide from the UI.
|
||||
*/
|
||||
private static final Set<Long> FLAGS_TO_IGNORE = Set.of(
|
||||
45386834L // 'You' tab settings icon.
|
||||
);
|
||||
|
||||
/**
|
||||
* Tracks state for range selection in ListView.
|
||||
*/
|
||||
private static class ListViewSelectionState {
|
||||
int lastClickedPosition = -1; // Position of the last clicked item.
|
||||
boolean isRangeSelecting = false; // True while a range is being selected.
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper class to pass ListView and Adapter together.
|
||||
*/
|
||||
private record ColumnViews(ListView listView, FlagAdapter adapter) {}
|
||||
|
||||
{
|
||||
setOnPreferenceClickListener(pref -> {
|
||||
showFlagsManagerDialog();
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
public FeatureFlagsManagerPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||
super(context, attrs, defStyleAttr, defStyleRes);
|
||||
}
|
||||
|
||||
public FeatureFlagsManagerPreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
}
|
||||
|
||||
public FeatureFlagsManagerPreference(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public FeatureFlagsManagerPreference(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows the main dialog for managing feature flags.
|
||||
*/
|
||||
private void showFlagsManagerDialog() {
|
||||
if (!BaseSettings.DEBUG.get()) {
|
||||
Utils.showToastShort(str("revanced_debug_logs_disabled"));
|
||||
return;
|
||||
}
|
||||
|
||||
Context context = getContext();
|
||||
|
||||
// Load all known and disabled flags.
|
||||
TreeSet<Long> allKnownFlags = new TreeSet<>(EnableDebuggingPatch.getAllLoggedFlags());
|
||||
allKnownFlags.removeAll(FLAGS_TO_IGNORE);
|
||||
|
||||
TreeSet<Long> disabledFlags = new TreeSet<>(EnableDebuggingPatch.parseFlags(
|
||||
BaseSettings.DISABLED_FEATURE_FLAGS.get()));
|
||||
disabledFlags.removeAll(FLAGS_TO_IGNORE);
|
||||
|
||||
if (allKnownFlags.isEmpty() && disabledFlags.isEmpty()) {
|
||||
// String does not need to be localized because it's basically impossible
|
||||
// to reach the settings menu without encountering at least 1 flag.
|
||||
Utils.showToastShort("No feature flags logged yet");
|
||||
return;
|
||||
}
|
||||
|
||||
TreeSet<Long> availableFlags = new TreeSet<>(allKnownFlags);
|
||||
availableFlags.removeAll(disabledFlags);
|
||||
TreeSet<Long> blockedFlags = new TreeSet<>(disabledFlags);
|
||||
|
||||
Pair<Dialog, LinearLayout> dialogPair = CustomDialog.create(
|
||||
context,
|
||||
getTitle() != null ? getTitle().toString() : "",
|
||||
null,
|
||||
null,
|
||||
str("revanced_settings_save"),
|
||||
() -> saveFlags(blockedFlags),
|
||||
() -> {},
|
||||
str("revanced_settings_reset"),
|
||||
this::resetFlags,
|
||||
true
|
||||
);
|
||||
|
||||
LinearLayout mainLayout = dialogPair.second;
|
||||
LinearLayout.LayoutParams contentParams = new LinearLayout.LayoutParams(
|
||||
LinearLayout.LayoutParams.MATCH_PARENT, 0, 1.0f);
|
||||
|
||||
// Insert content before the dialog button row.
|
||||
View contentView = createContentView(context, availableFlags, blockedFlags);
|
||||
mainLayout.addView(contentView, mainLayout.getChildCount() - 1, contentParams);
|
||||
|
||||
Dialog dialog = dialogPair.first;
|
||||
dialog.show();
|
||||
|
||||
Window window = dialog.getWindow();
|
||||
if (window != null) {
|
||||
Utils.setDialogWindowParameters(window, Gravity.CENTER, 0, 100, false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the main content view with two columns.
|
||||
*/
|
||||
private View createContentView(Context context, TreeSet<Long> availableFlags, TreeSet<Long> blockedFlags) {
|
||||
LinearLayout contentLayout = new LinearLayout(context);
|
||||
contentLayout.setOrientation(LinearLayout.VERTICAL);
|
||||
|
||||
// Headers.
|
||||
TextView availableHeader = createHeader(context, "revanced_debug_feature_flags_manager_active_header");
|
||||
TextView blockedHeader = createHeader(context, "revanced_debug_feature_flags_manager_blocked_header");
|
||||
|
||||
LinearLayout headersLayout = new LinearLayout(context);
|
||||
headersLayout.setOrientation(LinearLayout.HORIZONTAL);
|
||||
headersLayout.addView(availableHeader, new LinearLayout.LayoutParams(
|
||||
0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f));
|
||||
headersLayout.addView(blockedHeader, new LinearLayout.LayoutParams(
|
||||
0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f));
|
||||
|
||||
// Columns.
|
||||
View leftColumn = createColumn(context, availableFlags, availableHeader);
|
||||
View rightColumn = createColumn(context, blockedFlags, blockedHeader);
|
||||
|
||||
ColumnViews leftViews = (ColumnViews) leftColumn.getTag();
|
||||
ColumnViews rightViews = (ColumnViews) rightColumn.getTag();
|
||||
|
||||
updateHeaderCount(availableHeader, leftViews.adapter);
|
||||
updateHeaderCount(blockedHeader, rightViews.adapter);
|
||||
|
||||
// Main columns layout.
|
||||
LinearLayout columnsLayout = new LinearLayout(context);
|
||||
columnsLayout.setOrientation(LinearLayout.HORIZONTAL);
|
||||
columnsLayout.setLayoutParams(new LinearLayout.LayoutParams(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT, 0, 1f));
|
||||
columnsLayout.addView(leftColumn, new LinearLayout.LayoutParams(
|
||||
0, ViewGroup.LayoutParams.MATCH_PARENT, 1f));
|
||||
|
||||
Space spaceBetweenColumns = new Space(context);
|
||||
spaceBetweenColumns.setLayoutParams(new LinearLayout.LayoutParams(Dim.dp8, ViewGroup.LayoutParams.MATCH_PARENT));
|
||||
columnsLayout.addView(spaceBetweenColumns);
|
||||
|
||||
columnsLayout.addView(rightColumn, new LinearLayout.LayoutParams(
|
||||
0, ViewGroup.LayoutParams.MATCH_PARENT, 1f));
|
||||
|
||||
// Move buttons below columns.
|
||||
Pair<LinearLayout, LinearLayout> moveButtons = createMoveButtons(context,
|
||||
leftViews.listView, rightViews.listView,
|
||||
availableFlags, blockedFlags, availableHeader, blockedHeader);
|
||||
|
||||
// Layout for buttons row.
|
||||
LinearLayout buttonsRow = new LinearLayout(context);
|
||||
buttonsRow.setOrientation(LinearLayout.HORIZONTAL);
|
||||
buttonsRow.setLayoutParams(new LinearLayout.LayoutParams(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
|
||||
|
||||
buttonsRow.addView(moveButtons.first, new LinearLayout.LayoutParams(
|
||||
0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f));
|
||||
|
||||
Space spaceBetweenButtons = new Space(context);
|
||||
spaceBetweenButtons.setLayoutParams(new LinearLayout.LayoutParams(Dim.dp8, ViewGroup.LayoutParams.WRAP_CONTENT));
|
||||
buttonsRow.addView(spaceBetweenButtons);
|
||||
|
||||
buttonsRow.addView(moveButtons.second, new LinearLayout.LayoutParams(
|
||||
0, ViewGroup.LayoutParams.WRAP_CONTENT, 1f));
|
||||
|
||||
contentLayout.addView(headersLayout);
|
||||
contentLayout.addView(columnsLayout);
|
||||
contentLayout.addView(buttonsRow);
|
||||
|
||||
return contentLayout;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a header TextView.
|
||||
*/
|
||||
private TextView createHeader(Context context, String tag) {
|
||||
TextView textview = new TextView(context);
|
||||
textview.setTag(tag);
|
||||
textview.setTextSize(16);
|
||||
textview.setTextColor(Utils.getAppForegroundColor());
|
||||
textview.setGravity(Gravity.CENTER);
|
||||
|
||||
return textview;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a single column (search + buttons + list).
|
||||
*/
|
||||
private View createColumn(Context context, TreeSet<Long> flags, TextView countText) {
|
||||
LinearLayout wrapper = new LinearLayout(context);
|
||||
wrapper.setOrientation(LinearLayout.VERTICAL);
|
||||
|
||||
Pair<ListView, FlagAdapter> pair = createListView(context, flags, countText);
|
||||
ListView listView = pair.first;
|
||||
FlagAdapter adapter = pair.second;
|
||||
|
||||
EditText search = createSearchBox(context, adapter, listView, countText);
|
||||
LinearLayout buttons = createActionButtons(context, listView, adapter);
|
||||
|
||||
listView.setLayoutParams(new LinearLayout.LayoutParams(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT, 0, 1f));
|
||||
ShapeDrawable background = new ShapeDrawable(new RoundRectShape(
|
||||
Dim.roundedCorners(10), null, null));
|
||||
background.getPaint().setColor(Utils.getEditTextBackground());
|
||||
listView.setPadding(0, Dim.dp4, 0, Dim.dp4);
|
||||
listView.setBackground(background);
|
||||
listView.setOverScrollMode(View.OVER_SCROLL_NEVER);
|
||||
|
||||
wrapper.addView(search);
|
||||
wrapper.addView(buttons);
|
||||
wrapper.addView(listView);
|
||||
|
||||
// Save references for move buttons.
|
||||
wrapper.setTag(new ColumnViews(listView, adapter));
|
||||
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the header text with the current count.
|
||||
*/
|
||||
private void updateHeaderCount(TextView header, FlagAdapter adapter) {
|
||||
header.setText(str((String) header.getTag(), adapter.getCount()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a search box that filters the list.
|
||||
*/
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
private EditText createSearchBox(Context context, FlagAdapter adapter, ListView listView, TextView countText) {
|
||||
EditText search = new EditText(context);
|
||||
search.setInputType(InputType.TYPE_CLASS_NUMBER);
|
||||
search.setTextSize(16);
|
||||
search.setHint(str("revanced_debug_feature_flags_manager_search_hint"));
|
||||
search.setHapticFeedbackEnabled(false);
|
||||
search.setLayoutParams(new LinearLayout.LayoutParams(
|
||||
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
|
||||
|
||||
search.addTextChangedListener(new TextWatcher() {
|
||||
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
|
||||
@Override public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
adapter.setSearchQuery(s.toString());
|
||||
listView.clearChoices();
|
||||
updateHeaderCount(countText, adapter);
|
||||
Drawable clearIcon = context.getResources().getDrawable(android.R.drawable.ic_menu_close_clear_cancel);
|
||||
clearIcon.setBounds(0, 0, Dim.dp20, Dim.dp20);
|
||||
search.setCompoundDrawables(null, null, TextUtils.isEmpty(s) ? null : clearIcon, null);
|
||||
}
|
||||
@Override public void afterTextChanged(Editable s) {}
|
||||
});
|
||||
|
||||
search.setOnTouchListener((v, event) -> {
|
||||
if (event.getAction() == MotionEvent.ACTION_UP) {
|
||||
Drawable[] compoundDrawables = search.getCompoundDrawables();
|
||||
if (compoundDrawables[2] != null &&
|
||||
event.getRawX() >= (search.getRight() - compoundDrawables[2].getBounds().width())) {
|
||||
search.setText("");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
return search;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates action buttons.
|
||||
*/
|
||||
private LinearLayout createActionButtons(Context context, ListView listView, FlagAdapter adapter) {
|
||||
LinearLayout row = new LinearLayout(context);
|
||||
row.setOrientation(LinearLayout.HORIZONTAL);
|
||||
row.setGravity(Gravity.CENTER);
|
||||
row.setLayoutParams(new LinearLayout.LayoutParams(
|
||||
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
|
||||
|
||||
ImageButton selectAll = createButton(context, DRAWABLE_REVANCED_SETTINGS_SELECT_ALL,
|
||||
() -> {
|
||||
for (int i = 0, count = adapter.getCount(); i < count; i++) {
|
||||
listView.setItemChecked(i, true);
|
||||
}
|
||||
});
|
||||
|
||||
ImageButton clearAll = createButton(context, DRAWABLE_REVANCED_SETTINGS_DESELECT_ALL,
|
||||
() -> {
|
||||
listView.clearChoices();
|
||||
adapter.notifyDataSetChanged();
|
||||
});
|
||||
|
||||
ImageButton copy = createButton(context, DRAWABLE_REVANCED_SETTINGS_COPY_ALL,
|
||||
() -> {
|
||||
List<String> items = new ArrayList<>();
|
||||
SparseBooleanArray checked = listView.getCheckedItemPositions();
|
||||
|
||||
if (checked.size() > 0) {
|
||||
for (int i = 0, count = adapter.getCount(); i < count; i++) {
|
||||
if (checked.get(i)) {
|
||||
items.add(adapter.getItem(i));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (Long flag : adapter.getFullFlags()) {
|
||||
items.add(String.valueOf(flag));
|
||||
}
|
||||
}
|
||||
|
||||
Utils.setClipboard(TextUtils.join("\n", items));
|
||||
|
||||
Utils.showToastShort(str("revanced_debug_feature_flags_manager_toast_copied"));
|
||||
});
|
||||
|
||||
row.addView(selectAll);
|
||||
row.addView(clearAll);
|
||||
row.addView(copy);
|
||||
|
||||
return row;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the move buttons (left and right groups).
|
||||
*/
|
||||
private Pair<LinearLayout, LinearLayout> createMoveButtons(Context context,
|
||||
ListView availableListView, ListView blockedListView,
|
||||
TreeSet<Long> availableFlags, TreeSet<Long> blockedFlags,
|
||||
TextView availableCountText, TextView blockedCountText) {
|
||||
// Left group: >> >
|
||||
LinearLayout leftButtons = new LinearLayout(context);
|
||||
leftButtons.setOrientation(LinearLayout.HORIZONTAL);
|
||||
leftButtons.setGravity(Gravity.CENTER);
|
||||
|
||||
ImageButton moveAllRight = createButton(context, DRAWABLE_REVANCED_SETTINGS_ARROW_RIGHT_DOUBLE,
|
||||
() -> moveFlags(availableListView, blockedListView, availableFlags, blockedFlags,
|
||||
availableCountText, blockedCountText, true));
|
||||
|
||||
ImageButton moveOneRight = createButton(context, DRAWABLE_REVANCED_SETTINGS_ARROW_RIGHT_ONE,
|
||||
() -> moveFlags(availableListView, blockedListView, availableFlags, blockedFlags,
|
||||
availableCountText, blockedCountText, false));
|
||||
|
||||
leftButtons.addView(moveAllRight);
|
||||
leftButtons.addView(moveOneRight);
|
||||
|
||||
// Right group: < <<
|
||||
LinearLayout rightButtons = new LinearLayout(context);
|
||||
rightButtons.setOrientation(LinearLayout.HORIZONTAL);
|
||||
rightButtons.setGravity(Gravity.CENTER);
|
||||
|
||||
ImageButton moveOneLeft = createButton(context, DRAWABLE_REVANCED_SETTINGS_ARROW_LEFT_ONE,
|
||||
() -> moveFlags(blockedListView, availableListView, blockedFlags, availableFlags,
|
||||
blockedCountText, availableCountText, false));
|
||||
|
||||
ImageButton moveAllLeft = createButton(context, DRAWABLE_REVANCED_SETTINGS_ARROW_LEFT_DOUBLE,
|
||||
() -> moveFlags(blockedListView, availableListView, blockedFlags, availableFlags,
|
||||
blockedCountText, availableCountText, true));
|
||||
|
||||
rightButtons.addView(moveOneLeft);
|
||||
rightButtons.addView(moveAllLeft);
|
||||
|
||||
return new Pair<>(leftButtons, rightButtons);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a styled ImageButton.
|
||||
*/
|
||||
@SuppressLint("ResourceType")
|
||||
private ImageButton createButton(Context context, int drawableResId, Runnable action) {
|
||||
ImageButton button = new ImageButton(context);
|
||||
|
||||
button.setImageResource(drawableResId);
|
||||
button.setScaleType(ImageView.ScaleType.CENTER);
|
||||
int[] attrs = {android.R.attr.selectableItemBackgroundBorderless};
|
||||
//noinspection Recycle
|
||||
TypedArray ripple = context.obtainStyledAttributes(attrs);
|
||||
button.setBackgroundDrawable(ripple.getDrawable(0));
|
||||
ripple.close();
|
||||
|
||||
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(Dim.dp32, Dim.dp32);
|
||||
params.setMargins(Dim.dp8, Dim.dp8, Dim.dp8, Dim.dp8);
|
||||
button.setLayoutParams(params);
|
||||
|
||||
button.setOnClickListener(v -> action.run());
|
||||
|
||||
return button;
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom adapter with search filtering.
|
||||
*/
|
||||
private static class FlagAdapter extends ArrayAdapter<String> {
|
||||
private final TreeSet<Long> fullFlags;
|
||||
private String searchQuery = "";
|
||||
|
||||
public FlagAdapter(Context context, TreeSet<Long> fullFlags) {
|
||||
super(context, android.R.layout.simple_list_item_multiple_choice, new ArrayList<>());
|
||||
this.fullFlags = fullFlags;
|
||||
updateFiltered();
|
||||
}
|
||||
|
||||
public void setSearchQuery(String query) {
|
||||
searchQuery = query == null ? "" : query.trim();
|
||||
updateFiltered();
|
||||
}
|
||||
|
||||
private void updateFiltered() {
|
||||
clear();
|
||||
for (Long flag : fullFlags) {
|
||||
String flagString = String.valueOf(flag);
|
||||
if (searchQuery.isEmpty() || flagString.contains(searchQuery)) {
|
||||
add(flagString);
|
||||
}
|
||||
}
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public void refresh() {
|
||||
updateFiltered();
|
||||
}
|
||||
|
||||
public List<Long> getFullFlags() {
|
||||
return new ArrayList<>(fullFlags);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a ListView with filtering, multi-select, and range selection.
|
||||
*/
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
private Pair<ListView, FlagAdapter> createListView(Context context,
|
||||
TreeSet<Long> flags, TextView countText) {
|
||||
ListView listView = new ListView(context);
|
||||
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
|
||||
listView.setDividerHeight(0);
|
||||
|
||||
FlagAdapter adapter = new FlagAdapter(context, flags);
|
||||
listView.setAdapter(adapter);
|
||||
|
||||
final ListViewSelectionState state = new ListViewSelectionState();
|
||||
|
||||
listView.setOnItemClickListener((parent, view, position, id) -> {
|
||||
if (!state.isRangeSelecting) {
|
||||
state.lastClickedPosition = position;
|
||||
} else {
|
||||
state.isRangeSelecting = false;
|
||||
}
|
||||
});
|
||||
|
||||
listView.setOnItemLongClickListener((parent, view, position, id) -> {
|
||||
if (state.lastClickedPosition == -1) {
|
||||
listView.setItemChecked(position, true);
|
||||
state.lastClickedPosition = position;
|
||||
} else {
|
||||
int start = Math.min(state.lastClickedPosition, position);
|
||||
int end = Math.max(state.lastClickedPosition, position);
|
||||
for (int i = start; i <= end; i++) {
|
||||
listView.setItemChecked(i, true);
|
||||
}
|
||||
state.isRangeSelecting = true;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
listView.setOnTouchListener((view, event) -> {
|
||||
if (event.getAction() == MotionEvent.ACTION_UP && state.isRangeSelecting) {
|
||||
state.isRangeSelecting = false;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
return new Pair<>(listView, adapter);
|
||||
}
|
||||
|
||||
/**
|
||||
* Moves selected or all flags from one list to another.
|
||||
*
|
||||
* @param fromListView Source ListView.
|
||||
* @param toListView Destination ListView.
|
||||
* @param fromFlags Source flag set.
|
||||
* @param toFlags Destination flag set.
|
||||
* @param fromCountText Header showing count of source items.
|
||||
* @param toCountText Header showing count of destination items.
|
||||
* @param moveAll If true, move all items; if false, move only selected.
|
||||
*/
|
||||
private void moveFlags(ListView fromListView, ListView toListView,
|
||||
TreeSet<Long> fromFlags, TreeSet<Long> toFlags,
|
||||
TextView fromCountText, TextView toCountText,
|
||||
boolean moveAll) {
|
||||
if (fromListView == null || toListView == null) return;
|
||||
|
||||
List<Long> flagsToMove = new ArrayList<>();
|
||||
FlagAdapter fromAdapter = (FlagAdapter) fromListView.getAdapter();
|
||||
|
||||
if (moveAll) {
|
||||
flagsToMove.addAll(fromFlags);
|
||||
} else {
|
||||
SparseBooleanArray checked = fromListView.getCheckedItemPositions();
|
||||
for (int i = 0, count = fromAdapter.getCount(); i < count; i++) {
|
||||
if (checked.get(i)) {
|
||||
String item = fromAdapter.getItem(i);
|
||||
if (item != null) {
|
||||
flagsToMove.add(Long.parseLong(item));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (flagsToMove.isEmpty()) return;
|
||||
|
||||
for (Long flag : flagsToMove) {
|
||||
fromFlags.remove(flag);
|
||||
toFlags.add(flag);
|
||||
}
|
||||
|
||||
// Clear selections before refreshing.
|
||||
fromListView.clearChoices();
|
||||
toListView.clearChoices();
|
||||
|
||||
// Refresh both adapters.
|
||||
fromAdapter.refresh();
|
||||
((FlagAdapter) toListView.getAdapter()).refresh();
|
||||
|
||||
// Update headers.
|
||||
updateHeaderCount(fromCountText, fromAdapter);
|
||||
updateHeaderCount(toCountText, (FlagAdapter) toListView.getAdapter());
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves blocked flags to settings.
|
||||
*/
|
||||
private void saveFlags(TreeSet<Long> blockedFlags) {
|
||||
StringBuilder flagsString = new StringBuilder();
|
||||
for (Long flag : blockedFlags) {
|
||||
if (flagsString.length() > 0) {
|
||||
flagsString.append("\n");
|
||||
}
|
||||
flagsString.append(flag);
|
||||
}
|
||||
|
||||
BaseSettings.DISABLED_FEATURE_FLAGS.save(flagsString.toString());
|
||||
Utils.showToastShort(str("revanced_debug_feature_flags_manager_toast_saved"));
|
||||
Logger.printDebug(() -> "Feature flags saved. Blocked: " + blockedFlags.size());
|
||||
|
||||
AbstractPreferenceFragment.showRestartDialog(getContext());
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets all blocked flags.
|
||||
*/
|
||||
private void resetFlags() {
|
||||
BaseSettings.DISABLED_FEATURE_FLAGS.save("");
|
||||
Utils.showToastShort(str("revanced_debug_feature_flags_manager_toast_reset"));
|
||||
|
||||
AbstractPreferenceFragment.showRestartDialog(getContext());
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,6 @@ import android.preference.Preference;
|
||||
import android.text.InputType;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Pair;
|
||||
import android.util.TypedValue;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
import android.widget.LinearLayout;
|
||||
@@ -35,7 +34,7 @@ public class ImportExportPreference extends EditTextPreference implements Prefer
|
||||
editText.setAutofillHints((String) null);
|
||||
}
|
||||
editText.setInputType(editText.getInputType() | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
|
||||
editText.setTextSize(TypedValue.COMPLEX_UNIT_PT, 7); // Use a smaller font to reduce text wrap.
|
||||
editText.setTextSize(14);
|
||||
|
||||
setOnPreferenceClickListener(this);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package app.revanced.extension.shared.settings.preference;
|
||||
|
||||
import static app.revanced.extension.shared.StringRef.str;
|
||||
import static app.revanced.extension.shared.Utils.dipToPixels;
|
||||
import static app.revanced.extension.shared.requests.Route.Method.GET;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
@@ -41,6 +40,7 @@ import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.requests.Requester;
|
||||
import app.revanced.extension.shared.requests.Route;
|
||||
import app.revanced.extension.shared.ui.Dim;
|
||||
|
||||
/**
|
||||
* Opens a dialog showing official links.
|
||||
@@ -222,11 +222,10 @@ class WebViewDialog extends Dialog {
|
||||
LinearLayout mainLayout = new LinearLayout(getContext());
|
||||
mainLayout.setOrientation(LinearLayout.VERTICAL);
|
||||
|
||||
final int padding = dipToPixels(10);
|
||||
mainLayout.setPadding(padding, padding, padding, padding);
|
||||
mainLayout.setPadding(Dim.dp10, Dim.dp10, Dim.dp10, Dim.dp10);
|
||||
// Set rounded rectangle background.
|
||||
ShapeDrawable mainBackground = new ShapeDrawable(new RoundRectShape(
|
||||
Utils.createCornerRadii(28), null, null));
|
||||
Dim.roundedCorners(28), null, null));
|
||||
mainBackground.getPaint().setColor(Utils.getDialogBackgroundColor());
|
||||
mainLayout.setBackground(mainBackground);
|
||||
|
||||
|
||||
@@ -8,7 +8,6 @@ import android.os.Build;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceGroup;
|
||||
import android.preference.PreferenceScreen;
|
||||
import android.util.TypedValue;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.Window;
|
||||
import android.view.WindowInsets;
|
||||
@@ -20,6 +19,7 @@ import androidx.annotation.Nullable;
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.settings.BaseActivityHook;
|
||||
import app.revanced.extension.shared.ui.Dim;
|
||||
|
||||
@SuppressWarnings({"deprecation", "NewApi"})
|
||||
public class ToolbarPreferenceFragment extends AbstractPreferenceFragment {
|
||||
@@ -88,14 +88,13 @@ public class ToolbarPreferenceFragment extends AbstractPreferenceFragment {
|
||||
toolbar.setNavigationIcon(getBackButtonDrawable());
|
||||
toolbar.setNavigationOnClickListener(view -> preferenceScreenDialog.dismiss());
|
||||
|
||||
final int margin = Utils.dipToPixels(16);
|
||||
toolbar.setTitleMargin(margin, 0, margin, 0);
|
||||
toolbar.setTitleMargin(Dim.dp16, 0, Dim.dp16, 0);
|
||||
|
||||
TextView toolbarTextView = Utils.getChildView(toolbar,
|
||||
true, TextView.class::isInstance);
|
||||
if (toolbarTextView != null) {
|
||||
toolbarTextView.setTextColor(Utils.getAppForegroundColor());
|
||||
toolbarTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
|
||||
toolbarTextView.setTextSize(20);
|
||||
}
|
||||
|
||||
// Allow package-specific toolbar customization.
|
||||
|
||||
@@ -484,7 +484,7 @@ public abstract class BaseSearchResultsAdapter extends ArrayAdapter<BaseSearchRe
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (int i = 0; i < adapter.getCount(); i++) {
|
||||
for (int i = 0, count = adapter.getCount(); i < count; i++) {
|
||||
Object item = adapter.getItem(i);
|
||||
if (item == targetPreference) {
|
||||
return i;
|
||||
@@ -522,8 +522,8 @@ public abstract class BaseSearchResultsAdapter extends ArrayAdapter<BaseSearchRe
|
||||
if (currentAnimator != null && currentAnimator.isRunning()) {
|
||||
currentAnimator.cancel();
|
||||
}
|
||||
int startColor = Utils.getAppBackgroundColor();
|
||||
int highlightColor = Utils.adjustColorBrightness(
|
||||
final int startColor = Utils.getAppBackgroundColor();
|
||||
final int highlightColor = Utils.adjustColorBrightness(
|
||||
startColor,
|
||||
Utils.isDarkModeEnabled() ? 1.25f : 0.8f
|
||||
);
|
||||
@@ -566,7 +566,7 @@ public abstract class BaseSearchResultsAdapter extends ArrayAdapter<BaseSearchRe
|
||||
}
|
||||
|
||||
// First search on current level.
|
||||
for (int i = 0; i < group.getPreferenceCount(); i++) {
|
||||
for (int i = 0, count = group.getPreferenceCount(); i < count; i++) {
|
||||
Preference pref = group.getPreference(i);
|
||||
if (key.equals(pref.getKey())) {
|
||||
return pref;
|
||||
|
||||
@@ -13,7 +13,6 @@ import android.preference.PreferenceCategory;
|
||||
import android.preference.PreferenceGroup;
|
||||
import android.preference.PreferenceScreen;
|
||||
import android.text.TextUtils;
|
||||
import android.util.TypedValue;
|
||||
import android.view.Gravity;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
@@ -45,6 +44,7 @@ import app.revanced.extension.shared.settings.Setting;
|
||||
import app.revanced.extension.shared.settings.preference.ColorPickerPreference;
|
||||
import app.revanced.extension.shared.settings.preference.CustomDialogListPreference;
|
||||
import app.revanced.extension.shared.settings.preference.NoTitlePreferenceCategory;
|
||||
import app.revanced.extension.shared.ui.Dim;
|
||||
|
||||
/**
|
||||
* Abstract controller for managing the overlay search view in ReVanced settings.
|
||||
@@ -123,7 +123,7 @@ public abstract class BaseSearchViewController {
|
||||
searchView.setQueryHint(str("revanced_settings_search_hint"));
|
||||
|
||||
// Set text size.
|
||||
searchEditText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
|
||||
searchEditText.setTextSize(16);
|
||||
|
||||
// Set cursor color.
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
@@ -149,7 +149,7 @@ public abstract class BaseSearchViewController {
|
||||
// Create cursor drawable.
|
||||
GradientDrawable cursorDrawable = new GradientDrawable();
|
||||
cursorDrawable.setShape(GradientDrawable.RECTANGLE);
|
||||
cursorDrawable.setSize(Utils.dipToPixels(2), -1); // Width: 2dp, Height: match text height.
|
||||
cursorDrawable.setSize(Dim.dp2, -1); // Width: 2dp, Height: match text height.
|
||||
cursorDrawable.setColor(cursorColor);
|
||||
|
||||
// Set cursor drawable.
|
||||
@@ -164,7 +164,7 @@ public abstract class BaseSearchViewController {
|
||||
overlayContainer = new FrameLayout(activity);
|
||||
overlayContainer.setVisibility(View.GONE);
|
||||
overlayContainer.setBackgroundColor(Utils.getAppBackgroundColor());
|
||||
overlayContainer.setElevation(Utils.dipToPixels(8));
|
||||
overlayContainer.setElevation(Dim.dp8);
|
||||
|
||||
// Container for search results.
|
||||
FrameLayout searchResultsContainer = new FrameLayout(activity);
|
||||
@@ -669,7 +669,7 @@ public abstract class BaseSearchViewController {
|
||||
protected static GradientDrawable createBackgroundDrawable() {
|
||||
GradientDrawable background = new GradientDrawable();
|
||||
background.setShape(GradientDrawable.RECTANGLE);
|
||||
background.setCornerRadius(Utils.dipToPixels(28));
|
||||
background.setCornerRadius(Dim.dp28);
|
||||
background.setColor(getSearchViewBackground());
|
||||
return background;
|
||||
}
|
||||
|
||||
@@ -72,7 +72,7 @@ public class SpoofVideoStreamsPatch {
|
||||
public static boolean spoofingToClientWithNoMultiAudioStreams() {
|
||||
return isPatchIncluded()
|
||||
&& SPOOF_STREAMING_DATA
|
||||
&& preferredClient != ClientType.IPADOS;
|
||||
&& !preferredClient.supportsMultiAudioTracks;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package app.revanced.extension.shared.ui;
|
||||
|
||||
import static app.revanced.extension.shared.Utils.adjustColorBrightness;
|
||||
import static app.revanced.extension.shared.Utils.dipToPixels;
|
||||
import static app.revanced.extension.shared.Utils.getAppBackgroundColor;
|
||||
import static app.revanced.extension.shared.Utils.isDarkModeEnabled;
|
||||
import static app.revanced.extension.shared.settings.preference.ColorPickerPreference.DISABLED_ALPHA;
|
||||
@@ -13,7 +12,7 @@ import android.view.View;
|
||||
import androidx.annotation.ColorInt;
|
||||
|
||||
public class ColorDot {
|
||||
private static final int STROKE_WIDTH = dipToPixels(1.5f); // Stroke width in dp.
|
||||
private static final int STROKE_WIDTH = Dim.dp(1.5f);
|
||||
|
||||
/**
|
||||
* Creates a circular drawable with a main fill and a stroke.
|
||||
@@ -55,7 +54,7 @@ public class ColorDot {
|
||||
targetView.setAlpha(enabled ? 1.0f : DISABLED_ALPHA);
|
||||
if (!isDarkModeEnabled()) {
|
||||
targetView.setClipToOutline(true);
|
||||
targetView.setElevation(dipToPixels(2));
|
||||
targetView.setElevation(Dim.dp2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package app.revanced.extension.shared.ui;
|
||||
|
||||
import static app.revanced.extension.shared.Utils.dipToPixels;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
@@ -37,7 +35,6 @@ public class CustomDialog {
|
||||
private final Context context;
|
||||
private final Dialog dialog;
|
||||
private final LinearLayout mainLayout;
|
||||
private final int dip4, dip8, dip16, dip24, dip36;
|
||||
|
||||
/**
|
||||
* Creates a custom dialog with a styled layout, including a title, message, buttons, and an optional EditText.
|
||||
@@ -93,13 +90,6 @@ public class CustomDialog {
|
||||
this.dialog = new Dialog(context);
|
||||
this.dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); // Remove default title bar.
|
||||
|
||||
// Preset size constants.
|
||||
dip4 = dipToPixels(4);
|
||||
dip8 = dipToPixels(8);
|
||||
dip16 = dipToPixels(16);
|
||||
dip24 = dipToPixels(24);
|
||||
dip36 = dipToPixels(36);
|
||||
|
||||
// Create main layout.
|
||||
mainLayout = createMainLayout();
|
||||
addTitle(title);
|
||||
@@ -122,11 +112,11 @@ public class CustomDialog {
|
||||
private LinearLayout createMainLayout() {
|
||||
LinearLayout layout = new LinearLayout(context);
|
||||
layout.setOrientation(LinearLayout.VERTICAL);
|
||||
layout.setPadding(dip24, dip16, dip24, dip24);
|
||||
layout.setPadding(Dim.dp24, Dim.dp16, Dim.dp24, Dim.dp24);
|
||||
|
||||
// Set rounded rectangle background.
|
||||
ShapeDrawable background = new ShapeDrawable(new RoundRectShape(
|
||||
Utils.createCornerRadii(28), null, null));
|
||||
Dim.roundedCorners(28), null, null));
|
||||
// Dialog background.
|
||||
background.getPaint().setColor(Utils.getDialogBackgroundColor());
|
||||
layout.setBackground(background);
|
||||
@@ -152,7 +142,7 @@ public class CustomDialog {
|
||||
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||
params.setMargins(0, 0, 0, dip16);
|
||||
params.setMargins(0, 0, 0, Dim.dp16);
|
||||
titleView.setLayoutParams(params);
|
||||
|
||||
mainLayout.addView(titleView);
|
||||
@@ -180,9 +170,9 @@ public class CustomDialog {
|
||||
// EditText (if provided).
|
||||
if (editText != null) {
|
||||
ShapeDrawable background = new ShapeDrawable(new RoundRectShape(
|
||||
Utils.createCornerRadii(10), null, null));
|
||||
Dim.roundedCorners(10), null, null));
|
||||
background.getPaint().setColor(Utils.getEditTextBackground());
|
||||
scrollView.setPadding(dip8, dip8, dip8, dip8);
|
||||
scrollView.setPadding(Dim.dp8, Dim.dp8, Dim.dp8, Dim.dp8);
|
||||
scrollView.setBackground(background);
|
||||
scrollView.setClipToOutline(true);
|
||||
|
||||
@@ -241,7 +231,7 @@ public class CustomDialog {
|
||||
LinearLayout.LayoutParams buttonContainerParams = new LinearLayout.LayoutParams(
|
||||
LinearLayout.LayoutParams.MATCH_PARENT,
|
||||
LinearLayout.LayoutParams.WRAP_CONTENT);
|
||||
buttonContainerParams.setMargins(0, dip16, 0, 0);
|
||||
buttonContainerParams.setMargins(0, Dim.dp16, 0, 0);
|
||||
buttonContainer.setLayoutParams(buttonContainerParams);
|
||||
|
||||
List<Button> buttons = new ArrayList<>();
|
||||
@@ -289,12 +279,12 @@ public class CustomDialog {
|
||||
button.setEllipsize(TextUtils.TruncateAt.END);
|
||||
button.setGravity(Gravity.CENTER);
|
||||
// Set internal padding.
|
||||
button.setPadding(dip16, 0, dip16, 0);
|
||||
button.setPadding(Dim.dp16, 0, Dim.dp16, 0);
|
||||
|
||||
// Background color for OK button (inversion).
|
||||
// Background color for Cancel or Neutral buttons.
|
||||
ShapeDrawable background = new ShapeDrawable(new RoundRectShape(
|
||||
Utils.createCornerRadii(20), null, null));
|
||||
Dim.roundedCorners(20), null, null));
|
||||
background.getPaint().setColor(isOkButton
|
||||
? Utils.getOkButtonBackgroundColor()
|
||||
: Utils.getCancelOrNeutralButtonBackgroundColor());
|
||||
@@ -331,20 +321,19 @@ public class CustomDialog {
|
||||
if (buttons.isEmpty()) return;
|
||||
|
||||
// Check if buttons fit in one row.
|
||||
int screenWidth = context.getResources().getDisplayMetrics().widthPixels;
|
||||
int totalWidth = 0;
|
||||
for (Integer width : buttonWidths) {
|
||||
totalWidth += width;
|
||||
}
|
||||
if (buttonWidths.size() > 1) {
|
||||
// Add margins for gaps.
|
||||
totalWidth += (buttonWidths.size() - 1) * dip8;
|
||||
totalWidth += (buttonWidths.size() - 1) * Dim.dp8;
|
||||
}
|
||||
|
||||
// Single button: stretch to full width.
|
||||
if (buttons.size() == 1) {
|
||||
layoutSingleButton(buttonContainer, buttons.get(0));
|
||||
} else if (totalWidth <= screenWidth * 0.8) {
|
||||
} else if (totalWidth <= Dim.pctWidth(80)) {
|
||||
// Single row: Neutral, Cancel, OK.
|
||||
layoutButtonsInRow(buttonContainer, buttons, buttonWidths);
|
||||
} else {
|
||||
@@ -369,7 +358,7 @@ public class CustomDialog {
|
||||
|
||||
button.setLayoutParams(new LinearLayout.LayoutParams(
|
||||
LinearLayout.LayoutParams.MATCH_PARENT,
|
||||
dip36));
|
||||
Dim.dp36));
|
||||
singleContainer.addView(button);
|
||||
buttonContainer.addView(singleContainer);
|
||||
}
|
||||
@@ -405,17 +394,17 @@ public class CustomDialog {
|
||||
if (parent != null) parent.removeView(button);
|
||||
|
||||
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
|
||||
0, dip36, buttonWidths.get(i));
|
||||
0, Dim.dp36, buttonWidths.get(i));
|
||||
|
||||
// Set margins based on button type and combination.
|
||||
if (buttons.size() == 2) {
|
||||
// Neutral + OK or Cancel + OK.
|
||||
params.setMargins(i == 0 ? 0 : dip4, 0, i == 0 ? dip4 : 0, 0);
|
||||
params.setMargins(i == 0 ? 0 : Dim.dp4, 0, i == 0 ? Dim.dp4 : 0, 0);
|
||||
} else if (buttons.size() == 3) {
|
||||
// Neutral.
|
||||
// Cancel.
|
||||
// OK.
|
||||
params.setMargins(i == 0 ? 0 : dip4, 0, i == 2 ? 0 : dip4, 0);
|
||||
params.setMargins(i == 0 ? 0 : Dim.dp4, 0, i == 2 ? 0 : Dim.dp4, 0);
|
||||
}
|
||||
|
||||
button.setLayoutParams(params);
|
||||
@@ -447,14 +436,14 @@ public class CustomDialog {
|
||||
singleContainer.setGravity(Gravity.CENTER);
|
||||
singleContainer.setLayoutParams(new LinearLayout.LayoutParams(
|
||||
LinearLayout.LayoutParams.MATCH_PARENT,
|
||||
dip36));
|
||||
Dim.dp36));
|
||||
|
||||
ViewGroup parent = (ViewGroup) button.getParent();
|
||||
if (parent != null) parent.removeView(button);
|
||||
|
||||
button.setLayoutParams(new LinearLayout.LayoutParams(
|
||||
LinearLayout.LayoutParams.MATCH_PARENT,
|
||||
dip36));
|
||||
Dim.dp36));
|
||||
singleContainer.addView(button);
|
||||
buttonContainer.addView(singleContainer);
|
||||
|
||||
@@ -463,7 +452,7 @@ public class CustomDialog {
|
||||
View spacer = new View(context);
|
||||
LinearLayout.LayoutParams spacerParams = new LinearLayout.LayoutParams(
|
||||
LinearLayout.LayoutParams.MATCH_PARENT,
|
||||
dip8);
|
||||
Dim.dp8);
|
||||
spacer.setLayoutParams(spacerParams);
|
||||
buttonContainer.addView(spacer);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
package app.revanced.extension.shared.ui;
|
||||
|
||||
import android.content.res.Resources;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.TypedValue;
|
||||
|
||||
/**
|
||||
* Utility class for converting design units (dp) and screen percentages to pixels.
|
||||
*/
|
||||
public final class Dim {
|
||||
private Dim() {} // Prevent instantiation.
|
||||
|
||||
private static final DisplayMetrics METRICS = Resources.getSystem().getDisplayMetrics();
|
||||
public static final int SCREEN_WIDTH = METRICS.widthPixels;
|
||||
public static final int SCREEN_HEIGHT = METRICS.heightPixels;
|
||||
|
||||
// DP constants (density-independent pixels).
|
||||
public static final int dp1 = dp(1);
|
||||
public static final int dp2 = dp(2);
|
||||
public static final int dp4 = dp(4);
|
||||
public static final int dp6 = dp(6);
|
||||
public static final int dp7 = dp(7);
|
||||
public static final int dp8 = dp(8);
|
||||
public static final int dp10 = dp(10);
|
||||
public static final int dp12 = dp(12);
|
||||
public static final int dp16 = dp(16);
|
||||
public static final int dp20 = dp(20);
|
||||
public static final int dp24 = dp(24);
|
||||
public static final int dp28 = dp(28);
|
||||
public static final int dp32 = dp(32);
|
||||
public static final int dp36 = dp(36);
|
||||
public static final int dp40 = dp(40);
|
||||
public static final int dp48 = dp(48);
|
||||
|
||||
/**
|
||||
* Converts dp (density-independent pixels) to actual device pixels.
|
||||
* Uses Android's official TypedValue.applyDimension() for accurate rounding.
|
||||
*
|
||||
* @param dp The dp value to convert (supports float, e.g. 1.2f).
|
||||
* @return The equivalent pixel value as int.
|
||||
*/
|
||||
public static int dp(float dp) {
|
||||
return (int) TypedValue.applyDimension(
|
||||
TypedValue.COMPLEX_UNIT_DIP, dp, METRICS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a percentage of the screen height to pixels.
|
||||
*
|
||||
* @param percent The percentage (0–100).
|
||||
* @return The pixel value corresponding to the percentage of screen height.
|
||||
*/
|
||||
public static int pctHeight(int percent) {
|
||||
return (SCREEN_HEIGHT * percent) / 100;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a percentage of the screen width to pixels.
|
||||
*
|
||||
* @param percent The percentage (0–100).
|
||||
* @return The pixel value corresponding to the percentage of screen width.
|
||||
*/
|
||||
public static int pctWidth(int percent) {
|
||||
return (SCREEN_WIDTH * percent) / 100;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a percentage of the screen's portrait width (min side) to pixels.
|
||||
*
|
||||
* @param percent The percentage (0–100).
|
||||
* @return The pixel value.
|
||||
*/
|
||||
public static int pctPortraitWidth(int percent) {
|
||||
final int portraitWidth = Math.min(SCREEN_WIDTH, SCREEN_HEIGHT);
|
||||
return (int) (portraitWidth * (percent / 100.0f));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an array of corner radii for a rounded rectangle.
|
||||
* All corners use the same radius.
|
||||
*
|
||||
* @param dp radius in density-independent pixels
|
||||
* @return array of 8 floats: [top-left-x, top-left-y, top-right-x, top-right-y, ...]
|
||||
*/
|
||||
public static float[] roundedCorners(float dp) {
|
||||
final float r = dp(dp);
|
||||
return new float[]{r, r, r, r, r, r, r, r};
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,5 @@
|
||||
package app.revanced.extension.shared.ui;
|
||||
|
||||
import static app.revanced.extension.shared.Utils.dipToPixels;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
import android.animation.ValueAnimator;
|
||||
@@ -63,9 +61,8 @@ public class SheetBottomDialog {
|
||||
|
||||
// Add top spacer.
|
||||
View spacer = new View(context);
|
||||
final int dip40 = dipToPixels(40);
|
||||
LinearLayout.LayoutParams spacerParams = new LinearLayout.LayoutParams(
|
||||
LinearLayout.LayoutParams.MATCH_PARENT, dip40);
|
||||
LinearLayout.LayoutParams.MATCH_PARENT, Dim.dp40);
|
||||
spacer.setLayoutParams(spacerParams);
|
||||
spacer.setClickable(true);
|
||||
dragContainer.addView(spacer);
|
||||
@@ -105,20 +102,15 @@ public class SheetBottomDialog {
|
||||
* @return A configured {@link DraggableLinearLayout} with a handle bar and styled background.
|
||||
*/
|
||||
public static DraggableLinearLayout createMainLayout(@NonNull Context context, @Nullable Integer backgroundColor) {
|
||||
// Preset size constants.
|
||||
final int dip4 = dipToPixels(4); // Handle bar height.
|
||||
final int dip8 = dipToPixels(8); // Dialog padding.
|
||||
final int dip40 = dipToPixels(40); // Handle bar width.
|
||||
|
||||
DraggableLinearLayout mainLayout = new DraggableLinearLayout(context);
|
||||
mainLayout.setOrientation(LinearLayout.VERTICAL);
|
||||
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
|
||||
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
|
||||
layoutParams.setMargins(dip8, 0, dip8, dip8);
|
||||
layoutParams.setMargins(Dim.dp8, 0, Dim.dp8, Dim.dp8);
|
||||
mainLayout.setLayoutParams(layoutParams);
|
||||
|
||||
ShapeDrawable background = new ShapeDrawable(new RoundRectShape(
|
||||
Utils.createCornerRadii(12), null, null));
|
||||
Dim.roundedCorners(12), null, null));
|
||||
int color = (backgroundColor != null) ? backgroundColor : Utils.getDialogBackgroundColor();
|
||||
background.getPaint().setColor(color);
|
||||
mainLayout.setBackground(background);
|
||||
@@ -127,14 +119,14 @@ public class SheetBottomDialog {
|
||||
LinearLayout handleContainer = new LinearLayout(context);
|
||||
LinearLayout.LayoutParams containerParams = new LinearLayout.LayoutParams(
|
||||
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
|
||||
containerParams.setMargins(0, dip8, 0, 0);
|
||||
containerParams.setMargins(0, Dim.dp8, 0, 0);
|
||||
handleContainer.setLayoutParams(containerParams);
|
||||
handleContainer.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);
|
||||
View handleBar = new View(context);
|
||||
ShapeDrawable handleBackground = new ShapeDrawable(new RoundRectShape(
|
||||
Utils.createCornerRadii(4), null, null));
|
||||
Dim.roundedCorners(4), null, null));
|
||||
handleBackground.getPaint().setColor(Utils.adjustColorBrightness(color, 0.9f, 1.25f));
|
||||
LinearLayout.LayoutParams handleParams = new LinearLayout.LayoutParams(dip40, dip4);
|
||||
LinearLayout.LayoutParams handleParams = new LinearLayout.LayoutParams(Dim.dp40, Dim.dp4);
|
||||
handleBar.setLayoutParams(handleParams);
|
||||
handleBar.setBackground(handleBackground);
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import android.view.View;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.ui.Dim;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
@@ -31,7 +32,7 @@ public final class WideSearchbarPatch {
|
||||
final int paddingRight = searchBarView.getPaddingRight();
|
||||
final int paddingTop = searchBarView.getPaddingTop();
|
||||
final int paddingBottom = searchBarView.getPaddingBottom();
|
||||
final int paddingStart = Utils.dipToPixels(8);
|
||||
final int paddingStart = Dim.dp8;
|
||||
|
||||
if (Utils.isRightToLeftLocale()) {
|
||||
searchBarView.setPadding(paddingLeft, paddingTop, paddingStart, paddingBottom);
|
||||
|
||||
@@ -2,7 +2,6 @@ package app.revanced.extension.youtube.patches.announcements;
|
||||
|
||||
import static android.text.Html.FROM_HTML_MODE_COMPACT;
|
||||
import static app.revanced.extension.shared.StringRef.str;
|
||||
import static app.revanced.extension.shared.Utils.dipToPixels;
|
||||
import static app.revanced.extension.youtube.patches.announcements.requests.AnnouncementsRoutes.GET_LATEST_ANNOUNCEMENTS;
|
||||
import static app.revanced.extension.youtube.patches.announcements.requests.AnnouncementsRoutes.GET_LATEST_ANNOUNCEMENT_IDS;
|
||||
|
||||
@@ -24,6 +23,7 @@ import java.time.LocalDateTime;
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.requests.Requester;
|
||||
import app.revanced.extension.shared.ui.Dim;
|
||||
import app.revanced.extension.youtube.patches.announcements.requests.AnnouncementsRoutes;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
@@ -148,7 +148,7 @@ public final class AnnouncementsPatch {
|
||||
if (child instanceof TextView childTextView && finalTitle.equals(childTextView.getText().toString())) {
|
||||
childTextView.setCompoundDrawablesWithIntrinsicBounds(
|
||||
finalLevel.icon, 0, 0, 0);
|
||||
childTextView.setCompoundDrawablePadding(dipToPixels(8));
|
||||
childTextView.setCompoundDrawablePadding(Dim.dp8);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,15 +7,15 @@ import app.revanced.extension.youtube.shared.PlayerType;
|
||||
@SuppressWarnings("unused")
|
||||
final class DescriptionComponentsFilter extends Filter {
|
||||
|
||||
private static final String INFOCARDS_SECTION_PATH = "infocards_section.e";
|
||||
|
||||
private final StringTrieSearch exceptions = new StringTrieSearch();
|
||||
|
||||
private final ByteArrayFilterGroupList macroMarkersCarouselGroupList = new ByteArrayFilterGroupList();
|
||||
|
||||
private final StringFilterGroup macroMarkersCarousel;
|
||||
|
||||
private final ByteArrayFilterGroupList macroMarkersCarouselGroupList = new ByteArrayFilterGroupList();
|
||||
private final StringFilterGroup horizontalShelf;
|
||||
private final ByteArrayFilterGroup cellVideoAttribute;
|
||||
|
||||
private final StringFilterGroup infoCardsSection;
|
||||
private final StringFilterGroup subscribeButton;
|
||||
private final StringFilterGroup aiGeneratedVideoSummarySection;
|
||||
private final StringFilterGroup hypePoints;
|
||||
|
||||
@@ -44,9 +44,14 @@ final class DescriptionComponentsFilter extends Filter {
|
||||
"video_attributes_section"
|
||||
);
|
||||
|
||||
final StringFilterGroup infoCardsSection = new StringFilterGroup(
|
||||
Settings.HIDE_INFO_CARDS_SECTION,
|
||||
"infocards_section"
|
||||
final StringFilterGroup featuredLinksSection = new StringFilterGroup(
|
||||
Settings.HIDE_FEATURED_LINKS_SECTION,
|
||||
"media_lockup"
|
||||
);
|
||||
|
||||
final StringFilterGroup featuredVideosSection = new StringFilterGroup(
|
||||
Settings.HIDE_FEATURED_VIDEOS_SECTION,
|
||||
"structured_description_video_lockup"
|
||||
);
|
||||
|
||||
final StringFilterGroup podcastSection = new StringFilterGroup(
|
||||
@@ -69,6 +74,16 @@ final class DescriptionComponentsFilter extends Filter {
|
||||
"hype_points_factoid"
|
||||
);
|
||||
|
||||
infoCardsSection = new StringFilterGroup(
|
||||
Settings.HIDE_INFO_CARDS_SECTION,
|
||||
INFOCARDS_SECTION_PATH
|
||||
);
|
||||
|
||||
subscribeButton = new StringFilterGroup(
|
||||
Settings.HIDE_SUBSCRIBE_BUTTON,
|
||||
"subscribe_button"
|
||||
);
|
||||
|
||||
macroMarkersCarousel = new StringFilterGroup(
|
||||
null,
|
||||
"macro_markers_carousel.e"
|
||||
@@ -99,12 +114,15 @@ final class DescriptionComponentsFilter extends Filter {
|
||||
aiGeneratedVideoSummarySection,
|
||||
askSection,
|
||||
attributesSection,
|
||||
infoCardsSection,
|
||||
featuredLinksSection,
|
||||
featuredVideosSection,
|
||||
horizontalShelf,
|
||||
howThisWasMadeSection,
|
||||
hypePoints,
|
||||
infoCardsSection,
|
||||
macroMarkersCarousel,
|
||||
podcastSection,
|
||||
subscribeButton,
|
||||
transcriptSection
|
||||
);
|
||||
}
|
||||
@@ -118,6 +136,10 @@ final class DescriptionComponentsFilter extends Filter {
|
||||
return PlayerType.getCurrent().isMaximizedOrFullscreen();
|
||||
}
|
||||
|
||||
if (matchedGroup == subscribeButton) {
|
||||
return path.startsWith(INFOCARDS_SECTION_PATH);
|
||||
}
|
||||
|
||||
if (exceptions.matches(path)) return false;
|
||||
|
||||
if (matchedGroup == macroMarkersCarousel) {
|
||||
|
||||
@@ -21,22 +21,26 @@ import app.revanced.extension.youtube.shared.PlayerType;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public final class LayoutComponentsFilter extends Filter {
|
||||
private static final StringTrieSearch mixPlaylistsExceptions = new StringTrieSearch(
|
||||
private static final StringTrieSearch mixPlaylistsContextExceptions = new StringTrieSearch(
|
||||
"V.ED", // Playlist browse id.
|
||||
"java.lang.ref.WeakReference"
|
||||
);
|
||||
private static final ByteArrayFilterGroup mixPlaylistsExceptions2 = new ByteArrayFilterGroup(
|
||||
private static final ByteArrayFilterGroup mixPlaylistsBufferExceptions = new ByteArrayFilterGroup(
|
||||
null,
|
||||
"cell_description_body"
|
||||
"cell_description_body",
|
||||
"channel_profile"
|
||||
);
|
||||
private static final ByteArrayFilterGroup mixPlaylists = new ByteArrayFilterGroup(
|
||||
null,
|
||||
"&list="
|
||||
);
|
||||
|
||||
private static final String PAGE_HEADER_PATH = "page_header.e";
|
||||
|
||||
private final StringTrieSearch exceptions = new StringTrieSearch();
|
||||
private final StringFilterGroup communityPosts;
|
||||
private final StringFilterGroup surveys;
|
||||
private final StringFilterGroup subscribeButton;
|
||||
private final StringFilterGroup notifyMe;
|
||||
private final StringFilterGroup singleItemInformationPanel;
|
||||
private final StringFilterGroup expandableMetadata;
|
||||
@@ -67,8 +71,14 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
"chips_shelf"
|
||||
);
|
||||
|
||||
final var visualSpacer = new StringFilterGroup(
|
||||
Settings.HIDE_VISUAL_SPACER,
|
||||
"cell_divider"
|
||||
);
|
||||
|
||||
addIdentifierCallbacks(
|
||||
chipsShelf
|
||||
chipsShelf,
|
||||
visualSpacer
|
||||
);
|
||||
|
||||
// Paths.
|
||||
@@ -255,19 +265,28 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
channelProfile = new StringFilterGroup(
|
||||
null,
|
||||
"channel_profile.e",
|
||||
"page_header.e"
|
||||
PAGE_HEADER_PATH
|
||||
);
|
||||
channelProfileBuffer = new ByteArrayFilterGroupList();
|
||||
channelProfileBuffer.addAll(new ByteArrayFilterGroup(
|
||||
Settings.HIDE_VISIT_STORE_BUTTON,
|
||||
"header_store_button"
|
||||
Settings.HIDE_STORE_BUTTON,
|
||||
"store_button"
|
||||
),
|
||||
new ByteArrayFilterGroup(
|
||||
Settings.HIDE_VISIT_COMMUNITY_BUTTON,
|
||||
Settings.HIDE_COMMUNITY_BUTTON,
|
||||
"community_button"
|
||||
),
|
||||
new ByteArrayFilterGroup(
|
||||
Settings.HIDE_JOIN_BUTTON,
|
||||
"sponsor_button"
|
||||
)
|
||||
);
|
||||
|
||||
subscribeButton = new StringFilterGroup(
|
||||
Settings.HIDE_SUBSCRIBE_BUTTON_IN_CHANNEL_PAGE,
|
||||
"subscribe_button"
|
||||
);
|
||||
|
||||
horizontalShelves = new StringFilterGroup(
|
||||
Settings.HIDE_HORIZONTAL_SHELVES,
|
||||
"horizontal_video_shelf.e",
|
||||
@@ -307,6 +326,7 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
quickActions,
|
||||
relatedVideos,
|
||||
singleItemInformationPanel,
|
||||
subscribeButton,
|
||||
subscribersCommunityGuidelines,
|
||||
subscriptionsChipBar,
|
||||
surveys,
|
||||
@@ -337,6 +357,10 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
return channelProfileBuffer.check(buffer).isFiltered();
|
||||
}
|
||||
|
||||
if (matchedGroup == subscribeButton) {
|
||||
return path.startsWith(PAGE_HEADER_PATH);
|
||||
}
|
||||
|
||||
if (matchedGroup == communityPosts && NavigationBar.isBackButtonVisible()) {
|
||||
// Allow community posts on channel profile page,
|
||||
// or if viewing an individual channel in the feed.
|
||||
@@ -380,17 +404,15 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Prevent playlist items being hidden, if a mix playlist is present in it.
|
||||
if (mixPlaylistsExceptions.matches(conversionContext.toString())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Prevent hiding the description of some videos accidentally.
|
||||
if (mixPlaylistsExceptions2.check(bytes).isFiltered()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (mixPlaylists.check(bytes).isFiltered()) {
|
||||
if (mixPlaylists.check(bytes).isFiltered()
|
||||
// Prevent hiding the description of some videos accidentally.
|
||||
&& !mixPlaylistsBufferExceptions.check(bytes).isFiltered()
|
||||
// Prevent playlist items being hidden, if a mix playlist is present in it.
|
||||
// Check last since it requires creating a context string.
|
||||
//
|
||||
// FIXME: The conversion context passed in does not always generate a valid toString.
|
||||
// This string check may no longer be needed, or the patch may be broken.
|
||||
&& !mixPlaylistsContextExceptions.matches(conversionContext.toString())) {
|
||||
Logger.printDebug(() -> "Filtered mix playlist");
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -12,13 +12,9 @@ import java.util.List;
|
||||
public class PlayerFlyoutMenuItemsFilter extends Filter {
|
||||
|
||||
public static final class HideAudioFlyoutMenuAvailability implements Setting.Availability {
|
||||
private static final boolean AVAILABLE_ON_LAUNCH = !SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams();
|
||||
|
||||
@Override
|
||||
public boolean isAvailable() {
|
||||
// Check conditions of launch and now. Otherwise if spoofing is changed
|
||||
// without a restart the setting will show as available when it's not.
|
||||
return AVAILABLE_ON_LAUNCH && !SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams();
|
||||
return !SpoofVideoStreamsPatch.spoofingToClientWithNoMultiAudioStreams();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -44,9 +44,10 @@ public final class ShortsFilter extends Filter {
|
||||
private final StringFilterGroup useTemplateButton;
|
||||
private final ByteArrayFilterGroup useTemplateButtonBuffer;
|
||||
|
||||
private final StringFilterGroup autoDubbedLabel;
|
||||
private final StringFilterGroup subscribeButton;
|
||||
private final StringFilterGroup joinButton;
|
||||
private final StringFilterGroup paidPromotionButton;
|
||||
private final StringFilterGroup paidPromotionLabel;
|
||||
private final StringFilterGroup shelfHeader;
|
||||
|
||||
private final StringFilterGroup suggestedAction;
|
||||
@@ -161,6 +162,18 @@ public final class ShortsFilter extends Filter {
|
||||
"participation_bar.e"
|
||||
);
|
||||
|
||||
StringFilterGroup livePreview = new StringFilterGroup(
|
||||
Settings.HIDE_SHORTS_LIVE_PREVIEW,
|
||||
// Live Shorts preview that can popup while scrolling through Shorts player.
|
||||
// Can be removed if a way to disable live Shorts is found.
|
||||
"live_preview_page_vm.e"
|
||||
);
|
||||
|
||||
autoDubbedLabel = new StringFilterGroup(
|
||||
Settings.HIDE_SHORTS_AUTO_DUBBED_LABEL,
|
||||
"badge."
|
||||
);
|
||||
|
||||
joinButton = new StringFilterGroup(
|
||||
Settings.HIDE_SHORTS_JOIN_BUTTON,
|
||||
"sponsor_button"
|
||||
@@ -171,9 +184,10 @@ public final class ShortsFilter extends Filter {
|
||||
"subscribe_button"
|
||||
);
|
||||
|
||||
paidPromotionButton = new StringFilterGroup(
|
||||
paidPromotionLabel = new StringFilterGroup(
|
||||
Settings.HIDE_PAID_PROMOTION_LABEL,
|
||||
"reel_player_disclosure.e"
|
||||
"reel_player_disclosure.e",
|
||||
"shorts_disclosures.e"
|
||||
);
|
||||
|
||||
shortsActionBar = new StringFilterGroup(
|
||||
@@ -219,10 +233,10 @@ public final class ShortsFilter extends Filter {
|
||||
);
|
||||
|
||||
addPathCallbacks(
|
||||
shortsCompactFeedVideo, joinButton, subscribeButton, paidPromotionButton,
|
||||
shortsCompactFeedVideo, joinButton, subscribeButton, paidPromotionLabel, autoDubbedLabel,
|
||||
shortsActionBar, suggestedAction, pausedOverlayButtons, channelBar, previewComment,
|
||||
fullVideoLinkLabel, videoTitle, useSoundButton, reelSoundMetadata, soundButton, infoPanel,
|
||||
stickers, likeFountain, likeButton, dislikeButton
|
||||
stickers, likeFountain, likeButton, dislikeButton, livePreview
|
||||
);
|
||||
|
||||
//
|
||||
@@ -250,6 +264,12 @@ public final class ShortsFilter extends Filter {
|
||||
// Suggested actions.
|
||||
//
|
||||
suggestedActionsBuffer.addAll(
|
||||
new ByteArrayFilterGroup(
|
||||
Settings.HIDE_SHORTS_PREVIEW_COMMENT,
|
||||
// Preview comment that can popup while a Short is playing.
|
||||
// Uses no bundled icons, and instead the users profile photo is shown.
|
||||
"shorts-comments-panel"
|
||||
),
|
||||
new ByteArrayFilterGroup(
|
||||
Settings.HIDE_SHORTS_SHOP_BUTTON,
|
||||
"yt_outline_bag_"
|
||||
@@ -322,7 +342,8 @@ public final class ShortsFilter extends Filter {
|
||||
boolean isFiltered(String identifier, String path, byte[] buffer,
|
||||
StringFilterGroup matchedGroup, FilterContentType contentType, int contentIndex) {
|
||||
if (contentType == FilterContentType.PATH) {
|
||||
if (matchedGroup == subscribeButton || matchedGroup == joinButton || matchedGroup == paidPromotionButton) {
|
||||
if (matchedGroup == subscribeButton || matchedGroup == joinButton
|
||||
|| matchedGroup == paidPromotionLabel || matchedGroup == autoDubbedLabel) {
|
||||
// Selectively filter to avoid false positive filtering of other subscribe/join buttons.
|
||||
return path.startsWith(REEL_CHANNEL_BAR_PATH) || path.startsWith(REEL_METAPANEL_PATH);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package app.revanced.extension.youtube.patches.playback.speed;
|
||||
|
||||
import static app.revanced.extension.shared.StringRef.str;
|
||||
import static app.revanced.extension.shared.Utils.dipToPixels;
|
||||
import static app.revanced.extension.youtube.videoplayer.PlayerControlButton.fadeInDuration;
|
||||
import static app.revanced.extension.youtube.videoplayer.PlayerControlButton.getDialogBackgroundColor;
|
||||
|
||||
@@ -30,6 +29,7 @@ import java.util.function.Function;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.ui.Dim;
|
||||
import app.revanced.extension.shared.ui.SheetBottomDialog;
|
||||
import app.revanced.extension.youtube.patches.VideoInformation;
|
||||
import app.revanced.extension.youtube.patches.components.PlaybackSpeedMenuFilter;
|
||||
@@ -264,14 +264,6 @@ public class CustomPlaybackSpeedPatch {
|
||||
SheetBottomDialog.DraggableLinearLayout mainLayout =
|
||||
SheetBottomDialog.createMainLayout(context, getDialogBackgroundColor());
|
||||
|
||||
// Preset size constants.
|
||||
final int dip4 = dipToPixels(4);
|
||||
final int dip8 = dipToPixels(8);
|
||||
final int dip12 = dipToPixels(12);
|
||||
final int dip20 = dipToPixels(20);
|
||||
final int dip32 = dipToPixels(32);
|
||||
final int dip60 = dipToPixels(60);
|
||||
|
||||
// Display current playback speed.
|
||||
TextView currentSpeedText = new TextView(context);
|
||||
float currentSpeed = VideoInformation.getPlaybackSpeed();
|
||||
@@ -283,7 +275,7 @@ public class CustomPlaybackSpeedPatch {
|
||||
currentSpeedText.setGravity(Gravity.CENTER);
|
||||
LinearLayout.LayoutParams textParams = new LinearLayout.LayoutParams(
|
||||
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
|
||||
textParams.setMargins(0, dip20, 0, 0);
|
||||
textParams.setMargins(0, Dim.dp20, 0, 0);
|
||||
currentSpeedText.setLayoutParams(textParams);
|
||||
// Add current speed text view to main layout.
|
||||
mainLayout.addView(currentSpeedText);
|
||||
@@ -294,8 +286,8 @@ public class CustomPlaybackSpeedPatch {
|
||||
sliderLayout.setGravity(Gravity.CENTER_VERTICAL);
|
||||
|
||||
// Create +/- buttons.
|
||||
Button minusButton = createStyledButton(context, false, dip8, dip8);
|
||||
Button plusButton = createStyledButton(context, true, dip8, dip8);
|
||||
Button minusButton = createStyledButton(context, false);
|
||||
Button plusButton = createStyledButton(context, true);
|
||||
|
||||
// Create slider for speed adjustment.
|
||||
SeekBar speedSlider = new SeekBar(context);
|
||||
@@ -363,7 +355,7 @@ public class CustomPlaybackSpeedPatch {
|
||||
gridLayout.setRowCount((int) Math.ceil(customPlaybackSpeeds.length / 5.0));
|
||||
LinearLayout.LayoutParams gridParams = new LinearLayout.LayoutParams(
|
||||
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
|
||||
gridParams.setMargins(dip4, dip12, dip4, dip12); // Speed buttons container.
|
||||
gridParams.setMargins(Dim.dp4, Dim.dp12, Dim.dp4, Dim.dp12); // Speed buttons container.
|
||||
gridLayout.setLayoutParams(gridParams);
|
||||
|
||||
// For button use 1 digit minimum.
|
||||
@@ -378,8 +370,8 @@ public class CustomPlaybackSpeedPatch {
|
||||
GridLayout.LayoutParams containerParams = new GridLayout.LayoutParams();
|
||||
containerParams.width = 0; // Equal width for columns.
|
||||
containerParams.columnSpec = GridLayout.spec(GridLayout.UNDEFINED, 1, 1f);
|
||||
containerParams.setMargins(dip4, 0, dip4, 0); // Button margins.
|
||||
containerParams.height = dip60; // Fixed height for button and label.
|
||||
containerParams.setMargins(Dim.dp4, 0, Dim.dp4, 0); // Button margins.
|
||||
containerParams.height = Dim.dp(60); // Fixed height for button and label.
|
||||
buttonContainer.setLayoutParams(containerParams);
|
||||
|
||||
// Create speed button.
|
||||
@@ -391,14 +383,14 @@ public class CustomPlaybackSpeedPatch {
|
||||
speedButton.setGravity(Gravity.CENTER);
|
||||
|
||||
ShapeDrawable buttonBackground = new ShapeDrawable(new RoundRectShape(
|
||||
Utils.createCornerRadii(20), null, null));
|
||||
Dim.roundedCorners(20), null, null));
|
||||
buttonBackground.getPaint().setColor(getAdjustedBackgroundColor(false));
|
||||
speedButton.setBackground(buttonBackground);
|
||||
speedButton.setPadding(dip4, dip4, dip4, dip4);
|
||||
speedButton.setPadding(Dim.dp4, Dim.dp4, Dim.dp4, Dim.dp4);
|
||||
|
||||
// Center button vertically and stretch horizontally in container.
|
||||
FrameLayout.LayoutParams buttonParams = new FrameLayout.LayoutParams(
|
||||
FrameLayout.LayoutParams.MATCH_PARENT, dip32, Gravity.CENTER);
|
||||
FrameLayout.LayoutParams.MATCH_PARENT, Dim.dp32, Gravity.CENTER);
|
||||
speedButton.setLayoutParams(buttonParams);
|
||||
|
||||
// Add speed buttons view to buttons container layout.
|
||||
@@ -475,21 +467,18 @@ public class CustomPlaybackSpeedPatch {
|
||||
*
|
||||
* @param context The Android context used to create the button.
|
||||
* @param isPlus True to display a plus symbol, false to display a minus symbol.
|
||||
* @param marginStart The start margin in pixels (left for LTR, right for RTL).
|
||||
* @param marginEnd The end margin in pixels (right for LTR, left for RTL).
|
||||
* @return A configured {@link Button} with the specified styling and layout parameters.
|
||||
*/
|
||||
private static Button createStyledButton(Context context, boolean isPlus, int marginStart, int marginEnd) {
|
||||
private static Button createStyledButton(Context context, boolean isPlus) {
|
||||
Button button = new Button(context, null, 0); // Disable default theme style.
|
||||
button.setText(""); // No text on button.
|
||||
ShapeDrawable background = new ShapeDrawable(new RoundRectShape(
|
||||
Utils.createCornerRadii(20), null, null));
|
||||
Dim.roundedCorners(20), null, null));
|
||||
background.getPaint().setColor(getAdjustedBackgroundColor(false));
|
||||
button.setBackground(background);
|
||||
button.setForeground(new OutlineSymbolDrawable(isPlus)); // Plus or minus symbol.
|
||||
final int dip36 = dipToPixels(36);
|
||||
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(dip36, dip36);
|
||||
params.setMargins(marginStart, 0, marginEnd, 0); // Set margins.
|
||||
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(Dim.dp36, Dim.dp36);
|
||||
params.setMargins(Dim.dp8, 0, Dim.dp8, 0); // Set margins.
|
||||
button.setLayoutParams(params);
|
||||
return button;
|
||||
}
|
||||
@@ -554,7 +543,7 @@ class OutlineSymbolDrawable extends Drawable {
|
||||
paint = new Paint(Paint.ANTI_ALIAS_FLAG); // Enable anti-aliasing for smooth rendering.
|
||||
paint.setColor(Utils.getAppForegroundColor());
|
||||
paint.setStyle(Paint.Style.STROKE); // Use stroke style for outline.
|
||||
paint.setStrokeWidth(dipToPixels(1)); // 1dp stroke width.
|
||||
paint.setStrokeWidth(Dim.dp1); // 1dp stroke width.
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -40,6 +40,7 @@ import java.util.concurrent.TimeoutException;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.ui.Dim;
|
||||
import app.revanced.extension.youtube.returnyoutubedislike.requests.RYDVoteData;
|
||||
import app.revanced.extension.youtube.returnyoutubedislike.requests.ReturnYouTubeDislikeApi;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
@@ -124,12 +125,12 @@ public class ReturnYouTubeDislike {
|
||||
|
||||
static {
|
||||
leftSeparatorBounds = new Rect(0, 0,
|
||||
Utils.dipToPixels(1.2f),
|
||||
Utils.dipToPixels(14f));
|
||||
final int middleSeparatorSize = Utils.dipToPixels(3.7f);
|
||||
Dim.dp(1.2f),
|
||||
Dim.dp(14f));
|
||||
final int middleSeparatorSize = Dim.dp(3.7f);
|
||||
middleSeparatorBounds = new Rect(0, 0, middleSeparatorSize, middleSeparatorSize);
|
||||
|
||||
leftSeparatorShapePaddingPixels = Utils.dipToPixels(8.4f);
|
||||
leftSeparatorShapePaddingPixels = Dim.dp(8.4f);
|
||||
|
||||
leftSeparatorShape = new ShapeDrawable(new RectShape());
|
||||
leftSeparatorShape.setBounds(leftSeparatorBounds);
|
||||
|
||||
@@ -3,6 +3,7 @@ package app.revanced.extension.youtube.settings;
|
||||
import static java.lang.Boolean.FALSE;
|
||||
import static java.lang.Boolean.TRUE;
|
||||
import static app.revanced.extension.shared.settings.Setting.parent;
|
||||
import static app.revanced.extension.shared.settings.Setting.parentNot;
|
||||
import static app.revanced.extension.shared.settings.Setting.parentsAll;
|
||||
import static app.revanced.extension.shared.settings.Setting.parentsAny;
|
||||
import static app.revanced.extension.youtube.patches.ChangeFormFactorPatch.FormFactor;
|
||||
@@ -115,6 +116,7 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting HIDE_UPLOAD_TIME = new BooleanSetting("revanced_hide_upload_time", FALSE, "revanced_hide_upload_time_user_dialog_message");
|
||||
public static final BooleanSetting HIDE_VIDEO_RECOMMENDATION_LABELS = new BooleanSetting("revanced_hide_video_recommendation_labels", TRUE);
|
||||
public static final BooleanSetting HIDE_VIEW_COUNT = new BooleanSetting("revanced_hide_view_count", FALSE, "revanced_hide_view_count_user_dialog_message");
|
||||
public static final BooleanSetting HIDE_VISUAL_SPACER = new BooleanSetting("revanced_hide_visual_spacer", TRUE);
|
||||
|
||||
// Alternative thumbnails
|
||||
public static final EnumSetting<ThumbnailOption> ALT_THUMBNAIL_HOME = new EnumSetting<>("revanced_alt_thumbnail_home", ThumbnailOption.ORIGINAL);
|
||||
@@ -136,11 +138,13 @@ public class Settings extends BaseSettings {
|
||||
parentsAny(HIDE_KEYWORD_CONTENT_HOME, HIDE_KEYWORD_CONTENT_SUBSCRIPTIONS, HIDE_KEYWORD_CONTENT_SEARCH));
|
||||
|
||||
// Channel page
|
||||
public static final BooleanSetting HIDE_COMMUNITY_BUTTON = new BooleanSetting("revanced_hide_community_button", TRUE);
|
||||
public static final BooleanSetting HIDE_FOR_YOU_SHELF = new BooleanSetting("revanced_hide_for_you_shelf", FALSE);
|
||||
public static final BooleanSetting HIDE_JOIN_BUTTON = new BooleanSetting("revanced_hide_join_button", FALSE);
|
||||
public static final BooleanSetting HIDE_LINKS_PREVIEW = new BooleanSetting("revanced_hide_links_preview", TRUE);
|
||||
public static final BooleanSetting HIDE_MEMBERS_SHELF = new BooleanSetting("revanced_hide_members_shelf", TRUE);
|
||||
public static final BooleanSetting HIDE_VISIT_COMMUNITY_BUTTON = new BooleanSetting("revanced_hide_visit_community_button", TRUE);
|
||||
public static final BooleanSetting HIDE_VISIT_STORE_BUTTON = new BooleanSetting("revanced_hide_visit_store_button", TRUE);
|
||||
public static final BooleanSetting HIDE_STORE_BUTTON = new BooleanSetting("revanced_hide_store_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SUBSCRIBE_BUTTON_IN_CHANNEL_PAGE = new BooleanSetting("revanced_hide_subscribe_button_in_channel_page", FALSE);
|
||||
|
||||
// Player
|
||||
public static final BooleanSetting COPY_VIDEO_URL = new BooleanSetting("revanced_copy_video_url", FALSE);
|
||||
@@ -213,6 +217,9 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting HIDE_HOW_THIS_WAS_MADE_SECTION = new BooleanSetting("revanced_hide_how_this_was_made_section", FALSE);
|
||||
public static final BooleanSetting HIDE_HYPE_POINTS = new BooleanSetting("revanced_hide_hype_points", FALSE);
|
||||
public static final BooleanSetting HIDE_INFO_CARDS_SECTION = new BooleanSetting("revanced_hide_info_cards_section", TRUE);
|
||||
public static final BooleanSetting HIDE_FEATURED_LINKS_SECTION = new BooleanSetting("revanced_hide_featured_links_section", FALSE, parentNot(HIDE_INFO_CARDS_SECTION));
|
||||
public static final BooleanSetting HIDE_FEATURED_VIDEOS_SECTION = new BooleanSetting("revanced_hide_featured_videos_section", FALSE, parentNot(HIDE_INFO_CARDS_SECTION));
|
||||
public static final BooleanSetting HIDE_SUBSCRIBE_BUTTON = new BooleanSetting("revanced_hide_subscribe_button", FALSE, parentNot(HIDE_INFO_CARDS_SECTION));
|
||||
public static final BooleanSetting HIDE_KEY_CONCEPTS_SECTION = new BooleanSetting("revanced_hide_key_concepts_section", FALSE);
|
||||
public static final BooleanSetting HIDE_PODCAST_SECTION = new BooleanSetting("revanced_hide_podcast_section", TRUE);
|
||||
public static final BooleanSetting HIDE_TRANSCRIPT_SECTION = new BooleanSetting("revanced_hide_transcript_section", TRUE);
|
||||
@@ -226,11 +233,11 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting HIDE_HYPE_BUTTON = new BooleanSetting("revanced_hide_hype_button", FALSE);
|
||||
public static final BooleanSetting HIDE_LIKE_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_like_dislike_button", FALSE);
|
||||
public static final BooleanSetting HIDE_PROMOTE_BUTTON = new BooleanSetting("revanced_hide_promote_button", FALSE);
|
||||
public static final BooleanSetting HIDE_REMIX_BUTTON = new BooleanSetting("revanced_hide_remix_button", TRUE);
|
||||
public static final BooleanSetting HIDE_REMIX_BUTTON = new BooleanSetting("revanced_hide_remix_button", FALSE);
|
||||
public static final BooleanSetting HIDE_REPORT_BUTTON = new BooleanSetting("revanced_hide_report_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SAVE_BUTTON = new BooleanSetting("revanced_hide_save_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHARE_BUTTON = new BooleanSetting("revanced_hide_share_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHOP_BUTTON = new BooleanSetting("revanced_hide_shop_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHOP_BUTTON = new BooleanSetting("revanced_hide_shop_button", TRUE);
|
||||
public static final BooleanSetting HIDE_STOP_ADS_BUTTON = new BooleanSetting("revanced_hide_stop_ads_button", TRUE);
|
||||
public static final BooleanSetting HIDE_THANKS_BUTTON = new BooleanSetting("revanced_hide_thanks_button", TRUE);
|
||||
|
||||
@@ -290,6 +297,7 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting DISABLE_RESUMING_SHORTS_PLAYER = new BooleanSetting("revanced_disable_resuming_shorts_player", FALSE);
|
||||
public static final BooleanSetting DISABLE_SHORTS_BACKGROUND_PLAYBACK = new BooleanSetting("revanced_shorts_disable_background_playback", FALSE);
|
||||
public static final EnumSetting<ShortsPlayerType> SHORTS_PLAYER_TYPE = new EnumSetting<>("revanced_shorts_player_type", ShortsPlayerType.SHORTS_PLAYER);
|
||||
public static final BooleanSetting HIDE_SHORTS_AUTO_DUBBED_LABEL = new BooleanSetting("revanced_hide_shorts_auto_dubbed_label", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_CHANNEL_BAR = new BooleanSetting("revanced_hide_shorts_channel_bar", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_COMMENTS_BUTTON = new BooleanSetting("revanced_hide_shorts_comments_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_shorts_dislike_button", FALSE);
|
||||
@@ -304,11 +312,12 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting HIDE_SHORTS_JOIN_BUTTON = new BooleanSetting("revanced_hide_shorts_join_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_LIKE_BUTTON = new BooleanSetting("revanced_hide_shorts_like_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_LIKE_FOUNTAIN = new BooleanSetting("revanced_hide_shorts_like_fountain", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_LIVE_PREVIEW = new BooleanSetting("revanced_hide_shorts_live_preview", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_LOCATION_LABEL = new BooleanSetting("revanced_hide_shorts_location_label", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_NAVIGATION_BAR = new BooleanSetting("revanced_hide_shorts_navigation_bar", FALSE, true);
|
||||
public static final BooleanSetting HIDE_SHORTS_PAUSED_OVERLAY_BUTTONS = new BooleanSetting("revanced_hide_shorts_paused_overlay_buttons", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_PREVIEW_COMMENT = new BooleanSetting("revanced_hide_shorts_preview_comment", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_REMIX_BUTTON = new BooleanSetting("revanced_hide_shorts_remix_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_REMIX_BUTTON = new BooleanSetting("revanced_hide_shorts_remix_button", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SAVE_SOUND_BUTTON = new BooleanSetting("revanced_hide_shorts_save_sound_button", TRUE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SEARCH = new BooleanSetting("revanced_hide_shorts_search", FALSE);
|
||||
public static final BooleanSetting HIDE_SHORTS_SEARCH_SUGGESTIONS = new BooleanSetting("revanced_hide_shorts_search_suggestions", TRUE);
|
||||
|
||||
@@ -2,7 +2,6 @@ package app.revanced.extension.youtube.settings.preference;
|
||||
|
||||
import static app.revanced.extension.shared.StringRef.sf;
|
||||
import static app.revanced.extension.shared.StringRef.str;
|
||||
import static app.revanced.extension.shared.Utils.dipToPixels;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
@@ -15,13 +14,9 @@ import android.os.Bundle;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Pair;
|
||||
import android.util.TypedValue;
|
||||
import android.view.View;
|
||||
import android.widget.EditText;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ListAdapter;
|
||||
import android.widget.ListView;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -37,6 +32,7 @@ import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.settings.preference.CustomDialogListPreference;
|
||||
import app.revanced.extension.shared.ui.CustomDialog;
|
||||
import app.revanced.extension.shared.ui.Dim;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
|
||||
/**
|
||||
@@ -264,42 +260,12 @@ public class ExternalDownloaderPreference extends CustomDialogListPreference {
|
||||
|
||||
// Add ListView to content layout with initial height.
|
||||
LinearLayout.LayoutParams listViewParams = new LinearLayout.LayoutParams(
|
||||
LinearLayout.LayoutParams.MATCH_PARENT,
|
||||
0 // Initial height, will be updated.
|
||||
);
|
||||
listViewParams.bottomMargin = dipToPixels(16);
|
||||
LinearLayout.LayoutParams.MATCH_PARENT, 0, 1.0f);
|
||||
listViewParams.bottomMargin = Dim.dp16;
|
||||
contentLayout.addView(listView, listViewParams);
|
||||
|
||||
// Add EditText for custom package name.
|
||||
editText = new EditText(context);
|
||||
editText.setText(packageName);
|
||||
editText.setSelection(packageName.length());
|
||||
editText.setHint(str("revanced_external_downloader_other_item_hint"));
|
||||
editText.setSingleLine(true); // Restrict EditText to a single line.
|
||||
editText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
|
||||
// Set initial EditText state based on selected downloader.
|
||||
editText.setEnabled(usingCustomDownloader);
|
||||
editText.addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable edit) {
|
||||
String updatedPackageName = edit.toString().trim();
|
||||
updateListViewSelection.apply(updatedPackageName);
|
||||
}
|
||||
});
|
||||
|
||||
ShapeDrawable editTextBackground = new ShapeDrawable(new RoundRectShape(
|
||||
Utils.createCornerRadii(10), null, null));
|
||||
editTextBackground.getPaint().setColor(Utils.getEditTextBackground());
|
||||
final int dip8 = dipToPixels(8);
|
||||
editText.setPadding(dip8, dip8, dip8, dip8);
|
||||
editText.setBackground(editTextBackground);
|
||||
editText.setClipToOutline(true);
|
||||
editText = createEditText(context, packageName, usingCustomDownloader, updateListViewSelection);
|
||||
contentLayout.addView(editText);
|
||||
|
||||
// Create the custom dialog.
|
||||
@@ -350,50 +316,59 @@ public class ExternalDownloaderPreference extends CustomDialogListPreference {
|
||||
);
|
||||
|
||||
// Add the content layout directly to the dialog's main layout.
|
||||
LinearLayout dialogMainLayout = dialogPair.second;
|
||||
dialogMainLayout.addView(contentLayout, dialogMainLayout.getChildCount() - 1);
|
||||
LinearLayout mainLayout = dialogPair.second;
|
||||
LinearLayout.LayoutParams contentParams = new LinearLayout.LayoutParams(
|
||||
LinearLayout.LayoutParams.MATCH_PARENT, 0, 1.0f);
|
||||
|
||||
// Update ListView height dynamically based on orientation.
|
||||
//noinspection ExtractMethodRecommender
|
||||
Runnable updateListViewHeight = () -> {
|
||||
int totalHeight = 0;
|
||||
ListAdapter listAdapter = listView.getAdapter();
|
||||
if (listAdapter != null) {
|
||||
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
|
||||
final int listAdapterCount = listAdapter.getCount();
|
||||
for (int i = 0; i < listAdapterCount; i++) {
|
||||
View item = listAdapter.getView(i, null, listView);
|
||||
item.measure(
|
||||
View.MeasureSpec.makeMeasureSpec(metrics.widthPixels, View.MeasureSpec.AT_MOST),
|
||||
View.MeasureSpec.UNSPECIFIED
|
||||
);
|
||||
totalHeight += item.getMeasuredHeight();
|
||||
}
|
||||
totalHeight += listView.getDividerHeight() * (listAdapterCount - 1);
|
||||
// Insert content before the dialog button row.
|
||||
mainLayout.addView(contentLayout, mainLayout.getChildCount() - 1, contentParams);
|
||||
|
||||
Dialog dialog = dialogPair.first;
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates and configures the EditText for the custom package name.
|
||||
*
|
||||
* @param context Context for creating views.
|
||||
* @param initialPackageName The package name to pre-fill.
|
||||
* @param isCustom Whether the "Other" option is selected.
|
||||
* @param textChangeCallback Callback to run when text changes.
|
||||
* @return A configured EditText.
|
||||
*/
|
||||
private EditText createEditText(Context context,
|
||||
String initialPackageName, boolean isCustom,
|
||||
Function<String, Void> textChangeCallback) {
|
||||
EditText editText = new EditText(context);
|
||||
editText.setText(initialPackageName);
|
||||
editText.setSelection(initialPackageName.length());
|
||||
editText.setHint(str("revanced_external_downloader_other_item_hint"));
|
||||
editText.setSingleLine(true);
|
||||
editText.setTextSize(16);
|
||||
editText.setEnabled(isCustom);
|
||||
|
||||
editText.addTextChangedListener(new TextWatcher() {
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable edit) {
|
||||
String updatedPackageName = edit.toString().trim();
|
||||
textChangeCallback.apply(updatedPackageName);
|
||||
}
|
||||
});
|
||||
|
||||
final int orientation = context.getResources().getConfiguration().orientation;
|
||||
if (orientation == android.content.res.Configuration.ORIENTATION_PORTRAIT) {
|
||||
// In portrait orientation, use WRAP_CONTENT for ListView height.
|
||||
listViewParams.height = LinearLayout.LayoutParams.WRAP_CONTENT;
|
||||
} else {
|
||||
// In landscape orientation, limit ListView height to 30% of screen height.
|
||||
final int maxHeight = Utils.percentageHeightToPixels(30);
|
||||
listViewParams.height = Math.min(totalHeight, maxHeight);
|
||||
}
|
||||
listView.setLayoutParams(listViewParams);
|
||||
};
|
||||
ShapeDrawable editTextBackground = new ShapeDrawable(new RoundRectShape(
|
||||
Dim.roundedCorners(10), null, null));
|
||||
editTextBackground.getPaint().setColor(Utils.getEditTextBackground());
|
||||
editText.setPadding(Dim.dp8, Dim.dp8, Dim.dp8, Dim.dp8);
|
||||
editText.setBackground(editTextBackground);
|
||||
editText.setClipToOutline(true);
|
||||
|
||||
// Initial height calculation.
|
||||
updateListViewHeight.run();
|
||||
|
||||
// Listen for configuration changes (e.g., orientation).
|
||||
View dialogView = dialogPair.second;
|
||||
// Recalculate height when layout changes (e.g., orientation change).
|
||||
dialogView.getViewTreeObserver().addOnGlobalLayoutListener(updateListViewHeight::run);
|
||||
|
||||
// Show the dialog.
|
||||
dialogPair.first.show();
|
||||
return editText;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package app.revanced.extension.youtube.sponsorblock;
|
||||
|
||||
import static app.revanced.extension.shared.StringRef.str;
|
||||
import static app.revanced.extension.shared.Utils.dipToPixels;
|
||||
import static app.revanced.extension.youtube.sponsorblock.objects.CategoryBehaviour.SKIP_AUTOMATICALLY;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
@@ -34,6 +33,7 @@ import java.util.Objects;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.ui.Dim;
|
||||
import app.revanced.extension.youtube.patches.VideoInformation;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
import app.revanced.extension.youtube.shared.PlayerType;
|
||||
@@ -82,7 +82,7 @@ public class SegmentPlaybackController {
|
||||
* Highlight segments have zero length as they are a point in time.
|
||||
* Draw them on screen using a fixed width bar.
|
||||
*/
|
||||
private static final int HIGHLIGHT_SEGMENT_DRAW_BAR_WIDTH = dipToPixels(7);
|
||||
private static final int HIGHLIGHT_SEGMENT_DRAW_BAR_WIDTH = Dim.dp7;
|
||||
|
||||
@Nullable
|
||||
private static String currentVideoId;
|
||||
@@ -808,14 +808,12 @@ public class SegmentPlaybackController {
|
||||
|
||||
LinearLayout mainLayout = new LinearLayout(currentContext);
|
||||
mainLayout.setOrientation(LinearLayout.VERTICAL);
|
||||
final int dip8 = dipToPixels(8);
|
||||
final int dip16 = dipToPixels(16);
|
||||
mainLayout.setPadding(dip16, dip8, dip16, dip8);
|
||||
mainLayout.setPadding(Dim.dp16, Dim.dp8, Dim.dp16, Dim.dp8);
|
||||
mainLayout.setGravity(Gravity.CENTER);
|
||||
mainLayout.setMinimumHeight(dipToPixels(48));
|
||||
mainLayout.setMinimumHeight(Dim.dp48);
|
||||
|
||||
ShapeDrawable background = new ShapeDrawable(new RoundRectShape(
|
||||
Utils.createCornerRadii(20), null, null));
|
||||
Dim.roundedCorners(20), null, null));
|
||||
background.getPaint().setColor(Utils.getDialogBackgroundColor());
|
||||
mainLayout.setBackground(background);
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package app.revanced.extension.youtube.sponsorblock.objects;
|
||||
|
||||
import static app.revanced.extension.shared.StringRef.str;
|
||||
import static app.revanced.extension.shared.Utils.dipToPixels;
|
||||
import static app.revanced.extension.youtube.sponsorblock.SponsorBlockSettings.migrateOldColorString;
|
||||
|
||||
import android.content.Context;
|
||||
@@ -17,6 +16,7 @@ import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.Utils;
|
||||
import app.revanced.extension.shared.settings.preference.ColorPickerPreference;
|
||||
import app.revanced.extension.shared.ui.ColorDot;
|
||||
import app.revanced.extension.shared.ui.Dim;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class SegmentCategoryPreference extends ColorPickerPreference {
|
||||
@@ -110,7 +110,7 @@ public class SegmentCategoryPreference extends ColorPickerPreference {
|
||||
}
|
||||
|
||||
radioGroup.setOnCheckedChangeListener((group, checkedId) -> selectedDialogEntryIndex = checkedId);
|
||||
radioGroup.setPadding(dipToPixels(10), 0, dipToPixels(10), dipToPixels(10));
|
||||
radioGroup.setPadding(Dim.dp10, 0, Dim.dp10, Dim.dp10);
|
||||
return radioGroup;
|
||||
}
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ import android.widget.FrameLayout;
|
||||
import android.widget.ImageButton;
|
||||
|
||||
import app.revanced.extension.shared.Logger;
|
||||
import app.revanced.extension.shared.ui.Dim;
|
||||
import app.revanced.extension.youtube.patches.VideoInformation;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
import app.revanced.extension.youtube.sponsorblock.SponsorBlockUtils;
|
||||
@@ -132,9 +133,7 @@ public final class NewSegmentLayout extends FrameLayout {
|
||||
|
||||
GradientDrawable backgroundDrawable = new GradientDrawable();
|
||||
backgroundDrawable.setColor(getResourceColor("skip_ad_button_background_color"));
|
||||
final float cornerRadius = squareLayout
|
||||
? 0
|
||||
: 16 * getResources().getDisplayMetrics().density;
|
||||
final float cornerRadius = squareLayout ? 0f : Dim.dp16;
|
||||
backgroundDrawable.setCornerRadius(cornerRadius);
|
||||
setBackground(backgroundDrawable);
|
||||
}
|
||||
|
||||
@@ -18,7 +18,6 @@ import android.preference.SwitchPreference;
|
||||
import android.text.InputType;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Pair;
|
||||
import android.util.TypedValue;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.EditText;
|
||||
@@ -34,6 +33,7 @@ import app.revanced.extension.shared.settings.Setting;
|
||||
import app.revanced.extension.shared.settings.preference.CustomDialogListPreference;
|
||||
import app.revanced.extension.shared.settings.preference.ResettableEditTextPreference;
|
||||
import app.revanced.extension.shared.ui.CustomDialog;
|
||||
import app.revanced.extension.shared.ui.Dim;
|
||||
import app.revanced.extension.youtube.settings.Settings;
|
||||
import app.revanced.extension.youtube.sponsorblock.SegmentPlaybackController;
|
||||
import app.revanced.extension.youtube.sponsorblock.SponsorBlockSettings;
|
||||
@@ -507,7 +507,7 @@ public class SponsorBlockPreferenceGroup extends PreferenceGroup {
|
||||
EditText editText = getEditText();
|
||||
|
||||
editText.setInputType(editText.getInputType() | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
|
||||
editText.setTextSize(TypedValue.COMPLEX_UNIT_PT, 7); // Use a smaller font to reduce text wrap.
|
||||
editText.setTextSize(14);
|
||||
|
||||
// Create a custom dialog.
|
||||
Pair<Dialog, LinearLayout> dialogPair = CustomDialog.create(
|
||||
@@ -550,7 +550,7 @@ public class SponsorBlockPreferenceGroup extends PreferenceGroup {
|
||||
| InputType.TYPE_TEXT_FLAG_MULTI_LINE
|
||||
| InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
|
||||
editText.setAutofillHints((String) null);
|
||||
editText.setTextSize(TypedValue.COMPLEX_UNIT_PT, 8);
|
||||
editText.setTextSize(14);
|
||||
|
||||
// Set preference listeners.
|
||||
importExport.setOnPreferenceClickListener(preference1 -> {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package app.revanced.extension.youtube.videoplayer;
|
||||
|
||||
import static app.revanced.extension.shared.StringRef.str;
|
||||
import static app.revanced.extension.shared.Utils.dipToPixels;
|
||||
import static app.revanced.extension.shared.settings.preference.CustomDialogListPreference.*;
|
||||
import static app.revanced.extension.youtube.patches.VideoInformation.AUTOMATIC_VIDEO_QUALITY_VALUE;
|
||||
import static app.revanced.extension.youtube.patches.VideoInformation.VIDEO_QUALITY_PREMIUM_NAME;
|
||||
@@ -21,6 +20,7 @@ import android.widget.*;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import app.revanced.extension.shared.ui.Dim;
|
||||
import app.revanced.extension.shared.ui.SheetBottomDialog;
|
||||
import app.revanced.extension.youtube.shared.PlayerType;
|
||||
import com.google.android.libraries.youtube.innertube.model.media.VideoQuality;
|
||||
@@ -214,11 +214,6 @@ public class VideoQualityDialogButton {
|
||||
}
|
||||
}
|
||||
|
||||
// Preset size constants.
|
||||
final int dip8 = dipToPixels(8);
|
||||
final int dip12 = dipToPixels(12);
|
||||
final int dip16 = dipToPixels(16);
|
||||
|
||||
// Create main layout.
|
||||
SheetBottomDialog.DraggableLinearLayout mainLayout =
|
||||
SheetBottomDialog.createMainLayout(context, getDialogBackgroundColor());
|
||||
@@ -269,7 +264,7 @@ public class VideoQualityDialogButton {
|
||||
LinearLayout.LayoutParams titleParams = new LinearLayout.LayoutParams(
|
||||
LinearLayout.LayoutParams.WRAP_CONTENT,
|
||||
LinearLayout.LayoutParams.WRAP_CONTENT);
|
||||
titleParams.setMargins(dip12, dip16, 0, dip16);
|
||||
titleParams.setMargins(Dim.dp12, Dim.dp16, 0, Dim.dp16);
|
||||
titleView.setLayoutParams(titleParams);
|
||||
mainLayout.addView(titleView);
|
||||
|
||||
|
||||
@@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
|
||||
org.gradle.parallel = true
|
||||
android.useAndroidX = true
|
||||
kotlin.code.style = official
|
||||
version = 5.46.0-dev.5
|
||||
version = 5.47.0
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
public final class DisableReelsScrollingPatchKt {
|
||||
public static final fun getDisableReelsScrollingPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/all/misc/activity/exportall/ExportAllActivitiesPatchKt {
|
||||
public static final fun getExportAllActivitiesPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
|
||||
}
|
||||
@@ -56,6 +60,10 @@ public final class app/revanced/patches/all/misc/connectivity/telephony/sim/spoo
|
||||
public static final fun getSpoofSimCountryPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/all/misc/connectivity/telephony/sim/spoof/SpoofSimProviderPatchKt {
|
||||
public static final fun getSpoofSimProviderPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/all/misc/connectivity/wifi/spoof/SpoofWifiPatchKt {
|
||||
public static final fun getSpoofWifiPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -180,6 +188,10 @@ public final class app/revanced/patches/crunchyroll/ads/HideAdsPatchKt {
|
||||
public static final fun getHideAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/disneyplus/ads/SkipAdsPatchKt {
|
||||
public static final fun getSkipAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/duolingo/ad/DisableAdsPatchKt {
|
||||
public static final fun getDisableAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -256,6 +268,10 @@ public final class app/revanced/patches/iconpackstudio/misc/pro/UnlockProPatchKt
|
||||
public static final fun getUnlockProPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/idaustria/detection/deviceintegrity/RemoveDeviceIntegrityChecksPatchKt {
|
||||
public static final fun getRemoveDeviceIntegrityChecksPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/idaustria/detection/root/RootDetectionPatchKt {
|
||||
public static final fun getRootDetectionPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -276,6 +292,10 @@ public final class app/revanced/patches/instagram/feed/LimitFeedToFollowedProfil
|
||||
public static final fun getLimitFeedToFollowedProfiles ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/instagram/ghost/story/AnonymousStoryViewingPatchKt {
|
||||
public static final fun getAnonymousStoryViewingPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/instagram/hide/explore/HideExploreFeedKt {
|
||||
public static final fun getHideExploreFeedPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -316,10 +336,18 @@ public final class app/revanced/patches/instagram/misc/signature/SignatureCheckP
|
||||
public static final fun getSignatureCheckPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/instagram/story/flipping/DisableStoryAutoFlippingPatchKt {
|
||||
public static final fun getDisableStoryAutoFlippingPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/irplus/ad/RemoveAdsPatchKt {
|
||||
public static final fun getRemoveAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/letterboxd/ads/HideAdsPatchKt {
|
||||
public static final fun getHideAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/lightroom/misc/login/DisableMandatoryLoginPatchKt {
|
||||
public static final fun getDisableMandatoryLoginPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -328,6 +356,10 @@ public final class app/revanced/patches/lightroom/misc/premium/UnlockPremiumPatc
|
||||
public static final fun getUnlockPremiumPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/lightroom/misc/version/DisableVersionCheckPatchKt {
|
||||
public static final fun getDisableVersionCheckPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/memegenerator/detection/license/LicenseValidationPatchKt {
|
||||
public static final fun getLicenseValidationPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -404,6 +436,10 @@ public final class app/revanced/patches/music/layout/branding/CustomBrandingPatc
|
||||
public static final fun getCustomBrandingPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/music/layout/buttons/HideButtonsKt {
|
||||
public static final fun getHideButtons ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/music/layout/castbutton/HideCastButtonKt {
|
||||
public static final fun getHideCastButton ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -412,6 +448,10 @@ public final class app/revanced/patches/music/layout/compactheader/HideCategoryB
|
||||
public static final fun getHideCategoryBar ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/music/layout/miniplayercolor/ChangeMiniplayerColorKt {
|
||||
public static final fun getChangeMiniplayerColor ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/music/layout/navigationbar/NavigationBarPatchKt {
|
||||
public static final fun getNavigationBarPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -541,6 +581,10 @@ public final class app/revanced/patches/pandora/misc/EnableUnlimitedSkipsPatchKt
|
||||
public static final fun getEnableUnlimitedSkipsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/peacocktv/ads/HideAdsPatchKt {
|
||||
public static final fun getHideAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/photomath/detection/deviceid/SpoofDeviceIdPatchKt {
|
||||
public static final fun getGetDeviceIdPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -597,6 +641,10 @@ public final class app/revanced/patches/protonmail/signature/RemoveSentFromSigna
|
||||
public static final fun getRemoveSentFromSignaturePatch ()Lapp/revanced/patcher/patch/ResourcePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/protonvpn/delay/RemoveDelayPatchKt {
|
||||
public static final fun getRemoveDelayPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/rar/misc/annoyances/purchasereminder/HidePurchaseReminderPatchKt {
|
||||
public static final fun getHidePurchaseReminderPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
@@ -1,105 +1,9 @@
|
||||
package app.revanced.patches.all.misc.connectivity.telephony.sim.spoof
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.stringOption
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||
import app.revanced.patches.all.misc.transformation.transformInstructionsPatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
import com.android.tools.smali.dexlib2.immutable.reference.ImmutableMethodReference
|
||||
import com.android.tools.smali.dexlib2.util.MethodUtil
|
||||
import java.util.*
|
||||
|
||||
@Deprecated("Patch was renamed", ReplaceWith("spoofSimProviderPatch"))
|
||||
@Suppress("unused")
|
||||
val spoofSimCountryPatch = bytecodePatch(
|
||||
name = "Spoof SIM country",
|
||||
description = "Spoofs country information returned by the SIM card provider.",
|
||||
use = false,
|
||||
) {
|
||||
val countries = Locale.getISOCountries().associateBy { Locale("", it).displayCountry }
|
||||
|
||||
fun isoCountryPatchOption(
|
||||
key: String,
|
||||
title: String,
|
||||
) = stringOption(
|
||||
key,
|
||||
null,
|
||||
countries,
|
||||
title,
|
||||
"ISO-3166-1 alpha-2 country code equivalent for the SIM provider's country code.",
|
||||
false,
|
||||
validator = { it: String? -> it == null || it.uppercase() in countries.values },
|
||||
)
|
||||
|
||||
val networkCountryIso by isoCountryPatchOption(
|
||||
"networkCountryIso",
|
||||
"Network ISO country code",
|
||||
)
|
||||
|
||||
val simCountryIso by isoCountryPatchOption(
|
||||
"simCountryIso",
|
||||
"SIM ISO country code",
|
||||
)
|
||||
|
||||
dependsOn(
|
||||
transformInstructionsPatch(
|
||||
filterMap = { _, _, instruction, instructionIndex ->
|
||||
if (instruction !is ReferenceInstruction) return@transformInstructionsPatch null
|
||||
|
||||
val reference = instruction.reference as? MethodReference ?: return@transformInstructionsPatch null
|
||||
|
||||
val match = MethodCall.entries.firstOrNull { search ->
|
||||
MethodUtil.methodSignaturesMatch(reference, search.reference)
|
||||
} ?: return@transformInstructionsPatch null
|
||||
|
||||
val iso = when (match) {
|
||||
MethodCall.NetworkCountryIso -> networkCountryIso
|
||||
MethodCall.SimCountryIso -> simCountryIso
|
||||
}?.lowercase()
|
||||
|
||||
iso?.let { instructionIndex to it }
|
||||
},
|
||||
transform = { mutableMethod, entry: Pair<Int, String> ->
|
||||
transformMethodCall(entry, mutableMethod)
|
||||
},
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
private fun transformMethodCall(
|
||||
entry: Pair<Int, String>,
|
||||
mutableMethod: MutableMethod,
|
||||
) {
|
||||
val (instructionIndex, methodCallValue) = entry
|
||||
|
||||
val register = mutableMethod.getInstruction<OneRegisterInstruction>(instructionIndex + 1).registerA
|
||||
|
||||
mutableMethod.replaceInstruction(
|
||||
instructionIndex + 1,
|
||||
"const-string v$register, \"$methodCallValue\"",
|
||||
)
|
||||
}
|
||||
|
||||
private enum class MethodCall(
|
||||
val reference: MethodReference,
|
||||
) {
|
||||
NetworkCountryIso(
|
||||
ImmutableMethodReference(
|
||||
"Landroid/telephony/TelephonyManager;",
|
||||
"getNetworkCountryIso",
|
||||
emptyList(),
|
||||
"Ljava/lang/String;",
|
||||
),
|
||||
),
|
||||
SimCountryIso(
|
||||
ImmutableMethodReference(
|
||||
"Landroid/telephony/TelephonyManager;",
|
||||
"getSimCountryIso",
|
||||
emptyList(),
|
||||
"Ljava/lang/String;",
|
||||
),
|
||||
),
|
||||
}
|
||||
val spoofSimCountryPatch = bytecodePatch {
|
||||
dependsOn(spoofSimProviderPatch)
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
package app.revanced.patches.all.misc.connectivity.telephony.sim.spoof
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.patch.intOption
|
||||
import app.revanced.patcher.patch.stringOption
|
||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||
import app.revanced.patches.all.misc.transformation.transformInstructionsPatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
import com.android.tools.smali.dexlib2.immutable.reference.ImmutableMethodReference
|
||||
import com.android.tools.smali.dexlib2.util.MethodUtil
|
||||
import java.util.Locale
|
||||
|
||||
@Suppress("unused")
|
||||
val spoofSimProviderPatch = bytecodePatch(
|
||||
name = "Spoof SIM provider",
|
||||
description = "Spoofs information about the SIM card provider.",
|
||||
use = false,
|
||||
) {
|
||||
val countries = Locale.getISOCountries().associateBy { Locale("", it).displayCountry }
|
||||
|
||||
fun isoCountryPatchOption(
|
||||
key: String,
|
||||
title: String,
|
||||
) = stringOption(
|
||||
key,
|
||||
null,
|
||||
countries,
|
||||
title,
|
||||
"ISO-3166-1 alpha-2 country code equivalent for the SIM provider's country code.",
|
||||
false,
|
||||
validator = { it: String? -> it == null || it.uppercase() in countries.values },
|
||||
)
|
||||
|
||||
fun isMccMncValid(it: Int?): Boolean = it == null || (it >= 10000 && it <= 999999)
|
||||
|
||||
val networkCountryIso by isoCountryPatchOption(
|
||||
"networkCountryIso",
|
||||
"Network ISO country code",
|
||||
)
|
||||
|
||||
val networkOperator by intOption(
|
||||
key = "networkOperator",
|
||||
title = "MCC+MNC network operator code",
|
||||
description = "The 5 or 6 digits MCC+MNC (Mobile Country Code + Mobile Network Code) of the network operator.",
|
||||
validator = { isMccMncValid(it) }
|
||||
)
|
||||
|
||||
val networkOperatorName by stringOption(
|
||||
key = "networkOperatorName",
|
||||
title = "Network operator name",
|
||||
description = "The full name of the network operator.",
|
||||
)
|
||||
|
||||
val simCountryIso by isoCountryPatchOption(
|
||||
"simCountryIso",
|
||||
"SIM ISO country code",
|
||||
)
|
||||
|
||||
val simOperator by intOption(
|
||||
key = "simOperator",
|
||||
title = "MCC+MNC SIM operator code",
|
||||
description = "The 5 or 6 digits MCC+MNC (Mobile Country Code + Mobile Network Code) of the SIM operator.",
|
||||
validator = { isMccMncValid(it) }
|
||||
)
|
||||
|
||||
val simOperatorName by stringOption(
|
||||
key = "simOperatorName",
|
||||
title = "SIM operator name",
|
||||
description = "The full name of the SIM operator.",
|
||||
)
|
||||
|
||||
dependsOn(
|
||||
transformInstructionsPatch(
|
||||
filterMap = { _, _, instruction, instructionIndex ->
|
||||
if (instruction !is ReferenceInstruction) return@transformInstructionsPatch null
|
||||
|
||||
val reference = instruction.reference as? MethodReference ?: return@transformInstructionsPatch null
|
||||
|
||||
val match = MethodCall.entries.firstOrNull { search ->
|
||||
MethodUtil.methodSignaturesMatch(reference, search.reference)
|
||||
} ?: return@transformInstructionsPatch null
|
||||
|
||||
val replacement = when (match) {
|
||||
MethodCall.NetworkCountryIso -> networkCountryIso?.lowercase()
|
||||
MethodCall.NetworkOperator -> networkOperator?.toString()
|
||||
MethodCall.NetworkOperatorName -> networkOperatorName
|
||||
MethodCall.SimCountryIso -> simCountryIso?.lowercase()
|
||||
MethodCall.SimOperator -> simOperator?.toString()
|
||||
MethodCall.SimOperatorName -> simOperatorName
|
||||
}
|
||||
replacement?.let { instructionIndex to it }
|
||||
},
|
||||
transform = ::transformMethodCall,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
private fun transformMethodCall(
|
||||
mutableMethod: MutableMethod,
|
||||
entry: Pair<Int, String>,
|
||||
) {
|
||||
val (instructionIndex, methodCallValue) = entry
|
||||
|
||||
// Get the register which would have contained the return value
|
||||
val register = mutableMethod.getInstruction<OneRegisterInstruction>(instructionIndex + 1).registerA
|
||||
|
||||
// Replace the move-result instruction with our fake value
|
||||
mutableMethod.replaceInstruction(
|
||||
instructionIndex + 1,
|
||||
"const-string v$register, \"$methodCallValue\"",
|
||||
)
|
||||
}
|
||||
|
||||
private enum class MethodCall(
|
||||
val reference: MethodReference,
|
||||
) {
|
||||
NetworkCountryIso(
|
||||
ImmutableMethodReference(
|
||||
"Landroid/telephony/TelephonyManager;",
|
||||
"getNetworkCountryIso",
|
||||
emptyList(),
|
||||
"Ljava/lang/String;",
|
||||
),
|
||||
),
|
||||
NetworkOperator(
|
||||
ImmutableMethodReference(
|
||||
"Landroid/telephony/TelephonyManager;",
|
||||
"getNetworkOperator",
|
||||
emptyList(),
|
||||
"Ljava/lang/String;",
|
||||
),
|
||||
),
|
||||
NetworkOperatorName(
|
||||
ImmutableMethodReference(
|
||||
"Landroid/telephony/TelephonyManager;",
|
||||
"getNetworkOperatorName",
|
||||
emptyList(),
|
||||
"Ljava/lang/String;",
|
||||
),
|
||||
),
|
||||
SimCountryIso(
|
||||
ImmutableMethodReference(
|
||||
"Landroid/telephony/TelephonyManager;",
|
||||
"getSimCountryIso",
|
||||
emptyList(),
|
||||
"Ljava/lang/String;",
|
||||
),
|
||||
),
|
||||
SimOperator(
|
||||
ImmutableMethodReference(
|
||||
"Landroid/telephony/TelephonyManager;",
|
||||
"getSimOperator",
|
||||
emptyList(),
|
||||
"Ljava/lang/String;",
|
||||
),
|
||||
),
|
||||
SimOperatorName(
|
||||
ImmutableMethodReference(
|
||||
"Landroid/telephony/TelephonyManager;",
|
||||
"getSimOperatorName",
|
||||
emptyList(),
|
||||
"Ljava/lang/String;",
|
||||
),
|
||||
),
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package app.revanced.patches.disneyplus.ads
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val insertionGetPointsFingerprint = fingerprint {
|
||||
returns("Ljava/util/List")
|
||||
custom { method, _ ->
|
||||
method.name == "getPoints" &&
|
||||
method.definingClass == "Lcom/dss/sdk/internal/media/Insertion;"
|
||||
}
|
||||
}
|
||||
|
||||
internal val insertionGetRangesFingerprint = fingerprint {
|
||||
returns("Ljava/util/List")
|
||||
custom { method, _ ->
|
||||
method.name == "getRanges" &&
|
||||
method.definingClass == "Lcom/dss/sdk/internal/media/Insertion;"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package app.revanced.patches.disneyplus.ads
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
|
||||
@Suppress("unused")
|
||||
val skipAdsPatch = bytecodePatch(
|
||||
name = "Skip ads",
|
||||
description = "Automatically skips ads.",
|
||||
) {
|
||||
compatibleWith(
|
||||
"com.disney.disneyplus",
|
||||
"in.startv.hotstar",
|
||||
"in.startv.hotstaronly",
|
||||
)
|
||||
|
||||
execute {
|
||||
arrayOf(insertionGetPointsFingerprint, insertionGetRangesFingerprint).forEach {
|
||||
it.method.addInstructions(
|
||||
0,
|
||||
"""
|
||||
new-instance v0, Ljava/util/ArrayList;
|
||||
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
|
||||
return-object v0
|
||||
""",
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package app.revanced.patches.idaustria.detection.deviceintegrity
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val isDeviceBootloaderOpenFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
returns("Ljava/lang/Object;")
|
||||
custom { method, classDef ->
|
||||
method.name == "isDeviceBootloaderOpen" &&
|
||||
classDef.endsWith("/DeviceIntegrityCheckProviderImpl;")
|
||||
}
|
||||
}
|
||||
|
||||
internal val isDeviceRootedFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
returns("Z")
|
||||
custom { method, classDef ->
|
||||
method.name == "isDeviceRooted" &&
|
||||
classDef.endsWith("/DeviceIntegrityCheckProviderImpl;")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package app.revanced.patches.idaustria.detection.deviceintegrity
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
|
||||
@Suppress("unused")
|
||||
val removeDeviceIntegrityChecksPatch = bytecodePatch(
|
||||
name = "Remove device integrity checks",
|
||||
description = "Removes the check for root permissions and unlocked bootloader.",
|
||||
) {
|
||||
compatibleWith("at.gv.oe.app")
|
||||
|
||||
execute {
|
||||
isDeviceRootedFingerprint.method.returnEarly(false)
|
||||
|
||||
isDeviceBootloaderOpenFingerprint.method.apply {
|
||||
addInstructions(
|
||||
0,
|
||||
"""
|
||||
const/4 v0, 0x0
|
||||
invoke-static { v0 }, Lkotlin/coroutines/jvm/internal/Boxing;->boxBoolean(Z)Ljava/lang/Boolean;
|
||||
move-result-object v0
|
||||
return-object v0
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
package app.revanced.patches.idaustria.detection.root
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val attestationSupportedCheckFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
returns("V")
|
||||
custom { method, classDef ->
|
||||
method.name == "attestationSupportCheck" &&
|
||||
classDef.endsWith("/DeviceIntegrityCheck;")
|
||||
}
|
||||
}
|
||||
|
||||
internal val bootloaderCheckFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
returns("Z")
|
||||
custom { method, classDef ->
|
||||
method.name == "bootloaderCheck" &&
|
||||
classDef.endsWith("/DeviceIntegrityCheck;")
|
||||
}
|
||||
}
|
||||
|
||||
internal val rootCheckFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
returns("V")
|
||||
custom { method, classDef ->
|
||||
method.name == "rootCheck" &&
|
||||
classDef.endsWith("/DeviceIntegrityCheck;")
|
||||
}
|
||||
}
|
||||
@@ -1,22 +1,10 @@
|
||||
package app.revanced.patches.idaustria.detection.root
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.shared.PATCH_DESCRIPTION_REMOVE_ROOT_DETECTION
|
||||
import app.revanced.patches.shared.PATCH_NAME_REMOVE_ROOT_DETECTION
|
||||
import app.revanced.util.returnEarly
|
||||
import app.revanced.patches.idaustria.detection.deviceintegrity.removeDeviceIntegrityChecksPatch
|
||||
|
||||
@Deprecated("Patch was superseded", ReplaceWith("removeDeviceIntegrityChecksPatch"))
|
||||
@Suppress("unused")
|
||||
val rootDetectionPatch = bytecodePatch(
|
||||
name = PATCH_NAME_REMOVE_ROOT_DETECTION,
|
||||
description = PATCH_DESCRIPTION_REMOVE_ROOT_DETECTION
|
||||
) {
|
||||
compatibleWith("at.gv.oe.app")
|
||||
|
||||
execute {
|
||||
setOf(
|
||||
attestationSupportedCheckFingerprint,
|
||||
bootloaderCheckFingerprint,
|
||||
rootCheckFingerprint,
|
||||
).forEach { it.method.returnEarly(true) }
|
||||
}
|
||||
val rootDetectionPatch = bytecodePatch {
|
||||
dependsOn(removeDeviceIntegrityChecksPatch)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package app.revanced.patches.instagram.ghost.story
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.util.Utils.trimIndentMultiline
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val anonymousStoryViewingPatch = bytecodePatch(
|
||||
name = "Anonymous story viewing",
|
||||
description = """
|
||||
View stories without sending any information to the server.
|
||||
Your view will not appear in the story viewers list.
|
||||
Note: Since no data is sent, a story you have already viewed may appear as new on another device.
|
||||
""".trimIndentMultiline(),
|
||||
use = false
|
||||
) {
|
||||
compatibleWith("com.instagram.android")
|
||||
|
||||
execute {
|
||||
// Prevent the hashmap of the seen media to be filled
|
||||
setMediaSeenHashmapFingerprint.method.returnEarly()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package app.revanced.patches.instagram.ghost.story
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val setMediaSeenHashmapFingerprint = fingerprint {
|
||||
parameters()
|
||||
returns("V")
|
||||
strings("media/seen/")
|
||||
}
|
||||
@@ -6,7 +6,9 @@ import app.revanced.util.returnEarly
|
||||
@Suppress("unused")
|
||||
val signatureCheckPatch = bytecodePatch(
|
||||
name = "Disable signature check",
|
||||
description = "Disables the signature check that causes the app to crash on startup."
|
||||
description = "Disables the signature check that can cause the app to crash on startup. " +
|
||||
"Including this patch may cause issues with sharing or opening external Instagram links.",
|
||||
use = false
|
||||
) {
|
||||
compatibleWith("com.instagram.android")
|
||||
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.instagram.reels.clipsSwipeRefreshLayoutOnInterceptTouchEventFingerprint
|
||||
import app.revanced.patches.instagram.reels.clipsViewPagerImplGetViewAtIndexFingerprint
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val disableReelsScrollingPatch = bytecodePatch(
|
||||
name = "Disable Reels scrolling",
|
||||
description = "Disables the endless scrolling behavior in Instagram Reels, preventing swiping to the next Reel. " +
|
||||
"Note: On a clean install, the 'Tip' animation may appear but will stop on its own after a few seconds.",
|
||||
use = true
|
||||
) {
|
||||
compatibleWith("com.instagram.android")
|
||||
|
||||
execute {
|
||||
val viewPagerField = clipsViewPagerImplGetViewAtIndexFingerprint.classDef.fields.first {
|
||||
it.type == "Landroidx/viewpager2/widget/ViewPager2;"
|
||||
}
|
||||
|
||||
// Disable user input on the ViewPager2 to prevent scrolling.
|
||||
clipsViewPagerImplGetViewAtIndexFingerprint.method.addInstructions(
|
||||
0,
|
||||
"""
|
||||
iget-object v0, p0, $viewPagerField
|
||||
const/4 v1, 0x0
|
||||
invoke-virtual { v0, v1 }, Landroidx/viewpager2/widget/ViewPager2;->setUserInputEnabled(Z)V
|
||||
"""
|
||||
)
|
||||
|
||||
// Return false in onInterceptTouchEvent to disable pull-to-refresh.
|
||||
clipsSwipeRefreshLayoutOnInterceptTouchEventFingerprint.method.returnEarly(false)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package app.revanced.patches.instagram.reels
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val clipsViewPagerImplGetViewAtIndexFingerprint = fingerprint {
|
||||
strings("ClipsViewPagerImpl_getViewAtIndex")
|
||||
}
|
||||
|
||||
internal val clipsSwipeRefreshLayoutOnInterceptTouchEventFingerprint = fingerprint {
|
||||
parameters("Landroid/view/MotionEvent;")
|
||||
custom { _, classDef -> classDef.type == "Linstagram/features/clips/viewer/ui/ClipsSwipeRefreshLayout;" }
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package app.revanced.patches.instagram.story.flipping
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val disableStoryAutoFlippingPatch = bytecodePatch(
|
||||
name = "Disable story auto flipping",
|
||||
description = "Disable stories automatically flipping/skipping after some seconds.",
|
||||
use = false
|
||||
) {
|
||||
compatibleWith("com.instagram.android")
|
||||
|
||||
execute {
|
||||
onStoryTimeoutActionFingerprint.method.returnEarly()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package app.revanced.patches.instagram.story.flipping
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val onStoryTimeoutActionFingerprint = fingerprint {
|
||||
parameters("Ljava/lang/Object;")
|
||||
returns("V")
|
||||
strings("userSession")
|
||||
custom { _, classDef ->
|
||||
classDef.type == "Linstagram/features/stories/fragment/ReelViewerFragment;"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package app.revanced.patches.letterboxd.ads
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal const val admobHelperClassName = "Lcom/letterboxd/letterboxd/helpers/AdmobHelper;"
|
||||
|
||||
internal val admobHelperSetShowAdsFingerprint = fingerprint {
|
||||
custom { method, classDef ->
|
||||
method.name == "setShowAds" && classDef.type == admobHelperClassName
|
||||
}
|
||||
}
|
||||
|
||||
internal val admobHelperShouldShowAdsFingerprint = fingerprint {
|
||||
custom { method, classDef ->
|
||||
method.name == "shouldShowAds" && classDef.type == admobHelperClassName
|
||||
}
|
||||
}
|
||||
|
||||
internal val filmFragmentShowAdsFingerprint = fingerprint {
|
||||
custom { method, classDef ->
|
||||
method.name == "showAds" && classDef.type.endsWith("/FilmFragment;")
|
||||
}
|
||||
}
|
||||
|
||||
internal val memberExtensionShowAdsFingerprint = fingerprint {
|
||||
custom { method, classDef ->
|
||||
method.name == "showAds" && classDef.type.endsWith("/AMemberExtensionKt;")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
|
||||
package app.revanced.patches.letterboxd.ads
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val hideAdsPatch = bytecodePatch(
|
||||
name = "Hide ads",
|
||||
) {
|
||||
compatibleWith("com.letterboxd.letterboxd")
|
||||
|
||||
execute {
|
||||
admobHelperSetShowAdsFingerprint.method.addInstruction(0, "const p1, 0x0")
|
||||
listOf(admobHelperShouldShowAdsFingerprint, filmFragmentShowAdsFingerprint, memberExtensionShowAdsFingerprint).forEach {
|
||||
it.method.returnEarly(false)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package app.revanced.patches.lightroom.misc.version
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
@Suppress("unused")
|
||||
val disableVersionCheckPatch = bytecodePatch(
|
||||
name = "Disable version check",
|
||||
description = "Disables the server-side version check that prevents the app from starting.",
|
||||
) {
|
||||
compatibleWith("com.adobe.lrmobile"("9.3.0"))
|
||||
|
||||
execute {
|
||||
refreshRemoteConfigurationFingerprint.method.apply {
|
||||
val igetIndex = refreshRemoteConfigurationFingerprint.patternMatch!!.endIndex
|
||||
|
||||
// This value represents the server command to clear all version restrictions.
|
||||
val statusForceReset = "-0x2";
|
||||
replaceInstruction(igetIndex, "const/4 v1, $statusForceReset")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package app.revanced.patches.lightroom.misc.version
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val refreshRemoteConfigurationFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
|
||||
strings(
|
||||
"com.adobe.lrmobile.denylisted_version_set_key",
|
||||
"com.adobe.lrmobile.app_min_version_key"
|
||||
)
|
||||
opcodes(
|
||||
Opcode.INVOKE_STATIC,
|
||||
Opcode.MOVE_RESULT_OBJECT,
|
||||
Opcode.IGET, // Overwrite this instruction to disable the check.
|
||||
)
|
||||
}
|
||||
@@ -1,24 +1,24 @@
|
||||
package app.revanced.patches.music.layout.branding
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.util.smali.ExternalLabel
|
||||
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
|
||||
import app.revanced.patches.music.misc.gms.Constants.MUSIC_MAIN_ACTIVITY_NAME
|
||||
import app.revanced.patches.music.misc.gms.Constants.MUSIC_PACKAGE_NAME
|
||||
import app.revanced.patches.music.misc.gms.musicActivityOnCreateFingerprint
|
||||
import app.revanced.patches.music.misc.settings.PreferenceScreen
|
||||
import app.revanced.patches.shared.layout.branding.EXTENSION_CLASS_DESCRIPTOR
|
||||
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
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.TypeReference
|
||||
|
||||
private val disableSplashAnimationPatch = bytecodePatch {
|
||||
|
||||
@@ -33,23 +33,22 @@ private val disableSplashAnimationPatch = bytecodePatch {
|
||||
// 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
|
||||
resourceMappings["layout", "main_activity_launch_animation"]
|
||||
)
|
||||
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
|
||||
val checkCastIndex = indexOfFirstInstructionOrThrow(literalIndex) {
|
||||
opcode == Opcode.CHECK_CAST &&
|
||||
getReference<TypeReference>()?.type == "Lcom/airbnb/lottie/LottieAnimationView;"
|
||||
}
|
||||
val register = getInstruction<OneRegisterInstruction>(checkCastIndex).registerA
|
||||
|
||||
addInstructionsWithLabels(
|
||||
insertIndex,
|
||||
"goto :skip_animation",
|
||||
ExternalLabel("skip_animation", getInstruction(jumpIndex))
|
||||
// If using a custom icon then set the lottie animation view to null to bypasses the startup animation.
|
||||
addInstructions(
|
||||
checkCastIndex,
|
||||
"""
|
||||
invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->getLottieViewOrNull(Landroid/view/View;)Landroid/view/View;
|
||||
move-result-object v$register
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
package app.revanced.patches.music.layout.buttons
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import app.revanced.util.containsLiteralInstruction
|
||||
import app.revanced.util.literal
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val mediaRouteButtonFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE, AccessFlags.FINAL)
|
||||
returns("Z")
|
||||
strings("MediaRouteButton")
|
||||
}
|
||||
|
||||
internal val playerOverlayChipFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("L")
|
||||
literal { playerOverlayChip }
|
||||
}
|
||||
|
||||
internal val historyMenuItemFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("V")
|
||||
parameters("Landroid/view/Menu;")
|
||||
opcodes(
|
||||
Opcode.INVOKE_INTERFACE,
|
||||
Opcode.RETURN_VOID
|
||||
)
|
||||
literal { historyMenuItem }
|
||||
custom { _, classDef ->
|
||||
classDef.methods.count() == 5
|
||||
}
|
||||
}
|
||||
|
||||
internal val historyMenuItemOfflineTabFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("V")
|
||||
parameters("Landroid/view/Menu;")
|
||||
opcodes(
|
||||
Opcode.INVOKE_INTERFACE,
|
||||
Opcode.RETURN_VOID
|
||||
)
|
||||
custom { method, _ ->
|
||||
method.containsLiteralInstruction(historyMenuItem) &&
|
||||
method.containsLiteralInstruction(offlineSettingsMenuItem)
|
||||
}
|
||||
}
|
||||
|
||||
internal val searchActionViewFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("Landroid/view/View;")
|
||||
parameters()
|
||||
literal { searchButton }
|
||||
custom { _, classDef ->
|
||||
classDef.type.endsWith("/SearchActionProvider;")
|
||||
}
|
||||
}
|
||||
|
||||
internal val topBarMenuItemImageViewFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("Landroid/view/View;")
|
||||
parameters()
|
||||
literal { topBarMenuItemImageView }
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
package app.revanced.patches.music.layout.buttons
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
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.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
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
internal var playerOverlayChip = -1L
|
||||
private set
|
||||
internal var historyMenuItem = -1L
|
||||
private set
|
||||
internal var offlineSettingsMenuItem = -1L
|
||||
private set
|
||||
internal var searchButton = -1L
|
||||
private set
|
||||
internal var topBarMenuItemImageView = -1L
|
||||
private set
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/music/patches/HideButtonsPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val hideButtons = bytecodePatch(
|
||||
name = "Hide buttons",
|
||||
description = "Adds options to hide the cast, history, notification, and search buttons."
|
||||
) {
|
||||
dependsOn(
|
||||
sharedExtensionPatch,
|
||||
settingsPatch,
|
||||
addResourcesPatch,
|
||||
resourceMappingPatch
|
||||
)
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.29.52",
|
||||
"8.10.52"
|
||||
)
|
||||
)
|
||||
|
||||
execute {
|
||||
playerOverlayChip = resourceMappings["id", "player_overlay_chip"]
|
||||
historyMenuItem = resourceMappings["id", "history_menu_item"]
|
||||
offlineSettingsMenuItem = resourceMappings["id", "offline_settings_menu_item"]
|
||||
searchButton = resourceMappings["layout", "search_button"]
|
||||
topBarMenuItemImageView = resourceMappings["id", "top_bar_menu_item_image_view"]
|
||||
|
||||
addResources("music", "layout.buttons.hideButtons")
|
||||
|
||||
PreferenceScreen.GENERAL.addPreferences(
|
||||
SwitchPreference("revanced_music_hide_cast_button"),
|
||||
SwitchPreference("revanced_music_hide_history_button"),
|
||||
SwitchPreference("revanced_music_hide_notification_button"),
|
||||
SwitchPreference("revanced_music_hide_search_button")
|
||||
)
|
||||
|
||||
// Region for hide history button in the top bar.
|
||||
arrayOf(
|
||||
historyMenuItemFingerprint,
|
||||
historyMenuItemOfflineTabFingerprint
|
||||
).forEach { fingerprint ->
|
||||
fingerprint.method.apply {
|
||||
val targetIndex = fingerprint.patternMatch!!.startIndex
|
||||
val targetRegister = getInstruction<FiveRegisterInstruction>(targetIndex).registerD
|
||||
|
||||
addInstructions(
|
||||
targetIndex,
|
||||
"""
|
||||
invoke-static { v$targetRegister }, $EXTENSION_CLASS_DESCRIPTOR->hideHistoryButton(Z)Z
|
||||
move-result v$targetRegister
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// Region for hide cast, search and notification buttons in the top bar.
|
||||
arrayOf(
|
||||
Triple(playerOverlayChipFingerprint, playerOverlayChip, "hideCastButton"),
|
||||
Triple(searchActionViewFingerprint, searchButton, "hideSearchButton"),
|
||||
Triple(topBarMenuItemImageViewFingerprint, topBarMenuItemImageView, "hideNotificationButton")
|
||||
).forEach { (fingerprint, resourceIdLiteral, methodName) ->
|
||||
fingerprint.method.apply {
|
||||
val resourceIndex = indexOfFirstLiteralInstructionOrThrow(resourceIdLiteral)
|
||||
val targetIndex = indexOfFirstInstructionOrThrow(
|
||||
resourceIndex, Opcode.MOVE_RESULT_OBJECT
|
||||
)
|
||||
val targetRegister = getInstruction<OneRegisterInstruction>(targetIndex).registerA
|
||||
|
||||
addInstruction(
|
||||
targetIndex + 1,
|
||||
"invoke-static { v$targetRegister }, " +
|
||||
"$EXTENSION_CLASS_DESCRIPTOR->$methodName(Landroid/view/View;)V"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// Region for hide cast button in the player.
|
||||
mediaRouteButtonFingerprint.classDef.methods.single { method ->
|
||||
method.name == "setVisibility"
|
||||
}.addInstructions(
|
||||
0,
|
||||
"""
|
||||
invoke-static { p1 }, $EXTENSION_CLASS_DESCRIPTOR->hideCastButton(I)I
|
||||
move-result p1
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
package app.revanced.patches.music.layout.castbutton
|
||||
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import app.revanced.patcher.fingerprint
|
||||
import app.revanced.util.literal
|
||||
|
||||
internal val mediaRouteButtonFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE, AccessFlags.FINAL)
|
||||
returns("Z")
|
||||
strings("MediaRouteButton")
|
||||
}
|
||||
|
||||
internal val playerOverlayChipFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
|
||||
returns("L")
|
||||
literal { playerOverlayChip }
|
||||
}
|
||||
@@ -1,77 +1,10 @@
|
||||
package app.revanced.patches.music.layout.castbutton
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
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.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
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
internal var playerOverlayChip = -1L
|
||||
private set
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/music/patches/HideCastButtonPatch;"
|
||||
import app.revanced.patches.music.layout.buttons.hideButtons
|
||||
|
||||
@Deprecated("Patch was moved", ReplaceWith("hideButtons"))
|
||||
@Suppress("unused")
|
||||
val hideCastButton = bytecodePatch(
|
||||
name = "Hide cast button",
|
||||
description = "Adds an option to hide the cast button."
|
||||
) {
|
||||
dependsOn(
|
||||
sharedExtensionPatch,
|
||||
settingsPatch,
|
||||
addResourcesPatch,
|
||||
resourceMappingPatch
|
||||
)
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.29.52",
|
||||
"8.10.52"
|
||||
)
|
||||
)
|
||||
|
||||
execute {
|
||||
playerOverlayChip = resourceMappings["id", "player_overlay_chip"]
|
||||
|
||||
addResources("music", "layout.castbutton.hideCastButton")
|
||||
|
||||
PreferenceScreen.GENERAL.addPreferences(
|
||||
SwitchPreference("revanced_music_hide_cast_button"),
|
||||
)
|
||||
|
||||
mediaRouteButtonFingerprint.classDef.apply {
|
||||
val setVisibilityMethod = methods.first { method -> method.name == "setVisibility" }
|
||||
|
||||
setVisibilityMethod.addInstructions(
|
||||
0,
|
||||
"""
|
||||
invoke-static { p1 }, $EXTENSION_CLASS_DESCRIPTOR->hideCastButton(I)I
|
||||
move-result p1
|
||||
"""
|
||||
)
|
||||
}
|
||||
|
||||
playerOverlayChipFingerprint.method.apply {
|
||||
val resourceIndex = indexOfFirstLiteralInstructionOrThrow(playerOverlayChip)
|
||||
val targetIndex = indexOfFirstInstructionOrThrow(resourceIndex, Opcode.MOVE_RESULT_OBJECT)
|
||||
val targetRegister = getInstruction<OneRegisterInstruction>(targetIndex).registerA
|
||||
|
||||
addInstruction(
|
||||
targetIndex + 1,
|
||||
"invoke-static { v$targetRegister }, $EXTENSION_CLASS_DESCRIPTOR->hideCastButton(Landroid/view/View;)V"
|
||||
)
|
||||
}
|
||||
}
|
||||
val hideCastButton = bytecodePatch{
|
||||
dependsOn(hideButtons)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
@file:Suppress("SpellCheckingInspection")
|
||||
|
||||
package app.revanced.patches.music.layout.miniplayercolor
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
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.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.addInstructionsAtControlFlowLabel
|
||||
import app.revanced.util.findFreeRegister
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import app.revanced.util.indexOfFirstInstructionReversedOrThrow
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.FieldReference
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
|
||||
internal var mpp_player_bottom_sheet = -1L
|
||||
private set
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/music/patches/ChangeMiniplayerColorPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val changeMiniplayerColor = bytecodePatch(
|
||||
name = "Change miniplayer color",
|
||||
description = "Adds an option to change the miniplayer background color to match the fullscreen player."
|
||||
) {
|
||||
dependsOn(
|
||||
sharedExtensionPatch,
|
||||
settingsPatch,
|
||||
addResourcesPatch,
|
||||
resourceMappingPatch
|
||||
)
|
||||
|
||||
compatibleWith(
|
||||
"com.google.android.apps.youtube.music"(
|
||||
"7.29.52",
|
||||
"8.10.52"
|
||||
)
|
||||
)
|
||||
|
||||
execute {
|
||||
mpp_player_bottom_sheet = resourceMappings["id", "mpp_player_bottom_sheet"]
|
||||
|
||||
addResources("music", "layout.miniplayercolor.changeMiniplayerColor")
|
||||
|
||||
PreferenceScreen.PLAYER.addPreferences(
|
||||
SwitchPreference("revanced_music_change_miniplayer_color"),
|
||||
)
|
||||
|
||||
switchToggleColorFingerprint.match(miniPlayerConstructorFingerprint.classDef).let {
|
||||
val relativeIndex = it.patternMatch!!.endIndex + 1
|
||||
|
||||
val invokeVirtualIndex = it.method.indexOfFirstInstructionOrThrow(
|
||||
relativeIndex, Opcode.INVOKE_VIRTUAL
|
||||
)
|
||||
val colorMathPlayerInvokeVirtualReference = it.method
|
||||
.getInstruction<ReferenceInstruction>(invokeVirtualIndex).reference
|
||||
|
||||
val iGetIndex = it.method.indexOfFirstInstructionOrThrow(
|
||||
relativeIndex, Opcode.IGET
|
||||
)
|
||||
val colorMathPlayerIGetReference = it.method
|
||||
.getInstruction<ReferenceInstruction>(iGetIndex).reference as FieldReference
|
||||
|
||||
val colorGreyIndex = miniPlayerConstructorFingerprint.method.indexOfFirstInstructionReversedOrThrow {
|
||||
getReference<MethodReference>()?.name == "getColor"
|
||||
}
|
||||
val iPutIndex = miniPlayerConstructorFingerprint.method.indexOfFirstInstructionOrThrow(
|
||||
colorGreyIndex, Opcode.IPUT
|
||||
)
|
||||
val colorMathPlayerIPutReference = miniPlayerConstructorFingerprint.method
|
||||
.getInstruction<ReferenceInstruction>(iPutIndex).reference
|
||||
|
||||
miniPlayerConstructorFingerprint.classDef.methods.single { method ->
|
||||
method.accessFlags == AccessFlags.PUBLIC.value or AccessFlags.FINAL.value &&
|
||||
method.returnType == "V" &&
|
||||
method.parameters == it.originalMethod.parameters
|
||||
}.apply {
|
||||
val insertIndex = indexOfFirstInstructionReversedOrThrow(Opcode.INVOKE_DIRECT)
|
||||
val freeRegister = findFreeRegister(insertIndex)
|
||||
|
||||
addInstructionsAtControlFlowLabel(
|
||||
insertIndex,
|
||||
"""
|
||||
invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->changeMiniplayerColor()Z
|
||||
move-result v$freeRegister
|
||||
if-eqz v$freeRegister, :off
|
||||
invoke-virtual { p1 }, $colorMathPlayerInvokeVirtualReference
|
||||
move-result-object v$freeRegister
|
||||
check-cast v$freeRegister, ${colorMathPlayerIGetReference.definingClass}
|
||||
iget v$freeRegister, v$freeRegister, $colorMathPlayerIGetReference
|
||||
iput v$freeRegister, p0, $colorMathPlayerIPutReference
|
||||
:off
|
||||
nop
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package app.revanced.patches.music.layout.miniplayercolor
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import app.revanced.util.literal
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val miniPlayerConstructorFingerprint = fingerprint {
|
||||
returns("V")
|
||||
strings("sharedToggleMenuItemMutations")
|
||||
literal { mpp_player_bottom_sheet }
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches to the class found in [miniPlayerConstructorFingerprint].
|
||||
*/
|
||||
internal val switchToggleColorFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PRIVATE, AccessFlags.FINAL)
|
||||
returns("V")
|
||||
parameters("L", "J")
|
||||
opcodes(
|
||||
Opcode.INVOKE_VIRTUAL,
|
||||
Opcode.MOVE_RESULT_OBJECT,
|
||||
Opcode.CHECK_CAST,
|
||||
Opcode.IGET
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package app.revanced.patches.peacocktv.ads
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val mediaTailerAdServiceFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
returns("Ljava/lang/Object")
|
||||
strings("Could not build MT Advertising service")
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package app.revanced.patches.peacocktv.ads
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val hideAdsPatch = bytecodePatch(
|
||||
name = "Hide ads",
|
||||
description = "Hides all video ads.",
|
||||
) {
|
||||
compatibleWith("com.peacocktv.peacockandroid")
|
||||
|
||||
execute {
|
||||
mediaTailerAdServiceFingerprint.method.returnEarly(false)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package app.revanced.patches.protonvpn.delay
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
|
||||
internal val longDelayFingerprint = fingerprint {
|
||||
custom { method, _ ->
|
||||
method.name == "getChangeServerLongDelayInSeconds"
|
||||
}
|
||||
}
|
||||
|
||||
internal val shortDelayFingerprint = fingerprint {
|
||||
custom { method, _ ->
|
||||
method.name == "getChangeServerShortDelayInSeconds"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package app.revanced.patches.protonvpn.delay
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val removeDelayPatch = bytecodePatch(
|
||||
name = "Remove delay",
|
||||
description = "Removes the delay when changing servers.",
|
||||
) {
|
||||
compatibleWith("ch.protonvpn.android")
|
||||
|
||||
execute {
|
||||
longDelayFingerprint.method.returnEarly(0)
|
||||
shortDelayFingerprint.method.returnEarly(0)
|
||||
}
|
||||
}
|
||||
@@ -3,12 +3,8 @@ package app.revanced.patches.reddit.ad.comments
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val hideCommentAdsFingerprint = fingerprint {
|
||||
strings(
|
||||
"link",
|
||||
// CommentPageRepository is not returning a link object
|
||||
"is not returning a link object"
|
||||
)
|
||||
custom { _, classDef ->
|
||||
classDef.sourceFile == "PostDetailPresenter.kt"
|
||||
custom { method, classDef ->
|
||||
method.name == "invokeSuspend" &&
|
||||
classDef.contains("LoadAdsCombinedCall")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package app.revanced.patches.reddit.ad.comments
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
|
||||
val hideCommentAdsPatch = bytecodePatch(
|
||||
@@ -8,13 +8,6 @@ val hideCommentAdsPatch = bytecodePatch(
|
||||
) {
|
||||
|
||||
execute {
|
||||
hideCommentAdsFingerprint.method.addInstructions(
|
||||
0,
|
||||
"""
|
||||
new-instance v0, Ljava/lang/Object;
|
||||
invoke-direct {v0}, Ljava/lang/Object;-><init>()V
|
||||
return-object v0
|
||||
""",
|
||||
)
|
||||
hideCommentAdsFingerprint.method.replaceInstructions(0, "return-object p1")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,5 @@ internal val adPostFingerprint = fingerprint {
|
||||
|
||||
internal val newAdPostFingerprint = fingerprint {
|
||||
opcodes(Opcode.INVOKE_VIRTUAL)
|
||||
strings("chain", "feedElement")
|
||||
custom { _, classDef -> classDef.sourceFile == "AdElementConverter.kt" }
|
||||
strings("feedElement", "com.reddit.cookie")
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ package app.revanced.patches.reddit.ad.general
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.removeInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.reddit.ad.banner.hideBannerPatch
|
||||
import app.revanced.patches.reddit.ad.comments.hideCommentAdsPatch
|
||||
import app.revanced.patches.reddit.misc.extension.sharedExtensionPatch
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
@@ -16,14 +15,9 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
val hideAdsPatch = bytecodePatch(
|
||||
name = "Hide ads",
|
||||
) {
|
||||
dependsOn(hideBannerPatch, hideCommentAdsPatch, sharedExtensionPatch)
|
||||
dependsOn(hideCommentAdsPatch, sharedExtensionPatch)
|
||||
|
||||
// Note that for now, this patch and anything using it will only work on
|
||||
// Reddit 2024.17.0 or older. Newer versions will crash during patching.
|
||||
// See https://github.com/ReVanced/revanced-patches/issues/3099
|
||||
// and https://github.com/iBotPeaches/Apktool/issues/3534.
|
||||
// This constraint is necessary due to dependency on hideBannerPatch.
|
||||
compatibleWith("com.reddit.frontpage"("2024.17.0"))
|
||||
compatibleWith("com.reddit.frontpage")
|
||||
|
||||
execute {
|
||||
// region Filter promoted ads (does not work in popular or latest feed)
|
||||
|
||||
@@ -5,6 +5,7 @@ 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.patch.resourcePatch
|
||||
import app.revanced.patches.all.misc.resources.addResources
|
||||
import app.revanced.patches.all.misc.resources.addResourcesPatch
|
||||
import app.revanced.patches.shared.misc.settings.preference.BasePreference
|
||||
@@ -13,6 +14,8 @@ import app.revanced.patches.shared.misc.settings.preference.NonInteractivePrefer
|
||||
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference
|
||||
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference.Sorting
|
||||
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
|
||||
import app.revanced.util.ResourceGroup
|
||||
import app.revanced.util.copyResources
|
||||
import app.revanced.util.findInstructionIndicesReversedOrThrow
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import app.revanced.util.indexOfFirstInstructionReversedOrThrow
|
||||
@@ -36,7 +39,27 @@ internal fun enableDebuggingPatch(
|
||||
description = "Adds options for debugging and exporting ReVanced logs to the clipboard.",
|
||||
) {
|
||||
|
||||
dependsOn(addResourcesPatch)
|
||||
dependsOn(
|
||||
addResourcesPatch,
|
||||
resourcePatch {
|
||||
execute {
|
||||
copyResources(
|
||||
"settings",
|
||||
ResourceGroup("drawable",
|
||||
// Action buttons.
|
||||
"revanced_settings_copy_all.xml",
|
||||
"revanced_settings_deselect_all.xml",
|
||||
"revanced_settings_select_all.xml",
|
||||
// Move buttons.
|
||||
"revanced_settings_arrow_left_double.xml",
|
||||
"revanced_settings_arrow_left_one.xml",
|
||||
"revanced_settings_arrow_right_double.xml",
|
||||
"revanced_settings_arrow_right_one.xml"
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
block()
|
||||
|
||||
@@ -64,6 +87,11 @@ internal fun enableDebuggingPatch(
|
||||
"revanced_debug_logs_clear_buffer",
|
||||
tag = "app.revanced.extension.shared.settings.preference.ClearLogBufferPreference",
|
||||
selectable = true
|
||||
),
|
||||
NonInteractivePreference(
|
||||
"revanced_debug_feature_flags_manager",
|
||||
tag = "app.revanced.extension.shared.settings.preference.FeatureFlagsManagerPreference",
|
||||
selectable = true
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -3,5 +3,5 @@ package app.revanced.patches.spotify.misc.extension
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val loadOrbitLibraryFingerprint = fingerprint {
|
||||
strings("OrbitLibraryLoader", "cst")
|
||||
strings("orbit_library_load", "orbit-jni-spotify")
|
||||
}
|
||||
|
||||
@@ -145,11 +145,14 @@ val hideLayoutComponentsPatch = bytecodePatch(
|
||||
SwitchPreference("revanced_hide_ask_section"),
|
||||
SwitchPreference("revanced_hide_attributes_section"),
|
||||
SwitchPreference("revanced_hide_chapters_section"),
|
||||
SwitchPreference("revanced_hide_featured_links_section"),
|
||||
SwitchPreference("revanced_hide_featured_videos_section"),
|
||||
SwitchPreference("revanced_hide_info_cards_section"),
|
||||
SwitchPreference("revanced_hide_how_this_was_made_section"),
|
||||
SwitchPreference("revanced_hide_hype_points"),
|
||||
SwitchPreference("revanced_hide_key_concepts_section"),
|
||||
SwitchPreference("revanced_hide_podcast_section"),
|
||||
SwitchPreference("revanced_hide_subscribe_button"),
|
||||
SwitchPreference("revanced_hide_transcript_section"),
|
||||
),
|
||||
),
|
||||
@@ -212,19 +215,21 @@ val hideLayoutComponentsPatch = bytecodePatch(
|
||||
PreferenceScreenPreference(
|
||||
key = "revanced_channel_screen",
|
||||
preferences = setOf(
|
||||
SwitchPreference("revanced_hide_community_button"),
|
||||
SwitchPreference("revanced_hide_for_you_shelf"),
|
||||
SwitchPreference("revanced_hide_join_button"),
|
||||
SwitchPreference("revanced_hide_links_preview"),
|
||||
SwitchPreference("revanced_hide_members_shelf"),
|
||||
SwitchPreference("revanced_hide_visit_community_button"),
|
||||
SwitchPreference("revanced_hide_visit_store_button"),
|
||||
SwitchPreference("revanced_hide_store_button"),
|
||||
SwitchPreference("revanced_hide_subscribe_button_in_channel_page"),
|
||||
),
|
||||
),
|
||||
SwitchPreference("revanced_hide_album_cards"),
|
||||
SwitchPreference("revanced_hide_artist_cards"),
|
||||
SwitchPreference("revanced_hide_chips_shelf"),
|
||||
SwitchPreference("revanced_hide_community_posts"),
|
||||
SwitchPreference("revanced_hide_compact_banner"),
|
||||
SwitchPreference("revanced_hide_crowdfunding_box"),
|
||||
SwitchPreference("revanced_hide_chips_shelf"),
|
||||
SwitchPreference("revanced_hide_expandable_card"),
|
||||
SwitchPreference("revanced_hide_floating_microphone_button"),
|
||||
SwitchPreference(
|
||||
@@ -240,9 +245,10 @@ val hideLayoutComponentsPatch = bytecodePatch(
|
||||
SwitchPreference("revanced_hide_show_more_button"),
|
||||
SwitchPreference("revanced_hide_surveys"),
|
||||
SwitchPreference("revanced_hide_ticket_shelf"),
|
||||
SwitchPreference("revanced_hide_upload_time"),
|
||||
SwitchPreference("revanced_hide_video_recommendation_labels"),
|
||||
SwitchPreference("revanced_hide_view_count"),
|
||||
SwitchPreference("revanced_hide_upload_time"),
|
||||
SwitchPreference("revanced_hide_visual_spacer"),
|
||||
SwitchPreference("revanced_hide_doodles"),
|
||||
)
|
||||
|
||||
|
||||
@@ -101,6 +101,7 @@ private val hideShortsComponentsResourcePatch = resourcePatch {
|
||||
SwitchPreference("revanced_hide_shorts_effect_button"),
|
||||
SwitchPreference("revanced_hide_shorts_green_screen_button"),
|
||||
SwitchPreference("revanced_hide_shorts_hashtag_button"),
|
||||
SwitchPreference("revanced_hide_shorts_live_preview"),
|
||||
SwitchPreference("revanced_hide_shorts_new_posts_button"),
|
||||
SwitchPreference("revanced_hide_shorts_shop_button"),
|
||||
SwitchPreference("revanced_hide_shorts_tagged_products"),
|
||||
@@ -109,6 +110,7 @@ private val hideShortsComponentsResourcePatch = resourcePatch {
|
||||
SwitchPreference("revanced_hide_shorts_stickers"),
|
||||
|
||||
// Bottom of the screen.
|
||||
SwitchPreference("revanced_hide_shorts_auto_dubbed_label"),
|
||||
SwitchPreference("revanced_hide_shorts_location_label"),
|
||||
SwitchPreference("revanced_hide_shorts_channel_bar"),
|
||||
SwitchPreference("revanced_hide_shorts_info_panel"),
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -64,9 +63,11 @@ Second \"item\" text"</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'For You' should be translated using the same localized wording YouTube displays. -->
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
@@ -110,7 +111,7 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
|
||||
This button only shows on videos uploaded by the logged in user. -->
|
||||
This button only shows on videos uploaded by the logged-in user. -->
|
||||
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
@@ -137,7 +138,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
|
||||
'Android No SDK' must be kept untranslated. -->
|
||||
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
</patch>
|
||||
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
|
||||
@@ -267,10 +269,12 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
<patch id="layout.buttons.hideButtons">
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
</patch>
|
||||
<patch id="layout.miniplayercolor.changeMiniplayerColor">
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -64,9 +63,11 @@ Second \"item\" text"</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'For You' should be translated using the same localized wording YouTube displays. -->
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
@@ -110,7 +111,7 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
|
||||
This button only shows on videos uploaded by the logged in user. -->
|
||||
This button only shows on videos uploaded by the logged-in user. -->
|
||||
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
@@ -137,7 +138,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
|
||||
'Android No SDK' must be kept untranslated. -->
|
||||
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
</patch>
|
||||
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
|
||||
@@ -267,10 +269,12 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
<patch id="layout.buttons.hideButtons">
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
</patch>
|
||||
<patch id="layout.miniplayercolor.changeMiniplayerColor">
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time_invalid">تاريخ بناء APK تالف</string>
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">تحذير</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">إشعار ReVanced</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">لم يتم حفظ سجل المشاهدة الخاص بك.<br><br>من المرجح أن يكون السبب في ذلك هو مانع إعلانات DNS أو وكيل الشبكة.<br><br>لإصلاح هذه المشكلة، قم بإضافة <b>s.youtube.com</b> إلى القائمة البيضاء أو قم بإيقاف تشغيل جميع أدوات حظر DNS ووكلاء البروكسي.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">لا تعرض مرة أخرى</string>
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<string name="revanced_settings_submenu_title">الإعدادات</string>
|
||||
<string name="revanced_settings_confirm_user_dialog_title">هل أنت متأكد أنك تريد المتابعة؟</string>
|
||||
<string name="revanced_settings_save">حفظ</string>
|
||||
<string name="revanced_settings_reset">إعادة التعيين</string>
|
||||
<string name="revanced_settings_reset_color">إعادة تعيين اللون</string>
|
||||
<string name="revanced_settings_color_invalid">لون غير صالح</string>
|
||||
@@ -164,6 +164,14 @@ Second \"item\" text"</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_toast">تم مسح السجلات</string>
|
||||
<string name="revanced_debug_feature_flags_manager_title">مدير Feature Flags</string>
|
||||
<string name="revanced_debug_feature_flags_manager_summary">إدارة Feature Flags المنطقية</string>
|
||||
<string name="revanced_debug_feature_flags_manager_active_header">Flags نشطة (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_blocked_header">Flags محظورة (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_search_hint">البحث عن Flags...</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_saved">تم حفظ Flags</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_reset">تم إعادة تعيين Flags</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_copied">تم نسخ Flags إلى الحافظة</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">تطهير روابط المشاركة</string>
|
||||
@@ -274,6 +282,9 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_title">إخفاء تسميات توصيات الفيديو</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_on">تم إخفاء تسميات \'شاهد المستخدمون أيضًا\' و\'قد يعجبك أيضًا\' في نتائج البحث</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_off">يتم عرض تسميات \'شاهد المستخدمون أيضًا\' و\'قد يعجبك أيضًا\' في نتائج البحث</string>
|
||||
<string name="revanced_hide_visual_spacer_title">إخفاء المسافة البادئة المرئية</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_on">المسافة البادئة المرئية مخفية</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_off">المسافة البادئة المرئية ظاهرة</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">إخفاء رسومات YouTube</string>
|
||||
<string name="revanced_hide_doodles_summary_on">تم إخفاء رسوم Doodles المتحركة على شعار YouTube</string>
|
||||
@@ -334,12 +345,21 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_podcast_section_title">إخفاء \'استكشاف البودكاست\'</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">تم إخفاء قسم استكشاف البودكاست</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">يتم عرض قسم استكشاف البودكاست</string>
|
||||
<string name="revanced_hide_featured_links_section_title">إخفاء الروابط المميزة</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_on">تم إخفاء قسم الروابط المميزة</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_off">يتم عرض قسم الروابط المميزة</string>
|
||||
<string name="revanced_hide_featured_videos_section_title">إخفاء الفيديوهات المميزة</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_on">تم إخفاء قسم الفيديوهات المميزة</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_off">يتم عرض قسم الفيديوهات المميزة</string>
|
||||
<string name="revanced_hide_info_cards_section_title">إخفاء بطاقات المعلومات</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">تم إخفاء قسم بطاقات المعلومات</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">يتم عرض قسم بطاقات المعلومات</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">إخفاء \'المفاهيم الأساسية\'</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">تم إخفاء قسم المفاهيم الأساسية</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">يتم عرض قسم المفاهيم الأساسية</string>
|
||||
<string name="revanced_hide_subscribe_button_title">إخفاء زر الاشتراك</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_on">تم إخفاء زر الاشتراك</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_off">يتم عرض زر الاشتراك</string>
|
||||
<string name="revanced_hide_transcript_section_title">إخفاء النص</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">تم إخفاء قسم النص</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">يتم عرض قسم النص</string>
|
||||
@@ -361,24 +381,32 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">يُعرض في السجلّ</string>
|
||||
<string name="revanced_channel_screen_title">صفحة القناة</string>
|
||||
<string name="revanced_channel_screen_summary">إخفاء أو عرض مكونات صفحة القناة</string>
|
||||
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_community_button_title">إخفاء زر المنتدى</string>
|
||||
<string name="revanced_hide_community_button_summary_on">تم إخفاء زر المجتمع</string>
|
||||
<string name="revanced_hide_community_button_summary_off">يتم عرض زر المجتمع</string>
|
||||
<!-- 'For You' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">إخفاء رف \'مقترحات لك\'</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">تم إخفاء رف مقترح لك</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">يتم عرض رف مقترح لك</string>
|
||||
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_join_button_title">إخفاء زر الانضمام</string>
|
||||
<string name="revanced_hide_join_button_summary_on">تم إخفاء زر الانضمام</string>
|
||||
<string name="revanced_hide_join_button_summary_off">يتم عرض زر الانضمام</string>
|
||||
<string name="revanced_hide_links_preview_title">إخفاء معاينة الروابط</string>
|
||||
<string name="revanced_hide_links_preview_summary_on">تم إخفاء معاينة الروابط</string>
|
||||
<string name="revanced_hide_links_preview_summary_off">يتم عرض معاينة الروابط</string>
|
||||
<string name="revanced_hide_members_shelf_title">إخفاء رف الأعضاء</string>
|
||||
<string name="revanced_hide_members_shelf_summary_on">تم إخفاء رف الأعضاء</string>
|
||||
<string name="revanced_hide_members_shelf_summary_off">يتم عرض رف الأعضاء</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_community_button_title">إخفاء زر \'زيارة المجتمع\'</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_on">تم إخفاء زر زيارة المجتمع</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_off">يتم عرض زر زيارة المجتمع</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">إخفاء زر \'زيارة المتجر\'</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">تم إخفاء زر زيارة المتجر</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">يتم عرض زر زيارة المتجر</string>
|
||||
<!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_store_button_title">إخفاء زر المتجر</string>
|
||||
<string name="revanced_hide_store_button_summary_on">تم إخفاء زر المتجر</string>
|
||||
<string name="revanced_hide_store_button_summary_off">يتم عرض زر المتجر</string>
|
||||
<!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_title">إخفاء زر الاشتراك</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_on">تم إخفاء زر الاشتراك</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_off">يتم عرض زر الاشتراك</string>
|
||||
<string name="revanced_comments_screen_title">التعليقات</string>
|
||||
<string name="revanced_comments_screen_summary">إخفاء أو عرض مكونات قسم التعليقات</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_title">إخفاء ملخص محادثات الذكاء الاصطناعي</string>
|
||||
@@ -520,11 +548,11 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_share_copy_url_success">تم نسخ URL إلى الحافظة</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">تم نسخ عنوان URL مع الطابع الزمني</string>
|
||||
<string name="revanced_copy_video_url_title">عرض زر نسخ عنوان URL للفيديو</string>
|
||||
<string name="revanced_copy_video_url_summary_on">يتم عرض الزر. انقر لنسخ عنوان URL للفيديو. انقر مع الاستمرار للنسخ مع الطابع الزمني</string>
|
||||
<string name="revanced_copy_video_url_summary_off">لا يتم عرض الزر</string>
|
||||
<string name="revanced_copy_video_url_summary_on">يتم عرض زر نسخ عنوان URL للفيديو. انقر لنسخ عنوان URL للفيديو. انقر مع الاستمرار للنسخ مع الطابع الزمني</string>
|
||||
<string name="revanced_copy_video_url_summary_off">لا يتم عرض زر نسخ عنوان URL للفيديو</string>
|
||||
<string name="revanced_copy_video_url_timestamp_title">عرض زر نسخ URL مع الطابع الزمني</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">يتم عرض الزر. انقر لنسخ عنوان URL للفيديو مع الطابع الزمني. انقر مع الاستمرار للنسخ بدون الطابع الزمني</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">لا يتم عرض الزر</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">يتم عرض زر نسخ عنوان URL مع الطابع الزمني. انقر لنسخ عنوان URL للفيديو مع الطابع الزمني. انقر مع الاستمرار للنسخ بدون الطابع الزمني</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">لا يتم عرض زر نسخ عنوان URL مع الطابع الزمني</string>
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
<string name="revanced_remove_viewer_discretion_dialog_title">إزالة مربع حوار تقدير المشاهد</string>
|
||||
@@ -665,7 +693,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_download_button_summary_on">تم إخفاء زر تنزيل</string>
|
||||
<string name="revanced_hide_download_button_summary_off">يتم عرض زر تنزيل</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. -->
|
||||
This button only shows on videos uploaded by the logged-in user. -->
|
||||
<string name="revanced_hide_hype_button_title">إخفاء التشجيع</string>
|
||||
<string name="revanced_hide_hype_button_summary_on">تم إخفاء زر التشجيع</string>
|
||||
<string name="revanced_hide_hype_button_summary_off">يتم عرض زر التشجيع</string>
|
||||
@@ -786,10 +814,11 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_title">إخفاء المقطع الصوتي</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_on">تم إخفاء قائمة المقطع الصوتي</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_off">يتم عرض قائمة المقطع الصوتي</string>
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
|
||||
'Android No SDK' must be kept untranslated. -->
|
||||
<string name="revanced_hide_player_flyout_audio_track_not_available">"تم إخفاء قائمة المقطع الصوتي
|
||||
|
||||
لعرض قائمة المقطع الصوتي، غيّر 'Spoof video streams' إلى iPadOS"</string>
|
||||
لعرض قائمة المقطع الصوتي، غيّر 'Spoof Video Streams' إلى 'Android No SDK'"</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">إخفاء المشاهدة في VR</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">تم إخفاء قائمة المشاهدة في الوضع الافتراضي</string>
|
||||
@@ -865,6 +894,9 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_shorts_history_title">إخفاء Shorts في السجلّ</string>
|
||||
<string name="revanced_hide_shorts_history_summary_on">مخفي في السجلّ</string>
|
||||
<string name="revanced_hide_shorts_history_summary_off">يُعرض في السجلّ</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_title">إخفاء تسمية \"مدبلج تلقائياً\"</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_summary_on">تم إخفاء تسمية الدبلجة التلقائية</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_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>
|
||||
@@ -881,6 +913,9 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_shorts_join_button_title">إخفاء زر الانضمام</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_on">تم إخفاء زر الانضمام</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_off">يتم عرض زر الانضمام</string>
|
||||
<string name="revanced_hide_shorts_live_preview_title">إخفاء المعاينة المباشرة</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_on">تم إخفاء معاينة البث المباشر</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_off">تم عرض معاينة البث المباشر</string>
|
||||
<string name="revanced_hide_shorts_location_label_title">إخفاء تسمية الموقع</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_on">تم إخفاء تسمية الموقع</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_off">يتم عرض تسمية الموقع</string>
|
||||
@@ -1560,13 +1595,13 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
<string name="revanced_playback_speed_dialog_button_title">عرض زر مربع حوار السرعة</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">يتم عرض الزر. انقر مع الاستمرار لإعادة ضبط سرعة التشغيل إلى الوضع الافتراضي</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">لا يتم عرض الزر</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">يتم عرض زر مربع حوار السرعة. انقر مع الاستمرار لإعادة ضبط سرعة التشغيل إلى الوضع الافتراضي</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">لا يتم عرض زر مربع حوار السرعة</string>
|
||||
</patch>
|
||||
<patch id="video.quality.button.videoQualityDialogButtonPatch">
|
||||
<string name="revanced_video_quality_dialog_button_title">عرض زر جودة الفيديو</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">يتم عرض الزر. انقر مع الاستمرار لإعادة تعيين الجودة إلى الوضع الافتراضي</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">لا يتم عرض الزر</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">يتم عرض زر جودة الفيديو. انقر مع الاستمرار لإعادة تعيين الجودة إلى الوضع الافتراضي</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">لا يتم عرض زر جودة الفيديو</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_speed_menu_title">قائمة سرعة التشغيل المخصصة</string>
|
||||
@@ -1663,16 +1698,30 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_on">تم تمكين التكرار الدائم</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_off">تم تعطيل التكرار الدائم</string>
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
<patch id="layout.buttons.hideButtons">
|
||||
<string name="revanced_music_hide_cast_button_title">إخفاء زر البث</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_on">تم إخفاء زر البث</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_off">يتم عرض زر البث</string>
|
||||
<string name="revanced_music_hide_history_button_title">إخفاء زر السجل</string>
|
||||
<string name="revanced_music_hide_history_button_summary_on">تم إخفاء زر السجل</string>
|
||||
<string name="revanced_music_hide_history_button_summary_off">يتم عرض زر السجل</string>
|
||||
<string name="revanced_music_hide_notification_button_title">إخفاء زر الإشعارات</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_on">تم إخفاء زر الإشعارات</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_off">يتم عرض زر الإشعارات</string>
|
||||
<string name="revanced_music_hide_search_button_title">إخفاء زر البحث</string>
|
||||
<string name="revanced_music_hide_search_button_summary_on">تم إخفاء زر البحث</string>
|
||||
<string name="revanced_music_hide_search_button_summary_off">يتم عرض زر البحث</string>
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
<string name="revanced_music_hide_category_bar_title">إخفاء شريط الفئات</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_on">تم إخفاء شريط الفئات</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_off">يتم عرض شريط الفئات</string>
|
||||
</patch>
|
||||
<patch id="layout.miniplayercolor.changeMiniplayerColor">
|
||||
<string name="revanced_music_change_miniplayer_color_title">تغيير لون المشغل المصغر</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_on">يتطابق لون المشغل المصغر مع المشغل بملء الشاشة</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_off">يستخدم المشغل المصغر اللون الافتراضي</string>
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<string name="revanced_music_navigation_bar_screen_title">شريط التنقل</string>
|
||||
<string name="revanced_music_navigation_bar_screen_summary">إخفاء أزرار شريط التنقل أو تغييرها</string>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -29,7 +28,6 @@ Second \"item\" text"</string>
|
||||
<patch id="misc.checks.checkEnvironmentPatch">
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">সকীয়নি</string>
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<!-- Settings about dialog. -->
|
||||
@@ -65,9 +63,11 @@ Second \"item\" text"</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'For You' should be translated using the same localized wording YouTube displays. -->
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
@@ -111,7 +111,7 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
|
||||
This button only shows on videos uploaded by the logged in user. -->
|
||||
This button only shows on videos uploaded by the logged-in user. -->
|
||||
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
@@ -138,7 +138,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
|
||||
'Android No SDK' must be kept untranslated. -->
|
||||
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
</patch>
|
||||
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
|
||||
@@ -269,10 +270,12 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
<patch id="layout.buttons.hideButtons">
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
</patch>
|
||||
<patch id="layout.miniplayercolor.changeMiniplayerColor">
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time_invalid">APK qurulma vaxtı pozulub</string>
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">Xәbәrdarlıq</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">ReVanced Bildiriş</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">Baxış tarixçəniz saxlanmır.<br><br>Bu çox güman ki, DNS reklam bloklayıcı və ya şəbəkə proksisinə görədir.<br><br>.Bunu düzəltmək üçün s.youtube.com-u</b> <b>ağ siyahıya salın və ya bütün DNS bloklayıcıları və proksiləri bağlayın.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Təkrar göstərmə</string>
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<string name="revanced_settings_submenu_title">Tənzimləmələr</string>
|
||||
<string name="revanced_settings_confirm_user_dialog_title">Davam etmək istədiyinizə əminsiniz?</string>
|
||||
<string name="revanced_settings_save">Saxla</string>
|
||||
<string name="revanced_settings_reset">Sıfırla</string>
|
||||
<string name="revanced_settings_reset_color">Rəngi sıfırla</string>
|
||||
<string name="revanced_settings_color_invalid">Yanlış rəng</string>
|
||||
@@ -164,6 +164,14 @@ Gözlənilməz hallardan xəbərdar olmayacaqsınız."</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_title">Sazlama qeydlərini təmizlə</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_summary">Saxlanılan bütün ReVanced sazlama qeydlərini təmizləyir</string>
|
||||
<string name="revanced_debug_logs_clear_toast">Qeydlər silindi</string>
|
||||
<string name="revanced_debug_feature_flags_manager_title">Xüsusiyyət nişançıları idarəedicisi</string>
|
||||
<string name="revanced_debug_feature_flags_manager_summary">Boolean xüsusiyyət nişançıların idarə et</string>
|
||||
<string name="revanced_debug_feature_flags_manager_active_header">Aktiv nişançılar (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_blocked_header">Bloklanmış nişançılar (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_search_hint">Nişançıları axtarın...</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_saved">Nişançılar saxlandı</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_reset">Nişançılar sıfırlandı</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_copied">Nişançılar buferə köçürüldü</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">Paylaşım linklərin təmizlə</string>
|
||||
@@ -274,6 +282,9 @@ Hər halda, bunu aktivləşdirmə IP ünvanınız kimi bəzi istifadəçi məlum
|
||||
<string name="revanced_hide_video_recommendation_labels_title">Video tövsiyə etiketlərini gizlət</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_on">\'İnsanlar həmçinin izləyiblər\' və \'Bunu da bəyənə bilərsiniz\' etiketləri axtarış nəticələrində gizlədilib</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_off">\'İnsanlar həmçinin izləyiblər\' və \'Bunu da bəyənə bilərsiniz\' etiketləri axtarış nəticələrində görünür</string>
|
||||
<string name="revanced_hide_visual_spacer_title">Vizual ayırıcı gizlət</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_on">Vizual ayırıcı gizlənib</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_off">Vizual ayırıcı göstərilib</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">YouTube Doodle-ları gizlət</string>
|
||||
<string name="revanced_hide_doodles_summary_on">YouTube Doodles animasiyası simvolda gizlidir</string>
|
||||
@@ -328,18 +339,27 @@ Hər halda, bunu aktivləşdirmə IP ünvanınız kimi bəzi istifadəçi məlum
|
||||
<string name="revanced_hide_how_this_was_made_section_title">\'Bu kontent necə hazırlanıb\'ı Gizlət</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_on">Bu məzmunun necə hazırlandığı bölməsi gizlidir</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_off">Bu məzmunun necə hazırlandığı bölməsi görünür</string>
|
||||
<string name="revanced_hide_hype_points_title">Hype nöqtələrini gizlət</string>
|
||||
<string name="revanced_hide_hype_points_summary_on">Hype nöqtələri gizlədilib</string>
|
||||
<string name="revanced_hide_hype_points_summary_off">Hype nöqtələri göstərilir</string>
|
||||
<string name="revanced_hide_hype_points_title">Coşqu xalların gizlət</string>
|
||||
<string name="revanced_hide_hype_points_summary_on">Coşqu xalları gizlədilib</string>
|
||||
<string name="revanced_hide_hype_points_summary_off">Coşqu xalları göstərilir</string>
|
||||
<string name="revanced_hide_podcast_section_title">\'Podkastı araşdırın\"-ı Gizlət</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Podkast bölməsin araşdırın gizlidir</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Podkast bölməsin araşdırın görünür</string>
|
||||
<string name="revanced_hide_featured_links_section_title">Seçilən keçidləri gizlət</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_on">Seçilən keçidlər bölməsi gizlidir</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_off">Seçilən keçidlər bölməsi göstərilir</string>
|
||||
<string name="revanced_hide_featured_videos_section_title">Seçilən videoları gizlət</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_on">Seçilən videolar bölməsi gizlidir</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_off">Seçilən videolar bölməsi göstərilir</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Məlumat Kartlarını Gizlət</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">Məlumat kartları bölməsi gizlədilir</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">Məlumat kartları bölməsi göstərilir</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">\"Əsas konseptlər-i\" gizlət</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Əsas konseptlər bölməsi gizlidir</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Əsas konseptlər bölməsi görünür</string>
|
||||
<string name="revanced_hide_subscribe_button_title">Abunə ol düyməsini gizlət</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_on">Abunə ol düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_off">Abunə ol düyməsi görünür</string>
|
||||
<string name="revanced_hide_transcript_section_title">Transkript-i Gizlət</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">Transkripsiya bölməsi gizlidir</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">Transkripsiya bölməsi göstərilir</string>
|
||||
@@ -361,24 +381,32 @@ Hər halda, bunu aktivləşdirmə IP ünvanınız kimi bəzi istifadəçi məlum
|
||||
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Baxış tarixçəsində görünür</string>
|
||||
<string name="revanced_channel_screen_title">Kanal səhifəsi</string>
|
||||
<string name="revanced_channel_screen_summary">Kanal səhifə elementlərini gizlət və ya göstər</string>
|
||||
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_community_button_title">İcma düyməsini gizlət</string>
|
||||
<string name="revanced_hide_community_button_summary_on">İcmaya düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_community_button_summary_off">İcmaya düyməsi görünür</string>
|
||||
<!-- 'For You' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">\"Sizin üçün\" bölməsin gizlət</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Sizin üçün cərgəsi gizlidir</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">Sizin üçün cərgəsi görünür</string>
|
||||
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_join_button_title">Qoşulun düyməsini gizlət</string>
|
||||
<string name="revanced_hide_join_button_summary_on">Qoşul düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_join_button_summary_off">Qoşul düyməsi görünür</string>
|
||||
<string name="revanced_hide_links_preview_title">Keçidlərin önizləməsini gizlət</string>
|
||||
<string name="revanced_hide_links_preview_summary_on">Keçidlər önizləməsi gizlədilib</string>
|
||||
<string name="revanced_hide_links_preview_summary_off">Keçidlər önizləməsi görünür</string>
|
||||
<string name="revanced_hide_members_shelf_title">Üzvlər cərgəsini gizlət</string>
|
||||
<string name="revanced_hide_members_shelf_summary_on">Üzvlər cərgəsi gizlidir</string>
|
||||
<string name="revanced_hide_members_shelf_summary_off">Üzvlər cərgəsi görünür</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_community_button_title">\'İcmaya daxil olun\' düyməsini gizlət</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_on">İcmaya daxil ol düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_off">İcmaya daxil ol düyməsi görünür</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">Kanalda \"Mağazaya baxın\" düyməsin gizlə</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Mağazaya baxın düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Mağazaya baxın düyməsi görünür</string>
|
||||
<!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_store_button_title">Mağaza düyməsini gizlət</string>
|
||||
<string name="revanced_hide_store_button_summary_on">Mağaza düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_store_button_summary_off">Mağaza düyməsi görünür</string>
|
||||
<!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_title">Abunə ol düyməsini gizlət</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_on">Abunə ol düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_off">Abunə ol düyməsi görünür</string>
|
||||
<string name="revanced_comments_screen_title">Şərhlər</string>
|
||||
<string name="revanced_comments_screen_summary">Şərhlər bölməsi elementlərin gizlət və ya göstər</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_title">Sİ söhbət xülasəsini gizlət</string>
|
||||
@@ -520,11 +548,11 @@ Bu xüsusiyyət yalnız köhnə cihazlar üçün mövcuddur"</string>
|
||||
<string name="revanced_share_copy_url_success">URL buferə köçürüldü</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">Vaxt möhürlü URL köçürüldü</string>
|
||||
<string name="revanced_copy_video_url_title">Video URL-i köçürmə düyməsin göstər</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Düymə göstərilir. Video URL-ni köçürmək üçün toxun. Vaxt möhürü ilə köçürmək üçün basıb saxlayın</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Düymə göstərilmir</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Video URL-ini kopyala düyməsi görünür. Video URL-ini kopyalamaq üçün toxunun. Zaman nişanı ilə kopyalamaq üçün toxunub saxlayın</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Video URL-ini kopyala düyməsi görünmür</string>
|
||||
<string name="revanced_copy_video_url_timestamp_title">Vaxt möhürü URL köçür düyməsi göstər</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Düymə göstərilir. Video URL-ni vaxt möhürü ilə köçürmək üçün toxun. Vaxt möhürü olmadan köçürmək üçün basıb saxlayın</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Düymə göstərilmir</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Zaman nişanı URL-ini kopyala düyməsi görünür. Zaman nişanı ilə video URL-ini kopyalamaq üçün toxunun. Zaman nişanı olmadan kopyalamaq üçün toxunub saxlayın</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Zaman nişanı URL-ini kopyala düyməsi görünmür</string>
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
<string name="revanced_remove_viewer_discretion_dialog_title">İzləyici mülahizə dialoqun sil</string>
|
||||
@@ -665,7 +693,7 @@ Ekranın sağ tərəfində düzünə sürüşdürərək səs səviyyəsini tənz
|
||||
<string name="revanced_hide_download_button_summary_on">Yükləmə düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_download_button_summary_off">Yükləmə düyməsi göstərilir</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. -->
|
||||
This button only shows on videos uploaded by the logged-in user. -->
|
||||
<string name="revanced_hide_hype_button_title">Coşqu Gizlət</string>
|
||||
<string name="revanced_hide_hype_button_summary_on">Coşqu düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_hype_button_summary_off">Coşqu düyməsi görünür</string>
|
||||
@@ -786,10 +814,11 @@ Bu seçimi dəyişdirmə işə düşmürsə, Gizli rejimə keçməyə çalışı
|
||||
<string name="revanced_hide_player_flyout_audio_track_title">Səs trekini gizlət</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_on">Səs axını menyusu gizlidir</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_off">Səs axını menyusu göstərilir</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">"Səs trek menyusu gizlidir
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
|
||||
'Android No SDK' must be kept untranslated. -->
|
||||
<string name="revanced_hide_player_flyout_audio_track_not_available">"Səs axını menyusu gizlidir
|
||||
|
||||
Səs treki menyusunu göstərmək üçün \"Video yayımları saxtalaşdır\"ı iPadOS-a dəyiş"</string>
|
||||
Səs treki menyusunu göstərmək üçün \"Video yayımları saxtalaşdır\"-ı 'Android No SDK'-a dəyiş"</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">\"VR-da İzləni\" gizlət</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">VR menyusunda izləmə gizlidir</string>
|
||||
@@ -865,13 +894,16 @@ Səs treki menyusunu göstərmək üçün \"Video yayımları saxtalaşdır\"ı
|
||||
<string name="revanced_hide_shorts_history_title">Baxış tarixçəsində Shorts-u gizlət</string>
|
||||
<string name="revanced_hide_shorts_history_summary_on">Baxış tarixçəsində gizlidir</string>
|
||||
<string name="revanced_hide_shorts_history_summary_off">Baxış tarixçəsində göstərilib</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_title">Super Təşəkkür Al düyməsini gizlət</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_title">\'Avtomatik dublyaj olunmuş\' etiketini gizlət</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_summary_on">Avto-dublyaj etiketi gizlidir</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_summary_off">Avto-dublyaj etiketi göstərilir</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_title">\'Super Təşəkkür Al\' düyməsini gizlət</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_on">Super Təşəkkürlər Al düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_off">Super Təşəkkürlər Al düyməsi görünür</string>
|
||||
<string name="revanced_hide_shorts_effect_button_title">Effekt düyməsini gizlət</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_on">Effekt düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_off">Effekt düyməsi görünür</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">Yaşıl ekran düyməsini gizlət</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">\'Yaşıl ekran\' düyməsini gizlət</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_on">\"Yaşıl ekran\" düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_off">\"Yaşıl ekran\" düyməsi göstərilir</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_title">Mövzu etiketi düyməsini gizlət</string>
|
||||
@@ -881,6 +913,9 @@ Səs treki menyusunu göstərmək üçün \"Video yayımları saxtalaşdır\"ı
|
||||
<string name="revanced_hide_shorts_join_button_title">Qoşul düyməsin gizlə</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_on">Qoşulma düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_off">Qoşulma düyməsi göstərilir</string>
|
||||
<string name="revanced_hide_shorts_live_preview_title">Canlı önizləməni gizlət</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_on">Canlı önizləmə gizlədilib</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_off">Canlı önizləmə göstərilir</string>
|
||||
<string name="revanced_hide_shorts_location_label_title">Məkan etiketini gizlət</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_on">Məkan etiketi gizlidir</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_off">Məkan etiketi göstərilir</string>
|
||||
@@ -893,7 +928,7 @@ Səs treki menyusunu göstərmək üçün \"Video yayımları saxtalaşdır\"ı
|
||||
<string name="revanced_hide_shorts_preview_comment_title">Öncül baxış şərhini gizlət</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_on">Öncül baxış şərhi gizlidir</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_off">Öncül baxış şərhi göstərilir</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">Musiqini saxla düyməsini gizlət</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">\'Musiqini yadda saxla\' düyməsini gizlət</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_on">\"Musiqini saxla\" düyməsi gizlidir</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_off">\"Musiqini saxla\" düyməsi göstərilir</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_title">Axtarış təkliflərini gizlət</string>
|
||||
@@ -1559,13 +1594,13 @@ Bunu aktivləşdirmə daha yüksək video keyfiyyətləri əngəlin silə bilər
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
<string name="revanced_playback_speed_dialog_button_title">Sürət dialoq düyməsini göstər</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Düymə göstərilir. Oynatma sürətin standart olaraq qaytarmaq üçün toxunub saxla</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Düymə göstərilmir</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Sürət dialoqu düyməsi görünür. Oxutma sürətini ilkin vəziyyətinə qaytarmaq üçün toxunub saxlayın</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Sürət dialoqu düyməsi görünmür</string>
|
||||
</patch>
|
||||
<patch id="video.quality.button.videoQualityDialogButtonPatch">
|
||||
<string name="revanced_video_quality_dialog_button_title">Video keyfiyyəti düyməsini göstər</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">Düymə görünür. Keyfiyyəti ilkin vəziyyətinə qaytarmaq üçün toxunub saxlayın</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">Düymə görünmür</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">Video keyfiyyəti düyməsi görünür. Keyfiyyəti ilkin vəziyyətinə qaytarmaq üçün toxunub saxlayın</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">Video keyfiyyəti düyməsi görünmür</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_speed_menu_title">Fərdi oynatma sürəti siyahısı</string>
|
||||
@@ -1662,16 +1697,30 @@ Video oynatma AV1 ilə ilişə bilər və ya kadrlar buraxıla bilər."</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_on">Kəsintisiz təkrarlama aktivdir</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_off">Kəsintisiz təkrarlama qapalıdır</string>
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
<patch id="layout.buttons.hideButtons">
|
||||
<string name="revanced_music_hide_cast_button_title">Yayım düyməsini gizlət</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_on">Yayım düyməsi gizlidir</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_off">Yayım düyməsi göstərilir</string>
|
||||
<string name="revanced_music_hide_history_button_title">Tarixçə düyməsini gizlət</string>
|
||||
<string name="revanced_music_hide_history_button_summary_on">Tarixçə düyməsi gizlidir</string>
|
||||
<string name="revanced_music_hide_history_button_summary_off">Tarixçə düyməsi görünür</string>
|
||||
<string name="revanced_music_hide_notification_button_title">Bildiriş düyməsini gizlət</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_on">Bildiriş düyməsi gizlidir</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_off">Bildiriş düyməsi görünür</string>
|
||||
<string name="revanced_music_hide_search_button_title">Axtarış düyməsini gizlət</string>
|
||||
<string name="revanced_music_hide_search_button_summary_on">Axtarış düyməsi gizlidir</string>
|
||||
<string name="revanced_music_hide_search_button_summary_off">Axtarış düyməsi görünür</string>
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
<string name="revanced_music_hide_category_bar_title">Kateqoriya cizgisin gizlət</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_on">Kateqoriya cizgisi gizlidir</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_off">Kateqoriya cizgisi görünür</string>
|
||||
</patch>
|
||||
<patch id="layout.miniplayercolor.changeMiniplayerColor">
|
||||
<string name="revanced_music_change_miniplayer_color_title">Kiçik oynadıcı rəngini dəyişdir</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_on">Kiçik oynadıcı rəngi tam ekran oynadıcıya bərabərdir</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_off">Kiçik oynadıcı ilkin rəngi istifadə edir</string>
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<string name="revanced_music_navigation_bar_screen_title">Fəaliyyət cizgisi</string>
|
||||
<string name="revanced_music_navigation_bar_screen_summary">Fəaliyyət cizgisi düymələrini gizlət və ya dəyiş</string>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time_invalid">Дата стварэння APK пашкоджана</string>
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">Увага</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">Заўвага ReVanced</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">Ваша гісторыя прагляду не захоўваецца.<br><br>Гэта, хутчэй за ўсё, выклікана DNS-блакіроўшчыкам рэкламы або сеткавым праксі.<br><br>Каб выправіць гэта, дадайце <b>s.youtube.com</b> у белы спіс або адключыце ўсе DNS-блакіроўшчыкі і праксі.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Больш не паказваць</string>
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<string name="revanced_settings_submenu_title">Налады</string>
|
||||
<string name="revanced_settings_confirm_user_dialog_title">Вы ўпэўнены, што хочаце працягнуць?</string>
|
||||
<string name="revanced_settings_save">Захаваць</string>
|
||||
<string name="revanced_settings_reset">Скінуць</string>
|
||||
<string name="revanced_settings_reset_color">Скінуць колер</string>
|
||||
<string name="revanced_settings_color_invalid">Несапраўдны колер</string>
|
||||
@@ -164,6 +164,14 @@ Second \"item\" text"</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_toast">Лагі ачышчаны</string>
|
||||
<string name="revanced_debug_feature_flags_manager_title">Менеджэр функцыйных сцягоў</string>
|
||||
<string name="revanced_debug_feature_flags_manager_summary">Кіраванне лагічнымі функцыйнымі сцягамі</string>
|
||||
<string name="revanced_debug_feature_flags_manager_active_header">Актыўныя сцягі (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_blocked_header">Заблакаваныя сцягі (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_search_hint">Пошук сцягоў...</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_saved">Сцягі захаваны</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_reset">Сцягі скінуты</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_copied">Сцягі скапіяваны ў буфер абмену</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">Ачысціць спасылкі для абагульвання</string>
|
||||
@@ -274,6 +282,9 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_title">Схаваць меткі рэкамендацый відэа</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_on">Меткі «Людзі таксама глядзелі» і «Вам таксама можа спадабацца» ў выніках пошуку схаваныя</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_off">Меткі «Людзі таксама глядзелі» і «Вам таксама можа спадабацца» ў выніках пошуку паказаныя</string>
|
||||
<string name="revanced_hide_visual_spacer_title">Схаваць візуальны падзельнік</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_on">Візуальны падзельнік схаваны</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_off">Візуальны падзельнік паказаны</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">Схаваць YouTube Doodles</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Анімацыя YouTube Doodles на лагатыпе схаваная</string>
|
||||
@@ -334,12 +345,21 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_podcast_section_title">Схаваць «Пазнаёмцеся з падкастам»</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Раздзел «Пазнаёмцеся з падкастам» схаваны</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Раздзел «Пазнаёмцеся з падкастам» паказаны</string>
|
||||
<string name="revanced_hide_featured_links_section_title">Схаваць выбраныя спасылкі</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_on">Раздзел з рэкамендаванымі спасылкамі схаваны</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_off">Раздзел з рэкамендаванымі спасылкамі паказаны</string>
|
||||
<string name="revanced_hide_featured_videos_section_title">Схаваць рэкамендаваныя відэа</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_on">Раздзел з рэкамендаванымі відэа схаваны</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_off">Раздзел з рэкамендаванымі відэа паказаны</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Схаваць інфармацыйныя карткі</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">Раздзел інфармацыйных картак схаваны</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">Паказваецца раздзел інфармацыйных карт</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">Схаваць «Ключавыя канцэпцыі»</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Раздзел «Ключавыя канцэпцыі» схаваны</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Раздзел «Ключавыя канцэпцыі» паказаны</string>
|
||||
<string name="revanced_hide_subscribe_button_title">Схаваць кнопку «Падпісацца»</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_on">Кнопка «Падпісацца» схавана</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_off">Кнопка «Падпісацца» паказана</string>
|
||||
<string name="revanced_hide_transcript_section_title">Схаваць стэнаграму</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">Раздзел стэнаграмы схаваны</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">Паказваецца раздзел стэнаграмы</string>
|
||||
@@ -361,24 +381,32 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Паказаны ў гісторыі праглядаў</string>
|
||||
<string name="revanced_channel_screen_title">Старонка канала</string>
|
||||
<string name="revanced_channel_screen_summary">Схаваць або паказаць кампаненты старонкі канала</string>
|
||||
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_community_button_title">Схаваць кнопку «Супольнасць»</string>
|
||||
<string name="revanced_hide_community_button_summary_on">Кнопка супольнасці схавана</string>
|
||||
<string name="revanced_hide_community_button_summary_off">Кнопка супольнасці паказана</string>
|
||||
<!-- 'For You' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">Схаваць паліцу «Для вас»</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Паліца \"Для вас\" схаваная</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">Паліца \"Для вас\" паказаная</string>
|
||||
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_join_button_title">Схаваць кнопку Далучыцца</string>
|
||||
<string name="revanced_hide_join_button_summary_on">Кнопка Далучыцца схавана</string>
|
||||
<string name="revanced_hide_join_button_summary_off">Кнопка Далучыцца паказана</string>
|
||||
<string name="revanced_hide_links_preview_title">Схаваць папярэдні прагляд спасылак</string>
|
||||
<string name="revanced_hide_links_preview_summary_on">Папярэдні прагляд спасылак схаваны</string>
|
||||
<string name="revanced_hide_links_preview_summary_off">Папярэдні прагляд спасылак паказаны</string>
|
||||
<string name="revanced_hide_members_shelf_title">Схаваць паліцу ўдзельнікаў</string>
|
||||
<string name="revanced_hide_members_shelf_summary_on">Паліца ўдзельнікаў схаваная</string>
|
||||
<string name="revanced_hide_members_shelf_summary_off">Паліца ўдзельнікаў паказана</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_community_button_title">Схаваць кнопку \"Наведаць супольнасць\"</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_on">Кнопка \"Наведаць супольнасць\" схавана</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_off">Кнопка \"Наведаць супольнасць\" паказаная</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">Схавайце кнопку \"Наведайце краму\" на старонках канала</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Кнопка \"Наведаць краму\" схаваная</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Кнопка \"Наведаць краму\" паказаная</string>
|
||||
<!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_store_button_title">Схаваць кнопку Крама</string>
|
||||
<string name="revanced_hide_store_button_summary_on">Кнопка Крама схавана</string>
|
||||
<string name="revanced_hide_store_button_summary_off">Кнопка Крама паказана</string>
|
||||
<!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_title">Схаваць кнопку Падпісацца</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_on">Кнопка Падпісацца схавана</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_off">Кнопка Падпісацца паказана</string>
|
||||
<string name="revanced_comments_screen_title">Каментарыі</string>
|
||||
<string name="revanced_comments_screen_summary">Схаваць або паказаць кампаненты раздзела каментарыяў</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_title">Схаваць зводку чата са штучным інтэлектам</string>
|
||||
@@ -520,11 +548,11 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_share_copy_url_success">URL скапіраваны ў буфер абмену</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">URL-адрас з пазнакай часу скапіраваны</string>
|
||||
<string name="revanced_copy_video_url_title">Паказаць кнопку скапіравання URL відэа</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Кнопка паказана. Націсніце, каб скапіяваць URL відэа. Націсніце і ўтрымлівайце, каб скапіяваць з пазнакай часу</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Кнопка не паказваецца</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Кнопка \"Капіяваць URL відэа\" паказана. Націсніце, каб скапіяваць URL відэа. Націсніце і ўтрымлівайце, каб скапіяваць з пазнакай часу</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Кнопка \"Капіяваць URL відэа\" не паказана</string>
|
||||
<string name="revanced_copy_video_url_timestamp_title">Паказаць кнопку URL-адрас з часовай пазнакай</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Кнопка паказана. Націсніце, каб скапіяваць URL відэа з пазнакай часу. Націсніце і ўтрымлівайце, каб скапіяваць без пазнакі часу</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Кнопка не паказваецца</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Кнопка \"Капіяваць URL з пазнакай часу\" паказана. Націсніце, каб скапіяваць URL відэа з пазнакай часу. Націсніце і ўтрымлівайце, каб скапіяваць без пазнакі часу</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Кнопка \"Капіяваць URL з пазнакай часу\" не паказана</string>
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
<string name="revanced_remove_viewer_discretion_dialog_title">Выдаліць дыялогавае акно права прагляду</string>
|
||||
@@ -533,7 +561,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Гэта не абыходзіць узроставае абмежаванне. Ён проста прымае гэта аўтаматычна.</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
|
||||
<string name="revanced_disable_signin_to_tv_popup_title">Адключыць усплывальнае акно «Уваход у ТБ»</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_title">Адключыць усплываючае акно \"Увайсці ў ТБ\"</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_summary_on">Усплывальнае акно «Уваход у ТБ» адключана</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_summary_off">Усплывальнае акно «Уваход у ТБ» уключана</string>
|
||||
</patch>
|
||||
@@ -665,7 +693,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_download_button_summary_on">Кнопка загрузкі схавана</string>
|
||||
<string name="revanced_hide_download_button_summary_off">Паказана кнопка загрузкі</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. -->
|
||||
This button only shows on videos uploaded by the logged-in user. -->
|
||||
<string name="revanced_hide_hype_button_title">Схаваць хайп</string>
|
||||
<string name="revanced_hide_hype_button_summary_on">Кнопка Hype схаваная</string>
|
||||
<string name="revanced_hide_hype_button_summary_off">Кнопка хайпу паказана</string>
|
||||
@@ -786,10 +814,11 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_title">Схаваць гукавую дарожку</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_on">Меню гукавой дарожкі схавана</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_off">Адлюструецца меню гукавой дарожкі</string>
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
|
||||
'Android No SDK' must be kept untranslated. -->
|
||||
<string name="revanced_hide_player_flyout_audio_track_not_available">"Меню аўдыядарожкі схавана
|
||||
|
||||
Каб паказаць меню аўдыядарожкі, змяніце \"Падмена відэапатокаў\" на iPadOS"</string>
|
||||
Каб паказаць меню аўдыядарожкі, зменіце \"Імітацыя відэапатокаў\" на \"Android No SDK\""</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">Схаваць гадзіннік у VR</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Меню прагляду ў VR схавана</string>
|
||||
@@ -865,13 +894,16 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_shorts_history_title">Схаваць Shorts з гісторыі праглядаў</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_auto_dubbed_label_title">Схаваць метку \"Аўтаматычны дубляж\"</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_summary_on">Надпіс з аўтадубляжом схаваны</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_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>
|
||||
<string name="revanced_hide_shorts_effect_button_title">Схаваць кнопку эфекту</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_on">Кнопка эфекту схавана</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_off">Кнопка эфекту паказана</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">Схаваць кнопку «Зялёны экран»</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">Схаваць кнопку \"Зялёны экран\"</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_on">Кнопка с зелёным экраном Shorts скрыта</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_off">Кнопка с зелёным экраном Shorts отображается</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_title">Скрыть хештег-кнопку Shorts</string>
|
||||
@@ -881,10 +913,13 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_shorts_join_button_title">Схаваць кнопку «Далучыцца»</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_on">Кнопка «Далучыцца» схавана</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_off">Паказана кнопка «Далучыцца»</string>
|
||||
<string name="revanced_hide_shorts_live_preview_title">Схаваць жывы папярэдні прагляд</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_on">Папярэдні прагляд у рэальным часе схаваны</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_off">Папярэдні прагляд у рэальным часе паказаны</string>
|
||||
<string name="revanced_hide_shorts_location_label_title">Схаваць метку месцазнаходжання</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_on">Метка месцазнаходжання схавана</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_off">Паказана метка месцазнаходжання</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">Схаваць кнопку «Новыя паведамленні»</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">Схаваць кнопку \"Новыя паведамленні\"</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_on">Кнопка «Новыя паведамленні» схавана</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_off">Кнопка «Новыя паведамленні» паказана</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_title">Схаваць прыпыненыя кнопкі накладання</string>
|
||||
@@ -893,7 +928,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_title">Схаваць папярэдні прагляд каментарыя</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_on">Папярэдні прагляд каментарыя схаваны</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_off">Паказваецца папярэдні прагляд каментарыя</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">Схаваць кнопку «Захаваць музыку»</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">Схаваць кнопку \"Захаваць музыку\"</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_on">Кнопка захавання музыкі схавана</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_off">Кнопка захавання музыкі паказана</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_title">Схаваць прапановы пошуку</string>
|
||||
@@ -1561,13 +1596,13 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
<string name="revanced_playback_speed_dialog_button_title">Паказаць дыялогавую кнопку хуткасці</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Кнопка паказана. Націсніце і ўтрымлівайце, каб скінуць хуткасць прайгравання да стандартнай</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Кнопка не паказваецца</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Кнопка дыялогу хуткасці паказана. Націсніце і ўтрымлівайце, каб скінуць хуткасць прайгравання да значэння па змаўчанні</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Кнопка дыялогу хуткасці не паказана</string>
|
||||
</patch>
|
||||
<patch id="video.quality.button.videoQualityDialogButtonPatch">
|
||||
<string name="revanced_video_quality_dialog_button_title">Паказаць кнопку якасці відэа</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">Кнопка паказана. Націсніце і ўтрымлівайце, каб скінуць якасць да па змаўчанні</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">Кнопка не паказваецца</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">Кнопка якасці відэа паказана. Націсніце і ўтрымлівайце, каб скінуць якасць да значэння па змаўчанні</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">Кнопка якасці відэа не паказана</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_speed_menu_title">Меню пользовательской скорости воспроизведения</string>
|
||||
@@ -1664,16 +1699,30 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_on">Пастаянны паўтор уключаны</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_off">Пастаянны паўтор адключаны</string>
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
<patch id="layout.buttons.hideButtons">
|
||||
<string name="revanced_music_hide_cast_button_title">Схаваць кнопку трансляцыі</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_on">Кнопка трансляцыі схавана</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_off">Кнопка трансляцыі паказана</string>
|
||||
<string name="revanced_music_hide_history_button_title">Схаваць кнопку гісторыі</string>
|
||||
<string name="revanced_music_hide_history_button_summary_on">Кнопка гісторыі схавана</string>
|
||||
<string name="revanced_music_hide_history_button_summary_off">Кнопка гісторыі паказана</string>
|
||||
<string name="revanced_music_hide_notification_button_title">Схаваць кнопку апавяшчэння</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_on">Кнопка апавяшчэння схаваная</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_off">Кнопка апавяшчэння паказаная</string>
|
||||
<string name="revanced_music_hide_search_button_title">Схаваць кнопку пошуку</string>
|
||||
<string name="revanced_music_hide_search_button_summary_on">Кнопка пошуку схаваная</string>
|
||||
<string name="revanced_music_hide_search_button_summary_off">Кнопка пошуку паказаная</string>
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
<string name="revanced_music_hide_category_bar_title">Схаваць панэль катэгорый</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_on">Панэль катэгорый схаваная</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_off">Панэль катэгорый паказаная</string>
|
||||
</patch>
|
||||
<patch id="layout.miniplayercolor.changeMiniplayerColor">
|
||||
<string name="revanced_music_change_miniplayer_color_title">Змяніць колер міні-плэера</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_on">Колер міні-плэера супадае з поўнаэкранным плэерам</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_off">Міні-плэер выкарыстоўвае колер па змаўчанні</string>
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<string name="revanced_music_navigation_bar_screen_title">Панэль навігацыі</string>
|
||||
<string name="revanced_music_navigation_bar_screen_summary">Схаваць або змяніць кнопкі панэлі навігацыі</string>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time_invalid">Датата на компилация на APK е повредена</string>
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">Предупреждение</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">Известие от ReVanced</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">Историята ви на гледане не се запазва.<br><br>Това най-вероятно е причинено от DNS блокиращ реклами или мрежов прокси.<br><br>За да коригирате това, поставете <b>s.youtube в белия списък.com</b> или изключете всички DNS блокери и проксита.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Не показвай отново</string>
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<string name="revanced_settings_submenu_title">Настройки</string>
|
||||
<string name="revanced_settings_confirm_user_dialog_title">Сигурни ли сте, че искате да продължите?</string>
|
||||
<string name="revanced_settings_save">Запазване</string>
|
||||
<string name="revanced_settings_reset">Възстанови</string>
|
||||
<string name="revanced_settings_reset_color">Нулиране на цвета</string>
|
||||
<string name="revanced_settings_color_invalid">Невалиден цвят</string>
|
||||
@@ -164,6 +164,14 @@ Second \"item\" text"</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_toast">Логовете са изчистени</string>
|
||||
<string name="revanced_debug_feature_flags_manager_title">Мениджър на флагове за функции</string>
|
||||
<string name="revanced_debug_feature_flags_manager_summary">Управление на булеви флагове за функции</string>
|
||||
<string name="revanced_debug_feature_flags_manager_active_header">Активни флагове (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_blocked_header">Блокирани флагове (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_search_hint">Търсене на флагове...</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_saved">Флаговете са запазени</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_reset">Флаговете са нулирани</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_copied">Флаговете са копирани в клипборда</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">Почистване на връзки за споделяне</string>
|
||||
@@ -274,6 +282,9 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_title">Скриване на етикетите за препоръчани видеоклипове</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_on">\'Хората също така гледаха\' и \'Може също да харесате\' етикетите в резултатите от търсене са скрити</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_off">\'Хората също така гледаха\' и \'Може също да харесате\' етикетите в резултатите от търсене са показани</string>
|
||||
<string name="revanced_hide_visual_spacer_title">Скрий визуалния разделител</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_on">Визуалният разделител е скрит</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_off">Визуалният разделител е показан</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">YouTube Doodles</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Анимацията на YouTube Doodles върху логото е скрита</string>
|
||||
@@ -334,12 +345,21 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_podcast_section_title">Скриване на \"Разгледайте подкаста\"</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Секцията \"Разгледайте подкаста\" е скрита</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Секцията \"Разгледайте подкаста\" е показана</string>
|
||||
<string name="revanced_hide_featured_links_section_title">Скриване на препоръчени връзки</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_on">Секцията с представени връзки е скрита</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_off">Секцията с представени връзки е показана</string>
|
||||
<string name="revanced_hide_featured_videos_section_title">Скриване на представени видеоклипове</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_on">Секцията с представени видеоклипове е скрита</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_off">Секцията с представени видеоклипове е показана</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Скриване на инфо. карти</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">Разделът за информационни карти е скрит</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">Разделът за информационни карти е показан</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">Скриване на \"Основни концепции\"</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Секцията \"Основни концепции\" е скрита</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Секцията \"Основни концепции\" е показана</string>
|
||||
<string name="revanced_hide_subscribe_button_title">Скриване на бутона за абониране</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_on">Бутонът за абониране е скрит</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_off">Бутонът за абониране е показан</string>
|
||||
<string name="revanced_hide_transcript_section_title">Скриване на транскрипт</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">Разделът за транскрипция е скрит</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">Разделът за транскрипция е показан</string>
|
||||
@@ -361,24 +381,32 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Показано в историята на гледанията</string>
|
||||
<string name="revanced_channel_screen_title">Страница на канала</string>
|
||||
<string name="revanced_channel_screen_summary">Скриване или показване на компоненти на страницата на канала</string>
|
||||
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_community_button_title">Скрий бутона за Общност</string>
|
||||
<string name="revanced_hide_community_button_summary_on">Бутонът за общност е скрит</string>
|
||||
<string name="revanced_hide_community_button_summary_off">Бутонът за общност е показан</string>
|
||||
<!-- 'For You' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">Скриване на рафта \"За вас\"</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Рафтът „За Вас“ е скрит</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">Рафтът „За Вас“ е показан</string>
|
||||
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_join_button_title">Скриване на бутона Присъединяване</string>
|
||||
<string name="revanced_hide_join_button_summary_on">Бутонът Присъединяване е скрит</string>
|
||||
<string name="revanced_hide_join_button_summary_off">Бутонът Присъединяване е показан</string>
|
||||
<string name="revanced_hide_links_preview_title">Скриване на преглед на връзки</string>
|
||||
<string name="revanced_hide_links_preview_summary_on">Прегледът на връзки е скрит</string>
|
||||
<string name="revanced_hide_links_preview_summary_off">Прегледът на връзки е показан</string>
|
||||
<string name="revanced_hide_members_shelf_title">Скриване на рафта за членове</string>
|
||||
<string name="revanced_hide_members_shelf_summary_on">Рафтът за членове е скрит</string>
|
||||
<string name="revanced_hide_members_shelf_summary_off">Рафтът за членове е показан</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_community_button_title">Скриване на бутона \"Посетете общността\"</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_on">Бутонът \"Посетете общността\" е скрит</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_off">Бутонът „Посетете общността“ е показан</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">Скрийте бутона „Посетете магазина“ на страниците на каналите</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Бутонът „Посетете магазина“ е скрит</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Бутонът „Посетете магазина“ е показан</string>
|
||||
<!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_store_button_title">Скриване на бутона Магазин</string>
|
||||
<string name="revanced_hide_store_button_summary_on">Бутонът Магазин е скрит</string>
|
||||
<string name="revanced_hide_store_button_summary_off">Бутонът Магазин е показан</string>
|
||||
<!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_title">Скриване на бутона Абониране</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_on">Бутонът Абониране е скрит</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_off">Бутонът Абониране е показан</string>
|
||||
<string name="revanced_comments_screen_title">Коментари</string>
|
||||
<string name="revanced_comments_screen_summary">Скриване или показване на секцията за коментари</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_title">Скриване на резюмето на AI чата</string>
|
||||
@@ -520,11 +548,11 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_share_copy_url_success">Връзката е копирана в клипборда.</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">URL адрес с отметка за време, копиран в клипборда.</string>
|
||||
<string name="revanced_copy_video_url_title">Показване на бутона за копиране на URL адреса на видеоклипа</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Бутонът е показан. Докоснете, за да копирате URL адреса на видеоклипа. Докоснете и задръжте, за да копирате с времеви печат</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Бутонът не е показан</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Бутонът за копиране на URL адрес на видео е показан. Докоснете, за да копирате URL адреса на видеото. Докоснете и задръжте, за да копирате с времева отметка</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Бутонът за копиране на URL адрес на видео не е показан</string>
|
||||
<string name="revanced_copy_video_url_timestamp_title">Показване на бутона за копиране на URL адреса на времевия отпечатък на видеоклипа</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Бутонът е показан. Докоснете, за да копирате URL адреса на видеоклипа с времеви печат. Докоснете и задръжте, за да копирате без времеви печат</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Бутонът не е показан</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Бутонът за копиране на URL адрес с времева отметка е показан. Докоснете, за да копирате URL адрес на видео с времева отметка. Докоснете и задръжте, за да копирате без времева отметка</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Бутонът за копиране на URL адрес с времева отметка не е показан</string>
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
<string name="revanced_remove_viewer_discretion_dialog_title">Прозорец за възрастово ограничение</string>
|
||||
@@ -533,7 +561,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Тази функция не заобикаля възрастовото ограничение. Тя просто приема възрастовата граница автоматично.</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
|
||||
<string name="revanced_disable_signin_to_tv_popup_title">Деактивиране на изскачащия прозорец „Влизане в телевизора“</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_title">Деактивиране на изскачащия прозорец „Вход в телевизор“</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_summary_on">Изскачащият прозорец „Влизане в телевизора“ е деактивиран</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_summary_off">Изскачащият прозорец „Влизане в телевизора“ е активиран</string>
|
||||
</patch>
|
||||
@@ -665,7 +693,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_download_button_summary_on">Бутона за изтегляне е скрит</string>
|
||||
<string name="revanced_hide_download_button_summary_off">Бутона за изтегляне се показва</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. -->
|
||||
This button only shows on videos uploaded by the logged-in user. -->
|
||||
<string name="revanced_hide_hype_button_title">Скрий хайпа</string>
|
||||
<string name="revanced_hide_hype_button_summary_on">Бутонът за хайп е скрит</string>
|
||||
<string name="revanced_hide_hype_button_summary_off">Бутонът за хайп е показан</string>
|
||||
@@ -786,10 +814,11 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_title">Избор на Аудио</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_on">Менюто за избор на Аудио е скрито</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_off">Менюто за избор на Аудио се показва</string>
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
|
||||
'Android No SDK' must be kept untranslated. -->
|
||||
<string name="revanced_hide_player_flyout_audio_track_not_available">"Менюто за аудиозапис е скрито
|
||||
|
||||
За да покажете менюто за аудиозапис, променете „Подправяне на видео потоци“ на iPadOS"</string>
|
||||
За да покажете менюто за аудиозапис, променете „Подправяне на видео потоци“ на „Android No SDK“"</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">Гледайте във VR</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Менюто за гледане в VR е скрито</string>
|
||||
@@ -865,13 +894,16 @@ Second \"item\" text"</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_super_thanks_button_title">Скриване на бутона Buy Super Thanks</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_title">Скриване на етикета „Автоматично озвучено“</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_summary_on">Етикетът за автоматично озвучаване е скрит</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_summary_off">Етикетът за автоматично озвучаване е показан</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_title">Скриване на бутона „Купете супер благодарности“</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>
|
||||
<string name="revanced_hide_shorts_effect_button_title">Скрий бутона за ефект</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_on">Бутонът за ефекти е скрит</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_off">Бутонът за ефекти е видим</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">Скриване на бутона Green screen</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">Скриване на бутона „Зелен екран“</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_on">Бутон \"Зелен екран\" е скрит</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_off">Бутон \"Зелен екран\" се показва</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_title">Скриване на бутона за хаштаг</string>
|
||||
@@ -881,10 +913,13 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_shorts_join_button_title">Скриване на бутона Join</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_on">Бутона за присъединяване е скрит</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_off">Бутона за присъединяване се показва</string>
|
||||
<string name="revanced_hide_shorts_live_preview_title">Скриване на прегледа на живо</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_on">Прегледът на живо е скрит</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_off">Прегледът на живо е показан</string>
|
||||
<string name="revanced_hide_shorts_location_label_title">Етикет за местоположение</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_on">Етикет за местоположение е скрит</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_off">Етикет за местоположение се показва</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">Скриване на бутона \"Нови публикации\"</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">Скриване на бутона „Нови публикации“</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_on">Бутонът \"Нови публикации\" е скрит</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_off">Бутонът \"Нови публикации\" се показва</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_title">Показване на бутони при пауза</string>
|
||||
@@ -893,7 +928,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_title">Скриване на коментара за визуализация</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_on">Коментарът за визуализация е скрит</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_off">Показва се визуализация на коментара</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">Скриване на бутона Save music</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">Скриване на бутона „Запазване на музика“</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_on">Бутонът за запазване на музика е скрит</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_off">Показан е бутонът за запазване на музика</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_title">Скриване на предложенията за търсене</string>
|
||||
@@ -914,7 +949,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_title">Скриване на бутона Upcoming</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_on">Бутон \"Предстоящи събития\" е скрит</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_off">Бутон \"Предстоящи събития\" се показва</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_title">Скриване на бутона \"Използвайте този звук\"</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_title">Скриване на бутона „Използване на този звук“</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_on">Бутонът \"Използвайте този звук\" е скрит</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_off">Бутонът \"Използвайте този звук\" е показан</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_title">Скриване на бутона „Използване на този шаблон“</string>
|
||||
@@ -1560,13 +1595,13 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
<string name="revanced_playback_speed_dialog_button_title">Показване бутон за скорост</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Бутонът е показан. Докоснете и задръжте, за да върнете скоростта на възпроизвеждане към стойността по подразбиране</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Бутонът не е показан</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Бутонът за диалогов прозорец за скорост е показан. Докоснете и задръжте, за да възстановите скоростта на възпроизвеждане до по подразбиране</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Бутонът за диалогов прозорец за скорост не е показан</string>
|
||||
</patch>
|
||||
<patch id="video.quality.button.videoQualityDialogButtonPatch">
|
||||
<string name="revanced_video_quality_dialog_button_title">Покажи бутона за качество на видеото</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">Бутонът е показан. Докоснете и задръжте, за да възстановите качеството до подразбиране</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">Бутонът не е показан</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">Бутонът за качество на видеото е показан. Докоснете и задръжте, за да възстановите качеството до по подразбиране</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">Бутонът за качество на видеото не е показан</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_speed_menu_title">Менюто за потребителска скорост</string>
|
||||
@@ -1663,16 +1698,30 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_on">Постоянното повтаряне е активирано</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_off">Постоянното повтаряне е деактивирано</string>
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
<patch id="layout.buttons.hideButtons">
|
||||
<string name="revanced_music_hide_cast_button_title">Скриване на бутона за предаване</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_on">Бутонът за предаване е скрит</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_off">Бутонът за предаване е показан</string>
|
||||
<string name="revanced_music_hide_history_button_title">Скриване на бутона за история</string>
|
||||
<string name="revanced_music_hide_history_button_summary_on">Бутонът за история е скрит</string>
|
||||
<string name="revanced_music_hide_history_button_summary_off">Бутонът за история е показан</string>
|
||||
<string name="revanced_music_hide_notification_button_title">Скриване на бутона за известия</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_on">Бутонът за известия е скрит</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_off">Бутонът за известия е показан</string>
|
||||
<string name="revanced_music_hide_search_button_title">Скриване на бутона за търсене</string>
|
||||
<string name="revanced_music_hide_search_button_summary_on">Бутонът за търсене е скрит</string>
|
||||
<string name="revanced_music_hide_search_button_summary_off">Бутонът за търсене е показан</string>
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
<string name="revanced_music_hide_category_bar_title">Скриване на лентата с категории</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_on">Лентата с категории е скрита</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_off">Лентата с категории е показана</string>
|
||||
</patch>
|
||||
<patch id="layout.miniplayercolor.changeMiniplayerColor">
|
||||
<string name="revanced_music_change_miniplayer_color_title">Промяна на цвета на миниплейъра</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_on">Цветът на миниплейъра съвпада с този на плейъра на цял екран</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_off">Миниплейърът използва цвят по подразбиране</string>
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<string name="revanced_music_navigation_bar_screen_title">Навигационна лента</string>
|
||||
<string name="revanced_music_navigation_bar_screen_summary">Скриване или промяна на бутоните на навигационната лента</string>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time_invalid">APK তৈরির তারিখ ত্রুটিপূর্ণ</string>
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">সতর্কীকরণ</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">ReVanced নোটিশ</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">আপনার দেখার ইতিহাস সংরক্ষিত হচ্ছে না।<br><br>এটি সম্ভবত DNS অ্যাড ব্লকার অথবা নেটওয়ার্ক প্রক্সির কারণে।<br><br>এটি ঠিক করার জন্য, <b>s.youtube.com</b> সাদা তালিকাভুক্ত করুন অথবা সকল DNS ব্লকার এবং প্রক্সি বন্ধ করুন।</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">আবার দেখাবেন না</string>
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<string name="revanced_settings_submenu_title">সেটিংস</string>
|
||||
<string name="revanced_settings_confirm_user_dialog_title">আপনি কি এগিয়ে যেতে চান?</string>
|
||||
<string name="revanced_settings_save">সংরক্ষণ করুন</string>
|
||||
<string name="revanced_settings_reset">আবার সেট করুন</string>
|
||||
<string name="revanced_settings_reset_color">রঙ রিসেট করুন</string>
|
||||
<string name="revanced_settings_color_invalid">অবৈধ রঙ</string>
|
||||
@@ -164,6 +164,14 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<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_toast">লগ সাফ করা হয়েছে</string>
|
||||
<string name="revanced_debug_feature_flags_manager_title">ফিচার ফ্ল্যাগ Manager</string>
|
||||
<string name="revanced_debug_feature_flags_manager_summary">বুলিয়ান ফিচার ফ্ল্যাগ পরিচালনা করুন</string>
|
||||
<string name="revanced_debug_feature_flags_manager_active_header">সক্রিয় ফ্ল্যাগ (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_blocked_header">ব্লক করা ফ্ল্যাগ (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_search_hint">ফ্ল্যাগ খুঁজুন...</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_saved">ফ্ল্যাগ সংরক্ষণ করা হয়েছে</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_reset">ফ্ল্যাগ রিসেট করা হয়েছে</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_copied">ফ্ল্যাগ ক্লিপবোর্ডে কপি করা হয়েছে</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">শেয়ারিং লিঙ্ক স্যানিটাইজ করুন</string>
|
||||
@@ -270,6 +278,9 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_hide_video_recommendation_labels_title">ভিডিও সুপারিশ লেবেল লুকান</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_on">\"অন্যান্য দর্শক দেখেছেন\" এবং \"আপনার পছন্দ হতে পারে\" লেবেলগুলি অনুসন্ধান ফলাফলে লুকানো আছে</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_off">\"অন্যান্য দর্শক দেখেছেন\" এবং \"আপনার পছন্দ হতে পারে\" লেবেলগুলি অনুসন্ধান ফলাফলে দেখানো হয়েছে</string>
|
||||
<string name="revanced_hide_visual_spacer_title">ভিজ্যুয়াল স্পেসার লুকান</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_on">ভিজ্যুয়াল স্পেসার লুকানো হয়েছে</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_off">ভিজ্যুয়াল স্পেসার দেখানো হয়েছে</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">YouTube Doodles छिपाएँ</string>
|
||||
<string name="revanced_hide_doodles_summary_on">লোগোতে YouTube Doodles অ্যানিমেশন লুকানো আছে</string>
|
||||
@@ -330,12 +341,21 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_hide_podcast_section_title">\'Explore the podcast\' লুকান</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Explore the podcast বিভাগটি লুকানো আছে</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Explore the podcast বিভাগটি দেখানো হয়েছে</string>
|
||||
<string name="revanced_hide_featured_links_section_title">ফিচার লিঙ্ক লুকান</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_on">বিশেষ লিঙ্ক বিভাগ লুকানো আছে</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_off">বিশেষ লিঙ্ক বিভাগ দেখানো আছে</string>
|
||||
<string name="revanced_hide_featured_videos_section_title">বিশেষ ভিডিও লুকান</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_on">বিশেষ ভিডিও বিভাগ লুকানো আছে</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_off">বিশেষ ভিডিও বিভাগ দেখানো আছে</string>
|
||||
<string name="revanced_hide_info_cards_section_title">তথ্য কার্ড লুকান</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">তথ্য কার্ড সেকশন লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">তথ্য কার্ড সেকশন প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">\'Key concepts\' লুকান</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Key concepts বিভাগটি লুকানো আছে</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Key concepts বিভাগটি দেখানো হয়েছে</string>
|
||||
<string name="revanced_hide_subscribe_button_title">সাবস্ক্রাইব বোতাম লুকান</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_on">সাবস্ক্রাইব বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_off">সাবস্ক্রাইব বোতাম দেখানো আছে</string>
|
||||
<string name="revanced_hide_transcript_section_title">নথি লুকান</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">ট্রান্সস্ক্রিপ্ট বিভাগ লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">ট্রান্সস্ক্রিপ্ট বিভাগ প্রদর্শিত হয়েছে</string>
|
||||
@@ -357,24 +377,32 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">দেখার ইতিহাসে দেখানো হয়েছে</string>
|
||||
<string name="revanced_channel_screen_title">চ্যানেল পৃষ্ঠা</string>
|
||||
<string name="revanced_channel_screen_summary">চ্যানেল পৃষ্ঠার উপাদানগুলি লুকান বা দেখান</string>
|
||||
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_community_button_title">কমিউনিটি বোতাম লুকান</string>
|
||||
<string name="revanced_hide_community_button_summary_on">কমিউনিটি বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_community_button_summary_off">কমিউনিটি বোতাম দেখানো আছে</string>
|
||||
<!-- 'For You' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">\'আপনার জন্য\' শেল্ফ লুকান</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">আপনার জন্য শেল্ফ লুকানো আছে</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">আপনার জন্য শেল্ফ দেখানো আছে</string>
|
||||
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_join_button_title">যোগদান বোতাম লুকান</string>
|
||||
<string name="revanced_hide_join_button_summary_on">যোগদান বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_join_button_summary_off">যোগদান বোতাম দেখানো আছে</string>
|
||||
<string name="revanced_hide_links_preview_title">লিঙ্ক পূর্বরূপ লুকান</string>
|
||||
<string name="revanced_hide_links_preview_summary_on">লিঙ্ক পূর্বরূপ লুকানো আছে</string>
|
||||
<string name="revanced_hide_links_preview_summary_off">লিঙ্ক পূর্বরূপ দেখানো আছে</string>
|
||||
<string name="revanced_hide_members_shelf_title">সদস্য শেল্ফ লুকান</string>
|
||||
<string name="revanced_hide_members_shelf_summary_on">সদস্য শেল্ফ লুকানো আছে</string>
|
||||
<string name="revanced_hide_members_shelf_summary_off">সদস্যদের শেল্ফ দেখানো হয়েছে</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_community_button_title">\'কমিউনিটি দেখুন\' বোতাম লুকান</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_on">\'কমিউনিটি দেখুন\' বোতাম লুকানো হয়েছে</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_off">কমিউনিটি ভিজিট বাটন দেখানো আছে</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">চ্যানেল পাতায় \'স্টোরে যান\' বোতাম লুকান</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">স্টোর ভিজিট বাটন লুকানো আছে</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">স্টোর ভিজিট বাটন দেখানো আছে</string>
|
||||
<!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_store_button_title">স্টোর বোতাম লুকান</string>
|
||||
<string name="revanced_hide_store_button_summary_on">স্টোর বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_store_button_summary_off">স্টোর বোতাম দেখানো আছে</string>
|
||||
<!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_title">সাবস্ক্রাইব বোতাম লুকান</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_on">সাবস্ক্রাইব বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_off">সাবস্ক্রাইব বোতাম দেখানো আছে</string>
|
||||
<string name="revanced_comments_screen_title">মন্তব্য</string>
|
||||
<string name="revanced_comments_screen_summary">মন্তব্য বিভাগের উপাদানগুলি লুকান বা দেখান৷</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_title">এআই চ্যাট সারাংশ লুকান</string>
|
||||
@@ -516,11 +544,11 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_share_copy_url_success">ক্লিপবোর্ডে URL অনুলিপি করা হয়েছে</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">টাইমস্ট্যাম্প সহ URL অনুলিপি করা হয়েছে</string>
|
||||
<string name="revanced_copy_video_url_title">ভিডিও URL অনুলিপি বোতাম দেখান</string>
|
||||
<string name="revanced_copy_video_url_summary_on">বোতামটি দেখানো হয়েছে। ভিডিও URL কপি করতে আলতো চাপুন। টাইমস্ট্যাম্প সহ কপি করতে টিপুন এবং ধরে রাখুন।</string>
|
||||
<string name="revanced_copy_video_url_summary_off">বোতাম প্রদর্শিত হয়নি</string>
|
||||
<string name="revanced_copy_video_url_summary_on">ভিডিও ইউআরএল কপি বোতাম দেখানো আছে। ভিডিও ইউআরএল কপি করতে ট্যাপ করুন। টাইমস্ট্যাম্প সহ কপি করতে ট্যাপ করে ধরে রাখুন</string>
|
||||
<string name="revanced_copy_video_url_summary_off">ভিডিও ইউআরএল কপি বোতাম দেখানো নেই</string>
|
||||
<string name="revanced_copy_video_url_timestamp_title">টাইমস্ট্যাম্প URL অনুলিপি বোতাম দেখান</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">বোতামটি দেখানো হয়েছে। টাইমস্ট্যাম্প সহ ভিডিও URL কপি করতে আলতো চাপুন। টাইমস্ট্যাম্প ছাড়া কপি করতে টিপুন এবং ধরে রাখুন।</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">বোতাম প্রদর্শিত হয়নি</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">টাইমস্ট্যাম্প ইউআরএল কপি বোতাম দেখানো আছে। টাইমস্ট্যাম্প সহ ভিডিও ইউআরএল কপি করতে ট্যাপ করুন। টাইমস্ট্যাম্প ছাড়া কপি করতে ট্যাপ করে ধরে রাখুন</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">টাইমস্ট্যাম্প ইউআরএল কপি বোতাম দেখানো নেই</string>
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
<string name="revanced_remove_viewer_discretion_dialog_title">দর্শকের বিচক্ষণতা ডায়ালগ সরান</string>
|
||||
@@ -529,7 +557,7 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">এটি বয়সের সীমাবদ্ধতাকে বাইপাস করে না। এটা শুধু স্বয়ংক্রিয়ভাবে গ্রহণ করে।</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
|
||||
<string name="revanced_disable_signin_to_tv_popup_title">টিভিতে সাইন ইন পপআপ অক্ষম করুন</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_title">\'টিভি-তে সাইন ইন করুন\' পপআপ নিষ্ক্রিয় করুন</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_summary_on">টিভিতে সাইন ইন পপআপ অক্ষম করা হয়েছে</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_summary_off">টিভিতে সাইন ইন পপআপ সক্ষম করা হয়েছে</string>
|
||||
</patch>
|
||||
@@ -661,7 +689,7 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_hide_download_button_summary_on">ডাউনলোড বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_download_button_summary_off">ডাউনলোড বোতাম দেখানো হয়েছে</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. -->
|
||||
This button only shows on videos uploaded by the logged-in user. -->
|
||||
<string name="revanced_hide_hype_button_title">হাইপ লুকান</string>
|
||||
<string name="revanced_hide_hype_button_summary_on">হাইপ বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_hype_button_summary_off">হাইপ বাটন দেখানো হয়েছে</string>
|
||||
@@ -782,10 +810,11 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_hide_player_flyout_audio_track_title">অডিও ট্র্যাক লুকান</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_on">অডিও ট্র্যাক মেনু লুকানো আছে</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_off">অডিও ট্র্যাক মেনু দেখানো হয়</string>
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
|
||||
'Android No SDK' must be kept untranslated. -->
|
||||
<string name="revanced_hide_player_flyout_audio_track_not_available">"অডিও ট্র্যাক মেনু লুকানো আছে
|
||||
|
||||
অডিও ট্র্যাক মেনু দেখানোর জন্য, 'ভিডিও স্ট্রিম স্পুফ করুন' কে iPadOS এ পরিবর্তন করুন"</string>
|
||||
অডিও ট্র্যাক মেনু দেখাতে, 'Spoof video streams' কে 'Android No SDK'-তে পরিবর্তন করুন।"</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">ভিআর-এ ঘড়ি লুকান</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">ভিআর মেনুতে দেখুন লুকানো আছে</string>
|
||||
@@ -861,13 +890,16 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_hide_shorts_history_title">Shortsগুলিকে ওয়াচ ইতিহাসে লুকান</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">সুপার থ্যাঙ্কস বোতামটি লুকান</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_title">\'স্বয়ংক্রিয়-ডাবড\' লেবেল লুকান</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_summary_on">স্বয়ংক্রিয় ডাব করা লেবেল লুকানো হয়েছে</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_summary_off">স্বয়ংক্রিয় ডাব করা লেবেল দেখা যাচ্ছে</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_title">\'সুপার থ্যাঙ্কস কিনুন\' বোতাম লুকান</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_on">সুপার থ্যাঙ্কস কিনুন বোতামটি লুকানো আছে</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_off">সুপার থ্যাঙ্কস কিনুন বোতামটি দেখানো হয়েছে</string>
|
||||
<string name="revanced_hide_shorts_effect_button_title">ইফেক্ট বোতাম লুকান</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_on">ইফেক্ট বাটন লুকানো আছে</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_off">ইফেক্ট বাটন দেখানো আছে</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">গ্রিন স্ক্রিন বোতামটি লুকান</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">\'গ্রিন স্ক্রিন\' বোতাম লুকান</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_on">সবুজ পর্দা বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_off">সবুজ পর্দা বোতাম দেখানো হচ্ছে</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_title">হ্যাশট্যাগ বোতাম লুকান</string>
|
||||
@@ -877,10 +909,13 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_hide_shorts_join_button_title">সামিল হও বোতামটি লুকান</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_on">জয়েন করুন বোতাম লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_off">জয়েন করুন বোতাম প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_shorts_live_preview_title">সরাসরি পূর্বরূপ লুকান</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_on">লাইভ প্রিভিউ লুকানো আছে</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_off">লাইভ প্রিভিউ দেখানো হয়েছে</string>
|
||||
<string name="revanced_hide_shorts_location_label_title">অবস্থান লেবেল লুকান</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_on">অবস্থান লেবেল লুকিয়ে রয়েছে</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_off">অবস্থান লেবেল প্রদর্শিত হয়েছে</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">নতুন পোস্ট বোতাম লুকান</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">\'নতুন পোস্ট\' বোতাম লুকান</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_on">নতুন পোস্ট বোতাম লুকানো হয়েছে</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_off">নতুন পোস্ট বোতাম দেখানো হয়েছে</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_title">থেমে থাকা ওভারলে বোতাম লুকান</string>
|
||||
@@ -889,7 +924,7 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_hide_shorts_preview_comment_title">Preview comment লুকান</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_on">Preview comment লুকানো আছে</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_off">Preview comment দেখানো হয়েছে</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">সেভ মিউজিক বোতামটি লুকান</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">\'মিউজিক সেভ করুন\' বোতাম লুকান</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_on">Save music বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_off">Save music বোতাম দেখানো হচ্ছে</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_title">অনুসন্ধান পরামর্শগুলি লুকান</string>
|
||||
@@ -910,10 +945,10 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
|
||||
<string name="revanced_hide_shorts_upcoming_button_title">আসন্ন বোতামটি লুকান</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_on">আগামী বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_off">আগামী বোতাম দেখানো হচ্ছে</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_title">এই সাউন্ড বাটনটি লুকান</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_title">\'এই সাউন্ড ব্যবহার করুন\' বোতাম লুকান</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_on">এই সাউন্ড বাটনটি লুকানো আছে</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_off">এই সাউন্ড বাটনটি দেখা যাচ্ছে</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_title">\"এই টেমপ্লেট ব্যবহার করুন\" বোতাম লুকান</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_title">\'এই টেমপ্লেট ব্যবহার করুন\' বোতাম লুকান</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_on">এই টেমপ্লেট বাটনটি লুকানো আছে</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_off">\"এই টেমপ্লেট ব্যবহার করুন\" বোতামটি দেখানো হয়েছে</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_title">লাইক বোতাম ফাউন্টেন অ্যানিমেশনটি লুকান</string>
|
||||
@@ -1556,13 +1591,13 @@ DeArrow সম্পর্কে আরও জানতে এখানে ট
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
<string name="revanced_playback_speed_dialog_button_title">স্পিড ডায়ালগ বোতাম দেখান</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">বোতামটি দেখানো হয়েছে। প্লেব্যাক স্পীড ডিফল্টে রিসেট করতে ট্যাপ করে ধরে রাখুন।</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">বোতাম প্রদর্শিত হয়নি</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">স্পিড ডায়ালগ বোতাম দেখানো আছে। প্লেব্যাক স্পিড ডিফল্টে রিসেট করতে ট্যাপ করে ধরে রাখুন</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">স্পিড ডায়ালগ বোতাম দেখানো নেই</string>
|
||||
</patch>
|
||||
<patch id="video.quality.button.videoQualityDialogButtonPatch">
|
||||
<string name="revanced_video_quality_dialog_button_title">ভিডিও গুণমান বোতাম দেখান</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">বোতামটি দেখানো হয়েছে। গুণমান ডিফল্টে রিসেট করতে ট্যাপ করে ধরে রাখুন।</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">বোতামটি দেখানো হয়নি।</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">ভিডিও কোয়ালিটি বোতাম দেখানো আছে। কোয়ালিটি ডিফল্টে রিসেট করতে ট্যাপ করে ধরে রাখুন</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">ভিডিও কোয়ালিটি বোতাম দেখানো নেই</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_speed_menu_title">কাস্টম প্লেব্যাক গতি মেনু</string>
|
||||
@@ -1659,16 +1694,30 @@ AV1 সহ ভিডিও প্লেব্যাক আটকে যেতে
|
||||
<string name="revanced_music_play_permanent_repeat_summary_on">স্থায়ী পুনরাবৃত্তি সক্ষম করা হয়েছে</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_off">স্থায়ী পুনরাবৃত্তি অক্ষম করা হয়েছে</string>
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
<patch id="layout.buttons.hideButtons">
|
||||
<string name="revanced_music_hide_cast_button_title">কাস্ট বোতাম লুকান</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_on">কাস্ট বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_off">কাস্ট বোতাম দেখানো আছে</string>
|
||||
<string name="revanced_music_hide_history_button_title">ইতিহাস বোতাম লুকান</string>
|
||||
<string name="revanced_music_hide_history_button_summary_on">ইতিহাস বোতাম লুকানো আছে</string>
|
||||
<string name="revanced_music_hide_history_button_summary_off">ইতিহাস বোতাম দেখানো আছে</string>
|
||||
<string name="revanced_music_hide_notification_button_title">বিজ্ঞপ্তি বাটন লুকান</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_on">বিজ্ঞপ্তি বাটন লুকানো আছে</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_off">বিজ্ঞপ্তি বাটন দেখানো হয়েছে</string>
|
||||
<string name="revanced_music_hide_search_button_title">অনুসন্ধান বাটন লুকান</string>
|
||||
<string name="revanced_music_hide_search_button_summary_on">অনুসন্ধান বাটন লুকানো আছে</string>
|
||||
<string name="revanced_music_hide_search_button_summary_off">অনুসন্ধান বাটন দেখানো হয়েছে</string>
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
<string name="revanced_music_hide_category_bar_title">ক্যাটাগরি বার লুকান</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_on">ক্যাটাগরি বার লুকানো আছে</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_off">ক্যাটাগরি বার দেখানো আছে</string>
|
||||
</patch>
|
||||
<patch id="layout.miniplayercolor.changeMiniplayerColor">
|
||||
<string name="revanced_music_change_miniplayer_color_title">মিনিপ্লেয়ারের রঙ পরিবর্তন করুন</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_on">মিনিপ্লেয়ারের রঙ ফুলস্ক্রিন প্লেয়ারের সাথে মেলে</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_off">মিনিপ্লেয়ার ডিফল্ট রঙ ব্যবহার করে</string>
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<string name="revanced_music_navigation_bar_screen_title">নেভিগেশন বার</string>
|
||||
<string name="revanced_music_navigation_bar_screen_summary">নেভিগেশন বারের বোতামগুলি লুকান বা পরিবর্তন করুন</string>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -64,9 +63,11 @@ Second \"item\" text"</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'For You' should be translated using the same localized wording YouTube displays. -->
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
@@ -110,7 +111,7 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
|
||||
This button only shows on videos uploaded by the logged in user. -->
|
||||
This button only shows on videos uploaded by the logged-in user. -->
|
||||
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
@@ -137,7 +138,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
|
||||
'Android No SDK' must be kept untranslated. -->
|
||||
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
</patch>
|
||||
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
|
||||
@@ -267,10 +269,12 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
<patch id="layout.buttons.hideButtons">
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
</patch>
|
||||
<patch id="layout.miniplayercolor.changeMiniplayerColor">
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -64,9 +63,11 @@ Second \"item\" text"</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'For You' should be translated using the same localized wording YouTube displays. -->
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
@@ -110,7 +111,7 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
|
||||
This button only shows on videos uploaded by the logged in user. -->
|
||||
This button only shows on videos uploaded by the logged-in user. -->
|
||||
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
@@ -137,7 +138,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
|
||||
'Android No SDK' must be kept untranslated. -->
|
||||
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
</patch>
|
||||
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
|
||||
@@ -267,10 +269,12 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
<patch id="layout.buttons.hideButtons">
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
</patch>
|
||||
<patch id="layout.miniplayercolor.changeMiniplayerColor">
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time_invalid">Datum sestavení souboru APK je poškozeno</string>
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">Varování</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">Upozornění ReVanced</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">Vaše historie sledování není ukládána.<br><br>Příčinou je s největší pravděpodobností DNS blokátor reklam nebo síťový proxy server.<br><br>Chcete-li to opravit, přidejte<b>s.youtube.com</b> na whitelist nebo vypněte všechny DNS blokátory a proxy servery.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Už nezobrazovat</string>
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<string name="revanced_settings_submenu_title">Nastavení</string>
|
||||
<string name="revanced_settings_confirm_user_dialog_title">Opravdu chcete pokračovat?</string>
|
||||
<string name="revanced_settings_save">Uložit</string>
|
||||
<string name="revanced_settings_reset">Výchozí</string>
|
||||
<string name="revanced_settings_reset_color">Obnovit barvu</string>
|
||||
<string name="revanced_settings_color_invalid">Neplatná barva</string>
|
||||
@@ -164,6 +164,14 @@ Nebudete informováni o žádné neočekávané události."</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_title">Vymazat ladicí protokoly</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_summary">Vymaže všechny uložené ladicí protokoly ReVanced</string>
|
||||
<string name="revanced_debug_logs_clear_toast">Protokoly vymazány</string>
|
||||
<string name="revanced_debug_feature_flags_manager_title">Příznaky funkcí Manager</string>
|
||||
<string name="revanced_debug_feature_flags_manager_summary">Spravovat boolean příznaky funkcí</string>
|
||||
<string name="revanced_debug_feature_flags_manager_active_header">Aktivní přepínače (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_blocked_header">Zablokované přepínače (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_search_hint">Hledat přepínače...</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_saved">Přepínače uloženy</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_reset">Přepínače resetovány</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_copied">Přepínače zkopírovány do schránky</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">Vyčistit sdílené odkazy</string>
|
||||
@@ -274,6 +282,9 @@ Povolením této možnosti se však budou zaznamenávat i některá uživatelsk
|
||||
<string name="revanced_hide_video_recommendation_labels_title">Skrýt štítky doporučení videí</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_on">Štítky „Lidé také sledovali“ a „Mohlo by se vám také líbit“ ve výsledcích vyhledávání jsou skryty</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_off">Štítky „Lidé také sledovali“ a „Mohlo by se vám také líbit“ ve výsledcích vyhledávání jsou zobrazeny</string>
|
||||
<string name="revanced_hide_visual_spacer_title">Skrýt vizuální oddělovač</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_on">Vizuální oddělovač je skryt</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_off">Vizuální oddělovač je zobrazen</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">Skrýt YouTube Doodles</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Animace \"Doodles\" YouTube na logu je skryta</string>
|
||||
@@ -334,12 +345,21 @@ Pokud se Doodle v současné době zobrazuje ve vaší oblasti a toto nastavení
|
||||
<string name="revanced_hide_podcast_section_title">Skrýt „Prozkoumat podcast“</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Sekce Prozkoumat podcast je skrytá</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Sekce Prozkoumat podcast je zobrazena</string>
|
||||
<string name="revanced_hide_featured_links_section_title">Skrýt doporučené odkazy</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_on">Sekce doporučených odkazů je skrytá</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_off">Sekce doporučených odkazů je zobrazena</string>
|
||||
<string name="revanced_hide_featured_videos_section_title">Skrýt doporučená videa</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_on">Sekce doporučených videí je skrytá</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_off">Sekce doporučených videí je zobrazena</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Skrýt informační karty</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">Sekce informačních karet je skrytá</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">Sekce informačních karet je zobrazena</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">Skrýt „Klíčové koncepty“</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Sekce Klíčové koncepty je skrytá</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Sekce Klíčové koncepty je zobrazena</string>
|
||||
<string name="revanced_hide_subscribe_button_title">Skrýt tlačítko Odebírat</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_on">Tlačítko Odebírat je skryté</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_off">Tlačítko Odebírat je zobrazeno</string>
|
||||
<string name="revanced_hide_transcript_section_title">Skrýt přepis</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">Sekce přepisu je skrytá</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">Sekce přepisu je zobrazena</string>
|
||||
@@ -361,24 +381,32 @@ Pokud se Doodle v současné době zobrazuje ve vaší oblasti a toto nastavení
|
||||
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Zobrazeno v historii sledování</string>
|
||||
<string name="revanced_channel_screen_title">Stránka kanálu</string>
|
||||
<string name="revanced_channel_screen_summary">Skrýt nebo zobrazit komponenty stránky kanálu</string>
|
||||
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_community_button_title">Skrýt tlačítko Komunita</string>
|
||||
<string name="revanced_hide_community_button_summary_on">Tlačítko Komunita je skryto</string>
|
||||
<string name="revanced_hide_community_button_summary_off">Tlačítko Komunita je zobrazeno</string>
|
||||
<!-- 'For You' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">Skrýt panel „Pro vás“</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Polička Pro vás je skryta</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">Polička Pro vás je zobrazena</string>
|
||||
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_join_button_title">Skrýt tlačítko Připojit se</string>
|
||||
<string name="revanced_hide_join_button_summary_on">Tlačítko Připojit se je skryto</string>
|
||||
<string name="revanced_hide_join_button_summary_off">Tlačítko Připojit se je zobrazeno</string>
|
||||
<string name="revanced_hide_links_preview_title">Skrýt náhled odkazů</string>
|
||||
<string name="revanced_hide_links_preview_summary_on">Náhled odkazů je skryt</string>
|
||||
<string name="revanced_hide_links_preview_summary_off">Náhled odkazů je zobrazen</string>
|
||||
<string name="revanced_hide_members_shelf_title">Skrýt poličku členů</string>
|
||||
<string name="revanced_hide_members_shelf_summary_on">Polička členů je skryta</string>
|
||||
<string name="revanced_hide_members_shelf_summary_off">Police pro členy je zobrazena</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_community_button_title">Skrýt tlačítko „Navštívit komunitu“</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_on">Tlačítko Navštívit komunitu je skryto</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_off">Tlačítko Navštívit komunitu je zobrazeno</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">Skrýt tlačítko \'Navštívit obchod\' na stránkách kanálů</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Tlačítko Navštívit obchod je skryto</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Tlačítko Navštívit obchod je zobrazeno</string>
|
||||
<!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_store_button_title">Skrýt tlačítko Obchod</string>
|
||||
<string name="revanced_hide_store_button_summary_on">Tlačítko Obchod je skryto</string>
|
||||
<string name="revanced_hide_store_button_summary_off">Tlačítko Obchod je zobrazeno</string>
|
||||
<!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_title">Skrýt tlačítko Odebírat</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_on">Tlačítko Odebírat je skryto</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_off">Tlačítko Odebírat je zobrazeno</string>
|
||||
<string name="revanced_comments_screen_title">Komentáře</string>
|
||||
<string name="revanced_comments_screen_summary">Skrýt nebo zobrazit komponenty sekce komentářů</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_title">Skrýt souhrn chatu s AI</string>
|
||||
@@ -520,11 +548,11 @@ Tato funkce je dostupná pouze pro starší zařízení"</string>
|
||||
<string name="revanced_share_copy_url_success">URL zkopírováno do schránky</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">Adresa URL s časovým razítkem zkopírována</string>
|
||||
<string name="revanced_copy_video_url_title">Zobrazit tlačítko pro kopírování adresy URL videa</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Zobrazí se tlačítko. Klepnutím zkopírujete URL videa. Klepnutím a podržením zkopírujete s časovou značkou</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Tlačítko se nezobrazuje</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Tlačítko Kopírovat URL videa je zobrazeno. Klepnutím zkopírujete URL videa. Klepnutím a podržením zkopírujete s časovou značkou</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Tlačítko Kopírovat URL videa není zobrazeno</string>
|
||||
<string name="revanced_copy_video_url_timestamp_title">Zobrazit tlačítko pro kopírování adresy URL videa s časovým razítkem</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Zobrazí se tlačítko. Klepnutím zkopírujete URL videa s časovou značkou. Klepnutím a podržením zkopírujete bez časové značky</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Tlačítko se nezobrazuje</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Tlačítko Kopírovat URL s časovou značkou je zobrazeno. Klepnutím zkopírujete URL videa s časovou značkou. Klepnutím a podržením zkopírujete bez časové značky</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Tlačítko Kopírovat URL s časovou značkou není zobrazeno</string>
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
<string name="revanced_remove_viewer_discretion_dialog_title">Odstranit dialog s upozorněním na věkové omezení</string>
|
||||
@@ -533,7 +561,7 @@ Tato funkce je dostupná pouze pro starší zařízení"</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Tímto krokem neobcházíte věkové omezení. Pouze jej automaticky akceptujete.</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
|
||||
<string name="revanced_disable_signin_to_tv_popup_title">Zakázat vyskakovací okno Přihlásit se k televizi</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_title">Zakázat vyskakovací okno „Přihlásit se k televizi“</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_summary_on">Vyskakovací okno Přihlásit se k televizi je zakázáno</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_summary_off">Vyskakovací okno Přihlásit se k televizi je povoleno</string>
|
||||
</patch>
|
||||
@@ -665,7 +693,7 @@ Hlasitost se upravuje svislým přejetím po pravé straně obrazovky"</string>
|
||||
<string name="revanced_hide_download_button_summary_on">Tlačítko Stáhnout je skryto</string>
|
||||
<string name="revanced_hide_download_button_summary_off">Tlačítko Stáhnout je zobrazeno</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. -->
|
||||
This button only shows on videos uploaded by the logged-in user. -->
|
||||
<string name="revanced_hide_hype_button_title">Skrýt Hype</string>
|
||||
<string name="revanced_hide_hype_button_summary_on">Tlačítko Hype je skryto</string>
|
||||
<string name="revanced_hide_hype_button_summary_off">Tlačítko Hype je zobrazeno</string>
|
||||
@@ -786,10 +814,11 @@ Pokud změna tohoto nastavení nemá žádný účinek, zkuste přepnout do rež
|
||||
<string name="revanced_hide_player_flyout_audio_track_title">Skrýt Zvuková stopa</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_on">Menu Zvuková stopa je skryto</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_off">Menu Zvuková stopa je zobrazeno</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">"Nabídka zvukové stopy je skryta
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
|
||||
'Android No SDK' must be kept untranslated. -->
|
||||
<string name="revanced_hide_player_flyout_audio_track_not_available">"Nabídka zvukových stop je skryta
|
||||
|
||||
Chcete-li zobrazit nabídku zvukové stopy, změňte 'Zfalšovat streamy videa' na iPadOS"</string>
|
||||
Chcete-li zobrazit nabídku zvukových stop, změňte \"Podvrhnout video streamy\" na \"Android No SDK\""</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">Skrýt Sledovat ve VR</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Menu Sledovat ve VR je skryto</string>
|
||||
@@ -865,13 +894,16 @@ Chcete-li zobrazit nabídku zvukové stopy, změňte 'Zfalšovat streamy videa'
|
||||
<string name="revanced_hide_shorts_history_title">Skrýt Shorts z historie sledování</string>
|
||||
<string name="revanced_hide_shorts_history_summary_on">Skryté v historii sledování</string>
|
||||
<string name="revanced_hide_shorts_history_summary_off">Zobrazené v historii sledování</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_title">Skrýt tlačítko Koupit Super Thanks</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_title">Skrýt štítek „Automatický dabing“</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_summary_on">Štítek s automatickým dabingem je skryt</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_summary_off">Štítek s automatickým dabingem je zobrazen</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_title">Skrýt tlačítko „Koupit Superdíky“</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_on">Tlačítko \"Koupit Super Thanks\" je skryto</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_off">Tlačítko \"Koupit Super Thanks\" je zobrazeno</string>
|
||||
<string name="revanced_hide_shorts_effect_button_title">Skrýt tlačítko efektu</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_on">Tlačítko Efekt je skryté</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_off">Tlačítko Efekt je zobrazeno</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">Skrýt tlačítko Zelená obrazovka</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">Skrýt tlačítko „Zelené plátno“</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_on">Tlačítko zelené obrazovky je skryté</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_off">Tlačítko zelené obrazovky je zobrazeno</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_title">Skrýt tlačítko hashtagů</string>
|
||||
@@ -881,10 +913,13 @@ Chcete-li zobrazit nabídku zvukové stopy, změňte 'Zfalšovat streamy videa'
|
||||
<string name="revanced_hide_shorts_join_button_title">Skrýt tlačítko Připojit se</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_on">Tlačítko Připojit se je skryto</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_off">Tlačítko Připojit se je zobrazeno</string>
|
||||
<string name="revanced_hide_shorts_live_preview_title">Skrýt živý náhled</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_on">Živý náhled je skrytý</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_off">Živý náhled je zobrazen</string>
|
||||
<string name="revanced_hide_shorts_location_label_title">Skrýt štítek umístění</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_on">Štítek umístění je skrytý</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_off">Štítek umístění je zobrazen</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">Skrýt tlačítko Nové příspěvky</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">Skrýt tlačítko „Nové příspěvky“</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_on">Tlačítko Nové příspěvky je skryto</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_off">Tlačítko Nové příspěvky je zobrazeno</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_title">Skrýt tlačítka pozastaveného překrytí</string>
|
||||
@@ -893,7 +928,7 @@ Chcete-li zobrazit nabídku zvukové stopy, změňte 'Zfalšovat streamy videa'
|
||||
<string name="revanced_hide_shorts_preview_comment_title">Skrýt náhled komentáře</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_on">Náhled komentáře je skrytý</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_off">Zobrazuje se náhled komentáře</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">Skrýt tlačítko Uložit hudbu</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">Skrýt tlačítko „Uložit hudbu“</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_on">Tlačítko Uložit hudbu je skryté</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_off">Tlačítko Uložit hudbu je zobrazeno</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_title">Skrýt návrhy vyhledávání</string>
|
||||
@@ -914,10 +949,10 @@ Chcete-li zobrazit nabídku zvukové stopy, změňte 'Zfalšovat streamy videa'
|
||||
<string name="revanced_hide_shorts_upcoming_button_title">Skrýt tlačítko Nadcházející</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_on">Tlačítko \"Další\" je skryté</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_off">Tlačítko \"Další\" je zobrazeno</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_title">Skrýt tlačítko Použít tento zvuk</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_title">Skrýt tlačítko „Použít tento zvuk“</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_on">Tlačítko Použít tento zvuk je skryté</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_off">Tlačítko Použít tento zvuk je zobrazené</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_title">Skrýt tlačítko Použít tuto šablonu</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_title">Skrýt tlačítko „Použít tuto šablonu“</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_on">Tlačítko Použít tuto šablonu je skryté</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_off">Tlačítko Použít tuto šablonu je zobrazeno</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_title">Skrýt animaci s fontánou u tlačítka To se mi líbí</string>
|
||||
@@ -1560,13 +1595,13 @@ Povolením této funkce lze odemknout vyšší kvality videa"</string>
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
<string name="revanced_playback_speed_dialog_button_title">Zobrazit tlačítko dialogu rychlosti</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Tlačítko je zobrazeno. Klepnutím a podržením obnovíte výchozí rychlost přehrávání</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Tlačítko se nezobrazuje</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Tlačítko dialogu rychlosti je zobrazeno. Klepnutím a podržením obnovíte rychlost přehrávání na výchozí</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Tlačítko dialogu rychlosti není zobrazeno</string>
|
||||
</patch>
|
||||
<patch id="video.quality.button.videoQualityDialogButtonPatch">
|
||||
<string name="revanced_video_quality_dialog_button_title">Zobrazit tlačítko kvality videa</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">Tlačítko je zobrazeno. Klepnutím a podržením obnovíte kvalitu na výchozí</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">Tlačítko není zobrazeno.</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">Tlačítko kvality videa je zobrazeno. Klepnutím a podržením obnovíte kvalitu na výchozí</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">Tlačítko kvality videa není zobrazeno</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_speed_menu_title">Menu vlastní rychlosti přehrávání</string>
|
||||
@@ -1663,16 +1698,30 @@ Přehrávání videa s AV1 se může sekat nebo vypadávat snímky."</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_on">Trvalé opakování je povoleno</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_off">Trvalé opakování je zakázáno</string>
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
<patch id="layout.buttons.hideButtons">
|
||||
<string name="revanced_music_hide_cast_button_title">Skrýt tlačítko Odesílat</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_on">Tlačítko Odesílat je skryté</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_off">Tlačítko Odesílat je zobrazené</string>
|
||||
<string name="revanced_music_hide_history_button_title">Skrýt tlačítko historie</string>
|
||||
<string name="revanced_music_hide_history_button_summary_on">Tlačítko historie je skryté</string>
|
||||
<string name="revanced_music_hide_history_button_summary_off">Tlačítko historie je zobrazeno</string>
|
||||
<string name="revanced_music_hide_notification_button_title">Skrýt tlačítko oznámení</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_on">Tlačítko oznámení je skryté</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_off">Tlačítko oznámení je zobrazené</string>
|
||||
<string name="revanced_music_hide_search_button_title">Skrýt tlačítko vyhledávání</string>
|
||||
<string name="revanced_music_hide_search_button_summary_on">Tlačítko vyhledávání je skryté</string>
|
||||
<string name="revanced_music_hide_search_button_summary_off">Tlačítko vyhledávání je zobrazené</string>
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
<string name="revanced_music_hide_category_bar_title">Skrýt panel kategorií</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_on">Panel kategorií je skryt</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_off">Panel kategorií je zobrazen</string>
|
||||
</patch>
|
||||
<patch id="layout.miniplayercolor.changeMiniplayerColor">
|
||||
<string name="revanced_music_change_miniplayer_color_title">Změnit barvu minipřehrávače</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_on">Barva minipřehrávače odpovídá přehrávači na celou obrazovku</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_off">Minipřehrávač používá výchozí barvu</string>
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<string name="revanced_music_navigation_bar_screen_title">Navigační panel</string>
|
||||
<string name="revanced_music_navigation_bar_screen_summary">Skrýt nebo změnit tlačítka navigačního panelu</string>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time_invalid">APK byggedato er ødelagt</string>
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">Advarsel</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">ReVanced Meddelelse</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">Din urhistorik gemmes ikke.<br><br>Dette skyldes sandsynligvis en DNS-annonceblokker eller netværksproxy.<br><br>For at løse dette, whitelist <b>s.youtube.com</b> eller slå alle DNS-blokkere og fuldmagter fra.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Vis ikke igen</string>
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<string name="revanced_settings_submenu_title">Indstillinger</string>
|
||||
<string name="revanced_settings_confirm_user_dialog_title">Er du sikker på, at du vil fortsætte?</string>
|
||||
<string name="revanced_settings_save">Gem</string>
|
||||
<string name="revanced_settings_reset">Nulstil</string>
|
||||
<string name="revanced_settings_reset_color">Nulstil farve</string>
|
||||
<string name="revanced_settings_color_invalid">Ugyldig farve</string>
|
||||
@@ -164,6 +164,14 @@ Du modtager ikke notifikationer om uventede hændelser."</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_title">Ryd fejlsøgningslogfiler</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_summary">Rydder alle gemte ReVanced-fejlsøgningslogfiler</string>
|
||||
<string name="revanced_debug_logs_clear_toast">Logfiler ryddet</string>
|
||||
<string name="revanced_debug_feature_flags_manager_title">Funktionsflag Manager</string>
|
||||
<string name="revanced_debug_feature_flags_manager_summary">Administrer booleske funktionsflag</string>
|
||||
<string name="revanced_debug_feature_flags_manager_active_header">Aktive flag (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_blocked_header">Blokerede flag (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_search_hint">Søg flag...</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_saved">Flag gemt</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_reset">Flag nulstillet</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_copied">Flag kopieret til udklipsholder</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">Rens delingslinks</string>
|
||||
@@ -274,6 +282,9 @@ Aktivering af dette vil dog også logge nogle brugerdata, såsom din IP-adresse.
|
||||
<string name="revanced_hide_video_recommendation_labels_title">Skjul etiketter for videoanbefalinger</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_on">\'Folk har også set\'- og \'Du vil måske også synes om\'-etiketter i søgeresultater er skjult</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_off">\'Folk har også set\'- og \'Du vil måske også synes om\'-etiketter i søgeresultater vises</string>
|
||||
<string name="revanced_hide_visual_spacer_title">Skjul visuelt mellemrum</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_on">Visuelt mellemrum er skjult</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_off">Visuelt mellemrum vises</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">Skjul YouTube-Doudler</string>
|
||||
<string name="revanced_hide_doodles_summary_on">YouTube Doodles-animation på logoet er skjult</string>
|
||||
@@ -334,12 +345,21 @@ Hvis et Doodle vises i øjeblikket i din region, og denne skjuleindstilling er a
|
||||
<string name="revanced_hide_podcast_section_title">Skjul \"Udforsk podcasten\"</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Sektionen Udforsk podcasten er skjult</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Sektionen Udforsk podcasten vises</string>
|
||||
<string name="revanced_hide_featured_links_section_title">Skjul fremhævede links</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_on">Sektionen med fremhævede links er skjult</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_off">Sektionen med fremhævede links er vist</string>
|
||||
<string name="revanced_hide_featured_videos_section_title">Skjul fremhævede videoer</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_on">Sektionen med fremhævede videoer er skjult</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_off">Sektionen med fremhævede videoer er vist</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Skjul infokort</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">Info-kort sektion er skjult</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">Info-kort sektion er vist</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">Skjul \"Nøglebegreber\"</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Nøglebegrebssektionen er skjult</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Nøglebegrebssektionen vises</string>
|
||||
<string name="revanced_hide_subscribe_button_title">Skjul abonner-knappen</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_on">Abonner-knappen er skjult</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_off">Abonner-knappen er vist</string>
|
||||
<string name="revanced_hide_transcript_section_title">Skjul udskrift</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">Afsnittet er skjult</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">Afsnittet er vist</string>
|
||||
@@ -361,24 +381,32 @@ Hvis et Doodle vises i øjeblikket i din region, og denne skjuleindstilling er a
|
||||
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Vist i seerhistorik</string>
|
||||
<string name="revanced_channel_screen_title">Kanalside</string>
|
||||
<string name="revanced_channel_screen_summary">Skjul eller vis kanalsidekomponenter</string>
|
||||
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_community_button_title">Skjul knappen Fællesskab</string>
|
||||
<string name="revanced_hide_community_button_summary_on">Fællesskabs-knap er skjult</string>
|
||||
<string name="revanced_hide_community_button_summary_off">Fællesskabs-knap vises</string>
|
||||
<!-- 'For You' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">Skjul hylden \"Til dig\"</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Til dig-hylden er skjult</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">Til dig-hylden er vist</string>
|
||||
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_join_button_title">Skjul Tilmeld-knap</string>
|
||||
<string name="revanced_hide_join_button_summary_on">Tilmeld-knap er skjult</string>
|
||||
<string name="revanced_hide_join_button_summary_off">Tilmeld-knap vises</string>
|
||||
<string name="revanced_hide_links_preview_title">Skjul forhåndsvisning af links</string>
|
||||
<string name="revanced_hide_links_preview_summary_on">Forhåndsvisning af links er skjult</string>
|
||||
<string name="revanced_hide_links_preview_summary_off">Forhåndsvisning af links er vist</string>
|
||||
<string name="revanced_hide_members_shelf_title">Skjul medlemshylden</string>
|
||||
<string name="revanced_hide_members_shelf_summary_on">Medlemshylden er skjult</string>
|
||||
<string name="revanced_hide_members_shelf_summary_off">Medlemsvisning er vist</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_community_button_title">Skjul knappen \"Besøg fællesskab\"</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_on">Knappen \"Besøg fællesskab\" er skjult</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_off">Besøg fællesskab-knap er vist</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">Skjul knappen \'Besøg butik\' på kanalsider</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Besøg butik-knap er skjult</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Besøg butik-knap er vist</string>
|
||||
<!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_store_button_title">Skjul Butik-knap</string>
|
||||
<string name="revanced_hide_store_button_summary_on">Butik-knap er skjult</string>
|
||||
<string name="revanced_hide_store_button_summary_off">Butik-knap vises</string>
|
||||
<!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_title">Skjul Abonner-knap</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_on">Abonner-knap er skjult</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_off">Abonner-knap vises</string>
|
||||
<string name="revanced_comments_screen_title">Kommentarer</string>
|
||||
<string name="revanced_comments_screen_summary">Skjul eller vis kommentarer sektion komponenter</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_title">Skjul AI-chatsammendrag</string>
|
||||
@@ -520,11 +548,11 @@ Denne funktion er kun tilgængelig for ældre enheder"</string>
|
||||
<string name="revanced_share_copy_url_success">URL kopieret til udklipsholder</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">URL med tidsstempel kopieret</string>
|
||||
<string name="revanced_copy_video_url_title">Vis kopiér video URL knap</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Knappen vises. Tryk for at kopiere videoens URL. Tryk og hold for at kopiere med tidsstempel</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Knap vises ikke</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Kopier video-URL-knap vises. Tryk for at kopiere video-URL. Tryk og hold nede for at kopiere med tidsstempel</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Kopier video-URL-knap vises ikke</string>
|
||||
<string name="revanced_copy_video_url_timestamp_title">Vis kopi tidsstempel URL knap</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Knappen vises. Tryk for at kopiere videoens URL med tidsstempel. Tryk og hold for at kopiere uden tidsstempel</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Knap vises ikke</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Kopier tidsstempel-URL-knap vises. Tryk for at kopiere video-URL med tidsstempel. Tryk og hold nede for at kopiere uden tidsstempel</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Kopier tidsstempel-URL-knap vises ikke</string>
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
<string name="revanced_remove_viewer_discretion_dialog_title">Fjern visningsdialog</string>
|
||||
@@ -533,7 +561,7 @@ Denne funktion er kun tilgængelig for ældre enheder"</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Dette går ikke uden om aldersbegrænsningen. Det accepterer bare det automatisk.</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
|
||||
<string name="revanced_disable_signin_to_tv_popup_title">Deaktiver log ind på TV-pop op</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_title">Deaktiver \'Log ind på TV\'-popup</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_summary_on">Log ind på TV-pop op er deaktiveret</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_summary_off">Log ind på TV-pop op er aktiveret</string>
|
||||
</patch>
|
||||
@@ -665,7 +693,7 @@ Juster lydstyrken ved at swipe lodret i højre side af skærmen"</string>
|
||||
<string name="revanced_hide_download_button_summary_on">Download-knappen er skjult</string>
|
||||
<string name="revanced_hide_download_button_summary_off">Download-knappen vises</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. -->
|
||||
This button only shows on videos uploaded by the logged-in user. -->
|
||||
<string name="revanced_hide_hype_button_title">Skjul Hype</string>
|
||||
<string name="revanced_hide_hype_button_summary_on">Hype-knappen er skjult</string>
|
||||
<string name="revanced_hide_hype_button_summary_off">Hype-knappen vises</string>
|
||||
@@ -786,10 +814,11 @@ Hvis ændring af denne indstilling ikke træder i kraft, kan du prøve at skifte
|
||||
<string name="revanced_hide_player_flyout_audio_track_title">Skjul lydspor</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_on">Menuen for lydspor er skjult</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_off">Menuen Lydspor vises</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">"Lydsporsmenuen er skjult
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
|
||||
'Android No SDK' must be kept untranslated. -->
|
||||
<string name="revanced_hide_player_flyout_audio_track_not_available">"Audiorspormenuen er skjult
|
||||
|
||||
For at vise lydsporsmenuen, skift 'Spoof videostreams' til iPadOS"</string>
|
||||
For at vise audiospormenuen, skift 'Maskér videostreams' til 'Android No SDK'"</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">Skjul vagt i VR</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Se i VR-menuen er skjult</string>
|
||||
@@ -865,13 +894,16 @@ For at vise lydsporsmenuen, skift 'Spoof videostreams' til iPadOS"</string>
|
||||
<string name="revanced_hide_shorts_history_title">Skjul shorts i historik</string>
|
||||
<string name="revanced_hide_shorts_history_summary_on">Skjult i historikken</string>
|
||||
<string name="revanced_hide_shorts_history_summary_off">Vises i historik</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_title">Skjul knappen Køb Super Thanks</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_title">Skjul \'Auto-dubbet\'-etiket</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_summary_on">Automatisk dubbet etiket er skjult</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_summary_off">Automatisk dubbet etiket vises</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_title">Skjul \'Køb Super Thanks\'-knap</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_on">Køb Super Thanks-knap er skjult</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_off">Køb Super Thanks-knap vises</string>
|
||||
<string name="revanced_hide_shorts_effect_button_title">Skjul effektknap</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_on">Effektknap er skjult</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_off">Effektknap er vist</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">Skjul knappen Grøn skærm</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">Skjul \'Green screen\'-knap</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_on">Grøn skærmknap er skjult</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_off">Grøn skærmknap vises</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_title">Skjul hashtag knap</string>
|
||||
@@ -881,10 +913,13 @@ For at vise lydsporsmenuen, skift 'Spoof videostreams' til iPadOS"</string>
|
||||
<string name="revanced_hide_shorts_join_button_title">Skjul knappen Deltag</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_on">Deltag-knappen er skjult</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_off">Tilmeldingsknappen vises</string>
|
||||
<string name="revanced_hide_shorts_live_preview_title">Skjul live forhåndsvisning</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_on">Live-forhåndsvisning er skjult</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_off">Live-forhåndsvisning vises</string>
|
||||
<string name="revanced_hide_shorts_location_label_title">Skjul placeringsetiket</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_on">Placeringsetiket er skjult</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_off">Placeringsetiket er vist</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">Skjul knappen Nye indlæg</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">Skjul \'Nye indlæg\'-knap</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_on">Knappen Nye indlæg er skjult</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_off">Knappen Nye indlæg vises</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_title">Skjul overlay knapper på pause</string>
|
||||
@@ -893,7 +928,7 @@ For at vise lydsporsmenuen, skift 'Spoof videostreams' til iPadOS"</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_title">Skjul forhåndsvisning af kommentar</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_on">Forhåndsvisning af kommentar er skjult</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_off">Forhåndsvisningskommentar vises</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">Skjul knappen Gem musik</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">Skjul \'Gem musik\'-knap</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_on">Gem musik knap er skjult</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_off">Gem musik knap er vist</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_title">Skjul søgeforslag</string>
|
||||
@@ -914,10 +949,10 @@ For at vise lydsporsmenuen, skift 'Spoof videostreams' til iPadOS"</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_title">Skjul knappen Kommende</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_on">Kommende knap er skjult</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_off">Kommende knap vises</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_title">Skjul knappen \"Brug denne lyd\"</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_title">Skjul \'Brug denne lyd\'-knap</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_on">Knappen \"Brug denne lyd\" er skjult</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_off">Knappen \"Brug denne lyd\" vises</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_title">Skjul knappen Brug denne skabelon</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_title">Skjul \'Brug denne skabelon\'-knap</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_on">Knappen \"Brug denne skabelon\" er skjult</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_off">Knappen Brug denne skabelon vises</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_title">Skjul knap for springvand-animation af like-knap</string>
|
||||
@@ -1562,13 +1597,13 @@ Aktivering af dette kan låse op for højere videokvalitet"</string>
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
<string name="revanced_playback_speed_dialog_button_title">Vis hastigheds dialogknap</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Knappen vises. Tryk og hold for at nulstille afspilningshastigheden til standard.</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Knap vises ikke</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Hastighedsdialogknap vises. Tryk og hold nede for at nulstille afspilningshastigheden til standard</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Hastighedsdialogknap vises ikke</string>
|
||||
</patch>
|
||||
<patch id="video.quality.button.videoQualityDialogButtonPatch">
|
||||
<string name="revanced_video_quality_dialog_button_title">Vis videokvalitetsknap</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">Knap vises. Tryk og hold nede for at nulstille kvaliteten til standard</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">Knappen vises ikke</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">Videokvalitetsknap vises. Tryk og hold nede for at nulstille kvaliteten til standard</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">Videokvalitetsknap vises ikke</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_speed_menu_title">Tilpasset afspilningshastighed menu</string>
|
||||
@@ -1665,16 +1700,30 @@ Videoafspilning med AV1 kan hakke eller tabe billeder."</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_on">Permanent gentagelse er aktiveret</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_off">Permanent gentagelse er deaktiveret</string>
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
<patch id="layout.buttons.hideButtons">
|
||||
<string name="revanced_music_hide_cast_button_title">Skjul cast-knap</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_on">Cast-knappen er skjult</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_off">Cast-knappen vises</string>
|
||||
<string name="revanced_music_hide_history_button_title">Skjul historikknap</string>
|
||||
<string name="revanced_music_hide_history_button_summary_on">Historikknappen er skjult</string>
|
||||
<string name="revanced_music_hide_history_button_summary_off">Historikknappen vises</string>
|
||||
<string name="revanced_music_hide_notification_button_title">Skjul notifikationsknap</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_on">Notifikationsknappen er skjult</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_off">Notifikationsknappen vises</string>
|
||||
<string name="revanced_music_hide_search_button_title">Skjul søgeknap</string>
|
||||
<string name="revanced_music_hide_search_button_summary_on">Søgeknappen er skjult</string>
|
||||
<string name="revanced_music_hide_search_button_summary_off">Søgeknappen vises</string>
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
<string name="revanced_music_hide_category_bar_title">Skjul kategorilinje</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_on">Kategorilinjen er skjult</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_off">Kategorilinjen vises</string>
|
||||
</patch>
|
||||
<patch id="layout.miniplayercolor.changeMiniplayerColor">
|
||||
<string name="revanced_music_change_miniplayer_color_title">Skift miniafspillerfarve</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_on">Miniafspillerfarven matcher fuldskærmsafspilleren</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_off">Miniafspilleren bruger standardfarven</string>
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<string name="revanced_music_navigation_bar_screen_title">Navigationslinje</string>
|
||||
<string name="revanced_music_navigation_bar_screen_summary">Skjul eller skift navigationslinjeknapper</string>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time_invalid">APK Erstellungsdatum ist beschädigt</string>
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">Warnung</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">ReVanced Hinweis</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">Ihr Verlauf wird nicht gespeichert.<br><br>Dies wird höchstwahrscheinlich durch einen DNS-Werbeblocker oder einen Netzwerkproxy verursacht.<br><br>Um dies zu beheben, setze <b>s.youtube.com</b> auf die Whitelist oder schalten Sie alle DNS-Blocker und Proxies aus.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Nicht wieder anzeigen</string>
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<string name="revanced_settings_submenu_title">Einstellungen</string>
|
||||
<string name="revanced_settings_confirm_user_dialog_title">Bist du sicher, dass du fortfahren möchtest?</string>
|
||||
<string name="revanced_settings_save">Speichern</string>
|
||||
<string name="revanced_settings_reset">Zurücksetzen</string>
|
||||
<string name="revanced_settings_reset_color">Farbe zurücksetzen</string>
|
||||
<string name="revanced_settings_color_invalid">Ungültige Farbe</string>
|
||||
@@ -164,6 +164,14 @@ Sie werden nicht über unerwartete Ereignisse informiert."</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_title">Debug-Protokolle löschen</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_summary">Löscht alle gespeicherten ReVanced-Debug-Protokolle</string>
|
||||
<string name="revanced_debug_logs_clear_toast">Protokolle gelöscht</string>
|
||||
<string name="revanced_debug_feature_flags_manager_title">Feature-Flags Manager</string>
|
||||
<string name="revanced_debug_feature_flags_manager_summary">Boolesche Feature-Flags verwalten</string>
|
||||
<string name="revanced_debug_feature_flags_manager_active_header">Aktive Flags (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_blocked_header">Blockierte Flags (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_search_hint">Flags suchen...</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_saved">Flags gespeichert</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_reset">Flags zurückgesetzt</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_copied">Flags in die Zwischenablage kopiert</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">Freigabelinks säubern</string>
|
||||
@@ -274,6 +282,9 @@ Wenn Sie dies aktivieren, werden jedoch auch einige Benutzerdaten wie Ihre IP-Ad
|
||||
<string name="revanced_hide_video_recommendation_labels_title">Videovorschlagsbeschriftungen ausblenden</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_on">\'Das haben andere auch angesehen\' und \'Dir könnten auch gefallen\' Beschriftungen in den Suchergebnissen sind ausgeblendet</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_off">\'Das haben andere auch angesehen\' und \'Dir könnten auch gefallen\' Beschriftungen in den Suchergebnissen werden angezeigt</string>
|
||||
<string name="revanced_hide_visual_spacer_title">Visuellen Abstandshalter ausblenden</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_on">Visueller Abstandshalter ist ausgeblendet</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_off">Visueller Abstandshalter ist sichtbar</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">YouTube Doodles ausblenden</string>
|
||||
<string name="revanced_hide_doodles_summary_on">YouTube Doodles-Animation auf dem Logo ist ausgeblendet</string>
|
||||
@@ -333,12 +344,21 @@ Wenn ein Doodle zurzeit in Ihrer Region angezeigt wird und diese Einstellung zum
|
||||
<string name="revanced_hide_podcast_section_title">\'Podcast entdecken\' ausblenden</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Der Abschnitt \"Podcast entdecken\" ist ausgeblendet</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Der Abschnitt \"Podcast entdecken\" wird angezeigt</string>
|
||||
<string name="revanced_hide_featured_links_section_title">Empfohlene Links ausblenden</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_on">Bereich „Empfohlene Links“ wird ausgeblendet</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_off">Bereich „Empfohlene Links“ wird angezeigt</string>
|
||||
<string name="revanced_hide_featured_videos_section_title">Empfohlene Videos ausblenden</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_on">Bereich „Empfohlene Videos“ wird ausgeblendet</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_off">Bereich „Empfohlene Videos“ wird angezeigt</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Infokarten ausblenden</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">Info-Kartenbereich ist ausgeblendet</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">Info-Kartenbereich wird angezeigt</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">\'Schlüsselkonzepte\' ausblenden</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Abschnitt \"Schlüsselkonzepte\" ist ausgeblendet</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Abschnitt \"Schlüsselkonzepte\" wird angezeigt</string>
|
||||
<string name="revanced_hide_subscribe_button_title">Schaltfläche „Abonnieren“ ausblenden</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_on">Schaltfläche „Abonnieren“ wird ausgeblendet</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_off">Schaltfläche „Abonnieren“ wird angezeigt</string>
|
||||
<string name="revanced_hide_transcript_section_title">Transkript ausblenden</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">Transkript-Abschnitt ist ausgeblendet</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">Sektion Transkripte wird angezeigt</string>
|
||||
@@ -360,24 +380,32 @@ Wenn ein Doodle zurzeit in Ihrer Region angezeigt wird und diese Einstellung zum
|
||||
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Im Wiedergabeverlauf angezeigt</string>
|
||||
<string name="revanced_channel_screen_title">Kanalseite</string>
|
||||
<string name="revanced_channel_screen_summary">Kanalseitenkomponenten ausblenden oder anzeigen</string>
|
||||
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_community_button_title">Schaltfläche \"Community\" ausblenden</string>
|
||||
<string name="revanced_hide_community_button_summary_on">Community-Schaltfläche ist ausgeblendet</string>
|
||||
<string name="revanced_hide_community_button_summary_off">Community-Schaltfläche wird angezeigt</string>
|
||||
<!-- 'For You' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">\"Für dich\" Bereich ausblenden</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">\"Für dich\" Bereich ist ausgeblendet</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">\"Für dich\" Bereich ist angezeigt</string>
|
||||
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_join_button_title">Schaltfläche \"Mitglied werden\" ausblenden</string>
|
||||
<string name="revanced_hide_join_button_summary_on">Schaltfläche \"Mitglied werden\" ist ausgeblendet</string>
|
||||
<string name="revanced_hide_join_button_summary_off">Schaltfläche \"Mitglied werden\" wird angezeigt</string>
|
||||
<string name="revanced_hide_links_preview_title">Linkvorschau ausblenden</string>
|
||||
<string name="revanced_hide_links_preview_summary_on">Linkvorschau ist ausgeblendet</string>
|
||||
<string name="revanced_hide_links_preview_summary_off">Linkvorschau ist angezeigt</string>
|
||||
<string name="revanced_hide_members_shelf_title">Mitglieder-Regal ausblenden</string>
|
||||
<string name="revanced_hide_members_shelf_summary_on">Mitglieder-Regal ist ausgeblendet</string>
|
||||
<string name="revanced_hide_members_shelf_summary_off">Mitglieder-Regal wird angezeigt</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_community_button_title">Schaltfläche \'Zur Community\' ausblenden</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_on">Schaltfläche \'Zur Community\' ist ausgeblendet</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_off">Schaltfläch \"Zur Community\" wird angezeigt</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">Den \'Store besuchen\'-Button auf Kanalseiten ausblenden</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Schaltfläche \"Shop besuchen\" ist ausgeblendet</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Schaltfläche \"Shop besuchen\" ist angezeigt</string>
|
||||
<!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_store_button_title">Schaltfläche \"Shop\" ausblenden</string>
|
||||
<string name="revanced_hide_store_button_summary_on">Schaltfläche \"Shop\" ist ausgeblendet</string>
|
||||
<string name="revanced_hide_store_button_summary_off">Schaltfläche \"Shop\" wird angezeigt</string>
|
||||
<!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_title">Schaltfläche \"Abonnieren\" ausblenden</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_on">Schaltfläche \"Abonnieren\" ist ausgeblendet</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_off">Schaltfläche \"Abonnieren\" wird angezeigt</string>
|
||||
<string name="revanced_comments_screen_title">Kommentare</string>
|
||||
<string name="revanced_comments_screen_summary">Komponenten der Kommentar-Sektion ausblenden oder anzeigen</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_title">KI-Chat-Zusammenfassung ausblenden</string>
|
||||
@@ -519,11 +547,11 @@ Diese Funktion ist nur für ältere Geräte verfügbar"</string>
|
||||
<string name="revanced_share_copy_url_success">URL in Zwischenablage kopiert</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">URL mit Zeitstempel kopiert</string>
|
||||
<string name="revanced_copy_video_url_title">Video-URL-Schaltfläche kopieren anzeigen</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Schaltfläche wird angezeigt. Tippen, um die Video-URL zu kopieren. Zum Kopieren mit Zeitstempel tippen und halten</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Button wird nicht angezeigt</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Schaltfläche \"Video-URL kopieren\" wird angezeigt. Tippen, um Video-URL zu kopieren. Tippen und halten, um mit Zeitstempel zu kopieren.</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Schaltfläche \"Video-URL kopieren\" wird nicht angezeigt</string>
|
||||
<string name="revanced_copy_video_url_timestamp_title">Kopiere Zeitstempel URL-Schaltfläche anzeigen</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Schaltfläche wird angezeigt. Tippen, um die Video-URL mit Zeitstempel zu kopieren. Zum Kopieren ohne Zeitstempel tippen und halten</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Button wird nicht angezeigt</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Schaltfläche \"URL mit Zeitstempel kopieren\" wird angezeigt. Tippen, um Video-URL mit Zeitstempel zu kopieren. Tippen und halten, um ohne Zeitstempel zu kopieren.</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Schaltfläche \"URL mit Zeitstempel kopieren\" wird nicht angezeigt</string>
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
<string name="revanced_remove_viewer_discretion_dialog_title">Diskretion des Betrachters entfernen</string>
|
||||
@@ -532,7 +560,7 @@ Diese Funktion ist nur für ältere Geräte verfügbar"</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Dies umgeht nicht die Altersbeschränkung, sondern akzeptiert sie nur automatisch.</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
|
||||
<string name="revanced_disable_signin_to_tv_popup_title">Pop-up \"Bei TV anmelden\" deaktivieren</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_title">Pop-up \"Beim Fernseher anmelden\" deaktivieren</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_summary_on">Pop-up \"Bei TV anmelden\" ist deaktiviert</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_summary_off">Pop-up \"Bei TV anmelden\" ist aktiviert</string>
|
||||
</patch>
|
||||
@@ -662,7 +690,7 @@ Passen Sie die Helligkeit an, indem Sie auf der linken Seite des Bildschirms ver
|
||||
<string name="revanced_hide_download_button_summary_on">Download-Button ist ausgeblendet</string>
|
||||
<string name="revanced_hide_download_button_summary_off">Download-Button wird angezeigt</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. -->
|
||||
This button only shows on videos uploaded by the logged-in user. -->
|
||||
<string name="revanced_hide_hype_button_title">Hypen ausblenden</string>
|
||||
<string name="revanced_hide_hype_button_summary_on">Hypen-Button ist ausgeblendet</string>
|
||||
<string name="revanced_hide_hype_button_summary_off">Hypen-Button wird angezeigt</string>
|
||||
@@ -783,10 +811,9 @@ Wenn diese Änderung nicht wirksam wird, versuchen Sie, in den Inkognito-Modus z
|
||||
<string name="revanced_hide_player_flyout_audio_track_title">Audiospur ausblenden</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_on">Audiospur-Menü ist ausgeblendet</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_off">Audiospurmenü wird angezeigt</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">"Audiotrack-Menü ist ausgeblendet
|
||||
|
||||
Um das Audiotrack-Menü anzuzeigen, ändern Sie \"Video-Streams fälschen\" zu iPadOS"</string>
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
|
||||
'Android No SDK' must be kept untranslated. -->
|
||||
<string name="revanced_hide_player_flyout_audio_track_not_available">"Audiotrack-Menü ist ausgeblendet\n\nUm das Audiotrack-Menü anzuzeigen, ändern Sie \"</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">Überwachung in VR ausblenden</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Im VR-Menü beobachten ist ausgeblendet</string>
|
||||
@@ -862,13 +889,16 @@ Um das Audiotrack-Menü anzuzeigen, ändern Sie \"Video-Streams fälschen\" zu i
|
||||
<string name="revanced_hide_shorts_history_title">Shorts im Verlauf verstecken</string>
|
||||
<string name="revanced_hide_shorts_history_summary_on">Im Verlauf versteckt</string>
|
||||
<string name="revanced_hide_shorts_history_summary_off">Im Verlauf angezeigt</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_title">\'Super Thanks\'-Button ausblenden</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_title">Label \"Automatisch synchronisiert\" ausblenden</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_summary_on">Automatisch synchronisiertes Label ist ausgeblendet</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_summary_off">Automatisch synchronisiertes Label wird angezeigt</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_title">Schaltfläche \"Super Thanks kaufen\" ausblenden</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_on">Schaltfläche \"Super Thanks kaufen\" ist ausgeblendet</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_off">Schaltfläche \"Super Thanks kaufen\" wird angezeigt</string>
|
||||
<string name="revanced_hide_shorts_effect_button_title">Effekt-Schaltfläche ausblenden</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_on">Effekt-Taste ist ausgeblendet</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_off">Effekt-Taste ist eingeblendet</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">Green-Screen-Button ausblenden</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">Schaltfläche \"Greenscreen\" ausblenden</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_on">Grünbildschirm-Taste ist ausgeblendet</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_off">Grünbildschirm-Taste wird angezeigt</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_title">Hashtag Button ausblenden</string>
|
||||
@@ -878,10 +908,13 @@ Um das Audiotrack-Menü anzuzeigen, ändern Sie \"Video-Streams fälschen\" zu i
|
||||
<string name="revanced_hide_shorts_join_button_title">\'Beitreten\'-Button ausblenden</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_on">Join Button ist ausgeblendet</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_off">Schaltfläche beitreten wird angezeigt</string>
|
||||
<string name="revanced_hide_shorts_live_preview_title">Live-Vorschau ausblenden</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_on">Live-Vorschau ist ausgeblendet</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_off">Live-Vorschau wird angezeigt</string>
|
||||
<string name="revanced_hide_shorts_location_label_title">Standortbezeichnung ausblenden</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_on">Ortsbezeichnung ist ausgeblendet</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_off">Ortsbezeichnung wird angezeigt</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">Schaltfläche \"Neue Beiträge ausblenden\"</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">Schaltfläche \"Neue Beiträge\" ausblenden</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_on">Schaltfläche \"Neue Beiträge\" ist ausgeblendet</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_off">Schaltfläche \"Neue Beiträge\" wird angezeigt</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_title">Pausierte Overlay-Tasten ausblenden</string>
|
||||
@@ -890,7 +923,7 @@ Um das Audiotrack-Menü anzuzeigen, ändern Sie \"Video-Streams fälschen\" zu i
|
||||
<string name="revanced_hide_shorts_preview_comment_title">Kommentarvorschau ausblenden</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_on">Vorschaukommentar ist ausgeblendet</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_off">Vorschaukommentar wird angezeigt</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">\'Musik speichern\'-Button ausblenden</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">Schaltfläche \"Musik speichern\" ausblenden</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_on">Musikspeicher Button ist ausgeblendet</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_off">Musikspeicher Button wird angezeigt</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_title">Suchvorschläge ausblenden</string>
|
||||
@@ -914,7 +947,7 @@ Um das Audiotrack-Menü anzuzeigen, ändern Sie \"Video-Streams fälschen\" zu i
|
||||
<string name="revanced_hide_shorts_use_sound_button_title">Schaltfläche \"Diesen Sound verwenden\" ausblenden</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_on">Schaltfläche \"Diesen Sound verwenden\" ist ausgeblendet</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_off">Schaltfläche \"Diesen Sound verwenden\" ist angezeigt</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_title">Schaltfläche „Diese Vorlage verwenden“ ausblenden</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_title">Schaltfläche \"Diese Vorlage verwenden\" ausblenden</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_on">Schaltfläche \"Diese Vorlage verwenden\" ist ausgeblendet</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_off">Schaltfläche „Diese Vorlage verwenden“ wird angezeigt</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_title">\'Like\'-Button-Fontäne ausblenden</string>
|
||||
@@ -1557,13 +1590,13 @@ Durch Aktivieren dieser Option können höhere Videoqualitäten freigeschaltet w
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
<string name="revanced_playback_speed_dialog_button_title">Zeige Geschwindigkeitsdialog Taste</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Die Schaltfläche wird angezeigt. Tippen und halten, um die Wiedergabegeschwindigkeit auf die Standardeinstellung zurückzusetzen.</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Button wird nicht angezeigt</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Schaltfläche für Geschwindigkeitsdialog wird angezeigt. Tippen und halten, um die Wiedergabegeschwindigkeit auf Standard zurückzusetzen.</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Schaltfläche für Geschwindigkeitsdialog wird nicht angezeigt</string>
|
||||
</patch>
|
||||
<patch id="video.quality.button.videoQualityDialogButtonPatch">
|
||||
<string name="revanced_video_quality_dialog_button_title">Videoqualität-Schaltfläche anzeigen</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">Schaltfläche wird angezeigt. Tippen und halten, um die Qualität auf Standard zurückzusetzen</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">Schaltfläche wird nicht angezeigt</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">Schaltfläche für Videoqualität wird angezeigt. Tippen und halten, um die Qualität auf Standard zurückzusetzen.</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">Schaltfläche für Videoqualität wird nicht angezeigt</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_speed_menu_title">Benutzerdefiniertes Wiedergabegeschwindigkeitsmenü</string>
|
||||
@@ -1660,16 +1693,30 @@ Die Videowiedergabe mit AV1 kann stottern oder Bilder überspringen."</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_on">Dauerwiederholung ist aktiviert</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_off">Dauerwiederholung ist deaktiviert</string>
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
<patch id="layout.buttons.hideButtons">
|
||||
<string name="revanced_music_hide_cast_button_title">Übertragen-Taste ausblenden</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_on">Übertragen-Taste ist ausgeblendet</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_off">Übertragen-Taste wird angezeigt</string>
|
||||
<string name="revanced_music_hide_history_button_title">Verlauf-Schaltfläche ausblenden</string>
|
||||
<string name="revanced_music_hide_history_button_summary_on">Verlauf-Schaltfläche ist ausgeblendet</string>
|
||||
<string name="revanced_music_hide_history_button_summary_off">Verlauf-Schaltfläche wird angezeigt</string>
|
||||
<string name="revanced_music_hide_notification_button_title">Benachrichtigungsschaltfläche ausblenden</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_on">Benachrichtigungsschaltfläche wird ausgeblendet</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_off">Benachrichtigungsschaltfläche wird angezeigt</string>
|
||||
<string name="revanced_music_hide_search_button_title">Suchschaltfläche ausblenden</string>
|
||||
<string name="revanced_music_hide_search_button_summary_on">Suchschaltfläche wird ausgeblendet</string>
|
||||
<string name="revanced_music_hide_search_button_summary_off">Suchschaltfläche wird angezeigt</string>
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
<string name="revanced_music_hide_category_bar_title">Kategorieleiste ausblenden</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_on">Kategorieleiste ist ausgeblendet</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_off">Kategorieleiste wird angezeigt</string>
|
||||
</patch>
|
||||
<patch id="layout.miniplayercolor.changeMiniplayerColor">
|
||||
<string name="revanced_music_change_miniplayer_color_title">Miniplayer-Farbe ändern</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_on">Miniplayer-Farbe entspricht dem Vollbild-Player</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_off">Miniplayer verwendet Standardfarbe</string>
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<string name="revanced_music_navigation_bar_screen_title">Navigationsleiste</string>
|
||||
<string name="revanced_music_navigation_bar_screen_summary">Navigationsleisten-Schaltflächen ausblenden oder ändern</string>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time_invalid">Η ημερομηνία κατασκευής του APK είναι κατεστραμμένη</string>
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">Προειδοποίηση</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">Ειδοποίηση ReVanced</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">Το ιστορικό παρακολούθησης δεν αποθηκεύεται.<br><br>Πιθανό να συμβαίνει λόγω αποκλεισμού διαφημίσεων μέσω DNS ή μέσω διακομιστή μεσολάβησης δικτύου.<br><br>Μια λύση γι\'αυτό θα ήταν να προσθέσετε σε whitelist το <b>s.youtube.com</b> ή να απενεργοποιήστε τους DNS/proxy blockers.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Να μην εμφανιστεί ξανά</string>
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<string name="revanced_settings_submenu_title">Ρυθμίσεις</string>
|
||||
<string name="revanced_settings_confirm_user_dialog_title">Είστε βέβαιοι ότι θέλετε να συνεχίσετε;</string>
|
||||
<string name="revanced_settings_save">Αποθήκευση</string>
|
||||
<string name="revanced_settings_reset">Επαναφορά</string>
|
||||
<string name="revanced_settings_reset_color">Επαναφορά χρώματος</string>
|
||||
<string name="revanced_settings_color_invalid">Μη έγκυρο χρώμα</string>
|
||||
@@ -164,6 +164,14 @@ Second \"item\" text"</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_toast">Τα αρχεία καταγραφής εκκαθαρίστηκαν</string>
|
||||
<string name="revanced_debug_feature_flags_manager_title">Διαχειριστής σημαιών λειτουργιών</string>
|
||||
<string name="revanced_debug_feature_flags_manager_summary">Διαχείριση των boolean σημαιών λειτουργιών</string>
|
||||
<string name="revanced_debug_feature_flags_manager_active_header">Ενεργές σημαίες (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_blocked_header">Αποκλεισμένες σημαίες (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_search_hint">Αναζήτηση σημαιών...</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_saved">Οι σημαίες αποθηκεύτηκαν</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_reset">Οι σημαίες επαναφέρθηκαν</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_copied">Οι σημαίες αντιγράφηκαν στο πρόχειρο</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">Καθαρισμός συνδέσμων κοινοποίησης</string>
|
||||
@@ -276,6 +284,9 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_title">Ετικέτες προτάσεων βίντεο</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_on">Κρυμμένες\n\nΑφορά τις ετικέτες «Άλλοι χρήστες παρακολούθησαν επίσης» και «Ενδέχεται επίσης να σας αρέσει» στα αποτελέσματα αναζήτησης</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_off">Εμφανίζονται\n\nΑφορά τις ετικέτες «Άλλοι χρήστες παρακολούθησαν επίσης» και «Ενδέχεται επίσης να σας αρέσει» στα αποτελέσματα αναζήτησης</string>
|
||||
<string name="revanced_hide_visual_spacer_title">Οπτικό διαχωριστικό</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_on">Κρυμμένο</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_off">Εμφανίζεται</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">YouTube Doodles</string>
|
||||
<string name="revanced_hide_doodles_summary_on">Κρυμμένα\n\nΑφορά τις κινούμενες εικόνες YouTube Doodles στο λογότυπο</string>
|
||||
@@ -327,7 +338,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_chapters_section_title">Κεφάλαια του βίντεο</string>
|
||||
<string name="revanced_hide_chapters_section_summary_on">Κρυμμένη</string>
|
||||
<string name="revanced_hide_chapters_section_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_title">Ενότητα «Πως δημιουργήθηκε αυτό το περιεχόμενο»</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_title">Ενότητα «Πως δημιουργήθηκε»</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_on">Κρυμμένη</string>
|
||||
<string name="revanced_hide_how_this_was_made_section_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_hide_hype_points_title">Πόντοι Hype</string>
|
||||
@@ -336,12 +347,21 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_podcast_section_title">Ενότητα «Εξερευνήστε το podcast»</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Κρυμμένη</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Κάρτες πληροφοριών</string>
|
||||
<string name="revanced_hide_featured_links_section_title">Ενότητα προτεινόμενων συνδέσμων</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_on">Κρυμμένη</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_hide_featured_videos_section_title">Ενότητα προτεινόμενων βίντεο</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_on">Κρυμμένη</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Ενότητα καρτών πληροφοριών</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">Κρυμμένη</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">Ενότητα «Βασικές έννοιες»</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Κρυμμένη</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_hide_subscribe_button_title">Κουμπί «Εγγραφή»</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_on">Κρυμμένο</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_hide_transcript_section_title">Ενότητα «Μεταγραφή»</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">Κρυμμένη</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">Εμφανίζεται</string>
|
||||
@@ -363,24 +383,32 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_channel_screen_title">Σελίδα καναλιού</string>
|
||||
<string name="revanced_channel_screen_summary">Απόκρυψη ή εμφάνιση στοιχείων της σελίδας καναλιού</string>
|
||||
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_community_button_title">Κουμπί «Κοινότητα»</string>
|
||||
<string name="revanced_hide_community_button_summary_on">Κρυμμένο</string>
|
||||
<string name="revanced_hide_community_button_summary_off">Εμφανίζεται</string>
|
||||
<!-- 'For You' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">Ενότητα «Για εσάς» στη σελίδα καναλιού</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Κρυμμένη</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">Εμφανίζεται</string>
|
||||
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_join_button_title">Κουμπί «Συμμετοχή»</string>
|
||||
<string name="revanced_hide_join_button_summary_on">Κρυμμένο</string>
|
||||
<string name="revanced_hide_join_button_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_hide_links_preview_title">Προεπισκόπηση συνδέσμων</string>
|
||||
<string name="revanced_hide_links_preview_summary_on">Κρυμμένη</string>
|
||||
<string name="revanced_hide_links_preview_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_hide_members_shelf_title">Ενότητα μελών</string>
|
||||
<string name="revanced_hide_members_shelf_summary_on">Κρυμμένη</string>
|
||||
<string name="revanced_hide_members_shelf_summary_off">Εμφανίζεται</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_community_button_title">Κουμπί «Επισκεφτείτε την κοινότητα»</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_on">Κρυμμένο</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_off">Εμφανίζεται</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">Κουμπί «Επίσκεψη στο κατάστημα»</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Κρυμμένο</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Εμφανίζεται</string>
|
||||
<!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_store_button_title">Κουμπί «Κατάστημα»</string>
|
||||
<string name="revanced_hide_store_button_summary_on">Κρυμμένο</string>
|
||||
<string name="revanced_hide_store_button_summary_off">Εμφανίζεται</string>
|
||||
<!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_title">Κουμπί «Εγγραφή»</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_on">Κρυμμένο</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_comments_screen_title">Σχόλια</string>
|
||||
<string name="revanced_comments_screen_summary">Απόκρυψη ή εμφάνιση στοιχείων στα σχόλια</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_title">Σύνοψη συζήτησης που δημιουργήθηκε από AI</string>
|
||||
@@ -522,11 +550,11 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_share_copy_url_success">Η διεύθυνση URL αντιγράφηκε στο πρόχειρο</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">Η διεύθυνση URL αντιγράφηκε με χρονική σήμανση</string>
|
||||
<string name="revanced_copy_video_url_title">Εμφάνιση κουμπιού αντιγραφής URL του βίντεο</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Το κουμπί εμφανίζεται. Πατήστε για να αντιγράψετε τη διεύθυνση URL του βίντεο. Πατήστε παρατεταμένα για να αντιγράψετε τη διεύθυνση URL με χρονική σήμανση</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Το κουμπί δεν εμφανίζεται</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Το κουμπί αντιγραφής URL βίντεο εμφανίζεται. Πατήστε για να αντιγράψετε τη διεύθυνση URL του βίντεο. Πατήστε παρατεταμένα για να αντιγράψετε τη διεύθυνση URL με χρονική σήμανση</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Το κουμπί αντιγραφής URL βίντεο δεν εμφανίζεται</string>
|
||||
<string name="revanced_copy_video_url_timestamp_title">Εμφάνιση κουμπιού αντιγραφής URL με χρονική σήμανση</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Το κουμπί εμφανίζεται. Πατήστε για να αντιγράψετε τη διεύθυνση URL του βίντεο με χρονική σήμανση. Πατήστε παρατεταμένα για να αντιγράψετε τη διεύθυνση URL χωρίς χρονική σήμανση</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Το κουμπί δεν εμφανίζεται</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Το κουμπί αντιγραφής URL με χρονική σήμανση εμφανίζεται. Πατήστε για να αντιγράψετε τη διεύθυνση URL του βίντεο με χρονική σήμανση. Πατήστε παρατεταμένα για να αντιγράψετε τη διεύθυνση URL χωρίς χρονική σήμανση</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Το κουμπί αντιγραφής URL με χρονική σήμανση δεν εμφανίζεται</string>
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
<string name="revanced_remove_viewer_discretion_dialog_title">Παράθυρο ηλικιακού περιορισμού</string>
|
||||
@@ -667,7 +695,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_download_button_summary_on">Κρυμμένο</string>
|
||||
<string name="revanced_hide_download_button_summary_off">Εμφανίζεται</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. -->
|
||||
This button only shows on videos uploaded by the logged-in user. -->
|
||||
<string name="revanced_hide_hype_button_title">Κουμπί «Hype»</string>
|
||||
<string name="revanced_hide_hype_button_summary_on">Κρυμμένο</string>
|
||||
<string name="revanced_hide_hype_button_summary_off">Εμφανίζεται</string>
|
||||
@@ -788,10 +816,11 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_title">Μενού «Κομμάτι ήχου»</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_on">Κρυμμένο</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_off">Εμφανίζεται</string>
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
|
||||
'Android No SDK' must be kept untranslated. -->
|
||||
<string name="revanced_hide_player_flyout_audio_track_not_available">"Κρυμμένο
|
||||
|
||||
Για να εμφανίζεται το μενού κομματιού ήχου, αλλάξτε την «Παραποίηση ροών βίντεο» σε iPadOS"</string>
|
||||
Για να εμφανίζεται το μενού κομματιού ήχου, αλλάξτε την «Παραποίηση ροών βίντεο» σε 'Android No SDK'"</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">Μενού «Προβολή σε VR»</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Κρυμμένο</string>
|
||||
@@ -867,6 +896,9 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_shorts_history_title">Shorts στο ιστορικό παρακολούθησης</string>
|
||||
<string name="revanced_hide_shorts_history_summary_on">Κρυμμένα</string>
|
||||
<string name="revanced_hide_shorts_history_summary_off">Εμφανίζονται</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_title">Ετικέτα αυτόματης μεταγλώττισης</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_summary_on">Κρυμμένη</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_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">Κρυμμένο</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_off">Εμφανίζεται</string>
|
||||
@@ -883,6 +915,9 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_shorts_join_button_title">Κουμπί «Συμμετοχή»</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_on">Κρυμμένο</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_hide_shorts_live_preview_title">Προεπισκόπηση live</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_on">Κρυμμένη</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_hide_shorts_location_label_title">Ετικέτα τοποθεσίας</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_on">Κρυμμένη</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_off">Εμφανίζεται</string>
|
||||
@@ -1559,13 +1594,13 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
<string name="revanced_playback_speed_dialog_button_title">Εμφάνιση κουμπιού αλλαγής ταχύτητας</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Το κουμπί εμφανίζεται. Πατήστε παρατεταμένα για επαναφορά της ταχύτητας αναπαραγωγής στην προεπιλογή</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Το κουμπί δεν εμφανίζεται</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Το κουμπί αλλαγής ταχύτητας εμφανίζεται. Πατήστε παρατεταμένα για επαναφορά της ταχύτητας αναπαραγωγής στην προεπιλογή</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Το κουμπί αλλαγής ταχύτητας δεν εμφανίζεται</string>
|
||||
</patch>
|
||||
<patch id="video.quality.button.videoQualityDialogButtonPatch">
|
||||
<string name="revanced_video_quality_dialog_button_title">Εμφάνιση κουμπιού αλλαγής ποιότητας βίντεο</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">Το κουμπί εμφανίζεται. Πατήστε παρατεταμένα για επαναφορά της ποιότητας στην προεπιλογή</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">Το κουμπί δεν εμφανίζεται</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">Το κουμπί ποιότητας βίντεο εμφανίζεται. Πατήστε παρατεταμένα για επαναφορά της ποιότητας στην προεπιλογή</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">Το κουμπί ποιότητας βίντεο δεν εμφανίζεται</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_speed_menu_title">Μενού προσαρμοσμένης ταχύτητας αναπαραγωγής</string>
|
||||
@@ -1662,16 +1697,30 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_on">Η μόνιμη επανάληψη είναι ενεργοποιημένη</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_off">Η μόνιμη επανάληψη είναι απενεργοποιημένη</string>
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
<patch id="layout.buttons.hideButtons">
|
||||
<string name="revanced_music_hide_cast_button_title">Κουμπί μετάδοσης</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_on">Κρυμμένο</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_music_hide_history_button_title">Κουμπί ιστορικού</string>
|
||||
<string name="revanced_music_hide_history_button_summary_on">Κρυμμένο</string>
|
||||
<string name="revanced_music_hide_history_button_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_music_hide_notification_button_title">Κουμπί ειδοποιήσεων</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_on">Κρυμμένο</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_off">Εμφανίζεται</string>
|
||||
<string name="revanced_music_hide_search_button_title">Κουμπί αναζήτησης</string>
|
||||
<string name="revanced_music_hide_search_button_summary_on">Κρυμμένο</string>
|
||||
<string name="revanced_music_hide_search_button_summary_off">Εμφανίζεται</string>
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
<string name="revanced_music_hide_category_bar_title">Γραμμή κατηγοριών</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_on">Κρυμμένη</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_off">Εμφανίζεται</string>
|
||||
</patch>
|
||||
<patch id="layout.miniplayercolor.changeMiniplayerColor">
|
||||
<string name="revanced_music_change_miniplayer_color_title">Αλλαγή χρώματος ελαχιστοποιημένης οθόνης αναπαραγωγής</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_on">Το χρώμα της ελαχιστοποιημένης οθόνης αναπαραγωγής ταιριάζει με αυτό της οθόνης αναπαραγωγής πλήρους οθόνης</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_off">Η ελαχιστοποιημένη οθόνη αναπαραγωγής χρησιμοποιεί το προεπιλεγμένο χρώμα</string>
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<string name="revanced_music_navigation_bar_screen_title">Γραμμή πλοήγησης</string>
|
||||
<string name="revanced_music_navigation_bar_screen_summary">Απόκρυψη ή αλλαγή κουμπιών της γραμμής πλοήγησης</string>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time_invalid">La fecha de compilación del APK está corrupta</string>
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">Advertencia</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">Aviso de ReVanced</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">Tu historial no está siendo guardado.<br><br>Esto puede ser por un bloqueador de anuncios DNS o Proxy.<br><br>Para arreglarlo, permita el dominio <b>s.youtube.com</b> o desactive el bloqueador DNS o Proxy.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">No mostrar de nuevo</string>
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<string name="revanced_settings_submenu_title">Ajustes</string>
|
||||
<string name="revanced_settings_confirm_user_dialog_title">¿Estás seguro de que quieres continuar?</string>
|
||||
<string name="revanced_settings_save">Guardar</string>
|
||||
<string name="revanced_settings_reset">Restablecer</string>
|
||||
<string name="revanced_settings_reset_color">Restablecer color</string>
|
||||
<string name="revanced_settings_color_invalid">Color no válido</string>
|
||||
@@ -164,6 +164,14 @@ No se le notificará de ningún evento inesperado."</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_title">Borrar registros de depuración</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_summary">Borra todos los registros de depuración de ReVanced almacenados</string>
|
||||
<string name="revanced_debug_logs_clear_toast">Registros borrados</string>
|
||||
<string name="revanced_debug_feature_flags_manager_title">Manager de indicadores de funciones</string>
|
||||
<string name="revanced_debug_feature_flags_manager_summary">Gestionar indicadores de funciones booleanos</string>
|
||||
<string name="revanced_debug_feature_flags_manager_active_header">Banderas activas (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_blocked_header">Banderas bloqueadas (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_search_hint">Buscar banderas...</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_saved">Banderas guardadas</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_reset">Banderas restablecidas</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_copied">Banderas copiadas al portapapeles</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">Sanear enlaces compartidos</string>
|
||||
@@ -274,6 +282,9 @@ Sin embargo, si activas esto, también se registrarán algunos datos del usuario
|
||||
<string name="revanced_hide_video_recommendation_labels_title">Ocultar etiquetas de recomendación de vídeo</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_on">Las etiquetas \"La gente también vio\" y \"También te puede gustar\" en los resultados de búsqueda están ocultas</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_off">Las etiquetas \"La gente también vio\" y \"También te puede gustar\" en los resultados de búsqueda son visibles</string>
|
||||
<string name="revanced_hide_visual_spacer_title">Ocultar espaciador visual</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_on">El espaciador visual está oculto</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_off">El espaciador visual está visible</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">Ocultar YouTube Doodles</string>
|
||||
<string name="revanced_hide_doodles_summary_on">La animación de los Doodles de YouTube en el logotipo está oculta</string>
|
||||
@@ -334,12 +345,21 @@ Si un doodle se está mostrando actualmente en tu región y este ajuste de ocult
|
||||
<string name="revanced_hide_podcast_section_title">Ocultar \"Explora el pódcast\"</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">La sección Explora el pódcast está oculta</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Se muestra la sección Explora el pódcast</string>
|
||||
<string name="revanced_hide_featured_links_section_title">Ocultar enlaces destacados</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_on">La sección de enlaces destacados está oculta</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_off">La sección de enlaces destacados es visible</string>
|
||||
<string name="revanced_hide_featured_videos_section_title">Ocultar vídeos destacados</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_on">La sección de vídeos destacados está oculta</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_off">La sección de vídeos destacados es visible</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Ocultar tarjetas de información</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">La sección de tarjetas de información está oculta</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">Se muestra la sección de tarjetas de información</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">Ocultar \"Conceptos clave\"</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">La sección Conceptos clave está oculta</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Se muestra la sección Conceptos clave</string>
|
||||
<string name="revanced_hide_subscribe_button_title">Ocultar botón de Suscribirse</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_on">El botón de Suscribirse está oculto</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_off">El botón de Suscribirse es visible</string>
|
||||
<string name="revanced_hide_transcript_section_title">Ocultar transcripción</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">La sección transcripción está oculta</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">Se muestra la sección transcripción</string>
|
||||
@@ -361,24 +381,32 @@ Si un doodle se está mostrando actualmente en tu región y este ajuste de ocult
|
||||
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Mostrado en el historial de reproducciones</string>
|
||||
<string name="revanced_channel_screen_title">Página del canal</string>
|
||||
<string name="revanced_channel_screen_summary">Ocultar o mostrar componentes de la página del canal</string>
|
||||
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_community_button_title">Ocultar botón de Comunidad</string>
|
||||
<string name="revanced_hide_community_button_summary_on">El botón de la comunidad está oculto</string>
|
||||
<string name="revanced_hide_community_button_summary_off">El botón de la comunidad es visible</string>
|
||||
<!-- 'For You' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">Ocultar la sección \"Para ti\"</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">La estantería \"Para ti\" está oculta</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">La estantería \"Para ti\" es visible</string>
|
||||
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_join_button_title">Ocultar el botón \"Unirse\"</string>
|
||||
<string name="revanced_hide_join_button_summary_on">El botón Unirse está oculto</string>
|
||||
<string name="revanced_hide_join_button_summary_off">El botón Unirse es visible</string>
|
||||
<string name="revanced_hide_links_preview_title">Ocultar vista previa de enlaces</string>
|
||||
<string name="revanced_hide_links_preview_summary_on">La vista previa de enlaces está oculta</string>
|
||||
<string name="revanced_hide_links_preview_summary_off">Vista previa de enlaces visible</string>
|
||||
<string name="revanced_hide_members_shelf_title">Ocultar estantería de miembros</string>
|
||||
<string name="revanced_hide_members_shelf_summary_on">La estantería de miembros está oculta</string>
|
||||
<string name="revanced_hide_members_shelf_summary_off">La estantería de miembros se muestra</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_community_button_title">Ocultar el botón \"Visitar comunidad\"</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_on">El botón Visitar comunidad está oculto</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_off">El botón \"Visitar comunidad\" es visible</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">Ocultar el botón \'Visitar tienda\' en las páginas del canal</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">El botón \"Visitar tienda\" está oculto</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">El botón \"Visitar tienda\" es visible</string>
|
||||
<!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_store_button_title">Ocultar el botón Tienda</string>
|
||||
<string name="revanced_hide_store_button_summary_on">El botón Tienda está oculto</string>
|
||||
<string name="revanced_hide_store_button_summary_off">El botón Tienda es visible</string>
|
||||
<!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_title">Ocultar el botón Suscribirse</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_on">El botón Suscribirse está oculto</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_off">El botón Suscribirse es visible</string>
|
||||
<string name="revanced_comments_screen_title">Comentarios</string>
|
||||
<string name="revanced_comments_screen_summary">Ocultar o mostrar los componentes de sección de comentarios</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_title">Ocultar resumen de chat de IA</string>
|
||||
@@ -520,11 +548,11 @@ Esta función solo está disponible para dispositivos antiguos"</string>
|
||||
<string name="revanced_share_copy_url_success">URL copiada al portapapeles</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">URL con marca de tiempo copiada</string>
|
||||
<string name="revanced_copy_video_url_title">Mostrar botón URL de copia de vídeo</string>
|
||||
<string name="revanced_copy_video_url_summary_on">El botón se muestra. Toca para copiar la URL del vídeo. Toca y mantén pulsado para copiar con la marca de tiempo</string>
|
||||
<string name="revanced_copy_video_url_summary_off">El botón no se muestra</string>
|
||||
<string name="revanced_copy_video_url_summary_on">El botón Copiar URL del vídeo es visible. Toca para copiar la URL del vídeo. Mantén pulsado para copiar con marca de tiempo</string>
|
||||
<string name="revanced_copy_video_url_summary_off">El botón Copiar URL del vídeo no es visible</string>
|
||||
<string name="revanced_copy_video_url_timestamp_title">Mostrar botón URL de la marca de tiempo</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">El botón se muestra. Toca para copiar la URL del vídeo con la marca de tiempo. Toca y mantén pulsado para copiar sin la marca de tiempo</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">El botón no se muestra</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">El botón Copiar URL con marca de tiempo es visible. Toca para copiar la URL del vídeo con marca de tiempo. Mantén pulsado para copiar sin marca de tiempo</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">El botón Copiar URL con marca de tiempo no es visible</string>
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
<string name="revanced_remove_viewer_discretion_dialog_title">Eliminar diálogo de discreción del espectador</string>
|
||||
@@ -533,7 +561,7 @@ Esta función solo está disponible para dispositivos antiguos"</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Esto no evita la restricción de edad. Solo la acepta automáticamente.</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
|
||||
<string name="revanced_disable_signin_to_tv_popup_title">Desactivar la ventana emergente de Iniciar sesión en TV</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_title">Desactivar la ventana emergente \"Iniciar sesión en TV\"</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_summary_on">La ventana emergente de Iniciar sesión en TV está desactivada</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_summary_off">La ventana emergente de Iniciar sesión en TV está activada</string>
|
||||
</patch>
|
||||
@@ -665,7 +693,7 @@ Ajusta el volumen deslizando verticalmente en el lado derecho de la pantalla"</s
|
||||
<string name="revanced_hide_download_button_summary_on">El botón de descarga está oculto</string>
|
||||
<string name="revanced_hide_download_button_summary_off">Se muestra el botón de descarga</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. -->
|
||||
This button only shows on videos uploaded by the logged-in user. -->
|
||||
<string name="revanced_hide_hype_button_title">Ocultar Hype</string>
|
||||
<string name="revanced_hide_hype_button_summary_on">El botón Hype está oculto</string>
|
||||
<string name="revanced_hide_hype_button_summary_off">El botón de hype es visible</string>
|
||||
@@ -786,10 +814,11 @@ Si cambiar este ajuste no tiene efecto, intenta cambiar al modo incógnito."</st
|
||||
<string name="revanced_hide_player_flyout_audio_track_title">Ocultar pista de audio</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_on">El menú de pista de audio está oculto</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_off">El menú de pista de audio se muestra</string>
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
|
||||
'Android No SDK' must be kept untranslated. -->
|
||||
<string name="revanced_hide_player_flyout_audio_track_not_available">"El menú de la pista de audio está oculto
|
||||
|
||||
Para mostrar el menú de la pista de audio, cambia 'Suplantar transmisiones de video' a iPadOS"</string>
|
||||
Para mostrar el menú de la pista de audio, cambia 'Suplantar transmisiones de video' a 'Android No SDK'"</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">Ocultar reloj en VR</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Ver en el menú VR está oculto</string>
|
||||
@@ -865,13 +894,16 @@ Para mostrar el menú de la pista de audio, cambia 'Suplantar transmisiones de v
|
||||
<string name="revanced_hide_shorts_history_title">Ocultar Shorts en el historial de visualización</string>
|
||||
<string name="revanced_hide_shorts_history_summary_on">Oculto en el historial de visualización</string>
|
||||
<string name="revanced_hide_shorts_history_summary_off">Mostrado en el historial de visualización</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_title">Ocultar el botón Comprar Súper Gracias</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_title">Ocultar la etiqueta \"Doblado automáticamente\"</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_summary_on">La etiqueta de doblaje automático está oculta</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_summary_off">La etiqueta de doblaje automático está visible</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_title">Ocultar el botón \"Comprar Super Gracias\"</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_on">El botón Comprar Super Thanks está oculto</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_off">El botón Comprar Super Thanks es visible</string>
|
||||
<string name="revanced_hide_shorts_effect_button_title">Ocultar botón de efecto</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_on">El botón de efecto está oculto</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_off">El botón de efecto es visible</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">Ocultar el botón Pantalla verde</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">Ocultar el botón \"Pantalla verde\"</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_on">El botón verde de pantalla está oculto</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_off">Se muestra el botón verde de pantalla</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_title">Ocultar botón de hashtag</string>
|
||||
@@ -881,10 +913,13 @@ Para mostrar el menú de la pista de audio, cambia 'Suplantar transmisiones de v
|
||||
<string name="revanced_hide_shorts_join_button_title">Ocultar el botón Unirse</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_on">Botón de unión oculto</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_off">Se muestra el botón de unirse</string>
|
||||
<string name="revanced_hide_shorts_live_preview_title">Ocultar vista previa en vivo</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_on">La vista previa en vivo está oculta</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_off">La vista previa en vivo se muestra</string>
|
||||
<string name="revanced_hide_shorts_location_label_title">Ocultar etiqueta de ubicación</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_on">Etiqueta de ubicación oculta</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_off">Etiqueta de ubicación mostrada</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">Ocultar el botón Publicaciones nuevas</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">Ocultar el botón \"Nuevas publicaciones\"</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_on">El botón Publicaciones nuevas está oculto</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_off">Se muestra el botón Publicaciones nuevas</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_title">Ocultar botones de superposición en pausa</string>
|
||||
@@ -893,7 +928,7 @@ Para mostrar el menú de la pista de audio, cambia 'Suplantar transmisiones de v
|
||||
<string name="revanced_hide_shorts_preview_comment_title">Ocultar vista previa de comentarios</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_on">La vista previa de comentarios está oculta</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_off">La vista previa de comentarios es visible</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">Ocultar el botón Guardar música</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">Ocultar el botón \"Guardar música\"</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_on">El botón Guardar música está oculto</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_off">Mostrar el botón de guardar música</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_title">Ocultar sugerencias de búsqueda</string>
|
||||
@@ -914,10 +949,10 @@ Para mostrar el menú de la pista de audio, cambia 'Suplantar transmisiones de v
|
||||
<string name="revanced_hide_shorts_upcoming_button_title">Ocultar el botón Próximos</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_on">El botón próximo está oculto</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_off">Se muestra el botón próximo</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_title">Ocultar el botón Usar este sonido</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_title">Ocultar el botón \"Usar este sonido\"</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_on">El botón Usar este sonido está oculto</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_off">El botón Usar este sonido es visible</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_title">Ocultar botón Usar esta plantilla</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_title">Ocultar el botón \"Usar esta plantilla\"</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_on">El botón Usar esta plantilla está oculto</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_off">El botón Usar esta plantilla se muestra</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_title">Ocultar la animación de la fuente de Me gusta</string>
|
||||
@@ -1551,13 +1586,13 @@ Habilitar esto puede desbloquear calidades de vídeo más altas"</string>
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
<string name="revanced_playback_speed_dialog_button_title">Mostrar botón de diálogo de velocidad</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Se muestra el botón. Mantén pulsado para restablecer la velocidad de reproducción predeterminada</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">El botón no se muestra</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">El botón del diálogo de velocidad es visible. Mantén pulsado para restablecer la velocidad de reproducción a la predeterminada</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">El botón del diálogo de velocidad no es visible</string>
|
||||
</patch>
|
||||
<patch id="video.quality.button.videoQualityDialogButtonPatch">
|
||||
<string name="revanced_video_quality_dialog_button_title">Mostrar botón de calidad de vídeo</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">Botón visible. Toca y mantén para restablecer la calidad a los valores predeterminados</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">Botón no visible</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">El botón de calidad de vídeo es visible. Mantén pulsado para restablecer la calidad a la predeterminada</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">El botón de calidad de vídeo no es visible</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_speed_menu_title">Menú de velocidad de reproducción personalizada</string>
|
||||
@@ -1652,16 +1687,30 @@ La reproducción puede tartamudear o perder fotogramas"</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_on">La repetición permanente está habilitada</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_off">La repetición permanente está deshabilitada</string>
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
<patch id="layout.buttons.hideButtons">
|
||||
<string name="revanced_music_hide_cast_button_title">Ocultar el botón de emisión</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_on">El botón de emisión está oculto</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_off">El botón de emisión es visible</string>
|
||||
<string name="revanced_music_hide_history_button_title">Ocultar el botón \"Historial\"</string>
|
||||
<string name="revanced_music_hide_history_button_summary_on">El botón de Historial está oculto</string>
|
||||
<string name="revanced_music_hide_history_button_summary_off">El botón de Historial es visible</string>
|
||||
<string name="revanced_music_hide_notification_button_title">Ocultar el botón de notificación</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_on">El botón de notificación está oculto</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_off">Se muestra el botón de notificación</string>
|
||||
<string name="revanced_music_hide_search_button_title">Ocultar el botón de búsqueda</string>
|
||||
<string name="revanced_music_hide_search_button_summary_on">El botón de búsqueda está oculto</string>
|
||||
<string name="revanced_music_hide_search_button_summary_off">Se muestra el botón de búsqueda</string>
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
<string name="revanced_music_hide_category_bar_title">Ocultar barra de categorías</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_on">La barra de categorías está oculta</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_off">La barra de categorías es visible</string>
|
||||
</patch>
|
||||
<patch id="layout.miniplayercolor.changeMiniplayerColor">
|
||||
<string name="revanced_music_change_miniplayer_color_title">Cambiar color del minirreproductor</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_on">El color del minirreproductor coincide con el del reproductor de pantalla completa</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_off">El minirreproductor utiliza el color predeterminado</string>
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<string name="revanced_music_navigation_bar_screen_title">Barra de navegación</string>
|
||||
<string name="revanced_music_navigation_bar_screen_summary">Ocultar o cambiar los botones de la barra de navegación</string>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -45,13 +44,14 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time_invalid">APK ehituskuupäev on rikutud</string>
|
||||
</patch>
|
||||
<patch id="misc.dns.checkWatchHistoryDomainNameResolutionPatch">
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">Hoiatus</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_title">ReVancedi Teade</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_message">Teie vaatamise ajalugu ei salvestata.<br><br>See on tõenäoliselt tingitud DNS-i reklaamiblokeerijast või võrguproksilt.<br><br>Selle parandamiseks lisage valgesse nimekirja <b>s.youtube.com</b> või lülitage kõik DNS-i reklaamiblokeerijad ja proksid välja.</string>
|
||||
<string name="revanced_check_watch_history_domain_name_dialog_ignore">Ära kuva uuesti</string>
|
||||
</patch>
|
||||
<patch id="misc.settings.settingsResourcePatch">
|
||||
<string name="revanced_settings_submenu_title">Seaded</string>
|
||||
<string name="revanced_settings_confirm_user_dialog_title">Kas sa oled kindel, et soovid jätkata?</string>
|
||||
<string name="revanced_settings_save">Salvesta</string>
|
||||
<string name="revanced_settings_reset">Lähtesta</string>
|
||||
<string name="revanced_settings_reset_color">Lähtesta värv</string>
|
||||
<string name="revanced_settings_color_invalid">Vigane värv</string>
|
||||
@@ -164,6 +164,14 @@ Teid ei teavitata ühestki ootamatust sündmusest."</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_title">Puhasta silumislogid</string>
|
||||
<string name="revanced_debug_logs_clear_buffer_summary">Puhastab kõik salvestatud ReVanced silumislogid</string>
|
||||
<string name="revanced_debug_logs_clear_toast">Logid puhastatud</string>
|
||||
<string name="revanced_debug_feature_flags_manager_title">Funktsioonilipikute Manager</string>
|
||||
<string name="revanced_debug_feature_flags_manager_summary">Halda booleani funktsioonilipikuid</string>
|
||||
<string name="revanced_debug_feature_flags_manager_active_header">Aktiivsed lipud (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_blocked_header">Blokeeritud lipud (%d)</string>
|
||||
<string name="revanced_debug_feature_flags_manager_search_hint">Otsi lippe...</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_saved">Lipud salvestatud</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_reset">Lipud lähtestatud</string>
|
||||
<string name="revanced_debug_feature_flags_manager_toast_copied">Lipud kopeeritud lõikelauale</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.sanitizeSharingLinksPatch">
|
||||
<string name="revanced_sanitize_sharing_links_title">Puhasta jagamislingid</string>
|
||||
@@ -274,6 +282,9 @@ Selle lubamine logib aga ka mõningaid kasutajaandmeid, näiteks teie IP-aadress
|
||||
<string name="revanced_hide_video_recommendation_labels_title">Peida videosoovituste sildid</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_on">\'Inimesed vaatasid ka\' ja \'Võib sulle meeldida\' sildid otsingutulemustes on peidetud</string>
|
||||
<string name="revanced_hide_video_recommendation_labels_summary_off">\'Inimesed vaatasid ka\' ja \'Võib sulle meeldida\' sildid otsingutulemustes on nähtaval</string>
|
||||
<string name="revanced_hide_visual_spacer_title">Peida visuaalne eraldaja</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_on">Visuaalne eraldaja on peidetud</string>
|
||||
<string name="revanced_hide_visual_spacer_summary_off">Visuaalne eraldaja on nähtav</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<string name="revanced_hide_doodles_title">Peida YouTube Doodles</string>
|
||||
<string name="revanced_hide_doodles_summary_on">YouTube Doodles animatsioon logol on peidetud</string>
|
||||
@@ -334,12 +345,21 @@ Kui Doodle on teie piirkonnas praegu nähtav ja see peitmise seade on sisse lül
|
||||
<string name="revanced_hide_podcast_section_title">Peida \"Avasta taskuhäälingut\"</string>
|
||||
<string name="revanced_hide_podcast_section_summary_on">Avasta taskuhäälingut jaotis on peidetud</string>
|
||||
<string name="revanced_hide_podcast_section_summary_off">Avasta taskuhäälingut jaotis on kuvatud</string>
|
||||
<string name="revanced_hide_featured_links_section_title">Peida esiletoodud lingid</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_on">Esiletõstetud linkide sektsioon on peidetud</string>
|
||||
<string name="revanced_hide_featured_links_section_summary_off">Esiletõstetud linkide sektsioon on nähtav</string>
|
||||
<string name="revanced_hide_featured_videos_section_title">Peida esiletõstetud videod</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_on">Esiletõstetud videote sektsioon on peidetud</string>
|
||||
<string name="revanced_hide_featured_videos_section_summary_off">Esiletõstetud videote sektsioon on nähtav</string>
|
||||
<string name="revanced_hide_info_cards_section_title">Peida infokaardid</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_on">Teabekaartide jaotis on peidetud</string>
|
||||
<string name="revanced_hide_info_cards_section_summary_off">Kuvatakse teabekaartide jaotis</string>
|
||||
<string name="revanced_hide_key_concepts_section_title">Peida \"Põhimõisted\"</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Põhimõisted jaotis on peidetud</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Põhimõisted jaotis on kuvatud</string>
|
||||
<string name="revanced_hide_subscribe_button_title">Peida tellimisnupp</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_on">Tellimisnupp on peidetud</string>
|
||||
<string name="revanced_hide_subscribe_button_summary_off">Tellimisnupp on nähtav</string>
|
||||
<string name="revanced_hide_transcript_section_title">Peida transkriptsioon</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">Skriptiosa on peidetud</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">Skriptiosa on näidatud</string>
|
||||
@@ -361,24 +381,32 @@ Kui Doodle on teie piirkonnas praegu nähtav ja see peitmise seade on sisse lül
|
||||
<string name="revanced_hide_filter_bar_feed_in_history_summary_off">Nähtav vaatamisajaloos</string>
|
||||
<string name="revanced_channel_screen_title">Kanali leht</string>
|
||||
<string name="revanced_channel_screen_summary">Peida või näita kanali lehe komponente</string>
|
||||
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_community_button_title">Peida kogukonna nupp</string>
|
||||
<string name="revanced_hide_community_button_summary_on">Kogukonna nupp on peidetud</string>
|
||||
<string name="revanced_hide_community_button_summary_off">Kogukonna nupp on nähtaval</string>
|
||||
<!-- 'For You' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_for_you_shelf_title">Peida \"Sulle\" riiul</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_on">Sulle mõeldud riiul on peidetud</string>
|
||||
<string name="revanced_hide_for_you_shelf_summary_off">Sulle mõeldud riiul on nähtav</string>
|
||||
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_join_button_title">Peida nupp „Liitu”</string>
|
||||
<string name="revanced_hide_join_button_summary_on">Nupp „Liitu” on peidetud</string>
|
||||
<string name="revanced_hide_join_button_summary_off">Nupp „Liitu” on nähtaval</string>
|
||||
<string name="revanced_hide_links_preview_title">Peida linkide eelvaade</string>
|
||||
<string name="revanced_hide_links_preview_summary_on">Linkide eelvaade on peidetud</string>
|
||||
<string name="revanced_hide_links_preview_summary_off">Linkide eelvaade on nähtav</string>
|
||||
<string name="revanced_hide_members_shelf_title">Peida liikmete riiul</string>
|
||||
<string name="revanced_hide_members_shelf_summary_on">Liikmete riiul on peidetud</string>
|
||||
<string name="revanced_hide_members_shelf_summary_off">Liikmete riiul on nähtav</string>
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_community_button_title">Peida \"Külasta kogukonda\" nupp</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_on">\"Külasta kogukonda\" nupp on peidetud</string>
|
||||
<string name="revanced_hide_visit_community_button_summary_off">Nupp \"Külasta kogukonda\" on nähtav</string>
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_visit_store_button_title">Peida kanali lehelt nuppu \"Külasta poodi\"</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_on">Nupp \"Külasta poodi\" on peidetud</string>
|
||||
<string name="revanced_hide_visit_store_button_summary_off">Nupp \"Külasta poodi\" on nähtav</string>
|
||||
<!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_store_button_title">Peida nupp „Pood”</string>
|
||||
<string name="revanced_hide_store_button_summary_on">Nupp „Pood” on peidetud</string>
|
||||
<string name="revanced_hide_store_button_summary_off">Nupp „Pood” on nähtaval</string>
|
||||
<!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_title">Peida nupp „Telli”</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_on">Nupp „Telli” on peidetud</string>
|
||||
<string name="revanced_hide_subscribe_button_in_channel_page_summary_off">Nupp „Telli” on nähtaval</string>
|
||||
<string name="revanced_comments_screen_title">Kommentaarid</string>
|
||||
<string name="revanced_comments_screen_summary">Peida või kuva kommentaaride sektsiooni komponendid</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_title">Peida AI vestluse kokkuvõte</string>
|
||||
@@ -520,11 +548,11 @@ See funktsioon on saadaval ainult vanemates seadmetes"</string>
|
||||
<string name="revanced_share_copy_url_success">URL kopeeritud clipboardi</string>
|
||||
<string name="revanced_share_copy_url_timestamp_success">Aadres URL ajaga kopeeritud</string>
|
||||
<string name="revanced_copy_video_url_title">Kuva video URL kopeerimise nupp</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Nupp on nähtav. Video URL-i kopeerimiseks puuduta. Ajakoodiga kopeerimiseks puuduta pikalt</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Nupud ei ole näha</string>
|
||||
<string name="revanced_copy_video_url_summary_on">Video URL-i kopeerimise nupp on nähtaval. Puudutage video URL-i kopeerimiseks. Puudutage pikalt, et kopeerida ajatempliga</string>
|
||||
<string name="revanced_copy_video_url_summary_off">Video URL-i kopeerimise nupp pole nähtaval</string>
|
||||
<string name="revanced_copy_video_url_timestamp_title">Näita video URL-i ajatempliga kopeerimise nuppu</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Nupp on nähtav. Ajakoodiga video URL-i kopeerimiseks puuduta. Ilma ajakoodita kopeerimiseks puuduta pikalt</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Nupud ei ole näha</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_on">Ajatempliga URL-i kopeerimise nupp on nähtaval. Puudutage video URL-i ajatempliga kopeerimiseks. Puudutage pikalt, et kopeerida ilma ajatemplita</string>
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">Ajatempliga URL-i kopeerimise nupp pole nähtaval</string>
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
<string name="revanced_remove_viewer_discretion_dialog_title">Eemalda vaataja arvamuse dialoog</string>
|
||||
@@ -533,7 +561,7 @@ See funktsioon on saadaval ainult vanemates seadmetes"</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">See ei mööda vanusepiirangust. See lihtsalt aktsepteerib seda automaatselt.</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
|
||||
<string name="revanced_disable_signin_to_tv_popup_title">Keela telerisse sisselogimise hüpikaken</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_title">Keela hüpikaken „Logi telerisse sisse”</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_summary_on">Telerisse sisselogimise hüpikaken on keelatud</string>
|
||||
<string name="revanced_disable_signin_to_tv_popup_summary_off">Telerisse sisselogimise hüpikaken on lubatud</string>
|
||||
</patch>
|
||||
@@ -665,7 +693,7 @@ Helitugevuse reguleerimiseks pühkige ekraani paremal küljel vertikaalselt"</st
|
||||
<string name="revanced_hide_download_button_summary_on">Laadi alla nupp on peidetud</string>
|
||||
<string name="revanced_hide_download_button_summary_off">Laadi alla nupp on nähtav</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. -->
|
||||
This button only shows on videos uploaded by the logged-in user. -->
|
||||
<string name="revanced_hide_hype_button_title">Peida Hype</string>
|
||||
<string name="revanced_hide_hype_button_summary_on">Hype nupp on peidetud</string>
|
||||
<string name="revanced_hide_hype_button_summary_off">Hype\'i nupp on nähtav</string>
|
||||
@@ -786,10 +814,11 @@ Kui selle sätte muutmine ei avalda mõju, proovige lülituda Inkognito režiimi
|
||||
<string name="revanced_hide_player_flyout_audio_track_title">Peida Helitraek</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_on">Helitraekide menüü on peidetud</string>
|
||||
<string name="revanced_hide_player_flyout_audio_track_summary_off">Helitraekide menüü on nähtav</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">"Heliraja menüü on peidetud
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
|
||||
'Android No SDK' must be kept untranslated. -->
|
||||
<string name="revanced_hide_player_flyout_audio_track_not_available">"Heliriba menüü on peidetud
|
||||
|
||||
Heliraja menüü nägemiseks muutke \"Video voogude võltsimine\" iPadOS-iks"</string>
|
||||
Heliriba menüü kuvamiseks muutke „Spoof video streams” väärtuseks „Android No SDK”"</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">Peida Vaata VR-is</string>
|
||||
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Vaata VR-is menüü on peidetud</string>
|
||||
@@ -865,13 +894,16 @@ Heliraja menüü nägemiseks muutke \"Video voogude võltsimine\" iPadOS-iks"</s
|
||||
<string name="revanced_hide_shorts_history_title">Peida Shortsid vaatamisaegadust</string>
|
||||
<string name="revanced_hide_shorts_history_summary_on">Peidetud vaatamise ajaloos</string>
|
||||
<string name="revanced_hide_shorts_history_summary_off">Näidatud vaatamisaegadus</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_title">Peida Osta Super Tänud nupp</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_title">Peida silt „Automaatselt dubleeritud”</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_summary_on">Automaatselt dubleeritud silt on peidetud</string>
|
||||
<string name="revanced_hide_shorts_auto_dubbed_label_summary_off">Automaatselt dubleeritud silt on nähtav</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_title">Peida nupp „Osta Super Tänud”</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_on">Osta Super Thanks nupp on peidetud</string>
|
||||
<string name="revanced_hide_shorts_super_thanks_button_summary_off">Osta Super Thanks nupp on nähtaval</string>
|
||||
<string name="revanced_hide_shorts_effect_button_title">Peida efekti nupp</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_on">Efekti nupp on peidetud</string>
|
||||
<string name="revanced_hide_shorts_effect_button_summary_off">Efekti nupp on nähtav</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">Peida Roheline ekraan nupp</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_title">Peida nupp „Roheline ekraan”</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_on">Rohelise ekraani nupp on peidetud</string>
|
||||
<string name="revanced_hide_shorts_green_screen_button_summary_off">Rohelise ekraani nupp on nähtav</string>
|
||||
<string name="revanced_hide_shorts_hashtag_button_title">Peida räsimärgi nupp</string>
|
||||
@@ -881,10 +913,13 @@ Heliraja menüü nägemiseks muutke \"Video voogude võltsimine\" iPadOS-iks"</s
|
||||
<string name="revanced_hide_shorts_join_button_title">Peida Liitu nupp</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_on">Liitumisnupp on peidetud</string>
|
||||
<string name="revanced_hide_shorts_join_button_summary_off">Liitumisnupp on nähtav</string>
|
||||
<string name="revanced_hide_shorts_live_preview_title">Peida reaalajas eelvaade</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_on">Otse eelvaade on peidetud</string>
|
||||
<string name="revanced_hide_shorts_live_preview_summary_off">Otse eelvaade on nähtav</string>
|
||||
<string name="revanced_hide_shorts_location_label_title">Peida asukoha silt</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_on">Asukoha silt on peidetud</string>
|
||||
<string name="revanced_hide_shorts_location_label_summary_off">Asukoha silt on nähtav</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">Peida uute postituste nupp</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_title">Peida nupp „Uued postitused”</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_on">Uute postituste nupp on peidetud</string>
|
||||
<string name="revanced_hide_shorts_new_posts_button_summary_off">Uute postituste nupp on nähtav</string>
|
||||
<string name="revanced_hide_shorts_paused_overlay_buttons_title">Peida peatatud ülekatte nupud</string>
|
||||
@@ -893,7 +928,7 @@ Heliraja menüü nägemiseks muutke \"Video voogude võltsimine\" iPadOS-iks"</s
|
||||
<string name="revanced_hide_shorts_preview_comment_title">Peida eelvaate kommentaar</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_on">Kommentaari eelvaade on peidetud</string>
|
||||
<string name="revanced_hide_shorts_preview_comment_summary_off">Kommentaari eelvaade on nähtav</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">Peida Salvesta muusika nupp</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_title">Peida nupp „Salvesta muusika”</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_on">Muusika salvestamise nupp on peidetud</string>
|
||||
<string name="revanced_hide_shorts_save_sound_button_summary_off">Muusika salvestamise nupp on nähtav</string>
|
||||
<string name="revanced_hide_shorts_search_suggestions_title">Peida otsingusoovitused</string>
|
||||
@@ -914,10 +949,10 @@ Heliraja menüü nägemiseks muutke \"Video voogude võltsimine\" iPadOS-iks"</s
|
||||
<string name="revanced_hide_shorts_upcoming_button_title">Peida Eelseisvad nupp</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_on">Eelseisva nuppu on peidetud</string>
|
||||
<string name="revanced_hide_shorts_upcoming_button_summary_off">Eelseisva nuppu on nähtav</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_title">Peida nupp \"Kasuta seda heli\"</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_title">Peida nupp „Kasuta seda heli”</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_on">Nupp \"Kasuta seda heli\" on peidetud</string>
|
||||
<string name="revanced_hide_shorts_use_sound_button_summary_off">Nupp \"Kasuta seda heli\" on nähtav</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_title">Peida kasuta seda malli nupp</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_title">Peida nupp „Kasuta seda malli”</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_on">Nupp \"Kasuta seda malli\" on peidetud</string>
|
||||
<string name="revanced_hide_shorts_use_template_button_summary_off">Kasuta seda malli nupp on nähtav</string>
|
||||
<string name="revanced_hide_shorts_like_fountain_title">Peida Meeldi nupu purskkaevu animatsioon</string>
|
||||
@@ -1560,13 +1595,13 @@ Selle lubamine võib avada kõrgema video kvaliteedi"</string>
|
||||
</patch>
|
||||
<patch id="video.speed.button.playbackSpeedButtonPatch">
|
||||
<string name="revanced_playback_speed_dialog_button_title">Kuva kiiruse dialoogi nupp</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Nupp on nähtaval. Puudutage ja hoidke all, et taastada taasesituse kiirus vaikeväärtusele</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Nuppi ei kuvata</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_on">Kiiruse dialoogi nupp on nähtaval. Puudutage pikalt, et taasesituskiirus vaikeseadeks lähtestada</string>
|
||||
<string name="revanced_playback_speed_dialog_button_summary_off">Kiiruse dialoogi nupp pole nähtaval</string>
|
||||
</patch>
|
||||
<patch id="video.quality.button.videoQualityDialogButtonPatch">
|
||||
<string name="revanced_video_quality_dialog_button_title">Näita video kvaliteedi nuppu</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">Nupp on nähtaval. Kvaliteedi lähtestamiseks vaikeseadeteks puudutage ja hoidke</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">Nuppu ei kuvata</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_on">Video kvaliteedi nupp on nähtaval. Kvaliteedi lähtestamiseks vaikeseadeteks puudutage ja hoidke</string>
|
||||
<string name="revanced_video_quality_dialog_button_summary_off">Video kvaliteedi nupp pole nähtaval</string>
|
||||
</patch>
|
||||
<patch id="video.speed.custom.customPlaybackSpeedPatch">
|
||||
<string name="revanced_custom_speed_menu_title">Kohandatud taasesituse kiiruse menüü</string>
|
||||
@@ -1663,16 +1698,30 @@ AV1-ga videotaasesitus võib hakitud olla või kaadreid vahele jätta."</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_on">Püsiv kordus on lubatud</string>
|
||||
<string name="revanced_music_play_permanent_repeat_summary_off">Püsiv kordus on keelatud</string>
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
<patch id="layout.buttons.hideButtons">
|
||||
<string name="revanced_music_hide_cast_button_title">Peida edastusnupp</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_on">Edastusnupp on peidetud</string>
|
||||
<string name="revanced_music_hide_cast_button_summary_off">Edastusnupp on nähtav</string>
|
||||
<string name="revanced_music_hide_history_button_title">Peida ajaloo nupp</string>
|
||||
<string name="revanced_music_hide_history_button_summary_on">Ajaloo nupp on peidetud</string>
|
||||
<string name="revanced_music_hide_history_button_summary_off">Ajaloo nupp on nähtaval</string>
|
||||
<string name="revanced_music_hide_notification_button_title">Peida teavituse nupp</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_on">Teavituse nupp on peidetud</string>
|
||||
<string name="revanced_music_hide_notification_button_summary_off">Teavituse nupp on nähtav</string>
|
||||
<string name="revanced_music_hide_search_button_title">Peida otsingunupp</string>
|
||||
<string name="revanced_music_hide_search_button_summary_on">Otsingunupp on peidetud</string>
|
||||
<string name="revanced_music_hide_search_button_summary_off">Otsingunupp on nähtav</string>
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
<string name="revanced_music_hide_category_bar_title">Peida kategooriariba</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_on">Kategooriariba on peidetud</string>
|
||||
<string name="revanced_music_hide_category_bar_summary_off">Kategooriariba on nähtaval</string>
|
||||
</patch>
|
||||
<patch id="layout.miniplayercolor.changeMiniplayerColor">
|
||||
<string name="revanced_music_change_miniplayer_color_title">Muuda minipleieri värvi</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_on">Minipleieri värv ühtib täisekraanipleieri omaga</string>
|
||||
<string name="revanced_music_change_miniplayer_color_summary_off">Minipleier kasutab vaikevärvi</string>
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<string name="revanced_music_navigation_bar_screen_title">Navigeerimisriba</string>
|
||||
<string name="revanced_music_navigation_bar_screen_summary">Peida või muuda navigeerimisriba nuppe</string>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright 2024 ReVanced. See https://github.com/ReVanced/revanced-branding -->
|
||||
<!--
|
||||
|
||||
All strings must have a unique path, even if the same string is declared in two different apps.
|
||||
@@ -64,9 +63,11 @@ Second \"item\" text"</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
This appears in the video player for certain videos. -->
|
||||
<!-- 'Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'For You' should be translated using the same localized wording YouTube displays. -->
|
||||
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Join' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Store' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Subscribe' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_upload_time_user_dialog_message -->
|
||||
<!-- Translations should lanaguge similar to revanced_hide_view_count_user_dialog_message -->
|
||||
@@ -110,7 +111,7 @@ Second \"item\" text"</string>
|
||||
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
|
||||
This button only shows on videos uploaded by the logged in user. -->
|
||||
This button only shows on videos uploaded by the logged-in user. -->
|
||||
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
|
||||
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
|
||||
@@ -137,7 +138,8 @@ Second \"item\" text"</string>
|
||||
<!-- 'Lock screen' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<!-- 'Listen with YouTube Music' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<!-- 'Audio track' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
|
||||
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'.
|
||||
'Android No SDK' must be kept untranslated. -->
|
||||
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
|
||||
</patch>
|
||||
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
|
||||
@@ -267,10 +269,12 @@ Second \"item\" text"</string>
|
||||
</patch>
|
||||
<patch id="interaction.permanentrepeat.permanentRepeatPatch">
|
||||
</patch>
|
||||
<patch id="layout.castbutton.hideCastButton">
|
||||
<patch id="layout.buttons.hideButtons">
|
||||
</patch>
|
||||
<patch id="layout.compactheader.hideCategoryBar">
|
||||
</patch>
|
||||
<patch id="layout.miniplayercolor.changeMiniplayerColor">
|
||||
</patch>
|
||||
<patch id="layout.navigationbar.navigationBarPatch">
|
||||
<!-- 'Home' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
<!-- 'Samples' should be translated using the same localized wording YouTube Music displays for the tab. -->
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user