mirror of
https://github.com/revanced/revanced-patches.git
synced 2025-12-17 06:32:26 +01:00
Compare commits
427 Commits
v2.140.1-d
...
v2.125.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
81c5c3870c | ||
|
|
30aeaf70d8 | ||
|
|
712423789e | ||
|
|
1ad2db1ca4 | ||
|
|
16b4e78d79 | ||
|
|
f57c555395 | ||
|
|
53f1f6fc96 | ||
|
|
b4b8f62c7b | ||
|
|
8b2703273a | ||
|
|
9e2a6eead1 | ||
|
|
5afd49a111 | ||
|
|
e79ad750d4 | ||
|
|
97ea238520 | ||
|
|
700ca5b543 | ||
|
|
b792be5b78 | ||
|
|
025b480175 | ||
|
|
e1b53b214f | ||
|
|
30939e5efe | ||
|
|
4d9c41488d | ||
|
|
2fffcde357 | ||
|
|
7af08e0ba7 | ||
|
|
228834fda8 | ||
|
|
7466aecc5b | ||
|
|
8ee36541b4 | ||
|
|
a4fd6603fe | ||
|
|
510cb8f590 | ||
|
|
c02ebd752c | ||
|
|
b4d7eca5fa | ||
|
|
c6125c071b | ||
|
|
478de297f9 | ||
|
|
ebc4a12cd7 | ||
|
|
b3c0291e70 | ||
|
|
c43588ee40 | ||
|
|
c74b5d4e47 | ||
|
|
91ae954210 | ||
|
|
65172cad4f | ||
|
|
c2122494bc | ||
|
|
6ed94935ca | ||
|
|
a934821fa7 | ||
|
|
f3785c4e47 | ||
|
|
67e0db5ac9 | ||
|
|
aaa820430b | ||
|
|
cf5ed1baea | ||
|
|
206341cec4 | ||
|
|
e8f4890edd | ||
|
|
9463f11dbf | ||
|
|
2b3e153b60 | ||
|
|
4b6bf69366 | ||
|
|
38e8e7898b | ||
|
|
3175e864af | ||
|
|
d320dd4e58 | ||
|
|
f5ae96defb | ||
|
|
bfe3876cea | ||
|
|
3ad2c42a53 | ||
|
|
0d22fc2d2f | ||
|
|
6e6dbd0c1a | ||
|
|
4272fade4f | ||
|
|
2095e34db8 | ||
|
|
1483a9d8bb | ||
|
|
ea113f01a3 | ||
|
|
d4658c7056 | ||
|
|
a615717580 | ||
|
|
04db353154 | ||
|
|
7cb0312a9d | ||
|
|
5357ff2e48 | ||
|
|
62083ead98 | ||
|
|
6f04169117 | ||
|
|
cc1b283cb7 | ||
|
|
4597a74e32 | ||
|
|
3734545ca6 | ||
|
|
60ef90c745 | ||
|
|
ece4ac1a9e | ||
|
|
d6e17f948d | ||
|
|
9ab3bd0313 | ||
|
|
0f10888aa3 | ||
|
|
63c0e5dc84 | ||
|
|
41bc0222b9 | ||
|
|
71e4cc964b | ||
|
|
afc9886ebd | ||
|
|
de06d96ea0 | ||
|
|
1139f77cb9 | ||
|
|
5a801b1562 | ||
|
|
7f301090b9 | ||
|
|
28a687c605 | ||
|
|
9b74a08ae1 | ||
|
|
1177c41373 | ||
|
|
be4de62c8f | ||
|
|
528156aec9 | ||
|
|
e377ecf208 | ||
|
|
fa147bd6cc | ||
|
|
88211e28ca | ||
|
|
a4e3a97937 | ||
|
|
02bd807a27 | ||
|
|
a06e81ae39 | ||
|
|
a87d0bc440 | ||
|
|
a2b64f63e0 | ||
|
|
80ab1592c3 | ||
|
|
e17f476c46 | ||
|
|
bfa9abe4cf | ||
|
|
0e0118eaa6 | ||
|
|
7b6439b200 | ||
|
|
65e3b21d64 | ||
|
|
d90bcc3135 | ||
|
|
eee47ee37c | ||
|
|
d340dd0e0d | ||
|
|
2193a0307e | ||
|
|
58dcd172f9 | ||
|
|
f818396243 | ||
|
|
3d124af58c | ||
|
|
df18d4a15a | ||
|
|
f08a2b6a90 | ||
|
|
fce8df8284 | ||
|
|
6ec99045d7 | ||
|
|
757784b038 | ||
|
|
7e06f23e29 | ||
|
|
26a43b1753 | ||
|
|
c8023f0b66 | ||
|
|
25f65c7c02 | ||
|
|
07d39f2b81 | ||
|
|
01e226d0c9 | ||
|
|
c98e10adf7 | ||
|
|
858b8a6fa8 | ||
|
|
53a66f64ab | ||
|
|
e2b9baed25 | ||
|
|
6bc24755d5 | ||
|
|
e871d655d2 | ||
|
|
1fa0d5da0e | ||
|
|
461e4bef09 | ||
|
|
9b1df03087 | ||
|
|
541a1a0e0a | ||
|
|
ce2f7042da | ||
|
|
ca3438b640 | ||
|
|
5121c3d45b | ||
|
|
666b241a53 | ||
|
|
b961bdf9d3 | ||
|
|
8aa1d58b76 | ||
|
|
570723bb59 | ||
|
|
7027929e30 | ||
|
|
f11f269c2f | ||
|
|
b0cd520b1a | ||
|
|
5c0fd8a6da | ||
|
|
e34d67f01e | ||
|
|
72703d6a56 | ||
|
|
b8c473796a | ||
|
|
25e86c5545 | ||
|
|
f1bf2c589b | ||
|
|
8b54559953 | ||
|
|
3761dbd7b2 | ||
|
|
8cf0343f29 | ||
|
|
f3753a22da | ||
|
|
c90312a925 | ||
|
|
c1d6aa3e49 | ||
|
|
c097370960 | ||
|
|
8ffa3b4746 | ||
|
|
1e6d0f7f62 | ||
|
|
e73c5dfebd | ||
|
|
32309ac007 | ||
|
|
079800aa1a | ||
|
|
06f0d05d19 | ||
|
|
c618a18851 | ||
|
|
1aac521af3 | ||
|
|
68fe1cc792 | ||
|
|
ba519d4b10 | ||
|
|
0351c8a50d | ||
|
|
d0c4ac5d8a | ||
|
|
daa55c59e2 | ||
|
|
4ad057b748 | ||
|
|
3eaefc7979 | ||
|
|
d81ce614a8 | ||
|
|
dcd711b341 | ||
|
|
96d500bc70 | ||
|
|
031b517245 | ||
|
|
79a0ea78cf | ||
|
|
2a54e624a0 | ||
|
|
e8cc0de11c | ||
|
|
d2209569e0 | ||
|
|
492cce9452 | ||
|
|
a17232da24 | ||
|
|
3ae7858adf | ||
|
|
1a6bb30789 | ||
|
|
2b10b834c7 | ||
|
|
35c86c6ff5 | ||
|
|
f4897e41a9 | ||
|
|
1eadafb098 | ||
|
|
7eb2a0b1bc | ||
|
|
a13e294978 | ||
|
|
a3548ed524 | ||
|
|
37cbbccec5 | ||
|
|
4e83400de4 | ||
|
|
e9e5f7b018 | ||
|
|
01be9fd79e | ||
|
|
e8faa5d944 | ||
|
|
9ac84ae720 | ||
|
|
52424bd6ab | ||
|
|
4c2d6466cc | ||
|
|
6bcae6ddeb | ||
|
|
65cee57493 | ||
|
|
5058fd3c43 | ||
|
|
b2affc5493 | ||
|
|
01a4349a3f | ||
|
|
3a25dc4fa2 | ||
|
|
7f1a918649 | ||
|
|
c26de68a27 | ||
|
|
9381508678 | ||
|
|
6d9c743618 | ||
|
|
6c9986290b | ||
|
|
adc7f670d1 | ||
|
|
fdc34023fc | ||
|
|
1e54bc457f | ||
|
|
9552100878 | ||
|
|
9166024b01 | ||
|
|
acc0f5018c | ||
|
|
05c043ada3 | ||
|
|
e30967bedd | ||
|
|
40d56f6e59 | ||
|
|
8bdfe8b74f | ||
|
|
c7c9440a60 | ||
|
|
4dcd487275 | ||
|
|
68eff6fd76 | ||
|
|
9b58c642f3 | ||
|
|
f9c16396d6 | ||
|
|
7c528856e1 | ||
|
|
29c18ad537 | ||
|
|
1654d4121b | ||
|
|
05c6c9e683 | ||
|
|
facb808e37 | ||
|
|
fe1427b88a | ||
|
|
634c6c3344 | ||
|
|
d438d9b866 | ||
|
|
e4139a112e | ||
|
|
559d7ad50c | ||
|
|
e1bbe59b40 | ||
|
|
2f932d697b | ||
|
|
237129d327 | ||
|
|
e4d7dc0aa9 | ||
|
|
fed9e4aafa | ||
|
|
85aa45d3f2 | ||
|
|
16df8d5ebc | ||
|
|
e89c3dad39 | ||
|
|
0f78f621c7 | ||
|
|
fe30cea22d | ||
|
|
5a30d8564c | ||
|
|
34222d9f2c | ||
|
|
f765af0929 | ||
|
|
298c33deb6 | ||
|
|
111db2a499 | ||
|
|
fa536957cc | ||
|
|
980deec6af | ||
|
|
658638bfad | ||
|
|
d5ee3b006d | ||
|
|
36ab007924 | ||
|
|
c46705f21a | ||
|
|
31ae362d18 | ||
|
|
b64f7bb400 | ||
|
|
64244ec476 | ||
|
|
f005314358 | ||
|
|
ae1aeffc62 | ||
|
|
56768caa4c | ||
|
|
19484ca2bc | ||
|
|
a8a98646e7 | ||
|
|
4927bc7451 | ||
|
|
66a5ca3fa8 | ||
|
|
6c0b9213fe | ||
|
|
70e21500cc | ||
|
|
784e97591a | ||
|
|
26ff3b338e | ||
|
|
28c864ae95 | ||
|
|
deb829c791 | ||
|
|
3c0f3ac968 | ||
|
|
2f6da4ed27 | ||
|
|
1b653c77c4 | ||
|
|
82ea2d3498 | ||
|
|
07dee5b87a | ||
|
|
7713516ed8 | ||
|
|
22fa09dc27 | ||
|
|
24d03387de | ||
|
|
04310901b7 | ||
|
|
3011c1fa45 | ||
|
|
6b83fe572a | ||
|
|
32d303f4b7 | ||
|
|
837c381e19 | ||
|
|
09ae60bb28 | ||
|
|
f9d180aad4 | ||
|
|
c40181140d | ||
|
|
c5e190a4d5 | ||
|
|
24e3f8b24e | ||
|
|
53b0485642 | ||
|
|
b362b560b6 | ||
|
|
b285bf96bd | ||
|
|
bfb47eb1c4 | ||
|
|
4e2d30228a | ||
|
|
dce28760f5 | ||
|
|
68ec6d2258 | ||
|
|
83498fd29c | ||
|
|
1ab35a1cfa | ||
|
|
e0b45237bb | ||
|
|
161a1b0af1 | ||
|
|
7618376388 | ||
|
|
2bdb857a9f | ||
|
|
be02acecfc | ||
|
|
9e873329c6 | ||
|
|
8a2b79ec16 | ||
|
|
9842f7ca0d | ||
|
|
8a913c6a2a | ||
|
|
84676ef33d | ||
|
|
eb985942f0 | ||
|
|
886018d6fb | ||
|
|
e7a17ccbc6 | ||
|
|
c707dc8769 | ||
|
|
1bb93e3598 | ||
|
|
e8848171ac | ||
|
|
249288c8a5 | ||
|
|
1791525b54 | ||
|
|
47fbe3cb25 | ||
|
|
89235ca7fa | ||
|
|
f63abb8eb3 | ||
|
|
b701f86fa1 | ||
|
|
3117ee7ba4 | ||
|
|
b8e084b9e1 | ||
|
|
bafeff84c2 | ||
|
|
8d193786cb | ||
|
|
d78d271967 | ||
|
|
59ea2bc636 | ||
|
|
e8b550f5aa | ||
|
|
e73c0e0a00 | ||
|
|
8c132be096 | ||
|
|
cb10ea1797 | ||
|
|
6d6a0375c8 | ||
|
|
8541ee0066 | ||
|
|
f7e0b46bc7 | ||
|
|
59af825d0a | ||
|
|
04ffffbdf2 | ||
|
|
ecc131fa4f | ||
|
|
a4f1d3558e | ||
|
|
4cbd58721d | ||
|
|
7cfe43e666 | ||
|
|
c93d7bc212 | ||
|
|
c28fd5cf20 | ||
|
|
069f754d51 | ||
|
|
cba04cf5a6 | ||
|
|
5e358c7319 | ||
|
|
ce69471684 | ||
|
|
a0981dda9d | ||
|
|
6073181ee1 | ||
|
|
522587321c | ||
|
|
b16748794e | ||
|
|
01e9a396d6 | ||
|
|
86fcd4d475 | ||
|
|
8bbc744114 | ||
|
|
d7a4ad76ea | ||
|
|
7e6ee73908 | ||
|
|
87954a1aaf | ||
|
|
e5a2ed0f70 | ||
|
|
2295aaebf4 | ||
|
|
a72bf150c2 | ||
|
|
0290cd3d36 | ||
|
|
e8d61e0c0e | ||
|
|
19769d80eb | ||
|
|
12c16d4644 | ||
|
|
75f4653c16 | ||
|
|
3286d26996 | ||
|
|
edbc36e90f | ||
|
|
7ad2be7f27 | ||
|
|
1702322671 | ||
|
|
9c9bfbd593 | ||
|
|
3df662a39c | ||
|
|
572c110a6e | ||
|
|
0be9f00915 | ||
|
|
0b6f643ff3 | ||
|
|
1989d53938 | ||
|
|
ac1acf10e6 | ||
|
|
0ad686da21 | ||
|
|
e734b2231a | ||
|
|
efe06d1cdc | ||
|
|
a0f9013fab | ||
|
|
93dcd542d5 | ||
|
|
3bac23f577 | ||
|
|
febcf60efb | ||
|
|
0d74a2dfa6 | ||
|
|
5b04fbb748 | ||
|
|
fbfa0ea3be | ||
|
|
4a30afe1e2 | ||
|
|
dd1df32036 | ||
|
|
a52d674cde | ||
|
|
67f6041bab | ||
|
|
6b3f8e46fd | ||
|
|
b95058f20a | ||
|
|
5b80ac1216 | ||
|
|
6fe1bfb856 | ||
|
|
589a7c01d1 | ||
|
|
4cd6d4459a | ||
|
|
89a92b2057 | ||
|
|
9f265a46cf | ||
|
|
a740690a08 | ||
|
|
d722a64d3c | ||
|
|
abe2674290 | ||
|
|
e5ec40f6fa | ||
|
|
96c43fc6f5 | ||
|
|
4e36d72c5c | ||
|
|
6197246e8e | ||
|
|
15a044cae1 | ||
|
|
ede60b994c | ||
|
|
c15cc431d6 | ||
|
|
fb006f87ab | ||
|
|
28206fd804 | ||
|
|
e425e75152 | ||
|
|
69d6c55942 | ||
|
|
f2b29351b4 | ||
|
|
db0b468e71 | ||
|
|
b75e759348 | ||
|
|
83b41322c4 | ||
|
|
8d8878aa08 | ||
|
|
d628674cdd | ||
|
|
23b182ccbb | ||
|
|
4a784ecd6e | ||
|
|
0165b53c6d | ||
|
|
17a0e16087 | ||
|
|
8cf91f39a5 | ||
|
|
9ef93f6618 | ||
|
|
8c3866f5e3 | ||
|
|
d115d649f4 | ||
|
|
ddc789395e | ||
|
|
e1200d4e3f | ||
|
|
8276340d2b | ||
|
|
8f32af4de1 | ||
|
|
a2bc9f0722 | ||
|
|
f94bb06996 |
19
.github/workflows/release.yml
vendored
19
.github/workflows/release.yml
vendored
@@ -12,7 +12,7 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
release:
|
release:
|
||||||
name: Release
|
name: Release
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-18.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
@@ -24,23 +24,16 @@ jobs:
|
|||||||
java-version: '17'
|
java-version: '17'
|
||||||
distribution: 'temurin'
|
distribution: 'temurin'
|
||||||
cache: gradle
|
cache: gradle
|
||||||
- name: Setup Node.js
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: 'latest'
|
|
||||||
cache: 'npm'
|
|
||||||
- name: Setup Android SDK
|
- name: Setup Android SDK
|
||||||
uses: amyu/setup-android@v2
|
uses: android-actions/setup-android@v2
|
||||||
with:
|
|
||||||
cache-disabled: true
|
|
||||||
sdk-version: '33'
|
|
||||||
build-tools-version: '33.0.1'
|
|
||||||
- name: Build with Gradle
|
- name: Build with Gradle
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: ./gradlew build generateMeta
|
run: ./gradlew build clean generateMeta
|
||||||
|
- name: Install Android build-tools
|
||||||
|
run: sdkmanager "build-tools;32.0.0"
|
||||||
- name: Setup semantic-release
|
- name: Setup semantic-release
|
||||||
run: npm install semantic-release @semantic-release/git @semantic-release/changelog gradle-semantic-release-plugin -D
|
run: npm install -g semantic-release @semantic-release/git @semantic-release/changelog gradle-semantic-release-plugin -D
|
||||||
- name: Release
|
- name: Release
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|||||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -118,6 +118,3 @@ gradle-app.setting
|
|||||||
|
|
||||||
# Ignore vscode config
|
# Ignore vscode config
|
||||||
.vscode/
|
.vscode/
|
||||||
|
|
||||||
# Dependency directories
|
|
||||||
node_modules/
|
|
||||||
133
CHANGELOG.md
133
CHANGELOG.md
@@ -1,136 +1,3 @@
|
|||||||
## [2.140.1-dev.1](https://github.com/revanced/revanced-patches/compare/v2.140.0...v2.140.1-dev.1) (2022-12-05)
|
|
||||||
|
|
||||||
# [2.140.0](https://github.com/revanced/revanced-patches/compare/v2.139.0...v2.140.0) (2022-12-05)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **music:** bump compatibility to v5.34.51 ([fc0c92e](https://github.com/revanced/revanced-patches/commit/fc0c92e2b68a2d93a02f4577aeb864955b1b5701))
|
|
||||||
|
|
||||||
# [2.139.0](https://github.com/revanced/revanced-patches/compare/v2.138.0...v2.139.0) (2022-12-05)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **youtube/return-youtube-dislike:** improve settings labels ([#1203](https://github.com/revanced/revanced-patches/issues/1203)) ([fb4a612](https://github.com/revanced/revanced-patches/commit/fb4a612592d82857b0e892a6f5d135dbd657c44d))
|
|
||||||
|
|
||||||
# [2.138.0](https://github.com/revanced/revanced-patches/compare/v2.137.0...v2.138.0) (2022-12-05)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **youtube/debugging:** print stack traces ([9cea382](https://github.com/revanced/revanced-patches/commit/9cea382750456434d0547351ee7d4013eac9de9c))
|
|
||||||
|
|
||||||
# [2.137.0](https://github.com/revanced/revanced-patches/compare/v2.136.0...v2.137.0) (2022-12-03)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **youtube/return-youtube-dislike:** show dislike as a percentage ([#1185](https://github.com/revanced/revanced-patches/issues/1185)) ([cbbab0b](https://github.com/revanced/revanced-patches/commit/cbbab0b4069534a2032258f9a09e9690fc68c291))
|
|
||||||
|
|
||||||
# [2.136.0](https://github.com/revanced/revanced-patches/compare/v2.135.0...v2.136.0) (2022-12-02)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* syntax error in compatiblity annotation ([#1181](https://github.com/revanced/revanced-patches/issues/1181)) ([0830c7e](https://github.com/revanced/revanced-patches/commit/0830c7ed1064757cf6354b426549275ece55408e))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **youtube:** drop support for compatibility of old versions ([7413aad](https://github.com/revanced/revanced-patches/commit/7413aad6d215f24a66ba9a33917c73dbdb0b7bc3))
|
|
||||||
|
|
||||||
# [2.135.0](https://github.com/revanced/revanced-patches/compare/v2.134.1...v2.135.0) (2022-12-02)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* sort README patch table by amount of patches per package ([40cb14e](https://github.com/revanced/revanced-patches/commit/40cb14e1838aee5b49b60094cd134ed7e1726c3f))
|
|
||||||
|
|
||||||
## [2.134.1](https://github.com/revanced/revanced-patches/compare/v2.134.0...v2.134.1) (2022-12-02)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **youtube:** swipe gesture on home screen ([9294084](https://github.com/revanced/revanced-patches/commit/929408406b53d8b0db69f092c3e191791b9fa8ee)), closes [#610](https://github.com/revanced/revanced-patches/issues/610)
|
|
||||||
|
|
||||||
# [2.134.0](https://github.com/revanced/revanced-patches/compare/v2.133.0...v2.134.0) (2022-12-02)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **anytracker:** syntax error in fingerprint ([#1165](https://github.com/revanced/revanced-patches/issues/1165)) ([46ad786](https://github.com/revanced/revanced-patches/commit/46ad786b1488814494080ca48cff27c361c47ca1))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **anytracker:** `unlock-premium` patch ([#1165](https://github.com/revanced/revanced-patches/issues/1165)) ([e7ed324](https://github.com/revanced/revanced-patches/commit/e7ed324bb5216037be0646a698e7e808fbf03e4e))
|
|
||||||
|
|
||||||
# [2.133.0](https://github.com/revanced/revanced-patches/compare/v2.132.0...v2.133.0) (2022-12-01)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **moneymanager:** `unlock-premium` patch ([#1173](https://github.com/revanced/revanced-patches/issues/1173)) ([438c1bc](https://github.com/revanced/revanced-patches/commit/438c1bca684c7d47bd5a401b4dccbaddef604650))
|
|
||||||
|
|
||||||
# [2.132.0](https://github.com/revanced/revanced-patches/compare/v2.131.0...v2.132.0) (2022-12-01)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **sleepasandroid:** `unlock-premium` patch ([#1172](https://github.com/revanced/revanced-patches/issues/1172)) ([580ddcd](https://github.com/revanced/revanced-patches/commit/580ddcdf1f8ef4a525f772630b3c085b706e4dc7))
|
|
||||||
* **twitch:** remove `block-embedded-ads` patch ([#1164](https://github.com/revanced/revanced-patches/issues/1164)) ([ecc1eae](https://github.com/revanced/revanced-patches/commit/ecc1eaef4daa7dfecb7913c378188b2b4685e610))
|
|
||||||
|
|
||||||
# [2.131.0](https://github.com/revanced/revanced-patches/compare/v2.130.0...v2.131.0) (2022-11-30)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **twitch/block-embedded-ads:** `block-embedded-ads` patch support ([#1160](https://github.com/revanced/revanced-patches/issues/1160)) ([641d33f](https://github.com/revanced/revanced-patches/commit/641d33fc7e213031124491bb468fb382267769aa))
|
|
||||||
|
|
||||||
# [2.130.0](https://github.com/revanced/revanced-patches/compare/v2.129.0...v2.130.0) (2022-11-29)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **youtube/enable-wide-searchbar:** bump compatibility to v17.45.36 ([66ce54c](https://github.com/revanced/revanced-patches/commit/66ce54c9921e6fbf5bbe52d73b0182352181f2b8))
|
|
||||||
|
|
||||||
# [2.129.0](https://github.com/revanced/revanced-patches/compare/v2.128.0...v2.129.0) (2022-11-28)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **youtube/hide-create-button:** bump compatibility to v17.45.36 ([751f604](https://github.com/revanced/revanced-patches/commit/751f6047ba1589593d881ad523727d00dfb2609b))
|
|
||||||
* **youtube/hide-shorts-button:** bump compatibility to v17.45.36 ([51bfa7a](https://github.com/revanced/revanced-patches/commit/51bfa7afd1720d958847a44ae636de722311a199))
|
|
||||||
|
|
||||||
# [2.128.0](https://github.com/revanced/revanced-patches/compare/v2.127.0...v2.128.0) (2022-11-28)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **twitch:** settings for patches ([#1142](https://github.com/revanced/revanced-patches/issues/1142)) ([ed56f94](https://github.com/revanced/revanced-patches/commit/ed56f94f12c3bee46ab370b2e3b7890d1181d53d))
|
|
||||||
|
|
||||||
# [2.127.0](https://github.com/revanced/revanced-patches/compare/v2.126.1...v2.127.0) (2022-11-28)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **twitch:** `settings` patch ([#1075](https://github.com/revanced/revanced-patches/issues/1075)) ([6e95b86](https://github.com/revanced/revanced-patches/commit/6e95b86e50cb09b60d82b456d4650218436ed154))
|
|
||||||
|
|
||||||
## [2.126.1](https://github.com/revanced/revanced-patches/compare/v2.126.0...v2.126.1) (2022-11-28)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **youtube/custom-video-speed:** fuzzy scan on fingerprint ([#1135](https://github.com/revanced/revanced-patches/issues/1135)) ([7b2cf56](https://github.com/revanced/revanced-patches/commit/7b2cf5698b85f7e2a901f6085c53d042660dc5c7))
|
|
||||||
|
|
||||||
# [2.126.0](https://github.com/revanced/revanced-patches/compare/v2.125.0...v2.126.0) (2022-11-28)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **backdrops:** `pro-unlock` patch ([#1121](https://github.com/revanced/revanced-patches/issues/1121)) ([76b5449](https://github.com/revanced/revanced-patches/commit/76b5449c61c97e8ad9f87fb7173c9819815744ba))
|
|
||||||
|
|
||||||
# [2.125.0](https://github.com/revanced/revanced-patches/compare/v2.124.0...v2.125.0) (2022-11-26)
|
# [2.125.0](https://github.com/revanced/revanced-patches/compare/v2.124.0...v2.125.0) (2022-11-26)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
337
README.md
337
README.md
@@ -4,180 +4,12 @@ The official Patch bundle provided by ReVanced and the community.
|
|||||||
|
|
||||||
> Looking for the JSON variant of this? [Click here](patches.json).
|
> Looking for the JSON variant of this? [Click here](patches.json).
|
||||||
|
|
||||||
### 📦 `com.google.android.youtube`
|
### 📦 `ginlemon.iconpackstudio`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|:--------:|:--------------:|:-----------------:|
|
||||||
| `always-autorepeat` | Always repeats the playing video again. | 17.45.36 |
|
| `unlock-pro` | Unlocks all pro features. | all |
|
||||||
| `client-spoof` | Spoofs the YouTube or Vanced client to prevent playback issues. | all |
|
|
||||||
| `comments` | Hides components related to comments. | 17.45.36 |
|
|
||||||
| `custom-branding` | Changes the YouTube launcher icon and name to your choice (defaults to ReVanced). | all |
|
|
||||||
| `custom-video-buffer` | Lets you change the buffers of videos. | 17.45.36 |
|
|
||||||
| `custom-video-speed` | Adds more video speed options. | 17.45.36 |
|
|
||||||
| `debugging` | Adds debugging options. | all |
|
|
||||||
| `disable-auto-captions` | Disable forced captions from being automatically enabled. | 17.45.36 |
|
|
||||||
| `disable-auto-player-popup-panels` | Disable automatic popup panels (playlist or live chat) on video player. | 17.45.36 |
|
|
||||||
| `disable-fullscreen-panels` | Disables video description and comments panel in fullscreen view. | 17.45.36 |
|
|
||||||
| `disable-startup-shorts-player` | Disables playing YouTube Shorts when launching YouTube. | 17.45.36 |
|
|
||||||
| `disable-zoom-haptics` | Disables haptics when zooming. | all |
|
|
||||||
| `downloads` | Enables downloading music and videos from YouTube. | 17.45.36 |
|
|
||||||
| `enable-wide-searchbar` | Replaces the search icon with a wide search bar. This will hide the YouTube logo when active. | 17.45.36 |
|
|
||||||
| `general-ads` | Removes general ads. | 17.45.36 |
|
|
||||||
| `hdr-auto-brightness` | Makes the brightness of HDR videos follow the system default. | 17.45.36 |
|
|
||||||
| `hide-album-cards` | Hides the album cards below the artist description. | 17.45.36 |
|
|
||||||
| `hide-artist-card` | Hides the artist card below the searchbar. | 17.45.36 |
|
|
||||||
| `hide-autoplay-button` | Hides the autoplay button in the video player. | 17.45.36 |
|
|
||||||
| `hide-captions-button` | Hides the captions button on video player. | 17.45.36 |
|
|
||||||
| `hide-cast-button` | Hides the cast button in the video player. | all |
|
|
||||||
| `hide-create-button` | Hides the create button in the navigation bar. | 17.45.36 |
|
|
||||||
| `hide-crowdfunding-box` | Hides the crowdfunding box between the player and video description. | 17.45.36 |
|
|
||||||
| `hide-email-address` | Hides the email address in the account switcher. | 17.45.36 |
|
|
||||||
| `hide-endscreen-cards` | Hides the suggested video cards at the end of a video in fullscreen. | 17.45.36 |
|
|
||||||
| `hide-info-cards` | Hides info-cards in videos. | 17.45.36 |
|
|
||||||
| `hide-my-mix` | Hides mix playlists. | 17.45.36 |
|
|
||||||
| `hide-shorts-button` | Hides the shorts button on the navigation bar. | 17.45.36 |
|
|
||||||
| `hide-time-and-seekbar` | Hides progress bar and time counter on videos. | 17.45.36 |
|
|
||||||
| `hide-video-buttons` | Adds options to hide action buttons under a video. | 17.45.36 |
|
|
||||||
| `hide-watch-in-vr` | Hides the Watch in VR option from the player settings flyout panel. | 17.45.36 |
|
|
||||||
| `hide-watermark` | Hides creator's watermarks on videos. | 17.45.36 |
|
|
||||||
| `microg-support` | Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG. | 17.45.36 |
|
|
||||||
| `minimized-playback` | Enables minimized and background playback. | 17.45.36 |
|
|
||||||
| `old-quality-layout` | Enables the original quality flyout menu. | 17.45.36 |
|
|
||||||
| `open-links-directly` | Bypasses redirect links and allows opening links directly. | 17.45.36 |
|
|
||||||
| `premium-heading` | Shows premium branding on the home screen. | all |
|
|
||||||
| `remember-video-quality` | Adds the ability to remember the video quality you chose in the video quality flyout. | 17.45.36 |
|
|
||||||
| `remove-player-button-background` | Removes the background from the video player buttons. | 17.45.36 |
|
|
||||||
| `return-youtube-dislike` | Shows the dislike count of videos using the Return YouTube Dislike API. | 17.45.36 |
|
|
||||||
| `seekbar-tapping` | Enables tap-to-seek on the seekbar of the video player. | 17.45.36 |
|
|
||||||
| `settings` | Adds settings for ReVanced to YouTube. | all |
|
|
||||||
| `sponsorblock` | Integrate SponsorBlock. | 17.45.36 |
|
|
||||||
| `swipe-controls` | Adds volume and brightness swipe controls. | 17.45.36 |
|
|
||||||
| `tablet-mini-player` | Enables the tablet mini player layout. | 17.45.36 |
|
|
||||||
| `theme` | Applies a custom theme. | all |
|
|
||||||
| `video-ads` | Removes ads in the video player. | 17.45.36 |
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### 📦 `com.google.android.apps.youtube.music`
|
|
||||||
<details>
|
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|
||||||
| `background-play` | Enables playing music in the background. | 5.34.51 |
|
|
||||||
| `codecs-unlock` | Adds more audio codec options. The new audio codecs usually result in better audio quality. | 5.34.51 |
|
|
||||||
| `compact-header` | Hides the music category bar at the top of the homepage. | 5.34.51 |
|
|
||||||
| `exclusive-audio-playback` | Enables the option to play music without video. | 5.34.51 |
|
|
||||||
| `hide-get-premium` | Removes all "Get Premium" evidences from the avatar menu. | 5.34.51 |
|
|
||||||
| `minimized-playback-music` | Enables minimized playback on Kids music. | 5.34.51 |
|
|
||||||
| `music-microg-support` | Allows YouTube Music ReVanced to run without root and under a different package name. | 5.34.51 |
|
|
||||||
| `music-video-ads` | Removes ads in the music player. | 5.34.51 |
|
|
||||||
| `tasteBuilder-remover` | Removes the "Tell us which artists you like" card from the home screen. | 5.34.51 |
|
|
||||||
| `upgrade-button-remover` | Removes the upgrade tab from the pivot bar. | 5.34.51 |
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### 📦 `com.ss.android.ugc.trill`
|
|
||||||
<details>
|
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|
||||||
| `disable-login-requirement` | Do not force login. | all |
|
|
||||||
| `downloads` | Removes download restrictions and changes the default path to download to. | all |
|
|
||||||
| `feed-filter` | Filters tiktok videos: removing ads, removing livestreams. | all |
|
|
||||||
| `fix-google-login` | Allows logging in with a Google account. | all |
|
|
||||||
| `hide-ads` | Removes ads from TikTok. | all |
|
|
||||||
| `playback-speed` | Enables the playback speed option for all videos. | all |
|
|
||||||
| `settings` | Adds settings for ReVanced to TikTok. | all |
|
|
||||||
| `show-seekbar` | Shows progress bar for all video. | all |
|
|
||||||
| `sim-spoof` | Spoofs the information which is retrieved from the sim-card. | all |
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### 📦 `com.zhiliaoapp.musically`
|
|
||||||
<details>
|
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|
||||||
| `disable-login-requirement` | Do not force login. | all |
|
|
||||||
| `downloads` | Removes download restrictions and changes the default path to download to. | all |
|
|
||||||
| `feed-filter` | Filters tiktok videos: removing ads, removing livestreams. | all |
|
|
||||||
| `fix-google-login` | Allows logging in with a Google account. | all |
|
|
||||||
| `hide-ads` | Removes ads from TikTok. | all |
|
|
||||||
| `playback-speed` | Enables the playback speed option for all videos. | all |
|
|
||||||
| `settings` | Adds settings for ReVanced to TikTok. | all |
|
|
||||||
| `show-seekbar` | Shows progress bar for all video. | all |
|
|
||||||
| `sim-spoof` | Spoofs the information which is retrieved from the sim-card. | all |
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### 📦 `tv.twitch.android.app`
|
|
||||||
<details>
|
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|
||||||
| `block-audio-ads` | Blocks audio ads in streams and VODs. | all |
|
|
||||||
| `block-video-ads` | Blocks video ads in streams and VODs. | all |
|
|
||||||
| `debug-mode` | Enables Twitch's internal debugging mode. | all |
|
|
||||||
| `settings` | Adds settings menu to Twitch. | all |
|
|
||||||
| `show-deleted-messages` | Shows deleted chat messages behind a clickable spoiler. | all |
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### 📦 `com.spotify.music`
|
|
||||||
<details>
|
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|
||||||
| `disable-capture-restriction` | Allows capturing Spotify's audio output while screen sharing or screen recording. | all |
|
|
||||||
| `hide-premium-navbar` | Removes the premium tab from the navbar. | all |
|
|
||||||
| `spotify-theme` | Applies a custom theme. | all |
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### 📦 `com.twitter.android`
|
|
||||||
<details>
|
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|
||||||
| `dynamic-color` | Replaces the default Twitter Blue with the users Material You palette. | all |
|
|
||||||
| `monochrome-icon` | Adds a monochrome icon. | all |
|
|
||||||
| `timeline-ads` | Removes ads from the Twitter timeline. | all |
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### 📦 `com.reddit.frontpage`
|
|
||||||
<details>
|
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|
||||||
| `general-reddit-ads` | Removes general ads from the Reddit frontpage and subreddits. | all |
|
|
||||||
| `premium-icon-reddit` | Unlocks premium Reddit app icons. | all |
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### 📦 `com.vanced.android.youtube`
|
|
||||||
<details>
|
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|
||||||
| `client-spoof` | Spoofs the YouTube or Vanced client to prevent playback issues. | all |
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### 📦 `com.myprog.hexedit`
|
|
||||||
<details>
|
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|
||||||
| `disable-ads` | Disables ads in HexEditor. | all |
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### 📦 `com.crunchyroll.crunchyroid`
|
|
||||||
<details>
|
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|
||||||
| `enable-downloads` | Enables downloads for Crunchyroll. | all |
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### 📦 `com.garzotto.pflotsh.ecmwf_a`
|
|
||||||
<details>
|
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|
||||||
| `pflotsh-ecmwf-subscription-unlock` | Unlocks all subscription features. | 3.5.4 |
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### 📦 `org.citra.citra_emu`
|
### 📦 `org.citra.citra_emu`
|
||||||
@@ -188,12 +20,46 @@ The official Patch bundle provided by ReVanced and the community.
|
|||||||
| `premium-unlock` | Unlocks premium functions. | all |
|
| `premium-unlock` | Unlocks premium functions. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### 📦 `com.backdrops.wallpapers`
|
### 📦 `com.ss.android.ugc.trill`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|:--------:|:--------------:|:-----------------:|
|
||||||
| `pro-unlock` | Unlocks pro-only functions. | all |
|
| `tiktok-ads` | Removes ads from TikTok. | all |
|
||||||
|
| `tiktok-speed` | Enables the playback speed option for all videos. | all |
|
||||||
|
| `tiktok-download` | Removes download restrictions and changes the default path to download to. | all |
|
||||||
|
| `tiktok-seekbar` | Show progress bar for all video. | all |
|
||||||
|
| `tiktok-settings` | Adds settings for ReVanced to TikTok. | all |
|
||||||
|
| `tiktok-force-login` | Do not force login. | all |
|
||||||
|
| `tiktok-web-login` | Allows logging in with a Google account. | all |
|
||||||
|
| `sim-spoof` | Spoofs the information which is retrieved from the sim-card. | all |
|
||||||
|
| `tiktok-feed-filter` | Filters tiktok videos: removing ads, removing livestreams. | all |
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### 📦 `com.zhiliaoapp.musically`
|
||||||
|
<details>
|
||||||
|
|
||||||
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|
|:--------:|:--------------:|:-----------------:|
|
||||||
|
| `tiktok-ads` | Removes ads from TikTok. | all |
|
||||||
|
| `tiktok-speed` | Enables the playback speed option for all videos. | all |
|
||||||
|
| `tiktok-download` | Removes download restrictions and changes the default path to download to. | all |
|
||||||
|
| `tiktok-seekbar` | Show progress bar for all video. | all |
|
||||||
|
| `tiktok-settings` | Adds settings for ReVanced to TikTok. | all |
|
||||||
|
| `tiktok-force-login` | Do not force login. | all |
|
||||||
|
| `tiktok-web-login` | Allows logging in with a Google account. | all |
|
||||||
|
| `sim-spoof` | Spoofs the information which is retrieved from the sim-card. | all |
|
||||||
|
| `tiktok-feed-filter` | Filters tiktok videos: removing ads, removing livestreams. | all |
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### 📦 `com.twitter.android`
|
||||||
|
<details>
|
||||||
|
|
||||||
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|
|:--------:|:--------------:|:-----------------:|
|
||||||
|
| `timeline-ads` | Removes ads from the Twitter timeline. | all |
|
||||||
|
| `dynamic-color` | Replaces the default Twitter Blue with the users Material You palette. | all |
|
||||||
|
| `monochrome-icon` | Adds a monochrome icon. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### 📦 `de.dwd.warnapp`
|
### 📦 `de.dwd.warnapp`
|
||||||
@@ -204,36 +70,100 @@ The official Patch bundle provided by ReVanced and the community.
|
|||||||
| `promo-code-unlock` | Disables the validation of promo code. Any code will work to unlock all features. | all |
|
| `promo-code-unlock` | Disables the validation of promo code. Any code will work to unlock all features. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### 📦 `com.shervinkoushan.anyTracker`
|
### 📦 `com.myprog.hexedit`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|:--------:|:--------------:|:-----------------:|
|
||||||
| `unlock-premium` | Unlocks all premium features. | all |
|
| `disable-ads` | Disables ads in HexEditor. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### 📦 `com.urbandroid.sleep`
|
### 📦 `com.spotify.music`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|:--------:|:--------------:|:-----------------:|
|
||||||
| `unlock-premium` | Unlocks all premium features. | all |
|
| `spotify-theme` | Applies a custom theme. | all |
|
||||||
|
| `disable-capture-restriction` | Allows capturing Spotify's audio output while screen sharing or screen recording. | all |
|
||||||
|
| `hide-premium-navbar` | Removes the premium tab from the navbar. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### 📦 `com.awedea.nyx`
|
### 📦 `com.google.android.youtube`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|:--------:|:--------------:|:-----------------:|
|
||||||
| `unlock-pro` | Unlocks all pro features. | all |
|
| `hide-crowdfunding-box` | Hides the crowdfunding box between the player and video description. | 17.45.36 |
|
||||||
|
| `hide-time-and-seekbar` | Hides progress bar and time counter on videos. | 17.45.36 |
|
||||||
|
| `hide-video-buttons` | Adds options to hide action buttons under a video. | 17.45.36 |
|
||||||
|
| `enable-wide-searchbar` | Replaces the search icon with a wide search bar. This will hide the YouTube logo when active. | 17.43.36 |
|
||||||
|
| `hide-captions-button` | Hides the captions button on video player. | 17.45.36 |
|
||||||
|
| `hide-shorts-button` | Hides the shorts button on the navigation bar. | 17.43.36 |
|
||||||
|
| `hide-create-button` | Hides the create button in the navigation bar. | 17.43.36 |
|
||||||
|
| `disable-startup-shorts-player` | Disables playing YouTube Shorts when launching YouTube. | 17.45.36 |
|
||||||
|
| `remove-player-button-background` | Removes the background from the video player buttons. | 17.45.36 |
|
||||||
|
| `hide-endscreen-cards` | Hides the suggested video cards at the end of a video in fullscreen. | 17.45.36 |
|
||||||
|
| `hide-cast-button` | Hides the cast button in the video player. | all |
|
||||||
|
| `sponsorblock` | Integrate SponsorBlock. | 17.45.36 |
|
||||||
|
| `hide-autoplay-button` | Hides the autoplay button in the video player. | 17.45.36 |
|
||||||
|
| `hide-watch-in-vr` | Hides the Watch in VR option from the player settings flyout panel. | 17.45.36 |
|
||||||
|
| `hide-album-cards` | Hides the album cards below the artist description. | 17.45.36 |
|
||||||
|
| `disable-auto-player-popup-panels` | Disable automatic popup panels (playlist or live chat) on video player. | 17.45.36 |
|
||||||
|
| `disable-auto-captions` | Disable forced captions from being automatically enabled. | 17.45.36 |
|
||||||
|
| `disable-fullscreen-panels` | Disables video description and comments panel in fullscreen view. | 17.45.36 |
|
||||||
|
| `hide-artist-card` | Hides the artist card below the searchbar. | 17.45.36 |
|
||||||
|
| `return-youtube-dislike` | Shows the dislike count of videos using the Return YouTube Dislike API. | 17.45.36 |
|
||||||
|
| `comments` | Hides components related to comments. | 17.45.36 |
|
||||||
|
| `theme` | Applies a custom theme. | all |
|
||||||
|
| `hide-email-address` | Hides the email address in the account switcher. | 17.45.36 |
|
||||||
|
| `tablet-mini-player` | Enables the tablet mini player layout. | 17.45.36 |
|
||||||
|
| `hide-watermark` | Hides creator's watermarks on videos. | 17.45.36 |
|
||||||
|
| `hide-info-cards` | Hides info-cards in videos. | 17.45.36 |
|
||||||
|
| `hide-my-mix` | Hides mix playlists. | 17.45.36 |
|
||||||
|
| `custom-branding` | Changes the YouTube launcher icon and name to your choice (defaults to ReVanced). | all |
|
||||||
|
| `premium-heading` | Shows premium branding on the home screen. | all |
|
||||||
|
| `old-quality-layout` | Enables the original quality flyout menu. | 17.45.36 |
|
||||||
|
| `general-ads` | Removes general ads. | 17.45.36 |
|
||||||
|
| `video-ads` | Removes ads in the video player. | 17.45.36 |
|
||||||
|
| `swipe-controls` | Adds volume and brightness swipe controls. | 17.45.36 |
|
||||||
|
| `downloads` | Enables downloading music and videos from YouTube. | 17.45.36 |
|
||||||
|
| `seekbar-tapping` | Enables tap-to-seek on the seekbar of the video player. | 17.45.36 |
|
||||||
|
| `disable-zoom-haptics` | Disables haptics when zooming. | all |
|
||||||
|
| `settings` | Adds settings for ReVanced to YouTube. | all |
|
||||||
|
| `open-links-directly` | Bypasses redirect links and allows opening links directly. | 17.45.36 |
|
||||||
|
| `microg-support` | Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG. | 17.45.36 |
|
||||||
|
| `custom-video-buffer` | Lets you change the buffers of videos. | 17.45.36 |
|
||||||
|
| `debugging` | Adds debugging options. | all |
|
||||||
|
| `client-spoof` | Spoofs the YouTube or Vanced client to prevent playback issues. | all |
|
||||||
|
| `always-autorepeat` | Always repeats the playing video again. | 17.45.36 |
|
||||||
|
| `minimized-playback` | Enables minimized and background playback. | 17.45.36 |
|
||||||
|
| `custom-video-speed` | Adds more video speed options. | 17.45.36 |
|
||||||
|
| `remember-video-quality` | Adds the ability to remember the video quality you chose in the video quality flyout. | 17.45.36 |
|
||||||
|
| `hdr-auto-brightness` | Makes the brightness of HDR videos follow the system default. | 17.45.36 |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### 📦 `co.windyapp.android`
|
### 📦 `com.vanced.android.youtube`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|:--------:|:--------------:|:-----------------:|
|
||||||
| `unlock-pro` | Unlocks all pro features. | all |
|
| `client-spoof` | Spoofs the YouTube or Vanced client to prevent playback issues. | all |
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### 📦 `com.ticktick.task`
|
||||||
|
<details>
|
||||||
|
|
||||||
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|
|:--------:|:--------------:|:-----------------:|
|
||||||
|
| `unlock-themes` | Unlocks all themes. | all |
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### 📦 `com.crunchyroll.crunchyroid`
|
||||||
|
<details>
|
||||||
|
|
||||||
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|
|:--------:|:--------------:|:-----------------:|
|
||||||
|
| `enable-downloads` | Enables downloads for Crunchyroll. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### 📦 `org.totschnig.myexpenses`
|
### 📦 `org.totschnig.myexpenses`
|
||||||
@@ -244,15 +174,18 @@ The official Patch bundle provided by ReVanced and the community.
|
|||||||
| `unlock-pro` | Unlocks all professional features. | all |
|
| `unlock-pro` | Unlocks all professional features. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### 📦 `com.ithebk.expensemanager`
|
### 📦 `tv.twitch.android.app`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|:--------:|:--------------:|:-----------------:|
|
||||||
| `unlock-pro` | Unlocks pro features. | all |
|
| `debug-mode` | Enables Twitch's internal debugging mode. | all |
|
||||||
|
| `block-audio-ads` | Blocks audio ads in streams and VODs. | all |
|
||||||
|
| `block-video-ads` | Blocks video ads in streams and VODs. | all |
|
||||||
|
| `show-deleted-messages` | Shows deleted chat messages behind a clickable spoiler. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### 📦 `ginlemon.iconpackstudio`
|
### 📦 `co.windyapp.android`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
@@ -260,12 +193,46 @@ The official Patch bundle provided by ReVanced and the community.
|
|||||||
| `unlock-pro` | Unlocks all pro features. | all |
|
| `unlock-pro` | Unlocks all pro features. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### 📦 `com.ticktick.task`
|
### 📦 `com.garzotto.pflotsh.ecmwf_a`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|:--------:|:--------------:|:-----------------:|
|
||||||
| `unlock-themes` | Unlocks all themes. | all |
|
| `pflotsh-ecmwf-subscription-unlock` | Unlocks all subscription features. | 3.5.4 |
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### 📦 `com.google.android.apps.youtube.music`
|
||||||
|
<details>
|
||||||
|
|
||||||
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|
|:--------:|:--------------:|:-----------------:|
|
||||||
|
| `tasteBuilder-remover` | Removes the "Tell us which artists you like" card from the home screen. | 5.31.50 |
|
||||||
|
| `hide-get-premium` | Removes all "Get Premium" evidences from the avatar menu. | 5.31.50 |
|
||||||
|
| `minimized-playback-music` | Enables minimized playback on Kids music. | 5.31.50 |
|
||||||
|
| `compact-header` | Hides the music category bar at the top of the homepage. | 5.31.50 |
|
||||||
|
| `upgrade-button-remover` | Removes the upgrade tab from the pivot bar. | 5.31.50 |
|
||||||
|
| `music-video-ads` | Removes ads in the music player. | 5.31.50 |
|
||||||
|
| `background-play` | Enables playing music in the background. | 5.31.50 |
|
||||||
|
| `exclusive-audio-playback` | Enables the option to play music without video. | 5.31.50 |
|
||||||
|
| `codecs-unlock` | Adds more audio codec options. The new audio codecs usually result in better audio quality. | 5.31.50 |
|
||||||
|
| `music-microg-support` | Allows YouTube Music ReVanced to run without root and under a different package name. | 5.31.50 |
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### 📦 `com.reddit.frontpage`
|
||||||
|
<details>
|
||||||
|
|
||||||
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|
|:--------:|:--------------:|:-----------------:|
|
||||||
|
| `premium-icon-reddit` | Unlocks premium Reddit app icons. | all |
|
||||||
|
| `general-reddit-ads` | Removes general ads from the Reddit frontpage and subreddits. | all |
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### 📦 `com.awedea.nyx`
|
||||||
|
<details>
|
||||||
|
|
||||||
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|
|:--------:|:--------------:|:-----------------:|
|
||||||
|
| `unlock-pro` | Unlocks all pro features. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ repositories {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation("app.revanced:revanced-patcher:6.3.0")
|
implementation("app.revanced:revanced-patcher:6.1.0")
|
||||||
implementation("app.revanced:multidexlib2:2.5.2.r2")
|
implementation("app.revanced:multidexlib2:2.5.2.r2")
|
||||||
// Required for meta
|
// Required for meta
|
||||||
implementation("com.google.code.gson:gson:2.10")
|
implementation("com.google.code.gson:gson:2.10")
|
||||||
@@ -33,7 +33,7 @@ tasks {
|
|||||||
|
|
||||||
doLast {
|
doLast {
|
||||||
val androidHome = System.getenv("ANDROID_HOME") ?: throw GradleException("ANDROID_HOME not found")
|
val androidHome = System.getenv("ANDROID_HOME") ?: throw GradleException("ANDROID_HOME not found")
|
||||||
val d8 = "${androidHome}/build-tools/33.0.1/d8"
|
val d8 = "${androidHome}/build-tools/32.0.0/d8"
|
||||||
val input = configurations.archives.get().allArtifacts.files.files.first().absolutePath
|
val input = configurations.archives.get().allArtifacts.files.files.first().absolutePath
|
||||||
val work = File("${buildDir}/libs")
|
val work = File("${buildDir}/libs")
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
kotlin.code.style = official
|
kotlin.code.style = official
|
||||||
version = 2.140.1-dev.1
|
version = 2.125.0
|
||||||
|
|||||||
6107
package-lock.json
generated
6107
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"devDependencies": {
|
|
||||||
"@semantic-release/changelog": "^6.0.2",
|
|
||||||
"@semantic-release/git": "^10.0.1",
|
|
||||||
"gradle-semantic-release-plugin": "^1.7.4",
|
|
||||||
"semantic-release": "^19.0.5"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
File diff suppressed because one or more lines are too long
@@ -1,23 +1,12 @@
|
|||||||
package app.revanced.extensions
|
package app.revanced.extensions
|
||||||
|
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.MethodFingerprintExtensions.name
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
|
||||||
import app.revanced.patcher.patch.PatchResultError
|
|
||||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableClass
|
import app.revanced.patcher.util.proxy.mutableTypes.MutableClass
|
||||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||||
import org.jf.dexlib2.iface.Method
|
import org.jf.dexlib2.iface.Method
|
||||||
import org.jf.dexlib2.util.MethodUtil
|
import org.jf.dexlib2.util.MethodUtil
|
||||||
import org.w3c.dom.Node
|
import org.w3c.dom.Node
|
||||||
|
|
||||||
// TODO: populate this to all patches
|
|
||||||
/**
|
|
||||||
* Convert a [MethodFingerprint] to a [PatchResultError].
|
|
||||||
*
|
|
||||||
* @return A [PatchResultError] for the [MethodFingerprint].
|
|
||||||
*/
|
|
||||||
fun MethodFingerprint.toErrorResult() = PatchResultError("Failed to resolve $name")
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find the [MutableMethod] from a given [Method] in a [MutableClass].
|
* Find the [MutableMethod] from a given [Method] in a [MutableClass].
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ fun generateText(bundle: Bundle) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (pkg in packages.entries.sortedByDescending { it.value.size }) {
|
for (pkg in packages) {
|
||||||
output.appendLine("### \uD83D\uDCE6 `${pkg.key}`")
|
output.appendLine("### \uD83D\uDCE6 `${pkg.key}`")
|
||||||
output.appendLine("<details>\n")
|
output.appendLine("<details>\n")
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
package app.revanced.patches.anytracker.misc.premium.annotations
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Compatibility
|
|
||||||
import app.revanced.patcher.annotation.Package
|
|
||||||
|
|
||||||
@Compatibility([Package("com.shervinkoushan.anyTracker")])
|
|
||||||
@Target(AnnotationTarget.CLASS)
|
|
||||||
@Retention(AnnotationRetention.RUNTIME)
|
|
||||||
internal annotation class UnlockPremiumCompatibility
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
package app.revanced.patches.anytracker.misc.premium.fingerprints
|
|
||||||
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
|
||||||
|
|
||||||
object IsPurchasedFlowFingerprint : MethodFingerprint(
|
|
||||||
"Landroidx/lifecycle/LiveData",
|
|
||||||
strings = listOf("premium_user", "sku"),
|
|
||||||
)
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
package app.revanced.patches.anytracker.misc.premium.patch
|
|
||||||
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Description
|
|
||||||
import app.revanced.patcher.annotation.Name
|
|
||||||
import app.revanced.patcher.annotation.Version
|
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
|
||||||
import app.revanced.patcher.extensions.addInstructions
|
|
||||||
import app.revanced.patcher.patch.BytecodePatch
|
|
||||||
import app.revanced.patcher.patch.PatchResult
|
|
||||||
import app.revanced.patcher.patch.PatchResultSuccess
|
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
|
||||||
import app.revanced.patches.anytracker.misc.premium.annotations.UnlockPremiumCompatibility
|
|
||||||
import app.revanced.patches.anytracker.misc.premium.fingerprints.IsPurchasedFlowFingerprint
|
|
||||||
|
|
||||||
@Patch
|
|
||||||
@Name("unlock-premium")
|
|
||||||
@Description("Unlocks all premium features.")
|
|
||||||
@UnlockPremiumCompatibility
|
|
||||||
@Version("0.0.1")
|
|
||||||
class UnlockPremiumPatch : BytecodePatch(
|
|
||||||
listOf(
|
|
||||||
IsPurchasedFlowFingerprint
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
override fun execute(context: BytecodeContext): PatchResult {
|
|
||||||
val method = IsPurchasedFlowFingerprint.result!!.mutableMethod
|
|
||||||
method.addInstructions(
|
|
||||||
0,
|
|
||||||
"""
|
|
||||||
const/4 v0, 0x1
|
|
||||||
invoke-static {v0}, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;
|
|
||||||
move-result-object v0
|
|
||||||
invoke-static {v0}, Lkotlinx/coroutines/flow/FlowKt;->flowOf(Ljava/lang/Object;)Lkotlinx/coroutines/flow/Flow;
|
|
||||||
move-result-object v1
|
|
||||||
const/4 v2, 0x0
|
|
||||||
const-wide/16 v3, 0x0
|
|
||||||
const/4 v5, 0x3
|
|
||||||
const/4 v6, 0x0
|
|
||||||
invoke-static/range {v1 .. v6}, Landroidx/lifecycle/FlowLiveDataConversions;->asLiveData${'$'}default(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;JILjava/lang/Object;)Landroidx/lifecycle/LiveData;
|
|
||||||
move-result-object v0
|
|
||||||
return-object v0
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
|
|
||||||
return PatchResultSuccess()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
package app.revanced.patches.backdrops.misc.pro.annotations
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Compatibility
|
|
||||||
import app.revanced.patcher.annotation.Package
|
|
||||||
|
|
||||||
@Compatibility([Package("com.backdrops.wallpapers")])
|
|
||||||
internal annotation class ProUnlockCompatibility
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
package app.revanced.patches.backdrops.misc.pro.fingerprints
|
|
||||||
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
|
||||||
import org.jf.dexlib2.Opcode
|
|
||||||
|
|
||||||
object ProUnlockFingerprint : MethodFingerprint(
|
|
||||||
opcodes = listOf(
|
|
||||||
Opcode.INVOKE_VIRTUAL,
|
|
||||||
Opcode.MOVE_RESULT_OBJECT,
|
|
||||||
Opcode.INVOKE_INTERFACE,
|
|
||||||
Opcode.MOVE_RESULT,
|
|
||||||
Opcode.IF_EQZ
|
|
||||||
),
|
|
||||||
customFingerprint = { it.definingClass == "Lcom/backdrops/wallpapers/data/local/DatabaseHandlerIAB;" && it.name == "lambda\$existPurchase\$0" }
|
|
||||||
)
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
package app.revanced.patches.backdrops.misc.pro.patch
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Description
|
|
||||||
import app.revanced.patcher.annotation.Name
|
|
||||||
import app.revanced.patcher.annotation.Version
|
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
|
||||||
import app.revanced.patcher.extensions.MethodFingerprintExtensions.name
|
|
||||||
import app.revanced.patcher.extensions.addInstructions
|
|
||||||
import app.revanced.patcher.extensions.instruction
|
|
||||||
import app.revanced.patcher.patch.BytecodePatch
|
|
||||||
import app.revanced.patcher.patch.PatchResult
|
|
||||||
import app.revanced.patcher.patch.PatchResultError
|
|
||||||
import app.revanced.patcher.patch.PatchResultSuccess
|
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
|
||||||
import app.revanced.patches.backdrops.misc.pro.annotations.ProUnlockCompatibility
|
|
||||||
import app.revanced.patches.backdrops.misc.pro.fingerprints.ProUnlockFingerprint
|
|
||||||
import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
|
|
||||||
|
|
||||||
@Patch
|
|
||||||
@Name("pro-unlock")
|
|
||||||
@Description("Unlocks pro-only functions.")
|
|
||||||
@ProUnlockCompatibility
|
|
||||||
@Version("0.0.1")
|
|
||||||
class ProUnlockPatch : BytecodePatch(
|
|
||||||
listOf(ProUnlockFingerprint)
|
|
||||||
) {
|
|
||||||
override fun execute(context: BytecodeContext): PatchResult {
|
|
||||||
val result = ProUnlockFingerprint.result ?: return PatchResultError("${ProUnlockFingerprint.name} not found")
|
|
||||||
|
|
||||||
val moveRegisterInstruction = result.mutableMethod.instruction(result.scanResult.patternScanResult!!.endIndex - 1)
|
|
||||||
val register = (moveRegisterInstruction as OneRegisterInstruction).registerA
|
|
||||||
|
|
||||||
result.mutableMethod.addInstructions(
|
|
||||||
result.scanResult.patternScanResult!!.endIndex,
|
|
||||||
"""
|
|
||||||
const/4 v$register, 0x1
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
|
|
||||||
return PatchResultSuccess()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
package app.revanced.patches.ecmwf.misc.subscription.annotations
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Compatibility
|
|
||||||
import app.revanced.patcher.annotation.Package
|
|
||||||
|
|
||||||
@Compatibility(
|
|
||||||
[Package(
|
|
||||||
"com.garzotto.pflotsh.ecmwf_a", arrayOf("3.5.4")
|
|
||||||
)]
|
|
||||||
)
|
|
||||||
@Target(AnnotationTarget.CLASS)
|
|
||||||
@Retention(AnnotationRetention.RUNTIME)
|
|
||||||
internal annotation class SubscriptionUnlockCompatibility
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
package app.revanced.patches.ecmwf.misc.subscription.fingerprints
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
|
||||||
|
|
||||||
object SubscriptionUnlockFingerprint : MethodFingerprint(
|
|
||||||
"Z",
|
|
||||||
customFingerprint = { methodDef ->
|
|
||||||
methodDef.definingClass.endsWith("MapsActivity;") && methodDef.name == "t0"
|
|
||||||
}
|
|
||||||
)
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
package app.revanced.patches.ecmwf.misc.subscription.patch
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Description
|
|
||||||
import app.revanced.patcher.annotation.Name
|
|
||||||
import app.revanced.patcher.annotation.Version
|
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
|
||||||
import app.revanced.patcher.extensions.addInstructions
|
|
||||||
import app.revanced.patcher.extensions.removeInstruction
|
|
||||||
import app.revanced.patcher.patch.BytecodePatch
|
|
||||||
import app.revanced.patcher.patch.PatchResult
|
|
||||||
import app.revanced.patcher.patch.PatchResultSuccess
|
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
|
||||||
import app.revanced.patches.ecmwf.misc.subscription.annotations.SubscriptionUnlockCompatibility
|
|
||||||
import app.revanced.patches.ecmwf.misc.subscription.fingerprints.SubscriptionUnlockFingerprint
|
|
||||||
|
|
||||||
@Patch
|
|
||||||
@Name("pflotsh-ecmwf-subscription-unlock")
|
|
||||||
@Description("Unlocks all subscription features.")
|
|
||||||
@SubscriptionUnlockCompatibility
|
|
||||||
@Version("0.0.1")
|
|
||||||
class SubscriptionUnlockPatch : BytecodePatch(
|
|
||||||
listOf(
|
|
||||||
SubscriptionUnlockFingerprint
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
override fun execute(context: BytecodeContext): PatchResult {
|
|
||||||
val result = SubscriptionUnlockFingerprint.result!!
|
|
||||||
val method = result.mutableMethod
|
|
||||||
|
|
||||||
val index = method.implementation!!.instructions.size
|
|
||||||
|
|
||||||
// remove R() at 10212
|
|
||||||
method.removeInstruction(index - 3)
|
|
||||||
// remove R() at 10206
|
|
||||||
method.removeInstruction(index - 5)
|
|
||||||
|
|
||||||
val insertIndex = index
|
|
||||||
|
|
||||||
method.addInstructions(
|
|
||||||
insertIndex - 1 - 2,
|
|
||||||
"""
|
|
||||||
const/4 p1, 0x1
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
return PatchResultSuccess()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
package app.revanced.patches.moneymanager.annotations
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Compatibility
|
|
||||||
import app.revanced.patcher.annotation.Package
|
|
||||||
|
|
||||||
@Compatibility([Package("com.ithebk.expensemanager")])
|
|
||||||
@Target(AnnotationTarget.CLASS)
|
|
||||||
@Retention(AnnotationRetention.RUNTIME)
|
|
||||||
internal annotation class UnlockProCompatibility
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package app.revanced.patches.moneymanager.fingerprints
|
|
||||||
|
|
||||||
import app.revanced.patcher.extensions.or
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
|
||||||
import org.jf.dexlib2.AccessFlags
|
|
||||||
import org.jf.dexlib2.Opcode
|
|
||||||
|
|
||||||
object UnlockProFingerprint : MethodFingerprint(
|
|
||||||
"Z",
|
|
||||||
AccessFlags.STATIC or AccessFlags.SYNTHETIC,
|
|
||||||
parameters = listOf("L"),
|
|
||||||
opcodes = listOf(
|
|
||||||
Opcode.IGET_BOOLEAN,
|
|
||||||
Opcode.RETURN
|
|
||||||
),
|
|
||||||
customFingerprint = { methodDef ->
|
|
||||||
methodDef.definingClass.endsWith("MainActivity;")
|
|
||||||
}
|
|
||||||
)
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
package app.revanced.patches.moneymanager.patch
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Description
|
|
||||||
import app.revanced.patcher.annotation.Name
|
|
||||||
import app.revanced.patcher.annotation.Version
|
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
|
||||||
import app.revanced.patcher.extensions.addInstructions
|
|
||||||
import app.revanced.patcher.patch.BytecodePatch
|
|
||||||
import app.revanced.patcher.patch.PatchResult
|
|
||||||
import app.revanced.patcher.patch.PatchResultSuccess
|
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
|
||||||
import app.revanced.patches.moneymanager.annotations.UnlockProCompatibility
|
|
||||||
import app.revanced.patches.moneymanager.fingerprints.UnlockProFingerprint
|
|
||||||
|
|
||||||
@Patch
|
|
||||||
@Name("unlock-pro")
|
|
||||||
@Description("Unlocks pro features.")
|
|
||||||
@UnlockProCompatibility
|
|
||||||
@Version("0.0.1")
|
|
||||||
class UnlockProPatch : BytecodePatch(
|
|
||||||
listOf(UnlockProFingerprint)
|
|
||||||
) {
|
|
||||||
override fun execute(context: BytecodeContext): PatchResult {
|
|
||||||
UnlockProFingerprint.result!!.mutableMethod.addInstructions(
|
|
||||||
0,
|
|
||||||
"""
|
|
||||||
const/4 v0, 0x1
|
|
||||||
|
|
||||||
return v0
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
return PatchResultSuccess()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -5,23 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.apps.youtube.music",
|
"com.google.android.apps.youtube.music", arrayOf("5.14.53", "5.16.51", "5.17.51", "5.21.52", "5.22.54", "5.23.50", "5.25.51", "5.25.52", "5.26.52", "5.27.51", "5.28.52", "5.29.52", "5.31.50")
|
||||||
arrayOf(
|
|
||||||
"5.14.53",
|
|
||||||
"5.16.51",
|
|
||||||
"5.17.51",
|
|
||||||
"5.21.52",
|
|
||||||
"5.22.54",
|
|
||||||
"5.23.50",
|
|
||||||
"5.25.51",
|
|
||||||
"5.25.52",
|
|
||||||
"5.26.52",
|
|
||||||
"5.27.51",
|
|
||||||
"5.28.52",
|
|
||||||
"5.29.52",
|
|
||||||
"5.31.50",
|
|
||||||
"5.34.51"
|
|
||||||
)
|
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -5,23 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.apps.youtube.music",
|
"com.google.android.apps.youtube.music", arrayOf("5.14.53", "5.16.51", "5.17.51", "5.21.52", "5.22.54", "5.23.50", "5.25.51", "5.25.52", "5.26.52", "5.27.51", "5.28.52", "5.29.52", "5.31.50")
|
||||||
arrayOf(
|
|
||||||
"5.14.53",
|
|
||||||
"5.16.51",
|
|
||||||
"5.17.51",
|
|
||||||
"5.21.52",
|
|
||||||
"5.22.54",
|
|
||||||
"5.23.50",
|
|
||||||
"5.25.51",
|
|
||||||
"5.25.52",
|
|
||||||
"5.26.52",
|
|
||||||
"5.27.51",
|
|
||||||
"5.28.52",
|
|
||||||
"5.29.52",
|
|
||||||
"5.31.50",
|
|
||||||
"5.34.51"
|
|
||||||
)
|
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -5,23 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.apps.youtube.music",
|
"com.google.android.apps.youtube.music", arrayOf("5.14.53", "5.16.51", "5.17.51", "5.21.52", "5.22.54", "5.23.50", "5.25.51", "5.25.52", "5.26.52", "5.27.51", "5.28.52", "5.29.52", "5.31.50")
|
||||||
arrayOf(
|
|
||||||
"5.14.53",
|
|
||||||
"5.16.51",
|
|
||||||
"5.17.51",
|
|
||||||
"5.21.52",
|
|
||||||
"5.22.54",
|
|
||||||
"5.23.50",
|
|
||||||
"5.25.51",
|
|
||||||
"5.25.52",
|
|
||||||
"5.26.52",
|
|
||||||
"5.27.51",
|
|
||||||
"5.28.52",
|
|
||||||
"5.29.52",
|
|
||||||
"5.31.50",
|
|
||||||
"5.34.51"
|
|
||||||
)
|
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -5,22 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.apps.youtube.music",
|
"com.google.android.apps.youtube.music", arrayOf("5.14.53", "5.16.51", "5.21.52", "5.22.54", "5.23.50", "5.25.51", "5.25.52", "5.26.52", "5.27.51", "5.28.52", "5.29.52", "5.31.50")
|
||||||
arrayOf(
|
|
||||||
"5.14.53",
|
|
||||||
"5.16.51",
|
|
||||||
"5.21.52",
|
|
||||||
"5.22.54",
|
|
||||||
"5.23.50",
|
|
||||||
"5.25.51",
|
|
||||||
"5.25.52",
|
|
||||||
"5.26.52",
|
|
||||||
"5.27.51",
|
|
||||||
"5.28.52",
|
|
||||||
"5.29.52",
|
|
||||||
"5.31.50",
|
|
||||||
"5.34.51"
|
|
||||||
)
|
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -5,23 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.apps.youtube.music",
|
"com.google.android.apps.youtube.music", arrayOf("5.14.53", "5.16.51", "5.17.51", "5.21.52", "5.22.54", "5.23.50", "5.25.51", "5.25.52", "5.26.52", "5.27.51", "5.28.52", "5.29.52", "5.31.50")
|
||||||
arrayOf(
|
|
||||||
"5.14.53",
|
|
||||||
"5.16.51",
|
|
||||||
"5.17.51",
|
|
||||||
"5.21.52",
|
|
||||||
"5.22.54",
|
|
||||||
"5.23.50",
|
|
||||||
"5.25.51",
|
|
||||||
"5.25.52",
|
|
||||||
"5.26.52",
|
|
||||||
"5.27.51",
|
|
||||||
"5.28.52",
|
|
||||||
"5.29.52",
|
|
||||||
"5.31.50",
|
|
||||||
"5.34.51"
|
|
||||||
)
|
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -5,23 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.apps.youtube.music",
|
"com.google.android.apps.youtube.music", arrayOf("5.14.53", "5.16.51", "5.17.51", "5.21.52", "5.22.54", "5.23.50", "5.25.51", "5.25.52", "5.26.52", "5.27.51", "5.28.52", "5.29.52", "5.31.50")
|
||||||
arrayOf(
|
|
||||||
"5.14.53",
|
|
||||||
"5.16.51",
|
|
||||||
"5.17.51",
|
|
||||||
"5.21.52",
|
|
||||||
"5.22.54",
|
|
||||||
"5.23.50",
|
|
||||||
"5.25.51",
|
|
||||||
"5.25.52",
|
|
||||||
"5.26.52",
|
|
||||||
"5.27.51",
|
|
||||||
"5.28.52",
|
|
||||||
"5.29.52",
|
|
||||||
"5.31.50",
|
|
||||||
"5.34.51"
|
|
||||||
)
|
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -10,20 +10,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
*/
|
*/
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.apps.youtube.music",
|
"com.google.android.apps.youtube.music", arrayOf("5.21.52", "5.22.54", "5.23.50", "5.25.51", "5.25.52", "5.26.52", "5.27.51", "5.28.52", "5.29.52", "5.31.50")
|
||||||
arrayOf(
|
|
||||||
"5.21.52",
|
|
||||||
"5.22.54",
|
|
||||||
"5.23.50",
|
|
||||||
"5.25.51",
|
|
||||||
"5.25.52",
|
|
||||||
"5.26.52",
|
|
||||||
"5.27.51",
|
|
||||||
"5.28.52",
|
|
||||||
"5.29.52",
|
|
||||||
"5.31.50",
|
|
||||||
"5.34.51"
|
|
||||||
)
|
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -5,23 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.apps.youtube.music",
|
"com.google.android.apps.youtube.music", arrayOf("5.14.53", "5.16.51", "5.17.51", "5.21.52", "5.22.54", "5.23.50", "5.25.51", "5.25.52", "5.26.52", "5.27.51", "5.28.52", "5.29.52", "5.31.50")
|
||||||
arrayOf(
|
|
||||||
"5.14.53",
|
|
||||||
"5.16.51",
|
|
||||||
"5.17.51",
|
|
||||||
"5.21.52",
|
|
||||||
"5.22.54",
|
|
||||||
"5.23.50",
|
|
||||||
"5.25.51",
|
|
||||||
"5.25.52",
|
|
||||||
"5.26.52",
|
|
||||||
"5.27.51",
|
|
||||||
"5.28.52",
|
|
||||||
"5.29.52",
|
|
||||||
"5.31.50",
|
|
||||||
"5.34.51"
|
|
||||||
)
|
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -5,23 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.apps.youtube.music",
|
"com.google.android.apps.youtube.music", arrayOf("5.14.53", "5.16.51", "5.17.51", "5.21.52", "5.22.54", "5.23.50", "5.25.51", "5.25.52", "5.26.52", "5.27.51", "5.28.52", "5.29.52", "5.31.50")
|
||||||
arrayOf(
|
|
||||||
"5.14.53",
|
|
||||||
"5.16.51",
|
|
||||||
"5.17.51",
|
|
||||||
"5.21.52",
|
|
||||||
"5.22.54",
|
|
||||||
"5.23.50",
|
|
||||||
"5.25.51",
|
|
||||||
"5.25.52",
|
|
||||||
"5.26.52",
|
|
||||||
"5.27.51",
|
|
||||||
"5.28.52",
|
|
||||||
"5.29.52",
|
|
||||||
"5.31.50",
|
|
||||||
"5.34.51"
|
|
||||||
)
|
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -5,23 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.apps.youtube.music",
|
"com.google.android.apps.youtube.music", arrayOf("5.14.53", "5.16.51", "5.17.51", "5.21.52", "5.22.54", "5.23.50", "5.25.51", "5.25.52", "5.26.52", "5.27.51", "5.28.52", "5.29.52", "5.31.50")
|
||||||
arrayOf(
|
|
||||||
"5.14.53",
|
|
||||||
"5.16.51",
|
|
||||||
"5.17.51",
|
|
||||||
"5.21.52",
|
|
||||||
"5.22.54",
|
|
||||||
"5.23.50",
|
|
||||||
"5.25.51",
|
|
||||||
"5.25.52",
|
|
||||||
"5.26.52",
|
|
||||||
"5.27.51",
|
|
||||||
"5.28.52",
|
|
||||||
"5.29.52",
|
|
||||||
"5.31.50",
|
|
||||||
"5.34.51"
|
|
||||||
)
|
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.shared.settings.preference
|
package app.revanced.patches.shared.settings
|
||||||
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
import app.revanced.patches.shared.settings.impl.StringResource
|
||||||
import org.w3c.dom.Document
|
import org.w3c.dom.Document
|
||||||
import org.w3c.dom.Element
|
import org.w3c.dom.Element
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package app.revanced.patches.shared.settings.preference
|
package app.revanced.patches.shared.settings
|
||||||
|
|
||||||
import org.w3c.dom.Document
|
import org.w3c.dom.Document
|
||||||
import org.w3c.dom.Element
|
import org.w3c.dom.Element
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.shared.settings.preference
|
package app.revanced.patches.shared.settings
|
||||||
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
import app.revanced.patches.shared.settings.impl.StringResource
|
||||||
import org.w3c.dom.Element
|
import org.w3c.dom.Element
|
||||||
import org.w3c.dom.Node
|
import org.w3c.dom.Node
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package app.revanced.patches.shared.settings.preference
|
package app.revanced.patches.shared.settings
|
||||||
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
import app.revanced.patches.shared.settings.impl.StringResource
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Preference
|
* Preference
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package app.revanced.patches.shared.settings.preference
|
package app.revanced.patches.shared.settings
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resource
|
* Resource
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package app.revanced.patches.shared.settings.preference
|
package app.revanced.patches.shared.settings
|
||||||
|
|
||||||
enum class SummaryType(val type: String) {
|
enum class SummaryType(val type: String) {
|
||||||
DEFAULT("summary"), ON("summaryOn"), OFF("summaryOff")
|
DEFAULT("summary"), ON("summaryOn"), OFF("summaryOff")
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package app.revanced.patches.shared.settings.preference.impl
|
package app.revanced.patches.shared.settings.impl
|
||||||
|
|
||||||
import app.revanced.patches.shared.settings.preference.BaseResource
|
import app.revanced.patches.shared.settings.BaseResource
|
||||||
import app.revanced.patches.shared.settings.preference.IResource
|
import app.revanced.patches.shared.settings.IResource
|
||||||
import org.w3c.dom.Document
|
import org.w3c.dom.Document
|
||||||
import org.w3c.dom.Element
|
import org.w3c.dom.Element
|
||||||
|
|
||||||
@@ -19,10 +19,8 @@ internal data class ArrayResource(
|
|||||||
|
|
||||||
override fun serialize(ownerDocument: Document, resourceCallback: ((IResource) -> Unit)?): Element {
|
override fun serialize(ownerDocument: Document, resourceCallback: ((IResource) -> Unit)?): Element {
|
||||||
return super.serialize(ownerDocument, resourceCallback).apply {
|
return super.serialize(ownerDocument, resourceCallback).apply {
|
||||||
setAttribute("name", name)
|
|
||||||
|
|
||||||
items.forEach { item ->
|
items.forEach { item ->
|
||||||
resourceCallback?.invoke(item)
|
setAttribute("name", item.also { resourceCallback?.invoke(it) }.name)
|
||||||
|
|
||||||
this.appendChild(ownerDocument.createElement("item").also { itemNode ->
|
this.appendChild(ownerDocument.createElement("item").also { itemNode ->
|
||||||
itemNode.textContent = item.value
|
itemNode.textContent = item.value
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package app.revanced.patches.shared.settings.preference.impl
|
package app.revanced.patches.shared.settings.impl
|
||||||
|
|
||||||
enum class InputType(val type: String) {
|
enum class InputType(val type: String) {
|
||||||
STRING("text"),
|
STRING("text"),
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
package app.revanced.patches.shared.settings.preference.impl
|
package app.revanced.patches.shared.settings.impl
|
||||||
|
|
||||||
import app.revanced.patches.shared.settings.preference.BasePreference
|
import app.revanced.patches.shared.settings.BasePreference
|
||||||
import app.revanced.patches.shared.settings.preference.IResource
|
import app.revanced.patches.shared.settings.IResource
|
||||||
import app.revanced.patches.shared.settings.preference.addDefault
|
import app.revanced.patches.shared.settings.addDefault
|
||||||
import app.revanced.patches.shared.settings.preference.addSummary
|
import app.revanced.patches.shared.settings.addSummary
|
||||||
import org.w3c.dom.Document
|
import org.w3c.dom.Document
|
||||||
import org.w3c.dom.Element
|
import org.w3c.dom.Element
|
||||||
|
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package app.revanced.patches.shared.settings.preference.impl
|
package app.revanced.patches.shared.settings.impl
|
||||||
|
|
||||||
import app.revanced.patches.shared.settings.preference.BasePreference
|
import app.revanced.patches.shared.settings.BasePreference
|
||||||
import app.revanced.patches.shared.settings.preference.IResource
|
import app.revanced.patches.shared.settings.IResource
|
||||||
import app.revanced.patches.shared.settings.preference.addSummary
|
import app.revanced.patches.shared.settings.addSummary
|
||||||
import org.w3c.dom.Document
|
import org.w3c.dom.Document
|
||||||
import org.w3c.dom.Element
|
import org.w3c.dom.Element
|
||||||
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package app.revanced.patches.shared.settings.preference.impl
|
package app.revanced.patches.shared.settings.impl
|
||||||
|
|
||||||
import app.revanced.patches.shared.settings.preference.BasePreference
|
import app.revanced.patches.shared.settings.BasePreference
|
||||||
import app.revanced.patches.shared.settings.preference.IResource
|
import app.revanced.patches.shared.settings.IResource
|
||||||
import org.w3c.dom.Document
|
import org.w3c.dom.Document
|
||||||
import org.w3c.dom.Element
|
import org.w3c.dom.Element
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@ import org.w3c.dom.Element
|
|||||||
internal open class PreferenceCategory(
|
internal open class PreferenceCategory(
|
||||||
key: String,
|
key: String,
|
||||||
title: StringResource,
|
title: StringResource,
|
||||||
var preferences: List<BasePreference>
|
val preferences: List<BasePreference>
|
||||||
) : BasePreference(key, title) {
|
) : BasePreference(key, title) {
|
||||||
override val tag: String = "PreferenceCategory"
|
override val tag: String = "PreferenceCategory"
|
||||||
|
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package app.revanced.patches.shared.settings.preference.impl
|
package app.revanced.patches.shared.settings.impl
|
||||||
|
|
||||||
import app.revanced.patches.shared.settings.preference.BasePreference
|
import app.revanced.patches.shared.settings.BasePreference
|
||||||
import app.revanced.patches.shared.settings.preference.IResource
|
import app.revanced.patches.shared.settings.IResource
|
||||||
import app.revanced.patches.shared.settings.preference.addSummary
|
import app.revanced.patches.shared.settings.addSummary
|
||||||
import org.w3c.dom.Document
|
import org.w3c.dom.Document
|
||||||
import org.w3c.dom.Element
|
import org.w3c.dom.Element
|
||||||
|
|
||||||
@@ -17,7 +17,7 @@ import org.w3c.dom.Element
|
|||||||
internal open class PreferenceScreen(
|
internal open class PreferenceScreen(
|
||||||
key: String,
|
key: String,
|
||||||
title: StringResource,
|
title: StringResource,
|
||||||
var preferences: List<BasePreference>,
|
val preferences: List<BasePreference>,
|
||||||
val summary: StringResource? = null
|
val summary: StringResource? = null
|
||||||
) : BasePreference(key, title) {
|
) : BasePreference(key, title) {
|
||||||
override val tag: String = "PreferenceScreen"
|
override val tag: String = "PreferenceScreen"
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package app.revanced.patches.shared.settings.preference.impl
|
package app.revanced.patches.shared.settings.impl
|
||||||
|
|
||||||
import app.revanced.patches.shared.settings.preference.BaseResource
|
import app.revanced.patches.shared.settings.BaseResource
|
||||||
import app.revanced.patches.shared.settings.preference.IResource
|
import app.revanced.patches.shared.settings.IResource
|
||||||
import org.w3c.dom.Document
|
import org.w3c.dom.Document
|
||||||
import org.w3c.dom.Element
|
import org.w3c.dom.Element
|
||||||
|
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
package app.revanced.patches.shared.settings.preference.impl
|
package app.revanced.patches.shared.settings.impl
|
||||||
|
|
||||||
import app.revanced.patches.shared.settings.preference.BasePreference
|
import app.revanced.patches.shared.settings.*
|
||||||
import app.revanced.patches.shared.settings.preference.IResource
|
import app.revanced.patches.shared.settings.BasePreference
|
||||||
import app.revanced.patches.shared.settings.preference.addDefault
|
import app.revanced.patches.shared.settings.IResource
|
||||||
import app.revanced.patches.shared.settings.preference.addSummary
|
import app.revanced.patches.shared.settings.addDefault
|
||||||
import app.revanced.patches.shared.settings.preference.SummaryType
|
import app.revanced.patches.shared.settings.addSummary
|
||||||
import org.w3c.dom.Document
|
import org.w3c.dom.Document
|
||||||
import org.w3c.dom.Element
|
import org.w3c.dom.Element
|
||||||
|
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
package app.revanced.patches.shared.settings.preference.impl
|
package app.revanced.patches.shared.settings.impl
|
||||||
|
|
||||||
import app.revanced.patches.shared.settings.preference.BasePreference
|
import app.revanced.patches.shared.settings.BasePreference
|
||||||
import app.revanced.patches.shared.settings.preference.IResource
|
import app.revanced.patches.shared.settings.IResource
|
||||||
import app.revanced.patches.shared.settings.preference.addDefault
|
import app.revanced.patches.shared.settings.addDefault
|
||||||
import app.revanced.patches.shared.settings.preference.addSummary
|
import app.revanced.patches.shared.settings.addSummary
|
||||||
import org.w3c.dom.Document
|
import org.w3c.dom.Document
|
||||||
import org.w3c.dom.Element
|
import org.w3c.dom.Element
|
||||||
|
|
||||||
@@ -1,135 +0,0 @@
|
|||||||
package app.revanced.patches.shared.settings.resource.patch
|
|
||||||
|
|
||||||
import app.revanced.patcher.data.DomFileEditor
|
|
||||||
import app.revanced.patcher.data.ResourceContext
|
|
||||||
import app.revanced.patcher.patch.PatchResult
|
|
||||||
import app.revanced.patcher.patch.PatchResultSuccess
|
|
||||||
import app.revanced.patcher.patch.ResourcePatch
|
|
||||||
import app.revanced.patches.shared.settings.preference.BasePreference
|
|
||||||
import app.revanced.patches.shared.settings.preference.IResource
|
|
||||||
import app.revanced.patches.shared.settings.preference.addPreference
|
|
||||||
import app.revanced.patches.shared.settings.preference.addResource
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.ArrayResource
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
|
||||||
import app.revanced.util.resources.ResourceUtils
|
|
||||||
import app.revanced.util.resources.ResourceUtils.copyResources
|
|
||||||
import org.w3c.dom.Node
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Abstract settings resource patch
|
|
||||||
*
|
|
||||||
* @param preferenceFileName Name of the settings preference xml file
|
|
||||||
* @param sourceDirectory Source directory to copy the preference template from
|
|
||||||
*/
|
|
||||||
abstract class AbstractSettingsResourcePatch(
|
|
||||||
private val preferenceFileName: String,
|
|
||||||
private val sourceDirectory: String,
|
|
||||||
) : ResourcePatch {
|
|
||||||
override fun execute(context: ResourceContext): PatchResult {
|
|
||||||
/*
|
|
||||||
* used for self-restart
|
|
||||||
*/
|
|
||||||
context.xmlEditor["AndroidManifest.xml"].use { editor ->
|
|
||||||
editor.file.getElementsByTagName("manifest").item(0).also {
|
|
||||||
it.appendChild(it.ownerDocument.createElement("uses-permission").also { element ->
|
|
||||||
element.setAttribute("android:name", "android.permission.SCHEDULE_EXACT_ALARM")
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* copy preference template from source dir */
|
|
||||||
context.copyResources(
|
|
||||||
sourceDirectory,
|
|
||||||
ResourceUtils.ResourceGroup(
|
|
||||||
"xml", "$preferenceFileName.xml"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
/* prepare xml editors */
|
|
||||||
stringsEditor = context.xmlEditor["res/values/strings.xml"]
|
|
||||||
arraysEditor = context.xmlEditor["res/values/arrays.xml"]
|
|
||||||
revancedPreferencesEditor = context.xmlEditor["res/xml/$preferenceFileName.xml"]
|
|
||||||
|
|
||||||
return PatchResultSuccess()
|
|
||||||
}
|
|
||||||
|
|
||||||
internal companion object {
|
|
||||||
private var revancedPreferenceNode: Node? = null
|
|
||||||
private var stringsNode: Node? = null
|
|
||||||
private var arraysNode: Node? = null
|
|
||||||
|
|
||||||
private var strings = mutableListOf<StringResource>()
|
|
||||||
|
|
||||||
private var revancedPreferencesEditor: DomFileEditor? = null
|
|
||||||
set(value) {
|
|
||||||
field = value
|
|
||||||
revancedPreferenceNode = value.getNode("PreferenceScreen")
|
|
||||||
}
|
|
||||||
private var stringsEditor: DomFileEditor? = null
|
|
||||||
set(value) {
|
|
||||||
field = value
|
|
||||||
stringsNode = value.getNode("resources")
|
|
||||||
}
|
|
||||||
private var arraysEditor: DomFileEditor? = null
|
|
||||||
set(value) {
|
|
||||||
field = value
|
|
||||||
arraysNode = value.getNode("resources")
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a new string to the resources.
|
|
||||||
*
|
|
||||||
* @param identifier The key of the string.
|
|
||||||
* @param value The value of the string.
|
|
||||||
* @throws IllegalArgumentException if the string already exists.
|
|
||||||
*/
|
|
||||||
fun addString(identifier: String, value: String, formatted: Boolean) =
|
|
||||||
StringResource(identifier, value, formatted).include()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add an array to the resources.
|
|
||||||
*
|
|
||||||
* @param arrayResource The array resource to add.
|
|
||||||
*/
|
|
||||||
fun addArray(arrayResource: ArrayResource) =
|
|
||||||
arraysNode!!.addResource(arrayResource)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a preference to the settings.
|
|
||||||
*
|
|
||||||
* @param preference The preference to add.
|
|
||||||
*/
|
|
||||||
fun addPreference(preference: BasePreference) =
|
|
||||||
revancedPreferenceNode!!.addPreference(preference) { it.include() }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a new resource to the resources.
|
|
||||||
*
|
|
||||||
* @throws IllegalArgumentException if the resource already exists.
|
|
||||||
*/
|
|
||||||
internal fun IResource.include() {
|
|
||||||
when (this) {
|
|
||||||
is StringResource -> {
|
|
||||||
if (strings.any { it.name == name }) return
|
|
||||||
strings.add(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
is ArrayResource -> addArray(this)
|
|
||||||
else -> throw NotImplementedError("Unsupported resource type")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal fun DomFileEditor?.getNode(tagName: String) = this!!.file.getElementsByTagName(tagName).item(0)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun close() {
|
|
||||||
// merge all strings, skip duplicates
|
|
||||||
strings.forEach {
|
|
||||||
stringsNode!!.addResource(it)
|
|
||||||
}
|
|
||||||
|
|
||||||
revancedPreferencesEditor?.close()
|
|
||||||
stringsEditor?.close()
|
|
||||||
arraysEditor?.close()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,89 +0,0 @@
|
|||||||
package app.revanced.patches.shared.settings.util
|
|
||||||
|
|
||||||
import app.revanced.patches.shared.settings.preference.BasePreference
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.PreferenceCategory
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.PreferenceScreen
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
|
||||||
import java.io.Closeable
|
|
||||||
|
|
||||||
internal abstract class AbstractPreferenceScreen(
|
|
||||||
private val root: MutableList<Screen> = mutableListOf()
|
|
||||||
) : Closeable {
|
|
||||||
|
|
||||||
override fun close() {
|
|
||||||
if (root.isEmpty())
|
|
||||||
return
|
|
||||||
|
|
||||||
for (preference in root.sortedBy { it.title }) {
|
|
||||||
commit(preference.transform())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finalize and insert root preference into resource patch
|
|
||||||
*/
|
|
||||||
abstract fun commit(screen: PreferenceScreen)
|
|
||||||
|
|
||||||
open inner class Screen(
|
|
||||||
key: String,
|
|
||||||
title: String,
|
|
||||||
val summary: String? = null,
|
|
||||||
preferences: MutableList<BasePreference> = mutableListOf(),
|
|
||||||
val categories: MutableList<Category> = mutableListOf()
|
|
||||||
) : BasePreferenceCollection(key, title, preferences) {
|
|
||||||
override fun transform(): PreferenceScreen {
|
|
||||||
return PreferenceScreen(
|
|
||||||
key,
|
|
||||||
StringResource("${key}_title", title),
|
|
||||||
preferences.sortedBy { it.title.value } +
|
|
||||||
categories.sortedBy { it.title }.map { it.transform() },
|
|
||||||
summary?.let { summary ->
|
|
||||||
StringResource("${key}_summary", summary)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun ensureScreenInserted() {
|
|
||||||
// Add to screens if not yet done
|
|
||||||
if(!this@AbstractPreferenceScreen.root.contains(this))
|
|
||||||
this@AbstractPreferenceScreen.root.add(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun addPreferences(vararg preferences: BasePreference) {
|
|
||||||
ensureScreenInserted()
|
|
||||||
this.preferences.addAll(preferences)
|
|
||||||
}
|
|
||||||
|
|
||||||
open inner class Category(
|
|
||||||
key: String,
|
|
||||||
title: String,
|
|
||||||
preferences: MutableList<BasePreference> = mutableListOf()
|
|
||||||
): BasePreferenceCollection(key, title, preferences) {
|
|
||||||
override fun transform(): PreferenceCategory {
|
|
||||||
return PreferenceCategory(
|
|
||||||
key,
|
|
||||||
StringResource("${key}_title", title),
|
|
||||||
preferences.sortedBy { it.title.value }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun addPreferences(vararg preferences: BasePreference) {
|
|
||||||
ensureScreenInserted()
|
|
||||||
|
|
||||||
// Add to categories if not yet done
|
|
||||||
if(!this@Screen.categories.contains(this))
|
|
||||||
this@Screen.categories.add(this)
|
|
||||||
|
|
||||||
this.preferences.addAll(preferences)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract class BasePreferenceCollection(
|
|
||||||
val key: String,
|
|
||||||
val title: String,
|
|
||||||
val preferences: MutableList<BasePreference> = mutableListOf()
|
|
||||||
) {
|
|
||||||
abstract fun transform(): BasePreference
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
package app.revanced.patches.sleepasandroid.annotations
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Compatibility
|
|
||||||
import app.revanced.patcher.annotation.Package
|
|
||||||
|
|
||||||
@Compatibility([Package("com.urbandroid.sleep")])
|
|
||||||
@Target(AnnotationTarget.CLASS)
|
|
||||||
@Retention(AnnotationRetention.RUNTIME)
|
|
||||||
internal annotation class UnlockPremiumCompatibility
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
package app.revanced.patches.sleepasandroid.fingerprints
|
|
||||||
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
|
||||||
|
|
||||||
object IsTrialFingerprint : MethodFingerprint(
|
|
||||||
"Z",
|
|
||||||
customFingerprint = { it.name == "isTrial" }
|
|
||||||
)
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
package app.revanced.patches.sleepasandroid.patch
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Description
|
|
||||||
import app.revanced.patcher.annotation.Name
|
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
|
||||||
import app.revanced.patcher.extensions.addInstructions
|
|
||||||
import app.revanced.patcher.patch.BytecodePatch
|
|
||||||
import app.revanced.patcher.patch.PatchResult
|
|
||||||
import app.revanced.patcher.patch.PatchResultSuccess
|
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
|
||||||
import app.revanced.patches.sleepasandroid.annotations.UnlockPremiumCompatibility
|
|
||||||
import app.revanced.patches.sleepasandroid.fingerprints.IsTrialFingerprint
|
|
||||||
|
|
||||||
@Patch
|
|
||||||
@Name("unlock-premium")
|
|
||||||
@Description("Unlocks all premium features.")
|
|
||||||
@UnlockPremiumCompatibility
|
|
||||||
class UnlockPremiumPatch : BytecodePatch(
|
|
||||||
listOf(
|
|
||||||
IsTrialFingerprint
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
override fun execute(context: BytecodeContext): PatchResult {
|
|
||||||
val method = IsTrialFingerprint.result!!.mutableMethod
|
|
||||||
|
|
||||||
method.addInstructions(
|
|
||||||
0,
|
|
||||||
"""
|
|
||||||
const/4 v0, 0x0
|
|
||||||
return v0
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
|
|
||||||
return PatchResultSuccess()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -11,4 +11,4 @@ import app.revanced.patcher.annotation.Package
|
|||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
@Retention(AnnotationRetention.RUNTIME)
|
@Retention(AnnotationRetention.RUNTIME)
|
||||||
internal annotation class HideAdsCompatibility
|
internal annotation class TiktokAdsCompatibility
|
||||||
@@ -10,7 +10,7 @@ import app.revanced.patcher.patch.PatchResult
|
|||||||
import app.revanced.patcher.patch.PatchResultError
|
import app.revanced.patcher.patch.PatchResultError
|
||||||
import app.revanced.patcher.patch.PatchResultSuccess
|
import app.revanced.patcher.patch.PatchResultSuccess
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
import app.revanced.patcher.patch.annotations.Patch
|
||||||
import app.revanced.patches.tiktok.ad.annotations.HideAdsCompatibility
|
import app.revanced.patches.tiktok.ad.annotations.TiktokAdsCompatibility
|
||||||
import app.revanced.patches.tiktok.ad.fingerprints.ConvertHelpFeedItemListFingerprint
|
import app.revanced.patches.tiktok.ad.fingerprints.ConvertHelpFeedItemListFingerprint
|
||||||
import app.revanced.patches.tiktok.ad.fingerprints.FeedItemListCloneFingerprint
|
import app.revanced.patches.tiktok.ad.fingerprints.FeedItemListCloneFingerprint
|
||||||
import org.jf.dexlib2.Opcode
|
import org.jf.dexlib2.Opcode
|
||||||
@@ -19,11 +19,11 @@ import org.jf.dexlib2.iface.instruction.TwoRegisterInstruction
|
|||||||
import org.jf.dexlib2.iface.reference.FieldReference
|
import org.jf.dexlib2.iface.reference.FieldReference
|
||||||
|
|
||||||
@Patch
|
@Patch
|
||||||
@Name("hide-ads")
|
@Name("tiktok-ads")
|
||||||
@Description("Removes ads from TikTok.")
|
@Description("Removes ads from TikTok.")
|
||||||
@HideAdsCompatibility
|
@TiktokAdsCompatibility
|
||||||
@Version("0.0.1")
|
@Version("0.0.1")
|
||||||
class HideAdsPatch : BytecodePatch(
|
class TiktokAdsPatch : BytecodePatch(
|
||||||
listOf(
|
listOf(
|
||||||
FeedItemListCloneFingerprint,
|
FeedItemListCloneFingerprint,
|
||||||
ConvertHelpFeedItemListFingerprint
|
ConvertHelpFeedItemListFingerprint
|
||||||
@@ -12,19 +12,19 @@ import app.revanced.patcher.patch.annotations.DependsOn
|
|||||||
import app.revanced.patcher.patch.annotations.Patch
|
import app.revanced.patcher.patch.annotations.Patch
|
||||||
import app.revanced.patches.tiktok.feedfilter.annotations.FeedFilterCompatibility
|
import app.revanced.patches.tiktok.feedfilter.annotations.FeedFilterCompatibility
|
||||||
import app.revanced.patches.tiktok.feedfilter.fingerprints.FeedApiServiceLIZFingerprint
|
import app.revanced.patches.tiktok.feedfilter.fingerprints.FeedApiServiceLIZFingerprint
|
||||||
import app.revanced.patches.tiktok.misc.integrations.patch.IntegrationsPatch
|
import app.revanced.patches.tiktok.misc.integrations.patch.TikTokIntegrationsPatch
|
||||||
import app.revanced.patches.tiktok.misc.settings.fingerprints.SettingsStatusLoadFingerprint
|
import app.revanced.patches.tiktok.misc.settings.fingerprints.SettingsStatusLoadFingerprint
|
||||||
import app.revanced.patches.tiktok.misc.settings.patch.SettingsPatch
|
import app.revanced.patches.tiktok.misc.settings.patch.TikTokSettingsPatch
|
||||||
import org.jf.dexlib2.Opcode
|
import org.jf.dexlib2.Opcode
|
||||||
import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
|
import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
|
|
||||||
@Patch
|
@Patch
|
||||||
@DependsOn([IntegrationsPatch::class, SettingsPatch::class])
|
@DependsOn([TikTokIntegrationsPatch::class, TikTokSettingsPatch::class])
|
||||||
@Name("feed-filter")
|
@Name("tiktok-feed-filter")
|
||||||
@Description("Filters tiktok videos: removing ads, removing livestreams.")
|
@Description("Filters tiktok videos: removing ads, removing livestreams.")
|
||||||
@FeedFilterCompatibility
|
@FeedFilterCompatibility
|
||||||
@Version("0.0.1")
|
@Version("0.0.1")
|
||||||
class FeedFilterPatch : BytecodePatch(
|
class TiktokFeedFilter : BytecodePatch(
|
||||||
listOf(
|
listOf(
|
||||||
FeedApiServiceLIZFingerprint,
|
FeedApiServiceLIZFingerprint,
|
||||||
SettingsStatusLoadFingerprint
|
SettingsStatusLoadFingerprint
|
||||||
@@ -21,17 +21,17 @@ import app.revanced.patches.tiktok.interaction.downloads.fingerprints.ACLCommonS
|
|||||||
import app.revanced.patches.tiktok.interaction.downloads.fingerprints.ACLCommonShareFingerprint2
|
import app.revanced.patches.tiktok.interaction.downloads.fingerprints.ACLCommonShareFingerprint2
|
||||||
import app.revanced.patches.tiktok.interaction.downloads.fingerprints.ACLCommonShareFingerprint3
|
import app.revanced.patches.tiktok.interaction.downloads.fingerprints.ACLCommonShareFingerprint3
|
||||||
import app.revanced.patches.tiktok.interaction.downloads.fingerprints.DownloadPathParentFingerprint
|
import app.revanced.patches.tiktok.interaction.downloads.fingerprints.DownloadPathParentFingerprint
|
||||||
import app.revanced.patches.tiktok.misc.integrations.patch.IntegrationsPatch
|
import app.revanced.patches.tiktok.misc.integrations.patch.TikTokIntegrationsPatch
|
||||||
import app.revanced.patches.tiktok.misc.settings.fingerprints.SettingsStatusLoadFingerprint
|
import app.revanced.patches.tiktok.misc.settings.fingerprints.SettingsStatusLoadFingerprint
|
||||||
import app.revanced.patches.tiktok.misc.settings.patch.SettingsPatch
|
import app.revanced.patches.tiktok.misc.settings.patch.TikTokSettingsPatch
|
||||||
import org.jf.dexlib2.Opcode
|
import org.jf.dexlib2.Opcode
|
||||||
import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
|
import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
import org.jf.dexlib2.iface.instruction.ReferenceInstruction
|
import org.jf.dexlib2.iface.instruction.ReferenceInstruction
|
||||||
import org.jf.dexlib2.iface.reference.StringReference
|
import org.jf.dexlib2.iface.reference.StringReference
|
||||||
|
|
||||||
@Patch
|
@Patch
|
||||||
@DependsOn([IntegrationsPatch::class, SettingsPatch::class])
|
@DependsOn([TikTokIntegrationsPatch::class, TikTokSettingsPatch::class])
|
||||||
@Name("downloads")
|
@Name("tiktok-download")
|
||||||
@Description("Removes download restrictions and changes the default path to download to.")
|
@Description("Removes download restrictions and changes the default path to download to.")
|
||||||
@DownloadsCompatibility
|
@DownloadsCompatibility
|
||||||
@Version("0.0.1")
|
@Version("0.0.1")
|
||||||
|
|||||||
@@ -11,4 +11,4 @@ import app.revanced.patcher.annotation.Package
|
|||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
@Retention(AnnotationRetention.RUNTIME)
|
@Retention(AnnotationRetention.RUNTIME)
|
||||||
internal annotation class ShowSeekbarCompatibility
|
internal annotation class SeekbarCompatibility
|
||||||
@@ -10,18 +10,18 @@ import app.revanced.patcher.patch.PatchResult
|
|||||||
import app.revanced.patcher.patch.PatchResultError
|
import app.revanced.patcher.patch.PatchResultError
|
||||||
import app.revanced.patcher.patch.PatchResultSuccess
|
import app.revanced.patcher.patch.PatchResultSuccess
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
import app.revanced.patcher.patch.annotations.Patch
|
||||||
import app.revanced.patches.tiktok.interaction.seekbar.annotations.ShowSeekbarCompatibility
|
import app.revanced.patches.tiktok.interaction.seekbar.annotations.SeekbarCompatibility
|
||||||
import app.revanced.patches.tiktok.interaction.seekbar.fingerprints.AwemeGetVideoControlFingerprint
|
import app.revanced.patches.tiktok.interaction.seekbar.fingerprints.AwemeGetVideoControlFingerprint
|
||||||
import org.jf.dexlib2.Opcode
|
import org.jf.dexlib2.Opcode
|
||||||
import org.jf.dexlib2.builder.instruction.BuilderInstruction11n
|
import org.jf.dexlib2.builder.instruction.BuilderInstruction11n
|
||||||
import org.jf.dexlib2.builder.instruction.BuilderInstruction22c
|
import org.jf.dexlib2.builder.instruction.BuilderInstruction22c
|
||||||
|
|
||||||
@Patch
|
@Patch
|
||||||
@Name("show-seekbar")
|
@Name("tiktok-seekbar")
|
||||||
@Description("Shows progress bar for all video.")
|
@Description("Show progress bar for all video.")
|
||||||
@ShowSeekbarCompatibility
|
@SeekbarCompatibility
|
||||||
@Version("0.0.1")
|
@Version("0.0.1")
|
||||||
class ShowSeekbarPatch : BytecodePatch(
|
class TiktokSeekbarPatch : BytecodePatch(
|
||||||
listOf(
|
listOf(
|
||||||
AwemeGetVideoControlFingerprint
|
AwemeGetVideoControlFingerprint
|
||||||
)
|
)
|
||||||
@@ -11,4 +11,4 @@ import app.revanced.patcher.annotation.Package
|
|||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
@Retention(AnnotationRetention.RUNTIME)
|
@Retention(AnnotationRetention.RUNTIME)
|
||||||
internal annotation class PlaybackSpeedCompatibility
|
internal annotation class SpeedCompatibility
|
||||||
@@ -11,16 +11,16 @@ import app.revanced.patcher.patch.PatchResult
|
|||||||
import app.revanced.patcher.patch.PatchResultSuccess
|
import app.revanced.patcher.patch.PatchResultSuccess
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
import app.revanced.patcher.patch.annotations.Patch
|
||||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||||
import app.revanced.patches.tiktok.interaction.speed.annotations.PlaybackSpeedCompatibility
|
import app.revanced.patches.tiktok.interaction.speed.annotations.SpeedCompatibility
|
||||||
import app.revanced.patches.tiktok.interaction.speed.fingerprints.SpeedControlParentFingerprint
|
import app.revanced.patches.tiktok.interaction.speed.fingerprints.SpeedControlParentFingerprint
|
||||||
import org.jf.dexlib2.Opcode
|
import org.jf.dexlib2.Opcode
|
||||||
|
|
||||||
@Patch
|
@Patch
|
||||||
@Name("playback-speed")
|
@Name("tiktok-speed")
|
||||||
@Description("Enables the playback speed option for all videos.")
|
@Description("Enables the playback speed option for all videos.")
|
||||||
@PlaybackSpeedCompatibility
|
@SpeedCompatibility
|
||||||
@Version("0.0.1")
|
@Version("0.0.1")
|
||||||
class PlaybackSpeedPatch : BytecodePatch(
|
class SpeedPatch : BytecodePatch(
|
||||||
listOf(
|
listOf(
|
||||||
SpeedControlParentFingerprint
|
SpeedControlParentFingerprint
|
||||||
)
|
)
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package app.revanced.patches.tiktok.misc.forcelogin.annotations
|
||||||
|
|
||||||
|
import app.revanced.patcher.annotation.Compatibility
|
||||||
|
import app.revanced.patcher.annotation.Package
|
||||||
|
|
||||||
|
@Compatibility(
|
||||||
|
[
|
||||||
|
Package("com.ss.android.ugc.trill"),
|
||||||
|
Package("com.zhiliaoapp.musically")
|
||||||
|
]
|
||||||
|
)
|
||||||
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
@Retention(AnnotationRetention.RUNTIME)
|
||||||
|
internal annotation class DisableForceLoginCompatibility
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package app.revanced.patches.tiktok.misc.login.disablerequirement.fingerprints
|
package app.revanced.patches.tiktok.misc.forcelogin.fingerprints
|
||||||
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||||
|
|
||||||
object MandatoryLoginServiceFingerprint : MethodFingerprint(
|
object MandatoryLoginServiceFingerprint : MethodFingerprint(
|
||||||
customFingerprint = { methodDef ->
|
customFingerprint = { methodDef ->
|
||||||
methodDef.definingClass.endsWith("/MandatoryLoginService;") &&
|
methodDef.definingClass.endsWith("/MandatoryLoginService;") &&
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
package app.revanced.patches.tiktok.misc.login.disablerequirement.fingerprints
|
package app.revanced.patches.tiktok.misc.forcelogin.fingerprints
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.annotation.Version
|
import app.revanced.patcher.annotation.Version
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||||
import app.revanced.patches.tiktok.misc.login.disablerequirement.annotations.DisableLoginRequirementCompatibility
|
import app.revanced.patches.tiktok.misc.forcelogin.annotations.DisableForceLoginCompatibility
|
||||||
|
|
||||||
@Name("mandatory-login-service-fingerprint2")
|
@Name("mandatory-login-service-fingerprint2")
|
||||||
@DisableLoginRequirementCompatibility
|
@DisableForceLoginCompatibility
|
||||||
@Version("0.0.1")
|
@Version("0.0.1")
|
||||||
object MandatoryLoginServiceFingerprint2 : MethodFingerprint(
|
object MandatoryLoginServiceFingerprint2 : MethodFingerprint(
|
||||||
customFingerprint = { methodDef ->
|
customFingerprint = { methodDef ->
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package app.revanced.patches.tiktok.misc.login.disablerequirement.patch
|
package app.revanced.patches.tiktok.misc.forcelogin.patch
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
@@ -9,16 +9,16 @@ import app.revanced.patcher.patch.BytecodePatch
|
|||||||
import app.revanced.patcher.patch.PatchResult
|
import app.revanced.patcher.patch.PatchResult
|
||||||
import app.revanced.patcher.patch.PatchResultSuccess
|
import app.revanced.patcher.patch.PatchResultSuccess
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
import app.revanced.patcher.patch.annotations.Patch
|
||||||
import app.revanced.patches.tiktok.misc.login.disablerequirement.annotations.DisableLoginRequirementCompatibility
|
import app.revanced.patches.tiktok.misc.forcelogin.annotations.DisableForceLoginCompatibility
|
||||||
import app.revanced.patches.tiktok.misc.login.disablerequirement.fingerprints.MandatoryLoginServiceFingerprint
|
import app.revanced.patches.tiktok.misc.forcelogin.fingerprints.MandatoryLoginServiceFingerprint
|
||||||
import app.revanced.patches.tiktok.misc.login.disablerequirement.fingerprints.MandatoryLoginServiceFingerprint2
|
import app.revanced.patches.tiktok.misc.forcelogin.fingerprints.MandatoryLoginServiceFingerprint2
|
||||||
|
|
||||||
@Patch
|
@Patch
|
||||||
@Name("disable-login-requirement")
|
@Name("tiktok-force-login")
|
||||||
@Description("Do not force login.")
|
@Description("Do not force login.")
|
||||||
@DisableLoginRequirementCompatibility
|
@DisableForceLoginCompatibility
|
||||||
@Version("0.0.1")
|
@Version("0.0.1")
|
||||||
class DisableLoginRequirementPatch : BytecodePatch(
|
class DisableForceLoginPatch : BytecodePatch(
|
||||||
listOf(
|
listOf(
|
||||||
MandatoryLoginServiceFingerprint,
|
MandatoryLoginServiceFingerprint,
|
||||||
MandatoryLoginServiceFingerprint2
|
MandatoryLoginServiceFingerprint2
|
||||||
@@ -11,4 +11,4 @@ import app.revanced.patcher.annotation.Package
|
|||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
@Retention(AnnotationRetention.RUNTIME)
|
@Retention(AnnotationRetention.RUNTIME)
|
||||||
internal annotation class IntegrationsCompatibility
|
internal annotation class TikTokIntegrationsCompatibility
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
package app.revanced.patches.tiktok.misc.integrations.patch
|
package app.revanced.patches.tiktok.misc.integrations.patch
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patches.tiktok.misc.integrations.annotations.IntegrationsCompatibility
|
import app.revanced.patches.tiktok.misc.integrations.annotations.TikTokIntegrationsCompatibility
|
||||||
import app.revanced.patches.tiktok.misc.integrations.fingerprints.InitFingerprint
|
import app.revanced.patches.tiktok.misc.integrations.fingerprints.InitFingerprint
|
||||||
import app.revanced.patches.shared.integrations.patch.AbstractIntegrationsPatch
|
import app.revanced.patches.shared.integrations.patch.AbstractIntegrationsPatch
|
||||||
|
|
||||||
@Name("integrations")
|
@Name("tiktok-integrations")
|
||||||
@IntegrationsCompatibility
|
@TikTokIntegrationsCompatibility
|
||||||
class IntegrationsPatch : AbstractIntegrationsPatch(
|
class TikTokIntegrationsPatch : AbstractIntegrationsPatch(
|
||||||
"Lapp/revanced/tiktok/utils/ReVancedUtils;",
|
"Lapp/revanced/tiktok/utils/ReVancedUtils;",
|
||||||
listOf(InitFingerprint)
|
listOf(InitFingerprint)
|
||||||
)
|
)
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
package app.revanced.patches.tiktok.misc.login.disablerequirement.annotations
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Compatibility
|
|
||||||
import app.revanced.patcher.annotation.Package
|
|
||||||
|
|
||||||
@Compatibility(
|
|
||||||
[
|
|
||||||
Package("com.ss.android.ugc.trill"),
|
|
||||||
Package("com.zhiliaoapp.musically")
|
|
||||||
]
|
|
||||||
)
|
|
||||||
@Target(AnnotationTarget.CLASS)
|
|
||||||
@Retention(AnnotationRetention.RUNTIME)
|
|
||||||
internal annotation class DisableLoginRequirementCompatibility
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
package app.revanced.patches.tiktok.misc.login.fixgoogle.annotations
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Compatibility
|
|
||||||
import app.revanced.patcher.annotation.Package
|
|
||||||
|
|
||||||
@Compatibility(
|
|
||||||
[
|
|
||||||
Package("com.ss.android.ugc.trill"),
|
|
||||||
Package("com.zhiliaoapp.musically")
|
|
||||||
]
|
|
||||||
)
|
|
||||||
@Target(AnnotationTarget.CLASS)
|
|
||||||
@Retention(AnnotationRetention.RUNTIME)
|
|
||||||
internal annotation class FixGoogleLoginCompatibility
|
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package app.revanced.patches.tiktok.misc.loginfallback.annotations
|
||||||
|
|
||||||
|
import app.revanced.patcher.annotation.Compatibility
|
||||||
|
import app.revanced.patcher.annotation.Package
|
||||||
|
|
||||||
|
@Compatibility(
|
||||||
|
[
|
||||||
|
Package("com.ss.android.ugc.trill"),
|
||||||
|
Package("com.zhiliaoapp.musically")
|
||||||
|
]
|
||||||
|
)
|
||||||
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
@Retention(AnnotationRetention.RUNTIME)
|
||||||
|
internal annotation class TikTokWebLoginCompatibility
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package app.revanced.patches.tiktok.misc.login.fixgoogle.fingerprints
|
package app.revanced.patches.tiktok.misc.loginfallback.fingerprints
|
||||||
|
|
||||||
import app.revanced.patcher.extensions.or
|
import app.revanced.patcher.extensions.or
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package app.revanced.patches.tiktok.misc.login.fixgoogle.fingerprints
|
package app.revanced.patches.tiktok.misc.loginfallback.fingerprints
|
||||||
|
|
||||||
import app.revanced.patcher.extensions.or
|
import app.revanced.patcher.extensions.or
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package app.revanced.patches.tiktok.misc.login.fixgoogle.patch
|
package app.revanced.patches.tiktok.misc.loginfallback.patch
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Description
|
import app.revanced.patcher.annotation.Description
|
||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
@@ -9,16 +9,16 @@ import app.revanced.patcher.patch.BytecodePatch
|
|||||||
import app.revanced.patcher.patch.PatchResult
|
import app.revanced.patcher.patch.PatchResult
|
||||||
import app.revanced.patcher.patch.PatchResultSuccess
|
import app.revanced.patcher.patch.PatchResultSuccess
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
import app.revanced.patcher.patch.annotations.Patch
|
||||||
import app.revanced.patches.tiktok.misc.login.fixgoogle.annotations.FixGoogleLoginCompatibility
|
import app.revanced.patches.tiktok.misc.loginfallback.annotations.TikTokWebLoginCompatibility
|
||||||
import app.revanced.patches.tiktok.misc.login.fixgoogle.fingerprints.GoogleAuthAvailableFingerprint
|
import app.revanced.patches.tiktok.misc.loginfallback.fingerprints.GoogleAuthAvailableFingerprint
|
||||||
import app.revanced.patches.tiktok.misc.login.fixgoogle.fingerprints.GoogleOneTapAuthAvailableFingerprint
|
import app.revanced.patches.tiktok.misc.loginfallback.fingerprints.GoogleOneTapAuthAvailableFingerprint
|
||||||
|
|
||||||
@Patch
|
@Patch
|
||||||
@Name("fix-google-login")
|
@Name("tiktok-web-login")
|
||||||
@Description("Allows logging in with a Google account.")
|
@Description("Allows logging in with a Google account.")
|
||||||
@FixGoogleLoginCompatibility
|
@TikTokWebLoginCompatibility
|
||||||
@Version("0.0.1")
|
@Version("0.0.1")
|
||||||
class FixGoogleLoginPatch : BytecodePatch(
|
class TikTokLoginFallbackPatch : BytecodePatch(
|
||||||
listOf(
|
listOf(
|
||||||
GoogleOneTapAuthAvailableFingerprint,
|
GoogleOneTapAuthAvailableFingerprint,
|
||||||
GoogleAuthAvailableFingerprint
|
GoogleAuthAvailableFingerprint
|
||||||
@@ -11,4 +11,4 @@ import app.revanced.patcher.annotation.Package
|
|||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
@Retention(AnnotationRetention.RUNTIME)
|
@Retention(AnnotationRetention.RUNTIME)
|
||||||
internal annotation class SettingsCompatibility
|
internal annotation class TikTokSettingsCompatibility
|
||||||
@@ -13,8 +13,8 @@ import app.revanced.patcher.patch.PatchResultError
|
|||||||
import app.revanced.patcher.patch.PatchResultSuccess
|
import app.revanced.patcher.patch.PatchResultSuccess
|
||||||
import app.revanced.patcher.patch.annotations.DependsOn
|
import app.revanced.patcher.patch.annotations.DependsOn
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
import app.revanced.patcher.patch.annotations.Patch
|
||||||
import app.revanced.patches.tiktok.misc.integrations.patch.IntegrationsPatch
|
import app.revanced.patches.tiktok.misc.integrations.patch.TikTokIntegrationsPatch
|
||||||
import app.revanced.patches.tiktok.misc.settings.annotations.SettingsCompatibility
|
import app.revanced.patches.tiktok.misc.settings.annotations.TikTokSettingsCompatibility
|
||||||
import app.revanced.patches.tiktok.misc.settings.fingerprints.AboutOnClickMethodFingerprint
|
import app.revanced.patches.tiktok.misc.settings.fingerprints.AboutOnClickMethodFingerprint
|
||||||
import app.revanced.patches.tiktok.misc.settings.fingerprints.AdPersonalizationActivityOnCreateFingerprint
|
import app.revanced.patches.tiktok.misc.settings.fingerprints.AdPersonalizationActivityOnCreateFingerprint
|
||||||
import app.revanced.patches.tiktok.misc.settings.fingerprints.SettingsOnViewCreatedFingerprint
|
import app.revanced.patches.tiktok.misc.settings.fingerprints.SettingsOnViewCreatedFingerprint
|
||||||
@@ -27,12 +27,12 @@ import org.jf.dexlib2.iface.reference.StringReference
|
|||||||
import org.jf.dexlib2.iface.reference.TypeReference
|
import org.jf.dexlib2.iface.reference.TypeReference
|
||||||
|
|
||||||
@Patch
|
@Patch
|
||||||
@DependsOn([IntegrationsPatch::class])
|
@DependsOn([TikTokIntegrationsPatch::class])
|
||||||
@Name("settings")
|
@Name("tiktok-settings")
|
||||||
@Description("Adds settings for ReVanced to TikTok.")
|
@Description("Adds settings for ReVanced to TikTok.")
|
||||||
@SettingsCompatibility
|
@TikTokSettingsCompatibility
|
||||||
@Version("0.0.1")
|
@Version("0.0.1")
|
||||||
class SettingsPatch : BytecodePatch(
|
class TikTokSettingsPatch : BytecodePatch(
|
||||||
listOf(
|
listOf(
|
||||||
AdPersonalizationActivityOnCreateFingerprint,
|
AdPersonalizationActivityOnCreateFingerprint,
|
||||||
SettingsOnViewCreatedFingerprint,
|
SettingsOnViewCreatedFingerprint,
|
||||||
@@ -14,9 +14,9 @@ import app.revanced.patcher.patch.PatchResultSuccess
|
|||||||
import app.revanced.patcher.patch.annotations.DependsOn
|
import app.revanced.patcher.patch.annotations.DependsOn
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
import app.revanced.patcher.patch.annotations.Patch
|
||||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
||||||
import app.revanced.patches.tiktok.misc.integrations.patch.IntegrationsPatch
|
import app.revanced.patches.tiktok.misc.integrations.patch.TikTokIntegrationsPatch
|
||||||
import app.revanced.patches.tiktok.misc.settings.fingerprints.SettingsStatusLoadFingerprint
|
import app.revanced.patches.tiktok.misc.settings.fingerprints.SettingsStatusLoadFingerprint
|
||||||
import app.revanced.patches.tiktok.misc.settings.patch.SettingsPatch
|
import app.revanced.patches.tiktok.misc.settings.patch.TikTokSettingsPatch
|
||||||
import app.revanced.patches.tiktok.misc.spoof.sim.annotations.SpoofSimCompatibility
|
import app.revanced.patches.tiktok.misc.spoof.sim.annotations.SpoofSimCompatibility
|
||||||
import org.jf.dexlib2.Opcode
|
import org.jf.dexlib2.Opcode
|
||||||
import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
|
import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
|
||||||
@@ -24,7 +24,7 @@ import org.jf.dexlib2.iface.instruction.formats.Instruction35c
|
|||||||
import org.jf.dexlib2.iface.reference.MethodReference
|
import org.jf.dexlib2.iface.reference.MethodReference
|
||||||
|
|
||||||
@Patch(false)
|
@Patch(false)
|
||||||
@DependsOn([IntegrationsPatch::class, SettingsPatch::class])
|
@DependsOn([TikTokIntegrationsPatch::class, TikTokSettingsPatch::class])
|
||||||
@Name("sim-spoof")
|
@Name("sim-spoof")
|
||||||
@Description("Spoofs the information which is retrieved from the sim-card.")
|
@Description("Spoofs the information which is retrieved from the sim-card.")
|
||||||
@SpoofSimCompatibility
|
@SpoofSimCompatibility
|
||||||
|
|||||||
@@ -4,23 +4,15 @@ import app.revanced.patcher.annotation.Description
|
|||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.annotation.Version
|
import app.revanced.patcher.annotation.Version
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.addInstructions
|
import app.revanced.patcher.extensions.addInstruction
|
||||||
import app.revanced.patcher.extensions.instruction
|
|
||||||
import app.revanced.patcher.patch.BytecodePatch
|
import app.revanced.patcher.patch.BytecodePatch
|
||||||
import app.revanced.patcher.patch.PatchResult
|
import app.revanced.patcher.patch.PatchResult
|
||||||
import app.revanced.patcher.patch.PatchResultSuccess
|
import app.revanced.patcher.patch.PatchResultSuccess
|
||||||
import app.revanced.patcher.patch.annotations.DependsOn
|
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
import app.revanced.patcher.patch.annotations.Patch
|
||||||
import app.revanced.patcher.util.smali.ExternalLabel
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.SwitchPreference
|
|
||||||
import app.revanced.patches.twitch.ad.audio.annotations.AudioAdsCompatibility
|
import app.revanced.patches.twitch.ad.audio.annotations.AudioAdsCompatibility
|
||||||
import app.revanced.patches.twitch.ad.audio.fingerprints.AudioAdsPresenterPlayFingerprint
|
import app.revanced.patches.twitch.ad.audio.fingerprints.AudioAdsPresenterPlayFingerprint
|
||||||
import app.revanced.patches.twitch.misc.integrations.patch.IntegrationsPatch
|
|
||||||
import app.revanced.patches.twitch.misc.settings.bytecode.patch.SettingsPatch
|
|
||||||
|
|
||||||
@Patch
|
@Patch
|
||||||
@DependsOn([IntegrationsPatch::class, SettingsPatch::class])
|
|
||||||
@Name("block-audio-ads")
|
@Name("block-audio-ads")
|
||||||
@Description("Blocks audio ads in streams and VODs.")
|
@Description("Blocks audio ads in streams and VODs.")
|
||||||
@AudioAdsCompatibility
|
@AudioAdsCompatibility
|
||||||
@@ -31,37 +23,9 @@ class AudioAdsPatch : BytecodePatch(
|
|||||||
override fun execute(context: BytecodeContext): PatchResult {
|
override fun execute(context: BytecodeContext): PatchResult {
|
||||||
// Block playAds call
|
// Block playAds call
|
||||||
with(AudioAdsPresenterPlayFingerprint.result!!) {
|
with(AudioAdsPresenterPlayFingerprint.result!!) {
|
||||||
mutableMethod.addInstructions(
|
mutableMethod.addInstruction(0, "return-void")
|
||||||
0,
|
|
||||||
"""
|
|
||||||
invoke-static { }, Lapp/revanced/twitch/patches/AudioAdsPatch;->shouldBlockAudioAds()Z
|
|
||||||
move-result v0
|
|
||||||
if-eqz v0, :show_audio_ads
|
|
||||||
return-void
|
|
||||||
""",
|
|
||||||
listOf(ExternalLabel("show_audio_ads", mutableMethod.instruction(0)))
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SettingsPatch.PreferenceScreen.ADS.CLIENT_SIDE.addPreferences(
|
|
||||||
SwitchPreference(
|
|
||||||
"revanced_block_audio_ads",
|
|
||||||
StringResource(
|
|
||||||
"revanced_block_audio_ads",
|
|
||||||
"Block audio ads"
|
|
||||||
),
|
|
||||||
true,
|
|
||||||
StringResource(
|
|
||||||
"revanced_block_audio_ads_on",
|
|
||||||
"Audio ads are blocked"
|
|
||||||
),
|
|
||||||
StringResource(
|
|
||||||
"revanced_block_audio_ads_off",
|
|
||||||
"Audio ads are unblocked"
|
|
||||||
),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return PatchResultSuccess()
|
return PatchResultSuccess()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,25 +4,18 @@ import app.revanced.patcher.annotation.Description
|
|||||||
import app.revanced.patcher.annotation.Name
|
import app.revanced.patcher.annotation.Name
|
||||||
import app.revanced.patcher.annotation.Version
|
import app.revanced.patcher.annotation.Version
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
|
import app.revanced.patcher.extensions.addInstruction
|
||||||
import app.revanced.patcher.extensions.addInstructions
|
import app.revanced.patcher.extensions.addInstructions
|
||||||
import app.revanced.patcher.extensions.instruction
|
|
||||||
import app.revanced.patcher.patch.BytecodePatch
|
import app.revanced.patcher.patch.BytecodePatch
|
||||||
import app.revanced.patcher.patch.PatchResult
|
import app.revanced.patcher.patch.PatchResult
|
||||||
import app.revanced.patcher.patch.PatchResultSuccess
|
import app.revanced.patcher.patch.PatchResultSuccess
|
||||||
import app.revanced.patcher.patch.annotations.DependsOn
|
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
import app.revanced.patcher.patch.annotations.Patch
|
||||||
import app.revanced.patcher.util.smali.ExternalLabel
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.SwitchPreference
|
|
||||||
import app.revanced.patches.twitch.ad.video.annotations.VideoAdsCompatibility
|
import app.revanced.patches.twitch.ad.video.annotations.VideoAdsCompatibility
|
||||||
import app.revanced.patches.twitch.ad.video.fingerprints.AdsManagerFingerprint
|
import app.revanced.patches.twitch.ad.video.fingerprints.AdsManagerFingerprint
|
||||||
import app.revanced.patches.twitch.ad.video.fingerprints.CheckAdEligibilityLambdaFingerprint
|
import app.revanced.patches.twitch.ad.video.fingerprints.CheckAdEligibilityLambdaFingerprint
|
||||||
import app.revanced.patches.twitch.ad.video.fingerprints.ContentConfigShowAdsFingerprint
|
import app.revanced.patches.twitch.ad.video.fingerprints.ContentConfigShowAdsFingerprint
|
||||||
import app.revanced.patches.twitch.misc.integrations.patch.IntegrationsPatch
|
|
||||||
import app.revanced.patches.twitch.misc.settings.bytecode.patch.SettingsPatch
|
|
||||||
|
|
||||||
@Patch
|
@Patch
|
||||||
@DependsOn([IntegrationsPatch::class, SettingsPatch::class])
|
|
||||||
@Name("block-video-ads")
|
@Name("block-video-ads")
|
||||||
@Description("Blocks video ads in streams and VODs.")
|
@Description("Blocks video ads in streams and VODs.")
|
||||||
@VideoAdsCompatibility
|
@VideoAdsCompatibility
|
||||||
@@ -34,34 +27,24 @@ class VideoAdsPatch : BytecodePatch(
|
|||||||
CheckAdEligibilityLambdaFingerprint
|
CheckAdEligibilityLambdaFingerprint
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
private fun createConditionInstructions(register: String = "v0") = """
|
|
||||||
invoke-static { }, Lapp/revanced/twitch/patches/VideoAdsPatch;->shouldBlockVideoAds()Z
|
|
||||||
move-result $register
|
|
||||||
if-eqz $register, :show_video_ads
|
|
||||||
"""
|
|
||||||
|
|
||||||
override fun execute(context: BytecodeContext): PatchResult {
|
override fun execute(context: BytecodeContext): PatchResult {
|
||||||
// Pretend our player is ineligible for all ads
|
// Pretend our player is ineligible for all ads
|
||||||
with(CheckAdEligibilityLambdaFingerprint.result!!) {
|
with(CheckAdEligibilityLambdaFingerprint.result!!) {
|
||||||
mutableMethod.addInstructions(
|
mutableMethod.addInstructions(
|
||||||
0,
|
0,
|
||||||
"""
|
"""
|
||||||
${createConditionInstructions()}
|
|
||||||
const/4 v0, 0
|
const/4 v0, 0
|
||||||
invoke-static {v0}, Lio/reactivex/Single;->just(Ljava/lang/Object;)Lio/reactivex/Single;
|
invoke-static {v0}, Lio/reactivex/Single;->just(Ljava/lang/Object;)Lio/reactivex/Single;
|
||||||
move-result-object p0
|
move-result-object p0
|
||||||
return-object p0
|
return-object p0
|
||||||
""",
|
"""
|
||||||
listOf(ExternalLabel("show_video_ads", mutableMethod.instruction(0)))
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Spoof showAds JSON field
|
// Spoof showAds JSON field
|
||||||
with(ContentConfigShowAdsFingerprint.result!!) {
|
with(ContentConfigShowAdsFingerprint.result!!) {
|
||||||
mutableMethod.addInstructions(0, """
|
mutableMethod.addInstructions(0, """
|
||||||
${createConditionInstructions()}
|
|
||||||
const/4 v0, 0
|
const/4 v0, 0
|
||||||
:show_video_ads
|
|
||||||
return v0
|
return v0
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
@@ -69,35 +52,9 @@ class VideoAdsPatch : BytecodePatch(
|
|||||||
|
|
||||||
// Block playAds call
|
// Block playAds call
|
||||||
with(AdsManagerFingerprint.result!!) {
|
with(AdsManagerFingerprint.result!!) {
|
||||||
mutableMethod.addInstructions(
|
mutableMethod.addInstruction(0, "return-void")
|
||||||
0,
|
|
||||||
"""
|
|
||||||
${createConditionInstructions()}
|
|
||||||
return-void
|
|
||||||
""",
|
|
||||||
listOf(ExternalLabel("show_video_ads", mutableMethod.instruction(0)))
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SettingsPatch.PreferenceScreen.ADS.CLIENT_SIDE.addPreferences(
|
|
||||||
SwitchPreference(
|
|
||||||
"revanced_block_video_ads",
|
|
||||||
StringResource(
|
|
||||||
"revanced_block_video_ads",
|
|
||||||
"Block video ads"
|
|
||||||
),
|
|
||||||
true,
|
|
||||||
StringResource(
|
|
||||||
"revanced_block_video_ads_on",
|
|
||||||
"Video ads are blocked"
|
|
||||||
),
|
|
||||||
StringResource(
|
|
||||||
"revanced_block_video_ads_off",
|
|
||||||
"Video ads are unblocked"
|
|
||||||
),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return PatchResultSuccess()
|
return PatchResultSuccess()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
package app.revanced.patches.twitch.chat.antidelete.fingerprints
|
|
||||||
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
|
||||||
|
|
||||||
object ChatUtilCreateDeletedSpanFingerprint : MethodFingerprint(
|
|
||||||
customFingerprint = { methodDef ->
|
|
||||||
methodDef.definingClass.endsWith("/ChatUtil\$Companion;") && methodDef.name == "createDeletedSpanFromChatMessageSpan"
|
|
||||||
}
|
|
||||||
)
|
|
||||||
@@ -6,19 +6,13 @@ import app.revanced.patcher.annotation.Version
|
|||||||
import app.revanced.patcher.data.BytecodeContext
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.*
|
import app.revanced.patcher.extensions.*
|
||||||
import app.revanced.patcher.patch.*
|
import app.revanced.patcher.patch.*
|
||||||
import app.revanced.patcher.patch.annotations.DependsOn
|
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
import app.revanced.patcher.patch.annotations.Patch
|
||||||
import app.revanced.patcher.util.smali.ExternalLabel
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.ArrayResource
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.ListPreference
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
|
||||||
import app.revanced.patches.twitch.chat.antidelete.annotations.ShowDeletedMessagesCompatibility
|
import app.revanced.patches.twitch.chat.antidelete.annotations.ShowDeletedMessagesCompatibility
|
||||||
import app.revanced.patches.twitch.chat.antidelete.fingerprints.*
|
import app.revanced.patches.twitch.chat.antidelete.fingerprints.*
|
||||||
import app.revanced.patches.twitch.misc.integrations.patch.IntegrationsPatch
|
import org.jf.dexlib2.Opcode
|
||||||
import app.revanced.patches.twitch.misc.settings.bytecode.patch.SettingsPatch
|
import org.jf.dexlib2.builder.instruction.BuilderInstruction10x
|
||||||
|
|
||||||
@Patch
|
@Patch
|
||||||
@DependsOn([IntegrationsPatch::class, SettingsPatch::class])
|
|
||||||
@Name("show-deleted-messages")
|
@Name("show-deleted-messages")
|
||||||
@Description("Shows deleted chat messages behind a clickable spoiler.")
|
@Description("Shows deleted chat messages behind a clickable spoiler.")
|
||||||
@ShowDeletedMessagesCompatibility
|
@ShowDeletedMessagesCompatibility
|
||||||
@@ -27,76 +21,24 @@ class ShowDeletedMessagesPatch : BytecodePatch(
|
|||||||
listOf(
|
listOf(
|
||||||
SetHasModAccessFingerprint,
|
SetHasModAccessFingerprint,
|
||||||
DeletedMessageClickableSpanCtorFingerprint,
|
DeletedMessageClickableSpanCtorFingerprint,
|
||||||
ChatUtilCreateDeletedSpanFingerprint
|
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
private fun createSpoilerConditionInstructions(register: String = "v0") = """
|
|
||||||
invoke-static {}, Lapp/revanced/twitch/patches/ShowDeletedMessagesPatch;->shouldUseSpoiler()Z
|
|
||||||
move-result $register
|
|
||||||
if-eqz $register, :no_spoiler
|
|
||||||
"""
|
|
||||||
|
|
||||||
override fun execute(context: BytecodeContext): PatchResult {
|
override fun execute(context: BytecodeContext): PatchResult {
|
||||||
// Spoiler mode: Force set hasModAccess member to true in constructor
|
// Force set hasModAccess member to true in constructor
|
||||||
with(DeletedMessageClickableSpanCtorFingerprint.result!!.mutableMethod) {
|
with(DeletedMessageClickableSpanCtorFingerprint.result!!.mutableMethod) {
|
||||||
addInstructions(
|
addInstructions(
|
||||||
implementation!!.instructions.lastIndex, /* place in front of return-void */
|
implementation!!.instructions.lastIndex, /* place in front of return-void */
|
||||||
"""
|
"""
|
||||||
${createSpoilerConditionInstructions()}
|
|
||||||
const/4 v0, 1
|
const/4 v0, 1
|
||||||
iput-boolean v0, p0, $definingClass->hasModAccess:Z
|
iput-boolean v0, p0, $definingClass->hasModAccess:Z
|
||||||
""",
|
|
||||||
listOf(ExternalLabel("no_spoiler", instruction(implementation!!.instructions.lastIndex)))
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Spoiler mode: Disable setHasModAccess setter
|
|
||||||
with(SetHasModAccessFingerprint.result!!) {
|
|
||||||
mutableMethod.addInstruction(0, "return-void")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cross-out mode: Reformat span of deleted message
|
|
||||||
with(ChatUtilCreateDeletedSpanFingerprint.result!!) {
|
|
||||||
mutableMethod.addInstructions(
|
|
||||||
0,
|
|
||||||
"""
|
"""
|
||||||
invoke-static {p2}, Lapp/revanced/twitch/patches/ShowDeletedMessagesPatch;->reformatDeletedMessage(Landroid/text/Spanned;)Landroid/text/Spanned;
|
|
||||||
move-result-object v0
|
|
||||||
if-eqz v0, :no_reformat
|
|
||||||
return-object v0
|
|
||||||
""",
|
|
||||||
listOf(ExternalLabel("no_reformat", mutableMethod.instruction(0)))
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
SettingsPatch.PreferenceScreen.CHAT.GENERAL.addPreferences(
|
// Disable setHasModAccess setter
|
||||||
ListPreference(
|
with(SetHasModAccessFingerprint.result!!.mutableMethod.implementation!!) {
|
||||||
"revanced_show_deleted_messages",
|
addInstruction(0, BuilderInstruction10x(Opcode.RETURN_VOID))
|
||||||
StringResource(
|
}
|
||||||
"revanced_show_deleted_messages_title",
|
|
||||||
"Show deleted messages"
|
|
||||||
),
|
|
||||||
ArrayResource(
|
|
||||||
"revanced_deleted_messages",
|
|
||||||
listOf(
|
|
||||||
StringResource("revanced_deleted_messages_hide", "Do not show deleted messages"),
|
|
||||||
StringResource("revanced_deleted_messages_spoiler", "Hide deleted messages behind a spoiler"),
|
|
||||||
StringResource("revanced_deleted_messages_cross_out", "Show deleted messages as crossed-out text")
|
|
||||||
)
|
|
||||||
),
|
|
||||||
ArrayResource(
|
|
||||||
"revanced_deleted_messages_values",
|
|
||||||
listOf(
|
|
||||||
StringResource("key_revanced_deleted_messages_hide", "hide"),
|
|
||||||
StringResource("key_revanced_deleted_messages_spoiler", "spoiler"),
|
|
||||||
StringResource("key_revanced_deleted_messages_cross_out", "cross-out")
|
|
||||||
)
|
|
||||||
),
|
|
||||||
"cross-out"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
SettingsPatch.addString("revanced_deleted_msg", "message deleted")
|
|
||||||
|
|
||||||
return PatchResultSuccess()
|
return PatchResultSuccess()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,19 +8,13 @@ import app.revanced.patcher.extensions.addInstructions
|
|||||||
import app.revanced.patcher.patch.BytecodePatch
|
import app.revanced.patcher.patch.BytecodePatch
|
||||||
import app.revanced.patcher.patch.PatchResult
|
import app.revanced.patcher.patch.PatchResult
|
||||||
import app.revanced.patcher.patch.PatchResultSuccess
|
import app.revanced.patcher.patch.PatchResultSuccess
|
||||||
import app.revanced.patcher.patch.annotations.DependsOn
|
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
import app.revanced.patcher.patch.annotations.Patch
|
||||||
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.SwitchPreference
|
|
||||||
import app.revanced.patches.twitch.debug.annotations.DebugModeCompatibility
|
import app.revanced.patches.twitch.debug.annotations.DebugModeCompatibility
|
||||||
import app.revanced.patches.twitch.debug.fingerprints.IsDebugConfigEnabledFingerprint
|
import app.revanced.patches.twitch.debug.fingerprints.IsDebugConfigEnabledFingerprint
|
||||||
import app.revanced.patches.twitch.debug.fingerprints.IsOmVerificationEnabledFingerprint
|
import app.revanced.patches.twitch.debug.fingerprints.IsOmVerificationEnabledFingerprint
|
||||||
import app.revanced.patches.twitch.debug.fingerprints.ShouldShowDebugOptionsFingerprint
|
import app.revanced.patches.twitch.debug.fingerprints.ShouldShowDebugOptionsFingerprint
|
||||||
import app.revanced.patches.twitch.misc.integrations.patch.IntegrationsPatch
|
|
||||||
import app.revanced.patches.twitch.misc.settings.bytecode.patch.SettingsPatch
|
|
||||||
|
|
||||||
@Patch(false)
|
@Patch(false)
|
||||||
@DependsOn([IntegrationsPatch::class, SettingsPatch::class])
|
|
||||||
@Name("debug-mode")
|
@Name("debug-mode")
|
||||||
@Description("Enables Twitch's internal debugging mode.")
|
@Description("Enables Twitch's internal debugging mode.")
|
||||||
@DebugModeCompatibility
|
@DebugModeCompatibility
|
||||||
@@ -43,34 +37,13 @@ class DebugModePatch : BytecodePatch(
|
|||||||
addInstructions(
|
addInstructions(
|
||||||
0,
|
0,
|
||||||
"""
|
"""
|
||||||
invoke-static {}, Lapp/revanced/twitch/patches/DebugModePatch;->isDebugModeEnabled()Z
|
const/4 v0, 0x1
|
||||||
move-result v0
|
|
||||||
return v0
|
return v0
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SettingsPatch.PreferenceScreen.MISC.OTHER.addPreferences(
|
|
||||||
SwitchPreference(
|
|
||||||
"revanced_debug_mode",
|
|
||||||
StringResource(
|
|
||||||
"revanced_debug_mode_enable",
|
|
||||||
"Enable debug mode"
|
|
||||||
),
|
|
||||||
false,
|
|
||||||
StringResource(
|
|
||||||
"revanced_debug_mode_on",
|
|
||||||
"Debug mode is enabled (not recommended)"
|
|
||||||
),
|
|
||||||
StringResource(
|
|
||||||
"revanced_debug_mode_off",
|
|
||||||
"Debug mode is disabled"
|
|
||||||
),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return PatchResultSuccess()
|
return PatchResultSuccess()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
package app.revanced.patches.twitch.misc.settings.annotations
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Compatibility
|
|
||||||
import app.revanced.patcher.annotation.Package
|
|
||||||
|
|
||||||
@Compatibility([Package("tv.twitch.android.app")])
|
|
||||||
@Target(AnnotationTarget.CLASS)
|
|
||||||
@Retention(AnnotationRetention.RUNTIME)
|
|
||||||
internal annotation class SettingsCompatibility
|
|
||||||
@@ -1,195 +0,0 @@
|
|||||||
package app.revanced.patches.twitch.misc.settings.bytecode.patch
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Description
|
|
||||||
import app.revanced.patcher.annotation.Name
|
|
||||||
import app.revanced.patcher.annotation.Version
|
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
|
||||||
import app.revanced.patcher.extensions.*
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprintResult
|
|
||||||
import app.revanced.patcher.patch.BytecodePatch
|
|
||||||
import app.revanced.patcher.patch.PatchResult
|
|
||||||
import app.revanced.patcher.patch.PatchResultSuccess
|
|
||||||
import app.revanced.patcher.patch.annotations.DependsOn
|
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
|
||||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableField.Companion.toMutable
|
|
||||||
import app.revanced.patcher.util.smali.ExternalLabel
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.PreferenceCategory
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
|
||||||
import app.revanced.patches.shared.settings.util.AbstractPreferenceScreen
|
|
||||||
import app.revanced.patches.twitch.misc.integrations.patch.IntegrationsPatch
|
|
||||||
import app.revanced.patches.twitch.misc.settings.annotations.SettingsCompatibility
|
|
||||||
import app.revanced.patches.twitch.misc.settings.components.CustomPreferenceCategory
|
|
||||||
import app.revanced.patches.twitch.misc.settings.fingerprints.*
|
|
||||||
import app.revanced.patches.twitch.misc.settings.resource.patch.SettingsResourcePatch
|
|
||||||
import org.jf.dexlib2.AccessFlags
|
|
||||||
import org.jf.dexlib2.immutable.ImmutableField
|
|
||||||
|
|
||||||
@Patch
|
|
||||||
@DependsOn([IntegrationsPatch::class, SettingsResourcePatch::class])
|
|
||||||
@Name("settings")
|
|
||||||
@Description("Adds settings menu to Twitch.")
|
|
||||||
@SettingsCompatibility
|
|
||||||
@Version("0.0.1")
|
|
||||||
class SettingsPatch : BytecodePatch(
|
|
||||||
listOf(
|
|
||||||
SettingsActivityOnCreateFingerprint,
|
|
||||||
SettingsMenuItemEnumFingerprint,
|
|
||||||
MenuGroupsUpdatedFingerprint,
|
|
||||||
MenuGroupsOnClickFingerprint
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
override fun execute(context: BytecodeContext): PatchResult {
|
|
||||||
// Hook onCreate to handle fragment creation
|
|
||||||
with(SettingsActivityOnCreateFingerprint.result!!) {
|
|
||||||
val insertIndex = mutableMethod.implementation!!.instructions.size - 2
|
|
||||||
mutableMethod.addInstructions(
|
|
||||||
insertIndex,
|
|
||||||
"""
|
|
||||||
invoke-static {p0}, $SETTINGS_HOOKS_CLASS->handleSettingsCreation(Landroidx/appcompat/app/AppCompatActivity;)Z
|
|
||||||
move-result v0
|
|
||||||
if-eqz v0, :no_rv_settings_init
|
|
||||||
return-void
|
|
||||||
""",
|
|
||||||
listOf(ExternalLabel("no_rv_settings_init", mutableMethod.instruction(insertIndex)))
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create new menu item for settings menu
|
|
||||||
with(SettingsMenuItemEnumFingerprint.result!!) {
|
|
||||||
injectMenuItem(
|
|
||||||
REVANCED_SETTINGS_MENU_ITEM_NAME,
|
|
||||||
REVANCED_SETTINGS_MENU_ITEM_ID,
|
|
||||||
REVANCED_SETTINGS_MENU_ITEM_TITLE_RES,
|
|
||||||
REVANCED_SETTINGS_MENU_ITEM_ICON_RES
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Intercept settings menu creation and add new menu item
|
|
||||||
with(MenuGroupsUpdatedFingerprint.result!!) {
|
|
||||||
mutableMethod.addInstructions(
|
|
||||||
0,
|
|
||||||
"""
|
|
||||||
sget-object v0, $MENU_ITEM_ENUM_CLASS->$REVANCED_SETTINGS_MENU_ITEM_NAME:$MENU_ITEM_ENUM_CLASS
|
|
||||||
invoke-static {p1, v0}, $SETTINGS_HOOKS_CLASS->handleSettingMenuCreation(Ljava/util/List;Ljava/lang/Object;)Ljava/util/List;
|
|
||||||
move-result-object p1
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Intercept onclick events for the settings menu
|
|
||||||
with(MenuGroupsOnClickFingerprint.result!!) {
|
|
||||||
val insertIndex = 0
|
|
||||||
mutableMethod.addInstructions(
|
|
||||||
insertIndex,
|
|
||||||
"""
|
|
||||||
invoke-static {p1}, $SETTINGS_HOOKS_CLASS->handleSettingMenuOnClick(Ljava/lang/Enum;)Z
|
|
||||||
move-result p2
|
|
||||||
if-eqz p2, :no_rv_settings_onclick
|
|
||||||
sget-object p1, $MENU_DISMISS_EVENT_CLASS->INSTANCE:$MENU_DISMISS_EVENT_CLASS
|
|
||||||
invoke-virtual {p0, p1}, Ltv/twitch/android/core/mvp/viewdelegate/RxViewDelegate;->pushEvent(Ltv/twitch/android/core/mvp/viewdelegate/ViewDelegateEvent;)V
|
|
||||||
return-void
|
|
||||||
""",
|
|
||||||
listOf(ExternalLabel("no_rv_settings_onclick", mutableMethod.instruction(insertIndex)))
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
addString("revanced_settings", "ReVanced Settings", false)
|
|
||||||
addString("revanced_reboot_message", "Twitch needs to restart to apply your changes. Restart now?", false)
|
|
||||||
addString("revanced_reboot", "Restart", false)
|
|
||||||
addString("revanced_cancel", "Cancel", false)
|
|
||||||
|
|
||||||
return PatchResultSuccess()
|
|
||||||
}
|
|
||||||
|
|
||||||
internal companion object {
|
|
||||||
fun addString(identifier: String, value: String, formatted: Boolean = true) =
|
|
||||||
SettingsResourcePatch.addString(identifier, value, formatted)
|
|
||||||
|
|
||||||
fun addPreferenceScreen(preferenceScreen: app.revanced.patches.shared.settings.preference.impl.PreferenceScreen) =
|
|
||||||
SettingsResourcePatch.addPreferenceScreen(preferenceScreen)
|
|
||||||
|
|
||||||
/* Private members */
|
|
||||||
private const val REVANCED_SETTINGS_MENU_ITEM_NAME = "RevancedSettings"
|
|
||||||
private const val REVANCED_SETTINGS_MENU_ITEM_ID = 0x7
|
|
||||||
private const val REVANCED_SETTINGS_MENU_ITEM_TITLE_RES = "revanced_settings"
|
|
||||||
private const val REVANCED_SETTINGS_MENU_ITEM_ICON_RES = "ic_settings"
|
|
||||||
|
|
||||||
private const val MENU_ITEM_ENUM_CLASS = "Ltv/twitch/android/feature/settings/menu/SettingsMenuItem;"
|
|
||||||
private const val MENU_DISMISS_EVENT_CLASS = "Ltv/twitch/android/feature/settings/menu/SettingsMenuViewDelegate\$Event\$OnDismissClicked;"
|
|
||||||
|
|
||||||
private const val INTEGRATIONS_PACKAGE = "app/revanced/twitch"
|
|
||||||
private const val SETTINGS_HOOKS_CLASS = "L$INTEGRATIONS_PACKAGE/settingsmenu/SettingsHooks;"
|
|
||||||
private const val REVANCED_UTILS_CLASS = "L$INTEGRATIONS_PACKAGE/utils/ReVancedUtils;"
|
|
||||||
|
|
||||||
private fun MethodFingerprintResult.injectMenuItem(
|
|
||||||
name: String,
|
|
||||||
value: Int,
|
|
||||||
titleResourceName: String,
|
|
||||||
iconResourceName: String
|
|
||||||
) {
|
|
||||||
// Add new static enum member field
|
|
||||||
mutableClass.staticFields.add(
|
|
||||||
ImmutableField(
|
|
||||||
mutableMethod.definingClass,
|
|
||||||
name,
|
|
||||||
MENU_ITEM_ENUM_CLASS,
|
|
||||||
AccessFlags.PUBLIC or AccessFlags.FINAL or AccessFlags.ENUM or AccessFlags.STATIC,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null
|
|
||||||
).toMutable()
|
|
||||||
)
|
|
||||||
|
|
||||||
// Add initializer for the new enum member
|
|
||||||
mutableMethod.addInstructions(
|
|
||||||
mutableMethod.implementation!!.instructions.size - 4,
|
|
||||||
"""
|
|
||||||
new-instance v0, $MENU_ITEM_ENUM_CLASS
|
|
||||||
const-string v1, "$titleResourceName"
|
|
||||||
invoke-static {v1}, $REVANCED_UTILS_CLASS->getStringId(Ljava/lang/String;)I
|
|
||||||
move-result v1
|
|
||||||
const-string v3, "$iconResourceName"
|
|
||||||
invoke-static {v3}, $REVANCED_UTILS_CLASS->getDrawableId(Ljava/lang/String;)I
|
|
||||||
move-result v3
|
|
||||||
const-string v4, "$name"
|
|
||||||
const/4 v5, $value
|
|
||||||
invoke-direct {v0, v4, v5, v1, v3}, $MENU_ITEM_ENUM_CLASS-><init>(Ljava/lang/String;III)V
|
|
||||||
sput-object v0, $MENU_ITEM_ENUM_CLASS->$name:$MENU_ITEM_ENUM_CLASS
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Preference screens patches should add their settings to.
|
|
||||||
*/
|
|
||||||
internal object PreferenceScreen : AbstractPreferenceScreen() {
|
|
||||||
val ADS = CustomScreen("ads", "Ads", "Ad blocking settings")
|
|
||||||
val CHAT = CustomScreen("chat", "Chat", "Chat settings")
|
|
||||||
val MISC = CustomScreen("misc", "Misc", "Miscellaneous patches")
|
|
||||||
|
|
||||||
internal class CustomScreen(key: String, title: String, summary: String) : Screen(key, title, summary) {
|
|
||||||
/* Categories */
|
|
||||||
val GENERAL = CustomCategory("general", "General settings")
|
|
||||||
val OTHER = CustomCategory("other", "Other settings")
|
|
||||||
val CLIENT_SIDE = CustomCategory("client_ads", "Client-side ads")
|
|
||||||
|
|
||||||
internal inner class CustomCategory(key: String, title: String) : Screen.Category(key, title) {
|
|
||||||
/* For Twitch, we need to load our CustomPreferenceCategory class instead of the default one. */
|
|
||||||
override fun transform(): PreferenceCategory {
|
|
||||||
return CustomPreferenceCategory(
|
|
||||||
key,
|
|
||||||
StringResource("${key}_title", title),
|
|
||||||
preferences.sortedBy { it.title.value }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun commit(screen: app.revanced.patches.shared.settings.preference.impl.PreferenceScreen) {
|
|
||||||
addPreferenceScreen(screen)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun close() = PreferenceScreen.close()
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
package app.revanced.patches.twitch.misc.settings.components
|
|
||||||
|
|
||||||
import app.revanced.patches.shared.settings.preference.BasePreference
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.PreferenceCategory
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Customized preference category for Twitch.
|
|
||||||
*
|
|
||||||
* @param key The key of the preference.
|
|
||||||
* @param title The title of the preference.
|
|
||||||
* @param preferences Child preferences of this category.
|
|
||||||
*/
|
|
||||||
internal open class CustomPreferenceCategory(
|
|
||||||
key: String,
|
|
||||||
title: StringResource,
|
|
||||||
preferences: List<BasePreference>
|
|
||||||
) : PreferenceCategory(key, title, preferences) {
|
|
||||||
override val tag: String = "app.revanced.twitch.settingsmenu.preference.CustomPreferenceCategory"
|
|
||||||
}
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
package app.revanced.patches.twitch.misc.settings.fingerprints
|
|
||||||
|
|
||||||
import app.revanced.patcher.extensions.or
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
|
||||||
import org.jf.dexlib2.AccessFlags
|
|
||||||
|
|
||||||
object MenuGroupsOnClickFingerprint : MethodFingerprint(
|
|
||||||
"V",
|
|
||||||
AccessFlags.PRIVATE or AccessFlags.STATIC or AccessFlags.FINAL,
|
|
||||||
listOf("L", "L", "L"),
|
|
||||||
customFingerprint = { methodDef ->
|
|
||||||
methodDef.definingClass.endsWith("/SettingsMenuViewDelegate;")
|
|
||||||
&& methodDef.name.contains("render")
|
|
||||||
}
|
|
||||||
)
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
package app.revanced.patches.twitch.misc.settings.fingerprints
|
|
||||||
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
|
||||||
|
|
||||||
object MenuGroupsUpdatedFingerprint : MethodFingerprint(
|
|
||||||
customFingerprint = { methodDef ->
|
|
||||||
methodDef.definingClass.endsWith("/SettingsMenuPresenter\$Event\$MenuGroupsUpdated;")
|
|
||||||
&& methodDef.name == "<init>"
|
|
||||||
}
|
|
||||||
)
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
package app.revanced.patches.twitch.misc.settings.fingerprints
|
|
||||||
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
|
||||||
|
|
||||||
object SettingsActivityOnCreateFingerprint : MethodFingerprint(
|
|
||||||
customFingerprint = { methodDef ->
|
|
||||||
methodDef.definingClass.endsWith("/SettingsActivity;") &&
|
|
||||||
methodDef.name == "onCreate"
|
|
||||||
}
|
|
||||||
)
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
package app.revanced.patches.twitch.misc.settings.fingerprints
|
|
||||||
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
|
||||||
|
|
||||||
object SettingsMenuItemEnumFingerprint : MethodFingerprint(
|
|
||||||
customFingerprint = { methodDef ->
|
|
||||||
methodDef.definingClass.endsWith("/SettingsMenuItem;") && methodDef.name == "<clinit>"
|
|
||||||
}
|
|
||||||
)
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
package app.revanced.patches.twitch.misc.settings.resource.patch
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Name
|
|
||||||
import app.revanced.patcher.annotation.Version
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.ArrayResource
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.PreferenceScreen
|
|
||||||
import app.revanced.patches.shared.settings.resource.patch.AbstractSettingsResourcePatch
|
|
||||||
import app.revanced.patches.twitch.misc.settings.annotations.SettingsCompatibility
|
|
||||||
|
|
||||||
@Name("settings-resource-patch")
|
|
||||||
@SettingsCompatibility
|
|
||||||
@Version("0.0.1")
|
|
||||||
class SettingsResourcePatch : AbstractSettingsResourcePatch(
|
|
||||||
"revanced_prefs",
|
|
||||||
"twitch/settings"
|
|
||||||
) {
|
|
||||||
internal companion object {
|
|
||||||
/* Companion delegates */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a new string to the resources.
|
|
||||||
*
|
|
||||||
* @param identifier The key of the string.
|
|
||||||
* @param value The value of the string.
|
|
||||||
* @throws IllegalArgumentException if the string already exists.
|
|
||||||
*/
|
|
||||||
fun addString(identifier: String, value: String, formatted: Boolean) =
|
|
||||||
AbstractSettingsResourcePatch.addString(identifier, value, formatted)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add an array to the resources.
|
|
||||||
*
|
|
||||||
* @param arrayResource The array resource to add.
|
|
||||||
*/
|
|
||||||
fun addArray(arrayResource: ArrayResource) = AbstractSettingsResourcePatch.addArray(arrayResource)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a preference to the settings.
|
|
||||||
*
|
|
||||||
* @param preferenceScreen The name of the preference screen.
|
|
||||||
*/
|
|
||||||
fun addPreferenceScreen(preferenceScreen: PreferenceScreen) = AbstractSettingsResourcePatch.addPreference(preferenceScreen)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.45.36")
|
"com.google.android.youtube", arrayOf("17.36.37", "17.41.37", "17.42.35", "17.43.36", "17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -17,14 +17,14 @@ import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
|
|||||||
import app.revanced.patches.youtube.ad.general.annotation.GeneralAdsCompatibility
|
import app.revanced.patches.youtube.ad.general.annotation.GeneralAdsCompatibility
|
||||||
import app.revanced.patches.youtube.ad.general.bytecode.fingerprints.ReelConstructorFingerprint
|
import app.revanced.patches.youtube.ad.general.bytecode.fingerprints.ReelConstructorFingerprint
|
||||||
import app.revanced.patches.youtube.ad.general.resource.patch.GeneralAdsResourcePatch
|
import app.revanced.patches.youtube.ad.general.resource.patch.GeneralAdsResourcePatch
|
||||||
import app.revanced.patches.youtube.misc.fix.verticalscroll.patch.VerticalScrollPatch
|
|
||||||
import org.jf.dexlib2.iface.instruction.TwoRegisterInstruction
|
import org.jf.dexlib2.iface.instruction.TwoRegisterInstruction
|
||||||
import org.jf.dexlib2.iface.instruction.formats.Instruction31i
|
import org.jf.dexlib2.iface.instruction.formats.Instruction31i
|
||||||
import org.jf.dexlib2.iface.instruction.formats.Instruction35c
|
import org.jf.dexlib2.iface.instruction.formats.Instruction35c
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
|
||||||
@Patch
|
@Patch
|
||||||
@DependsOn([GeneralAdsResourcePatch::class, VerticalScrollPatch::class])
|
@DependsOn([GeneralAdsResourcePatch::class])
|
||||||
@Name("general-ads")
|
@Name("general-ads")
|
||||||
@Description("Removes general ads.")
|
@Description("Removes general ads.")
|
||||||
@GeneralAdsCompatibility
|
@GeneralAdsCompatibility
|
||||||
|
|||||||
@@ -7,10 +7,10 @@ import app.revanced.patcher.patch.PatchResultSuccess
|
|||||||
import app.revanced.patcher.patch.ResourcePatch
|
import app.revanced.patcher.patch.ResourcePatch
|
||||||
import app.revanced.patcher.patch.annotations.DependsOn
|
import app.revanced.patcher.patch.annotations.DependsOn
|
||||||
import app.revanced.patches.shared.mapping.misc.patch.ResourceMappingPatch
|
import app.revanced.patches.shared.mapping.misc.patch.ResourceMappingPatch
|
||||||
import app.revanced.patches.shared.settings.preference.impl.InputType
|
import app.revanced.patches.shared.settings.impl.InputType
|
||||||
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
import app.revanced.patches.shared.settings.impl.StringResource
|
||||||
import app.revanced.patches.shared.settings.preference.impl.SwitchPreference
|
import app.revanced.patches.shared.settings.impl.SwitchPreference
|
||||||
import app.revanced.patches.shared.settings.preference.impl.TextPreference
|
import app.revanced.patches.shared.settings.impl.TextPreference
|
||||||
import app.revanced.patches.youtube.ad.general.annotation.GeneralAdsCompatibility
|
import app.revanced.patches.youtube.ad.general.annotation.GeneralAdsCompatibility
|
||||||
import app.revanced.patches.youtube.misc.litho.filter.patch.LithoFilterPatch
|
import app.revanced.patches.youtube.misc.litho.filter.patch.LithoFilterPatch
|
||||||
import app.revanced.patches.youtube.misc.manifest.patch.FixLocaleConfigErrorPatch
|
import app.revanced.patches.youtube.misc.manifest.patch.FixLocaleConfigErrorPatch
|
||||||
@@ -187,7 +187,7 @@ class GeneralAdsResourcePatch : ResourcePatch {
|
|||||||
"Chapter teasers are shown"
|
"Chapter teasers are shown"
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
app.revanced.patches.shared.settings.preference.impl.PreferenceScreen(
|
app.revanced.patches.shared.settings.impl.PreferenceScreen(
|
||||||
"revanced_adremover_custom",
|
"revanced_adremover_custom",
|
||||||
StringResource("revanced_adremover_custom_title", "Custom filter"),
|
StringResource("revanced_adremover_custom_title", "Custom filter"),
|
||||||
listOf(
|
listOf(
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.45.36")
|
"com.google.android.youtube", arrayOf("17.36.37", "17.41.37", "17.42.35", "17.43.36", "17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -12,13 +12,13 @@ import app.revanced.patcher.patch.PatchResultSuccess
|
|||||||
import app.revanced.patcher.patch.annotations.DependsOn
|
import app.revanced.patcher.patch.annotations.DependsOn
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
import app.revanced.patcher.patch.annotations.Patch
|
||||||
import app.revanced.patcher.util.smali.ExternalLabel
|
import app.revanced.patcher.util.smali.ExternalLabel
|
||||||
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.SwitchPreference
|
|
||||||
import app.revanced.patches.youtube.ad.video.annotations.VideoAdsCompatibility
|
import app.revanced.patches.youtube.ad.video.annotations.VideoAdsCompatibility
|
||||||
import app.revanced.patches.youtube.ad.video.fingerprints.LoadVideoAdsFingerprint
|
import app.revanced.patches.youtube.ad.video.fingerprints.LoadVideoAdsFingerprint
|
||||||
import app.revanced.patches.youtube.misc.fix.playback.patch.FixPlaybackPatch
|
|
||||||
import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch
|
import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch
|
||||||
|
import app.revanced.patches.youtube.misc.playback.fix.patch.FixPlaybackPatch
|
||||||
import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch
|
import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch
|
||||||
|
import app.revanced.patches.shared.settings.impl.StringResource
|
||||||
|
import app.revanced.patches.shared.settings.impl.SwitchPreference
|
||||||
|
|
||||||
@Patch
|
@Patch
|
||||||
@DependsOn([IntegrationsPatch::class, SettingsPatch::class, FixPlaybackPatch::class])
|
@DependsOn([IntegrationsPatch::class, SettingsPatch::class, FixPlaybackPatch::class])
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.45.36")
|
"com.google.android.youtube", arrayOf("17.36.37", "17.41.37", "17.42.35", "17.43.36", "17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -8,11 +8,10 @@ import app.revanced.patcher.patch.PatchResult
|
|||||||
import app.revanced.patcher.patch.PatchResultSuccess
|
import app.revanced.patcher.patch.PatchResultSuccess
|
||||||
import app.revanced.patcher.patch.ResourcePatch
|
import app.revanced.patcher.patch.ResourcePatch
|
||||||
import app.revanced.patcher.patch.annotations.DependsOn
|
import app.revanced.patcher.patch.annotations.DependsOn
|
||||||
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
import app.revanced.patches.shared.settings.impl.*
|
||||||
import app.revanced.patches.shared.settings.preference.impl.SwitchPreference
|
import app.revanced.patches.shared.settings.impl.StringResource
|
||||||
import app.revanced.patches.shared.settings.preference.impl.TextPreference
|
import app.revanced.patches.shared.settings.impl.SwitchPreference
|
||||||
import app.revanced.patches.shared.settings.preference.impl.InputType
|
import app.revanced.patches.shared.settings.impl.TextPreference
|
||||||
import app.revanced.patches.shared.settings.preference.impl.PreferenceScreen
|
|
||||||
import app.revanced.patches.youtube.interaction.downloads.annotation.DownloadsCompatibility
|
import app.revanced.patches.youtube.interaction.downloads.annotation.DownloadsCompatibility
|
||||||
import app.revanced.patches.youtube.misc.manifest.patch.FixLocaleConfigErrorPatch
|
import app.revanced.patches.youtube.misc.manifest.patch.FixLocaleConfigErrorPatch
|
||||||
import app.revanced.patches.youtube.misc.playercontrols.resource.patch.BottomControlsResourcePatch
|
import app.revanced.patches.youtube.misc.playercontrols.resource.patch.BottomControlsResourcePatch
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.45.36")
|
"com.google.android.youtube", arrayOf("17.36.37", "17.41.37", "17.42.35", "17.43.36", "17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ import app.revanced.patches.youtube.interaction.seekbar.fingerprints.SeekbarTapp
|
|||||||
import app.revanced.patches.youtube.interaction.seekbar.fingerprints.SeekbarTappingParentFingerprint
|
import app.revanced.patches.youtube.interaction.seekbar.fingerprints.SeekbarTappingParentFingerprint
|
||||||
import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch
|
import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch
|
||||||
import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch
|
import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch
|
||||||
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
import app.revanced.patches.shared.settings.impl.StringResource
|
||||||
import app.revanced.patches.shared.settings.preference.impl.SwitchPreference
|
import app.revanced.patches.shared.settings.impl.SwitchPreference
|
||||||
import org.jf.dexlib2.Opcode
|
import org.jf.dexlib2.Opcode
|
||||||
import org.jf.dexlib2.builder.instruction.BuilderInstruction21t
|
import org.jf.dexlib2.builder.instruction.BuilderInstruction21t
|
||||||
import org.jf.dexlib2.iface.Method
|
import org.jf.dexlib2.iface.Method
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.45.36")
|
"com.google.android.youtube", arrayOf("17.36.37", "17.41.37", "17.42.35", "17.43.36", "17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -7,11 +7,11 @@ import app.revanced.patcher.patch.PatchResult
|
|||||||
import app.revanced.patcher.patch.PatchResultSuccess
|
import app.revanced.patcher.patch.PatchResultSuccess
|
||||||
import app.revanced.patcher.patch.ResourcePatch
|
import app.revanced.patcher.patch.ResourcePatch
|
||||||
import app.revanced.patcher.patch.annotations.DependsOn
|
import app.revanced.patcher.patch.annotations.DependsOn
|
||||||
import app.revanced.patches.shared.settings.preference.impl.PreferenceScreen
|
import app.revanced.patches.shared.settings.impl.*
|
||||||
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
import app.revanced.patches.shared.settings.impl.PreferenceScreen
|
||||||
import app.revanced.patches.shared.settings.preference.impl.SwitchPreference
|
import app.revanced.patches.shared.settings.impl.StringResource
|
||||||
import app.revanced.patches.shared.settings.preference.impl.TextPreference
|
import app.revanced.patches.shared.settings.impl.SwitchPreference
|
||||||
import app.revanced.patches.shared.settings.preference.impl.InputType
|
import app.revanced.patches.shared.settings.impl.TextPreference
|
||||||
import app.revanced.patches.youtube.interaction.swipecontrols.annotation.SwipeControlsCompatibility
|
import app.revanced.patches.youtube.interaction.swipecontrols.annotation.SwipeControlsCompatibility
|
||||||
import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch
|
import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch
|
||||||
import app.revanced.util.resources.ResourceUtils
|
import app.revanced.util.resources.ResourceUtils
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user