mirror of
https://github.com/ReVanced/revanced-patches.git
synced 2026-01-22 10:23:55 +00:00
Compare commits
479 Commits
v2.154.1-d
...
v2.141.0-d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ef9f85e8f4 | ||
|
|
edde860953 | ||
|
|
715d34400e | ||
|
|
cbfa7ce531 | ||
|
|
376053ea62 | ||
|
|
1d166b14d2 | ||
|
|
3dd0640a56 | ||
|
|
2686deeefe | ||
|
|
126a13269e | ||
|
|
60be0670df | ||
|
|
9a7e36cc26 | ||
|
|
67c7ece771 | ||
|
|
79130468bd | ||
|
|
1510365ae7 | ||
|
|
4289a49176 | ||
|
|
81634fa36b | ||
|
|
e5cb571bb8 | ||
|
|
35e8832af3 | ||
|
|
23bf905055 | ||
|
|
2e3d004027 | ||
|
|
cf33d30353 | ||
|
|
791dcb5c4a | ||
|
|
19546fb745 | ||
|
|
e0bf8fb403 | ||
|
|
f7644ae7d2 | ||
|
|
0965bb82f4 | ||
|
|
9c2e30d8d8 | ||
|
|
3a9078b1d8 | ||
|
|
4f757acaff | ||
|
|
041fb72603 | ||
|
|
af84aeb3d0 | ||
|
|
4da1d53e81 | ||
|
|
cb9786c4de | ||
|
|
9d9d938129 | ||
|
|
403e887503 | ||
|
|
401ebd073b | ||
|
|
69590fdf00 | ||
|
|
18f1222dae | ||
|
|
5451a52374 | ||
|
|
85e337c6ee | ||
|
|
37e9df2c7d | ||
|
|
e5e33f2323 | ||
|
|
a882d59235 | ||
|
|
02bb641469 | ||
|
|
54310c8114 | ||
|
|
632a083363 | ||
|
|
2e278d4f91 | ||
|
|
4f7911a190 | ||
|
|
920e72a9d6 | ||
|
|
059d2a9cbb | ||
|
|
2e72e15fb1 | ||
|
|
285169e27e | ||
|
|
aaa5bbf5d9 | ||
|
|
b3796d6551 | ||
|
|
801effdeb1 | ||
|
|
7a07f579ed | ||
|
|
e6e8f5d284 | ||
|
|
537c709965 | ||
|
|
20a7edff72 | ||
|
|
746c8242a6 | ||
|
|
526b312ae5 | ||
|
|
f736cfbc59 | ||
|
|
10329c24e6 | ||
|
|
8487688816 | ||
|
|
aafd89f1be | ||
|
|
7f9fb09fac | ||
|
|
0bfa4a7957 | ||
|
|
5988f6360b | ||
|
|
0973e74ec5 | ||
|
|
8196f26c54 | ||
|
|
91fa3bb306 | ||
|
|
5836d18dcf | ||
|
|
ded80febd4 | ||
|
|
1a822a5962 | ||
|
|
5ee123f0af | ||
|
|
ee6534c4b9 | ||
|
|
2f8b9110f6 | ||
|
|
efaf394d5b | ||
|
|
d65f44dbd2 | ||
|
|
df5646d1c3 | ||
|
|
879f9c5a61 | ||
|
|
557e270b39 | ||
|
|
e3ed9b44b8 | ||
|
|
5a904ce9be | ||
|
|
b7f4380ec1 | ||
|
|
bfda80c6ec | ||
|
|
b099d8b60b | ||
|
|
34045ea018 | ||
|
|
e9d5a5e0c7 | ||
|
|
ee966d88a2 | ||
|
|
e05dd024a2 | ||
|
|
a2717d1fa7 | ||
|
|
160cd3aa6e | ||
|
|
58f98a2b31 | ||
|
|
ec2419b047 | ||
|
|
79e6fcb8d5 | ||
|
|
ed70e8accc | ||
|
|
974a042e76 | ||
|
|
ebfac83aad | ||
|
|
b315b6f1c5 | ||
|
|
478ef397a1 | ||
|
|
8909a06bdf | ||
|
|
1381c3b3f2 | ||
|
|
5e28da188b | ||
|
|
e1c7d7a335 | ||
|
|
c0123af0b3 | ||
|
|
f4188fa996 | ||
|
|
3f2383c9e6 | ||
|
|
7caebd54f2 | ||
|
|
4a96d58415 | ||
|
|
5b161e4263 | ||
|
|
96d27675a7 | ||
|
|
a48af3c320 | ||
|
|
d64673ce03 | ||
|
|
33b7ec8709 | ||
|
|
e29803fd8a | ||
|
|
bfcf7a6dc4 | ||
|
|
b8b9ab6ef5 | ||
|
|
9c3d48c0ab | ||
|
|
c9564ee9aa | ||
|
|
1e0037e044 | ||
|
|
9fa40d8a57 | ||
|
|
fb9e091634 | ||
|
|
4fad9bc1cd | ||
|
|
a586d1c658 | ||
|
|
0849006601 | ||
|
|
a7eda355cd | ||
|
|
2612f55476 | ||
|
|
12b7308d60 | ||
|
|
2f626a34df | ||
|
|
82b33ff47f | ||
|
|
2e06b8d83f | ||
|
|
e85e6746c0 | ||
|
|
f72fd91082 | ||
|
|
816d8fed87 | ||
|
|
8beb6c4250 | ||
|
|
b40787f0c3 | ||
|
|
125fdfd7aa | ||
|
|
38eceb743f | ||
|
|
b5cb30c28a | ||
|
|
47fdda85ce | ||
|
|
bd5c64dbd7 | ||
|
|
e20e8896a2 | ||
|
|
3394b022c1 | ||
|
|
1866e1daa2 | ||
|
|
a30085fc56 | ||
|
|
303732ecfa | ||
|
|
534014094f | ||
|
|
cdc7086796 | ||
|
|
a2a3a887bb | ||
|
|
66f8061dfc | ||
|
|
f10d32f141 | ||
|
|
c2e5bd3139 | ||
|
|
8966b91f01 | ||
|
|
393f5105fb | ||
|
|
5a56fa11ac | ||
|
|
74da7c078b | ||
|
|
4d305b19c9 | ||
|
|
1d5fb1bfec | ||
|
|
8285b37b8d | ||
|
|
40cc03c3b9 | ||
|
|
56642b3b15 | ||
|
|
42c291160b | ||
|
|
f838ebbe8f | ||
|
|
df843686ce | ||
|
|
6887f92823 | ||
|
|
cbce50cef3 | ||
|
|
e77184730d | ||
|
|
2004d7951e | ||
|
|
7ab3c999a9 | ||
|
|
b9e875ce0d | ||
|
|
e9279c0921 | ||
|
|
03b9b94d85 | ||
|
|
d3e8a5508e | ||
|
|
8aba027794 | ||
|
|
1cb7129b70 | ||
|
|
fc6226d61d | ||
|
|
1a0012082a | ||
|
|
d2e6c45a56 | ||
|
|
a22750f66f | ||
|
|
c769c42465 | ||
|
|
895b4808fc | ||
|
|
324d0221d8 | ||
|
|
56b7a7d908 | ||
|
|
11a550a91f | ||
|
|
ba82fb8fc9 | ||
|
|
e348d96e85 | ||
|
|
2bf9a5420d | ||
|
|
04cdc9dd24 | ||
|
|
74f7d57971 | ||
|
|
836fb06c6b | ||
|
|
9a257c3f1f | ||
|
|
57cb30df48 | ||
|
|
622acc0d48 | ||
|
|
a17d929f75 | ||
|
|
54e8dd1c0d | ||
|
|
d906cd64d1 | ||
|
|
d45279feb2 | ||
|
|
823beebbc3 | ||
|
|
2ddc846878 | ||
|
|
03b565cf77 | ||
|
|
b45de8d048 | ||
|
|
297db08f9d | ||
|
|
c5e5323be4 | ||
|
|
ba515d26cb | ||
|
|
ec2a8cec87 | ||
|
|
1e26d6affa | ||
|
|
84e826f0a3 | ||
|
|
a13fdbd2a0 | ||
|
|
cb43f95720 | ||
|
|
c37b8cd60a | ||
|
|
d54a4b9c00 | ||
|
|
a5b5e78ee0 | ||
|
|
1af14e9f44 | ||
|
|
d93f5ee271 | ||
|
|
8a9dd2b7e1 | ||
|
|
86e09c5389 | ||
|
|
3c733e937c | ||
|
|
a764e07427 | ||
|
|
5c6d62fba8 | ||
|
|
9a6ba89616 | ||
|
|
19f67f8ec7 | ||
|
|
dac833f693 | ||
|
|
0b22819737 | ||
|
|
a890753d42 | ||
|
|
c6a01df05c | ||
|
|
2d2e62232b | ||
|
|
140805854c | ||
|
|
f1b836832c | ||
|
|
3829a10f21 | ||
|
|
942aaacdb5 | ||
|
|
38d1f6d125 | ||
|
|
48778cf8b2 | ||
|
|
d28e51f02e | ||
|
|
b0df5480fb | ||
|
|
a583188a82 | ||
|
|
ac66364ccf | ||
|
|
c7c27f75fd | ||
|
|
ef095b111a | ||
|
|
09026ae727 | ||
|
|
d5fbf100ed | ||
|
|
128699f629 | ||
|
|
1772dcf73b | ||
|
|
8873aedbd0 | ||
|
|
9f9ad19622 | ||
|
|
961e973fd6 | ||
|
|
24f52e9586 | ||
|
|
19eccb7c8b | ||
|
|
6618e53d00 | ||
|
|
2c4224579d | ||
|
|
6f4c37ce84 | ||
|
|
a297c1c90e | ||
|
|
6a275126ad | ||
|
|
038041f8ec | ||
|
|
f2eeec5d36 | ||
|
|
f344603a34 | ||
|
|
f11f370d6e | ||
|
|
5711cd8a4c | ||
|
|
40d2275355 | ||
|
|
7131e2c0df | ||
|
|
39da5b7cce | ||
|
|
37a78f1b78 | ||
|
|
fe6f3bdb27 | ||
|
|
70f6637035 | ||
|
|
2b6bbba0d5 | ||
|
|
ede21501ac | ||
|
|
91e2f882e0 | ||
|
|
3d7256429c | ||
|
|
ebe922db47 | ||
|
|
8b75c9ea34 | ||
|
|
7f78d6fb76 | ||
|
|
4e76029199 | ||
|
|
2774c0f60a | ||
|
|
26282ecace | ||
|
|
24bfab82a9 | ||
|
|
b7a7391588 | ||
|
|
4ddf6687ca | ||
|
|
bbf5ccfc93 | ||
|
|
7dc72e7716 | ||
|
|
c5a772b6b9 | ||
|
|
5b8e3ced59 | ||
|
|
87cf71aa36 | ||
|
|
de95ff1a2e | ||
|
|
c4f4d4aae1 | ||
|
|
27b9d2f44e | ||
|
|
47d4b90ffb | ||
|
|
6653c924b1 | ||
|
|
eb5850b1fd | ||
|
|
eb900b108f | ||
|
|
2524b0a24d | ||
|
|
ca88b01ee1 | ||
|
|
805d301dac | ||
|
|
b47dc2fc1e | ||
|
|
6c8f4474e9 | ||
|
|
2de0923a94 | ||
|
|
632323a904 | ||
|
|
97a624c644 | ||
|
|
9ed8f94b35 | ||
|
|
21b948bf3a | ||
|
|
b744c37fc3 | ||
|
|
fe0774566b | ||
|
|
88940dd47b | ||
|
|
c4b26d8b8a | ||
|
|
36a4544fec | ||
|
|
c5840920ae | ||
|
|
a699184650 | ||
|
|
81e86c4710 | ||
|
|
0c10bfbddd | ||
|
|
523b62970f | ||
|
|
9f45c0779e | ||
|
|
ee3a9c5c72 | ||
|
|
51c50a7495 | ||
|
|
468ec3e6d6 | ||
|
|
922ca7abf7 | ||
|
|
f251ae72e4 | ||
|
|
f40125a88f | ||
|
|
8b3ab045f8 | ||
|
|
aa0bff14d9 | ||
|
|
986a3961c4 | ||
|
|
e5c9d43329 | ||
|
|
d82a947511 | ||
|
|
459963c5b6 | ||
|
|
0f631762ba | ||
|
|
56ffbf3635 | ||
|
|
97c46c9099 | ||
|
|
78f0200a0d | ||
|
|
950f7e2f8c | ||
|
|
fcc3172a09 | ||
|
|
4070744bcd | ||
|
|
ce16d8ff94 | ||
|
|
0125b09d2f | ||
|
|
95a04ba2e9 | ||
|
|
61df23c1d2 | ||
|
|
76c9640aba | ||
|
|
741d0055d7 | ||
|
|
f506bff1c5 | ||
|
|
6a1482871a | ||
|
|
fa849b67c6 | ||
|
|
c1651f606f | ||
|
|
f874a995d8 | ||
|
|
0ccfb2009b | ||
|
|
0620304a3f | ||
|
|
a30805b8b6 | ||
|
|
5b0a6afb9f | ||
|
|
35f1323a04 | ||
|
|
5b6791a65f | ||
|
|
9c86429871 | ||
|
|
f36c8a0970 | ||
|
|
8f8bceec84 | ||
|
|
148ed02347 | ||
|
|
8f4cdbbcc0 | ||
|
|
9f1a329370 | ||
|
|
ccb90e90b9 | ||
|
|
c4ac4447ce | ||
|
|
fd0a45ff1f | ||
|
|
ac52a1e354 | ||
|
|
543b5875fd | ||
|
|
2a7222f9d8 | ||
|
|
4933e58876 | ||
|
|
ce300785c7 | ||
|
|
751fa459fb | ||
|
|
624215d19b | ||
|
|
b41c0dccc3 | ||
|
|
818724fdab | ||
|
|
5f22b9baa6 | ||
|
|
64dbaaee5e | ||
|
|
0e0705444d | ||
|
|
e54bcff050 | ||
|
|
fc8101b7c5 | ||
|
|
5c99bd6820 | ||
|
|
aab339a2f3 | ||
|
|
504eb9d5be | ||
|
|
9c39cdbccc | ||
|
|
3d2ef9cda8 | ||
|
|
f4a4479c77 | ||
|
|
a506bf5ab1 | ||
|
|
4ab255e3cb | ||
|
|
a2edfaceee | ||
|
|
b8a2f675a9 | ||
|
|
e89fb11e51 | ||
|
|
721c2b12f8 | ||
|
|
33dc796af7 | ||
|
|
2e373a367e | ||
|
|
70cb450b96 | ||
|
|
20ed9ba0b3 | ||
|
|
d4475b7d7b | ||
|
|
85c7cde379 | ||
|
|
0332b58f98 | ||
|
|
b0c9710cf3 | ||
|
|
72b9f873b4 | ||
|
|
319b475b77 | ||
|
|
e75233cdab | ||
|
|
f9ee67b4dc | ||
|
|
aa25e499f7 | ||
|
|
f3a42f50dd | ||
|
|
0f60d07cfb | ||
|
|
2066d58d2f | ||
|
|
7390e1f224 | ||
|
|
f0e6c51f44 | ||
|
|
f4390ad4e3 | ||
|
|
d706bb6470 | ||
|
|
77373a7d05 | ||
|
|
b942f81b8b | ||
|
|
1e78ea6c77 | ||
|
|
667e5e49e6 | ||
|
|
acc61aa28c | ||
|
|
5c6085d855 | ||
|
|
2427c58147 | ||
|
|
7518e94c51 | ||
|
|
460bfd317d | ||
|
|
7444876559 | ||
|
|
e514f341ce | ||
|
|
99ccd772a3 | ||
|
|
a3f7d54355 | ||
|
|
f1364157f1 | ||
|
|
ae8a1d2fcf | ||
|
|
9fd7e086f5 | ||
|
|
34e5a1933a | ||
|
|
8d7e1eeb2d | ||
|
|
23f49a8821 | ||
|
|
c8f136bd3e | ||
|
|
5ec16f6dbd | ||
|
|
aacfd120ba | ||
|
|
f042aa1101 | ||
|
|
9d29a26d2f | ||
|
|
b789081e21 | ||
|
|
f88bb0db9b | ||
|
|
dbfac48d6e | ||
|
|
c3de990991 | ||
|
|
94a2a04414 | ||
|
|
ee196ba43b | ||
|
|
4caf5af78b | ||
|
|
162337c150 | ||
|
|
3b31f2aeef | ||
|
|
8c0afaa99f | ||
|
|
b95181b0f2 | ||
|
|
453093ebd1 | ||
|
|
256af93db8 | ||
|
|
634956e1be | ||
|
|
33fe6da43d | ||
|
|
054809e64f | ||
|
|
d6f969e0cf | ||
|
|
1f9a5188b2 | ||
|
|
133f7a8bda | ||
|
|
00a0f67bf4 | ||
|
|
046f647361 | ||
|
|
f2684947f0 | ||
|
|
0183800e0f | ||
|
|
1b9e8335d2 | ||
|
|
ae306cbdda | ||
|
|
5449e0d82c | ||
|
|
8010c42305 | ||
|
|
0faa0fcd1a | ||
|
|
91de5ae29d | ||
|
|
588e511a7b | ||
|
|
80db1ac76e | ||
|
|
6edff3dd50 | ||
|
|
045811d13a | ||
|
|
71779ff98c | ||
|
|
8b37c156ae | ||
|
|
8372c7b1dc | ||
|
|
92eaffa3b0 | ||
|
|
29237511ee | ||
|
|
dae5f65c3e | ||
|
|
06869e82f4 | ||
|
|
d499219236 | ||
|
|
da8006644c | ||
|
|
cfcef02ba7 | ||
|
|
14639822b1 | ||
|
|
88602f7c95 | ||
|
|
077bd683a7 | ||
|
|
b8a9b252b5 | ||
|
|
7930cf4075 | ||
|
|
e7868e86e3 | ||
|
|
2bf5ce30f6 | ||
|
|
e1ab0bd5fd | ||
|
|
b357a3c743 | ||
|
|
5d9fc02502 | ||
|
|
ce46668e6e |
25
.github/workflows/pull_request.yml
vendored
25
.github/workflows/pull_request.yml
vendored
@@ -1,25 +0,0 @@
|
|||||||
name: PR to main
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- dev
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
env:
|
|
||||||
MESSAGE: merge branch `${{ github.head_ref || github.ref_name }}` to `main`
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
pull-request:
|
|
||||||
name: Open pull request
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
- name: Open pull request
|
|
||||||
uses: repo-sync/pull-request@v2
|
|
||||||
with:
|
|
||||||
destination_branch: 'main'
|
|
||||||
pr_title: 'chore: ${{ env.MESSAGE }}'
|
|
||||||
pr_body: 'This pull request will ${{ env.MESSAGE }}.'
|
|
||||||
pr_draft: true
|
|
||||||
15
.github/workflows/release.yml
vendored
15
.github/workflows/release.yml
vendored
@@ -1,5 +1,4 @@
|
|||||||
name: Release
|
name: Release
|
||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
push:
|
push:
|
||||||
@@ -10,7 +9,6 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
- dev
|
- dev
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
release:
|
release:
|
||||||
name: Release
|
name: Release
|
||||||
@@ -19,15 +17,12 @@ jobs:
|
|||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
# Make sure the release step uses its own credentials:
|
|
||||||
# https://github.com/cycjimmy/semantic-release-action#private-packages
|
|
||||||
persist-credentials: false
|
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Setup JDK
|
- name: Setup JDK
|
||||||
uses: actions/setup-java@v3
|
uses: actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
java-version: '17'
|
java-version: '17'
|
||||||
distribution: 'zulu'
|
distribution: 'temurin'
|
||||||
cache: gradle
|
cache: gradle
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
@@ -37,16 +32,16 @@ jobs:
|
|||||||
- name: Setup Android SDK
|
- name: Setup Android SDK
|
||||||
uses: amyu/setup-android@v2
|
uses: amyu/setup-android@v2
|
||||||
with:
|
with:
|
||||||
cache-disabled: false
|
cache-disabled: true
|
||||||
sdk-version: '33'
|
sdk-version: '33'
|
||||||
build-tools-version: '33.0.1'
|
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 generateMeta clean --no-daemon
|
run: ./gradlew build generateMeta
|
||||||
- name: Setup semantic-release
|
- name: Setup semantic-release
|
||||||
run: npm install semantic-release@19.0.5 @saithodev/semantic-release-backmerge @semantic-release/git @semantic-release/changelog gradle-semantic-release-plugin@1.7.4 -D
|
run: npm install semantic-release @semantic-release/git @semantic-release/changelog gradle-semantic-release-plugin -D
|
||||||
- name: Release
|
- name: Release
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.REPOSITORY_PUSH_ACCESS }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: npx semantic-release
|
run: npx semantic-release
|
||||||
|
|||||||
16
.releaserc
16
.releaserc
@@ -7,7 +7,11 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"plugins": [
|
"plugins": [
|
||||||
"@semantic-release/commit-analyzer",
|
["@semantic-release/commit-analyzer", {
|
||||||
|
"releaseRules": [
|
||||||
|
{"type": "build", "release": "patch"}
|
||||||
|
]
|
||||||
|
}],
|
||||||
"@semantic-release/release-notes-generator",
|
"@semantic-release/release-notes-generator",
|
||||||
"@semantic-release/changelog",
|
"@semantic-release/changelog",
|
||||||
"gradle-semantic-release-plugin",
|
"gradle-semantic-release-plugin",
|
||||||
@@ -32,15 +36,7 @@
|
|||||||
{
|
{
|
||||||
"path": "patches.json"
|
"path": "patches.json"
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
successComment: false
|
|
||||||
}
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"@saithodev/semantic-release-backmerge",
|
|
||||||
{
|
|
||||||
branches: [{from: "main", to: "dev"}],
|
|
||||||
clearWorkspace: true
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|||||||
353
CHANGELOG.md
353
CHANGELOG.md
@@ -1,358 +1,11 @@
|
|||||||
## [2.154.1-dev.1](https://github.com/revanced/revanced-patches/compare/v2.154.0...v2.154.1-dev.1) (2023-01-15)
|
# [2.141.0-dev.1](https://github.com/revanced/revanced-patches/compare/v2.140.1-dev.1...v2.141.0-dev.1) (2022-12-05)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **youtube/open-links-directly:** use better titles and correct descriptions ([#1488](https://github.com/revanced/revanced-patches/issues/1488)) ([2874bbe](https://github.com/revanced/revanced-patches/commit/2874bbef154d28e56b5928048a255409a956a012))
|
|
||||||
|
|
||||||
# [2.154.0](https://github.com/revanced/revanced-patches/compare/v2.153.0...v2.154.0) (2023-01-13)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **youtube/hide-info-cards:** allow toggling visibility of info-cards ([#1464](https://github.com/revanced/revanced-patches/issues/1464)) ([e6dcb55](https://github.com/revanced/revanced-patches/commit/e6dcb55382441f03c4b1322ccd652a22db104254))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* `remove-screenshot-restriction` patch ([#1455](https://github.com/revanced/revanced-patches/issues/1455)) ([a16ab79](https://github.com/revanced/revanced-patches/commit/a16ab7969d98b1e05ac896a4b9aa834cdac8734e))
|
* **twitch/block-embedded-ads:** `block-embedded-ads` patch ([#1166](https://github.com/revanced/revanced-patches/issues/1166)) ([80d7afc](https://github.com/revanced/revanced-patches/commit/80d7afc4b5e725ca5d7a43ceff53efc31a5463d3))
|
||||||
* **music:** update patches compatibility to v5.38.53 ([#1453](https://github.com/revanced/revanced-patches/issues/1453)) ([c7d116a](https://github.com/revanced/revanced-patches/commit/c7d116afd7293924760e7b6c1de0ba5d6cbd00a0))
|
|
||||||
* **music:** update patches compatibility to v5.39.52 ([#1484](https://github.com/revanced/revanced-patches/issues/1484)) ([81d6527](https://github.com/revanced/revanced-patches/commit/81d65273be81b5934e1cca543850db58f8df019e))
|
|
||||||
* **tiktok:** update patches compatibility to v27.8.3 ([#1483](https://github.com/revanced/revanced-patches/issues/1483)) ([e72b3bd](https://github.com/revanced/revanced-patches/commit/e72b3bd4e22f5ade7193ba6a3cdf61fcd91fba55))
|
|
||||||
* **youtube/return-youtube-dislike:** style for minimum width ([#1454](https://github.com/revanced/revanced-patches/issues/1454)) ([fd782aa](https://github.com/revanced/revanced-patches/commit/fd782aa0a37edf2344425c80afafb2c87851bc1a))
|
|
||||||
* **youtube:** `spoof-app-version` patch ([#1449](https://github.com/revanced/revanced-patches/issues/1449)) ([bd4d3b5](https://github.com/revanced/revanced-patches/commit/bd4d3b5706f26e398292df952ca8aec6c7dd1d6a))
|
|
||||||
|
|
||||||
# [2.154.0-dev.3](https://github.com/revanced/revanced-patches/compare/v2.154.0-dev.2...v2.154.0-dev.3) (2023-01-13)
|
## [2.140.1-dev.1](https://github.com/revanced/revanced-patches/compare/v2.140.0...v2.140.1-dev.1) (2022-12-05)
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **tiktok:** update patches compatibility to v27.8.3 ([#1483](https://github.com/revanced/revanced-patches/issues/1483)) ([e72b3bd](https://github.com/revanced/revanced-patches/commit/e72b3bd4e22f5ade7193ba6a3cdf61fcd91fba55))
|
|
||||||
|
|
||||||
# [2.154.0-dev.2](https://github.com/revanced/revanced-patches/compare/v2.154.0-dev.1...v2.154.0-dev.2) (2023-01-13)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **music:** update patches compatibility to v5.39.52 ([#1484](https://github.com/revanced/revanced-patches/issues/1484)) ([81d6527](https://github.com/revanced/revanced-patches/commit/81d65273be81b5934e1cca543850db58f8df019e))
|
|
||||||
|
|
||||||
# [2.154.0-dev.1](https://github.com/revanced/revanced-patches/compare/v2.153.0...v2.154.0-dev.1) (2023-01-10)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **youtube/hide-info-cards:** allow toggling visibility of info-cards ([#1464](https://github.com/revanced/revanced-patches/issues/1464)) ([e6dcb55](https://github.com/revanced/revanced-patches/commit/e6dcb55382441f03c4b1322ccd652a22db104254))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* `remove-screenshot-restriction` patch ([#1455](https://github.com/revanced/revanced-patches/issues/1455)) ([a16ab79](https://github.com/revanced/revanced-patches/commit/a16ab7969d98b1e05ac896a4b9aa834cdac8734e))
|
|
||||||
* **music:** update patches compatibility to v5.38.53 ([#1453](https://github.com/revanced/revanced-patches/issues/1453)) ([c7d116a](https://github.com/revanced/revanced-patches/commit/c7d116afd7293924760e7b6c1de0ba5d6cbd00a0))
|
|
||||||
* **youtube/return-youtube-dislike:** style for minimum width ([#1454](https://github.com/revanced/revanced-patches/issues/1454)) ([fd782aa](https://github.com/revanced/revanced-patches/commit/fd782aa0a37edf2344425c80afafb2c87851bc1a))
|
|
||||||
* **youtube:** `spoof-app-version` patch ([#1449](https://github.com/revanced/revanced-patches/issues/1449)) ([bd4d3b5](https://github.com/revanced/revanced-patches/commit/bd4d3b5706f26e398292df952ca8aec6c7dd1d6a))
|
|
||||||
|
|
||||||
# [2.153.0](https://github.com/revanced/revanced-patches/compare/v2.152.0...v2.153.0) (2023-01-07)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **youtube/general-ads:** move settings to correct preference screens ([cde45fc](https://github.com/revanced/revanced-patches/commit/cde45fca769eddea64072f13f836d46560a4a89a))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **youtube/remember-video-quality:** simplify settings switch state description ([9bd42ec](https://github.com/revanced/revanced-patches/commit/9bd42ec1a1b54b103cd2550211515acdaf90e9de))
|
|
||||||
* **youtube:** `remember-playback-rate` patch ([177e908](https://github.com/revanced/revanced-patches/commit/177e908dba260f184a2835b73b834563ca9c29fd))
|
|
||||||
|
|
||||||
# [2.153.0-dev.1](https://github.com/revanced/revanced-patches/compare/v2.152.1-dev.1...v2.153.0-dev.1) (2023-01-07)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **youtube/remember-video-quality:** simplify settings switch state description ([9bd42ec](https://github.com/revanced/revanced-patches/commit/9bd42ec1a1b54b103cd2550211515acdaf90e9de))
|
|
||||||
* **youtube:** `remember-playback-rate` patch ([177e908](https://github.com/revanced/revanced-patches/commit/177e908dba260f184a2835b73b834563ca9c29fd))
|
|
||||||
|
|
||||||
## [2.152.1-dev.1](https://github.com/revanced/revanced-patches/compare/v2.152.0...v2.152.1-dev.1) (2023-01-07)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **youtube/general-ads:** move settings to correct preference screens ([cde45fc](https://github.com/revanced/revanced-patches/commit/cde45fca769eddea64072f13f836d46560a4a89a))
|
|
||||||
|
|
||||||
# [2.152.0](https://github.com/revanced/revanced-patches/compare/v2.151.0...v2.152.0) (2023-01-04)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **youtube/copy-video-url:** match icon style with native icon ([#1419](https://github.com/revanced/revanced-patches/issues/1419)) ([e89e54c](https://github.com/revanced/revanced-patches/commit/e89e54c316a2d99195d2b79e9176d34f6de0113c))
|
|
||||||
|
|
||||||
# [2.152.0-dev.1](https://github.com/revanced/revanced-patches/compare/v2.151.0...v2.152.0-dev.1) (2023-01-02)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **youtube/copy-video-url:** match icon style with native icon ([#1419](https://github.com/revanced/revanced-patches/issues/1419)) ([e89e54c](https://github.com/revanced/revanced-patches/commit/e89e54c316a2d99195d2b79e9176d34f6de0113c))
|
|
||||||
|
|
||||||
# [2.151.0](https://github.com/revanced/revanced-patches/compare/v2.150.0...v2.151.0) (2022-12-31)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **youtube/general-ads:** restore swipe back to exit gesture ([#1405](https://github.com/revanced/revanced-patches/issues/1405)) ([2440587](https://github.com/revanced/revanced-patches/commit/24405877dd935a757fa61c7580887c1a47a25ea9))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **youtube:** `copy-video-url` patch ([#1402](https://github.com/revanced/revanced-patches/issues/1402)) ([bf982e8](https://github.com/revanced/revanced-patches/commit/bf982e8d7765c2a89a5475b6db8b203a3ac4ddf9))
|
|
||||||
|
|
||||||
# [2.151.0-dev.1](https://github.com/revanced/revanced-patches/compare/v2.150.0...v2.151.0-dev.1) (2022-12-31)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **youtube/general-ads:** restore swipe back to exit gesture ([#1405](https://github.com/revanced/revanced-patches/issues/1405)) ([2440587](https://github.com/revanced/revanced-patches/commit/24405877dd935a757fa61c7580887c1a47a25ea9))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **youtube:** `copy-video-url` patch ([#1402](https://github.com/revanced/revanced-patches/issues/1402)) ([bf982e8](https://github.com/revanced/revanced-patches/commit/bf982e8d7765c2a89a5475b6db8b203a3ac4ddf9))
|
|
||||||
|
|
||||||
# [2.150.0](https://github.com/revanced/revanced-patches/compare/v2.149.0...v2.150.0) (2022-12-31)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **youtube/bottom-controls-resource-patch:** use correct length for `nameSpaceLength` ([#1401](https://github.com/revanced/revanced-patches/issues/1401)) ([7190066](https://github.com/revanced/revanced-patches/commit/7190066a8ded8b59970483a81d7902526d552093))
|
|
||||||
* **youtube/general-ads:** resolve fingerprint to correct method ([#1404](https://github.com/revanced/revanced-patches/issues/1404)) ([e135485](https://github.com/revanced/revanced-patches/commit/e1354852501cb582549cbf0634b1a15e1d0012d9))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **youtube/return-youtube-dislike:** better formatting and LTR support ([#1370](https://github.com/revanced/revanced-patches/issues/1370)) ([fd0fe1c](https://github.com/revanced/revanced-patches/commit/fd0fe1c86ca99e395d340e85f4f1eb7b221e90ea))
|
|
||||||
|
|
||||||
## [2.149.1-dev.2](https://github.com/revanced/revanced-patches/compare/v2.149.1-dev.1...v2.149.1-dev.2) (2022-12-31)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **youtube/general-ads:** resolve fingerprint to correct method ([#1404](https://github.com/revanced/revanced-patches/issues/1404)) ([e135485](https://github.com/revanced/revanced-patches/commit/e1354852501cb582549cbf0634b1a15e1d0012d9))
|
|
||||||
|
|
||||||
## [2.149.1-dev.1](https://github.com/revanced/revanced-patches/compare/v2.149.0...v2.149.1-dev.1) (2022-12-30)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **youtube/bottom-controls-resource-patch:** use correct length for `nameSpaceLength` ([#1401](https://github.com/revanced/revanced-patches/issues/1401)) ([7190066](https://github.com/revanced/revanced-patches/commit/7190066a8ded8b59970483a81d7902526d552093))
|
|
||||||
|
|
||||||
# [2.149.0](https://github.com/revanced/revanced-patches/compare/v2.148.0...v2.149.0) (2022-12-30)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **tasker/unlock-license:** resolve fingerprint correctly ([92d7857](https://github.com/revanced/revanced-patches/commit/92d78576f033dd7155c80cb08d5911048b06c36c))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **youtube/general-ads-patch:** hide channel member shelf ([#1380](https://github.com/revanced/revanced-patches/issues/1380)) ([ce2b104](https://github.com/revanced/revanced-patches/commit/ce2b104f508f1581ec531446d60bd3d41dafbd2c))
|
|
||||||
|
|
||||||
# [2.149.0-dev.1](https://github.com/revanced/revanced-patches/compare/v2.148.0...v2.149.0-dev.1) (2022-12-30)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **tasker/unlock-license:** resolve fingerprint correctly ([92d7857](https://github.com/revanced/revanced-patches/commit/92d78576f033dd7155c80cb08d5911048b06c36c))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **youtube/general-ads-patch:** hide channel member shelf ([#1380](https://github.com/revanced/revanced-patches/issues/1380)) ([ce2b104](https://github.com/revanced/revanced-patches/commit/ce2b104f508f1581ec531446d60bd3d41dafbd2c))
|
|
||||||
|
|
||||||
# [2.148.0](https://github.com/revanced/revanced-patches/compare/v2.147.0...v2.148.0) (2022-12-29)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **youtube/general-ads:** don't early return when not necessary ([#1353](https://github.com/revanced/revanced-patches/issues/1353)) ([003a400](https://github.com/revanced/revanced-patches/commit/003a400ce41ff543fb5484c576f5ec2df0a87273))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **tasker:** `unlock-license` patch ([#1339](https://github.com/revanced/revanced-patches/issues/1339)) ([78a43b8](https://github.com/revanced/revanced-patches/commit/78a43b8abd972172eab99519dfa636ce77d9e64f))
|
|
||||||
* **twitter:** `hide-views-stats` patch ([#1371](https://github.com/revanced/revanced-patches/issues/1371)) ([2f04a06](https://github.com/revanced/revanced-patches/commit/2f04a06e3b782931870d973fd0937f8731062f12))
|
|
||||||
* **youtube/general-ads-patch:** hide guidelines for subscriber ([#1352](https://github.com/revanced/revanced-patches/issues/1352)) ([2d10932](https://github.com/revanced/revanced-patches/commit/2d1093251d5d50b476ca44f76acb9a8597b37aea))
|
|
||||||
* **youtube/theme:** add option to color the seekbar ([53b91fe](https://github.com/revanced/revanced-patches/commit/53b91fe2b5a41f1a63deec8d919f2a1bc1cae12a))
|
|
||||||
* **youtube/theme:** include the patch by default ([c363997](https://github.com/revanced/revanced-patches/commit/c3639975683fb0ca0e271e8fc3ef7fbf79f33414))
|
|
||||||
* **youtube:** `hide-breaking-news-shelf` patch ([#1381](https://github.com/revanced/revanced-patches/issues/1381)) ([38a9877](https://github.com/revanced/revanced-patches/commit/38a987744fbb49c2b7d5d0e69297e95f5ee405c4))
|
|
||||||
|
|
||||||
# [2.148.0-dev.6](https://github.com/revanced/revanced-patches/compare/v2.148.0-dev.5...v2.148.0-dev.6) (2022-12-29)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **youtube/theme:** add option to color the seekbar ([53b91fe](https://github.com/revanced/revanced-patches/commit/53b91fe2b5a41f1a63deec8d919f2a1bc1cae12a))
|
|
||||||
* **youtube/theme:** include the patch by default ([c363997](https://github.com/revanced/revanced-patches/commit/c3639975683fb0ca0e271e8fc3ef7fbf79f33414))
|
|
||||||
|
|
||||||
# [2.148.0-dev.5](https://github.com/revanced/revanced-patches/compare/v2.148.0-dev.4...v2.148.0-dev.5) (2022-12-29)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **youtube:** `hide-breaking-news-shelf` patch ([#1381](https://github.com/revanced/revanced-patches/issues/1381)) ([38a9877](https://github.com/revanced/revanced-patches/commit/38a987744fbb49c2b7d5d0e69297e95f5ee405c4))
|
|
||||||
|
|
||||||
# [2.148.0-dev.4](https://github.com/revanced/revanced-patches/compare/v2.148.0-dev.3...v2.148.0-dev.4) (2022-12-29)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **twitter:** `hide-views-stats` patch ([#1371](https://github.com/revanced/revanced-patches/issues/1371)) ([2f04a06](https://github.com/revanced/revanced-patches/commit/2f04a06e3b782931870d973fd0937f8731062f12))
|
|
||||||
|
|
||||||
# [2.148.0-dev.3](https://github.com/revanced/revanced-patches/compare/v2.148.0-dev.2...v2.148.0-dev.3) (2022-12-26)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **youtube/general-ads:** don't early return when not necessary ([#1353](https://github.com/revanced/revanced-patches/issues/1353)) ([003a400](https://github.com/revanced/revanced-patches/commit/003a400ce41ff543fb5484c576f5ec2df0a87273))
|
|
||||||
|
|
||||||
# [2.148.0-dev.2](https://github.com/revanced/revanced-patches/compare/v2.148.0-dev.1...v2.148.0-dev.2) (2022-12-26)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **youtube/general-ads-patch:** hide guidelines for subscriber ([#1352](https://github.com/revanced/revanced-patches/issues/1352)) ([2d10932](https://github.com/revanced/revanced-patches/commit/2d1093251d5d50b476ca44f76acb9a8597b37aea))
|
|
||||||
|
|
||||||
# [2.148.0-dev.1](https://github.com/revanced/revanced-patches/compare/v2.147.0...v2.148.0-dev.1) (2022-12-21)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **tasker:** `unlock-license` patch ([#1339](https://github.com/revanced/revanced-patches/issues/1339)) ([78a43b8](https://github.com/revanced/revanced-patches/commit/78a43b8abd972172eab99519dfa636ce77d9e64f))
|
|
||||||
|
|
||||||
# [2.147.0](https://github.com/revanced/revanced-patches/compare/v2.146.0...v2.147.0) (2022-12-21)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **youtube/return-youtube-dislike:** debug connection statistics, toast on error, high priority background threads ([#1320](https://github.com/revanced/revanced-patches/issues/1320)) ([30273a9](https://github.com/revanced/revanced-patches/commit/30273a9bbdd40453baeb09f26ac9d218569a3e71))
|
|
||||||
|
|
||||||
# [2.147.0-dev.1](https://github.com/revanced/revanced-patches/compare/v2.146.0...v2.147.0-dev.1) (2022-12-21)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **youtube/return-youtube-dislike:** debug connection statistics, toast on error, high priority background threads ([#1320](https://github.com/revanced/revanced-patches/issues/1320)) ([30273a9](https://github.com/revanced/revanced-patches/commit/30273a9bbdd40453baeb09f26ac9d218569a3e71))
|
|
||||||
|
|
||||||
# [2.146.0](https://github.com/revanced/revanced-patches/compare/v2.145.0...v2.146.0) (2022-12-18)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **predictive-back-gesture:** exclude by default ([176d34b](https://github.com/revanced/revanced-patches/commit/176d34b2ff92d0eb627dad86ad87f559df3db815))
|
|
||||||
* **twitter/timeline-ads:** add clarifying notice to description ([0eca2af](https://github.com/revanced/revanced-patches/commit/0eca2af1a4a688903c61ff6469ffea90c60f06a6))
|
|
||||||
* **youtube:** bump patches compatibility to v17.49.37 ([83ebc73](https://github.com/revanced/revanced-patches/commit/83ebc731130d3d216ac4b815382d8f13548cf665))
|
|
||||||
|
|
||||||
# [2.146.0-dev.1](https://github.com/revanced/revanced-patches/compare/v2.145.0...v2.146.0-dev.1) (2022-12-18)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **predictive-back-gesture:** exclude by default ([176d34b](https://github.com/revanced/revanced-patches/commit/176d34b2ff92d0eb627dad86ad87f559df3db815))
|
|
||||||
* **twitter/timeline-ads:** add clarifying notice to description ([0eca2af](https://github.com/revanced/revanced-patches/commit/0eca2af1a4a688903c61ff6469ffea90c60f06a6))
|
|
||||||
* **youtube:** bump patches compatibility to v17.49.37 ([83ebc73](https://github.com/revanced/revanced-patches/commit/83ebc731130d3d216ac4b815382d8f13548cf665))
|
|
||||||
|
|
||||||
# [2.145.0](https://github.com/revanced/revanced-patches/compare/v2.144.0...v2.145.0) (2022-12-18)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **tiktok/settings:** make compatible with newer versions ([c88740d](https://github.com/revanced/revanced-patches/commit/c88740dc2bf040747d9704d5bed52a7b533c22d6))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **crunchyroll:** remove `enable-downloads` patch ([2ac1546](https://github.com/revanced/revanced-patches/commit/2ac15460f5734fc2c6d2d78d34083a8e6b2f7012))
|
|
||||||
* **youtube-music:** bump compatibility to 5.36.51 ([c4a3099](https://github.com/revanced/revanced-patches/commit/c4a3099c1ca39431fba9beb94cc2b43e260561d9))
|
|
||||||
|
|
||||||
# [2.145.0-dev.1](https://github.com/revanced/revanced-patches/compare/v2.144.0...v2.145.0-dev.1) (2022-12-18)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **tiktok/settings:** make compatible with newer versions ([c88740d](https://github.com/revanced/revanced-patches/commit/c88740dc2bf040747d9704d5bed52a7b533c22d6))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **crunchyroll:** remove `enable-downloads` patch ([2ac1546](https://github.com/revanced/revanced-patches/commit/2ac15460f5734fc2c6d2d78d34083a8e6b2f7012))
|
|
||||||
* **youtube-music:** bump compatibility to 5.36.51 ([c4a3099](https://github.com/revanced/revanced-patches/commit/c4a3099c1ca39431fba9beb94cc2b43e260561d9))
|
|
||||||
|
|
||||||
# [2.144.0](https://github.com/revanced/revanced-patches/compare/v2.143.0...v2.144.0) (2022-12-15)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **citra:** add compatibility for canary package ([#1256](https://github.com/revanced/revanced-patches/issues/1256)) ([42ec021](https://github.com/revanced/revanced-patches/commit/42ec0218d829ea15759f83562d24588ce97cb646))
|
|
||||||
* link packages to Google PlayStore ([#1272](https://github.com/revanced/revanced-patches/issues/1272)) ([97892e0](https://github.com/revanced/revanced-patches/commit/97892e01044c74916375aeebcc094d3304e14f4e))
|
|
||||||
|
|
||||||
# [2.144.0-dev.2](https://github.com/revanced/revanced-patches/compare/v2.144.0-dev.1...v2.144.0-dev.2) (2022-12-15)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* link packages to Google PlayStore ([#1272](https://github.com/revanced/revanced-patches/issues/1272)) ([97892e0](https://github.com/revanced/revanced-patches/commit/97892e01044c74916375aeebcc094d3304e14f4e))
|
|
||||||
|
|
||||||
# [2.144.0-dev.1](https://github.com/revanced/revanced-patches/compare/v2.143.0...v2.144.0-dev.1) (2022-12-15)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **citra:** add compatibility for canary package ([#1256](https://github.com/revanced/revanced-patches/issues/1256)) ([42ec021](https://github.com/revanced/revanced-patches/commit/42ec0218d829ea15759f83562d24588ce97cb646))
|
|
||||||
|
|
||||||
# [2.143.0](https://github.com/revanced/revanced-patches/compare/v2.142.0...v2.143.0) (2022-12-14)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **predictive-back-gesture:** create attribute, if it does not exist ([c00e771](https://github.com/revanced/revanced-patches/commit/c00e7717053f806e3b5b3f0bf0ca9c2da07c289b))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **sleepasandroid:** remove `unlock-premium` patch ([#1253](https://github.com/revanced/revanced-patches/issues/1253)) ([414f503](https://github.com/revanced/revanced-patches/commit/414f503e493f2dc27edf134f5db723da77636d81))
|
|
||||||
|
|
||||||
# [2.143.0-dev.2](https://github.com/revanced/revanced-patches/compare/v2.143.0-dev.1...v2.143.0-dev.2) (2022-12-14)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* **predictive-back-gesture:** create attribute, if it does not exist ([c00e771](https://github.com/revanced/revanced-patches/commit/c00e7717053f806e3b5b3f0bf0ca9c2da07c289b))
|
|
||||||
|
|
||||||
# [2.143.0-dev.1](https://github.com/revanced/revanced-patches/compare/v2.142.0...v2.143.0-dev.1) (2022-12-13)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **sleepasandroid:** remove `unlock-premium` patch ([#1253](https://github.com/revanced/revanced-patches/issues/1253)) ([414f503](https://github.com/revanced/revanced-patches/commit/414f503e493f2dc27edf134f5db723da77636d81))
|
|
||||||
|
|
||||||
# [2.142.0](https://github.com/revanced/revanced-patches/compare/v2.141.0...v2.142.0) (2022-12-11)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* `predictive-back-gesture` patch ([#1236](https://github.com/revanced/revanced-patches/issues/1236)) ([11b59f7](https://github.com/revanced/revanced-patches/commit/11b59f767c94514d49a84593618ff9d2aace2636))
|
|
||||||
* **twitch/block-embedded-ads:** `block-embedded-ads` patch ([#1166](https://github.com/revanced/revanced-patches/issues/1166)) ([018606e](https://github.com/revanced/revanced-patches/commit/018606e9832c43836b6b8f4fbd623adb8876d162))
|
|
||||||
|
|
||||||
# [2.141.0](https://github.com/revanced/revanced-patches/compare/v2.140.0...v2.141.0) (2022-12-09)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* inconsistencies in preference switches ([#1207](https://github.com/revanced/revanced-patches/issues/1207)) ([b6ea5a4](https://github.com/revanced/revanced-patches/commit/b6ea5a43b3eec6a06c7514cd79569b97a2b7d333))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
|
||||||
|
|
||||||
* **youtube/return-youtube-dislike:** simplify preference descriptions ([#1216](https://github.com/revanced/revanced-patches/issues/1216)) ([514b5da](https://github.com/revanced/revanced-patches/commit/514b5da9a7de6f8d0b0d00ec6269f836df3e9333))
|
|
||||||
|
|
||||||
# [2.140.0](https://github.com/revanced/revanced-patches/compare/v2.139.0...v2.140.0) (2022-12-05)
|
# [2.140.0](https://github.com/revanced/revanced-patches/compare/v2.139.0...v2.140.0) (2022-12-05)
|
||||||
|
|
||||||
|
|||||||
237
README.md
237
README.md
@@ -4,114 +4,110 @@ 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`](https://play.google.com/store/apps/details?id=com.google.android.youtube)
|
### 📦 `com.google.android.youtube`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|:--------:|:--------------:|:-----------------:|
|
||||||
| `always-autorepeat` | Always repeats the playing video again. | 17.49.37 |
|
| `always-autorepeat` | Always repeats the playing video again. | 17.45.36 |
|
||||||
| `client-spoof` | Spoofs the YouTube or Vanced client to prevent playback issues. | all |
|
| `client-spoof` | Spoofs the YouTube or Vanced client to prevent playback issues. | all |
|
||||||
| `comments` | Hides components related to comments. | 17.49.37 |
|
| `comments` | Hides components related to comments. | 17.45.36 |
|
||||||
| `copy-video-url` | Adds buttons in player to copy video links. | 17.49.37 |
|
|
||||||
| `custom-branding` | Changes the YouTube launcher icon and name to your choice (defaults to ReVanced). | all |
|
| `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.49.37 |
|
| `custom-video-buffer` | Lets you change the buffers of videos. | 17.45.36 |
|
||||||
| `custom-video-speed` | Adds more video speed options. | 17.49.37 |
|
| `custom-video-speed` | Adds more video speed options. | 17.45.36 |
|
||||||
| `debugging` | Adds debugging options. | all |
|
| `debugging` | Adds debugging options. | all |
|
||||||
| `disable-auto-captions` | Disable forced captions from being automatically enabled. | 17.49.37 |
|
| `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.49.37 |
|
| `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.49.37 |
|
| `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.49.37 |
|
| `disable-startup-shorts-player` | Disables playing YouTube Shorts when launching YouTube. | 17.45.36 |
|
||||||
| `disable-zoom-haptics` | Disables haptics when zooming. | all |
|
| `disable-zoom-haptics` | Disables haptics when zooming. | all |
|
||||||
| `downloads` | Enables downloading music and videos from YouTube. | 17.49.37 |
|
| `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.49.37 |
|
| `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.49.37 |
|
| `general-ads` | Removes general ads. | 17.45.36 |
|
||||||
| `hdr-auto-brightness` | Makes the brightness of HDR videos follow the system default. | 17.49.37 |
|
| `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.49.37 |
|
| `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.49.37 |
|
| `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.49.37 |
|
| `hide-autoplay-button` | Hides the autoplay button in the video player. | 17.45.36 |
|
||||||
| `hide-breaking-news-shelf` | Hides the breaking news shelf on the homepage tab. | 17.49.37 |
|
| `hide-captions-button` | Hides the captions button on video player. | 17.45.36 |
|
||||||
| `hide-captions-button` | Hides the captions button on video player. | 17.49.37 |
|
|
||||||
| `hide-cast-button` | Hides the cast button in the video player. | all |
|
| `hide-cast-button` | Hides the cast button in the video player. | all |
|
||||||
| `hide-create-button` | Hides the create button in the navigation bar. | 17.49.37 |
|
| `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.49.37 |
|
| `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.49.37 |
|
| `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.49.37 |
|
| `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.49.37 |
|
| `hide-info-cards` | Hides info-cards in videos. | 17.45.36 |
|
||||||
| `hide-my-mix` | Hides mix playlists. | 17.49.37 |
|
| `hide-my-mix` | Hides mix playlists. | 17.45.36 |
|
||||||
| `hide-shorts-button` | Hides the shorts button on the navigation bar. | 17.49.37 |
|
| `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.49.37 |
|
| `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.49.37 |
|
| `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 in the player settings flyout panel. | 17.49.37 |
|
| `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.49.37 |
|
| `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.49.37 |
|
| `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.49.37 |
|
| `minimized-playback` | Enables minimized and background playback. | 17.45.36 |
|
||||||
| `old-quality-layout` | Enables the original video quality flyout in the video player settings | 17.49.37 |
|
| `old-quality-layout` | Enables the original quality flyout menu. | 17.45.36 |
|
||||||
| `open-links-directly` | Bypasses https://youtube.com/redirect URLs. | 17.49.37 |
|
| `open-links-directly` | Bypasses redirect links and allows opening links directly. | 17.45.36 |
|
||||||
| `premium-heading` | Shows premium branding on the home screen. | all |
|
| `premium-heading` | Shows premium branding on the home screen. | all |
|
||||||
| `remember-playback-rate` | Adds the ability to remember the playback rate you chose in the video playback rate flyout. | 17.49.37 |
|
| `remember-video-quality` | Adds the ability to remember the video quality you chose in the video quality flyout. | 17.45.36 |
|
||||||
| `remember-video-quality` | Adds the ability to remember the video quality you chose in the video quality flyout. | 17.49.37 |
|
| `remove-player-button-background` | Removes the background from the video player buttons. | 17.45.36 |
|
||||||
| `remove-player-button-background` | Removes the background from the video player buttons. | 17.49.37 |
|
| `return-youtube-dislike` | Shows the dislike count of videos using the Return YouTube Dislike API. | 17.45.36 |
|
||||||
| `return-youtube-dislike` | Shows the dislike count of videos using the Return YouTube Dislike API. | 17.49.37 |
|
| `seekbar-tapping` | Enables tap-to-seek on the seekbar of the video player. | 17.45.36 |
|
||||||
| `seekbar-tapping` | Enables tap-to-seek on the seekbar of the video player. | 17.49.37 |
|
|
||||||
| `settings` | Adds settings for ReVanced to YouTube. | all |
|
| `settings` | Adds settings for ReVanced to YouTube. | all |
|
||||||
| `sponsorblock` | Integrate SponsorBlock. | 17.49.37 |
|
| `sponsorblock` | Integrate SponsorBlock. | 17.45.36 |
|
||||||
| `spoof-app-version` | Tricks YouTube into thinking, you are running an older version of the app. One of the side effects also includes restoring the old UI. | 17.49.37 |
|
| `swipe-controls` | Adds volume and brightness swipe controls. | 17.45.36 |
|
||||||
| `swipe-controls` | Adds volume and brightness swipe controls. | 17.49.37 |
|
| `tablet-mini-player` | Enables the tablet mini player layout. | 17.45.36 |
|
||||||
| `tablet-mini-player` | Enables the tablet mini player layout. | 17.49.37 |
|
|
||||||
| `theme` | Applies a custom theme. | all |
|
| `theme` | Applies a custom theme. | all |
|
||||||
| `video-ads` | Removes ads in the video player. | 17.49.37 |
|
| `video-ads` | Removes ads in the video player. | 17.45.36 |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### [📦 `com.google.android.apps.youtube.music`](https://play.google.com/store/apps/details?id=com.google.android.apps.youtube.music)
|
### 📦 `com.google.android.apps.youtube.music`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|:--------:|:--------------:|:-----------------:|
|
||||||
| `background-play` | Enables playing music in the background. | 5.39.52 |
|
| `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.39.52 |
|
| `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.39.52 |
|
| `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.39.52 |
|
| `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.39.52 |
|
| `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.39.52 |
|
| `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.39.52 |
|
| `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.39.52 |
|
| `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.39.52 |
|
| `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.39.52 |
|
| `upgrade-button-remover` | Removes the upgrade tab from the pivot bar. | 5.34.51 |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### [📦 `com.ss.android.ugc.trill`](https://play.google.com/store/apps/details?id=com.ss.android.ugc.trill)
|
### 📦 `com.ss.android.ugc.trill`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|:--------:|:--------------:|:-----------------:|
|
||||||
| `disable-login-requirement` | Do not force login. | all |
|
| `disable-login-requirement` | Do not force login. | all |
|
||||||
| `downloads` | Removes download restrictions and changes the default path to download to. | 27.8.3 |
|
| `downloads` | Removes download restrictions and changes the default path to download to. | all |
|
||||||
| `feed-filter` | Filters tiktok videos: removing ads, removing livestreams. | 27.8.3 |
|
| `feed-filter` | Filters tiktok videos: removing ads, removing livestreams. | all |
|
||||||
| `fix-google-login` | Allows logging in with a Google account. | all |
|
| `fix-google-login` | Allows logging in with a Google account. | all |
|
||||||
| `hide-ads` | Removes ads from TikTok. | all |
|
| `hide-ads` | Removes ads from TikTok. | all |
|
||||||
| `playback-speed` | Enables the playback speed option for all videos. | all |
|
| `playback-speed` | Enables the playback speed option for all videos. | all |
|
||||||
| `settings` | Adds ReVanced settings to TikTok. | 27.8.3 |
|
| `settings` | Adds settings for ReVanced to TikTok. | all |
|
||||||
| `show-seekbar` | Shows progress bar for all video. | all |
|
| `show-seekbar` | Shows progress bar for all video. | all |
|
||||||
| `sim-spoof` | Spoofs the information which is retrieved from the sim-card. | 27.8.3 |
|
| `sim-spoof` | Spoofs the information which is retrieved from the sim-card. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### [📦 `com.zhiliaoapp.musically`](https://play.google.com/store/apps/details?id=com.zhiliaoapp.musically)
|
### 📦 `com.zhiliaoapp.musically`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|:--------:|:--------------:|:-----------------:|
|
||||||
| `disable-login-requirement` | Do not force login. | all |
|
| `disable-login-requirement` | Do not force login. | all |
|
||||||
| `downloads` | Removes download restrictions and changes the default path to download to. | 27.8.3 |
|
| `downloads` | Removes download restrictions and changes the default path to download to. | all |
|
||||||
| `feed-filter` | Filters tiktok videos: removing ads, removing livestreams. | 27.8.3 |
|
| `feed-filter` | Filters tiktok videos: removing ads, removing livestreams. | all |
|
||||||
| `fix-google-login` | Allows logging in with a Google account. | all |
|
| `fix-google-login` | Allows logging in with a Google account. | all |
|
||||||
| `hide-ads` | Removes ads from TikTok. | all |
|
| `hide-ads` | Removes ads from TikTok. | all |
|
||||||
| `playback-speed` | Enables the playback speed option for all videos. | all |
|
| `playback-speed` | Enables the playback speed option for all videos. | all |
|
||||||
| `settings` | Adds ReVanced settings to TikTok. | 27.8.3 |
|
| `settings` | Adds settings for ReVanced to TikTok. | all |
|
||||||
| `show-seekbar` | Shows progress bar for all video. | all |
|
| `show-seekbar` | Shows progress bar for all video. | all |
|
||||||
| `sim-spoof` | Spoofs the information which is retrieved from the sim-card. | 27.8.3 |
|
| `sim-spoof` | Spoofs the information which is retrieved from the sim-card. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### [📦 `tv.twitch.android.app`](https://play.google.com/store/apps/details?id=tv.twitch.android.app)
|
### 📦 `tv.twitch.android.app`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
@@ -124,18 +120,7 @@ The official Patch bundle provided by ReVanced and the community.
|
|||||||
| `show-deleted-messages` | Shows deleted chat messages behind a clickable spoiler. | all |
|
| `show-deleted-messages` | Shows deleted chat messages behind a clickable spoiler. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### [📦 `com.twitter.android`](https://play.google.com/store/apps/details?id=com.twitter.android)
|
### 📦 `com.spotify.music`
|
||||||
<details>
|
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|
||||||
| `dynamic-color` | Replaces the default Twitter Blue with the users Material You palette. | all |
|
|
||||||
| `hide-views-stats` | Hides the view stats under tweets. | all |
|
|
||||||
| `monochrome-icon` | Adds a monochrome icon. | all |
|
|
||||||
| `timeline-ads` | Removes ads from the Twitter timeline. Might require clearing app data to remove already cached ads. | all |
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### [📦 `com.spotify.music`](https://play.google.com/store/apps/details?id=com.spotify.music)
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
@@ -145,7 +130,17 @@ The official Patch bundle provided by ReVanced and the community.
|
|||||||
| `spotify-theme` | Applies a custom theme. | all |
|
| `spotify-theme` | Applies a custom theme. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### [📦 `com.reddit.frontpage`](https://play.google.com/store/apps/details?id=com.reddit.frontpage)
|
### 📦 `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>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
@@ -154,7 +149,7 @@ The official Patch bundle provided by ReVanced and the community.
|
|||||||
| `premium-icon-reddit` | Unlocks premium Reddit app icons. | all |
|
| `premium-icon-reddit` | Unlocks premium Reddit app icons. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### [📦 `com.vanced.android.youtube`](https://play.google.com/store/apps/details?id=com.vanced.android.youtube)
|
### 📦 `com.vanced.android.youtube`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
@@ -162,7 +157,7 @@ The official Patch bundle provided by ReVanced and the community.
|
|||||||
| `client-spoof` | Spoofs the YouTube or Vanced client to prevent playback issues. | all |
|
| `client-spoof` | Spoofs the YouTube or Vanced client to prevent playback issues. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### [📦 `com.myprog.hexedit`](https://play.google.com/store/apps/details?id=com.myprog.hexedit)
|
### 📦 `com.myprog.hexedit`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
@@ -170,7 +165,23 @@ The official Patch bundle provided by ReVanced and the community.
|
|||||||
| `disable-ads` | Disables ads in HexEditor. | all |
|
| `disable-ads` | Disables ads in HexEditor. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### [📦 `org.citra.citra_emu`](https://play.google.com/store/apps/details?id=org.citra.citra_emu)
|
### 📦 `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>
|
||||||
|
|
||||||
|
### 📦 `org.citra.citra_emu`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
@@ -178,15 +189,7 @@ The official Patch bundle provided by ReVanced and the community.
|
|||||||
| `premium-unlock` | Unlocks premium functions. | all |
|
| `premium-unlock` | Unlocks premium functions. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### [📦 `org.citra.citra_emu.canary`](https://play.google.com/store/apps/details?id=org.citra.citra_emu.canary)
|
### 📦 `com.backdrops.wallpapers`
|
||||||
<details>
|
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|
||||||
| `premium-unlock` | Unlocks premium functions. | all |
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### [📦 `com.backdrops.wallpapers`](https://play.google.com/store/apps/details?id=com.backdrops.wallpapers)
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
@@ -194,7 +197,7 @@ The official Patch bundle provided by ReVanced and the community.
|
|||||||
| `pro-unlock` | Unlocks pro-only functions. | all |
|
| `pro-unlock` | Unlocks pro-only functions. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### [📦 `de.dwd.warnapp`](https://play.google.com/store/apps/details?id=de.dwd.warnapp)
|
### 📦 `de.dwd.warnapp`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
@@ -202,7 +205,23 @@ 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.awedea.nyx`](https://play.google.com/store/apps/details?id=com.awedea.nyx)
|
### 📦 `com.shervinkoushan.anyTracker`
|
||||||
|
<details>
|
||||||
|
|
||||||
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|
|:--------:|:--------------:|:-----------------:|
|
||||||
|
| `unlock-premium` | Unlocks all premium features. | all |
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### 📦 `com.urbandroid.sleep`
|
||||||
|
<details>
|
||||||
|
|
||||||
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|
|:--------:|:--------------:|:-----------------:|
|
||||||
|
| `unlock-premium` | Unlocks all premium features. | all |
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### 📦 `com.awedea.nyx`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
@@ -210,7 +229,7 @@ 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>
|
||||||
|
|
||||||
### [📦 `co.windyapp.android`](https://play.google.com/store/apps/details?id=co.windyapp.android)
|
### 📦 `co.windyapp.android`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
@@ -218,15 +237,7 @@ 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>
|
||||||
|
|
||||||
### [📦 `ginlemon.iconpackstudio`](https://play.google.com/store/apps/details?id=ginlemon.iconpackstudio)
|
### 📦 `org.totschnig.myexpenses`
|
||||||
<details>
|
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|
||||||
| `unlock-pro` | Unlocks all pro features. | all |
|
|
||||||
</details>
|
|
||||||
|
|
||||||
### [📦 `org.totschnig.myexpenses`](https://play.google.com/store/apps/details?id=org.totschnig.myexpenses)
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
@@ -234,7 +245,7 @@ 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`](https://play.google.com/store/apps/details?id=com.ithebk.expensemanager)
|
### 📦 `com.ithebk.expensemanager`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
@@ -242,7 +253,15 @@ The official Patch bundle provided by ReVanced and the community.
|
|||||||
| `unlock-pro` | Unlocks pro features. | all |
|
| `unlock-pro` | Unlocks pro features. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### [📦 `com.ticktick.task`](https://play.google.com/store/apps/details?id=com.ticktick.task)
|
### 📦 `ginlemon.iconpackstudio`
|
||||||
|
<details>
|
||||||
|
|
||||||
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
|
|:--------:|:--------------:|:-----------------:|
|
||||||
|
| `unlock-pro` | Unlocks all pro features. | all |
|
||||||
|
</details>
|
||||||
|
|
||||||
|
### 📦 `com.ticktick.task`
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
||||||
@@ -250,14 +269,6 @@ The official Patch bundle provided by ReVanced and the community.
|
|||||||
| `unlock-themes` | Unlocks all themes. | all |
|
| `unlock-themes` | Unlocks all themes. | all |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### [📦 `net.dinglisch.android.taskerm`](https://play.google.com/store/apps/details?id=net.dinglisch.android.taskerm)
|
|
||||||
<details>
|
|
||||||
|
|
||||||
| 💊 Patch | 📜 Description | 🏹 Target Version |
|
|
||||||
|:--------:|:--------------:|:-----------------:|
|
|
||||||
| `unlock-trial` | Unlocks the trial version. | all |
|
|
||||||
</details>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 📝 JSON Format
|
## 📝 JSON Format
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ repositories {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation("app.revanced:revanced-patcher:6.4.0")
|
implementation("app.revanced:revanced-patcher:6.3.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")
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
kotlin.code.style = official
|
kotlin.code.style = official
|
||||||
version = 2.154.1-dev.1
|
version = 2.141.0-dev.1
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -1,5 +1,6 @@
|
|||||||
package app.revanced.extensions
|
package app.revanced.extensions
|
||||||
|
|
||||||
|
import app.revanced.patcher.data.BytecodeContext
|
||||||
import app.revanced.patcher.extensions.MethodFingerprintExtensions.name
|
import app.revanced.patcher.extensions.MethodFingerprintExtensions.name
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||||
import app.revanced.patcher.patch.PatchResultError
|
import app.revanced.patcher.patch.PatchResultError
|
||||||
@@ -27,6 +28,19 @@ fun MutableClass.findMutableMethodOf(method: Method) = this.methods.first {
|
|||||||
MethodUtil.methodSignaturesMatch(it, method)
|
MethodUtil.methodSignaturesMatch(it, method)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* traverse the class hierarchy starting from the given root class
|
||||||
|
*
|
||||||
|
* @param targetClass the class to start traversing the class hierarchy from
|
||||||
|
* @param callback function that is called for every class in the hierarchy
|
||||||
|
*/
|
||||||
|
fun BytecodeContext.traverseClassHierarchy(targetClass: MutableClass, callback: MutableClass.() -> Unit) {
|
||||||
|
callback(targetClass)
|
||||||
|
this.findClass(targetClass.superclass ?: return)?.mutableClass?.let {
|
||||||
|
traverseClassHierarchy(it, callback)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* apply a transform to all methods of the class
|
* apply a transform to all methods of the class
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ fun generateText(bundle: Bundle) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (pkg in packages.entries.sortedByDescending { it.value.size }) {
|
for (pkg in packages.entries.sortedByDescending { it.value.size }) {
|
||||||
output.appendLine("### [\uD83D\uDCE6 `${pkg.key}`](https://play.google.com/store/apps/details?id=${pkg.key})")
|
output.appendLine("### \uD83D\uDCE6 `${pkg.key}`")
|
||||||
output.appendLine("<details>\n")
|
output.appendLine("<details>\n")
|
||||||
|
|
||||||
output.appendLine(TABLE_HEADER)
|
output.appendLine(TABLE_HEADER)
|
||||||
|
|||||||
@@ -1,37 +0,0 @@
|
|||||||
package app.revanced.patches.all.interaction.gestures.patch
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Description
|
|
||||||
import app.revanced.patcher.annotation.Name
|
|
||||||
import app.revanced.patcher.annotation.Version
|
|
||||||
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.patcher.patch.annotations.Patch
|
|
||||||
|
|
||||||
@Patch(false)
|
|
||||||
@Name("predictive-back-gesture")
|
|
||||||
@Description("Enables the predictive back gesture introduced on Android 13.")
|
|
||||||
@Version("0.0.1")
|
|
||||||
class PredictiveBackGesturePatch : ResourcePatch {
|
|
||||||
override fun execute(context: ResourceContext): PatchResult {
|
|
||||||
context.xmlEditor["AndroidManifest.xml"].use { editor ->
|
|
||||||
val document = editor.file
|
|
||||||
|
|
||||||
with(document.getElementsByTagName("application").item(0)) {
|
|
||||||
if (attributes.getNamedItem(FLAG) != null) return@with
|
|
||||||
|
|
||||||
document.createAttribute(FLAG)
|
|
||||||
.apply { value = "true" }
|
|
||||||
.let(attributes::setNamedItem)
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return PatchResultSuccess()
|
|
||||||
}
|
|
||||||
|
|
||||||
private companion object {
|
|
||||||
const val FLAG = "android:enableOnBackInvokedCallback"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,106 +0,0 @@
|
|||||||
package app.revanced.patches.all.screenshot.removerestriction.patch
|
|
||||||
|
|
||||||
import app.revanced.extensions.findMutableMethodOf
|
|
||||||
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.replaceInstruction
|
|
||||||
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.patcher.util.proxy.mutableTypes.MutableMethod
|
|
||||||
import org.jf.dexlib2.Opcode
|
|
||||||
import org.jf.dexlib2.iface.instruction.formats.Instruction35c
|
|
||||||
import org.jf.dexlib2.iface.reference.MethodReference
|
|
||||||
|
|
||||||
@Patch(false)
|
|
||||||
@Name("remove-screenshot-restriction")
|
|
||||||
@Description("Removes the restriction of making screenshots.")
|
|
||||||
@Version("0.0.1")
|
|
||||||
class RemoveScreenshotRestrictionPatch : BytecodePatch() {
|
|
||||||
|
|
||||||
private companion object {
|
|
||||||
const val INTEGRATIONS_CLASS_DESCRIPTOR = "Lapp/revanced/all/screenshot/removerestriction/RemoveScreenshotRestrictionPatch;"
|
|
||||||
}
|
|
||||||
|
|
||||||
// Information about method calls we want to replace
|
|
||||||
private enum class MethodCall(
|
|
||||||
val definedClassName: String,
|
|
||||||
val methodName: String,
|
|
||||||
val replacementMethodDefinition: String
|
|
||||||
) {
|
|
||||||
SetFlags(
|
|
||||||
"Landroid/view/Window;",
|
|
||||||
"setFlags",
|
|
||||||
"setFlags(Landroid/view/Window;II)V",
|
|
||||||
);
|
|
||||||
|
|
||||||
fun replaceInstruction(method: MutableMethod, instruction: Instruction35c, instructionIndex: Int) {
|
|
||||||
when (this) {
|
|
||||||
SetFlags -> {
|
|
||||||
method.replaceInstruction(
|
|
||||||
instructionIndex,
|
|
||||||
"invoke-static { v${instruction.registerC}, v${instruction.registerD}, v${instruction.registerE} }, ${INTEGRATIONS_CLASS_DESCRIPTOR}->${replacementMethodDefinition}"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
fun fromMethodReference(methodReference: MethodReference) = values().firstOrNull { search ->
|
|
||||||
search.definedClassName == methodReference.definingClass && search.methodName == methodReference.name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun execute(context: BytecodeContext): PatchResult {
|
|
||||||
// Find all instructions where one of the methods is called
|
|
||||||
buildMap {
|
|
||||||
context.classes.forEach { classDef ->
|
|
||||||
if (classDef.type == INTEGRATIONS_CLASS_DESCRIPTOR) {
|
|
||||||
// avoid infinite recursion
|
|
||||||
return@forEach
|
|
||||||
}
|
|
||||||
|
|
||||||
classDef.methods.let { methods ->
|
|
||||||
buildMap methodList@{
|
|
||||||
methods.forEach methods@{ method ->
|
|
||||||
with(method.implementation?.instructions ?: return@methods) {
|
|
||||||
ArrayDeque<Triple<MethodCall, Instruction35c, Int>>().also { patchIndices ->
|
|
||||||
this.forEachIndexed { index, instruction ->
|
|
||||||
if (instruction.opcode != Opcode.INVOKE_VIRTUAL) return@forEachIndexed
|
|
||||||
|
|
||||||
val invokeInstruction = instruction as Instruction35c
|
|
||||||
val methodRef = invokeInstruction.reference as MethodReference
|
|
||||||
val methodCall = MethodCall.fromMethodReference(methodRef) ?: return@forEachIndexed
|
|
||||||
|
|
||||||
patchIndices.add(Triple(methodCall, invokeInstruction, index))
|
|
||||||
}
|
|
||||||
}.also { if (it.isEmpty()) return@methods }.let { patches ->
|
|
||||||
put(method, patches)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}.also { if (it.isEmpty()) return@forEach }.let { methodPatches ->
|
|
||||||
put(classDef, methodPatches)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}.forEach { (classDef, methods) ->
|
|
||||||
// And finally replace the instructions...
|
|
||||||
with(context.proxy(classDef).mutableClass) {
|
|
||||||
methods.forEach { (method, patches) ->
|
|
||||||
val mutableMethod = findMutableMethodOf(method)
|
|
||||||
while (!patches.isEmpty()) {
|
|
||||||
val (methodType, instruction, instructionIndex) = patches.removeLast()
|
|
||||||
methodType.replaceInstruction(mutableMethod, instruction, instructionIndex)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return PatchResultSuccess()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
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
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
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"),
|
||||||
|
)
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
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()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,5 +3,5 @@ package app.revanced.patches.citra.misc.premium.annotations
|
|||||||
import app.revanced.patcher.annotation.Compatibility
|
import app.revanced.patcher.annotation.Compatibility
|
||||||
import app.revanced.patcher.annotation.Package
|
import app.revanced.patcher.annotation.Package
|
||||||
|
|
||||||
@Compatibility([Package("org.citra.citra_emu"), Package("org.citra.citra_emu.canary")])
|
@Compatibility([Package("org.citra.citra_emu")])
|
||||||
internal annotation class PremiumUnlockCompatbility
|
internal annotation class PremiumUnlockCompatbility
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
package app.revanced.patches.youtube.interaction.copyvideourl.annotation
|
package app.revanced.patches.crunchyroll.downloads.annotations
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Compatibility
|
import app.revanced.patcher.annotation.Compatibility
|
||||||
import app.revanced.patcher.annotation.Package
|
import app.revanced.patcher.annotation.Package
|
||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[
|
[
|
||||||
Package("com.google.android.youtube", arrayOf("17.49.37"))
|
Package("com.crunchyroll.crunchyroid")
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
@Retention(AnnotationRetention.RUNTIME)
|
@Retention(AnnotationRetention.RUNTIME)
|
||||||
internal annotation class CopyVideoUrlCompatibility
|
internal annotation class DownloadsCompatibility
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package app.revanced.patches.crunchyroll.downloads.fingerprints
|
||||||
|
|
||||||
|
import app.revanced.patcher.annotation.Name
|
||||||
|
import app.revanced.patcher.annotation.Version
|
||||||
|
import app.revanced.patcher.extensions.or
|
||||||
|
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||||
|
import app.revanced.patches.crunchyroll.downloads.annotations.DownloadsCompatibility
|
||||||
|
import org.jf.dexlib2.AccessFlags
|
||||||
|
import org.jf.dexlib2.Opcode
|
||||||
|
|
||||||
|
@Name("downloads-fingerprint")
|
||||||
|
@DownloadsCompatibility
|
||||||
|
@Version("0.0.1")
|
||||||
|
object DownloadsFingerprint : MethodFingerprint(
|
||||||
|
"Z", AccessFlags.PUBLIC or AccessFlags.FINAL, null,
|
||||||
|
opcodes = listOf(
|
||||||
|
Opcode.CONST_STRING,
|
||||||
|
Opcode.INVOKE_VIRTUAL,
|
||||||
|
Opcode.MOVE_RESULT,
|
||||||
|
Opcode.RETURN
|
||||||
|
),
|
||||||
|
strings = listOf("offline_viewing"),
|
||||||
|
)
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package app.revanced.patches.crunchyroll.downloads.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.replaceInstruction
|
||||||
|
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.crunchyroll.downloads.annotations.DownloadsCompatibility
|
||||||
|
import app.revanced.patches.crunchyroll.downloads.fingerprints.DownloadsFingerprint
|
||||||
|
|
||||||
|
@Patch
|
||||||
|
@Name("enable-downloads")
|
||||||
|
@Description("Enables downloads for Crunchyroll.")
|
||||||
|
@DownloadsCompatibility
|
||||||
|
@Version("0.0.1")
|
||||||
|
class DownloadsPatch : BytecodePatch(
|
||||||
|
listOf(
|
||||||
|
DownloadsFingerprint
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
override fun execute(context: BytecodeContext): PatchResult {
|
||||||
|
with(DownloadsFingerprint.result!!.mutableMethod) {
|
||||||
|
val index = implementation!!.instructions.lastIndex
|
||||||
|
replaceInstruction(
|
||||||
|
index - 1,
|
||||||
|
"""
|
||||||
|
const/4 v0, 0x1
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return PatchResultSuccess()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,14 +1,13 @@
|
|||||||
package app.revanced.patches.youtube.layout.spoofappversion.annotations
|
package app.revanced.patches.ecmwf.misc.subscription.annotations
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Compatibility
|
import app.revanced.patcher.annotation.Compatibility
|
||||||
import app.revanced.patcher.annotation.Package
|
import app.revanced.patcher.annotation.Package
|
||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.49.37")
|
"com.garzotto.pflotsh.ecmwf_a", arrayOf("3.5.4")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
@Retention(AnnotationRetention.RUNTIME)
|
@Retention(AnnotationRetention.RUNTIME)
|
||||||
internal annotation class SpoofAppVersionCompatibility
|
internal annotation class SubscriptionUnlockCompatibility
|
||||||
|
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
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"
|
||||||
|
}
|
||||||
|
)
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
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()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,10 +20,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
"5.28.52",
|
"5.28.52",
|
||||||
"5.29.52",
|
"5.29.52",
|
||||||
"5.31.50",
|
"5.31.50",
|
||||||
"5.34.51",
|
"5.34.51"
|
||||||
"5.36.51",
|
|
||||||
"5.38.53",
|
|
||||||
"5.39.52"
|
|
||||||
)
|
)
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -20,10 +20,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
"5.28.52",
|
"5.28.52",
|
||||||
"5.29.52",
|
"5.29.52",
|
||||||
"5.31.50",
|
"5.31.50",
|
||||||
"5.34.51",
|
"5.34.51"
|
||||||
"5.36.51",
|
|
||||||
"5.38.53",
|
|
||||||
"5.39.52"
|
|
||||||
)
|
)
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ object CodecsLockFingerprint : MethodFingerprint(
|
|||||||
Opcode.INVOKE_STATIC,
|
Opcode.INVOKE_STATIC,
|
||||||
Opcode.MOVE_RESULT_OBJECT,
|
Opcode.MOVE_RESULT_OBJECT,
|
||||||
Opcode.INVOKE_INTERFACE,
|
Opcode.INVOKE_INTERFACE,
|
||||||
Opcode.INVOKE_VIRTUAL,
|
Opcode.INVOKE_DIRECT,
|
||||||
Opcode.RETURN_OBJECT
|
Opcode.RETURN_OBJECT
|
||||||
),
|
),
|
||||||
strings = listOf("eac3_supported")
|
strings = listOf("eac3_supported")
|
||||||
|
|||||||
@@ -20,10 +20,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
"5.28.52",
|
"5.28.52",
|
||||||
"5.29.52",
|
"5.29.52",
|
||||||
"5.31.50",
|
"5.31.50",
|
||||||
"5.34.51",
|
"5.34.51"
|
||||||
"5.36.51",
|
|
||||||
"5.38.53",
|
|
||||||
"5.39.52"
|
|
||||||
)
|
)
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -19,10 +19,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
"5.28.52",
|
"5.28.52",
|
||||||
"5.29.52",
|
"5.29.52",
|
||||||
"5.31.50",
|
"5.31.50",
|
||||||
"5.34.51",
|
"5.34.51"
|
||||||
"5.36.51",
|
|
||||||
"5.38.53",
|
|
||||||
"5.39.52"
|
|
||||||
)
|
)
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -20,10 +20,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
"5.28.52",
|
"5.28.52",
|
||||||
"5.29.52",
|
"5.29.52",
|
||||||
"5.31.50",
|
"5.31.50",
|
||||||
"5.34.51",
|
"5.34.51"
|
||||||
"5.36.51",
|
|
||||||
"5.38.53",
|
|
||||||
"5.39.52"
|
|
||||||
)
|
)
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -20,10 +20,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
"5.28.52",
|
"5.28.52",
|
||||||
"5.29.52",
|
"5.29.52",
|
||||||
"5.31.50",
|
"5.31.50",
|
||||||
"5.34.51",
|
"5.34.51"
|
||||||
"5.36.51",
|
|
||||||
"5.38.53",
|
|
||||||
"5.39.52"
|
|
||||||
)
|
)
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -22,10 +22,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
"5.28.52",
|
"5.28.52",
|
||||||
"5.29.52",
|
"5.29.52",
|
||||||
"5.31.50",
|
"5.31.50",
|
||||||
"5.34.51",
|
"5.34.51"
|
||||||
"5.36.51",
|
|
||||||
"5.38.53",
|
|
||||||
"5.39.52"
|
|
||||||
)
|
)
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -20,10 +20,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
"5.28.52",
|
"5.28.52",
|
||||||
"5.29.52",
|
"5.29.52",
|
||||||
"5.31.50",
|
"5.31.50",
|
||||||
"5.34.51",
|
"5.34.51"
|
||||||
"5.36.51",
|
|
||||||
"5.38.53",
|
|
||||||
"5.39.52"
|
|
||||||
)
|
)
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -20,10 +20,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
"5.28.52",
|
"5.28.52",
|
||||||
"5.29.52",
|
"5.29.52",
|
||||||
"5.31.50",
|
"5.31.50",
|
||||||
"5.34.51",
|
"5.34.51"
|
||||||
"5.36.51",
|
|
||||||
"5.38.53",
|
|
||||||
"5.39.52"
|
|
||||||
)
|
)
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -20,10 +20,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
"5.28.52",
|
"5.28.52",
|
||||||
"5.29.52",
|
"5.29.52",
|
||||||
"5.31.50",
|
"5.31.50",
|
||||||
"5.34.51",
|
"5.34.51"
|
||||||
"5.36.51",
|
|
||||||
"5.38.53",
|
|
||||||
"5.39.52"
|
|
||||||
)
|
)
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
package app.revanced.patches.shared.fingerprints
|
|
||||||
|
|
||||||
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
|
||||||
|
|
||||||
object SeekbarFingerprint : MethodFingerprint(
|
|
||||||
"V",
|
|
||||||
strings = listOf("timed_markers_width")
|
|
||||||
)
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
package app.revanced.patches.shared.fingerprints
|
|
||||||
|
|
||||||
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
|
||||||
|
|
||||||
object SeekbarOnDrawFingerprint : MethodFingerprint(
|
|
||||||
customFingerprint = { it.name == "onDraw" }
|
|
||||||
)
|
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
package app.revanced.patches.twitter.layout.hideviews.annotations
|
package app.revanced.patches.sleepasandroid.annotations
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Compatibility
|
import app.revanced.patcher.annotation.Compatibility
|
||||||
import app.revanced.patcher.annotation.Package
|
import app.revanced.patcher.annotation.Package
|
||||||
|
|
||||||
@Compatibility([Package("com.twitter.android")])
|
@Compatibility([Package("com.urbandroid.sleep")])
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
@Retention(AnnotationRetention.RUNTIME)
|
@Retention(AnnotationRetention.RUNTIME)
|
||||||
internal annotation class HideViewsCompatibility
|
internal annotation class UnlockPremiumCompatibility
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package app.revanced.patches.sleepasandroid.fingerprints
|
||||||
|
|
||||||
|
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||||
|
|
||||||
|
object IsTrialFingerprint : MethodFingerprint(
|
||||||
|
"Z",
|
||||||
|
customFingerprint = { it.name == "isTrial" }
|
||||||
|
)
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
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()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
package app.revanced.patches.tasker.trial.unlock.annotations
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Compatibility
|
|
||||||
import app.revanced.patcher.annotation.Package
|
|
||||||
|
|
||||||
@Compatibility([Package("net.dinglisch.android.taskerm")])
|
|
||||||
@Target(AnnotationTarget.CLASS)
|
|
||||||
@Retention(AnnotationRetention.RUNTIME)
|
|
||||||
internal annotation class UnlockTrialCompatibility
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
package app.revanced.patches.tasker.trial.unlock.fingerprints
|
|
||||||
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
|
||||||
|
|
||||||
object CheckLicenseFingerprint : MethodFingerprint(
|
|
||||||
strings = listOf("Can't check license")
|
|
||||||
)
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
package app.revanced.patches.tasker.trial.unlock.patch
|
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
|
||||||
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.addInstruction
|
|
||||||
import app.revanced.patcher.patch.BytecodePatch
|
|
||||||
import app.revanced.patcher.patch.PatchResultSuccess
|
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
|
||||||
import app.revanced.patches.tasker.trial.unlock.annotations.UnlockTrialCompatibility
|
|
||||||
import app.revanced.patches.tasker.trial.unlock.fingerprints.CheckLicenseFingerprint
|
|
||||||
|
|
||||||
@Patch
|
|
||||||
@Name("unlock-trial")
|
|
||||||
@Description("Unlocks the trial version.")
|
|
||||||
@UnlockTrialCompatibility
|
|
||||||
@Version("0.0.1")
|
|
||||||
class UnlockLicensePatch : BytecodePatch(
|
|
||||||
listOf(
|
|
||||||
CheckLicenseFingerprint
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
override fun execute(context: BytecodeContext) = CheckLicenseFingerprint
|
|
||||||
.result
|
|
||||||
?.mutableMethod
|
|
||||||
// Return the method early, which prompts the user with a non dismissible dialog, when the trial period is over.
|
|
||||||
?.addInstruction(0, "return-void")
|
|
||||||
?.let { PatchResultSuccess() }
|
|
||||||
?: CheckLicenseFingerprint.toErrorResult()
|
|
||||||
}
|
|
||||||
@@ -5,8 +5,8 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[
|
[
|
||||||
Package("com.ss.android.ugc.trill", arrayOf("27.8.3")),
|
Package("com.ss.android.ugc.trill"),
|
||||||
Package("com.zhiliaoapp.musically", arrayOf("27.8.3"))
|
Package("com.zhiliaoapp.musically")
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
|||||||
import org.jf.dexlib2.AccessFlags
|
import org.jf.dexlib2.AccessFlags
|
||||||
|
|
||||||
object FeedApiServiceLIZFingerprint : MethodFingerprint(
|
object FeedApiServiceLIZFingerprint : MethodFingerprint(
|
||||||
access = AccessFlags.PUBLIC or AccessFlags.STATIC or AccessFlags.SYNTHETIC,
|
access = AccessFlags.PUBLIC or AccessFlags.STATIC or AccessFlags.FINAL or AccessFlags.SYNTHETIC,
|
||||||
customFingerprint = { methodDef ->
|
customFingerprint = { methodDef ->
|
||||||
methodDef.definingClass.endsWith("/FeedApiService;") && methodDef.name == "LIZ"
|
methodDef.definingClass.endsWith("/FeedApiService;") && methodDef.name == "LIZ"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[
|
[
|
||||||
Package("com.ss.android.ugc.trill", arrayOf("27.8.3")),
|
Package("com.ss.android.ugc.trill"),
|
||||||
Package("com.zhiliaoapp.musically", arrayOf("27.8.3"))
|
Package("com.zhiliaoapp.musically")
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[
|
[
|
||||||
Package("com.ss.android.ugc.trill", arrayOf("27.8.3")),
|
Package("com.ss.android.ugc.trill"),
|
||||||
Package("com.zhiliaoapp.musically", arrayOf("27.8.3"))
|
Package("com.zhiliaoapp.musically")
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package app.revanced.patches.tiktok.misc.settings.fingerprints
|
||||||
|
|
||||||
|
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
||||||
|
|
||||||
|
object AboutOnClickMethodFingerprint : MethodFingerprint(
|
||||||
|
strings = listOf(
|
||||||
|
"//setting/about",
|
||||||
|
"enter_from",
|
||||||
|
"settings_page",
|
||||||
|
"enter_settings_about"
|
||||||
|
)
|
||||||
|
)
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
package app.revanced.patches.tiktok.misc.settings.fingerprints
|
|
||||||
|
|
||||||
import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
|
||||||
import org.jf.dexlib2.Opcode
|
|
||||||
|
|
||||||
@FuzzyPatternScanMethod(4)
|
|
||||||
object AboutViewFingerprint : MethodFingerprint(
|
|
||||||
opcodes = listOf(
|
|
||||||
Opcode.NEW_INSTANCE,
|
|
||||||
Opcode.INVOKE_DIRECT,
|
|
||||||
Opcode.INVOKE_DIRECT_RANGE,
|
|
||||||
Opcode.INVOKE_DIRECT,
|
|
||||||
Opcode.IPUT_OBJECT,
|
|
||||||
Opcode.NEW_INSTANCE,
|
|
||||||
Opcode.NEW_INSTANCE,
|
|
||||||
Opcode.CONST,
|
|
||||||
Opcode.INVOKE_VIRTUAL,
|
|
||||||
Opcode.MOVE_RESULT_OBJECT,
|
|
||||||
Opcode.SGET_OBJECT,
|
|
||||||
Opcode.INVOKE_STATIC,
|
|
||||||
Opcode.MOVE_RESULT_OBJECT,
|
|
||||||
Opcode.NEW_INSTANCE,
|
|
||||||
Opcode.INVOKE_DIRECT,
|
|
||||||
Opcode.CONST_4,
|
|
||||||
Opcode.CONST_STRING,
|
|
||||||
Opcode.INVOKE_DIRECT_RANGE,
|
|
||||||
Opcode.INVOKE_DIRECT,
|
|
||||||
Opcode.IPUT_OBJECT,
|
|
||||||
Opcode.CONST,
|
|
||||||
Opcode.SGET_OBJECT,
|
|
||||||
Opcode.INVOKE_VIRTUAL,
|
|
||||||
Opcode.MOVE_RESULT,
|
|
||||||
Opcode.IF_EQZ,
|
|
||||||
Opcode.CONST
|
|
||||||
)
|
|
||||||
)
|
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
package app.revanced.patches.tiktok.misc.settings.patch
|
package app.revanced.patches.tiktok.misc.settings.patch
|
||||||
|
|
||||||
import app.revanced.extensions.toErrorResult
|
|
||||||
import app.revanced.patcher.annotation.Description
|
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
|
||||||
@@ -8,7 +7,6 @@ import app.revanced.patcher.data.BytecodeContext
|
|||||||
import app.revanced.patcher.extensions.addInstructions
|
import app.revanced.patcher.extensions.addInstructions
|
||||||
import app.revanced.patcher.extensions.instruction
|
import app.revanced.patcher.extensions.instruction
|
||||||
import app.revanced.patcher.extensions.replaceInstruction
|
import app.revanced.patcher.extensions.replaceInstruction
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint.Companion.resolve
|
|
||||||
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.PatchResultError
|
import app.revanced.patcher.patch.PatchResultError
|
||||||
@@ -17,12 +15,13 @@ 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.IntegrationsPatch
|
||||||
import app.revanced.patches.tiktok.misc.settings.annotations.SettingsCompatibility
|
import app.revanced.patches.tiktok.misc.settings.annotations.SettingsCompatibility
|
||||||
import app.revanced.patches.tiktok.misc.settings.fingerprints.AboutViewFingerprint
|
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
|
||||||
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.instruction.formats.Instruction21c
|
||||||
import org.jf.dexlib2.iface.instruction.formats.Instruction35c
|
import org.jf.dexlib2.iface.instruction.formats.Instruction35c
|
||||||
import org.jf.dexlib2.iface.reference.StringReference
|
import org.jf.dexlib2.iface.reference.StringReference
|
||||||
import org.jf.dexlib2.iface.reference.TypeReference
|
import org.jf.dexlib2.iface.reference.TypeReference
|
||||||
@@ -30,19 +29,17 @@ import org.jf.dexlib2.iface.reference.TypeReference
|
|||||||
@Patch
|
@Patch
|
||||||
@DependsOn([IntegrationsPatch::class])
|
@DependsOn([IntegrationsPatch::class])
|
||||||
@Name("settings")
|
@Name("settings")
|
||||||
@Description("Adds ReVanced settings to TikTok.")
|
@Description("Adds settings for ReVanced to TikTok.")
|
||||||
@SettingsCompatibility
|
@SettingsCompatibility
|
||||||
@Version("0.0.1")
|
@Version("0.0.1")
|
||||||
class SettingsPatch : BytecodePatch(
|
class SettingsPatch : BytecodePatch(
|
||||||
listOf(
|
listOf(
|
||||||
AdPersonalizationActivityOnCreateFingerprint,
|
AdPersonalizationActivityOnCreateFingerprint,
|
||||||
SettingsOnViewCreatedFingerprint,
|
SettingsOnViewCreatedFingerprint,
|
||||||
|
AboutOnClickMethodFingerprint
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
override fun execute(context: BytecodeContext): PatchResult {
|
override fun execute(context: BytecodeContext): PatchResult {
|
||||||
SettingsOnViewCreatedFingerprint.result?.let {
|
|
||||||
AboutViewFingerprint.resolve(context, it.method, it.classDef)
|
|
||||||
}
|
|
||||||
// Patch Settings UI to add 'Revanced Settings'.
|
// Patch Settings UI to add 'Revanced Settings'.
|
||||||
val targetIndexes = findOptionsOnClickIndex()
|
val targetIndexes = findOptionsOnClickIndex()
|
||||||
with(SettingsOnViewCreatedFingerprint.result!!.mutableMethod) {
|
with(SettingsOnViewCreatedFingerprint.result!!.mutableMethod) {
|
||||||
@@ -75,21 +72,29 @@ class SettingsPatch : BytecodePatch(
|
|||||||
|
|
||||||
private fun findOptionsOnClickIndex(): IntArray {
|
private fun findOptionsOnClickIndex(): IntArray {
|
||||||
val results = IntArray(2)
|
val results = IntArray(2)
|
||||||
SettingsOnViewCreatedFingerprint.result?.apply {
|
var found = 0
|
||||||
for ((index, instruction) in mutableMethod.implementation!!.instructions.withIndex()) {
|
with(SettingsOnViewCreatedFingerprint.result!!.mutableMethod) {
|
||||||
|
for ((index, instruction) in implementation!!.instructions.withIndex()) {
|
||||||
// Old UI settings option to replace to 'Revanced Settings'
|
// Old UI settings option to replace to 'Revanced Settings'
|
||||||
if (instruction.opcode == Opcode.CONST_STRING) {
|
if (instruction.opcode == Opcode.CONST_STRING) {
|
||||||
val string = ((instruction as ReferenceInstruction).reference as StringReference).string
|
val string = ((instruction as ReferenceInstruction).reference as StringReference).string
|
||||||
if (string == "copyright_policy") {
|
if (string == "copyright_policy") {
|
||||||
results[0] = index - 2
|
results[0] = index - 2
|
||||||
break
|
found++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// New UI settings option to replace to 'Revanced Settings'
|
// New UI settings option to replace to 'Revanced Settings'
|
||||||
results[1] = AboutViewFingerprint.result!!.scanResult.patternScanResult!!.startIndex
|
if (instruction.opcode == Opcode.NEW_INSTANCE) {
|
||||||
} ?: throw SettingsOnViewCreatedFingerprint.toErrorResult()
|
val onClickClass = ((instruction as Instruction21c).reference as TypeReference).type
|
||||||
|
if (onClickClass == AboutOnClickMethodFingerprint.result!!.mutableMethod.definingClass) {
|
||||||
|
results[1] = index
|
||||||
|
found++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (found > 1) break
|
||||||
|
}
|
||||||
|
}
|
||||||
return results
|
return results
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[
|
[
|
||||||
Package("com.ss.android.ugc.trill", arrayOf("27.8.3")),
|
Package("com.ss.android.ugc.trill"),
|
||||||
Package("com.zhiliaoapp.musically", arrayOf("27.8.3"))
|
Package("com.zhiliaoapp.musically")
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import org.jf.dexlib2.iface.reference.StringReference
|
|||||||
|
|
||||||
@Patch
|
@Patch
|
||||||
@Name("timeline-ads")
|
@Name("timeline-ads")
|
||||||
@Description("Removes ads from the Twitter timeline. Might require clearing app data to remove already cached ads.")
|
@Description("Removes ads from the Twitter timeline.")
|
||||||
@TimelineAdsCompatibility
|
@TimelineAdsCompatibility
|
||||||
@Version("0.0.1")
|
@Version("0.0.1")
|
||||||
class TimelineAdsPatch : BytecodePatch(
|
class TimelineAdsPatch : BytecodePatch(
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
package app.revanced.patches.twitter.layout.hideviews.fingerprints
|
|
||||||
|
|
||||||
import app.revanced.patcher.extensions.or
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
|
||||||
import org.jf.dexlib2.AccessFlags
|
|
||||||
|
|
||||||
object InlineActionTypesFingerprint : MethodFingerprint(
|
|
||||||
returnType = "Ljava/util/List",
|
|
||||||
access = AccessFlags.PUBLIC or AccessFlags.STATIC,
|
|
||||||
strings = listOf(
|
|
||||||
"getCurrentMemoizing()",
|
|
||||||
"android_animated_reply_icon_enabled",
|
|
||||||
"reply_voting_android_position_before_favorite_enabled"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
package app.revanced.patches.twitter.layout.hideviews.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 TweetStatsContainerConstructorFingerprint : MethodFingerprint(
|
|
||||||
access = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR,
|
|
||||||
parameters = listOf("L"),
|
|
||||||
opcodes = listOf(
|
|
||||||
Opcode.INVOKE_DIRECT,
|
|
||||||
Opcode.IPUT_OBJECT,
|
|
||||||
Opcode.CONST,
|
|
||||||
Opcode.INVOKE_VIRTUAL,
|
|
||||||
Opcode.MOVE_RESULT_OBJECT,
|
|
||||||
Opcode.CHECK_CAST,
|
|
||||||
Opcode.CONST_4,
|
|
||||||
Opcode.INVOKE_VIRTUAL,
|
|
||||||
Opcode.INVOKE_VIRTUAL
|
|
||||||
)
|
|
||||||
)
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
package app.revanced.patches.twitter.layout.hideviews.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 TweetStatsContainerWrapperConstructorFingerprint : MethodFingerprint(
|
|
||||||
access = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR,
|
|
||||||
parameters = listOf("L"),
|
|
||||||
opcodes = listOf(
|
|
||||||
Opcode.INVOKE_DIRECT,
|
|
||||||
Opcode.IPUT_OBJECT,
|
|
||||||
Opcode.NEW_INSTANCE,
|
|
||||||
Opcode.INVOKE_DIRECT,
|
|
||||||
Opcode.IPUT_OBJECT,
|
|
||||||
Opcode.IGET_OBJECT,
|
|
||||||
Opcode.INVOKE_STATIC,
|
|
||||||
Opcode.MOVE_RESULT_OBJECT,
|
|
||||||
Opcode.IPUT_OBJECT
|
|
||||||
)
|
|
||||||
)
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
package app.revanced.patches.twitter.layout.hideviews.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 TweetStatsViewDelegateBinderFingerprint : MethodFingerprint(
|
|
||||||
access = AccessFlags.PUBLIC or AccessFlags.FINAL,
|
|
||||||
opcodes = listOf(
|
|
||||||
Opcode.NEW_INSTANCE,
|
|
||||||
Opcode.CONST_16,
|
|
||||||
Opcode.INVOKE_DIRECT,
|
|
||||||
Opcode.INVOKE_VIRTUAL,
|
|
||||||
Opcode.MOVE_RESULT_OBJECT,
|
|
||||||
Opcode.INVOKE_VIRTUAL,
|
|
||||||
Opcode.IGET_OBJECT,
|
|
||||||
Opcode.NEW_INSTANCE,
|
|
||||||
Opcode.CONST_16,
|
|
||||||
Opcode.INVOKE_DIRECT,
|
|
||||||
Opcode.INVOKE_VIRTUAL,
|
|
||||||
Opcode.MOVE_RESULT_OBJECT,
|
|
||||||
Opcode.INVOKE_VIRTUAL,
|
|
||||||
Opcode.RETURN_OBJECT
|
|
||||||
)
|
|
||||||
)
|
|
||||||
@@ -1,114 +0,0 @@
|
|||||||
package app.revanced.patches.twitter.layout.hideviews.patch
|
|
||||||
|
|
||||||
import app.revanced.patcher.data.BytecodeContext
|
|
||||||
import app.revanced.patcher.extensions.removeInstruction
|
|
||||||
import app.revanced.patcher.extensions.removeInstructions
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint.Companion.resolve
|
|
||||||
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.util.proxy.mutableTypes.MutableMethod
|
|
||||||
import app.revanced.patches.twitter.layout.hideviews.fingerprints.InlineActionTypesFingerprint
|
|
||||||
import app.revanced.patches.twitter.layout.hideviews.fingerprints.TweetStatsContainerConstructorFingerprint
|
|
||||||
import app.revanced.patches.twitter.layout.hideviews.fingerprints.TweetStatsContainerWrapperConstructorFingerprint
|
|
||||||
import app.revanced.patches.twitter.layout.hideviews.fingerprints.TweetStatsViewDelegateBinderFingerprint
|
|
||||||
import org.jf.dexlib2.Opcode
|
|
||||||
|
|
||||||
class HideViewsBytecodePatch : BytecodePatch(
|
|
||||||
listOf(
|
|
||||||
InlineActionTypesFingerprint,
|
|
||||||
TweetStatsContainerWrapperConstructorFingerprint,
|
|
||||||
TweetStatsContainerConstructorFingerprint,
|
|
||||||
TweetStatsViewDelegateBinderFingerprint
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
override fun execute(context: BytecodeContext): PatchResult {
|
|
||||||
removeViewsFromTimeline(context)
|
|
||||||
removeTweetStatViewInitializer(context)
|
|
||||||
removeTweetStatViewWrapperInitializer(context)
|
|
||||||
removeViewDelegateBinderSubscription()
|
|
||||||
return PatchResultSuccess()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun removeViewsFromTimeline(context: BytecodeContext) {
|
|
||||||
val addViewsToActionBarMethodFingerprint = object : MethodFingerprint(
|
|
||||||
opcodes = listOf(
|
|
||||||
Opcode.INVOKE_STATIC,
|
|
||||||
Opcode.MOVE_RESULT,
|
|
||||||
Opcode.IF_EQZ,
|
|
||||||
Opcode.SGET_OBJECT,
|
|
||||||
Opcode.INVOKE_VIRTUAL,
|
|
||||||
Opcode.IF_EQZ,
|
|
||||||
)
|
|
||||||
) {}
|
|
||||||
transformMethodAtPattern(
|
|
||||||
context,
|
|
||||||
InlineActionTypesFingerprint,
|
|
||||||
addViewsToActionBarMethodFingerprint
|
|
||||||
) { patternScanResult, method ->
|
|
||||||
method.removeInstruction(patternScanResult.endIndex - 1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun removeTweetStatViewInitializer(context: BytecodeContext) {
|
|
||||||
val returnFingerprint = object : MethodFingerprint(
|
|
||||||
opcodes = listOf(Opcode.RETURN_VOID)
|
|
||||||
) {}
|
|
||||||
transformMethodAtPattern(
|
|
||||||
context,
|
|
||||||
TweetStatsContainerConstructorFingerprint,
|
|
||||||
returnFingerprint
|
|
||||||
) { patternScanResult, method ->
|
|
||||||
method.removeInstructions(patternScanResult.endIndex - 3, 2)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun removeTweetStatViewWrapperInitializer(context: BytecodeContext) {
|
|
||||||
val wrapperReturnFingerprint = object : MethodFingerprint(
|
|
||||||
opcodes = listOf(
|
|
||||||
Opcode.IGET_OBJECT,
|
|
||||||
Opcode.INVOKE_STATIC,
|
|
||||||
Opcode.MOVE_RESULT_OBJECT,
|
|
||||||
Opcode.IPUT_OBJECT,
|
|
||||||
Opcode.RETURN_VOID,
|
|
||||||
)
|
|
||||||
) {}
|
|
||||||
transformMethodAtPattern(
|
|
||||||
context,
|
|
||||||
TweetStatsContainerWrapperConstructorFingerprint,
|
|
||||||
wrapperReturnFingerprint
|
|
||||||
) { patternScanResult, method ->
|
|
||||||
method.removeInstructions(patternScanResult.startIndex - 4, 3)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun removeViewDelegateBinderSubscription() {
|
|
||||||
transformMethod(TweetStatsViewDelegateBinderFingerprint) { result, method ->
|
|
||||||
method.removeInstructions(result.scanResult.patternScanResult!!.startIndex - 4, 9)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun transformMethodAtPattern(
|
|
||||||
context: BytecodeContext, methodFingerprint: MethodFingerprint,
|
|
||||||
patternFingerprint: MethodFingerprint, transformer: TransformerAtPattern
|
|
||||||
) {
|
|
||||||
transformMethod(methodFingerprint) { result, method ->
|
|
||||||
val patternResult = patternFingerprint.also {
|
|
||||||
it.resolve(context, method, result.classDef)
|
|
||||||
}.result!!
|
|
||||||
transformer(patternResult.scanResult.patternScanResult!!, method)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun transformMethod(methodFingerprint: MethodFingerprint, transformer: Transformer) {
|
|
||||||
val result = methodFingerprint.result!!
|
|
||||||
val method = result.mutableMethod
|
|
||||||
transformer(result, method)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private typealias Transformer = (MethodFingerprintResult, MutableMethod) -> Unit
|
|
||||||
|
|
||||||
private typealias TransformerAtPattern = (MethodFingerprintResult.MethodFingerprintScanResult.PatternScanResult, MutableMethod) -> Unit
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
package app.revanced.patches.twitter.layout.hideviews.patch
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Description
|
|
||||||
import app.revanced.patcher.annotation.Name
|
|
||||||
import app.revanced.patcher.annotation.Version
|
|
||||||
import app.revanced.patcher.data.ResourceContext
|
|
||||||
import app.revanced.patcher.patch.*
|
|
||||||
import app.revanced.patcher.patch.annotations.DependsOn
|
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
|
||||||
import app.revanced.patches.twitter.layout.hideviews.annotations.HideViewsCompatibility
|
|
||||||
import org.w3c.dom.Element
|
|
||||||
|
|
||||||
@Patch
|
|
||||||
@DependsOn([HideViewsBytecodePatch::class])
|
|
||||||
@Name("hide-views-stats")
|
|
||||||
@Description("Hides the view stats under tweets.")
|
|
||||||
@HideViewsCompatibility
|
|
||||||
@Version("0.0.1")
|
|
||||||
class HideViewsResourcePatch : ResourcePatch {
|
|
||||||
override fun execute(context: ResourceContext): PatchResult {
|
|
||||||
arrayOf(
|
|
||||||
"res/layout/condensed_tweet_stats.xml",
|
|
||||||
"res/layout/focal_tweet_stats.xml"
|
|
||||||
).forEach { file ->
|
|
||||||
context.xmlEditor[file].use { editor ->
|
|
||||||
val tags = editor.file.getElementsByTagName("com.twitter.ui.tweet.TweetStatView")
|
|
||||||
List(tags.length) { tags.item(it) as Element }
|
|
||||||
.filter { it.getAttribute("android:id").contains("views_stat") }
|
|
||||||
.forEach { it.parentNode.removeChild(it) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return PatchResultSuccess()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.49.37")
|
"com.google.android.youtube", arrayOf("17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ 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.backtoexitgesture.patch.FixBackToExitGesturePatch
|
|
||||||
import app.revanced.patches.youtube.misc.fix.verticalscroll.patch.VerticalScrollPatch
|
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
|
||||||
@@ -25,7 +24,7 @@ import org.jf.dexlib2.iface.instruction.formats.Instruction35c
|
|||||||
|
|
||||||
|
|
||||||
@Patch
|
@Patch
|
||||||
@DependsOn([GeneralAdsResourcePatch::class, VerticalScrollPatch::class, FixBackToExitGesturePatch::class])
|
@DependsOn([GeneralAdsResourcePatch::class, VerticalScrollPatch::class])
|
||||||
@Name("general-ads")
|
@Name("general-ads")
|
||||||
@Description("Removes general ads.")
|
@Description("Removes general ads.")
|
||||||
@GeneralAdsCompatibility
|
@GeneralAdsCompatibility
|
||||||
|
|||||||
@@ -7,21 +7,22 @@ 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.*
|
import app.revanced.patches.shared.settings.preference.impl.InputType
|
||||||
|
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
||||||
|
import app.revanced.patches.shared.settings.preference.impl.SwitchPreference
|
||||||
|
import app.revanced.patches.shared.settings.preference.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
|
||||||
import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch
|
import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch
|
||||||
import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch.PreferenceScreen
|
import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch.PreferenceScreen
|
||||||
|
|
||||||
@DependsOn(
|
@DependsOn(dependencies = [
|
||||||
dependencies = [
|
FixLocaleConfigErrorPatch::class,
|
||||||
FixLocaleConfigErrorPatch::class,
|
LithoFilterPatch::class,
|
||||||
LithoFilterPatch::class,
|
SettingsPatch::class,
|
||||||
SettingsPatch::class,
|
ResourceMappingPatch::class
|
||||||
ResourceMappingPatch::class
|
])
|
||||||
]
|
|
||||||
)
|
|
||||||
@GeneralAdsCompatibility
|
@GeneralAdsCompatibility
|
||||||
@Version("0.0.1")
|
@Version("0.0.1")
|
||||||
class GeneralAdsResourcePatch : ResourcePatch {
|
class GeneralAdsResourcePatch : ResourcePatch {
|
||||||
@@ -31,42 +32,20 @@ class GeneralAdsResourcePatch : ResourcePatch {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun execute(context: ResourceContext): PatchResult {
|
override fun execute(context: ResourceContext): PatchResult {
|
||||||
PreferenceScreen.LAYOUT.addPreferences(
|
PreferenceScreen.ADS.addPreferences(
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
"revanced_adremover_separator",
|
"revanced_adremover_ad_removal",
|
||||||
StringResource("revanced_adremover_separator_title", "Hide gray separator"),
|
StringResource("revanced_adremover_ad_removal_enabled_title", "Hide general ads"),
|
||||||
true,
|
true,
|
||||||
StringResource("revanced_adremover_separator_summary_on", "Gray separators are hidden"),
|
StringResource("revanced_adremover_ad_removal_enabled_summary_on", "General ads are hidden"),
|
||||||
StringResource("revanced_adremover_separator_summary_off", "Gray separators are shown")
|
StringResource("revanced_adremover_ad_removal_enabled_summary_off", "General ads are shown")
|
||||||
),
|
),
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
"revanced_adremover_hide_channel_guidelines",
|
"revanced_adremover_buttoned",
|
||||||
StringResource("revanced_adremover_hide_channel_guidelines_enabled_title", "Hide channel guidelines"),
|
StringResource("revanced_adremover_buttoned_enabled_title", "Hide buttoned ad"),
|
||||||
true,
|
true,
|
||||||
StringResource(
|
StringResource("revanced_adremover_buttoned_enabled_summary_on", "Buttoned ads are hidden"),
|
||||||
"revanced_adremover_hide_channel_guidelines_enabled_summary_on",
|
StringResource("revanced_adremover_buttoned_enabled_summary_off", "Buttoned ads are shown")
|
||||||
"Channel guidelines are hidden"
|
|
||||||
),
|
|
||||||
StringResource(
|
|
||||||
"revanced_adremover_hide_channel_guidelines_enabled_summary_off",
|
|
||||||
"Channel guidelines are shown"
|
|
||||||
)
|
|
||||||
),
|
|
||||||
SwitchPreference(
|
|
||||||
"revanced_adremover_chapter_teaser",
|
|
||||||
StringResource(
|
|
||||||
"revanced_adremover_chapter_teaser_enabled_title",
|
|
||||||
"Hide chapter teaser under videos"
|
|
||||||
),
|
|
||||||
true,
|
|
||||||
StringResource(
|
|
||||||
"revanced_adremover_chapter_teaser_enabled_summary_on",
|
|
||||||
"Chapter teasers are hidden"
|
|
||||||
),
|
|
||||||
StringResource(
|
|
||||||
"revanced_adremover_chapter_teaser_enabled_summary_off",
|
|
||||||
"Chapter teasers are shown"
|
|
||||||
)
|
|
||||||
),
|
),
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
"revanced_adremover_merchandise",
|
"revanced_adremover_merchandise",
|
||||||
@@ -123,35 +102,6 @@ class GeneralAdsResourcePatch : ResourcePatch {
|
|||||||
"Community guidelines are shown"
|
"Community guidelines are shown"
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
SwitchPreference(
|
|
||||||
"revanced_adremover_subscribers_community_guidelines_removal",
|
|
||||||
StringResource(
|
|
||||||
"revanced_adremover_subscribers_community_guidelines_enabled_title",
|
|
||||||
"Hide subscribers community guidelines"
|
|
||||||
),
|
|
||||||
true,
|
|
||||||
StringResource(
|
|
||||||
"revanced_adremover_subscribers_community_guidelines_enabled_summary_on",
|
|
||||||
"Subscribers community guidelines are hidden"
|
|
||||||
),
|
|
||||||
StringResource(
|
|
||||||
"revanced_adremover_subscribers_community_guidelines_enabled_summary_off",
|
|
||||||
"Subscribers community guidelines are shown"
|
|
||||||
)
|
|
||||||
),
|
|
||||||
SwitchPreference(
|
|
||||||
"revanced_adremover_channel_member_shelf_removal",
|
|
||||||
StringResource("revanced_adremover_channel_member_shelf_enabled_title", "Hide channel member shelf"),
|
|
||||||
true,
|
|
||||||
StringResource(
|
|
||||||
"revanced_adremover_channel_member_shelf_enabled_summary_on",
|
|
||||||
"Channel member shelf is hidden"
|
|
||||||
),
|
|
||||||
StringResource(
|
|
||||||
"revanced_adremover_channel_member_shelf_enabled_summary_off",
|
|
||||||
"Channel member shelf is shown"
|
|
||||||
)
|
|
||||||
),
|
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
"revanced_adremover_emergency_box_removal",
|
"revanced_adremover_emergency_box_removal",
|
||||||
StringResource("revanced_adremover_emergency_box_enabled_title", "Hide emergency boxes"),
|
StringResource("revanced_adremover_emergency_box_enabled_title", "Hide emergency boxes"),
|
||||||
@@ -173,23 +123,6 @@ class GeneralAdsResourcePatch : ResourcePatch {
|
|||||||
StringResource("revanced_adremover_medical_panel_enabled_summary_on", "Medical panels are hidden"),
|
StringResource("revanced_adremover_medical_panel_enabled_summary_on", "Medical panels are hidden"),
|
||||||
StringResource("revanced_adremover_medical_panel_enabled_summary_off", "Medical panels are shown")
|
StringResource("revanced_adremover_medical_panel_enabled_summary_off", "Medical panels are shown")
|
||||||
),
|
),
|
||||||
)
|
|
||||||
|
|
||||||
PreferenceScreen.ADS.addPreferences(
|
|
||||||
SwitchPreference(
|
|
||||||
"revanced_adremover_ad_removal",
|
|
||||||
StringResource("revanced_adremover_ad_removal_enabled_title", "Hide general ads"),
|
|
||||||
true,
|
|
||||||
StringResource("revanced_adremover_ad_removal_enabled_summary_on", "General ads are hidden"),
|
|
||||||
StringResource("revanced_adremover_ad_removal_enabled_summary_off", "General ads are shown")
|
|
||||||
),
|
|
||||||
SwitchPreference(
|
|
||||||
"revanced_adremover_buttoned",
|
|
||||||
StringResource("revanced_adremover_buttoned_enabled_title", "Hide buttoned ad"),
|
|
||||||
true,
|
|
||||||
StringResource("revanced_adremover_buttoned_enabled_summary_on", "Buttoned ads are hidden"),
|
|
||||||
StringResource("revanced_adremover_buttoned_enabled_summary_off", "Buttoned ads are shown")
|
|
||||||
),
|
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
"revanced_adremover_paid_content",
|
"revanced_adremover_paid_content",
|
||||||
StringResource("revanced_adremover_paid_content_enabled_title", "Hide paid content"),
|
StringResource("revanced_adremover_paid_content_enabled_title", "Hide paid content"),
|
||||||
@@ -211,6 +144,19 @@ class GeneralAdsResourcePatch : ResourcePatch {
|
|||||||
StringResource("revanced_adremover_hide_latest_posts_enabled_summary_on", "Latest posts are hidden"),
|
StringResource("revanced_adremover_hide_latest_posts_enabled_summary_on", "Latest posts are hidden"),
|
||||||
StringResource("revanced_adremover_hide_latest_posts_enabled_summary_off", "Latest posts are shown")
|
StringResource("revanced_adremover_hide_latest_posts_enabled_summary_off", "Latest posts are shown")
|
||||||
),
|
),
|
||||||
|
SwitchPreference(
|
||||||
|
"revanced_adremover_hide_channel_guidelines",
|
||||||
|
StringResource("revanced_adremover_hide_channel_guidelines_enabled_title", "Hide channel guidelines"),
|
||||||
|
true,
|
||||||
|
StringResource(
|
||||||
|
"revanced_adremover_hide_channel_guidelines_enabled_summary_on",
|
||||||
|
"Channel guidelines are hidden"
|
||||||
|
),
|
||||||
|
StringResource(
|
||||||
|
"revanced_adremover_hide_channel_guidelines_enabled_summary_off",
|
||||||
|
"Channel guidelines are shown"
|
||||||
|
)
|
||||||
|
),
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
"revanced_adremover_self_sponsor",
|
"revanced_adremover_self_sponsor",
|
||||||
StringResource("revanced_adremover_self_sponsor_enabled_title", "Hide self sponsored cards"),
|
StringResource("revanced_adremover_self_sponsor_enabled_title", "Hide self sponsored cards"),
|
||||||
@@ -218,7 +164,30 @@ class GeneralAdsResourcePatch : ResourcePatch {
|
|||||||
StringResource("revanced_adremover_self_sponsor_enabled_summary_on", "Self sponsored cards are hidden"),
|
StringResource("revanced_adremover_self_sponsor_enabled_summary_on", "Self sponsored cards are hidden"),
|
||||||
StringResource("revanced_adremover_self_sponsor_enabled_summary_off", "Self sponsored cards are shown")
|
StringResource("revanced_adremover_self_sponsor_enabled_summary_off", "Self sponsored cards are shown")
|
||||||
),
|
),
|
||||||
PreferenceScreen(
|
SwitchPreference(
|
||||||
|
"revanced_adremover_separator",
|
||||||
|
StringResource("revanced_adremover_separator_title", "Hide gray separator"),
|
||||||
|
true,
|
||||||
|
StringResource("revanced_adremover_separator_summary_on", "Gray separators are hidden"),
|
||||||
|
StringResource("revanced_adremover_separator_summary_off", "Gray separators are shown")
|
||||||
|
),
|
||||||
|
SwitchPreference(
|
||||||
|
"revanced_adremover_chapter_teaser",
|
||||||
|
StringResource(
|
||||||
|
"revanced_adremover_chapter_teaser_enabled_title",
|
||||||
|
"Hide chapter teaser under videos"
|
||||||
|
),
|
||||||
|
true,
|
||||||
|
StringResource(
|
||||||
|
"revanced_adremover_chapter_teaser_enabled_summary_on",
|
||||||
|
"Chapter teasers are hidden"
|
||||||
|
),
|
||||||
|
StringResource(
|
||||||
|
"revanced_adremover_chapter_teaser_enabled_summary_off",
|
||||||
|
"Chapter teasers are shown"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
app.revanced.patches.shared.settings.preference.impl.PreferenceScreen(
|
||||||
"revanced_adremover_custom",
|
"revanced_adremover_custom",
|
||||||
StringResource("revanced_adremover_custom_title", "Custom filter"),
|
StringResource("revanced_adremover_custom_title", "Custom filter"),
|
||||||
listOf(
|
listOf(
|
||||||
@@ -238,7 +207,7 @@ class GeneralAdsResourcePatch : ResourcePatch {
|
|||||||
"Custom filter is disabled"
|
"Custom filter is disabled"
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
// TODO: This should be a dynamic ListPreference, which does not exist yet
|
// TODO: This should be a ListPreference, which does not exist yet
|
||||||
TextPreference(
|
TextPreference(
|
||||||
"revanced_adremover_custom_strings",
|
"revanced_adremover_custom_strings",
|
||||||
StringResource("revanced_adremover_custom_strings_title", "Custom filter"),
|
StringResource("revanced_adremover_custom_strings_title", "Custom filter"),
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.49.37")
|
"com.google.android.youtube", arrayOf("17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -1,49 +0,0 @@
|
|||||||
package app.revanced.patches.youtube.interaction.copyvideourl.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.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.patches.youtube.interaction.copyvideourl.annotation.CopyVideoUrlCompatibility
|
|
||||||
import app.revanced.patches.youtube.interaction.copyvideourl.resource.patch.CopyVideoUrlResourcePatch
|
|
||||||
import app.revanced.patches.youtube.misc.playercontrols.bytecode.patch.PlayerControlsBytecodePatch
|
|
||||||
import app.revanced.patches.youtube.misc.video.information.patch.VideoInformationPatch
|
|
||||||
|
|
||||||
@Patch
|
|
||||||
@Name("copy-video-url")
|
|
||||||
@Description("Adds buttons in player to copy video links.")
|
|
||||||
@DependsOn([
|
|
||||||
CopyVideoUrlResourcePatch::class,
|
|
||||||
PlayerControlsBytecodePatch::class,
|
|
||||||
VideoInformationPatch::class
|
|
||||||
])
|
|
||||||
@CopyVideoUrlCompatibility
|
|
||||||
@Version("0.0.1")
|
|
||||||
class CopyVideoUrlBytecodePatch : BytecodePatch() {
|
|
||||||
private companion object {
|
|
||||||
const val INTEGRATIONS_PACKAGE = "Lapp/revanced/integrations"
|
|
||||||
const val INTEGRATIONS_PLAYER_PACKAGE = "$INTEGRATIONS_PACKAGE/videoplayer"
|
|
||||||
val BUTTONS_DESCRIPTORS = listOf(
|
|
||||||
"$INTEGRATIONS_PLAYER_PACKAGE/CopyVideoUrlButton;",
|
|
||||||
"$INTEGRATIONS_PLAYER_PACKAGE/CopyVideoUrlTimestampButton;"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun execute(context: BytecodeContext): PatchResult {
|
|
||||||
|
|
||||||
// Initialize buttons and inject visibility control
|
|
||||||
BUTTONS_DESCRIPTORS.forEach { descriptor ->
|
|
||||||
val initializeButtonDescriptor = "$descriptor->initializeButton(Ljava/lang/Object;)V"
|
|
||||||
val visibilityDescriptor = "$descriptor->changeVisibility(Z)V"
|
|
||||||
PlayerControlsBytecodePatch.initializeControl(initializeButtonDescriptor)
|
|
||||||
PlayerControlsBytecodePatch.injectVisibilityCheckCall(visibilityDescriptor)
|
|
||||||
}
|
|
||||||
|
|
||||||
return PatchResultSuccess()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
package app.revanced.patches.youtube.interaction.copyvideourl.resource.patch
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Description
|
|
||||||
import app.revanced.patcher.annotation.Name
|
|
||||||
import app.revanced.patcher.annotation.Version
|
|
||||||
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.patcher.patch.annotations.DependsOn
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.PreferenceScreen
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.SwitchPreference
|
|
||||||
import app.revanced.patches.youtube.interaction.copyvideourl.annotation.CopyVideoUrlCompatibility
|
|
||||||
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.settings.bytecode.patch.SettingsPatch
|
|
||||||
import app.revanced.util.resources.ResourceUtils
|
|
||||||
import app.revanced.util.resources.ResourceUtils.copyResources
|
|
||||||
|
|
||||||
@Name("copy-video-url-resource")
|
|
||||||
@Description("Makes necessary changes to resources for copy video link buttons.")
|
|
||||||
@DependsOn([BottomControlsResourcePatch::class, FixLocaleConfigErrorPatch::class, SettingsPatch::class])
|
|
||||||
@CopyVideoUrlCompatibility
|
|
||||||
@Version("0.0.1")
|
|
||||||
class CopyVideoUrlResourcePatch : ResourcePatch {
|
|
||||||
override fun execute(context: ResourceContext): PatchResult {
|
|
||||||
SettingsPatch.PreferenceScreen.INTERACTIONS.addPreferences(
|
|
||||||
PreferenceScreen(
|
|
||||||
"revanced_copy_video_url",
|
|
||||||
StringResource("revanced_copy_video_url_title", "Copy video URL settings"),
|
|
||||||
listOf(
|
|
||||||
SwitchPreference(
|
|
||||||
"revanced_copy_video_url",
|
|
||||||
StringResource("revanced_copy_video_url_enabled_title", "Show copy video URL button"),
|
|
||||||
true,
|
|
||||||
StringResource("revanced_copy_video_url_enabled_summary_on", "Button is shown, click to copy video URL without timestamp"),
|
|
||||||
StringResource("revanced_copy_video_url_enabled_summary_off", "Button is not shown")
|
|
||||||
),
|
|
||||||
SwitchPreference(
|
|
||||||
"revanced_copy_video_url_timestamp",
|
|
||||||
StringResource("revanced_copy_video_url_timestamp_enabled_title", "Show copy timestamp URL button"),
|
|
||||||
true,
|
|
||||||
StringResource("revanced_copy_video_url_timestamp_enabled_summary_on", "Button is shown, click to copy video URL with timestamp"),
|
|
||||||
StringResource("revanced_copy_video_url_timestamp_enabled_summary_off", "Button is not shown")
|
|
||||||
)
|
|
||||||
),
|
|
||||||
StringResource("revanced_copy_video_url_summary", "Settings related to copy URL buttons in video player")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
context.copyResources("copyvideourl", ResourceUtils.ResourceGroup(
|
|
||||||
resourceDirectoryName = "drawable",
|
|
||||||
"revanced_yt_copy.xml",
|
|
||||||
"revanced_yt_copy_timestamp.xml"
|
|
||||||
))
|
|
||||||
|
|
||||||
BottomControlsResourcePatch.addControls("copyvideourl/host/layout/${BottomControlsResourcePatch.TARGET_RESOURCE_NAME}")
|
|
||||||
|
|
||||||
return PatchResultSuccess()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.49.37")
|
"com.google.android.youtube", arrayOf("17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -12,11 +12,11 @@ import app.revanced.patcher.patch.annotations.Patch
|
|||||||
import app.revanced.patches.youtube.interaction.downloads.annotation.DownloadsCompatibility
|
import app.revanced.patches.youtube.interaction.downloads.annotation.DownloadsCompatibility
|
||||||
import app.revanced.patches.youtube.interaction.downloads.resource.patch.DownloadsResourcePatch
|
import app.revanced.patches.youtube.interaction.downloads.resource.patch.DownloadsResourcePatch
|
||||||
import app.revanced.patches.youtube.misc.playercontrols.bytecode.patch.PlayerControlsBytecodePatch
|
import app.revanced.patches.youtube.misc.playercontrols.bytecode.patch.PlayerControlsBytecodePatch
|
||||||
import app.revanced.patches.youtube.misc.video.information.patch.VideoInformationPatch
|
import app.revanced.patches.youtube.misc.video.videoid.patch.VideoIdPatch
|
||||||
|
|
||||||
@Patch
|
@Patch
|
||||||
@Name("downloads")
|
@Name("downloads")
|
||||||
@DependsOn([DownloadsResourcePatch::class, PlayerControlsBytecodePatch::class, VideoInformationPatch::class])
|
@DependsOn([DownloadsResourcePatch::class, PlayerControlsBytecodePatch::class, VideoIdPatch::class])
|
||||||
@Description("Enables downloading music and videos from YouTube.")
|
@Description("Enables downloading music and videos from YouTube.")
|
||||||
@DownloadsCompatibility
|
@DownloadsCompatibility
|
||||||
@Version("0.0.1")
|
@Version("0.0.1")
|
||||||
@@ -29,7 +29,7 @@ class DownloadsBytecodePatch : BytecodePatch() {
|
|||||||
initialize the control
|
initialize the control
|
||||||
*/
|
*/
|
||||||
|
|
||||||
val initializeDownloadsDescriptor = "$classDescriptor->initializeButton(Ljava/lang/Object;)V"
|
val initializeDownloadsDescriptor = "$classDescriptor->initializeDownloadButton(Ljava/lang/Object;)V"
|
||||||
PlayerControlsBytecodePatch.initializeControl(initializeDownloadsDescriptor)
|
PlayerControlsBytecodePatch.initializeControl(initializeDownloadsDescriptor)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -39,6 +39,14 @@ class DownloadsBytecodePatch : BytecodePatch() {
|
|||||||
val changeVisibilityDescriptor = "$classDescriptor->changeVisibility(Z)V"
|
val changeVisibilityDescriptor = "$classDescriptor->changeVisibility(Z)V"
|
||||||
PlayerControlsBytecodePatch.injectVisibilityCheckCall(changeVisibilityDescriptor)
|
PlayerControlsBytecodePatch.injectVisibilityCheckCall(changeVisibilityDescriptor)
|
||||||
|
|
||||||
|
/*
|
||||||
|
add code to change to update the video id
|
||||||
|
*/
|
||||||
|
|
||||||
|
val setVideoIdDescriptor =
|
||||||
|
"L$integrationsPackage/patches/downloads/DownloadsPatch;->setVideoId(Ljava/lang/String;)V"
|
||||||
|
VideoIdPatch.injectCall(setVideoIdDescriptor)
|
||||||
|
|
||||||
return PatchResultSuccess()
|
return PatchResultSuccess()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8,14 +8,18 @@ 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.*
|
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
||||||
|
import app.revanced.patches.shared.settings.preference.impl.SwitchPreference
|
||||||
|
import app.revanced.patches.shared.settings.preference.impl.TextPreference
|
||||||
|
import app.revanced.patches.shared.settings.preference.impl.InputType
|
||||||
|
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
|
||||||
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
|
||||||
|
import app.revanced.util.resources.ResourceUtils.Settings.mergeStrings
|
||||||
import app.revanced.util.resources.ResourceUtils.copyResources
|
import app.revanced.util.resources.ResourceUtils.copyResources
|
||||||
import app.revanced.util.resources.ResourceUtils.mergeStrings
|
|
||||||
|
|
||||||
@Name("downloads-resource-patch")
|
@Name("downloads-resource-patch")
|
||||||
@DependsOn([BottomControlsResourcePatch::class, FixLocaleConfigErrorPatch::class, SettingsPatch::class])
|
@DependsOn([BottomControlsResourcePatch::class, FixLocaleConfigErrorPatch::class, SettingsPatch::class])
|
||||||
@@ -33,8 +37,8 @@ class DownloadsResourcePatch : ResourcePatch {
|
|||||||
"revanced_downloads",
|
"revanced_downloads",
|
||||||
StringResource("revanced_downloads_enabled_title", "Show download button"),
|
StringResource("revanced_downloads_enabled_title", "Show download button"),
|
||||||
true,
|
true,
|
||||||
StringResource("revanced_downloads_enabled_summary_on", "Download button is shown"),
|
StringResource("revanced_downloads_enabled_summary_on", "Download button is visible"),
|
||||||
StringResource("revanced_downloads_enabled_summary_off", "Download button is not shown")
|
StringResource("revanced_downloads_enabled_summary_off", "Download button is hidden")
|
||||||
),
|
),
|
||||||
TextPreference(
|
TextPreference(
|
||||||
"revanced_downloads_package_name",
|
"revanced_downloads_package_name",
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.49.37")
|
"com.google.android.youtube", arrayOf("17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.49.37")
|
"com.google.android.youtube", arrayOf("17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package app.revanced.patches.youtube.interaction.swipecontrols.patch.bytecode
|
package app.revanced.patches.youtube.interaction.swipecontrols.patch.bytecode
|
||||||
|
|
||||||
import app.revanced.extensions.transformMethods
|
import app.revanced.extensions.transformMethods
|
||||||
|
import app.revanced.extensions.traverseClassHierarchy
|
||||||
import app.revanced.patcher.annotation.Description
|
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
|
||||||
@@ -10,11 +11,10 @@ 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.DependsOn
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
import app.revanced.patcher.patch.annotations.Patch
|
||||||
import app.revanced.patcher.util.TypeUtil.traverseClassHierarchy
|
|
||||||
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
|
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
|
||||||
import app.revanced.patches.shared.fingerprints.WatchWhileActivityFingerprint
|
|
||||||
import app.revanced.patches.youtube.interaction.swipecontrols.annotation.SwipeControlsCompatibility
|
import app.revanced.patches.youtube.interaction.swipecontrols.annotation.SwipeControlsCompatibility
|
||||||
import app.revanced.patches.youtube.interaction.swipecontrols.fingerprints.SwipeControlsHostActivityFingerprint
|
import app.revanced.patches.youtube.interaction.swipecontrols.fingerprints.SwipeControlsHostActivityFingerprint
|
||||||
|
import app.revanced.patches.shared.fingerprints.WatchWhileActivityFingerprint
|
||||||
import app.revanced.patches.youtube.interaction.swipecontrols.patch.resource.SwipeControlsResourcePatch
|
import app.revanced.patches.youtube.interaction.swipecontrols.patch.resource.SwipeControlsResourcePatch
|
||||||
import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch
|
import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch
|
||||||
import app.revanced.patches.youtube.misc.playertype.patch.PlayerTypeHookPatch
|
import app.revanced.patches.youtube.misc.playertype.patch.PlayerTypeHookPatch
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.49.37")
|
"com.google.android.youtube", arrayOf("17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.49.37")
|
"com.google.android.youtube", arrayOf("17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -38,11 +38,11 @@ class HideAutoplayButtonPatch : BytecodePatch(
|
|||||||
override fun execute(context: BytecodeContext): PatchResult {
|
override fun execute(context: BytecodeContext): PatchResult {
|
||||||
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
|
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
"revanced_hide_autoplay_button",
|
"revanced_autoplay_button_enabled",
|
||||||
StringResource("revanced_hide_autoplay_button_title", "Hide autoplay button"),
|
StringResource("revanced_autoplay_button_enabled_title", "Show autoplay button"),
|
||||||
true,
|
false,
|
||||||
StringResource("revanced_hide_autoplay_button_summary_on", "Autoplay button is hidden"),
|
StringResource("revanced_autoplay_button_summary_on", "Autoplay button is shown"),
|
||||||
StringResource("revanced_hide_autoplay_button_summary_off", "Autoplay button is shown")
|
StringResource("revanced_autoplay_button_summary_off", "Autoplay button is hidden")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.49.37")
|
"com.google.android.youtube", arrayOf("17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -31,46 +31,46 @@ class HideButtonsPatch : ResourcePatch {
|
|||||||
StringResource("revanced_hide_buttons_title", "Hide action buttons"),
|
StringResource("revanced_hide_buttons_title", "Hide action buttons"),
|
||||||
listOf(
|
listOf(
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
"revanced_hide_like_button",
|
"revanced_like_button",
|
||||||
StringResource("revanced_hide_like_button_title", "Hide like button"),
|
StringResource("revanced_like_button_title", "Hide like button"),
|
||||||
false,
|
false,
|
||||||
StringResource("revanced_hide_like_button_summary_on", "Like button is hidden"),
|
StringResource("revanced_like_button_on", "Like button is hidden"),
|
||||||
StringResource("revanced_hide_like_button_summary_off", "Like button is shown")
|
StringResource("revanced_like_button_off", "Like button is shown")
|
||||||
),
|
),
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
"revanced_hide_dislike_button",
|
"revanced_dislike_button",
|
||||||
StringResource("revanced_hide_dislike_button_title", "Hide dislike button"),
|
StringResource("revanced_dislike_button_title", "Hide dislike button"),
|
||||||
false,
|
false,
|
||||||
StringResource("revanced_hide_dislike_button_summary_on", "Dislike button is hidden"),
|
StringResource("revanced_dislike_button_on", "Dislike button is hidden"),
|
||||||
StringResource("revanced_hide_dislike_button_summary_off", "Dislike button is shown")
|
StringResource("revanced_dislike_button_off", "Dislike button is shown")
|
||||||
),
|
),
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
"revanced_hide_download_button",
|
"revanced_download_button",
|
||||||
StringResource("revanced_hide_download_button_title", "Hide download button"),
|
StringResource("revanced_download_button_title", "Hide download button"),
|
||||||
false,
|
false,
|
||||||
StringResource("revanced_hide_download_button_summary_on", "Download button is hidden"),
|
StringResource("revanced_download_button_on", "Download button is hidden"),
|
||||||
StringResource("revanced_hide_download_button_summary_off", "Download button is shown")
|
StringResource("revanced_download_button_off", "Download button is shown")
|
||||||
),
|
),
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
"revanced_hide_playlist_button",
|
"revanced_playlist_button",
|
||||||
StringResource("revanced_hide_playlist_button_title", "Hide playlist button"),
|
StringResource("revanced_playlist_button_title", "Hide playlist button"),
|
||||||
false,
|
false,
|
||||||
StringResource("revanced_hide_playlist_button_summary_on", "Playlist button is hidden"),
|
StringResource("revanced_playlist_button_on", "Playlist button is hidden"),
|
||||||
StringResource("revanced_hide_playlist_button_summary_off", "Playlist button is shown")
|
StringResource("revanced_playlist_button_off", "Playlist button is shown")
|
||||||
),
|
),
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
"revanced_hide_action_button",
|
"revanced_action_button",
|
||||||
StringResource("revanced_hide_action_button_title", "Hide create, clip and thanks buttons"),
|
StringResource("revanced_action_button_title", "Hide create, clip and thanks buttons"),
|
||||||
true,
|
true,
|
||||||
StringResource("revanced_hide_action_button_summary_on", "Buttons are hidden"),
|
StringResource("revanced_action_button_on", "Buttons are hidden"),
|
||||||
StringResource("revanced_hide_action_button_summary_off", "Buttons are shown")
|
StringResource("revanced_action_button_off", "Buttons are shown")
|
||||||
),
|
),
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
"revanced_hide_share_button",
|
"revanced_share_button",
|
||||||
StringResource("revanced_hide_share_button_title", "Hide share button"),
|
StringResource("revanced_share_button_title", "Hide share button"),
|
||||||
false,
|
false,
|
||||||
StringResource("revanced_hide_share_button_summary_on", "Share button is hidden"),
|
StringResource("revanced_share_button_on", "Share button is hidden"),
|
||||||
StringResource("revanced_hide_share_button_summaryoff", "Share button is shown")
|
StringResource("revanced_share_button_off", "Share button is shown")
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
StringResource("revanced_hide_buttons_summary", "Hide or show buttons under videos")
|
StringResource("revanced_hide_buttons_summary", "Hide or show buttons under videos")
|
||||||
|
|||||||
@@ -27,11 +27,11 @@ class HideCastButtonPatch : BytecodePatch() {
|
|||||||
override fun execute(context: BytecodeContext): PatchResult {
|
override fun execute(context: BytecodeContext): PatchResult {
|
||||||
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
|
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
"revanced_hide_cast_button",
|
"revanced_cast_button_enabled",
|
||||||
StringResource("revanced_hide_cast_button_title", "Hide cast button"),
|
StringResource("revanced_cast_button_enabled_title", "Show cast button"),
|
||||||
true,
|
false,
|
||||||
StringResource("revanced_hide_cast_button_summary_on", "Cast button is hidden"),
|
StringResource("revanced_cast_button_summary_on", "Cast button is shown"),
|
||||||
StringResource("revanced_hide_cast_button_summary_off", "Cast button is shown")
|
StringResource("revanced_cast_button_summary_off", "Cast button is hidden")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.49.37")
|
"com.google.android.youtube", arrayOf("17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ class CommentsResourcePatch : ResourcePatch {
|
|||||||
listOf(
|
listOf(
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
"revanced_hide_comments_section",
|
"revanced_hide_comments_section",
|
||||||
StringResource("revanced_hide_comments_section_title", "Hide comments section"),
|
StringResource("revanced_hide_comments_section_title", "Remove comments section"),
|
||||||
false,
|
false,
|
||||||
StringResource("revanced_hide_comments_section_summary_on", "Comment section is hidden"),
|
StringResource("revanced_hide_comments_section_summary_on", "Comment section is hidden"),
|
||||||
StringResource("revanced_hide_comments_section_summary_off", "Comment section is shown")
|
StringResource("revanced_hide_comments_section_summary_off", "Comment section is shown")
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.49.37")
|
"com.google.android.youtube", arrayOf("17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -35,11 +35,11 @@ class FullscreenPanelsRemoverPatch : BytecodePatch(
|
|||||||
override fun execute(context: BytecodeContext): PatchResult {
|
override fun execute(context: BytecodeContext): PatchResult {
|
||||||
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
|
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
"revanced_hide_fullscreen_panels",
|
"revanced_fullscreen_panels_enabled",
|
||||||
StringResource("revanced_hide_fullscreen_panels_title", "Hide fullscreen panels"),
|
StringResource("revanced_fullscreen_panels_enabled_title", "Show fullscreen panels"),
|
||||||
true,
|
false,
|
||||||
StringResource("revanced_hide_fullscreen_panels_summary_on", "Fullscreen panels are hidden"),
|
StringResource("revanced_fullscreen_panels_summary_on", "Fullscreen panels are shown"),
|
||||||
StringResource("revanced_hide_fullscreen_panels_summary_off", "Fullscreen panels are shown")
|
StringResource("revanced_fullscreen_panels_summary_off", "Fullscreen panels are hidden")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.49.37")
|
"com.google.android.youtube", arrayOf("17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -26,10 +26,10 @@ class AlbumCardsResourcePatch : ResourcePatch {
|
|||||||
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
|
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
"revanced_hide_album_cards",
|
"revanced_hide_album_cards",
|
||||||
StringResource("revanced_hide_album_cards_title", "Hide album cards"),
|
StringResource("revanced_hide_album_cards_title", "Hide the album cards"),
|
||||||
false,
|
false,
|
||||||
StringResource("revanced_hide_album_cards_summary_on", "Music album cards are hidden"),
|
StringResource("revanced_hide_album_cards_summary_on", "Album cards is hidden"),
|
||||||
StringResource("revanced_hide_album_cards_summary_off", "Music album cards are shown")
|
StringResource("revanced_hide_album_cards_summary_off", "Album cards is visible")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.49.37")
|
"com.google.android.youtube", arrayOf("17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.49.37")
|
"com.google.android.youtube", arrayOf("17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -26,10 +26,10 @@ class CrowdfundingBoxResourcePatch : ResourcePatch {
|
|||||||
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
|
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
"revanced_hide_crowdfunding_box",
|
"revanced_hide_crowdfunding_box",
|
||||||
StringResource("revanced_hide_crowdfunding_box_title", "Hide crowdfunding box"),
|
StringResource("revanced_hide_crowdfunding_box_title", "Hide the crowdfunding box"),
|
||||||
false,
|
false,
|
||||||
StringResource("revanced_hide_crowdfunding_box_summary_on", "Crowdfunding box is hidden"),
|
StringResource("revanced_hide_crowdfunding_box_summary_on", "Crowdfunding box is hidden"),
|
||||||
StringResource("revanced_hide_crowdfunding_box_summary_off", "Crowdfunding box is shown")
|
StringResource("revanced_hide_crowdfunding_box_summary_off", "Crowdfunding box is visible")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.49.37")
|
"com.google.android.youtube", arrayOf("17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.49.37")
|
"com.google.android.youtube", arrayOf("17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ class HideInfocardsPatch : BytecodePatch(
|
|||||||
"Landroid/view/View;->setVisibility(I)V")
|
"Landroid/view/View;->setVisibility(I)V")
|
||||||
}
|
}
|
||||||
|
|
||||||
addInstructions(
|
replaceInstruction(
|
||||||
invokeInstructionIndex,
|
invokeInstructionIndex,
|
||||||
"invoke-static {v${(instruction(invokeInstructionIndex) as? BuilderInstruction35c)?.registerC}}," +
|
"invoke-static {v${(instruction(invokeInstructionIndex) as? BuilderInstruction35c)?.registerC}}," +
|
||||||
" Lapp/revanced/integrations/patches/HideInfocardsPatch;->hideInfocardsIncognito(Landroid/view/View;)V"
|
" Lapp/revanced/integrations/patches/HideInfocardsPatch;->hideInfocardsIncognito(Landroid/view/View;)V"
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.49.37")
|
"com.google.android.youtube", arrayOf("17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -35,11 +35,11 @@ class MixPlaylistsPatch : BytecodePatch(
|
|||||||
override fun execute(context: BytecodeContext): PatchResult {
|
override fun execute(context: BytecodeContext): PatchResult {
|
||||||
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
|
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
"revanced_hide_mix_playlists",
|
"revanced_mix_playlists_hidden",
|
||||||
StringResource("revanced_hide_mix_playlists_title", "Hide mix playlists"),
|
StringResource("revanced_mix_playlists_title", "Hide mix playlists"),
|
||||||
false,
|
false,
|
||||||
StringResource("revanced_hide_mix_playlists_summary_on", "Mix playlists are hidden"),
|
StringResource("revanced_mix_playlists_summary_on", "Mix playlists are hidden"),
|
||||||
StringResource("revanced_hide_mix_playlists_summary_off", "Mix playlists are shown")
|
StringResource("revanced_mix_playlists_summary_off", "Mix playlists are shown")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.49.37")
|
"com.google.android.youtube", arrayOf("17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -5,20 +5,18 @@ 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.addInstructions
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint.Companion.resolve
|
|
||||||
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.DependsOn
|
||||||
import app.revanced.patcher.patch.annotations.Patch
|
import app.revanced.patcher.patch.annotations.Patch
|
||||||
import app.revanced.patches.shared.fingerprints.SeekbarFingerprint
|
|
||||||
import app.revanced.patches.shared.fingerprints.SeekbarOnDrawFingerprint
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.StringResource
|
|
||||||
import app.revanced.patches.shared.settings.preference.impl.SwitchPreference
|
|
||||||
import app.revanced.patches.youtube.layout.hidetimeandseekbar.annotations.HideTimeAndSeekbarCompatibility
|
import app.revanced.patches.youtube.layout.hidetimeandseekbar.annotations.HideTimeAndSeekbarCompatibility
|
||||||
import app.revanced.patches.youtube.layout.hidetimeandseekbar.fingerprints.TimeCounterFingerprint
|
import app.revanced.patches.youtube.layout.hidetimeandseekbar.fingerprints.TimeCounterFingerprint
|
||||||
|
import app.revanced.patches.youtube.layout.sponsorblock.bytecode.fingerprints.CreateVideoPlayerSeekbarFingerprint
|
||||||
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.preference.impl.SwitchPreference
|
||||||
|
|
||||||
@Patch
|
@Patch
|
||||||
@DependsOn([IntegrationsPatch::class, SettingsPatch::class])
|
@DependsOn([IntegrationsPatch::class, SettingsPatch::class])
|
||||||
@@ -28,7 +26,7 @@ import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch
|
|||||||
@Version("0.0.1")
|
@Version("0.0.1")
|
||||||
class HideTimeAndSeekbarPatch : BytecodePatch(
|
class HideTimeAndSeekbarPatch : BytecodePatch(
|
||||||
listOf(
|
listOf(
|
||||||
SeekbarFingerprint, TimeCounterFingerprint
|
CreateVideoPlayerSeekbarFingerprint, TimeCounterFingerprint
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
override fun execute(context: BytecodeContext): PatchResult {
|
override fun execute(context: BytecodeContext): PatchResult {
|
||||||
@@ -38,13 +36,11 @@ class HideTimeAndSeekbarPatch : BytecodePatch(
|
|||||||
StringResource("revanced_hide_time_and_seekbar_title", "Hide time and seekbar"),
|
StringResource("revanced_hide_time_and_seekbar_title", "Hide time and seekbar"),
|
||||||
false,
|
false,
|
||||||
StringResource("revanced_hide_time_and_seekbar_summary_on", "Time and seekbar are hidden"),
|
StringResource("revanced_hide_time_and_seekbar_summary_on", "Time and seekbar are hidden"),
|
||||||
StringResource("revanced_hide_time_and_seekbar_summary_off", "Time and seekbar are shown")
|
StringResource("revanced_hide_time_and_seekbar_summary_off", "Time and seekbar are visible")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
val createVideoPlayerSeekbarMethod = SeekbarFingerprint.result!!.let {
|
val createVideoPlayerSeekbarMethod = CreateVideoPlayerSeekbarFingerprint.result!!.mutableMethod
|
||||||
SeekbarOnDrawFingerprint.apply { resolve(context, it.mutableClass) }
|
|
||||||
}.result!!.mutableMethod
|
|
||||||
|
|
||||||
createVideoPlayerSeekbarMethod.addInstructions(
|
createVideoPlayerSeekbarMethod.addInstructions(
|
||||||
0, """
|
0, """
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
package app.revanced.patches.youtube.layout.homepage.breakingnews.annotations
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Compatibility
|
|
||||||
import app.revanced.patcher.annotation.Package
|
|
||||||
|
|
||||||
@Compatibility(
|
|
||||||
[Package(
|
|
||||||
"com.google.android.youtube", arrayOf("17.49.37")
|
|
||||||
)]
|
|
||||||
)
|
|
||||||
@Target(AnnotationTarget.CLASS)
|
|
||||||
@Retention(AnnotationRetention.RUNTIME)
|
|
||||||
internal annotation class BreakingNewsCompatibility
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
package app.revanced.patches.youtube.layout.homepage.breakingnews.bytecode.fingerprints
|
|
||||||
|
|
||||||
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
|
|
||||||
import app.revanced.patches.youtube.layout.homepage.breakingnews.resource.patch.BreakingNewsResourcePatch
|
|
||||||
import org.jf.dexlib2.Opcode
|
|
||||||
import org.jf.dexlib2.iface.instruction.WideLiteralInstruction
|
|
||||||
|
|
||||||
object BreakingNewsFingerprint : MethodFingerprint(
|
|
||||||
opcodes = listOf(
|
|
||||||
Opcode.CONST,
|
|
||||||
Opcode.CONST_4,
|
|
||||||
Opcode.INVOKE_VIRTUAL,
|
|
||||||
Opcode.MOVE_RESULT_OBJECT,
|
|
||||||
Opcode.CHECK_CAST,
|
|
||||||
Opcode.IPUT_OBJECT,
|
|
||||||
),
|
|
||||||
customFingerprint = { methodDef ->
|
|
||||||
methodDef.implementation?.instructions?.any { instruction ->
|
|
||||||
instruction.opcode.ordinal == Opcode.CONST.ordinal &&
|
|
||||||
(instruction as? WideLiteralInstruction)?.wideLiteral == BreakingNewsResourcePatch.horizontalCardListId
|
|
||||||
} == true
|
|
||||||
}
|
|
||||||
)
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
package app.revanced.patches.youtube.layout.homepage.breakingnews.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.addInstruction
|
|
||||||
import app.revanced.patcher.extensions.instruction
|
|
||||||
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.patches.youtube.layout.homepage.breakingnews.annotations.BreakingNewsCompatibility
|
|
||||||
import app.revanced.patches.youtube.layout.homepage.breakingnews.bytecode.fingerprints.BreakingNewsFingerprint
|
|
||||||
import app.revanced.patches.youtube.layout.homepage.breakingnews.resource.patch.BreakingNewsResourcePatch
|
|
||||||
import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch
|
|
||||||
import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
|
|
||||||
|
|
||||||
@Patch
|
|
||||||
@DependsOn([IntegrationsPatch::class, BreakingNewsResourcePatch::class])
|
|
||||||
@Name("hide-breaking-news-shelf")
|
|
||||||
@Description("Hides the breaking news shelf on the homepage tab.")
|
|
||||||
@BreakingNewsCompatibility
|
|
||||||
@Version("0.0.1")
|
|
||||||
class BreakingNewsPatch : BytecodePatch(
|
|
||||||
listOf(
|
|
||||||
BreakingNewsFingerprint,
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
override fun execute(context: BytecodeContext): PatchResult {
|
|
||||||
val breakingNewsResult = BreakingNewsFingerprint.result!!
|
|
||||||
val breakingNewsMethod = breakingNewsResult.mutableMethod
|
|
||||||
|
|
||||||
val moveResultObjectIndex =
|
|
||||||
breakingNewsResult.scanResult.patternScanResult!!.endIndex - 2
|
|
||||||
|
|
||||||
breakingNewsMethod.addInstruction(
|
|
||||||
moveResultObjectIndex + 1, """
|
|
||||||
invoke-static {v${(breakingNewsMethod.instruction(moveResultObjectIndex) as OneRegisterInstruction).registerA}}, Lapp/revanced/integrations/patches/HideBreakingNewsPatch;->hideBreakingNews(Landroid/view/View;)V
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
|
|
||||||
return PatchResultSuccess()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
package app.revanced.patches.youtube.layout.homepage.breakingnews.resource.patch
|
|
||||||
|
|
||||||
import app.revanced.patcher.annotation.Name
|
|
||||||
import app.revanced.patcher.annotation.Version
|
|
||||||
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.patcher.patch.annotations.DependsOn
|
|
||||||
import app.revanced.patches.shared.mapping.misc.patch.ResourceMappingPatch
|
|
||||||
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.preference.impl.SwitchPreference
|
|
||||||
|
|
||||||
@Name("breaking-news-shelf-resource-patch")
|
|
||||||
@DependsOn([SettingsPatch::class, ResourceMappingPatch::class])
|
|
||||||
@Version("0.0.1")
|
|
||||||
class BreakingNewsResourcePatch : ResourcePatch {
|
|
||||||
companion object {
|
|
||||||
internal var horizontalCardListId: Long = -1
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun execute(context: ResourceContext): PatchResult {
|
|
||||||
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
|
|
||||||
SwitchPreference(
|
|
||||||
"revanced_hide_breaking_news",
|
|
||||||
StringResource("revanced_hide_breaking_news_title", "Hide breaking news"),
|
|
||||||
true,
|
|
||||||
StringResource("revanced_hide_breaking_news_summary_on", "Breaking news are hidden"),
|
|
||||||
StringResource("revanced_hide_breaking_news_summary_off", "Breaking news are shown")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
horizontalCardListId = ResourceMappingPatch.resourceMappings.single {
|
|
||||||
it.type == "layout" && it.name == "horizontal_card_list"
|
|
||||||
}.id
|
|
||||||
|
|
||||||
return PatchResultSuccess()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.49.37")
|
"com.google.android.youtube", arrayOf("17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -21,11 +21,9 @@ import org.jf.dexlib2.iface.instruction.FiveRegisterInstruction
|
|||||||
@Patch
|
@Patch
|
||||||
@DependsOn([IntegrationsPatch::class, SettingsPatch::class])
|
@DependsOn([IntegrationsPatch::class, SettingsPatch::class])
|
||||||
@Name("old-quality-layout")
|
@Name("old-quality-layout")
|
||||||
@Description("Enables the original video quality flyout in the video player settings")
|
@Description("Enables the original quality flyout menu.")
|
||||||
@OldQualityLayoutCompatibility
|
@OldQualityLayoutCompatibility
|
||||||
@Version("0.0.1")
|
@Version("0.0.1")
|
||||||
// new ReVanced users have no idea what it means to use the "old quality layout menu"
|
|
||||||
// maybe rename this patch to better describe what it provides (ie: user-selectable-video-resolution )
|
|
||||||
class OldQualityLayoutPatch : BytecodePatch(
|
class OldQualityLayoutPatch : BytecodePatch(
|
||||||
listOf(QualityMenuViewInflateFingerprint)
|
listOf(QualityMenuViewInflateFingerprint)
|
||||||
) {
|
) {
|
||||||
@@ -33,10 +31,10 @@ class OldQualityLayoutPatch : BytecodePatch(
|
|||||||
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
|
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
"revanced_use_old_style_quality_settings",
|
"revanced_use_old_style_quality_settings",
|
||||||
StringResource("revanced_old_style_quality_settings_enabled_title", "Use old video quality player menu"),
|
StringResource("revanced_old_style_quality_settings_enabled_title", "Use old quality layout"),
|
||||||
true,
|
true,
|
||||||
StringResource("revanced_old_style_quality_settings_summary_on", "Old video quality menu is used"),
|
StringResource("revanced_old_style_quality_settings_summary_on", "Old quality settings are shown"),
|
||||||
StringResource("revanced_old_style_quality_settings_summary_off", "Old video quality menu is not used")
|
StringResource("revanced_old_style_quality_settings_summary_off", "New quality settings are shown")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.49.37")
|
"com.google.android.youtube", arrayOf("17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -26,10 +26,10 @@ class HideEmailAddressResourcePatch : ResourcePatch {
|
|||||||
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
|
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
"revanced_hide_email_address",
|
"revanced_hide_email_address",
|
||||||
StringResource("revanced_hide_email_address_title", "Hide email in account switcher"),
|
StringResource("revanced_hide_email_address_title", "Hide the email address"),
|
||||||
false,
|
false,
|
||||||
StringResource("revanced_hide_email_address_summary_on", "Email address is hidden"),
|
StringResource("revanced_hide_email_address_summary_on", "Email address is hidden"),
|
||||||
StringResource("revanced_hide_email_address_summary_off", "Email address is shown")
|
StringResource("revanced_hide_email_address_summary_off", "Email address is visible")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import app.revanced.patcher.annotation.Package
|
|||||||
|
|
||||||
@Compatibility(
|
@Compatibility(
|
||||||
[Package(
|
[Package(
|
||||||
"com.google.android.youtube", arrayOf("17.49.37")
|
"com.google.android.youtube", arrayOf("17.45.36")
|
||||||
)]
|
)]
|
||||||
)
|
)
|
||||||
@Target(AnnotationTarget.CLASS)
|
@Target(AnnotationTarget.CLASS)
|
||||||
|
|||||||
@@ -37,11 +37,11 @@ class CreateButtonRemoverPatch : BytecodePatch() {
|
|||||||
override fun execute(context: BytecodeContext): PatchResult {
|
override fun execute(context: BytecodeContext): PatchResult {
|
||||||
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
|
SettingsPatch.PreferenceScreen.LAYOUT.addPreferences(
|
||||||
SwitchPreference(
|
SwitchPreference(
|
||||||
"revanced_hide_create_button",
|
"revanced_create_button_enabled",
|
||||||
StringResource("revanced_hide_create_button_title", "Hide create button"),
|
StringResource("revanced_create_button_enabled_title", "Show create button"),
|
||||||
true,
|
false,
|
||||||
StringResource("revanced_hide_create_button_summary_on", "Create button is hidden"),
|
StringResource("revanced_create_button_summary_on", "Create button is shown"),
|
||||||
StringResource("revanced_hide_create_button_summary_off", "Create button is shown")
|
StringResource("revanced_create_button_summary_off", "Create button is hidden")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user