Compare commits

...

479 Commits

Author SHA1 Message Date
semantic-release-bot
ef9f85e8f4 chore(release): 2.141.0-dev.1 [skip ci]
# [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)

### Features

* **twitch/block-embedded-ads:** `block-embedded-ads` patch ([#1166](https://github.com/revanced/revanced-patches/issues/1166)) ([edde860](edde860953))
2022-12-05 22:48:09 +00:00
Ushie
edde860953 feat(twitch/block-embedded-ads): block-embedded-ads patch (#1166)
Co-authored-by: Tim Schneeberger <tim.schneeberger@outlook.de>
2022-12-05 23:46:29 +01:00
semantic-release-bot
715d34400e chore(release): 2.140.1-dev.1 [skip ci]
## [2.140.1-dev.1](https://github.com/revanced/revanced-patches/compare/v2.140.0...v2.140.1-dev.1) (2022-12-05)
2022-12-05 22:34:36 +00:00
oSumAtrIX
cbfa7ce531 build: install node modules locally 2022-12-05 23:30:17 +01:00
oSumAtrIX
376053ea62 build: use latest ubuntu runner image 2022-12-05 23:13:35 +01:00
oSumAtrIX
1d166b14d2 build: do not clean after running gradlew build 2022-12-05 23:11:46 +01:00
oSumAtrIX
3dd0640a56 build: improve step to setup the Android SDK 2022-12-05 23:11:46 +01:00
oSumAtrIX
2686deeefe build: use latest node version 2022-12-05 23:09:26 +01:00
oSumAtrIX
126a13269e build: use cache for node 2022-12-05 23:03:48 +01:00
semantic-release-bot
60be0670df chore(release): 2.140.0 [skip ci]
# [2.140.0](https://github.com/revanced/revanced-patches/compare/v2.139.0...v2.140.0) (2022-12-05)

### Features

* **music:** bump compatibility to v5.34.51 ([9a7e36c](9a7e36cc26))
2022-12-05 20:46:00 +00:00
oSumAtrIX
9a7e36cc26 feat(music): bump compatibility to v5.34.51 2022-12-05 21:43:49 +01:00
semantic-release-bot
67c7ece771 chore(release): 2.139.0 [skip ci]
# [2.139.0](https://github.com/revanced/revanced-patches/compare/v2.138.0...v2.139.0) (2022-12-05)

### Features

* **youtube/return-youtube-dislike:** improve settings labels ([#1203](https://github.com/revanced/revanced-patches/issues/1203)) ([7913046](79130468bd))
2022-12-05 12:53:00 +00:00
LisousEinaiKyrios
79130468bd feat(youtube/return-youtube-dislike): improve settings labels (#1203) 2022-12-05 13:50:49 +01:00
semantic-release-bot
1510365ae7 chore(release): 2.138.0 [skip ci]
# [2.138.0](https://github.com/revanced/revanced-patches/compare/v2.137.0...v2.138.0) (2022-12-05)

### Features

* **youtube/debugging:** print stack traces ([4289a49](4289a49176))
2022-12-05 05:36:21 +00:00
oSumAtrIX
4289a49176 feat(youtube/debugging): print stack traces 2022-12-05 06:34:01 +01:00
semantic-release-bot
81634fa36b chore(release): 2.137.0 [skip ci]
# [2.137.0](https://github.com/revanced/revanced-patches/compare/v2.136.0...v2.137.0) (2022-12-03)

### Features

* **youtube/return-youtube-dislike:** show dislike as a percentage ([#1185](https://github.com/revanced/revanced-patches/issues/1185)) ([e5cb571](e5cb571bb8))
2022-12-03 16:25:19 +00:00
LisousEinaiKyrios
e5cb571bb8 feat(youtube/return-youtube-dislike): show dislike as a percentage (#1185)
Co-authored-by: LisousEinaiKyrios <>
2022-12-03 17:23:28 +01:00
semantic-release-bot
35e8832af3 chore(release): 2.136.0 [skip ci]
# [2.136.0](https://github.com/revanced/revanced-patches/compare/v2.135.0...v2.136.0) (2022-12-02)

### Bug Fixes

* syntax error in compatiblity annotation ([#1181](https://github.com/revanced/revanced-patches/issues/1181)) ([23bf905](23bf905055))

### Features

* **youtube:** drop support for compatibility of old versions ([2e3d004](2e3d004027))
2022-12-02 14:20:41 +00:00
Robert
23bf905055 fix: syntax error in compatiblity annotation (#1181) 2022-12-02 15:19:16 +01:00
oSumAtrIX
2e3d004027 feat(youtube): drop support for compatibility of old versions 2022-12-02 05:07:41 +01:00
semantic-release-bot
cf33d30353 chore(release): 2.135.0 [skip ci]
# [2.135.0](https://github.com/revanced/revanced-patches/compare/v2.134.1...v2.135.0) (2022-12-02)

### Features

* sort README patch table by amount of patches per package ([791dcb5](791dcb5c4a))
2022-12-02 03:36:42 +00:00
oSumAtrIX
791dcb5c4a feat: sort README patch table by amount of patches per package 2022-12-02 04:35:06 +01:00
semantic-release-bot
19546fb745 chore(release): 2.134.1 [skip ci]
## [2.134.1](https://github.com/revanced/revanced-patches/compare/v2.134.0...v2.134.1) (2022-12-02)

### Bug Fixes

* **youtube:** swipe gesture on home screen ([f7644ae](f7644ae7d2)), closes [#610](https://github.com/revanced/revanced-patches/issues/610)
2022-12-02 03:07:15 +00:00
oSumAtrIX
e0bf8fb403 chore: bump patcher dependency version 2022-12-02 04:04:49 +01:00
oSumAtrIX
f7644ae7d2 fix(youtube): swipe gesture on home screen
Fixes #610
2022-12-02 04:04:49 +01:00
semantic-release-bot
0965bb82f4 refactor: move patches to correct package 2022-12-02 04:04:48 +01:00
semantic-release-bot
9c2e30d8d8 chore(release): 2.134.0 [skip ci]
# [2.134.0](https://github.com/revanced/revanced-patches/compare/v2.133.0...v2.134.0) (2022-12-02)

### Bug Fixes

* **anytracker:** syntax error in fingerprint ([#1165](https://github.com/revanced/revanced-patches/issues/1165)) ([4f757ac](4f757acaff))

### Features

* **anytracker:** `unlock-premium` patch ([#1165](https://github.com/revanced/revanced-patches/issues/1165)) ([041fb72](041fb72603))
2022-12-02 01:38:22 +00:00
oSumAtrIX
3a9078b1d8 chore: bump patcher dependency version 2022-12-02 02:35:34 +01:00
oSumAtrIX
4f757acaff fix(anytracker): syntax error in fingerprint (#1165) 2022-12-02 02:19:04 +01:00
oSumAtrIX
041fb72603 feat(anytracker): unlock-premium patch (#1165)
Co-authored-by: FineFindus <63370021+FineFindus@users.noreply.github.com>
2022-12-01 22:48:33 +01:00
semantic-release-bot
af84aeb3d0 chore(release): 2.133.0 [skip ci]
# [2.133.0](https://github.com/revanced/revanced-patches/compare/v2.132.0...v2.133.0) (2022-12-01)

### Features

* **moneymanager:** `unlock-premium` patch ([#1173](https://github.com/revanced/revanced-patches/issues/1173)) ([4da1d53](4da1d53e81))
2022-12-01 17:51:15 +00:00
johnconner122
4da1d53e81 feat(moneymanager): unlock-premium patch (#1173)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-12-01 18:49:40 +01:00
semantic-release-bot
cb9786c4de chore(release): 2.132.0 [skip ci]
# [2.132.0](https://github.com/revanced/revanced-patches/compare/v2.131.0...v2.132.0) (2022-12-01)

### Features

* **sleepasandroid:** `unlock-premium` patch ([#1172](https://github.com/revanced/revanced-patches/issues/1172)) ([9d9d938](9d9d938129))
* **twitch:** remove `block-embedded-ads` patch ([#1164](https://github.com/revanced/revanced-patches/issues/1164)) ([403e887](403e887503))
2022-12-01 17:20:22 +00:00
aliveoutside
9d9d938129 feat(sleepasandroid): unlock-premium patch (#1172)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-12-01 18:18:43 +01:00
Ushie
403e887503 feat(twitch): remove block-embedded-ads patch (#1164) 2022-11-30 22:36:21 +01:00
semantic-release-bot
401ebd073b chore(release): 2.131.0 [skip ci]
# [2.131.0](https://github.com/revanced/revanced-patches/compare/v2.130.0...v2.131.0) (2022-11-30)

### Features

* **twitch/block-embedded-ads:** `block-embedded-ads` patch support ([#1160](https://github.com/revanced/revanced-patches/issues/1160)) ([69590fd](69590fdf00))
2022-11-30 14:11:58 +00:00
Tim Schneeberger
69590fdf00 feat(twitch/block-embedded-ads): block-embedded-ads patch support (#1160) 2022-11-30 15:10:07 +01:00
semantic-release-bot
18f1222dae chore(release): 2.130.0 [skip ci]
# [2.130.0](https://github.com/revanced/revanced-patches/compare/v2.129.0...v2.130.0) (2022-11-29)

### Features

* **youtube/enable-wide-searchbar:** bump compatibility to v17.45.36 ([5451a52](5451a52374))
2022-11-29 00:46:01 +00:00
oSumAtrIX
5451a52374 feat(youtube/enable-wide-searchbar): bump compatibility to v17.45.36 2022-11-29 01:44:18 +01:00
semantic-release-bot
85e337c6ee chore(release): 2.129.0 [skip ci]
# [2.129.0](https://github.com/revanced/revanced-patches/compare/v2.128.0...v2.129.0) (2022-11-28)

### Features

* **youtube/hide-create-button:** bump compatibility to v17.45.36 ([37e9df2](37e9df2c7d))
* **youtube/hide-shorts-button:** bump compatibility to v17.45.36 ([e5e33f2](e5e33f2323))
2022-11-28 23:57:26 +00:00
oSumAtrIX
37e9df2c7d feat(youtube/hide-create-button): bump compatibility to v17.45.36 2022-11-29 00:55:34 +01:00
oSumAtrIX
e5e33f2323 feat(youtube/hide-shorts-button): bump compatibility to v17.45.36 2022-11-29 00:55:31 +01:00
semantic-release-bot
a882d59235 chore(release): 2.128.0 [skip ci]
# [2.128.0](https://github.com/revanced/revanced-patches/compare/v2.127.0...v2.128.0) (2022-11-28)

### Features

* **twitch:** settings for patches ([#1142](https://github.com/revanced/revanced-patches/issues/1142)) ([02bb641](02bb641469))
2022-11-28 23:22:34 +00:00
Tim Schneeberger
02bb641469 feat(twitch): settings for patches (#1142) 2022-11-29 00:20:58 +01:00
semantic-release-bot
54310c8114 chore(release): 2.127.0 [skip ci]
# [2.127.0](https://github.com/revanced/revanced-patches/compare/v2.126.1...v2.127.0) (2022-11-28)

### Features

* **twitch:** `settings` patch ([#1075](https://github.com/revanced/revanced-patches/issues/1075)) ([632a083](632a083363))
2022-11-28 22:52:01 +00:00
Tim Schneeberger
632a083363 feat(twitch): settings patch (#1075)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-11-28 23:50:04 +01:00
Tim Schneeberger
2e278d4f91 refactor: abstract settings patch (#1109)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-11-28 20:13:34 +01:00
semantic-release-bot
4f7911a190 chore(release): 2.126.1 [skip ci]
## [2.126.1](https://github.com/revanced/revanced-patches/compare/v2.126.0...v2.126.1) (2022-11-28)

### Bug Fixes

* **youtube/custom-video-speed:** fuzzy scan on fingerprint  ([#1135](https://github.com/revanced/revanced-patches/issues/1135)) ([920e72a](920e72a9d6))
2022-11-28 10:58:11 +00:00
FineFindus
920e72a9d6 fix(youtube/custom-video-speed): fuzzy scan on fingerprint (#1135) 2022-11-28 11:56:12 +01:00
d4rkk3y
059d2a9cbb refactor(tiktok): simplify names (#1085) 2022-11-28 03:11:32 +01:00
semantic-release-bot
2e72e15fb1 chore(release): 2.126.0 [skip ci]
# [2.126.0](https://github.com/revanced/revanced-patches/compare/v2.125.0...v2.126.0) (2022-11-28)

### Features

* **backdrops:** `pro-unlock` patch ([#1121](https://github.com/revanced/revanced-patches/issues/1121)) ([285169e](285169e27e))
2022-11-28 01:38:21 +00:00
josesilveiraa
285169e27e feat(backdrops): pro-unlock patch (#1121) 2022-11-28 02:36:39 +01:00
semantic-release-bot
aaa5bbf5d9 chore(release): 2.125.0 [skip ci]
# [2.125.0](https://github.com/revanced/revanced-patches/compare/v2.124.0...v2.125.0) (2022-11-26)

### Features

* **myexpenses:** `unlock-pro` patch ([#1120](https://github.com/revanced/revanced-patches/issues/1120)) ([b3796d6](b3796d6551))
2022-11-26 14:44:43 +00:00
Jonathan
b3796d6551 feat(myexpenses): unlock-pro patch (#1120) 2022-11-26 15:43:04 +01:00
semantic-release-bot
801effdeb1 chore(release): 2.124.0 [skip ci]
# [2.124.0](https://github.com/revanced/revanced-patches/compare/v2.123.0...v2.124.0) (2022-11-26)

### Features

* **citra:** `premium-unlock` patch ([#1115](https://github.com/revanced/revanced-patches/issues/1115)) ([7a07f57](7a07f579ed))
* **crunchyroll:** `enable-downloads` patch ([#1119](https://github.com/revanced/revanced-patches/issues/1119)) ([e6e8f5d](e6e8f5d284))
2022-11-26 14:11:37 +00:00
josesilveiraa
7a07f579ed feat(citra): premium-unlock patch (#1115)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-11-26 15:10:09 +01:00
johnconner122
e6e8f5d284 feat(crunchyroll): enable-downloads patch (#1119)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-11-26 15:08:28 +01:00
semantic-release-bot
537c709965 chore(release): 2.123.0 [skip ci]
# [2.123.0](https://github.com/revanced/revanced-patches/compare/v2.122.0...v2.123.0) (2022-11-26)

### Features

* **windyapp:** `unlock-pro` patch ([#1118](https://github.com/revanced/revanced-patches/issues/1118)) ([20a7edf](20a7edff72))
2022-11-26 14:07:55 +00:00
Jonathan
20a7edff72 feat(windyapp): unlock-pro patch (#1118) 2022-11-26 15:06:15 +01:00
semantic-release-bot
746c8242a6 chore(release): 2.122.0 [skip ci]
# [2.122.0](https://github.com/revanced/revanced-patches/compare/v2.121.0...v2.122.0) (2022-11-25)

### Features

* **tiktok:** `sim-spoof` patch ([#1088](https://github.com/revanced/revanced-patches/issues/1088)) ([526b312](526b312ae5))
2022-11-25 10:21:36 +00:00
d4rkk3y
526b312ae5 feat(tiktok): sim-spoof patch (#1088)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-11-25 11:20:04 +01:00
oSumAtrIX
f736cfbc59 refactor: remove unused extension methods 2022-11-25 00:30:35 +01:00
Tim Schneeberger
10329c24e6 refactor: abstract settings patch away from YouTube (#1103)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-11-25 00:05:54 +01:00
oSumAtrIX
8487688816 refactor(youtube/hide-cast-button): quality of life changes 2022-11-24 23:14:16 +01:00
semantic-release-bot
aafd89f1be chore(release): 2.121.0 [skip ci]
# [2.121.0](https://github.com/revanced/revanced-patches/compare/v2.120.0...v2.121.0) (2022-11-23)

### Features

* **anytracker:** remove `unlock-premium` patch ([#1094](https://github.com/revanced/revanced-patches/issues/1094)) ([7f9fb09](7f9fb09fac))
2022-11-23 16:21:42 +00:00
Shervin Koushan
7f9fb09fac feat(anytracker): remove unlock-premium patch (#1094) 2022-11-23 17:19:48 +01:00
semantic-release-bot
0bfa4a7957 chore(release): 2.120.0 [skip ci]
# [2.120.0](https://github.com/revanced/revanced-patches/compare/v2.119.0...v2.120.0) (2022-11-23)

### Features

* **youtube:** `remove-player-button-background` patch ([#855](https://github.com/revanced/revanced-patches/issues/855)) ([5988f63](5988f6360b))
2022-11-23 06:36:16 +00:00
johnconner122
5988f6360b feat(youtube): remove-player-button-background patch (#855)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-11-23 07:34:39 +01:00
semantic-release-bot
0973e74ec5 chore(release): 2.119.0 [skip ci]
# [2.119.0](https://github.com/revanced/revanced-patches/compare/v2.118.1...v2.119.0) (2022-11-23)

### Features

* **twitch:** ˋintegrationsˋ  dependency patch ([#1074](https://github.com/revanced/revanced-patches/issues/1074)) ([8196f26](8196f26c54))
2022-11-23 06:32:04 +00:00
Tim Schneeberger
8196f26c54 feat(twitch): ˋintegrationsˋ dependency patch (#1074) 2022-11-23 07:30:11 +01:00
semantic-release-bot
91fa3bb306 chore(release): 2.118.1 [skip ci]
## [2.118.1](https://github.com/revanced/revanced-patches/compare/v2.118.0...v2.118.1) (2022-11-22)
2022-11-22 23:37:23 +00:00
oSumAtrIX
5836d18dcf build: bump dependencies 2022-11-23 00:35:08 +01:00
oSumAtrIX
ded80febd4 feat!: apply changes from ReVanced Patcher 2022-11-23 00:35:07 +01:00
semantic-release-bot
1a822a5962 chore(release): 2.118.0 [skip ci]
# [2.118.0](https://github.com/revanced/revanced-patches/compare/v2.117.1...v2.118.0) (2022-11-22)

### Features

* **youtube:** bump patches compatibility to v17.45.36 ([5ee123f](5ee123f0af))
2022-11-22 22:56:01 +00:00
oSumAtrIX
5ee123f0af feat(youtube): bump patches compatibility to v17.45.36 2022-11-22 23:54:07 +01:00
semantic-release-bot
ee6534c4b9 chore(release): 2.117.1 [skip ci]
## [2.117.1](https://github.com/revanced/revanced-patches/compare/v2.117.0...v2.117.1) (2022-11-22)

### Bug Fixes

* **youtube/general-ads:** hide reels shelf ([2f8b911](2f8b9110f6))
2022-11-22 22:43:58 +00:00
oSumAtrIX
2f8b9110f6 fix(youtube/general-ads): hide reels shelf 2022-11-22 23:41:53 +01:00
oSumAtrIX
efaf394d5b refactor: apply auto-refactor 2022-11-22 20:18:29 +01:00
Sculas
d65f44dbd2 refactor(integrations): merge integrations code (#1052)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-11-21 22:26:43 +01:00
semantic-release-bot
df5646d1c3 chore(release): 2.117.0 [skip ci]
# [2.117.0](https://github.com/revanced/revanced-patches/compare/v2.116.0...v2.117.0) (2022-11-21)

### Features

* **tiktok:** `tiktok-web-login` patch ([#593](https://github.com/revanced/revanced-patches/issues/593)) ([879f9c5](879f9c5a61))
2022-11-21 15:16:45 +00:00
d4rkk3y
879f9c5a61 feat(tiktok): tiktok-web-login patch (#593) 2022-11-21 16:14:58 +01:00
d4rkk3y
557e270b39 frat(tiktok/settings): make patch name unique (#1082) 2022-11-21 16:12:44 +01:00
semantic-release-bot
e3ed9b44b8 chore(release): 2.116.0 [skip ci]
# [2.116.0](https://github.com/revanced/revanced-patches/compare/v2.115.0...v2.116.0) (2022-11-21)

### Features

* **youtube/theme:** make amoled the default color for dark theme background" ([5a904ce](5a904ce9be))
2022-11-21 02:55:24 +00:00
oSumAtrIX
5a904ce9be feat(youtube/theme): make amoled the default color for dark theme background"
This reverts commit b099d8b60b.
2022-11-21 03:53:18 +01:00
semantic-release-bot
b7f4380ec1 chore(release): 2.115.0 [skip ci]
# [2.115.0](https://github.com/revanced/revanced-patches/compare/v2.114.2...v2.115.0) (2022-11-21)

### Features

* **youtube/general-ads:** normalize switch names ([e9d5a5e](e9d5a5e0c7))
* **youtube/theme:** exclude the patch by default ([bfda80c](bfda80c6ec))
* **youtube/theme:** make dark the default color for dark theme background ([b099d8b](b099d8b60b))
2022-11-21 00:00:19 +00:00
oSumAtrIX
bfda80c6ec feat(youtube/theme): exclude the patch by default 2022-11-21 00:58:56 +01:00
oSumAtrIX
b099d8b60b feat(youtube/theme): make dark the default color for dark theme background 2022-11-21 00:58:56 +01:00
oSumAtrIX
34045ea018 refactor(youtube/general-ads): apply auto-refactor 2022-11-21 00:58:55 +01:00
oSumAtrIX
e9d5a5e0c7 feat(youtube/general-ads): normalize switch names 2022-11-21 00:58:55 +01:00
semantic-release-bot
ee966d88a2 chore(release): 2.114.2 [skip ci]
## [2.114.2](https://github.com/revanced/revanced-patches/compare/v2.114.1...v2.114.2) (2022-11-20)

### Bug Fixes

* **youtube/general-ads:** hide bytecode home ad view ([a2717d1](a2717d1fa7))
* **youtube/general-ads:** remove unused switch ([e05dd02](e05dd024a2))
2022-11-20 23:27:07 +00:00
oSumAtrIX
e05dd024a2 fix(youtube/general-ads): remove unused switch 2022-11-21 00:25:31 +01:00
oSumAtrIX
a2717d1fa7 fix(youtube/general-ads): hide bytecode home ad view 2022-11-21 00:25:30 +01:00
oSumAtrIX
160cd3aa6e refactor(youtube/resource-mapping): move to appropriate package 2022-11-21 00:25:30 +01:00
oSumAtrIX
58f98a2b31 style(youtube/resource-mapping): use shorter name for class 2022-11-21 00:25:29 +01:00
semantic-release-bot
ec2419b047 chore(release): 2.114.1 [skip ci]
## [2.114.1](https://github.com/revanced/revanced-patches/compare/v2.114.0...v2.114.1) (2022-11-20)

### Bug Fixes

* **tiktok/settings:** make compatible with newer versions ([#1057](https://github.com/revanced/revanced-patches/issues/1057)) ([79e6fcb](79e6fcb8d5))
2022-11-20 16:12:02 +00:00
d4rkk3y
79e6fcb8d5 fix(tiktok/settings): make compatible with newer versions (#1057)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-11-20 17:09:59 +01:00
semantic-release-bot
ed70e8accc chore(release): 2.114.0 [skip ci]
# [2.114.0](https://github.com/revanced/revanced-patches/compare/v2.113.0...v2.114.0) (2022-11-20)

### Features

* **youtube:** `disable-zoom-haptics` patch ([#1079](https://github.com/revanced/revanced-patches/issues/1079)) ([974a042](974a042e76))
2022-11-20 13:26:23 +00:00
aliernfrog
974a042e76 feat(youtube): disable-zoom-haptics patch (#1079) 2022-11-20 14:24:41 +01:00
semantic-release-bot
ebfac83aad chore(release): 2.113.0 [skip ci]
# [2.113.0](https://github.com/revanced/revanced-patches/compare/v2.112.0...v2.113.0) (2022-11-19)

### Bug Fixes

* **youtube/general-ads:** hide ads with buttons ([8909a06](8909a06bdf))

### Features

* **youtube/general-ads:** custom component filter ([b315b6f](b315b6f1c5))
* **youtube/general-ads:** hide gray separators ([478ef39](478ef397a1))
2022-11-19 22:34:33 +00:00
oSumAtrIX
b315b6f1c5 feat(youtube/general-ads): custom component filter 2022-11-19 23:21:57 +01:00
oSumAtrIX
478ef397a1 feat(youtube/general-ads): hide gray separators 2022-11-19 23:21:38 +01:00
oSumAtrIX
8909a06bdf fix(youtube/general-ads): hide ads with buttons 2022-11-19 23:21:22 +01:00
semantic-release-bot
1381c3b3f2 chore(release): 2.112.0 [skip ci]
# [2.112.0](https://github.com/revanced/revanced-patches/compare/v2.111.3...v2.112.0) (2022-11-19)

### Features

* **anytracker:** `unlock-premium` patch ([#1076](https://github.com/revanced/revanced-patches/issues/1076)) ([5e28da1](5e28da188b))
2022-11-19 16:14:23 +00:00
Jonathan
5e28da188b feat(anytracker): unlock-premium patch (#1076) 2022-11-19 17:12:51 +01:00
semantic-release-bot
e1c7d7a335 chore(release): 2.111.3 [skip ci]
## [2.111.3](https://github.com/revanced/revanced-patches/compare/v2.111.2...v2.111.3) (2022-11-18)

### Bug Fixes

* **youtube/litho-filter:** use correct type for switch case ([#1068](https://github.com/revanced/revanced-patches/issues/1068)) ([c0123af](c0123af0b3))
2022-11-18 19:16:21 +00:00
Canny
c0123af0b3 fix(youtube/litho-filter): use correct type for switch case (#1068)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-11-18 20:13:09 +01:00
semantic-release-bot
f4188fa996 chore(release): 2.111.2 [skip ci]
## [2.111.2](https://github.com/revanced/revanced-patches/compare/v2.111.1...v2.111.2) (2022-11-18)

### Bug Fixes

* **youtube/general-ads:** import correct compatibility annotation ([#1065](https://github.com/revanced/revanced-patches/issues/1065)) ([3f2383c](3f2383c9e6))
2022-11-18 10:10:36 +00:00
Ushie
3f2383c9e6 fix(youtube/general-ads): import correct compatibility annotation (#1065) 2022-11-18 11:08:29 +01:00
semantic-release-bot
7caebd54f2 chore(release): 2.111.1 [skip ci]
## [2.111.1](https://github.com/revanced/revanced-patches/compare/v2.111.0...v2.111.1) (2022-11-18)
2022-11-18 01:39:35 +00:00
oSumAtrIX
4a96d58415 refactor(youtube/general-ads): abstract into LithoFilterPatch 2022-11-18 02:36:47 +01:00
oSumAtrIX
5b161e4263 build: bump patcher dependency version 2022-11-18 02:36:47 +01:00
semantic-release-bot
96d27675a7 chore(release): 2.111.0 [skip ci]
# [2.111.0](https://github.com/revanced/revanced-patches/compare/v2.110.0...v2.111.0) (2022-11-15)

### Features

* **iconpackstudio:** `unlock-pro` patch ([#1047](https://github.com/revanced/revanced-patches/issues/1047)) ([a48af3c](a48af3c320))
2022-11-15 23:05:39 +00:00
Jonathan
a48af3c320 feat(iconpackstudio): unlock-pro patch (#1047) 2022-11-16 00:03:24 +01:00
semantic-release-bot
d64673ce03 chore(release): 2.110.0 [skip ci]
# [2.110.0](https://github.com/revanced/revanced-patches/compare/v2.109.0...v2.110.0) (2022-11-15)

### Features

* **youtube/debugging:** include by default & add option to debug on Android ([c9564ee](c9564ee9aa))
* **youtube/debugging:** use more suitable preference title ([9c3d48c](9c3d48c0ab))
* **youtube/general-ads:** hide chapter teaser under videos ([33b7ec8](33b7ec8709))
* **youtube/general-ads:** hide self sponsored cards ([b8b9ab6](b8b9ab6ef5))
* **youtube/general-ads:** hide shorts in search ([e29803f](e29803fd8a))
2022-11-15 01:37:55 +00:00
oSumAtrIX
33b7ec8709 feat(youtube/general-ads): hide chapter teaser under videos 2022-11-15 02:35:34 +01:00
oSumAtrIX
e29803fd8a feat(youtube/general-ads): hide shorts in search 2022-11-15 02:35:34 +01:00
oSumAtrIX
bfcf7a6dc4 refactor(youtube/general-ads): apply auto-formatting 2022-11-15 02:35:34 +01:00
oSumAtrIX
b8b9ab6ef5 feat(youtube/general-ads): hide self sponsored cards 2022-11-15 02:35:33 +01:00
oSumAtrIX
9c3d48c0ab feat(youtube/debugging): use more suitable preference title 2022-11-15 02:35:33 +01:00
oSumAtrIX
c9564ee9aa feat(youtube/debugging): include by default & add option to debug on Android 2022-11-15 02:35:33 +01:00
semantic-release-bot
1e0037e044 chore(release): 2.109.0 [skip ci]
# [2.109.0](https://github.com/revanced/revanced-patches/compare/v2.108.0...v2.109.0) (2022-11-13)

### Features

* **twitch:** `block-audio-ads` patch ([#1041](https://github.com/revanced/revanced-patches/issues/1041)) ([fb9e091](fb9e091634))
* **twitch:** `block-video-ads` patch  ([#1040](https://github.com/revanced/revanced-patches/issues/1040)) ([9fa40d8](9fa40d8a57))
2022-11-13 23:30:15 +00:00
Tim Schneeberger
9fa40d8a57 feat(twitch): block-video-ads patch (#1040)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-11-14 00:28:23 +01:00
Tim Schneeberger
fb9e091634 feat(twitch): block-audio-ads patch (#1041)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-11-14 00:27:59 +01:00
semantic-release-bot
4fad9bc1cd chore(release): 2.108.0 [skip ci]
# [2.108.0](https://github.com/revanced/revanced-patches/compare/v2.107.0...v2.108.0) (2022-11-13)

### Features

* **twitch:** `debug-mode` patch ([#1031](https://github.com/revanced/revanced-patches/issues/1031)) ([a586d1c](a586d1c658))
2022-11-13 01:28:02 +00:00
Tim Schneeberger
a586d1c658 feat(twitch): debug-mode patch (#1031)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-11-13 02:26:14 +01:00
semantic-release-bot
0849006601 chore(release): 2.107.0 [skip ci]
# [2.107.0](https://github.com/revanced/revanced-patches/compare/v2.106.1...v2.107.0) (2022-11-13)

### Features

* **ticktick:** `unlock-themes` patch ([#1028](https://github.com/revanced/revanced-patches/issues/1028)) ([a7eda35](a7eda355cd))
* **twitch/show-deleted-messages:** `show-deleted-messages` patch ([#1030](https://github.com/revanced/revanced-patches/issues/1030)) ([2612f55](2612f55476))
2022-11-13 01:24:46 +00:00
Jonathan
a7eda355cd feat(ticktick): unlock-themes patch (#1028) 2022-11-13 02:22:40 +01:00
Tim Schneeberger
2612f55476 feat(twitch/show-deleted-messages): show-deleted-messages patch (#1030)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-11-13 02:21:40 +01:00
semantic-release-bot
12b7308d60 chore(release): 2.106.1 [skip ci]
## [2.106.1](https://github.com/revanced/revanced-patches/compare/v2.106.0...v2.106.1) (2022-11-11)

### Bug Fixes

* **youtube/custom-branding:** use high resolution icons ([#1018](https://github.com/revanced/revanced-patches/issues/1018)) ([2f626a3](2f626a34df))
2022-11-11 10:56:27 +00:00
KAZI MMT
2f626a34df fix(youtube/custom-branding): use high resolution icons (#1018) 2022-11-11 11:54:05 +01:00
semantic-release-bot
82b33ff47f chore(release): 2.106.0 [skip ci]
# [2.106.0](https://github.com/revanced/revanced-patches/compare/v2.105.0...v2.106.0) (2022-11-09)

### Features

* **youtube:** `open-links-directly` patch ([#999](https://github.com/revanced/revanced-patches/issues/999)) ([2e06b8d](2e06b8d83f))
2022-11-09 20:43:55 +00:00
johnconner122
2e06b8d83f feat(youtube): open-links-directly patch (#999)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-11-09 21:42:07 +01:00
semantic-release-bot
e85e6746c0 chore(release): 2.105.0 [skip ci]
# [2.105.0](https://github.com/revanced/revanced-patches/compare/v2.104.2...v2.105.0) (2022-11-09)

### Features

* **nyx:** `unlock-pro` patch ([#1004](https://github.com/revanced/revanced-patches/issues/1004)) ([f72fd91](f72fd91082))
2022-11-09 12:48:57 +00:00
Jonathan
f72fd91082 feat(nyx): unlock-pro patch (#1004) 2022-11-09 13:46:55 +01:00
OxrxL
816d8fed87 refactor(youtube/general-ads-patch): squash extension classes (#1006) 2022-11-09 06:21:56 +01:00
OxrxL
8beb6c4250 refactor(youtube/general-ads-patch): remove unused code (#1005) 2022-11-09 01:20:13 +01:00
OxrxL
b40787f0c3 refactor(youtube/general-ads-patch): removed redundant code (#1003) 2022-11-08 18:10:04 +01:00
semantic-release-bot
125fdfd7aa chore(release): 2.104.2 [skip ci]
## [2.104.2](https://github.com/revanced/revanced-patches/compare/v2.104.1...v2.104.2) (2022-11-08)

### Bug Fixes

* **youtube/hide-endscreen-cards:** restore functionality ([#993](https://github.com/revanced/revanced-patches/issues/993)) ([38eceb7](38eceb743f))
2022-11-08 17:05:54 +00:00
OxrxL
38eceb743f fix(youtube/hide-endscreen-cards): restore functionality (#993)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-11-08 18:04:16 +01:00
semantic-release-bot
b5cb30c28a chore(release): 2.104.1 [skip ci]
## [2.104.1](https://github.com/revanced/revanced-patches/compare/v2.104.0...v2.104.1) (2022-11-07)

### Bug Fixes

* **youtube/general-ads:** incorrect description for info panels ([bd5c64d](bd5c64dbd7))
* **youtube/hide-info-cards:** remove initial popup of info-cards ([#992](https://github.com/revanced/revanced-patches/issues/992)) ([47fdda8](47fdda85ce))
2022-11-07 23:13:02 +00:00
OxrxL
47fdda85ce fix(youtube/hide-info-cards): remove initial popup of info-cards (#992)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-11-08 00:11:12 +01:00
oSumAtrIX
bd5c64dbd7 fix(youtube/general-ads): incorrect description for info panels 2022-11-08 00:09:28 +01:00
OxrxL
e20e8896a2 refactor(youtube/general-ads-patch): remove unnecessary patches (#994) 2022-11-07 13:55:31 +01:00
semantic-release-bot
3394b022c1 chore(release): 2.104.0 [skip ci]
# [2.104.0](https://github.com/revanced/revanced-patches/compare/v2.103.0...v2.104.0) (2022-11-06)

### Features

* **hexeditor:** `disable-ads` patch ([#973](https://github.com/revanced/revanced-patches/issues/973)) ([1866e1d](1866e1daa2))
2022-11-06 12:00:48 +00:00
johnconner122
1866e1daa2 feat(hexeditor): disable-ads patch (#973)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-11-06 12:58:43 +01:00
semantic-release-bot
a30085fc56 chore(release): 2.103.0 [skip ci]
# [2.103.0](https://github.com/revanced/revanced-patches/compare/v2.102.1...v2.103.0) (2022-11-05)

### Bug Fixes

* apply multiple changes from integrations, refactor package structure, class names and implementations ([cdc7086](cdc7086796))
* **youtube/video-information:** use correct compatibility annotation ([303732e](303732ecfa))

### Features

* **debugging:** simplify patch name and description ([a2a3a88](a2a3a887bb))
2022-11-05 21:02:39 +00:00
oSumAtrIX
303732ecfa fix(youtube/video-information): use correct compatibility annotation 2022-11-05 22:00:37 +01:00
Nico Mexis
534014094f build: update workflow actions (#982) [skip ci] 2022-11-05 15:26:13 +01:00
oSumAtrIX
cdc7086796 fix: apply multiple changes from integrations, refactor package structure, class names and implementations 2022-11-05 06:30:31 +01:00
oSumAtrIX
a2a3a887bb feat(debugging): simplify patch name and description 2022-11-05 06:30:31 +01:00
oSumAtrIX
66f8061dfc refactor: remove unused strings 2022-11-05 06:30:30 +01:00
semantic-release-bot
f10d32f141 chore(release): 2.102.1 [skip ci]
## [2.102.1](https://github.com/revanced/revanced-patches/compare/v2.102.0...v2.102.1) (2022-11-04)

### Bug Fixes

* use original app name ([#977](https://github.com/revanced/revanced-patches/issues/977)) ([c2e5bd3](c2e5bd3139))
2022-11-04 19:54:12 +00:00
KAZI MMT
c2e5bd3139 fix: use original app name (#977) 2022-11-04 20:51:54 +01:00
semantic-release-bot
8966b91f01 chore(release): 2.102.0 [skip ci]
# [2.102.0](https://github.com/revanced/revanced-patches/compare/v2.101.0...v2.102.0) (2022-11-03)

### Features

* **youtube-music:** bump patches compatibility to v5.31.50 ([#962](https://github.com/revanced/revanced-patches/issues/962)) ([393f510](393f5105fb))
2022-11-03 10:24:11 +00:00
KAZI MMT
393f5105fb feat(youtube-music): bump patches compatibility to v5.31.50 (#962) 2022-11-03 11:22:13 +01:00
semantic-release-bot
5a56fa11ac chore(release): 2.101.0 [skip ci]
# [2.101.0](https://github.com/revanced/revanced-patches/compare/v2.100.3...v2.101.0) (2022-11-01)

### Features

* **youtube:** bump patches compatibility to v17.43.36 ([#924](https://github.com/revanced/revanced-patches/issues/924)) ([74da7c0](74da7c078b))
2022-11-01 17:23:50 +00:00
OxrxL
74da7c078b feat(youtube): bump patches compatibility to v17.43.36 (#924) 2022-11-01 18:21:56 +01:00
semantic-release-bot
4d305b19c9 chore(release): 2.100.3 [skip ci]
## [2.100.3](https://github.com/revanced/revanced-patches/compare/v2.100.2...v2.100.3) (2022-11-01)

### Bug Fixes

* **youtube/video-ads:** add switch to temporarily fix buffering issues ([1d5fb1b](1d5fb1bfec))
2022-11-01 06:13:16 +00:00
oSumAtrIX
1d5fb1bfec fix(youtube/video-ads): add switch to temporarily fix buffering issues 2022-11-01 07:10:54 +01:00
semantic-release-bot
8285b37b8d chore(release): 2.100.2 [skip ci]
## [2.100.2](https://github.com/revanced/revanced-patches/compare/v2.100.1...v2.100.2) (2022-10-31)

### Bug Fixes

* **youtube/theme-patch:** respect app specific theme ([#946](https://github.com/revanced/revanced-patches/issues/946)) ([40cc03c](40cc03c3b9))
2022-10-31 23:08:40 +00:00
OxrxL
40cc03c3b9 fix(youtube/theme-patch): respect app specific theme (#946) 2022-11-01 00:06:42 +01:00
semantic-release-bot
56642b3b15 chore(release): 2.100.1 [skip ci]
## [2.100.1](https://github.com/revanced/revanced-patches/compare/v2.100.0...v2.100.1) (2022-10-31)
2022-10-31 14:17:35 +00:00
SriBalaji
42c291160b build: update actions/checkout to v3 (#942) 2022-10-31 15:15:14 +01:00
semantic-release-bot
f838ebbe8f chore(release): 2.100.0 [skip ci]
# [2.100.0](https://github.com/revanced/revanced-patches/compare/v2.99.0...v2.100.0) (2022-10-30)

### Features

* `hide-watch-in-vr` patch ([#911](https://github.com/revanced/revanced-patches/issues/911)) ([df84368](df843686ce))
2022-10-30 12:03:30 +00:00
inotia00
df843686ce feat: hide-watch-in-vr patch (#911)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-10-30 13:01:40 +01:00
semantic-release-bot
6887f92823 chore(release): 2.99.0 [skip ci]
# [2.99.0](https://github.com/revanced/revanced-patches/compare/v2.98.0...v2.99.0) (2022-10-29)

### Features

* **youtube/sponsorblock:** skip segments once automatically ([#907](https://github.com/revanced/revanced-patches/issues/907)) ([cbce50c](cbce50cef3))
2022-10-29 21:15:08 +00:00
thebestnom
cbce50cef3 feat(youtube/sponsorblock): skip segments once automatically (#907) 2022-10-29 23:13:15 +02:00
semantic-release-bot
e77184730d chore(release): 2.98.0 [skip ci]
# [2.98.0](https://github.com/revanced/revanced-patches/compare/v2.97.0...v2.98.0) (2022-10-29)

### Features

* **youtube/comments:** hide shorts comments button ([#866](https://github.com/revanced/revanced-patches/issues/866)) ([2004d79](2004d7951e))
2022-10-29 14:04:09 +00:00
OxrxL
2004d7951e feat(youtube/comments): hide shorts comments button (#866)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-10-29 16:01:52 +02:00
semantic-release-bot
7ab3c999a9 chore(release): 2.97.0 [skip ci]
# [2.97.0](https://github.com/revanced/revanced-patches/compare/v2.96.0...v2.97.0) (2022-10-29)

### Features

* **youtube/microg-support:** handle availability of Vanced MicroG ([b9e875c](b9e875ce0d))
2022-10-29 01:06:18 +00:00
oSumAtrIX
b9e875ce0d feat(youtube/microg-support): handle availability of Vanced MicroG 2022-10-29 03:03:57 +02:00
semantic-release-bot
e9279c0921 chore(release): 2.96.0 [skip ci]
# [2.96.0](https://github.com/revanced/revanced-patches/compare/v2.95.0...v2.96.0) (2022-10-28)

### Features

* **youtube/return-youtube-dislike:** compatibility for old and new button layout ([03b9b94](03b9b94d85))
2022-10-28 23:56:07 +00:00
oSumAtrIX
03b9b94d85 feat(youtube/return-youtube-dislike): compatibility for old and new button layout 2022-10-29 01:54:28 +02:00
semantic-release-bot
d3e8a5508e chore(release): 2.95.0 [skip ci]
# [2.95.0](https://github.com/revanced/revanced-patches/compare/v2.94.0...v2.95.0) (2022-10-28)

### Features

* **youtube:** bump patches compatibility to v17.41.37 ([#888](https://github.com/revanced/revanced-patches/issues/888)) ([8aba027](8aba027794))
2022-10-28 13:09:21 +00:00
OxrxL
8aba027794 feat(youtube): bump patches compatibility to v17.41.37 (#888) 2022-10-28 15:07:32 +02:00
semantic-release-bot
1cb7129b70 chore(release): 2.94.0 [skip ci]
# [2.94.0](https://github.com/revanced/revanced-patches/compare/v2.93.0...v2.94.0) (2022-10-28)

### Features

* remove compatibility for YouTube  v17.41.37 ([#886](https://github.com/revanced/revanced-patches/issues/886)) ([fc6226d](fc6226d61d))
2022-10-28 09:57:40 +00:00
oSumAtrIX
fc6226d61d feat: remove compatibility for YouTube v17.41.37 (#886) 2022-10-28 11:55:51 +02:00
semantic-release-bot
1a0012082a chore(release): 2.93.0 [skip ci]
# [2.93.0](https://github.com/revanced/revanced-patches/compare/v2.92.3...v2.93.0) (2022-10-27)

### Features

* bump YouTube patches to v17.41.37 ([#878](https://github.com/revanced/revanced-patches/issues/878)) ([d2e6c45](d2e6c45a56))
2022-10-27 23:42:10 +00:00
OxrxL
d2e6c45a56 feat: bump YouTube patches to v17.41.37 (#878) 2022-10-28 01:40:24 +02:00
semantic-release-bot
a22750f66f chore(release): 2.92.3 [skip ci]
## [2.92.3](https://github.com/revanced/revanced-patches/compare/v2.92.2...v2.92.3) (2022-10-27)

### Bug Fixes

* **youtube:** resolve fingerprints on mutable methods ([c769c42](c769c42465))
2022-10-27 20:48:42 +00:00
oSumAtrIX
c769c42465 fix(youtube): resolve fingerprints on mutable methods 2022-10-27 22:46:51 +02:00
semantic-release-bot
895b4808fc chore(release): 2.92.2 [skip ci]
## [2.92.2](https://github.com/revanced/revanced-patches/compare/v2.92.1...v2.92.2) (2022-10-27)

### Bug Fixes

* **youtube/theme:** theme missing gray color ([#873](https://github.com/revanced/revanced-patches/issues/873)) ([324d022](324d0221d8))
2022-10-27 14:03:24 +00:00
OxrxL
324d0221d8 fix(youtube/theme): theme missing gray color (#873) 2022-10-27 16:00:49 +02:00
semantic-release-bot
56b7a7d908 chore(release): 2.92.1 [skip ci]
## [2.92.1](https://github.com/revanced/revanced-patches/compare/v2.92.0...v2.92.1) (2022-10-26)

### Bug Fixes

* **youtube/custom-branding:** use proper scaled icons ([ba82fb8](ba82fb8fc9))
2022-10-26 23:13:00 +00:00
oSumAtrIX
11a550a91f refactor(youtube/custom-branding): improve general code quality 2022-10-27 01:11:10 +02:00
oSumAtrIX
ba82fb8fc9 fix(youtube/custom-branding): use proper scaled icons 2022-10-27 01:11:10 +02:00
semantic-release-bot
e348d96e85 chore(release): 2.92.0 [skip ci]
# [2.92.0](https://github.com/revanced/revanced-patches/compare/v2.91.0...v2.92.0) (2022-10-26)

### Features

* **youtube/hide-mix-playlists:** hide in video suggestions ([#854](https://github.com/revanced/revanced-patches/issues/854)) ([2bf9a54](2bf9a5420d))
2022-10-26 20:54:00 +00:00
johnconner122
2bf9a5420d feat(youtube/hide-mix-playlists): hide in video suggestions (#854)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-10-26 22:51:49 +02:00
semantic-release-bot
04cdc9dd24 chore(release): 2.91.0 [skip ci]
# [2.91.0](https://github.com/revanced/revanced-patches/compare/v2.90.0...v2.91.0) (2022-10-26)

### Features

* remove partially complete patch ([74f7d57](74f7d57971))
2022-10-26 04:59:06 +00:00
oSumAtrIX
74f7d57971 feat: remove partially complete patch 2022-10-26 06:56:18 +02:00
semantic-release-bot
836fb06c6b chore(release): 2.90.0 [skip ci]
# [2.90.0](https://github.com/revanced/revanced-patches/compare/v2.89.0...v2.90.0) (2022-10-25)

### Features

* `comment` patch ([#858](https://github.com/revanced/revanced-patches/issues/858)) ([9a257c3](9a257c3f1f))
2022-10-25 21:35:38 +00:00
OxrxL
9a257c3f1f feat: comment patch (#858) 2022-10-25 23:33:49 +02:00
semantic-release-bot
57cb30df48 chore(release): 2.89.0 [skip ci]
# [2.89.0](https://github.com/revanced/revanced-patches/compare/v2.88.0...v2.89.0) (2022-10-25)

### Features

* `hide-album-cards` patch ([#857](https://github.com/revanced/revanced-patches/issues/857)) ([622acc0](622acc0d48))
2022-10-25 18:46:34 +00:00
OxrxL
622acc0d48 feat: hide-album-cards patch (#857) 2022-10-25 20:44:34 +02:00
semantic-release-bot
a17d929f75 chore(release): 2.88.0 [skip ci]
# [2.88.0](https://github.com/revanced/revanced-patches/compare/v2.87.0...v2.88.0) (2022-10-25)

### Features

* `hide-artist-card` patch ([#859](https://github.com/revanced/revanced-patches/issues/859)) ([54e8dd1](54e8dd1c0d))
2022-10-25 18:19:50 +00:00
OxrxL
54e8dd1c0d feat: hide-artist-card patch (#859) 2022-10-25 20:17:56 +02:00
semantic-release-bot
d906cd64d1 chore(release): 2.87.0 [skip ci]
# [2.87.0](https://github.com/revanced/revanced-patches/compare/v2.86.0...v2.87.0) (2022-10-25)

### Bug Fixes

* **metanav/fix-scaling:** use semantic versioning in package versions ([d45279f](d45279feb2))
* **youtube/theme:** theme litho ui components & use correct theme for settings ([#791](https://github.com/revanced/revanced-patches/issues/791)) ([03b565c](03b565cf77))

### Features

* `fix-metanav-scaling` patch ([#831](https://github.com/revanced/revanced-patches/issues/831)) ([2ddc846](2ddc846878))
* `hide-crowdfunding-box` patch ([#856](https://github.com/revanced/revanced-patches/issues/856)) ([823beeb](823beebbc3))
2022-10-25 18:15:10 +00:00
oSumAtrIX
d45279feb2 fix(metanav/fix-scaling): use semantic versioning in package versions 2022-10-25 20:12:49 +02:00
OxrxL
823beebbc3 feat: hide-crowdfunding-box patch (#856)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-10-25 18:20:05 +02:00
Caroline Joy Bell
2ddc846878 feat: fix-metanav-scaling patch (#831) 2022-10-25 08:39:28 +02:00
OxrxL
03b565cf77 fix(youtube/theme): theme litho ui components & use correct theme for settings (#791) 2022-10-25 08:36:59 +02:00
semantic-release-bot
b45de8d048 chore(release): 2.86.0 [skip ci]
# [2.86.0](https://github.com/revanced/revanced-patches/compare/v2.85.2...v2.86.0) (2022-10-25)

### Features

* **youtube/theme:** extend theming to splash screen ([#769](https://github.com/revanced/revanced-patches/issues/769)) ([297db08](297db08f9d))
2022-10-25 06:32:58 +00:00
OxrxL
297db08f9d feat(youtube/theme): extend theming to splash screen (#769) 2022-10-25 08:30:42 +02:00
semantic-release-bot
c5e5323be4 chore(release): 2.85.2 [skip ci]
## [2.85.2](https://github.com/revanced/revanced-patches/compare/v2.85.1...v2.85.2) (2022-10-22)

### Bug Fixes

* **youtube/integrations:** set context for remaining activities ([#828](https://github.com/revanced/revanced-patches/issues/828)) ([ba515d2](ba515d26cb))
2022-10-22 10:46:54 +00:00
Canny
ba515d26cb fix(youtube/integrations): set context for remaining activities (#828) 2022-10-22 12:45:10 +02:00
semantic-release-bot
ec2a8cec87 chore(release): 2.85.1 [skip ci]
## [2.85.1](https://github.com/revanced/revanced-patches/compare/v2.85.0...v2.85.1) (2022-10-21)

### Bug Fixes

* **youtube/theme:** extend dark mode theming ([#827](https://github.com/revanced/revanced-patches/issues/827)) ([1e26d6a](1e26d6affa))
2022-10-21 13:16:26 +00:00
OxrxL
1e26d6affa fix(youtube/theme): extend dark mode theming (#827) 2022-10-21 15:14:24 +02:00
semantic-release-bot
84e826f0a3 chore(release): 2.85.0 [skip ci]
# [2.85.0](https://github.com/revanced/revanced-patches/compare/v2.84.1...v2.85.0) (2022-10-20)

### Features

* **youtube:** `hide-captions-button` patch ([#770](https://github.com/revanced/revanced-patches/issues/770)) ([a13fdbd](a13fdbd2a0))
2022-10-20 20:07:51 +00:00
OxrxL
a13fdbd2a0 feat(youtube): hide-captions-button patch (#770)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-10-20 22:05:34 +02:00
semantic-release-bot
cb43f95720 chore(release): 2.84.1 [skip ci]
## [2.84.1](https://github.com/revanced/revanced-patches/compare/v2.84.0...v2.84.1) (2022-10-20)

### Bug Fixes

* **youtube/hide-mix-playlists:** correct switch title, summary and defaults ([#821](https://github.com/revanced/revanced-patches/issues/821)) ([c37b8cd](c37b8cd60a))
2022-10-20 18:31:56 +00:00
johnconner122
c37b8cd60a fix(youtube/hide-mix-playlists): correct switch title, summary and defaults (#821) 2022-10-20 20:29:41 +02:00
semantic-release-bot
d54a4b9c00 chore(release): 2.84.0 [skip ci]
# [2.84.0](https://github.com/revanced/revanced-patches/compare/v2.83.3...v2.84.0) (2022-10-20)

### Features

* **youtube:** `hide-mix-playlists` patch  ([#816](https://github.com/revanced/revanced-patches/issues/816)) ([a5b5e78](a5b5e78ee0))
2022-10-20 17:09:55 +00:00
johnconner122
a5b5e78ee0 feat(youtube): hide-mix-playlists patch (#816) 2022-10-20 19:07:44 +02:00
semantic-release-bot
1af14e9f44 chore(release): 2.83.3 [skip ci]
## [2.83.3](https://github.com/revanced/revanced-patches/compare/v2.83.2...v2.83.3) (2022-10-20)

### Bug Fixes

* **youtube/video-ads:** revert faulty method patch ([#820](https://github.com/revanced/revanced-patches/issues/820)) ([d93f5ee](d93f5ee271))
2022-10-20 17:05:54 +00:00
OxrxL
d93f5ee271 fix(youtube/video-ads): revert faulty method patch (#820) 2022-10-20 19:04:11 +02:00
semantic-release-bot
8a9dd2b7e1 chore(release): 2.83.2 [skip ci]
## [2.83.2](https://github.com/revanced/revanced-patches/compare/v2.83.1...v2.83.2) (2022-10-19)

### Bug Fixes

* **youtube/video-ads:** add back initial method to block ads ([#818](https://github.com/revanced/revanced-patches/issues/818)) ([86e09c5](86e09c5389))
2022-10-19 22:01:39 +00:00
OxrxL
86e09c5389 fix(youtube/video-ads): add back initial method to block ads (#818) 2022-10-19 23:59:18 +02:00
semantic-release-bot
3c733e937c chore(release): 2.83.1 [skip ci]
## [2.83.1](https://github.com/revanced/revanced-patches/compare/v2.83.0...v2.83.1) (2022-10-19)

### Bug Fixes

* **youtube/video-ads:** block earlier in call hirarchy ([#813](https://github.com/revanced/revanced-patches/issues/813)) ([a764e07](a764e07427))
2022-10-19 09:33:19 +00:00
OxrxL
a764e07427 fix(youtube/video-ads): block earlier in call hirarchy (#813) 2022-10-19 11:31:42 +02:00
semantic-release-bot
5c6d62fba8 chore(release): 2.83.0 [skip ci]
# [2.83.0](https://github.com/revanced/revanced-patches/compare/v2.82.1...v2.83.0) (2022-10-18)

### Features

* bump YouTube Music patches compatibility ([#809](https://github.com/revanced/revanced-patches/issues/809)) ([9a6ba89](9a6ba89616))
2022-10-18 19:37:38 +00:00
Palm
9a6ba89616 feat: bump YouTube Music patches compatibility (#809) 2022-10-18 21:35:50 +02:00
semantic-release-bot
19f67f8ec7 chore(release): 2.82.1 [skip ci]
## [2.82.1](https://github.com/revanced/revanced-patches/compare/v2.82.0...v2.82.1) (2022-10-17)

### Bug Fixes

* **youtube/video-ads:** return empty ad list earlier ([dac833f](dac833f693))
2022-10-17 23:47:49 +00:00
oSumAtrIX
dac833f693 fix(youtube/video-ads): return empty ad list earlier 2022-10-18 01:45:51 +02:00
afn
0b22819737 style(reddit/premium-icon-reddit): fix consistency of patch description (#795) 2022-10-16 00:30:19 +02:00
semantic-release-bot
a890753d42 chore(release): 2.82.0 [skip ci]
# [2.82.0](https://github.com/revanced/revanced-patches/compare/v2.81.11...v2.82.0) (2022-10-13)

### Features

* **youtube/remember-video-quality:** remember the quality until changed by default ([c6a01df](c6a01df05c))
2022-10-13 04:04:21 +00:00
oSumAtrIX
c6a01df05c feat(youtube/remember-video-quality): remember the quality until changed by default 2022-10-13 06:02:04 +02:00
semantic-release-bot
2d2e62232b chore(release): 2.81.11 [skip ci]
## [2.81.11](https://github.com/revanced/revanced-patches/compare/v2.81.10...v2.81.11) (2022-10-11)

### Bug Fixes

* **youtube/theme:** add missing theme condition check ([#771](https://github.com/revanced/revanced-patches/issues/771)) ([1408058](140805854c))
2022-10-11 23:38:39 +00:00
OxrxL
140805854c fix(youtube/theme): add missing theme condition check (#771) 2022-10-12 01:36:38 +02:00
semantic-release-bot
f1b836832c chore(release): 2.81.10 [skip ci]
## [2.81.10](https://github.com/revanced/revanced-patches/compare/v2.81.9...v2.81.10) (2022-10-11)

### Bug Fixes

* **spotify/disable-capture-restriction:** dynamically find indices ([#759](https://github.com/revanced/revanced-patches/issues/759)) ([3829a10](3829a10f21))
2022-10-11 12:43:42 +00:00
Tim Schneeberger
3829a10f21 fix(spotify/disable-capture-restriction): dynamically find indices (#759) 2022-10-11 14:41:23 +02:00
semantic-release-bot
942aaacdb5 chore(release): 2.81.9 [skip ci]
## [2.81.9](https://github.com/revanced/revanced-patches/compare/v2.81.8...v2.81.9) (2022-10-11)

### Bug Fixes

* **youtube/general-ads:** hide ads on wide screens ([#765](https://github.com/revanced/revanced-patches/issues/765)) ([48778cf](48778cf8b2))
* **youtube/theme:** colore the comment action bar ([#762](https://github.com/revanced/revanced-patches/issues/762)) ([38d1f6d](38d1f6d125))
2022-10-11 12:39:59 +00:00
OxrxL
38d1f6d125 fix(youtube/theme): colore the comment action bar (#762)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-10-11 14:38:11 +02:00
TheNoFace
48778cf8b2 fix(youtube/general-ads): hide ads on wide screens (#765) 2022-10-11 14:36:39 +02:00
semantic-release-bot
d28e51f02e chore(release): 2.81.8 [skip ci]
## [2.81.8](https://github.com/revanced/revanced-patches/compare/v2.81.7...v2.81.8) (2022-10-10)

### Bug Fixes

* **youtube/video-ads:** invert condition to hide ads ([b0df548](b0df5480fb))
2022-10-10 20:20:12 +00:00
oSumAtrIX
b0df5480fb fix(youtube/video-ads): invert condition to hide ads
This reverts commit ac66364ccf.
2022-10-10 22:17:52 +02:00
semantic-release-bot
a583188a82 chore(release): 2.81.7 [skip ci]
## [2.81.7](https://github.com/revanced/revanced-patches/compare/v2.81.6...v2.81.7) (2022-10-10)

### Bug Fixes

* **video-ads:** invert the condition to hide ads ([ac66364](ac66364ccf))
2022-10-10 15:15:45 +00:00
oSumAtrIX
ac66364ccf fix(video-ads): invert the condition to hide ads 2022-10-10 17:12:53 +02:00
semantic-release-bot
c7c27f75fd chore(release): 2.81.6 [skip ci]
## [2.81.6](https://github.com/revanced/revanced-patches/compare/v2.81.5...v2.81.6) (2022-10-10)

### Bug Fixes

* **video-ads:** return empty list in correct method ([ef095b1](ef095b111a))
2022-10-10 13:53:46 +00:00
oSumAtrIX
ef095b111a fix(video-ads): return empty list in correct method 2022-10-10 15:51:32 +02:00
semantic-release-bot
09026ae727 chore(release): 2.81.5 [skip ci]
## [2.81.5](https://github.com/revanced/revanced-patches/compare/v2.81.4...v2.81.5) (2022-10-10)

### Bug Fixes

* **video-ads:** clobber unused register ([d5fbf10](d5fbf100ed))
2022-10-10 13:08:57 +00:00
oSumAtrIX
d5fbf100ed fix(video-ads): clobber unused register 2022-10-10 15:06:27 +02:00
semantic-release-bot
128699f629 chore(release): 2.81.4 [skip ci]
## [2.81.4](https://github.com/revanced/revanced-patches/compare/v2.81.3...v2.81.4) (2022-10-10)

### Bug Fixes

* **general-ads:** invalid smali syntax ([1772dcf](1772dcf73b))
2022-10-10 12:30:28 +00:00
oSumAtrIX
1772dcf73b fix(general-ads): invalid smali syntax 2022-10-10 14:28:35 +02:00
semantic-release-bot
8873aedbd0 chore(release): 2.81.3 [skip ci]
## [2.81.3](https://github.com/revanced/revanced-patches/compare/v2.81.2...v2.81.3) (2022-10-10)

### Bug Fixes

* **video-ads:** return empty ad list instead of null ([9f9ad19](9f9ad19622))
2022-10-10 11:56:13 +00:00
oSumAtrIX
9f9ad19622 fix(video-ads): return empty ad list instead of null 2022-10-10 13:50:24 +02:00
semantic-release-bot
961e973fd6 chore(release): 2.81.2 [skip ci]
## [2.81.2](https://github.com/revanced/revanced-patches/compare/v2.81.1...v2.81.2) (2022-10-08)

### Bug Fixes

* **theme:** include coloring the playlist action bar ([#742](https://github.com/revanced/revanced-patches/issues/742)) ([24f52e9](24f52e9586))
2022-10-08 23:47:09 +00:00
OxrxL
24f52e9586 fix(theme): include coloring the playlist action bar (#742) 2022-10-09 01:44:50 +02:00
semantic-release-bot
19eccb7c8b chore(release): 2.81.1 [skip ci]
## [2.81.1](https://github.com/revanced/revanced-patches/compare/v2.81.0...v2.81.1) (2022-10-07)

### Bug Fixes

* **video-ads:** block remaining video ads ([6618e53](6618e53d00))
2022-10-07 21:04:25 +00:00
oSumAtrIX
6618e53d00 fix(video-ads): block remaining video ads 2022-10-07 23:02:01 +02:00
semantic-release-bot
2c4224579d chore(release): 2.81.0 [skip ci]
# [2.81.0](https://github.com/revanced/revanced-patches/compare/v2.80.0...v2.81.0) (2022-10-06)

### Features

* **youtube/general-ads:** do not hide community posts by default ([6f4c37c](6f4c37ce84))
2022-10-06 08:11:29 +00:00
oSumAtrIX
6f4c37ce84 feat(youtube/general-ads): do not hide community posts by default 2022-10-06 10:08:54 +02:00
oSumAtrIX
a297c1c90e chore: migrate to new changes from the patcher 2022-10-05 04:13:14 +02:00
semantic-release-bot
6a275126ad chore(release): 2.80.0 [skip ci]
# [2.80.0](https://github.com/revanced/revanced-patches/compare/v2.79.2...v2.80.0) (2022-10-04)

### Features

* **youtube/remember-video-quality:** remember current quality option ([038041f](038041f8ec))
2022-10-04 05:53:56 +00:00
oSumAtrIX
038041f8ec feat(youtube/remember-video-quality): remember current quality option 2022-10-04 07:51:47 +02:00
semantic-release-bot
f2eeec5d36 chore(release): 2.79.2 [skip ci]
## [2.79.2](https://github.com/revanced/revanced-patches/compare/v2.79.1...v2.79.2) (2022-10-04)

### Bug Fixes

* **youtube/disable-startup-shorts-player:** don't affect functionality of navigation bar  ([#716](https://github.com/revanced/revanced-patches/issues/716)) ([f344603](f344603a34))
2022-10-04 05:44:44 +00:00
OxrxL
f344603a34 fix(youtube/disable-startup-shorts-player): don't affect functionality of navigation bar (#716) 2022-10-04 07:43:01 +02:00
semantic-release-bot
f11f370d6e chore(release): 2.79.1 [skip ci]
## [2.79.1](https://github.com/revanced/revanced-patches/compare/v2.79.0...v2.79.1) (2022-10-03)

### Bug Fixes

* **youtube/disable-startup-shorts-player:** do not prevent playing videos on startup ([#714](https://github.com/revanced/revanced-patches/issues/714)) ([5711cd8](5711cd8a4c))
2022-10-03 23:42:37 +00:00
OxrxL
5711cd8a4c fix(youtube/disable-startup-shorts-player): do not prevent playing videos on startup (#714) 2022-10-04 01:40:11 +02:00
semantic-release-bot
40d2275355 chore(release): 2.79.0 [skip ci]
# [2.79.0](https://github.com/revanced/revanced-patches/compare/v2.78.0...v2.79.0) (2022-10-03)

### Features

* `hide-video-buttons` patch ([39da5b7](39da5b7cce))
2022-10-03 11:42:13 +00:00
oSumAtrIX
7131e2c0df refactor(youtube/general-ads): abstract integrations code 2022-10-03 13:38:07 +02:00
oSumAtrIX
39da5b7cce feat: hide-video-buttons patch 2022-10-03 13:37:30 +02:00
semantic-release-bot
37a78f1b78 chore(release): 2.78.0 [skip ci]
# [2.78.0](https://github.com/revanced/revanced-patches/compare/v2.77.1...v2.78.0) (2022-10-02)

### Features

* **youtube/general-ads:** check for ad in identifier ([fe6f3bd](fe6f3bdb27))
2022-10-02 23:26:59 +00:00
oSumAtrIX
fe6f3bdb27 feat(youtube/general-ads): check for ad in identifier 2022-10-03 01:25:08 +02:00
semantic-release-bot
70f6637035 chore(release): 2.77.1 [skip ci]
## [2.77.1](https://github.com/revanced/revanced-patches/compare/v2.77.0...v2.77.1) (2022-10-01)

### Bug Fixes

* **tiktok/tiktok-downloads:** add missing patch dependencies ([#686](https://github.com/revanced/revanced-patches/issues/686)) ([2b6bbba](2b6bbba0d5))
2022-10-01 04:30:50 +00:00
d4rkk3y
2b6bbba0d5 fix(tiktok/tiktok-downloads): add missing patch dependencies (#686) 2022-10-01 06:28:40 +02:00
semantic-release-bot
ede21501ac chore(release): 2.77.0 [skip ci]
# [2.77.0](https://github.com/revanced/revanced-patches/compare/v2.76.3...v2.77.0) (2022-10-01)

### Features

* **youtube/hdr-auto-brightness:** increase strength of fingerprint ([91e2f88](91e2f882e0))
2022-10-01 03:22:03 +00:00
oSumAtrIX
91e2f882e0 feat(youtube/hdr-auto-brightness): increase strength of fingerprint 2022-10-01 05:19:00 +02:00
semantic-release-bot
3d7256429c chore(release): 2.76.3 [skip ci]
## [2.76.3](https://github.com/revanced/revanced-patches/compare/v2.76.2...v2.76.3) (2022-10-01)

### Performance Improvements

* **general-ads:** hook pathBuilder ([ebe922d](ebe922db47))
2022-10-01 02:01:13 +00:00
oSumAtrIX
ebe922db47 perf(general-ads): hook pathBuilder 2022-10-01 03:58:19 +02:00
semantic-release-bot
8b75c9ea34 chore(release): 2.76.2 [skip ci]
## [2.76.2](https://github.com/revanced/revanced-patches/compare/v2.76.1...v2.76.2) (2022-09-30)

### Bug Fixes

* **twitter/monochrome-icon:** add missing `File.write` call ([#682](https://github.com/revanced/revanced-patches/issues/682)) ([7f78d6f](7f78d6fb76))
2022-09-30 18:02:24 +00:00
Ushie
7f78d6fb76 fix(twitter/monochrome-icon): add missing File.write call (#682) 2022-09-30 20:00:29 +02:00
semantic-release-bot
4e76029199 chore(release): 2.76.1 [skip ci]
## [2.76.1](https://github.com/revanced/revanced-patches/compare/v2.76.0...v2.76.1) (2022-09-30)

### Bug Fixes

* **disable-startup-shorts-player:** remove redundant opcode pattern ([#679](https://github.com/revanced/revanced-patches/issues/679)) ([2774c0f](2774c0f60a))
2022-09-30 17:59:47 +00:00
OxrxL
2774c0f60a fix(disable-startup-shorts-player): remove redundant opcode pattern (#679)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-09-30 19:58:09 +02:00
semantic-release-bot
26282ecace chore(release): 2.76.0 [skip ci]
# [2.76.0](https://github.com/revanced/revanced-patches/compare/v2.75.2...v2.76.0) (2022-09-30)

### Features

* bump YouTube Music patches compatibility to v5.26.52 ([#681](https://github.com/revanced/revanced-patches/issues/681)) ([24bfab8](24bfab82a9))
2022-09-30 14:52:51 +00:00
Palm
24bfab82a9 feat: bump YouTube Music patches compatibility to v5.26.52 (#681) 2022-09-30 16:50:36 +02:00
Sculas
b7a7391588 refactor(twitter/dynamic-color): remove formatting in XML (#680) 2022-09-30 16:49:07 +02:00
semantic-release-bot
4ddf6687ca chore(release): 2.75.2 [skip ci]
## [2.75.2](https://github.com/revanced/revanced-patches/compare/v2.75.1...v2.75.2) (2022-09-30)

### Bug Fixes

* **twitter patches.:** use wider compatible Java API for writing to file ([#678](https://github.com/revanced/revanced-patches/issues/678)) ([bbf5ccf](bbf5ccfc93))
2022-09-30 14:39:21 +00:00
Aunali321
bbf5ccfc93 fix(twitter patches.): use wider compatible Java API for writing to file (#678)
Allows running the patch on Android
2022-09-30 16:37:40 +02:00
semantic-release-bot
7dc72e7716 chore(release): 2.75.1 [skip ci]
## [2.75.1](https://github.com/revanced/revanced-patches/compare/v2.75.0...v2.75.1) (2022-09-29)

### Bug Fixes

* **disable-startup-shorts-player:** incorrect offsets, invert branch condition ([#672](https://github.com/revanced/revanced-patches/issues/672)) ([c5a772b](c5a772b6b9))
2022-09-29 22:27:30 +00:00
OxrxL
c5a772b6b9 fix(disable-startup-shorts-player): incorrect offsets, invert branch condition (#672) 2022-09-30 00:25:29 +02:00
semantic-release-bot
5b8e3ced59 chore(release): 2.75.0 [skip ci]
# [2.75.0](https://github.com/revanced/revanced-patches/compare/v2.74.0...v2.75.0) (2022-09-29)

### Features

* `disable-capture-restriction` patch ([#655](https://github.com/revanced/revanced-patches/issues/655)) ([87cf71a](87cf71aa36))
2022-09-29 22:01:52 +00:00
Tim Schneeberger
87cf71aa36 feat: disable-capture-restriction patch (#655)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-09-30 00:00:16 +02:00
semantic-release-bot
de95ff1a2e chore(release): 2.74.0 [skip ci]
# [2.74.0](https://github.com/revanced/revanced-patches/compare/v2.73.0...v2.74.0) (2022-09-29)

### Features

* `disable-startup-shorts-player` patch ([#670](https://github.com/revanced/revanced-patches/issues/670)) ([c4f4d4a](c4f4d4aae1))
2022-09-29 21:56:14 +00:00
OxrxL
c4f4d4aae1 feat: disable-startup-shorts-player patch (#670)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-09-29 23:53:58 +02:00
semantic-release-bot
27b9d2f44e chore(release): 2.73.0 [skip ci]
# [2.73.0](https://github.com/revanced/revanced-patches/compare/v2.72.1...v2.73.0) (2022-09-29)

### Features

* `dynamic-color` patch ([#652](https://github.com/revanced/revanced-patches/issues/652)) ([47d4b90](47d4b90ffb))
2022-09-29 20:09:46 +00:00
bennett-sh
47d4b90ffb feat: dynamic-color patch (#652) 2022-09-29 22:08:00 +02:00
oSumAtrIX
6653c924b1 chore: bump patcher dependency version 2022-09-29 21:42:45 +02:00
semantic-release-bot
eb5850b1fd chore(release): 2.72.1 [skip ci]
## [2.72.1](https://github.com/revanced/revanced-patches/compare/v2.72.0...v2.72.1) (2022-09-29)

### Bug Fixes

* **hdr-brightness:** trim list of compatible versions ([#602](https://github.com/revanced/revanced-patches/issues/602)) ([eb900b1](eb900b108f))
2022-09-29 17:26:19 +00:00
OxrxL
eb900b108f fix(hdr-brightness): trim list of compatible versions (#602) 2022-09-29 19:24:32 +02:00
semantic-release-bot
2524b0a24d chore(release): 2.72.0 [skip ci]
# [2.72.0](https://github.com/revanced/revanced-patches/compare/v2.71.2...v2.72.0) (2022-09-29)

### Features

* `tiktok-speed` patch ([#668](https://github.com/revanced/revanced-patches/issues/668)) ([805d301](805d301dac))
* bump YouTube Music patches to v5.25.51 ([#669](https://github.com/revanced/revanced-patches/issues/669)) ([ca88b01](ca88b01ee1))
2022-09-29 15:27:16 +00:00
sandip93291
ca88b01ee1 feat: bump YouTube Music patches to v5.25.51 (#669) 2022-09-29 17:25:01 +02:00
d4rkk3y
805d301dac feat: tiktok-speed patch (#668) 2022-09-29 17:23:58 +02:00
semantic-release-bot
b47dc2fc1e chore(release): 2.71.2 [skip ci]
## [2.71.2](https://github.com/revanced/revanced-patches/compare/v2.71.1...v2.71.2) (2022-09-28)

### Bug Fixes

* **hide-email-address:** invalid instruction offsets ([#654](https://github.com/revanced/revanced-patches/issues/654)) ([6c8f447](6c8f4474e9))
2022-09-28 13:44:59 +00:00
OxrxL
6c8f4474e9 fix(hide-email-address): invalid instruction offsets (#654) 2022-09-28 15:42:35 +02:00
semantic-release-bot
2de0923a94 chore(release): 2.71.1 [skip ci]
## [2.71.1](https://github.com/revanced/revanced-patches/compare/v2.71.0...v2.71.1) (2022-09-28)

### Bug Fixes

* **disable-auto-player-popup-panels:** swap switch toggle state description ([#653](https://github.com/revanced/revanced-patches/issues/653)) ([632323a](632323a904))
2022-09-28 13:24:22 +00:00
NRJ YDV
632323a904 fix(disable-auto-player-popup-panels): swap switch toggle state description (#653) 2022-09-28 15:21:55 +02:00
semantic-release-bot
97a624c644 chore(release): 2.71.0 [skip ci]
# [2.71.0](https://github.com/revanced/revanced-patches/compare/v2.70.0...v2.71.0) (2022-09-28)

### Features

* `hide-email-address` patch ([#578](https://github.com/revanced/revanced-patches/issues/578)) ([9ed8f94](9ed8f94b35))
2022-09-28 11:29:51 +00:00
OxrxL
9ed8f94b35 feat: hide-email-address patch (#578) 2022-09-28 13:28:07 +02:00
semantic-release-bot
21b948bf3a chore(release): 2.70.0 [skip ci]
# [2.70.0](https://github.com/revanced/revanced-patches/compare/v2.69.4...v2.70.0) (2022-09-28)

### Features

* `monochrome-icon` patch ([#643](https://github.com/revanced/revanced-patches/issues/643)) ([b744c37](b744c37fc3))
2022-09-28 11:16:24 +00:00
bennett-sh
b744c37fc3 feat: monochrome-icon patch (#643) 2022-09-28 13:14:39 +02:00
semantic-release-bot
fe0774566b chore(release): 2.69.4 [skip ci]
## [2.69.4](https://github.com/revanced/revanced-patches/compare/v2.69.3...v2.69.4) (2022-09-27)

### Bug Fixes

* **sponsorblock:** dynamically insert `setSponsorBarRect` call ([#644](https://github.com/revanced/revanced-patches/issues/644)) ([88940dd](88940dd47b))
2022-09-27 20:02:25 +00:00
d4rkk3y
88940dd47b fix(sponsorblock): dynamically insert setSponsorBarRect call (#644) 2022-09-27 22:00:24 +02:00
semantic-release-bot
c4b26d8b8a chore(release): 2.69.3 [skip ci]
## [2.69.3](https://github.com/revanced/revanced-patches/compare/v2.69.2...v2.69.3) (2022-09-27)

### Bug Fixes

* **sponsorblock:** correct class name for field reference ([#582](https://github.com/revanced/revanced-patches/issues/582)) ([c584092](c5840920ae))
2022-09-27 13:32:48 +00:00
semantic-release-bot
36a4544fec chore(release): 2.69.3 [skip ci]
## [2.69.3](https://github.com/revanced/revanced-patches/compare/v2.69.2...v2.69.3) (2022-09-27)

### Bug Fixes

* **sponsorblock:** correct class name for field reference ([#582](https://github.com/revanced/revanced-patches/issues/582)) ([c584092](c5840920ae))
2022-09-27 04:57:01 +00:00
inotia00
c5840920ae fix(sponsorblock): correct class name for field reference (#582) 2022-09-27 06:55:15 +02:00
semantic-release-bot
a699184650 chore(release): 2.69.2 [skip ci]
## [2.69.2](https://github.com/revanced/revanced-patches/compare/v2.69.1...v2.69.2) (2022-09-26)

### Performance Improvements

* **resource-mapping:** map resources with multiple threads ([81e86c4](81e86c4710))
2022-09-26 02:33:00 +00:00
oSumAtrIX
81e86c4710 perf(resource-mapping): map resources with multiple threads 2022-09-26 04:30:49 +02:00
oSumAtrIX
0c10bfbddd chore: bump patcher dependency version 2022-09-26 04:30:49 +02:00
shadow578
523b62970f refactor(microg-support): share code between music-microg-support patch 2022-09-26 04:30:49 +02:00
semantic-release-bot
9f45c0779e chore(release): 2.69.1 [skip ci]
## [2.69.1](https://github.com/revanced/revanced-patches/compare/v2.69.0...v2.69.1) (2022-09-24)

### Bug Fixes

* **sponsorblock:** reflect changes to strings ([#585](https://github.com/revanced/revanced-patches/issues/585)) ([ee3a9c5](ee3a9c5c72))
2022-09-24 21:46:59 +00:00
Michael M. Chang
ee3a9c5c72 fix(sponsorblock): reflect changes to strings (#585) 2022-09-24 23:45:02 +02:00
semantic-release-bot
51c50a7495 chore(release): 2.69.0 [skip ci]
# [2.69.0](https://github.com/revanced/revanced-patches/compare/v2.68.3...v2.69.0) (2022-09-24)

### Features

* `spotify-theme` patch ([#608](https://github.com/revanced/revanced-patches/issues/608)) ([468ec3e](468ec3e6d6))
2022-09-24 13:45:49 +00:00
bogadana
468ec3e6d6 feat: spotify-theme patch (#608) 2022-09-24 15:44:04 +02:00
semantic-release-bot
922ca7abf7 chore(release): 2.68.3 [skip ci]
## [2.68.3](https://github.com/revanced/revanced-patches/compare/v2.68.2...v2.68.3) (2022-09-23)

### Bug Fixes

* **seekbar-tapping:** do not disable seekbar when hiding it ([#600](https://github.com/revanced/revanced-patches/issues/600)) ([f251ae7](f251ae72e4))
2022-09-23 19:11:44 +00:00
OxrxL
f251ae72e4 fix(seekbar-tapping): do not disable seekbar when hiding it (#600) 2022-09-23 21:09:47 +02:00
semantic-release-bot
f40125a88f chore(release): 2.68.2 [skip ci]
## [2.68.2](https://github.com/revanced/revanced-patches/compare/v2.68.1...v2.68.2) (2022-09-23)

### Bug Fixes

* **hide-time-and-seekbar:** don't draw the seekbar ([#594](https://github.com/revanced/revanced-patches/issues/594)) ([8b3ab04](8b3ab045f8))
2022-09-23 10:53:30 +00:00
OxrxL
8b3ab045f8 fix(hide-time-and-seekbar): don't draw the seekbar (#594) 2022-09-23 12:51:58 +02:00
semantic-release-bot
aa0bff14d9 chore(release): 2.68.1 [skip ci]
## [2.68.1](https://github.com/revanced/revanced-patches/compare/v2.68.0...v2.68.1) (2022-09-23)

### Bug Fixes

* **sponsorblock:** resolve unresolved fingerprint ([986a396](986a3961c4))
2022-09-23 09:51:06 +00:00
oSumAtrIX
986a3961c4 fix(sponsorblock): resolve unresolved fingerprint 2022-09-23 11:49:08 +02:00
semantic-release-bot
e5c9d43329 chore(release): 2.68.0 [skip ci]
# [2.68.0](https://github.com/revanced/revanced-patches/compare/v2.67.1...v2.68.0) (2022-09-23)

### Bug Fixes

* **hide-premium-navbar:** remove the correct instructions ([#591](https://github.com/revanced/revanced-patches/issues/591)) ([d82a947](d82a947511))

### Features

* **tiktok:** adapt `tiktok-download` with `tiktok-settings`. ([#586](https://github.com/revanced/revanced-patches/issues/586)) ([459963c](459963c5b6))
2022-09-23 05:42:52 +00:00
Tim Wüstenhagen
d82a947511 fix(hide-premium-navbar): remove the correct instructions (#591) 2022-09-23 07:40:50 +02:00
d4rkk3y
459963c5b6 feat(tiktok): adapt tiktok-download with tiktok-settings. (#586) 2022-09-23 07:40:16 +02:00
semantic-release-bot
0f631762ba chore(release): 2.67.1 [skip ci]
## [2.67.1](https://github.com/revanced/revanced-patches/compare/v2.67.0...v2.67.1) (2022-09-23)
2022-09-23 04:47:01 +00:00
oSumAtrIX
56ffbf3635 build: update patcher dependency 2022-09-23 06:35:29 +02:00
semantic-release-bot
97c46c9099 chore(release): 2.67.0 [skip ci]
# [2.67.0](https://github.com/revanced/revanced-patches/compare/v2.66.2...v2.67.0) (2022-09-23)

### Bug Fixes

* **hide-premium-nav-bar:** invalid import ([#590](https://github.com/revanced/revanced-patches/issues/590)) ([78f0200](78f0200a0d))

### Features

* `hide-premium-nav-bar` patch ([#589](https://github.com/revanced/revanced-patches/issues/589)) ([950f7e2](950f7e2f8c))
2022-09-23 00:27:51 +00:00
Tim Wüstenhagen
78f0200a0d fix(hide-premium-nav-bar): invalid import (#590) 2022-09-23 02:26:06 +02:00
Tim Wüstenhagen
950f7e2f8c feat: hide-premium-nav-bar patch (#589) 2022-09-23 02:05:41 +02:00
semantic-release-bot
fcc3172a09 chore(release): 2.66.2 [skip ci]
## [2.66.2](https://github.com/revanced/revanced-patches/compare/v2.66.1...v2.66.2) (2022-09-22)

### Bug Fixes

* **custom-playback-speed:** implement own method instead of `takeWhile` ([4070744](4070744bcd))
2022-09-22 06:40:39 +00:00
oSumAtrIX
4070744bcd fix(custom-playback-speed): implement own method instead of takeWhile 2022-09-22 08:38:49 +02:00
semantic-release-bot
ce16d8ff94 chore(release): 2.66.1 [skip ci]
## [2.66.1](https://github.com/revanced/revanced-patches/compare/v2.66.0...v2.66.1) (2022-09-22)

### Bug Fixes

* **sponsorblock:** broken fingerprint and invert setting `shorts_playing` ([#579](https://github.com/revanced/revanced-patches/issues/579)) ([0125b09](0125b09d2f))
2022-09-22 05:46:12 +00:00
OxrxL
0125b09d2f fix(sponsorblock): broken fingerprint and invert setting shorts_playing (#579)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-09-22 07:43:54 +02:00
semantic-release-bot
95a04ba2e9 chore(release): 2.66.0 [skip ci]
# [2.66.0](https://github.com/revanced/revanced-patches/compare/v2.65.0...v2.66.0) (2022-09-22)

### Features

* **custom-playback-speed:** max, min, granularity option ([61df23c](61df23c1d2))
2022-09-22 05:21:14 +00:00
oSumAtrIX
61df23c1d2 feat(custom-playback-speed): max, min, granularity option 2022-09-22 07:17:10 +02:00
semantic-release-bot
76c9640aba chore(release): 2.65.0 [skip ci]
# [2.65.0](https://github.com/revanced/revanced-patches/compare/v2.64.2...v2.65.0) (2022-09-21)

### Features

* `tiktok-feed-filter` , `tiktok-settings` and `tiktok-force-login` patch ([#501](https://github.com/revanced/revanced-patches/issues/501)) ([f506bff](f506bff1c5))
* **theme:** arbitrary background color for light theme  ([#565](https://github.com/revanced/revanced-patches/issues/565)) ([741d005](741d0055d7))
2022-09-21 21:03:06 +00:00
Pranshu Goyal
741d0055d7 feat(theme): arbitrary background color for light theme (#565) 2022-09-21 23:01:23 +02:00
d4rkk3y
f506bff1c5 feat: tiktok-feed-filter , tiktok-settings and tiktok-force-login patch (#501) 2022-09-21 23:00:03 +02:00
semantic-release-bot
6a1482871a chore(release): 2.64.2 [skip ci]
## [2.64.2](https://github.com/revanced/revanced-patches/compare/v2.64.1...v2.64.2) (2022-09-21)

### Bug Fixes

* **custom-video-buffer:** use correct offset for `getMaxBuffer` call injection ([fa849b6](fa849b67c6))
2022-09-21 14:46:28 +00:00
oSumAtrIX
fa849b67c6 fix(custom-video-buffer): use correct offset for getMaxBuffer call injection 2022-09-21 16:44:44 +02:00
semantic-release-bot
c1651f606f chore(release): 2.64.1 [skip ci]
## [2.64.1](https://github.com/revanced/revanced-patches/compare/v2.64.0...v2.64.1) (2022-09-21)
2022-09-21 02:17:40 +00:00
oSumAtrIX
f874a995d8 build: bump patcher dependency version to v5.0.0 2022-09-21 04:15:07 +02:00
semantic-release-bot
0ccfb2009b chore(release): 2.64.0 [skip ci]
# [2.64.0](https://github.com/revanced/revanced-patches/compare/v2.63.0...v2.64.0) (2022-09-21)

### Features

* explicit support for YouTube v17.34.35 and v17.34.36 ([#527](https://github.com/revanced/revanced-patches/issues/527)) ([0620304](0620304a3f))
2022-09-21 02:11:13 +00:00
Sourav Das
0620304a3f feat: explicit support for YouTube v17.34.35 and v17.34.36 (#527) 2022-09-21 04:09:26 +02:00
semantic-release-bot
a30805b8b6 chore(release): 2.63.0 [skip ci]
# [2.63.0](https://github.com/revanced/revanced-patches/compare/v2.62.0...v2.63.0) (2022-09-21)

### Features

* `disable-auto-player-popup-panels` ([#543](https://github.com/revanced/revanced-patches/issues/543)) ([35f1323](35f1323a04))
* disable sponsorblock on shorts ([#439](https://github.com/revanced/revanced-patches/issues/439)) ([5b0a6af](5b0a6afb9f))
2022-09-21 01:06:10 +00:00
OxrxL
5b0a6afb9f feat: disable sponsorblock on shorts (#439) 2022-09-21 03:03:47 +02:00
OxrxL
35f1323a04 feat: disable-auto-player-popup-panels (#543) 2022-09-21 03:02:20 +02:00
semantic-release-bot
5b6791a65f chore(release): 2.62.0 [skip ci]
# [2.62.0](https://github.com/revanced/revanced-patches/compare/v2.61.1...v2.62.0) (2022-09-21)

### Features

* `hide-time-and-seekbar` patch ([#544](https://github.com/revanced/revanced-patches/issues/544)) ([9c86429](9c86429871))
2022-09-21 01:00:46 +00:00
OxrxL
9c86429871 feat: hide-time-and-seekbar patch (#544) 2022-09-21 02:58:39 +02:00
semantic-release-bot
f36c8a0970 chore(release): 2.61.1 [skip ci]
## [2.61.1](https://github.com/revanced/revanced-patches/compare/v2.61.0...v2.61.1) (2022-09-21)

### Bug Fixes

* **sponsorblock:** reflect strings from official guidelines ([#523](https://github.com/revanced/revanced-patches/issues/523)) ([8f8bcee](8f8bceec84))
2022-09-21 00:00:54 +00:00
Michael M. Chang
8f8bceec84 fix(sponsorblock): reflect strings from official guidelines (#523) 2022-09-21 01:58:29 +02:00
semantic-release-bot
148ed02347 chore(release): 2.61.0 [skip ci]
# [2.61.0](https://github.com/revanced/revanced-patches/compare/v2.60.0...v2.61.0) (2022-09-20)

### Features

* section `acknowledgements` for issue templates ([8f4cdbb](8f4cdbbcc0))
2022-09-20 22:38:27 +00:00
oSumAtrIX
8f4cdbbcc0 feat: section acknowledgements for issue templates
Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-09-21 00:36:26 +02:00
semantic-release-bot
9f1a329370 chore(release): 2.60.0 [skip ci]
# [2.60.0](https://github.com/revanced/revanced-patches/compare/v2.59.0...v2.60.0) (2022-09-19)

### Features

* **downloads:** missing package installation request ([ccb90e9](ccb90e90b9))
2022-09-19 22:39:17 +00:00
oSumAtrIX
ccb90e90b9 feat(downloads): missing package installation request 2022-09-20 00:37:30 +02:00
semantic-release-bot
c4ac4447ce chore(release): 2.59.0 [skip ci]
# [2.59.0](https://github.com/revanced/revanced-patches/compare/v2.58.0...v2.59.0) (2022-09-18)

### Features

* **sponsorblock:** string for response error code 400 ([#512](https://github.com/revanced/revanced-patches/issues/512)) ([fd0a45f](fd0a45ff1f))
2022-09-18 22:06:17 +00:00
Michael M. Chang
fd0a45ff1f feat(sponsorblock): string for response error code 400 (#512) 2022-09-19 00:04:11 +02:00
semantic-release-bot
ac52a1e354 chore(release): 2.58.0 [skip ci]
# [2.58.0](https://github.com/revanced/revanced-patches/compare/v2.57.0...v2.58.0) (2022-09-18)

### Bug Fixes

* **hdr-auto-brightness:** increase patching compatibility across versions ([4933e58](4933e58876))
* **hide-create-button:** increase patching compatibility across versions ([751fa45](751fa459fb))
* **hide-shorts-button:** increase patching compatibility across versions ([624215d](624215d19b))

### Features

* bump patches compatibility to v17.36.37 ([2a7222f](2a7222f9d8))
2022-09-18 06:28:04 +00:00
oSumAtrIX
543b5875fd build: bump patcher dependency version
Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-09-18 08:25:37 +02:00
oSumAtrIX
2a7222f9d8 feat: bump patches compatibility to v17.36.37
Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-09-18 08:10:53 +02:00
oSumAtrIX
4933e58876 fix(hdr-auto-brightness): increase patching compatibility across versions
Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-09-18 08:10:31 +02:00
oSumAtrIX
ce300785c7 refactor: move InjectionUtils to utils subpackage
Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-09-18 07:35:59 +02:00
oSumAtrIX
751fa459fb fix(hide-create-button): increase patching compatibility across versions
Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-09-18 07:33:42 +02:00
oSumAtrIX
624215d19b fix(hide-shorts-button): increase patching compatibility across versions
Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-09-18 07:33:11 +02:00
semantic-release-bot
b41c0dccc3 chore(release): 2.57.0 [skip ci]
# [2.57.0](https://github.com/revanced/revanced-patches/compare/v2.56.1...v2.57.0) (2022-09-16)

### Features

* **amoled:** remove in favour of `theme` patch ([64dbaae](64dbaaee5e))
* **theme:** arbitrary background color for dark theme ([5f22b9b](5f22b9baa6))
2022-09-16 00:13:24 +00:00
oSumAtrIX
818724fdab docs(theme): proper wording in description
Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-09-16 02:10:50 +02:00
oSumAtrIX
5f22b9baa6 feat(theme): arbitrary background color for dark theme
Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-09-16 02:10:19 +02:00
oSumAtrIX
64dbaaee5e feat(amoled): remove in favour of theme patch
Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-09-16 02:09:19 +02:00
semantic-release-bot
0e0705444d chore(release): 2.56.1 [skip ci]
## [2.56.1](https://github.com/revanced/revanced-patches/compare/v2.56.0...v2.56.1) (2022-09-15)

### Bug Fixes

* `auto-captions` patch switch description ([#488](https://github.com/revanced/revanced-patches/issues/488)) ([e54bcff](e54bcff050))
2022-09-15 14:28:30 +00:00
OxrxL
e54bcff050 fix: auto-captions patch switch description (#488) 2022-09-15 16:25:57 +02:00
semantic-release-bot
fc8101b7c5 chore(release): 2.56.0 [skip ci]
# [2.56.0](https://github.com/revanced/revanced-patches/compare/v2.55.0...v2.56.0) (2022-09-15)

### Features

* **tiktok-download:** custom download path ([#479](https://github.com/revanced/revanced-patches/issues/479)) ([5c99bd6](5c99bd6820))
2022-09-15 14:06:07 +00:00
d4rkk3y
5c99bd6820 feat(tiktok-download): custom download path (#479) 2022-09-15 16:04:20 +02:00
semantic-release-bot
aab339a2f3 chore(release): 2.55.0 [skip ci]
# [2.55.0](https://github.com/revanced/revanced-patches/compare/v2.54.1...v2.55.0) (2022-09-15)

### Features

* `disable-auto-captions` patch ([#435](https://github.com/revanced/revanced-patches/issues/435)) ([504eb9d](504eb9d5be))
2022-09-15 01:02:51 +00:00
OxrxL
504eb9d5be feat: disable-auto-captions patch (#435) 2022-09-15 03:00:19 +02:00
semantic-release-bot
9c39cdbccc chore(release): 2.54.1 [skip ci]
## [2.54.1](https://github.com/revanced/revanced-patches/compare/v2.54.0...v2.54.1) (2022-09-14)

### Bug Fixes

* alignment of download button icon ([#477](https://github.com/revanced/revanced-patches/issues/477)) ([3d2ef9c](3d2ef9cda8))
2022-09-14 16:03:59 +00:00
Ushie
3d2ef9cda8 fix: alignment of download button icon (#477) 2022-09-14 18:02:11 +02:00
semantic-release-bot
f4a4479c77 chore(release): 2.54.0 [skip ci]
# [2.54.0](https://github.com/revanced/revanced-patches/compare/v2.53.0...v2.54.0) (2022-09-14)

### Features

* bump YouTube Music patches to v5.23.50 ([#462](https://github.com/revanced/revanced-patches/issues/462)) ([a506bf5](a506bf5ab1))
2022-09-14 13:48:11 +00:00
Suraj Anil Yadav
a506bf5ab1 feat: bump YouTube Music patches to v5.23.50 (#462) 2022-09-14 15:46:25 +02:00
semantic-release-bot
4ab255e3cb chore(release): 2.53.0 [skip ci]
# [2.53.0](https://github.com/revanced/revanced-patches/compare/v2.52.3...v2.53.0) (2022-09-13)

### Features

* patch requests issue template ([#467](https://github.com/revanced/revanced-patches/issues/467)) ([a2edfac](a2edfaceee)), closes [revanced/revanced-patches#463](https://github.com/revanced/revanced-patches/issues/463)
2022-09-13 20:32:58 +00:00
Sculas
a2edfaceee feat: patch requests issue template (#467)
Closes: revanced/revanced-patches#463
2022-09-13 22:31:06 +02:00
semantic-release-bot
b8a2f675a9 chore(release): 2.52.3 [skip ci]
## [2.52.3](https://github.com/revanced/revanced-patches/compare/v2.52.2...v2.52.3) (2022-09-11)

### Bug Fixes

* path for download icon ([#465](https://github.com/revanced/revanced-patches/issues/465)) ([e89fb11](e89fb11e51))
2022-09-11 23:42:21 +00:00
afn
e89fb11e51 fix: path for download icon (#465) 2022-09-12 01:40:36 +02:00
semantic-release-bot
721c2b12f8 chore(release): 2.52.2 [skip ci]
## [2.52.2](https://github.com/revanced/revanced-patches/compare/v2.52.1...v2.52.2) (2022-09-11)

### Bug Fixes

* design language for download icon ([#464](https://github.com/revanced/revanced-patches/issues/464)) ([33dc796](33dc796af7))
2022-09-11 22:01:02 +00:00
afn
33dc796af7 fix: design language for download icon (#464) 2022-09-11 23:58:23 +02:00
semantic-release-bot
2e373a367e chore(release): 2.52.1 [skip ci]
## [2.52.1](https://github.com/revanced/revanced-patches/compare/v2.52.0...v2.52.1) (2022-09-08)

### Bug Fixes

* multiple compatible pkgs on readme ([70cb450](70cb450b96))
2022-09-08 20:05:20 +00:00
Sculas
70cb450b96 fix: multiple compatible pkgs on readme 2022-09-08 22:03:30 +02:00
semantic-release-bot
20ed9ba0b3 chore(release): 2.52.0 [skip ci]
# [2.52.0](https://github.com/revanced/revanced-patches/compare/v2.51.3...v2.52.0) (2022-09-08)

### Features

* add deprecated & options to patches.json ([d4475b7](d4475b7d7b))
2022-09-08 19:43:07 +00:00
Sculas
d4475b7d7b feat: add deprecated & options to patches.json 2022-09-08 21:40:59 +02:00
Sculas
85c7cde379 build: update patcher dependency 2022-09-08 21:10:41 +02:00
semantic-release-bot
0332b58f98 chore(release): 2.51.3 [skip ci]
## [2.51.3](https://github.com/revanced/revanced-patches/compare/v2.51.2...v2.51.3) (2022-09-08)

### Bug Fixes

* cleanup & trigger release for ThemePatch ([b0c9710](b0c9710cf3)), closes [#447](https://github.com/revanced/revanced-patches/issues/447) [revanced/revanced-patcher#99](https://github.com/revanced/revanced-patcher/issues/99)
2022-09-08 16:37:40 +00:00
Sculas
b0c9710cf3 fix: cleanup & trigger release for ThemePatch
Closes #447
Closes revanced/revanced-patcher#99
2022-09-08 18:35:08 +02:00
Sculas
72b9f873b4 Merge remote-tracking branch 'origin/main' into main 2022-09-08 17:06:32 +02:00
Sculas
319b475b77 refactor: set amoled theme default for ThemePatch 2022-09-08 17:06:16 +02:00
semantic-release-bot
e75233cdab chore(release): 2.51.2 [skip ci]
## [2.51.2](https://github.com/revanced/revanced-patches/compare/v2.51.1...v2.51.2) (2022-09-08)
2022-09-08 15:03:32 +00:00
Sculas
f9ee67b4dc refactor: update to patcher 4.2.2 2022-09-08 17:01:28 +02:00
Sculas
aa25e499f7 build: update patcher dependency 2022-09-08 16:59:29 +02:00
semantic-release-bot
f3a42f50dd chore(release): 2.51.1 [skip ci]
## [2.51.1](https://github.com/revanced/revanced-patches/compare/v2.51.0...v2.51.1) (2022-09-08)

### Bug Fixes

* wrap theme option ([0f60d07](0f60d07cfb))
2022-09-08 11:47:28 +00:00
Sculas
0f60d07cfb fix: wrap theme option 2022-09-08 13:45:28 +02:00
Sculas
2066d58d2f build: update patcher 2022-09-08 13:45:10 +02:00
semantic-release-bot
7390e1f224 chore(release): 2.51.0 [skip ci]
# [2.51.0](https://github.com/revanced/revanced-patches/compare/v2.50.8...v2.51.0) (2022-09-08)

### Features

* Theme Patch ([#440](https://github.com/revanced/revanced-patches/issues/440)) ([f0e6c51](f0e6c51f44))
2022-09-08 09:57:04 +00:00
Sculas
f0e6c51f44 feat: Theme Patch (#440)
* feat: Theme Patch

* refactor: deprecate AmoledPatch

* Update src/main/kotlin/app/revanced/patches/youtube/layout/theme/patch/ThemePatch.kt

Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>

* refactor: apply requested changes

Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-09-08 11:55:06 +02:00
semantic-release-bot
f4390ad4e3 chore(release): 2.50.8 [skip ci]
## [2.50.8](https://github.com/revanced/revanced-patches/compare/v2.50.7...v2.50.8) (2022-09-08)
2022-09-08 09:34:38 +00:00
Sculas
d706bb6470 build: update patcher 2022-09-08 11:32:45 +02:00
semantic-release-bot
77373a7d05 chore(release): 2.50.7 [skip ci]
## [2.50.7](https://github.com/revanced/revanced-patches/compare/v2.50.6...v2.50.7) (2022-09-08)
2022-09-08 08:28:01 +00:00
E85Addict
b942f81b8b build: bump patcher dependency version (#443) 2022-09-08 10:25:56 +02:00
semantic-release-bot
1e78ea6c77 chore(release): 2.50.6 [skip ci]
## [2.50.6](https://github.com/revanced/revanced-patches/compare/v2.50.5...v2.50.6) (2022-09-07)
2022-09-07 20:39:46 +00:00
Sculas
667e5e49e6 refactor: cleanup AmoledPatch 2022-09-07 22:37:53 +02:00
Sculas
acc61aa28c chore: ignore kotlinc.xml 2022-09-07 22:37:38 +02:00
Sculas
5c6085d855 build: update patcher 2022-09-07 22:34:36 +02:00
semantic-release-bot
2427c58147 chore(release): 2.50.5 [skip ci]
## [2.50.5](https://github.com/revanced/revanced-patches/compare/v2.50.4...v2.50.5) (2022-09-07)
2022-09-07 19:16:38 +00:00
Sculas
7518e94c51 refactor: adapt patcher 4.0.0 changes 2022-09-07 21:14:03 +02:00
Sculas
460bfd317d build: update patcher 2022-09-07 21:05:43 +02:00
Sculas
7444876559 refactor: cleanup CustomBrandingPatch 2022-09-07 21:03:03 +02:00
Sculas
e514f341ce build: update patcher 2022-09-06 23:45:54 +02:00
semantic-release-bot
99ccd772a3 chore(release): 2.50.4 [skip ci]
## [2.50.4](https://github.com/revanced/revanced-patches/compare/v2.50.3...v2.50.4) (2022-09-03)

### Bug Fixes

* don't respect primary color for the download button icon ([#424](https://github.com/revanced/revanced-patches/issues/424)) ([a3f7d54](a3f7d54355))
2022-09-03 03:49:15 +00:00
Tititvoot Pangrit
a3f7d54355 fix: don't respect primary color for the download button icon (#424) 2022-09-03 05:46:55 +02:00
semantic-release-bot
f1364157f1 chore(release): 2.50.3 [skip ci]
## [2.50.3](https://github.com/revanced/revanced-patches/compare/v2.50.2...v2.50.3) (2022-09-01)

### Bug Fixes

* partial ad blockage in `tiktok-ads` patch ([#420](https://github.com/revanced/revanced-patches/issues/420)) ([ae8a1d2](ae8a1d2fcf))
2022-09-01 17:13:54 +00:00
d4rkk3y
ae8a1d2fcf fix: partial ad blockage in tiktok-ads patch (#420) 2022-09-01 19:12:16 +02:00
semantic-release-bot
9fd7e086f5 chore(release): 2.50.2 [skip ci]
## [2.50.2](https://github.com/revanced/revanced-patches/compare/v2.50.1...v2.50.2) (2022-08-31)

### Bug Fixes

* wrong dependency version ([34e5a19](34e5a1933a))
2022-08-31 18:44:22 +00:00
oSumAtrIX
34e5a1933a fix: wrong dependency version
Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-08-31 20:42:18 +02:00
oSumAtrIX
8d7e1eeb2d refactor: make use of named arguments 2022-08-31 20:38:38 +02:00
oSumAtrIX
23f49a8821 build: bump patcher dependency version
Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-08-31 20:36:57 +02:00
semantic-release-bot
c8f136bd3e chore(release): 2.50.1 [skip ci]
## [2.50.1](https://github.com/revanced/revanced-patches/compare/v2.50.0...v2.50.1) (2022-08-31)

### Bug Fixes

* resolve fingerprint in `premium-icon-reddit` patch ([#413](https://github.com/revanced/revanced-patches/issues/413)) ([5ec16f6](5ec16f6dbd))
2022-08-31 16:04:43 +00:00
Technikte
5ec16f6dbd fix: resolve fingerprint in premium-icon-reddit patch (#413) 2022-08-31 18:03:03 +02:00
semantic-release-bot
aacfd120ba chore(release): 2.50.0 [skip ci]
# [2.50.0](https://github.com/revanced/revanced-patches/compare/v2.49.0...v2.50.0) (2022-08-31)

### Features

* `tiktok-download` and `tiktok-seekbar` patch ([#405](https://github.com/revanced/revanced-patches/issues/405)) ([f042aa1](f042aa1101))
2022-08-31 15:59:52 +00:00
d4rkk3y
f042aa1101 feat: tiktok-download and tiktok-seekbar patch (#405) 2022-08-31 17:57:51 +02:00
semantic-release-bot
9d29a26d2f chore(release): 2.49.0 [skip ci]
# [2.49.0](https://github.com/revanced/revanced-patches/compare/v2.48.2...v2.49.0) (2022-08-31)

### Features

* bump YouTube Music patches to v5.22.54 ([#409](https://github.com/revanced/revanced-patches/issues/409)) ([b789081](b789081e21))
2022-08-31 00:06:04 +00:00
Ushie
b789081e21 feat: bump YouTube Music patches to v5.22.54 (#409) 2022-08-31 02:04:23 +02:00
semantic-release-bot
f88bb0db9b chore(release): 2.48.2 [skip ci]
## [2.48.2](https://github.com/revanced/revanced-patches/compare/v2.48.1...v2.48.2) (2022-08-30)

### Bug Fixes

* do not constrain `amoled` patch to versions ([#408](https://github.com/revanced/revanced-patches/issues/408)) ([dbfac48](dbfac48d6e))
2022-08-30 23:37:08 +00:00
Ushie
dbfac48d6e fix: do not constrain amoled patch to versions (#408) 2022-08-31 01:35:26 +02:00
semantic-release-bot
c3de990991 chore(release): 2.48.1 [skip ci]
## [2.48.1](https://github.com/revanced/revanced-patches/compare/v2.48.0...v2.48.1) (2022-08-30)

### Bug Fixes

* don't overwrite register in `compact-header` patch ([#406](https://github.com/revanced/revanced-patches/issues/406)) ([94a2a04](94a2a04414))
2022-08-30 16:37:58 +00:00
Canny
94a2a04414 fix: don't overwrite register in compact-header patch (#406) 2022-08-30 18:35:41 +02:00
semantic-release-bot
ee196ba43b chore(release): 2.48.0 [skip ci]
# [2.48.0](https://github.com/revanced/revanced-patches/compare/v2.47.0...v2.48.0) (2022-08-30)

### Features

* bump YouTube Music patches to v5.21.52 ([#404](https://github.com/revanced/revanced-patches/issues/404)) ([4caf5af](4caf5af78b))
2022-08-30 15:34:03 +00:00
Canny
4caf5af78b feat: bump YouTube Music patches to v5.21.52 (#404) 2022-08-30 17:31:31 +02:00
semantic-release-bot
162337c150 chore(release): 2.47.0 [skip ci]
# [2.47.0](https://github.com/revanced/revanced-patches/compare/v2.46.0...v2.47.0) (2022-08-29)

### Features

* bump youtube version to v17.33.42 ([#398](https://github.com/revanced/revanced-patches/issues/398)) ([3b31f2a](3b31f2aeef))
2022-08-29 17:06:58 +00:00
Canny
3b31f2aeef feat: bump youtube version to v17.33.42 (#398) 2022-08-29 19:05:19 +02:00
semantic-release-bot
8c0afaa99f chore(release): 2.46.0 [skip ci]
# [2.46.0](https://github.com/revanced/revanced-patches/compare/v2.45.3...v2.46.0) (2022-08-29)

### Bug Fixes

* `seekbar-tapping` toggling ([#401](https://github.com/revanced/revanced-patches/issues/401)) ([453093e](453093ebd1))

### Features

* `premium-icon-reddit` patch ([#333](https://github.com/revanced/revanced-patches/issues/333)) ([256af93](256af93db8))
* blacklist `.vsc` folder in `.gitignore` ([#331](https://github.com/revanced/revanced-patches/issues/331)) ([b95181b](b95181b0f2))
2022-08-29 16:23:03 +00:00
Technikte
b95181b0f2 feat: blacklist .vsc folder in .gitignore (#331) 2022-08-29 18:21:24 +02:00
d4rkk3y
453093ebd1 fix: seekbar-tapping toggling (#401) 2022-08-29 18:20:25 +02:00
Technikte
256af93db8 feat: premium-icon-reddit patch (#333) 2022-08-29 18:19:15 +02:00
semantic-release-bot
634956e1be chore(release): 2.45.3 [skip ci]
## [2.45.3](https://github.com/revanced/revanced-patches/compare/v2.45.2...v2.45.3) (2022-08-29)

### Bug Fixes

* release `patches.json` file ([#402](https://github.com/revanced/revanced-patches/issues/402)) ([33fe6da](33fe6da43d))
2022-08-29 13:33:33 +00:00
reis
33fe6da43d fix: release patches.json file (#402) 2022-08-29 15:31:37 +02:00
semantic-release-bot
054809e64f chore(release): 2.45.2 [skip ci]
## [2.45.2](https://github.com/revanced/revanced-patches/compare/v2.45.1...v2.45.2) (2022-08-28)

### Bug Fixes

* add `patches.json` as a release asset ([d6f969e](d6f969e0cf))
2022-08-28 20:26:45 +00:00
Sculas
d6f969e0cf fix: add patches.json as a release asset 2022-08-28 22:24:45 +02:00
semantic-release-bot
1f9a5188b2 chore(release): 2.45.1 [skip ci]
## [2.45.1](https://github.com/revanced/revanced-patches/compare/v2.45.0...v2.45.1) (2022-08-28)

### Bug Fixes

* run meta generator ([133f7a8](133f7a8bda))
2022-08-28 19:52:25 +00:00
Sculas
133f7a8bda fix: run meta generator 2022-08-28 21:50:38 +02:00
semantic-release-bot
00a0f67bf4 chore(release): 2.45.0 [skip ci]
# [2.45.0](https://github.com/revanced/revanced-patches/compare/v2.44.0...v2.45.0) (2022-08-28)

### Features

* Add JSON meta ([046f647](046f647361))
2022-08-28 19:42:01 +00:00
Sculas
046f647361 feat: Add JSON meta 2022-08-28 21:39:13 +02:00
oSumAtrIX
f2684947f0 refactor: remove integrations dependency 2022-08-27 04:59:04 +02:00
oSumAtrIX
0183800e0f refactor: addInstruction instead of addInstructions 2022-08-27 04:01:09 +02:00
semantic-release-bot
1b9e8335d2 chore(release): 2.44.0 [skip ci]
# [2.44.0](https://github.com/revanced/revanced-patches/compare/v2.43.2...v2.44.0) (2022-08-27)

### Features

* add debug switch ([#391](https://github.com/revanced/revanced-patches/issues/391)) ([ae306cb](ae306cbdda))
2022-08-27 01:23:45 +00:00
Canny
ae306cbdda feat: add debug switch (#391) 2022-08-27 03:21:53 +02:00
semantic-release-bot
5449e0d82c chore(release): 2.43.2 [skip ci]
## [2.43.2](https://github.com/revanced/revanced-patches/compare/v2.43.1...v2.43.2) (2022-08-26)

### Bug Fixes

* package name for Vanced ([#390](https://github.com/revanced/revanced-patches/issues/390)) ([8010c42](8010c42305))
2022-08-26 23:32:49 +00:00
Robert
8010c42305 fix: package name for Vanced (#390) 2022-08-27 01:31:07 +02:00
semantic-release-bot
0faa0fcd1a chore(release): 2.43.1 [skip ci]
## [2.43.1](https://github.com/revanced/revanced-patches/compare/v2.43.0...v2.43.1) (2022-08-26)

### Bug Fixes

* `Patch` annotation for `client-spoof` patch ([91de5ae](91de5ae29d))
2022-08-26 22:53:56 +00:00
oSumAtrIX
91de5ae29d fix: Patch annotation for client-spoof patch 2022-08-27 00:52:10 +02:00
semantic-release-bot
588e511a7b chore(release): 2.43.0 [skip ci]
# [2.43.0](https://github.com/revanced/revanced-patches/compare/v2.42.1...v2.43.0) (2022-08-26)

### Features

* `client-spoof` patch ([80db1ac](80db1ac76e))
2022-08-26 22:07:20 +00:00
epicsampler
80db1ac76e feat: client-spoof patch
Signed-off-by: oSumAtrIX <johan.melkonyan1@web.de>
2022-08-27 00:05:21 +02:00
semantic-release-bot
6edff3dd50 chore(release): 2.42.1 [skip ci]
## [2.42.1](https://github.com/revanced/revanced-patches/compare/v2.42.0...v2.42.1) (2022-08-26)

### Bug Fixes

* changed default value for autorepeat setting ([#386](https://github.com/revanced/revanced-patches/issues/386)) ([045811d](045811d13a))
2022-08-26 01:14:13 +00:00
afn
045811d13a fix: changed default value for autorepeat setting (#386) 2022-08-26 03:11:46 +02:00
Levente Ilyó-Kovács
71779ff98c docs: punctuation in microg-support patch description (#377) 2022-08-23 00:51:02 +02:00
semantic-release-bot
8b37c156ae chore(release): 2.42.0 [skip ci]
# [2.42.0](https://github.com/revanced/revanced-patches/compare/v2.41.0...v2.42.0) (2022-08-22)

### Bug Fixes

* default values for settings ([92eaffa](92eaffa3b0))

### Features

* setting for downloader package name ([8372c7b](8372c7b1dc))
* v17.29.34 compatibility for `downloads` patch ([#374](https://github.com/revanced/revanced-patches/issues/374)) ([2923751](29237511ee))
2022-08-22 17:16:38 +00:00
oSumAtrIX
8372c7b1dc feat: setting for downloader package name 2022-08-22 19:14:17 +02:00
oSumAtrIX
92eaffa3b0 fix: default values for settings 2022-08-22 19:13:57 +02:00
Robert
29237511ee feat: v17.29.34 compatibility for downloads patch (#374) 2022-08-22 14:38:21 +02:00
semantic-release-bot
dae5f65c3e chore(release): 2.41.0 [skip ci]
# [2.41.0](https://github.com/revanced/revanced-patches/compare/v2.40.2...v2.41.0) (2022-08-22)

### Features

* `downloads` patch ([#215](https://github.com/revanced/revanced-patches/issues/215)) ([06869e8](06869e82f4))
2022-08-22 03:00:31 +00:00
oSumAtrIX
06869e82f4 feat: downloads patch (#215) 2022-08-22 04:58:17 +02:00
semantic-release-bot
d499219236 chore(release): 2.40.2 [skip ci]
## [2.40.2](https://github.com/revanced/revanced-patches/compare/v2.40.1...v2.40.2) (2022-08-22)

### Bug Fixes

* correct title for `tablet-miniplayer` setting switch ([da80066](da8006644c))
2022-08-22 02:42:29 +00:00
oSumAtrIX
da8006644c fix: correct title for tablet-miniplayer setting switch 2022-08-22 04:40:49 +02:00
semantic-release-bot
cfcef02ba7 chore(release): 2.40.1 [skip ci]
## [2.40.1](https://github.com/revanced/revanced-patches/compare/v2.40.0...v2.40.1) (2022-08-22)

### Bug Fixes

* add missing switch for `tablet-mini-player` patch ([1463982](14639822b1))
2022-08-22 02:00:11 +00:00
oSumAtrIX
14639822b1 fix: add missing switch for tablet-mini-player patch 2022-08-22 03:58:15 +02:00
semantic-release-bot
88602f7c95 chore(release): 2.40.0 [skip ci]
# [2.40.0](https://github.com/revanced/revanced-patches/compare/v2.39.1...v2.40.0) (2022-08-22)

### Features

* `settings` patch framework ([#266](https://github.com/revanced/revanced-patches/issues/266)) ([077bd68](077bd683a7))
2022-08-22 00:02:00 +00:00
oSumAtrIX
077bd683a7 feat: settings patch framework (#266) 2022-08-22 01:59:43 +02:00
semantic-release-bot
b8a9b252b5 chore(release): 2.39.1 [skip ci]
## [2.39.1](https://github.com/revanced/revanced-patches/compare/v2.39.0...v2.39.1) (2022-08-21)

### Bug Fixes

* make `custom-branding` cross-platform ([#366](https://github.com/revanced/revanced-patches/issues/366)) ([7930cf4](7930cf4075))
2022-08-21 00:35:21 +00:00
Alberto Ponces
7930cf4075 fix: make custom-branding cross-platform (#366) 2022-08-21 02:33:04 +02:00
semantic-release-bot
e7868e86e3 chore(release): 2.39.0 [skip ci]
# [2.39.0](https://github.com/revanced/revanced-patches/compare/v2.38.0...v2.39.0) (2022-08-19)

### Features

* bundle `dex` file into `jar` file ([#359](https://github.com/revanced/revanced-patches/issues/359)) ([2bf5ce3](2bf5ce30f6))
2022-08-19 23:29:17 +00:00
Alberto Ponces
2bf5ce30f6 feat: bundle dex file into jar file (#359) 2022-08-20 01:26:59 +02:00
semantic-release-bot
e1ab0bd5fd chore(release): 2.38.0 [skip ci]
# [2.38.0](https://github.com/revanced/revanced-patches/compare/v2.37.0...v2.38.0) (2022-08-17)

### Features

* bump YouTube patches to `v17.32.35` ([#347](https://github.com/revanced/revanced-patches/issues/347)) ([b357a3c](b357a3c743))
2022-08-17 17:13:42 +00:00
inotia00
b357a3c743 feat: bump YouTube patches to v17.32.35 (#347) 2022-08-17 19:11:53 +02:00
semantic-release-bot
5d9fc02502 chore(release): 2.37.0 [skip ci]
# [2.37.0](https://github.com/revanced/revanced-patches/compare/v2.36.2...v2.37.0) (2022-08-15)

### Features

* ˋpflotsh-ecmwf-subscription-unlockˋ patch ([#332](https://github.com/revanced/revanced-patches/issues/332)) ([ce46668](ce46668e6e))
2022-08-15 18:56:22 +00:00
Technikte
ce46668e6e feat: ˋpflotsh-ecmwf-subscription-unlockˋ patch (#332) 2022-08-15 20:54:22 +02:00
574 changed files with 19272 additions and 5270 deletions

View File

@@ -59,3 +59,15 @@ body:
description: Add additional context here.
validations:
required: false
- type: checkboxes
id: acknowledgements
attributes:
label: Acknowledgements
description: Your issue will be closed if you haven't done these steps.
options:
- label: I have searched the existing issues and this is a new and no duplicate or related to another open issue.
required: true
- label: I have written a short but informative title.
required: true
- label: I filled out all of the requested information in this issue properly.
required: true

View File

@@ -1,46 +0,0 @@
name: ⭐ Feature request
description: Create a detailed feature request.
title: 'feat: <title>'
labels: [feature-request]
body:
- type: markdown
attributes:
value: |
# ReVanced feature request
Do not submit requests for patches here. Please submit them [here](https://github.com/orgs/revanced/discussions/categories/patches) instead.
Important to note that your feature request may have already been made before. Please check for existing feature requests [here](https://github.com/revanced/revanced-patches/labels/feature-request).
- type: dropdown
attributes:
label: Type
options:
- Functionality
- Cosmetic
- Other
validations:
required: true
- type: textarea
attributes:
label: Issue
description: What is the current problem. Why does it require a feature request?
validations:
required: true
- type: textarea
attributes:
label: Feature
description: Describe your feature in detail. How does it solve the issue?
validations:
required: true
- type: textarea
attributes:
label: Motivation
description: Why should your feature should be considered?
validations:
required: true
- type: textarea
attributes:
label: Additional context
description: Add additional context here.
validations:
required: false

View File

@@ -0,0 +1,41 @@
name: ⭐ Patch Request
description: Create a detailed patch request.
title: 'feat(patch): '
labels: [patch-request]
body:
- type: textarea
attributes:
label: Application
description: Which application is this patch for?
validations:
required: true
- type: textarea
attributes:
label: Issue
description: What is the issue this patch should solve?
validations:
required: true
- type: textarea
attributes:
label: Patch
description: "Describe the patch you'd like to see in detail."
validations:
required: true
- type: textarea
attributes:
label: Motivation
description: Why should your patch request should be considered? What makes it valuable to the community?
validations:
required: true
- type: checkboxes
id: acknowledgements
attributes:
label: Acknowledgements
description: Your issue will be closed if you haven't done these steps.
options:
- label: I have searched the existing issues and this is a new and no duplicate or related to another open issue.
required: true
- label: I have written a short but informative title.
required: true
- label: I filled out all of the requested information in this issue properly.
required: true

View File

@@ -12,32 +12,35 @@ on:
jobs:
release:
name: Release
runs-on: ubuntu-18.04
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Setup JDK
uses: actions/setup-java@v2
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'adopt'
distribution: 'temurin'
cache: gradle
- name: Setup Node.js
uses: actions/setup-node@v2
uses: actions/setup-node@v3
with:
node-version: "lts/*"
node-version: 'latest'
cache: 'npm'
- name: Setup Android SDK
uses: android-actions/setup-android@v2
uses: amyu/setup-android@v2
with:
cache-disabled: true
sdk-version: '33'
build-tools-version: '33.0.1'
- name: Build with Gradle
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: ./gradlew build clean generateReadme
- name: Install Android build-tools
run: sdkmanager "build-tools;32.0.0"
run: ./gradlew build generateMeta
- name: Setup semantic-release
run: npm install -g semantic-release @semantic-release/git @semantic-release/changelog gradle-semantic-release-plugin -D
run: npm install semantic-release @semantic-release/git @semantic-release/changelog gradle-semantic-release-plugin -D
- name: Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

8
.gitignore vendored
View File

@@ -114,4 +114,10 @@ gradle-app.setting
# gradle/wrapper/gradle-wrapper.properties
# Potentially copyrighted test APK
*.apk
*.apk
# Ignore vscode config
.vscode/
# Dependency directories
node_modules/

1
.idea/.gitignore generated vendored
View File

@@ -6,3 +6,4 @@
/dataSources.local.xml
# Editor-based HTTP Client requests
/httpRequests/
/kotlinc.xml

View File

@@ -21,7 +21,8 @@
"assets": [
"README.md",
"CHANGELOG.md",
"gradle.properties"
"gradle.properties",
"patches.json"
]
}
],
@@ -33,7 +34,7 @@
"path": "build/libs/*.jar"
},
{
"path": "build/libs/*.dex"
"path": "patches.json"
}
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,122 @@
# 🧩 ReVanced Patches
## 🧩 Patches
Official patches by ReVanced
The official Patch bundle provided by ReVanced and the community.
## 📜 List of available patches
> Looking for the JSON variant of this? [Click here](patches.json).
{{ table }}
## 📝 JSON Format
This section explains the JSON format for the [patches.json](patches.json) file.
The file contains an array of objects, each object representing a patch. The object contains the following properties:
| key | description |
|-------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `name` | The name of the patch. |
| `description` | The description of the patch. |
| `version` | The version of the patch. |
| `excluded` | Whether the patch is excluded by default. If `true`, the patch must never be included by default. |
| `options` | An array of options for this patch. |
| `options.key` | The key of the option. |
| `options.title` | The title of the option. |
| `options.description` | The description of the option. |
| `options.required` | Whether the option is required. |
| `options.choices?` | An array of choices of the option. This may be `null` if this option has no choices. The element type of this array may be any type. It can be a `String`, `Int` or something else. |
| `dependencies` | An array of dependencies, which are patch names. |
| `compatiblePackages` | An array of packages compatible with this patch. |
| `compatiblePackages.name` | The name of the package. |
| `compatiblePackages.versions` | An array of versions of the package compatible with this patch. If empty, all versions are seemingly compatible. |
Example:
```json
[
{
"name": "remember-video-quality",
"description": "Adds the ability to remember the video quality you chose in the video quality flyout.",
"version": "0.0.1",
"excluded": false,
"options": [],
"dependencies": [
"integrations",
"video-id-hook"
],
"compatiblePackages": [
{
"name": "com.google.android.youtube",
"versions": [
"17.22.36",
"17.24.35",
"17.26.35",
"17.27.39",
"17.28.34",
"17.29.34",
"17.32.35",
"17.33.42"
]
}
]
},
{
"name": "theme",
"description": "Enables a custom theme.",
"version": "0.0.1",
"excluded": false,
"deprecated": false,
"options": [
{
"key": "theme",
"title": "Theme",
"description": "Select a theme.",
"required": true,
"choices": [
"Amoled"
]
}
],
"dependencies": [
"locale-config-fix"
],
"compatiblePackages": [
{
"name": "com.google.android.youtube",
"versions": []
}
]
},
{
"name": "custom-branding",
"description": "Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).",
"version": "0.0.1",
"excluded": false,
"deprecated": false,
"options": [
{
"key": "appName",
"title": "Application Name",
"description": "The name of the application it will show on your home screen.",
"required": true,
"choices": null
},
{
"key": "appIconPath",
"title": "Application Icon Path",
"description": "A path to the icon of the application.",
"required": false,
"choices": null
}
],
"dependencies": [
"locale-config-fix"
],
"compatiblePackages": [
{
"name": "com.google.android.youtube",
"versions": []
}
]
}
]
```

386
README.md
View File

@@ -1,14 +1,142 @@
# 🧩 ReVanced Patches
## 🧩 Patches
Official patches by ReVanced
The official Patch bundle provided by ReVanced and the community.
## 📜 List of available patches
> Looking for the JSON variant of this? [Click here](patches.json).
### 📦 `com.google.android.youtube`
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `always-autorepeat` | Always repeats the playing video again. | 17.45.36 |
| `client-spoof` | Spoofs the YouTube or Vanced client to prevent playback issues. | all |
| `comments` | Hides components related to comments. | 17.45.36 |
| `custom-branding` | Changes the YouTube launcher icon and name to your choice (defaults to ReVanced). | all |
| `custom-video-buffer` | Lets you change the buffers of videos. | 17.45.36 |
| `custom-video-speed` | Adds more video speed options. | 17.45.36 |
| `debugging` | Adds debugging options. | all |
| `disable-auto-captions` | Disable forced captions from being automatically enabled. | 17.45.36 |
| `disable-auto-player-popup-panels` | Disable automatic popup panels (playlist or live chat) on video player. | 17.45.36 |
| `disable-fullscreen-panels` | Disables video description and comments panel in fullscreen view. | 17.45.36 |
| `disable-startup-shorts-player` | Disables playing YouTube Shorts when launching YouTube. | 17.45.36 |
| `disable-zoom-haptics` | Disables haptics when zooming. | all |
| `downloads` | Enables downloading music and videos from YouTube. | 17.45.36 |
| `enable-wide-searchbar` | Replaces the search icon with a wide search bar. This will hide the YouTube logo when active. | 17.45.36 |
| `general-ads` | Removes general ads. | 17.45.36 |
| `hdr-auto-brightness` | Makes the brightness of HDR videos follow the system default. | 17.45.36 |
| `hide-album-cards` | Hides the album cards below the artist description. | 17.45.36 |
| `hide-artist-card` | Hides the artist card below the searchbar. | 17.45.36 |
| `hide-autoplay-button` | Hides the autoplay button in the video player. | 17.45.36 |
| `hide-captions-button` | Hides the captions button on video player. | 17.45.36 |
| `hide-cast-button` | Hides the cast button in the video player. | all |
| `hide-create-button` | Hides the create button in the navigation bar. | 17.45.36 |
| `hide-crowdfunding-box` | Hides the crowdfunding box between the player and video description. | 17.45.36 |
| `hide-email-address` | Hides the email address in the account switcher. | 17.45.36 |
| `hide-endscreen-cards` | Hides the suggested video cards at the end of a video in fullscreen. | 17.45.36 |
| `hide-info-cards` | Hides info-cards in videos. | 17.45.36 |
| `hide-my-mix` | Hides mix playlists. | 17.45.36 |
| `hide-shorts-button` | Hides the shorts button on the navigation bar. | 17.45.36 |
| `hide-time-and-seekbar` | Hides progress bar and time counter on videos. | 17.45.36 |
| `hide-video-buttons` | Adds options to hide action buttons under a video. | 17.45.36 |
| `hide-watch-in-vr` | Hides the Watch in VR option from the player settings flyout panel. | 17.45.36 |
| `hide-watermark` | Hides creator's watermarks on videos. | 17.45.36 |
| `microg-support` | Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG. | 17.45.36 |
| `minimized-playback` | Enables minimized and background playback. | 17.45.36 |
| `old-quality-layout` | Enables the original quality flyout menu. | 17.45.36 |
| `open-links-directly` | Bypasses redirect links and allows opening links directly. | 17.45.36 |
| `premium-heading` | Shows premium branding on the home screen. | all |
| `remember-video-quality` | Adds the ability to remember the video quality you chose in the video quality flyout. | 17.45.36 |
| `remove-player-button-background` | Removes the background from the video player buttons. | 17.45.36 |
| `return-youtube-dislike` | Shows the dislike count of videos using the Return YouTube Dislike API. | 17.45.36 |
| `seekbar-tapping` | Enables tap-to-seek on the seekbar of the video player. | 17.45.36 |
| `settings` | Adds settings for ReVanced to YouTube. | all |
| `sponsorblock` | Integrate SponsorBlock. | 17.45.36 |
| `swipe-controls` | Adds volume and brightness swipe controls. | 17.45.36 |
| `tablet-mini-player` | Enables the tablet mini player layout. | 17.45.36 |
| `theme` | Applies a custom theme. | all |
| `video-ads` | Removes ads in the video player. | 17.45.36 |
</details>
### 📦 `com.google.android.apps.youtube.music`
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `background-play` | Enables playing music in the background. | 5.34.51 |
| `codecs-unlock` | Adds more audio codec options. The new audio codecs usually result in better audio quality. | 5.34.51 |
| `compact-header` | Hides the music category bar at the top of the homepage. | 5.34.51 |
| `exclusive-audio-playback` | Enables the option to play music without video. | 5.34.51 |
| `hide-get-premium` | Removes all "Get Premium" evidences from the avatar menu. | 5.34.51 |
| `minimized-playback-music` | Enables minimized playback on Kids music. | 5.34.51 |
| `music-microg-support` | Allows YouTube Music ReVanced to run without root and under a different package name. | 5.34.51 |
| `music-video-ads` | Removes ads in the music player. | 5.34.51 |
| `tasteBuilder-remover` | Removes the "Tell us which artists you like" card from the home screen. | 5.34.51 |
| `upgrade-button-remover` | Removes the upgrade tab from the pivot bar. | 5.34.51 |
</details>
### 📦 `com.ss.android.ugc.trill`
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `disable-login-requirement` | Do not force login. | all |
| `downloads` | Removes download restrictions and changes the default path to download to. | all |
| `feed-filter` | Filters tiktok videos: removing ads, removing livestreams. | all |
| `fix-google-login` | Allows logging in with a Google account. | all |
| `hide-ads` | Removes ads from TikTok. | all |
| `playback-speed` | Enables the playback speed option for all videos. | all |
| `settings` | Adds settings for ReVanced to TikTok. | all |
| `show-seekbar` | Shows progress bar for all video. | all |
| `sim-spoof` | Spoofs the information which is retrieved from the sim-card. | all |
</details>
### 📦 `com.zhiliaoapp.musically`
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `disable-login-requirement` | Do not force login. | all |
| `downloads` | Removes download restrictions and changes the default path to download to. | all |
| `feed-filter` | Filters tiktok videos: removing ads, removing livestreams. | all |
| `fix-google-login` | Allows logging in with a Google account. | all |
| `hide-ads` | Removes ads from TikTok. | all |
| `playback-speed` | Enables the playback speed option for all videos. | all |
| `settings` | Adds settings for ReVanced to TikTok. | all |
| `show-seekbar` | Shows progress bar for all video. | all |
| `sim-spoof` | Spoofs the information which is retrieved from the sim-card. | all |
</details>
### 📦 `tv.twitch.android.app`
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `block-audio-ads` | Blocks audio ads in streams and VODs. | all |
| `block-embedded-ads` | Blocks embedded steam ads using services like TTV.lol or PurpleAdBlocker. | all |
| `block-video-ads` | Blocks video ads in streams and VODs. | all |
| `debug-mode` | Enables Twitch's internal debugging mode. | all |
| `settings` | Adds settings menu to Twitch. | all |
| `show-deleted-messages` | Shows deleted chat messages behind a clickable spoiler. | all |
</details>
### 📦 `com.spotify.music`
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `disable-capture-restriction` | Allows capturing Spotify's audio output while screen sharing or screen recording. | all |
| `hide-premium-navbar` | Removes the premium tab from the navbar. | all |
| `spotify-theme` | Applies a custom theme. | all |
</details>
### 📦 `com.twitter.android`
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `dynamic-color` | Replaces the default Twitter Blue with the users Material You palette. | all |
| `monochrome-icon` | Adds a monochrome icon. | all |
| `timeline-ads` | Removes ads from the Twitter timeline. | all |
</details>
@@ -18,23 +146,55 @@ Official patches by ReVanced
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `general-reddit-ads` | Removes general ads from the Reddit frontpage and subreddits. | all |
| `premium-icon-reddit` | Unlocks premium Reddit app icons. | all |
</details>
### 📦 `com.google.android.apps.youtube.music`
### 📦 `com.vanced.android.youtube`
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `minimized-playback-music` | Enables minimized playback on Kids music. | 5.17.51 |
| `tasteBuilder-remover` | Removes the "Tell us which artists you like" card from the home screen. | 5.16.51 |
| `hide-get-premium` | Removes all "Get Premium" evidences from the avatar menu. | 5.17.51 |
| `compact-header` | Hides the music category bar at the top of the homepage. | 5.16.51 |
| `upgrade-button-remover` | Removes the upgrade tab from the pivot bar. | 5.17.51 |
| `background-play` | Enables playing music in the background. | 5.17.51 |
| `music-microg-support` | Allows YouTube Music ReVanced to run without root and under a different package name. | 5.17.51 |
| `music-video-ads` | Removes ads in the music player. | 5.17.51 |
| `codecs-unlock` | Adds more audio codec options. The new audio codecs usually result in better audio quality. | 5.17.51 |
| `exclusive-audio-playback` | Enables the option to play music without video. | 5.17.51 |
| `client-spoof` | Spoofs the YouTube or Vanced client to prevent playback issues. | all |
</details>
### 📦 `com.myprog.hexedit`
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `disable-ads` | Disables ads in HexEditor. | all |
</details>
### 📦 `com.crunchyroll.crunchyroid`
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `enable-downloads` | Enables downloads for Crunchyroll. | all |
</details>
### 📦 `com.garzotto.pflotsh.ecmwf_a`
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `pflotsh-ecmwf-subscription-unlock` | Unlocks all subscription features. | 3.5.4 |
</details>
### 📦 `org.citra.citra_emu`
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `premium-unlock` | Unlocks premium functions. | all |
</details>
### 📦 `com.backdrops.wallpapers`
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `pro-unlock` | Unlocks pro-only functions. | all |
</details>
### 📦 `de.dwd.warnapp`
@@ -45,47 +205,183 @@ Official patches by ReVanced
| `promo-code-unlock` | Disables the validation of promo code. Any code will work to unlock all features. | all |
</details>
### 📦 `com.ss.android.ugc.trill`
### 📦 `com.shervinkoushan.anyTracker`
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `tiktok-ads` | Removes ads from TikTok. | all |
| `unlock-premium` | Unlocks all premium features. | all |
</details>
### 📦 `com.google.android.youtube`
### 📦 `com.urbandroid.sleep`
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `swipe-controls` | Adds volume and brightness swipe controls. | 17.29.34 |
| `seekbar-tapping` | Enables tap-to-seek on the seekbar of the video player. | 17.29.34 |
| `minimized-playback` | Enables minimized and background playback. | 17.29.34 |
| `amoled` | Enables pure black theme. | 17.29.34 |
| `disable-create-button` | Hides the create button in the navigation bar. | 17.29.34 |
| `hide-cast-button` | Hides the cast button in the video player. | all |
| `return-youtube-dislike` | Shows the dislike count of videos using the Return YouTube Dislike API. | 17.29.34 |
| `hide-autoplay-button` | Hides the autoplay button in the video player. | 17.29.34 |
| `premium-heading` | Shows premium branding on the home screen. | all |
| `custom-branding` | Changes the YouTube launcher icon and name to your choice (defaults to ReVanced). | all |
| `disable-fullscreen-panels` | Disables video description and comments panel in fullscreen view. | 17.29.34 |
| `old-quality-layout` | Enables the original quality flyout menu. | 17.29.34 |
| `hide-shorts-button` | Hides the shorts button on the navigation bar. | 17.29.34 |
| `hide-watermark` | Hides creator's watermarks on videos. | 17.29.34 |
| `sponsorblock` | Integrate SponsorBlock. | 17.29.34 |
| `enable-wide-searchbar` | Replaces the search icon with a wide search bar. This will hide the YouTube logo when active. | 17.29.34 |
| `tablet-mini-player` | Enables the tablet mini player layout. | 17.29.34 |
| `custom-video-buffer` | Lets you change the buffers of videos. | 17.29.34 |
| `always-autorepeat` | Always repeats the playing video again. | 17.29.34 |
| `microg-support` | Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG | 17.29.34 |
| `settings` | Adds settings for ReVanced to YouTube. | all |
| `enable-debugging` | Enables app debugging by patching the manifest file. | all |
| `custom-playback-speed` | Adds more video playback speed options. | 17.29.34 |
| `hdr-auto-brightness` | Makes the brightness of HDR videos follow the system default. | 17.29.34 |
| `remember-video-quality` | Adds the ability to remember the video quality you chose in the video quality flyout. | 17.29.34 |
| `video-ads` | Removes ads in the video player. | 17.29.34 |
| `general-ads` | Removes general ads. | 17.29.34 |
| `hide-infocard-suggestions` | Hides infocards in videos. | 17.29.34 |
| `unlock-premium` | Unlocks all premium features. | all |
</details>
### 📦 `com.awedea.nyx`
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `unlock-pro` | Unlocks all pro features. | all |
</details>
### 📦 `co.windyapp.android`
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `unlock-pro` | Unlocks all pro features. | all |
</details>
### 📦 `org.totschnig.myexpenses`
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `unlock-pro` | Unlocks all professional features. | all |
</details>
### 📦 `com.ithebk.expensemanager`
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `unlock-pro` | Unlocks pro features. | all |
</details>
### 📦 `ginlemon.iconpackstudio`
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `unlock-pro` | Unlocks all pro features. | all |
</details>
### 📦 `com.ticktick.task`
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `unlock-themes` | Unlocks all themes. | all |
</details>
## 📝 JSON Format
This section explains the JSON format for the [patches.json](patches.json) file.
The file contains an array of objects, each object representing a patch. The object contains the following properties:
| key | description |
|-------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `name` | The name of the patch. |
| `description` | The description of the patch. |
| `version` | The version of the patch. |
| `excluded` | Whether the patch is excluded by default. If `true`, the patch must never be included by default. |
| `options` | An array of options for this patch. |
| `options.key` | The key of the option. |
| `options.title` | The title of the option. |
| `options.description` | The description of the option. |
| `options.required` | Whether the option is required. |
| `options.choices?` | An array of choices of the option. This may be `null` if this option has no choices. The element type of this array may be any type. It can be a `String`, `Int` or something else. |
| `dependencies` | An array of dependencies, which are patch names. |
| `compatiblePackages` | An array of packages compatible with this patch. |
| `compatiblePackages.name` | The name of the package. |
| `compatiblePackages.versions` | An array of versions of the package compatible with this patch. If empty, all versions are seemingly compatible. |
Example:
```json
[
{
"name": "remember-video-quality",
"description": "Adds the ability to remember the video quality you chose in the video quality flyout.",
"version": "0.0.1",
"excluded": false,
"options": [],
"dependencies": [
"integrations",
"video-id-hook"
],
"compatiblePackages": [
{
"name": "com.google.android.youtube",
"versions": [
"17.22.36",
"17.24.35",
"17.26.35",
"17.27.39",
"17.28.34",
"17.29.34",
"17.32.35",
"17.33.42"
]
}
]
},
{
"name": "theme",
"description": "Enables a custom theme.",
"version": "0.0.1",
"excluded": false,
"deprecated": false,
"options": [
{
"key": "theme",
"title": "Theme",
"description": "Select a theme.",
"required": true,
"choices": [
"Amoled"
]
}
],
"dependencies": [
"locale-config-fix"
],
"compatiblePackages": [
{
"name": "com.google.android.youtube",
"versions": []
}
]
},
{
"name": "custom-branding",
"description": "Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).",
"version": "0.0.1",
"excluded": false,
"deprecated": false,
"options": [
{
"key": "appName",
"title": "Application Name",
"description": "The name of the application it will show on your home screen.",
"required": true,
"choices": null
},
{
"key": "appIconPath",
"title": "Application Icon Path",
"description": "A path to the icon of the application.",
"required": false,
"choices": null
}
],
"dependencies": [
"locale-config-fix"
],
"compatiblePackages": [
{
"name": "com.google.android.youtube",
"versions": []
}
]
}
]
```

View File

@@ -20,22 +20,21 @@ repositories {
}
dependencies {
implementation(kotlin("stdlib"))
implementation("app.revanced:revanced-patcher:3.3.3")
implementation("app.revanced:revanced-patcher:6.3.0")
implementation("app.revanced:multidexlib2:2.5.2.r2")
// Required for meta
implementation("com.google.code.gson:gson:2.10")
}
tasks {
register<DefaultTask>("generateDex") {
description = "Generate dex files from build"
register<DefaultTask>("generateBundle") {
description = "Generate dex files from build and bundle them in the jar file"
dependsOn(build)
doLast {
val androidHome = System.getenv("ANDROID_HOME") ?: throw GradleException("ANDROID_HOME not found")
val d8 = "${androidHome}/build-tools/32.0.0/d8"
val d8 = "${androidHome}/build-tools/33.0.1/d8"
val input = configurations.archives.get().allArtifacts.files.files.first().absolutePath
val output = input.replace(".jar", ".dex")
val work = File("${buildDir}/libs")
exec {
@@ -45,16 +44,16 @@ tasks {
exec {
workingDir = work
commandLine = listOf("mv", "classes.dex", output)
commandLine = listOf("zip", "-u", input, "classes.dex")
}
}
}
register<JavaExec>("generateReadme") {
description = "Generate README.md"
register<JavaExec>("generateMeta") {
description = "Generate metadata for this bundle"
dependsOn(build)
classpath = sourceSets["main"].runtimeClasspath
mainClass.set("app.revanced.meta.readme.Generator")
mainClass.set("app.revanced.meta.Meta")
}
// Dummy task to fix the Gradle semantic-release plugin.
// Remove this if you forked it to support building only.
@@ -62,6 +61,6 @@ tasks {
register<DefaultTask>("publish") {
group = "publish"
description = "Dummy task"
dependsOn(named("generateDex"), named("generateReadme"))
dependsOn(named("generateBundle"), named("generateMeta"))
}
}

View File

@@ -1,2 +1,2 @@
kotlin.code.style = official
version = 2.36.2
version = 2.141.0-dev.1

6107
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

8
package.json Normal file
View File

@@ -0,0 +1,8 @@
{
"devDependencies": {
"@semantic-release/changelog": "^6.0.2",
"@semantic-release/git": "^10.0.1",
"gradle-semantic-release-plugin": "^1.7.4",
"semantic-release": "^19.0.5"
}
}

1
patches.json Normal file

File diff suppressed because one or more lines are too long

View File

@@ -1,32 +1,31 @@
package app.revanced.extensions
import app.revanced.patcher.data.impl.BytecodeData
import app.revanced.patcher.data.impl.ResourceData
import app.revanced.patcher.extensions.addInstructions
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.MethodFingerprintExtensions.name
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import app.revanced.patcher.patch.PatchResultError
import app.revanced.patcher.util.proxy.mutableTypes.MutableClass
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
import app.revanced.patcher.util.smali.toInstruction
import org.jf.dexlib2.AccessFlags
import org.jf.dexlib2.Opcode
import org.jf.dexlib2.builder.MutableMethodImplementation
import org.jf.dexlib2.builder.instruction.BuilderInstruction11n
import org.jf.dexlib2.builder.instruction.BuilderInstruction11x
import org.jf.dexlib2.builder.instruction.BuilderInstruction21t
import org.jf.dexlib2.builder.instruction.BuilderInstruction35c
import org.jf.dexlib2.immutable.reference.ImmutableMethodReference
import org.jf.dexlib2.iface.Method
import org.jf.dexlib2.util.MethodUtil
import org.w3c.dom.Node
import java.nio.file.Files
// TODO: this method does not make sense here
internal fun MutableMethodImplementation.injectHideCall(
index: Int,
register: Int
) {
this.addInstruction(
index,
"invoke-static { v$register }, Lapp/revanced/integrations/patches/HideHomeAdsPatch;->HideHomeAds(Landroid/view/View;)V".toInstruction()
)
// TODO: populate this to all patches
/**
* Convert a [MethodFingerprint] to a [PatchResultError].
*
* @return A [PatchResultError] for the [MethodFingerprint].
*/
fun MethodFingerprint.toErrorResult() = PatchResultError("Failed to resolve $name")
/**
* Find the [MutableMethod] from a given [Method] in a [MutableClass].
*
* @param method The [Method] to find.
* @return The [MutableMethod].
*/
fun MutableClass.findMutableMethodOf(method: Method) = this.methods.first {
MethodUtil.methodSignaturesMatch(it, method)
}
/**
@@ -35,9 +34,9 @@ internal fun MutableMethodImplementation.injectHideCall(
* @param targetClass the class to start traversing the class hierarchy from
* @param callback function that is called for every class in the hierarchy
*/
fun BytecodeData.traverseClassHierarchy(targetClass: MutableClass, callback: MutableClass.() -> Unit) {
fun BytecodeContext.traverseClassHierarchy(targetClass: MutableClass, callback: MutableClass.() -> Unit) {
callback(targetClass)
this.findClass(targetClass.superclass ?: return)?.resolve()?.let {
this.findClass(targetClass.superclass ?: return)?.mutableClass?.let {
traverseClassHierarchy(it, callback)
}
}
@@ -53,160 +52,7 @@ fun MutableClass.transformMethods(transform: MutableMethod.() -> MutableMethod)
methods.addAll(transformedMethods)
}
/**
* Insert an event hook at the top of the method. If the hook returns true, the event is consumed and the method will return with true
*
* the hook method MUST return a boolean and MUST take two parameters, like so:
* fun hook(thisRef: Object, eventData: Object): Boolean {}
*
* The final injected code will resemble the following logic:
* if( YouHook(this, event) ) { return true; }
* ...
*
* @param hookRef reference to the hook method
*/
internal fun MutableMethod.injectConsumableEventHook(hookRef: ImmutableMethodReference) {
val isStaticMethod = AccessFlags.STATIC.isSet(this.accessFlags)
this.implementation?.let { impl ->
// create label to index 0 to continue to the normal program flow
val lblContinueNormalFlow = impl.newLabelForIndex(0)
// define registers
/** V0 */
val regV0 = 0
/** this */
val regP0 = impl.registerCount - this.parameters.size - (if (isStaticMethod) 0 else 1)
/** motionEvent */
val regP1 = regP0 + 1
// insert instructions at the start of the method:
// if( Hook(this, event) ) { return true; }
impl.addInstructions(
0, listOf(
// invoke-static { p0, p1 } <hook>
BuilderInstruction35c(
Opcode.INVOKE_STATIC,
2,
regP0,
regP1,
0, 0, 0,
hookRef
),
// move-result v0
BuilderInstruction11x(
Opcode.MOVE_RESULT,
regV0
),
// if-eqz v0, :continue_normal_flow
BuilderInstruction21t(
Opcode.IF_EQZ,
regV0,
lblContinueNormalFlow
),
// const/4 v0, 0x1
BuilderInstruction11n(
Opcode.CONST_4,
regV0,
0x1
),
// return v0
BuilderInstruction11x(
Opcode.RETURN,
regV0
)
// :continue_normal_flow
)
)
}
}
/**
* inject resources into the patched app
*
* @param classLoader classloader to use for loading the resources
* @param patchDirectoryPath path to the files. this will be the directory you created under the 'resources' source folder
* @param resourceType the resource type, for example 'drawable'. this has to match both the source and the target
* @param resourceFileNames names of all resources of this type to inject
*/
fun ResourceData.injectResources(
classLoader: ClassLoader,
patchDirectoryPath: String,
resourceType: String,
resourceFileNames: List<String>
) {
resourceFileNames.forEach { name ->
val relativePath = "$resourceType/$name"
val sourceRes = classLoader.getResourceAsStream("$patchDirectoryPath/$relativePath")
?: throw PatchResultError("could not open resource '$patchDirectoryPath/$relativePath'")
Files.copy(
sourceRes,
this["res"].resolve(relativePath).toPath()
)
}
}
/**
* inject strings into the patched app
*
* @param classLoader classloader to use for loading the resources
* @param patchDirectoryPath path to the files. this will be the directory you created under the 'resources' source folder
* @param languageIdentifier ISO 639-2 two- letter language code identifier (aka the one android uses for values directory)
*/
fun ResourceData.injectStrings(
classLoader: ClassLoader,
patchDirectoryPath: String,
languageIdentifier: String? = null,
) {
val relativePath =
if (languageIdentifier.isNullOrBlank()) "values/strings.xml" else "values/strings-$languageIdentifier.xml"
// open source strings.xml
val sourceInputStream = classLoader.getResourceAsStream("$patchDirectoryPath/$relativePath")
?: throw PatchResultError("failed to open '$patchDirectoryPath/$relativePath'")
xmlEditor[sourceInputStream].use { sourceStringsXml ->
val strings = sourceStringsXml.file.getElementsByTagName("resources").item(0).childNodes
// open target strings.xml
xmlEditor["res/$relativePath"].use { targetStringsXml ->
val targetFile = targetStringsXml.file
val targetRootNode = targetFile.getElementsByTagName("resources").item(0)
// process all children strings in the source
for (i in 0 until strings.length) {
// clone the node from source to target
val node = strings.item(i).cloneNode(true)
targetFile.adoptNode(node)
targetRootNode.appendChild(node)
}
}
}
}
internal fun Node.doRecursively(action: (Node) -> Unit) {
action(this)
for (i in 0 until this.childNodes.length) this.childNodes.item(i).doRecursively(action)
}
internal fun String.startsWithAny(vararg prefixes: String): Boolean {
for (prefix in prefixes)
if (this.startsWith(prefix))
return true
return false
}
internal fun String.equalsAny(vararg other: String): Boolean {
for (_other in other)
if (this == _other)
return true
return false
}
}

View File

@@ -0,0 +1,27 @@
package app.revanced.meta
import app.revanced.meta.json.generateJson
import app.revanced.meta.readme.generateText
import app.revanced.patcher.data.Context
import app.revanced.patcher.patch.Patch
import app.revanced.patcher.util.patch.PatchBundle
import java.io.File
typealias Bundle = List<Class<out Patch<Context>>>
object Meta {
@JvmStatic
fun main(args: Array<String>) {
val patches = accumulatePatches()
if (patches.isEmpty()) throw IllegalStateException("No patches found")
generateText(patches)
generateJson(patches)
}
}
fun accumulatePatches() = PatchBundle.Jar(
File("build/libs/").listFiles()!!.first {
it.name.startsWith("revanced-patches-") && it.name.endsWith(".jar")
}.absolutePath
).loadPatches()

View File

@@ -0,0 +1,48 @@
package app.revanced.meta.json
import app.revanced.meta.Bundle
import app.revanced.patcher.extensions.PatchExtensions.compatiblePackages
import app.revanced.patcher.extensions.PatchExtensions.dependencies
import app.revanced.patcher.extensions.PatchExtensions.description
import app.revanced.patcher.extensions.PatchExtensions.include
import app.revanced.patcher.extensions.PatchExtensions.options
import app.revanced.patcher.extensions.PatchExtensions.patchName
import app.revanced.patcher.extensions.PatchExtensions.version
import app.revanced.patcher.patch.PatchOption
import com.google.gson.GsonBuilder
import java.io.File
private val gson = GsonBuilder().serializeNulls().create()
fun generateJson(bundle: Bundle) {
val patches = bundle.map {
JsonPatch(
it.patchName,
it.description ?: "This patch has no description.",
it.version ?: "0.0.0",
!it.include,
it.options?.map { option ->
Option(
option.key,
option.title,
option.description,
option.required,
option.let { lo ->
if (lo is PatchOption.ListOption<*>) {
lo.options.toMutableList().toTypedArray()
} else null
}
)
}?.toTypedArray() ?: emptyArray(),
it.dependencies?.map { dep ->
dep.java.patchName
}?.toTypedArray() ?: emptyArray(),
it.compatiblePackages?.map { pkg ->
CompatiblePackage(pkg.name, pkg.versions)
}?.toTypedArray() ?: emptyArray()
)
}
val json = File("patches.json")
json.writeText(gson.toJson(patches))
}

View File

@@ -0,0 +1,26 @@
@file:Suppress("ArrayInDataClass") // We don't need it here.
package app.revanced.meta.json
data class JsonPatch(
val name: String,
val description: String,
val version: String,
val excluded: Boolean,
val options: Array<Option>,
val dependencies: Array<String>,
val compatiblePackages: Array<CompatiblePackage>,
)
data class CompatiblePackage(
val name: String,
val versions: Array<String>,
)
data class Option(
val key: String,
val title: String,
val description: String,
val required: Boolean,
val choices: Array<*>?,
)

View File

@@ -1,11 +1,10 @@
package app.revanced.meta.readme
import app.revanced.patcher.data.Data
import app.revanced.patcher.data.Context
import app.revanced.patcher.extensions.PatchExtensions.compatiblePackages
import app.revanced.patcher.patch.Patch
internal fun Class<out Patch<Data>>.getLatestVersion(): SemanticVersion? =
this.compatiblePackages?.first()?.versions?.map { SemanticVersion.fromString(it) }
?.maxWithOrNull(
SemanticVersionComparator
)
internal fun Class<out Patch<Context>>.getLatestVersion() =
this.compatiblePackages?.first()?.versions?.map {
SemanticVersion.fromString(it)
}?.maxWithOrNull(SemanticVersionComparator)

View File

@@ -1,55 +1,42 @@
package app.revanced.meta.readme
import app.revanced.patcher.data.Data
import app.revanced.meta.Bundle
import app.revanced.patcher.data.Context
import app.revanced.patcher.extensions.PatchExtensions.compatiblePackages
import app.revanced.patcher.extensions.PatchExtensions.description
import app.revanced.patcher.extensions.PatchExtensions.patchName
import app.revanced.patcher.patch.Patch
import app.revanced.patcher.util.patch.impl.JarPatchBundle
import java.io.File
object Generator {
private const val TABLE_HEADER =
"| \uD83D\uDC8A Patch | \uD83D\uDCDC Description | \uD83C\uDFF9 Target Version |\n" +
"|:--------:|:--------------:|:-----------------:|"
private const val TABLE_HEADER =
"| \uD83D\uDC8A Patch | \uD83D\uDCDC Description | \uD83C\uDFF9 Target Version |\n" + "|:--------:|:--------------:|:-----------------:|"
@JvmStatic
fun main(args: Array<String>) {
val buildDir = File("build/libs/")
val buildJar =
buildDir.listFiles()?.first { it.name.startsWith("revanced-patches-") && it.name.endsWith(".jar") }!!
private val TABLE_REGEX = Regex("\\{\\{\\s?table\\s?}}")
val bundle = JarPatchBundle(buildJar.absolutePath).loadPatches()
fun generateText(bundle: Bundle) {
val output = StringBuilder()
val packages = mutableMapOf<String, MutableList<Class<out Patch<Context>>>>()
val output = StringBuilder()
val packages = mutableMapOf<String, MutableList<Class<out Patch<Data>>>>()
bundle.map {
val packageName = it.compatiblePackages?.first()?.name!!
if (!packages.contains(packageName)) {
packages[packageName] = mutableListOf()
}
packages[packageName]?.add(it)
for (patch in bundle) {
patch.compatiblePackages?.forEach { pkg ->
if (!packages.contains(pkg.name)) packages[pkg.name] = mutableListOf()
packages[pkg.name]!!.add(patch)
}
for (pkg in packages) {
output.appendLine("### \uD83D\uDCE6 `${pkg.key}`")
output.appendLine("<details>\n")
output.appendLine(TABLE_HEADER)
pkg.value.forEach { output.appendLine("| `${it.patchName}` | ${it.description} | ${it.getLatestVersion() ?: "all"} |") }
output.appendLine("</details>\n")
}
val readMeTemplateFile = File("README-template.md")
val readmeTemplate = Template(readMeTemplateFile.readText())
readmeTemplate.replaceVariable("table", output.toString())
val readme = File("README.md")
readme.writeText(readmeTemplate.toString())
}
for (pkg in packages.entries.sortedByDescending { it.value.size }) {
output.appendLine("### \uD83D\uDCE6 `${pkg.key}`")
output.appendLine("<details>\n")
output.appendLine(TABLE_HEADER)
pkg.value.forEach { output.appendLine("| `${it.patchName}` | ${it.description} | ${it.getLatestVersion() ?: "all"} |") }
output.appendLine("</details>\n")
}
val readmeTemplate = Template(File("README-template.md").readText())
readmeTemplate.replaceVariable(TABLE_REGEX, output.toString())
val readme = File("README.md")
readme.writeText(readmeTemplate.toString())
}

View File

@@ -3,10 +3,8 @@ package app.revanced.meta.readme
data class SemanticVersion(val major: Int, val minor: Int, val patch: Int) {
companion object {
fun fromString(version: String): SemanticVersion {
var parts = version.split(".")
val parts = version.split(".")
if (parts.count() != 3) throw IllegalArgumentException("Invalid semantic version")
val versionNumbers = parts.map { it.toInt() }
return SemanticVersion(versionNumbers[0], versionNumbers[1], versionNumbers[2])
}

View File

@@ -1,12 +1,10 @@
package app.revanced.meta.readme
class Template(template: String) {
val result: StringBuilder = StringBuilder(template)
val result = StringBuilder(template)
fun replaceVariable(name: String, value: String) {
val regex = Regex("\\{\\{\\s?$name\\s?}}")
fun replaceVariable(regex: Regex, value: String) {
val range = regex.find(result)!!.range
result.replace(range.first, range.last + 1, value)
}

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,7 @@
package app.revanced.patches.backdrops.misc.pro.annotations
import app.revanced.patcher.annotation.Compatibility
import app.revanced.patcher.annotation.Package
@Compatibility([Package("com.backdrops.wallpapers")])
internal annotation class ProUnlockCompatibility

View File

@@ -0,0 +1,15 @@
package app.revanced.patches.backdrops.misc.pro.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.Opcode
object ProUnlockFingerprint : MethodFingerprint(
opcodes = listOf(
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT_OBJECT,
Opcode.INVOKE_INTERFACE,
Opcode.MOVE_RESULT,
Opcode.IF_EQZ
),
customFingerprint = { it.definingClass == "Lcom/backdrops/wallpapers/data/local/DatabaseHandlerIAB;" && it.name == "lambda\$existPurchase\$0" }
)

View File

@@ -0,0 +1,42 @@
package app.revanced.patches.backdrops.misc.pro.patch
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.MethodFingerprintExtensions.name
import app.revanced.patcher.extensions.addInstructions
import app.revanced.patcher.extensions.instruction
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.PatchResult
import app.revanced.patcher.patch.PatchResultError
import app.revanced.patcher.patch.PatchResultSuccess
import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patches.backdrops.misc.pro.annotations.ProUnlockCompatibility
import app.revanced.patches.backdrops.misc.pro.fingerprints.ProUnlockFingerprint
import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
@Patch
@Name("pro-unlock")
@Description("Unlocks pro-only functions.")
@ProUnlockCompatibility
@Version("0.0.1")
class ProUnlockPatch : BytecodePatch(
listOf(ProUnlockFingerprint)
) {
override fun execute(context: BytecodeContext): PatchResult {
val result = ProUnlockFingerprint.result ?: return PatchResultError("${ProUnlockFingerprint.name} not found")
val moveRegisterInstruction = result.mutableMethod.instruction(result.scanResult.patternScanResult!!.endIndex - 1)
val register = (moveRegisterInstruction as OneRegisterInstruction).registerA
result.mutableMethod.addInstructions(
result.scanResult.patternScanResult!!.endIndex,
"""
const/4 v$register, 0x1
"""
)
return PatchResultSuccess()
}
}

View File

@@ -0,0 +1,7 @@
package app.revanced.patches.citra.misc.premium.annotations
import app.revanced.patcher.annotation.Compatibility
import app.revanced.patcher.annotation.Package
@Compatibility([Package("org.citra.citra_emu")])
internal annotation class PremiumUnlockCompatbility

View File

@@ -0,0 +1,7 @@
package app.revanced.patches.citra.misc.premium.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
object PremiumUnlockFingerprint : MethodFingerprint(
customFingerprint = { it.definingClass == "Lorg/citra/citra_emu/ui/main/MainActivity;" && it.name == "isPremiumActive" }
)

View File

@@ -0,0 +1,37 @@
package app.revanced.patches.citra.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.patch.BytecodePatch
import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.MethodFingerprintExtensions.name
import app.revanced.patcher.extensions.addInstructions
import app.revanced.patcher.patch.PatchResult
import app.revanced.patcher.patch.PatchResultError
import app.revanced.patcher.patch.PatchResultSuccess
import app.revanced.patches.citra.misc.premium.annotations.PremiumUnlockCompatbility
import app.revanced.patches.citra.misc.premium.fingerprints.PremiumUnlockFingerprint
@Patch
@Name("premium-unlock")
@Description("Unlocks premium functions.")
@PremiumUnlockCompatbility
@Version("0.0.1")
class PremiumUnlockPatch : BytecodePatch(
listOf(PremiumUnlockFingerprint)
) {
override fun execute(context: BytecodeContext): PatchResult {
val result = PremiumUnlockFingerprint.result ?: return PatchResultError("${PremiumUnlockFingerprint.name} not found")
result.mutableMethod.addInstructions(
0,
"""
const v0, 0x1
return v0
"""
)
return PatchResultSuccess()
}
}

View File

@@ -0,0 +1,13 @@
package app.revanced.patches.crunchyroll.downloads.annotations
import app.revanced.patcher.annotation.Compatibility
import app.revanced.patcher.annotation.Package
@Compatibility(
[
Package("com.crunchyroll.crunchyroid")
]
)
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
internal annotation class DownloadsCompatibility

View File

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

View File

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

View File

@@ -0,0 +1,13 @@
package app.revanced.patches.ecmwf.misc.subscription.annotations
import app.revanced.patcher.annotation.Compatibility
import app.revanced.patcher.annotation.Package
@Compatibility(
[Package(
"com.garzotto.pflotsh.ecmwf_a", arrayOf("3.5.4")
)]
)
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
internal annotation class SubscriptionUnlockCompatibility

View File

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

View File

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

View File

@@ -0,0 +1,13 @@
package app.revanced.patches.hexeditor.ad.annotations
import app.revanced.patcher.annotation.Compatibility
import app.revanced.patcher.annotation.Package
@Compatibility(
[
Package("com.myprog.hexedit")
]
)
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
internal annotation class HexEditorAdsCompatibility

View File

@@ -0,0 +1,9 @@
package app.revanced.patches.hexeditor.ad.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
object PrimaryAdsFingerprint : MethodFingerprint(
customFingerprint = { methodDef ->
methodDef.definingClass.endsWith("PreferencesHelper;") && methodDef.name == "isAdsDisabled"
}
)

View File

@@ -0,0 +1,39 @@
package app.revanced.patches.hexeditor.ad.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.removeInstruction
import app.revanced.patcher.extensions.replaceInstructions
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.hexeditor.ad.annotations.HexEditorAdsCompatibility
import app.revanced.patches.hexeditor.ad.fingerprints.PrimaryAdsFingerprint
@Patch
@Name("disable-ads")
@Description("Disables ads in HexEditor.")
@HexEditorAdsCompatibility
@Version("0.0.1")
class HexEditorAdsPatch : BytecodePatch(
listOf(
PrimaryAdsFingerprint
)
) {
override fun execute(context: BytecodeContext): PatchResult {
val method = PrimaryAdsFingerprint.result!!.mutableMethod
method.replaceInstructions(
0,
"""
const/4 v0, 0x1
return v0
"""
)
return PatchResultSuccess()
}
}

View File

@@ -0,0 +1,9 @@
package app.revanced.patches.iconpackstudio.misc.pro.annotations
import app.revanced.patcher.annotation.Compatibility
import app.revanced.patcher.annotation.Package
@Compatibility([Package("ginlemon.iconpackstudio")])
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
internal annotation class UnlockProCompatibility

View File

@@ -0,0 +1,8 @@
package app.revanced.patches.iconpackstudio.misc.pro.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
object CheckProFingerprint : MethodFingerprint(
"Z",
customFingerprint = { it.definingClass.endsWith("IPSPurchaseRepository;")}
)

View File

@@ -0,0 +1,38 @@
package app.revanced.patches.iconpackstudio.misc.pro.patch
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.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.iconpackstudio.misc.pro.annotations.UnlockProCompatibility
import app.revanced.patches.iconpackstudio.misc.pro.fingerprints.CheckProFingerprint
@Patch
@Name("unlock-pro")
@Description("Unlocks all pro features.")
@UnlockProCompatibility
@Version("0.0.1")
class UnlockProPatch : BytecodePatch(
listOf(
CheckProFingerprint
)
) {
override fun execute(context: BytecodeContext): PatchResult {
val method = CheckProFingerprint.result!!.mutableMethod
method.addInstructions(
0,
"""
const/4 v0, 0x1
return v0
"""
)
return PatchResultSuccess()
}
}

View File

@@ -0,0 +1,9 @@
package app.revanced.patches.moneymanager.annotations
import app.revanced.patcher.annotation.Compatibility
import app.revanced.patcher.annotation.Package
@Compatibility([Package("com.ithebk.expensemanager")])
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
internal annotation class UnlockProCompatibility

View File

@@ -0,0 +1,19 @@
package app.revanced.patches.moneymanager.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.AccessFlags
import org.jf.dexlib2.Opcode
object UnlockProFingerprint : MethodFingerprint(
"Z",
AccessFlags.STATIC or AccessFlags.SYNTHETIC,
parameters = listOf("L"),
opcodes = listOf(
Opcode.IGET_BOOLEAN,
Opcode.RETURN
),
customFingerprint = { methodDef ->
methodDef.definingClass.endsWith("MainActivity;")
}
)

View File

@@ -0,0 +1,34 @@
package app.revanced.patches.moneymanager.patch
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.addInstructions
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.PatchResult
import app.revanced.patcher.patch.PatchResultSuccess
import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patches.moneymanager.annotations.UnlockProCompatibility
import app.revanced.patches.moneymanager.fingerprints.UnlockProFingerprint
@Patch
@Name("unlock-pro")
@Description("Unlocks pro features.")
@UnlockProCompatibility
@Version("0.0.1")
class UnlockProPatch : BytecodePatch(
listOf(UnlockProFingerprint)
) {
override fun execute(context: BytecodeContext): PatchResult {
UnlockProFingerprint.result!!.mutableMethod.addInstructions(
0,
"""
const/4 v0, 0x1
return v0
"""
)
return PatchResultSuccess()
}
}

View File

@@ -5,7 +5,23 @@ import app.revanced.patcher.annotation.Package
@Compatibility(
[Package(
"com.google.android.apps.youtube.music", arrayOf("5.14.53", "5.16.51", "5.17.51")
"com.google.android.apps.youtube.music",
arrayOf(
"5.14.53",
"5.16.51",
"5.17.51",
"5.21.52",
"5.22.54",
"5.23.50",
"5.25.51",
"5.25.52",
"5.26.52",
"5.27.51",
"5.28.52",
"5.29.52",
"5.31.50",
"5.34.51"
)
)]
)
@Target(AnnotationTarget.CLASS)

View File

@@ -1,23 +1,11 @@
package app.revanced.patches.music.ad.video.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.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod
import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod
import app.revanced.patches.music.ad.video.annotations.MusicVideoAdsCompatibility
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.AccessFlags
import org.jf.dexlib2.Opcode
@Name("show-video-ads-constructor-fingerprint")
@MatchingMethod(
"Laghd;",
"<init>",
)
@FuzzyPatternScanMethod(2) // FIXME: Test this threshold and find the best value.
@MusicVideoAdsCompatibility
@Version("0.0.1")
object ShowMusicVideoAdsConstructorFingerprint : MethodFingerprint(
"V", AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, listOf("L", "L", "L"), listOf(
Opcode.INVOKE_DIRECT,

View File

@@ -1,22 +1,10 @@
package app.revanced.patches.music.ad.video.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.annotation.FuzzyPatternScanMethod
import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import app.revanced.patches.music.ad.video.annotations.MusicVideoAdsCompatibility
import org.jf.dexlib2.AccessFlags
import org.jf.dexlib2.Opcode
@Name("show-video-ads-method-fingerprint")
@MatchingMethod(
"Laghd;", "d"
)
@FuzzyPatternScanMethod(2) // FIXME: Test this threshold and find the best value.
@MusicVideoAdsCompatibility
@Version("0.0.1")
object ShowMusicVideoAdsFingerprint : MethodFingerprint(
"V", AccessFlags.PUBLIC or AccessFlags.FINAL, listOf("Z"), listOf(
Opcode.IPUT_BOOLEAN,

View File

@@ -3,13 +3,13 @@ package app.revanced.patches.music.ad.video.patch
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.impl.BytecodeData
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.addInstructions
import app.revanced.patcher.fingerprint.method.utils.MethodFingerprintUtils.resolve
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint.Companion.resolve
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.patch.impl.BytecodePatch
import app.revanced.patches.music.ad.video.annotations.MusicVideoAdsCompatibility
import app.revanced.patches.music.ad.video.fingerprints.ShowMusicVideoAdsConstructorFingerprint
import app.revanced.patches.music.ad.video.fingerprints.ShowMusicVideoAdsFingerprint
@@ -24,13 +24,13 @@ class MusicVideoAdsPatch : BytecodePatch(
ShowMusicVideoAdsConstructorFingerprint
)
) {
override fun execute(data: BytecodeData): PatchResult {
ShowMusicVideoAdsFingerprint.resolve(data, ShowMusicVideoAdsConstructorFingerprint.result!!.classDef)
override fun execute(context: BytecodeContext): PatchResult {
ShowMusicVideoAdsFingerprint.resolve(context, ShowMusicVideoAdsConstructorFingerprint.result!!.classDef)
val result = ShowMusicVideoAdsFingerprint.result!!
result.mutableMethod.addInstructions(
result.patternScanResult!!.startIndex, """
result.scanResult.patternScanResult!!.startIndex, """
const/4 p1, 0x0
"""
)

View File

@@ -5,7 +5,23 @@ import app.revanced.patcher.annotation.Package
@Compatibility(
[Package(
"com.google.android.apps.youtube.music", arrayOf("5.14.53", "5.16.51", "5.17.51")
"com.google.android.apps.youtube.music",
arrayOf(
"5.14.53",
"5.16.51",
"5.17.51",
"5.21.52",
"5.22.54",
"5.23.50",
"5.25.51",
"5.25.52",
"5.26.52",
"5.27.51",
"5.28.52",
"5.29.52",
"5.31.50",
"5.34.51"
)
)]
)
@Target(AnnotationTarget.CLASS)

View File

@@ -1,23 +1,13 @@
package app.revanced.patches.music.audio.codecs.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.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod
import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod
import app.revanced.patches.music.audio.codecs.annotations.CodecsUnlockCompatibility
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.AccessFlags
import org.jf.dexlib2.Opcode
@Name("all-codecs-reference-fingerprint")
@MatchingMethod(
"Laari;",
"b",
)
@FuzzyPatternScanMethod(2) // FIXME: Test this threshold and find the best value.
@CodecsUnlockCompatibility
@Version("0.0.1")
object AllCodecsReferenceFingerprint : MethodFingerprint(
"J", AccessFlags.PUBLIC or AccessFlags.FINAL, listOf("L"), listOf(
Opcode.INVOKE_STATIC,

View File

@@ -1,25 +1,15 @@
package app.revanced.patches.music.audio.codecs.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.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod
import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod
import app.revanced.patches.music.audio.codecs.annotations.CodecsUnlockCompatibility
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.AccessFlags
import org.jf.dexlib2.Opcode
@Name("codec-lock-fingerprint")
@MatchingMethod(
"Lacfr;",
"a",
)
@FuzzyPatternScanMethod(2) // FIXME: Test this threshold and find the best value.
@CodecsUnlockCompatibility
@Version("0.0.1")
object CodecsLockFingerprint : MethodFingerprint(
"L", AccessFlags.PUBLIC or AccessFlags.STATIC, null, listOf(
"L", AccessFlags.PUBLIC or AccessFlags.STATIC, opcodes = listOf(
Opcode.INVOKE_DIRECT,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT,
@@ -35,5 +25,5 @@ object CodecsLockFingerprint : MethodFingerprint(
Opcode.INVOKE_DIRECT,
Opcode.RETURN_OBJECT
),
listOf("eac3_supported")
strings = listOf("eac3_supported")
)

View File

@@ -3,12 +3,12 @@ package app.revanced.patches.music.audio.codecs.patch
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.impl.BytecodeData
import app.revanced.patcher.data.impl.toMethodWalker
import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patcher.patch.impl.BytecodePatch
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.data.toMethodWalker
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.smali.toInstruction
import app.revanced.patches.music.audio.codecs.annotations.CodecsUnlockCompatibility
import app.revanced.patches.music.audio.codecs.fingerprints.AllCodecsReferenceFingerprint
@@ -25,12 +25,12 @@ class CodecsUnlockPatch : BytecodePatch(
CodecsLockFingerprint, AllCodecsReferenceFingerprint
)
) {
override fun execute(data: BytecodeData): PatchResult {
override fun execute(context: BytecodeContext): PatchResult {
val codecsLockResult = CodecsLockFingerprint.result!!
val implementation = codecsLockResult.mutableMethod.implementation!!
val scanResultStartIndex = codecsLockResult.patternScanResult!!.startIndex
val scanResultStartIndex = codecsLockResult.scanResult.patternScanResult!!.startIndex
val instructionIndex = scanResultStartIndex +
if (implementation.instructions[scanResultStartIndex - 1].opcode == Opcode.CHECK_CAST) {
// for 5.16.xx and lower
@@ -42,8 +42,8 @@ class CodecsUnlockPatch : BytecodePatch(
val allCodecsResult = AllCodecsReferenceFingerprint.result!!
val allCodecsMethod =
data.toMethodWalker(allCodecsResult.method)
.nextMethod(allCodecsResult.patternScanResult!!.startIndex)
context.toMethodWalker(allCodecsResult.method)
.nextMethod(allCodecsResult.scanResult.patternScanResult!!.startIndex)
.getMethod()
implementation.replaceInstruction(

View File

@@ -5,7 +5,23 @@ import app.revanced.patcher.annotation.Package
@Compatibility(
[Package(
"com.google.android.apps.youtube.music", arrayOf("5.14.53", "5.16.51", "5.17.51")
"com.google.android.apps.youtube.music",
arrayOf(
"5.14.53",
"5.16.51",
"5.17.51",
"5.21.52",
"5.22.54",
"5.23.50",
"5.25.51",
"5.25.52",
"5.26.52",
"5.27.51",
"5.28.52",
"5.29.52",
"5.31.50",
"5.34.51"
)
)]
)
@Target(AnnotationTarget.CLASS)

View File

@@ -1,25 +1,10 @@
package app.revanced.patches.music.audio.exclusiveaudio.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.annotation.DirectPatternScanMethod
import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import app.revanced.patches.music.audio.exclusiveaudio.annotations.ExclusiveAudioCompatibility
import org.jf.dexlib2.AccessFlags
import org.jf.dexlib2.Opcode
@Name("audio-only-enabler-fingerprint")
@MatchingMethod(
"Lgmd;",
"d"
)
@DirectPatternScanMethod
@ExclusiveAudioCompatibility
@Version(
"0.0.1"
)
object AudioOnlyEnablerFingerprint: MethodFingerprint(
"Z", AccessFlags.PUBLIC or AccessFlags.FINAL, listOf(), listOf(
Opcode.IGET_OBJECT,

View File

@@ -1,22 +1,13 @@
package app.revanced.patches.music.audio.exclusiveaudio.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.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod
import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod
import app.revanced.patches.music.audio.exclusiveaudio.annotations.ExclusiveAudioCompatibility
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.AccessFlags
import org.jf.dexlib2.Opcode
@Name("exclusive-audio-fingerprints")
@MatchingMethod(
"Lgmd;", "c"
)
@FuzzyPatternScanMethod(2) // FIXME: Test this threshold and find the best value.
@ExclusiveAudioCompatibility
@Version("0.0.1")
object ExclusiveAudioFingerprint : MethodFingerprint(
"V",
AccessFlags.PUBLIC or AccessFlags.FINAL,

View File

@@ -3,17 +3,15 @@ package app.revanced.patches.music.audio.exclusiveaudio.patch
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.impl.BytecodeData
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.addInstruction
import app.revanced.patcher.extensions.replaceInstruction
import app.revanced.patcher.fingerprint.method.utils.MethodFingerprintUtils.resolve
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.patch.impl.BytecodePatch
import app.revanced.patches.music.audio.exclusiveaudio.annotations.ExclusiveAudioCompatibility
import app.revanced.patches.music.audio.exclusiveaudio.fingerprints.AudioOnlyEnablerFingerprint
import app.revanced.patches.music.audio.exclusiveaudio.fingerprints.ExclusiveAudioFingerprint
@Patch
@Name("exclusive-audio-playback")
@@ -25,7 +23,7 @@ class ExclusiveAudioPatch : BytecodePatch(
AudioOnlyEnablerFingerprint
)
) {
override fun execute(data: BytecodeData): PatchResult {
override fun execute(context: BytecodeContext): PatchResult {
val method = AudioOnlyEnablerFingerprint.result!!.mutableMethod
method.replaceInstruction(method.implementation!!.instructions.count() - 1, "const/4 v0, 0x1")
method.addInstruction("return v0")

View File

@@ -5,7 +5,22 @@ import app.revanced.patcher.annotation.Package
@Compatibility(
[Package(
"com.google.android.apps.youtube.music", arrayOf("5.14.53", "5.16.51")
"com.google.android.apps.youtube.music",
arrayOf(
"5.14.53",
"5.16.51",
"5.21.52",
"5.22.54",
"5.23.50",
"5.25.51",
"5.25.52",
"5.26.52",
"5.27.51",
"5.28.52",
"5.29.52",
"5.31.50",
"5.34.51"
)
)]
)
@Target(AnnotationTarget.CLASS)

View File

@@ -1,20 +1,10 @@
package app.revanced.patches.music.layout.compactheader.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.patcher.fingerprint.method.annotation.MatchingMethod
import app.revanced.patches.music.layout.compactheader.annotations.CompactHeaderCompatibility
import org.jf.dexlib2.AccessFlags
import org.jf.dexlib2.Opcode
@Name("compact-header-constructor-fingerprint")
@MatchingMethod(
"Llcz;", "<init>"
)
@CompactHeaderCompatibility
@Version("0.0.1")
object CompactHeaderConstructorFingerprint : MethodFingerprint(
"V", AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, listOf("L", "L", "L", "L", "L"), listOf(
Opcode.INVOKE_DIRECT,

View File

@@ -3,12 +3,12 @@ package app.revanced.patches.music.layout.compactheader.patch
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.impl.BytecodeData
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.addInstructions
import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patcher.patch.impl.BytecodePatch
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.music.layout.compactheader.annotations.CompactHeaderCompatibility
import app.revanced.patches.music.layout.compactheader.fingerprints.CompactHeaderConstructorFingerprint
import org.jf.dexlib2.builder.instruction.BuilderInstruction11x
@@ -23,16 +23,16 @@ class CompactHeaderPatch : BytecodePatch(
CompactHeaderConstructorFingerprint
)
) {
override fun execute(data: BytecodeData): PatchResult {
override fun execute(context: BytecodeContext): PatchResult {
val result = CompactHeaderConstructorFingerprint.result!!
val method = result.mutableMethod
val insertIndex = result.patternScanResult!!.endIndex
val insertIndex = result.scanResult.patternScanResult!!.endIndex
val register = (method.implementation!!.instructions[insertIndex - 1] as BuilderInstruction11x).registerA
method.addInstructions(
insertIndex, """
const/16 v0, 0x8
invoke-virtual {v${register}, v0}, Landroid/view/View;->setVisibility(I)V
const/16 v2, 0x8
invoke-virtual {v${register}, v2}, Landroid/view/View;->setVisibility(I)V
"""
)

View File

@@ -5,7 +5,23 @@ import app.revanced.patcher.annotation.Package
@Compatibility(
[Package(
"com.google.android.apps.youtube.music", arrayOf("5.14.53", "5.16.51", "5.17.51")
"com.google.android.apps.youtube.music",
arrayOf(
"5.14.53",
"5.16.51",
"5.17.51",
"5.21.52",
"5.22.54",
"5.23.50",
"5.25.51",
"5.25.52",
"5.26.52",
"5.27.51",
"5.28.52",
"5.29.52",
"5.31.50",
"5.34.51"
)
)]
)
@Target(AnnotationTarget.CLASS)

View File

@@ -1,20 +1,10 @@
package app.revanced.patches.music.layout.minimizedplayback.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.patcher.fingerprint.method.annotation.MatchingMethod
import app.revanced.patches.music.layout.minimizedplayback.annotations.MinimizedPlaybackCompatibility
import org.jf.dexlib2.AccessFlags
import org.jf.dexlib2.Opcode
@Name("minimized-playback-manager-fingerprint")
@MatchingMethod(
"Llxw;", "c"
)
@MinimizedPlaybackCompatibility
@Version("0.0.1")
object MinimizedPlaybackManagerFingerprint : MethodFingerprint(
"V",
AccessFlags.PUBLIC or AccessFlags.FINAL,

View File

@@ -3,18 +3,14 @@ package app.revanced.patches.music.layout.minimizedplayback.patch
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.impl.BytecodeData
import app.revanced.patcher.data.impl.toMethodWalker
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.patcher.patch.impl.BytecodePatch
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
import app.revanced.patches.music.layout.minimizedplayback.annotations.MinimizedPlaybackCompatibility
import app.revanced.patches.music.layout.minimizedplayback.fingerprints.MinimizedPlaybackManagerFingerprint
import org.jf.dexlib2.iface.instruction.ReferenceInstruction
import org.jf.dexlib2.iface.reference.MethodReference
@Patch
@Name("minimized-playback-music")
@@ -26,7 +22,7 @@ class MinimizedPlaybackPatch : BytecodePatch(
MinimizedPlaybackManagerFingerprint
)
) {
override fun execute(data: BytecodeData): PatchResult {
override fun execute(context: BytecodeContext): PatchResult {
MinimizedPlaybackManagerFingerprint.result!!.mutableMethod.addInstructions(
0, """
return-void

View File

@@ -5,7 +5,23 @@ import app.revanced.patcher.annotation.Package
@Compatibility(
[Package(
"com.google.android.apps.youtube.music", arrayOf("5.14.53", "5.16.51", "5.17.51")
"com.google.android.apps.youtube.music",
arrayOf(
"5.14.53",
"5.16.51",
"5.17.51",
"5.21.52",
"5.22.54",
"5.23.50",
"5.25.51",
"5.25.52",
"5.26.52",
"5.27.51",
"5.28.52",
"5.29.52",
"5.31.50",
"5.34.51"
)
)]
)
@Target(AnnotationTarget.CLASS)

View File

@@ -1,20 +1,10 @@
package app.revanced.patches.music.layout.premium.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.patcher.fingerprint.method.annotation.MatchingMethod
import app.revanced.patches.music.layout.premium.annotations.HideGetPremiumCompatibility
import org.jf.dexlib2.AccessFlags
import org.jf.dexlib2.Opcode
@Name("hide-get-premium-fingerprint")
@MatchingMethod(
"Lktn;", "k"
)
@HideGetPremiumCompatibility
@Version("0.0.1")
object HideGetPremiumFingerprint : MethodFingerprint(
"V", AccessFlags.PUBLIC or AccessFlags.FINAL, listOf(), listOf(
Opcode.IF_NEZ,

View File

@@ -1,20 +1,10 @@
package app.revanced.patches.music.layout.premium.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.patcher.fingerprint.method.annotation.MatchingMethod
import app.revanced.patches.music.layout.premium.annotations.HideGetPremiumCompatibility
import org.jf.dexlib2.AccessFlags
import org.jf.dexlib2.Opcode
@Name("hide-get-premium-parent-fingerprint")
@MatchingMethod(
"Lktn;", "k"
)
@HideGetPremiumCompatibility
@Version("0.0.1")
object HideGetPremiumParentFingerprint : MethodFingerprint(
"V", AccessFlags.PUBLIC or AccessFlags.FINAL, listOf(), listOf(
Opcode.IGET_BOOLEAN,

View File

@@ -3,14 +3,14 @@ package app.revanced.patches.music.layout.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.impl.BytecodeData
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.addInstructions
import app.revanced.patcher.extensions.replaceInstruction
import app.revanced.patcher.fingerprint.method.utils.MethodFingerprintUtils.resolve
import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patcher.patch.impl.BytecodePatch
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint.Companion.resolve
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.music.layout.premium.annotations.HideGetPremiumCompatibility
import app.revanced.patches.music.layout.premium.fingerprints.HideGetPremiumFingerprint
import app.revanced.patches.music.layout.premium.fingerprints.HideGetPremiumParentFingerprint
@@ -25,13 +25,15 @@ class HideGetPremiumPatch : BytecodePatch(
HideGetPremiumParentFingerprint
)
) {
override fun execute(data: BytecodeData): PatchResult {
override fun execute(context: BytecodeContext): PatchResult {
val parentResult = HideGetPremiumParentFingerprint.result!!
HideGetPremiumFingerprint.resolve(data, parentResult.classDef)
HideGetPremiumFingerprint.resolve(context, parentResult.classDef)
val startIndex = parentResult.scanResult.patternScanResult!!.startIndex
val parentMethod = parentResult.mutableMethod
parentMethod.replaceInstruction(
parentResult.patternScanResult!!.startIndex, """
startIndex, """
const/4 v1, 0x0
"""
)
@@ -39,7 +41,7 @@ class HideGetPremiumPatch : BytecodePatch(
val result = HideGetPremiumFingerprint.result!!
val method = result.mutableMethod
method.addInstructions(
result.patternScanResult!!.startIndex, """
startIndex, """
const/16 v0, 0x8
"""
)

View File

@@ -10,7 +10,20 @@ import app.revanced.patcher.annotation.Package
*/
@Compatibility(
[Package(
"com.google.android.apps.youtube.music", arrayOf("5.14.53", "5.16.51")
"com.google.android.apps.youtube.music",
arrayOf(
"5.21.52",
"5.22.54",
"5.23.50",
"5.25.51",
"5.25.52",
"5.26.52",
"5.27.51",
"5.28.52",
"5.29.52",
"5.31.50",
"5.34.51"
)
)]
)
@Target(AnnotationTarget.CLASS)

View File

@@ -1,24 +1,15 @@
package app.revanced.patches.music.layout.tastebuilder.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.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod
import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod
import app.revanced.patches.music.layout.tastebuilder.annotations.RemoveTasteBuilderCompatibility
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.AccessFlags
import org.jf.dexlib2.Opcode
@Name("taste-builder-constructor-fingerprint")
@MatchingMethod(
"Lkyu;", "<init>"
)
@FuzzyPatternScanMethod(2) // FIXME: Test this threshold and find the best value.
@RemoveTasteBuilderCompatibility
@Version("0.0.1")
object TasteBuilderConstructorFingerprint : MethodFingerprint(
"V", AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, listOf("L", "L", "L", "L"), listOf(
"V", AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, listOf("L", "L", "L"), listOf(
Opcode.INVOKE_DIRECT,
Opcode.INVOKE_VIRTUAL,
Opcode.NEW_INSTANCE,
@@ -35,9 +26,9 @@ object TasteBuilderConstructorFingerprint : MethodFingerprint(
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT_OBJECT,
Opcode.CHECK_CAST,
Opcode.IPUT_OBJECT,
Opcode.NEW_INSTANCE,
Opcode.INVOKE_DIRECT,
Opcode.IPUT_OBJECT
Opcode.IPUT_OBJECT,
Opcode.CONST
)
)

View File

@@ -3,12 +3,12 @@ package app.revanced.patches.music.layout.tastebuilder.patch
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.impl.BytecodeData
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.addInstructions
import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patcher.patch.impl.BytecodePatch
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.music.layout.tastebuilder.annotations.RemoveTasteBuilderCompatibility
import app.revanced.patches.music.layout.tastebuilder.fingerprints.TasteBuilderConstructorFingerprint
import org.jf.dexlib2.iface.instruction.formats.Instruction22c
@@ -23,11 +23,11 @@ class RemoveTasteBuilderPatch : BytecodePatch(
TasteBuilderConstructorFingerprint
)
) {
override fun execute(data: BytecodeData): PatchResult {
override fun execute(context: BytecodeContext): PatchResult {
val result = TasteBuilderConstructorFingerprint.result!!
val method = result.mutableMethod
val insertIndex = result.patternScanResult!!.endIndex - 8
val insertIndex = result.scanResult.patternScanResult!!.endIndex - 8
val register = (method.implementation!!.instructions[insertIndex] as Instruction22c).registerA
method.addInstructions(
insertIndex, """

View File

@@ -5,7 +5,23 @@ import app.revanced.patcher.annotation.Package
@Compatibility(
[Package(
"com.google.android.apps.youtube.music", arrayOf("5.14.53", "5.16.51", "5.17.51")
"com.google.android.apps.youtube.music",
arrayOf(
"5.14.53",
"5.16.51",
"5.17.51",
"5.21.52",
"5.22.54",
"5.23.50",
"5.25.51",
"5.25.52",
"5.26.52",
"5.27.51",
"5.28.52",
"5.29.52",
"5.31.50",
"5.34.51"
)
)]
)
@Target(AnnotationTarget.CLASS)

View File

@@ -1,22 +1,13 @@
package app.revanced.patches.music.layout.upgradebutton.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.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod
import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod
import app.revanced.patches.music.layout.upgradebutton.annotations.RemoveUpgradeButtonCompatibility
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.AccessFlags
import org.jf.dexlib2.Opcode
@Name("pivot-bar-constructor-fingerprint")
@MatchingMethod(
"Lhfu;", "<init2>"
)
@FuzzyPatternScanMethod(2) // FIXME: Test this threshold and find the best value.
@RemoveUpgradeButtonCompatibility
@Version("0.0.1")
object PivotBarConstructorFingerprint : MethodFingerprint(
"V",
AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR,

View File

@@ -3,12 +3,12 @@ package app.revanced.patches.music.layout.upgradebutton.patch
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.impl.BytecodeData
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.addInstructions
import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patcher.patch.impl.BytecodePatch
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.smali.toInstructions
import app.revanced.patches.music.layout.upgradebutton.annotations.RemoveUpgradeButtonCompatibility
import app.revanced.patches.music.layout.upgradebutton.fingerprints.PivotBarConstructorFingerprint
@@ -28,12 +28,12 @@ class RemoveUpgradeButtonPatch : BytecodePatch(
PivotBarConstructorFingerprint
)
) {
override fun execute(data: BytecodeData): PatchResult {
override fun execute(context: BytecodeContext): PatchResult {
val result = PivotBarConstructorFingerprint.result!!
val implementation = result.mutableMethod.implementation!!
val pivotBarElementFieldRef =
(implementation.instructions[result.patternScanResult!!.endIndex - 1] as Instruction22c).reference
(implementation.instructions[result.scanResult.patternScanResult!!.endIndex - 1] as Instruction22c).reference
val register = (implementation.instructions.first() as Instruction35c).registerC
// first compile all the needed instructions
@@ -46,16 +46,18 @@ class RemoveUpgradeButtonPatch : BytecodePatch(
""".toInstructions().toMutableList()
val endIndex = result.scanResult.patternScanResult!!.endIndex
// replace the instruction to retain the label at given index
implementation.replaceInstruction(
result.patternScanResult!!.endIndex - 1, instructionList[0] // invoke-interface
endIndex - 1, instructionList[0] // invoke-interface
)
// do not forget to remove this instruction since we added it already
instructionList.removeFirst()
val exitInstruction = instructionList.last() // iput-object
implementation.addInstruction(
result.patternScanResult!!.endIndex, exitInstruction
endIndex, exitInstruction
)
// do not forget to remove this instruction since we added it already
instructionList.removeLast()
@@ -64,12 +66,12 @@ class RemoveUpgradeButtonPatch : BytecodePatch(
instructionList.add(
2, // if-le
BuilderInstruction22t(
Opcode.IF_LE, 1, 2, implementation.newLabelForIndex(result.patternScanResult!!.endIndex)
Opcode.IF_LE, 1, 2, implementation.newLabelForIndex(endIndex)
)
)
implementation.addInstructions(
result.patternScanResult!!.endIndex, instructionList
endIndex, instructionList
)
return PatchResultSuccess()
}

View File

@@ -5,7 +5,23 @@ import app.revanced.patcher.annotation.Package
@Compatibility(
[Package(
"com.google.android.apps.youtube.music", arrayOf("5.14.53", "5.16.51", "5.17.51")
"com.google.android.apps.youtube.music",
arrayOf(
"5.14.53",
"5.16.51",
"5.17.51",
"5.21.52",
"5.22.54",
"5.23.50",
"5.25.51",
"5.25.52",
"5.26.52",
"5.27.51",
"5.28.52",
"5.29.52",
"5.31.50",
"5.34.51"
)
)]
)
@Target(AnnotationTarget.CLASS)

View File

@@ -1,20 +1,8 @@
package app.revanced.patches.music.misc.microg.fingerprints
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import app.revanced.patcher.fingerprint.method.annotation.DirectPatternScanMethod
import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod
import app.revanced.patches.youtube.misc.microg.annotations.MicroGPatchCompatibility
@Name("cast-context-fetch-fingerprint")
@MatchingMethod(
"Lvvz;", "a"
)
@DirectPatternScanMethod
@MicroGPatchCompatibility
@Version("0.0.1")
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
object CastContextFetchFingerprint : MethodFingerprint(
null, null, null, null,
listOf("Error fetching CastContext.")
strings = listOf("Error fetching CastContext.")
)

View File

@@ -1,20 +1,8 @@
package app.revanced.patches.music.misc.microg.fingerprints
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import app.revanced.patcher.fingerprint.method.annotation.DirectPatternScanMethod
import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod
import app.revanced.patches.youtube.misc.microg.annotations.MicroGPatchCompatibility
@Name("cast-module-fingerprint")
@MatchingMethod(
"Llqh;", "c"
)
@DirectPatternScanMethod
@MicroGPatchCompatibility
@Version("0.0.1")
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
object CastDynamiteModuleFingerprint : MethodFingerprint(
null, null, null, null,
listOf("com.google.android.gms.cast.framework.internal.CastDynamiteModuleImpl")
strings = listOf("com.google.android.gms.cast.framework.internal.CastDynamiteModuleImpl")
)

View File

@@ -1,20 +1,8 @@
package app.revanced.patches.music.misc.microg.fingerprints
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import app.revanced.patcher.fingerprint.method.annotation.DirectPatternScanMethod
import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod
import app.revanced.patches.youtube.misc.microg.annotations.MicroGPatchCompatibility
@Name("cast-context-fetch-fingerprint")
@MatchingMethod(
"Lmcf;", "c"
)
@DirectPatternScanMethod
@MicroGPatchCompatibility
@Version("0.0.1")
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
object CastDynamiteModuleV2Fingerprint : MethodFingerprint(
null, null, null, null,
listOf("Failed to load module via V2: ")
strings = listOf("Failed to load module via V2: ")
)

View File

@@ -1,21 +1,18 @@
package app.revanced.patches.music.misc.microg.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.patcher.fingerprint.method.annotation.DirectPatternScanMethod
import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod
import app.revanced.patches.music.misc.microg.annotations.MusicMicroGPatchCompatibility
import org.jf.dexlib2.AccessFlags
@Name("google-play-utility-fingerprint")
@MatchingMethod(
"Lnuv;", "b"
)
@DirectPatternScanMethod
@MusicMicroGPatchCompatibility
@Version("0.0.1")
object GooglePlayUtilityFingerprint : MethodFingerprint(
"I", AccessFlags.PUBLIC or AccessFlags.STATIC, listOf("L", "I"), null, listOf("This should never happen.", "MetadataValueReader", "GooglePlayServicesUtil", "com.android.vending", "android.hardware.type.embedded")
"I",
AccessFlags.PUBLIC or AccessFlags.STATIC,
listOf("L", "I"),
strings = listOf(
"This should never happen.",
"MetadataValueReader",
"GooglePlayServicesUtil",
"com.android.vending",
"android.hardware.type.embedded"
)
)

View File

@@ -1,19 +1,8 @@
package app.revanced.patches.music.misc.microg.fingerprints
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import app.revanced.patcher.fingerprint.method.annotation.DirectPatternScanMethod
import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod
import app.revanced.patches.music.misc.microg.annotations.MusicMicroGPatchCompatibility
@Name("google-play-prime-fingerprint")
@MatchingMethod(
"Lrwi;", "a"
)
@DirectPatternScanMethod
@MusicMicroGPatchCompatibility
@Version("0.0.1")
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
object PrimeFingerprint : MethodFingerprint(
null, null, null, null, listOf("com.google.android.GoogleCamera", "com.android.vending")
strings = listOf("com.google.android.GoogleCamera", "com.android.vending")
)

View File

@@ -1,21 +1,15 @@
package app.revanced.patches.music.misc.microg.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.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod
import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod
import app.revanced.patches.music.misc.microg.annotations.MusicMicroGPatchCompatibility
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.AccessFlags
@Name("google-play-service-checker-fingerprint")
@MatchingMethod(
"Lnuv;", "d"
)
@FuzzyPatternScanMethod(2) // FIXME: Test this threshold and find the best value.
@MusicMicroGPatchCompatibility
@Version("0.0.1")
object ServiceCheckFingerprint : MethodFingerprint(
"V", AccessFlags.PUBLIC or AccessFlags.STATIC, listOf("L", "I"), null, listOf("Google Play Services not available")
"V",
AccessFlags.PUBLIC or AccessFlags.STATIC,
listOf("L", "I"),
strings = listOf("Google Play Services not available")
)

View File

@@ -1,37 +1,27 @@
package app.revanced.patches.music.misc.microg.patch.bytecode
import app.revanced.extensions.equalsAny
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.impl.BytecodeData
import app.revanced.patcher.extensions.addInstructions
import app.revanced.patcher.extensions.replaceInstruction
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.PatchResultSuccess
import app.revanced.patcher.patch.annotations.DependsOn
import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patcher.patch.impl.BytecodePatch
import app.revanced.patcher.patch.PatchResult
import app.revanced.patcher.patch.PatchResultSuccess
import app.revanced.patcher.util.proxy.mutableTypes.MutableClass
import app.revanced.patches.music.misc.microg.annotations.MusicMicroGPatchCompatibility
import app.revanced.patches.music.misc.microg.patch.resource.MusicMicroGResourcePatch
import app.revanced.patches.youtube.misc.microg.patch.resource.enum.StringReplaceMode
import app.revanced.patches.music.misc.microg.shared.Constants.BASE_MICROG_PACKAGE_NAME
import app.revanced.patches.music.misc.microg.shared.Constants.REVANCED_MUSIC_PACKAGE_NAME
import app.revanced.patches.music.misc.microg.fingerprints.*
import org.jf.dexlib2.Opcode
import org.jf.dexlib2.builder.MutableMethodImplementation
import org.jf.dexlib2.builder.instruction.BuilderInstruction21c
import org.jf.dexlib2.iface.instruction.formats.Instruction21c
import org.jf.dexlib2.iface.reference.StringReference
import org.jf.dexlib2.immutable.reference.ImmutableStringReference
import app.revanced.patches.music.misc.microg.patch.resource.MusicMicroGResourcePatch
import app.revanced.patches.music.misc.microg.shared.Constants.MUSIC_PACKAGE_NAME
import app.revanced.patches.music.misc.microg.shared.Constants.REVANCED_MUSIC_PACKAGE_NAME
import app.revanced.patches.youtube.misc.microg.shared.Constants
import app.revanced.util.microg.MicroGBytecodeHelper
@Patch
@DependsOn([MusicMicroGResourcePatch::class])
@Name("music-microg-support")
@Description("Allows YouTube Music ReVanced to run without root and under a different package name.")
@MusicMicroGPatchCompatibility
@Version("0.0.1")
@Version("0.0.2")
class MusicMicroGBytecodePatch : BytecodePatch(
listOf(
ServiceCheckFingerprint,
@@ -42,130 +32,34 @@ class MusicMicroGBytecodePatch : BytecodePatch(
PrimeFingerprint,
)
) {
override fun execute(data: BytecodeData): PatchResult {
disablePlayServiceChecks()
data.classes.forEach { classDef ->
var proxiedClass: MutableClass? = null
classDef.methods.forEach methodLoop@{ method ->
val implementation = method.implementation ?: return@methodLoop
var proxiedImplementation: MutableMethodImplementation? = null
implementation.instructions.forEachIndexed { i, instruction ->
if (instruction.opcode != Opcode.CONST_STRING) return@forEachIndexed
val stringValue = ((instruction as Instruction21c).reference as StringReference).string
val replaceMode = if (stringValue.equalsAny(
"com.google.android.gms",
"com.google.android.gms.chimera",
"com.google.android.c2dm.intent.REGISTER",
"com.google.android.c2dm.permission.SEND",
"com.google.iid.TOKEN_REQUEST",
"com.google",
"com.google.android.gms.chimera.GmsIntentOperationService",
"com.google.android.gms.phenotype.internal.IPhenotypeCallbacks",
"com.google.android.gms.phenotype.internal.IPhenotypeService",
"com.google.android.gms.phenotype.service.START",
"com.google.android.gms.phenotype.PACKAGE_NAME",
"com.google.android.gms.phenotype.UPDATE",
"com.google.android.gms.phenotype",
"com.google.android.gms.auth.accounts",
"com.google.android.c2dm.intent.REGISTRATION",
"com.google.android.gsf.action.GET_GLS",
"com.google.android.gsf.login",
"content://com.google.settings/partner",
"content://com.google.android.gms.phenotype/",
"content://com.google.android.gsf.gservices",
"content://com.google.android.gsf.gservices/prefix",
"com.google.android.c2dm.intent.RECEIVE"
)
) {
StringReplaceMode.REPLACE_WITH_MICROG
} else if (stringValue.equalsAny(
"com.google.android.apps.youtube.music.SuggestionsProvider", "com.google.android.apps.youtube.music.fileprovider"
)
) {
StringReplaceMode.REPLACE_WITH_REVANCED
} else {
StringReplaceMode.DO_NOT_REPLACE
}
if (replaceMode != StringReplaceMode.DO_NOT_REPLACE) {
if (proxiedClass == null) {
proxiedClass = data.proxy(classDef).resolve()
}
if (proxiedImplementation == null) {
proxiedImplementation = proxiedClass!!.methods.first {
it.name == method.name && it.parameterTypes.containsAll(method.parameterTypes)
}.implementation!!
}
val newString = if (replaceMode == StringReplaceMode.REPLACE_WITH_REVANCED) stringValue.replace(
"com.google.android.apps.youtube.music", REVANCED_MUSIC_PACKAGE_NAME
)
else stringValue.replace("com.google", BASE_MICROG_PACKAGE_NAME)
proxiedImplementation!!.replaceInstruction(
i, BuilderInstruction21c(
Opcode.CONST_STRING, instruction.registerA, ImmutableStringReference(newString)
)
)
}
}
}
}
return PatchResultSuccess()
}
private fun disablePlayServiceChecks() {
listOf(
ServiceCheckFingerprint,
GooglePlayUtilityFingerprint,
CastDynamiteModuleFingerprint,
CastDynamiteModuleV2Fingerprint,
CastContextFetchFingerprint,
).forEach { fingerprint ->
val result = fingerprint.result!!
val stringInstructions = when (result.method.returnType.first()) {
'L' -> """
const/4 v0, 0x0
return-object v0
"""
'V' -> "return-void"
'I' -> """
const/4 v0, 0x0
return v0
"""
else -> throw Exception("This case should never happen.")
}
result.mutableMethod.addInstructions(
0, stringInstructions
// NOTE: the previous patch also replaced the following strings, but it seems like they are not needed:
// - "com.google.android.gms.chimera.GmsIntentOperationService",
// - "com.google.android.gms.phenotype.internal.IPhenotypeCallbacks",
// - "com.google.android.gms.phenotype.internal.IPhenotypeService",
// - "com.google.android.gms.phenotype.PACKAGE_NAME",
// - "com.google.android.gms.phenotype.UPDATE",
// - "com.google.android.gms.phenotype",
override fun execute(context: BytecodeContext) =
// apply common microG patch
MicroGBytecodeHelper.patchBytecode(
context,
arrayOf(
MicroGBytecodeHelper.packageNameTransform(
Constants.PACKAGE_NAME,
Constants.REVANCED_PACKAGE_NAME
)
),
MicroGBytecodeHelper.PrimeMethodTransformationData(
PrimeFingerprint,
MUSIC_PACKAGE_NAME,
REVANCED_MUSIC_PACKAGE_NAME
),
listOf(
ServiceCheckFingerprint,
GooglePlayUtilityFingerprint,
CastDynamiteModuleFingerprint,
CastDynamiteModuleV2Fingerprint,
CastContextFetchFingerprint
)
}
val primeMethod = PrimeFingerprint.result!!.mutableMethod
val implementation = primeMethod.implementation!!
var register = 2
val index = implementation.instructions.indexOfFirst {
if (it.opcode != Opcode.CONST_STRING) return@indexOfFirst false
val instructionString = ((it as Instruction21c).reference as StringReference).string
if (instructionString != "com.google.android.apps.youtube.music") return@indexOfFirst false
register = it.registerA
return@indexOfFirst true
}
primeMethod.replaceInstruction(
index, "const-string v$register, \"$REVANCED_MUSIC_PACKAGE_NAME\""
)
}
).let { PatchResultSuccess() }
}

View File

@@ -1,44 +1,41 @@
package app.revanced.patches.music.misc.microg.patch.resource
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.impl.ResourceData
import app.revanced.patcher.patch.PatchResult
import app.revanced.patcher.patch.PatchResultSuccess
import app.revanced.patcher.patch.impl.ResourcePatch
import app.revanced.patches.music.misc.microg.annotations.MusicMicroGPatchCompatibility
import app.revanced.patches.music.misc.microg.shared.Constants.BASE_MICROG_PACKAGE_NAME
import app.revanced.patches.music.misc.microg.shared.Constants.REVANCED_MUSIC_APP_NAME
import app.revanced.patches.music.misc.microg.shared.Constants.REVANCED_MUSIC_PACKAGE_NAME
@Name("music-microg-resource-patch")
@Description("Resource patch to allow YouTube Music ReVanced to run without root and under a different package name.")
@MusicMicroGPatchCompatibility
@Version("0.0.1")
class MusicMicroGResourcePatch : ResourcePatch() {
override fun execute(data: ResourceData): PatchResult {
val manifest = data["AndroidManifest.xml"].readText()
data["AndroidManifest.xml"].writeText(
manifest.replace(
"package=\"com.google.android.apps.youtube.music", "package=\"$REVANCED_MUSIC_PACKAGE_NAME"
).replace(
"android:label=\"@string/app_name", "android:label=\"$REVANCED_MUSIC_APP_NAME"
).replace(
"android:label=\"@string/app_launcher_name", "android:label=\"$REVANCED_MUSIC_APP_NAME"
).replace(
"android:authorities=\"com.google.android.apps.youtube.music", "android:authorities=\"$REVANCED_MUSIC_PACKAGE_NAME"
).replace(
"com.google.android.apps.youtube.music.permission.C2D_MESSAGE", "$REVANCED_MUSIC_PACKAGE_NAME.permission.C2D_MESSAGE"
).replace(
"com.google.android.c2dm", "$BASE_MICROG_PACKAGE_NAME.android.c2dm"
).replace(
"</queries>", "<package android:name=\"$BASE_MICROG_PACKAGE_NAME.android.gms\"/></queries>"
)
)
return PatchResultSuccess()
}
package app.revanced.patches.music.misc.microg.patch.resource
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.patches.music.misc.microg.annotations.MusicMicroGPatchCompatibility
import app.revanced.patches.music.misc.microg.shared.Constants.MUSIC_PACKAGE_NAME
import app.revanced.patches.music.misc.microg.shared.Constants.REVANCED_MUSIC_APP_NAME
import app.revanced.patches.music.misc.microg.shared.Constants.REVANCED_MUSIC_PACKAGE_NAME
import app.revanced.patches.music.misc.microg.shared.Constants.SPOOFED_PACKAGE_NAME
import app.revanced.patches.music.misc.microg.shared.Constants.SPOOFED_PACKAGE_SIGNATURE
import app.revanced.util.microg.MicroGManifestHelper
import app.revanced.util.microg.MicroGResourceHelper
@Name("music-microg-resource-patch")
@Description("Resource patch to allow YouTube Music ReVanced to run without root and under a different package name.")
@MusicMicroGPatchCompatibility
@Version("0.0.2")
class MusicMicroGResourcePatch : ResourcePatch {
override fun execute(context: ResourceContext): PatchResult {
// update manifest
MicroGResourceHelper.patchManifest(
context,
MUSIC_PACKAGE_NAME,
REVANCED_MUSIC_PACKAGE_NAME,
REVANCED_MUSIC_APP_NAME
)
// add metadata to the manifest
MicroGManifestHelper.addSpoofingMetadata(
context,
SPOOFED_PACKAGE_NAME,
SPOOFED_PACKAGE_SIGNATURE
)
return PatchResultSuccess()
}
}

View File

@@ -1,7 +1,9 @@
package app.revanced.patches.music.misc.microg.shared
object Constants {
internal const val BASE_MICROG_PACKAGE_NAME = "com.mgoogle"
internal const val REVANCED_MUSIC_APP_NAME = "YouTube Music ReVanced"
internal const val REVANCED_MUSIC_APP_NAME = "YT Music ReVanced"
internal const val REVANCED_MUSIC_PACKAGE_NAME = "app.revanced.android.apps.youtube.music"
}
internal const val MUSIC_PACKAGE_NAME = "com.google.android.apps.youtube.music"
internal const val SPOOFED_PACKAGE_NAME = MUSIC_PACKAGE_NAME
internal const val SPOOFED_PACKAGE_SIGNATURE = "afb0fed5eeaebdd86f56a97742f4b6b33ef59875"
}

View File

@@ -5,7 +5,23 @@ import app.revanced.patcher.annotation.Package
@Compatibility(
[Package(
"com.google.android.apps.youtube.music", arrayOf("5.14.53", "5.16.51", "5.17.51")
"com.google.android.apps.youtube.music",
arrayOf(
"5.14.53",
"5.16.51",
"5.17.51",
"5.21.52",
"5.22.54",
"5.23.50",
"5.25.51",
"5.25.52",
"5.26.52",
"5.27.51",
"5.28.52",
"5.29.52",
"5.31.50",
"5.34.51"
)
)]
)
@Target(AnnotationTarget.CLASS)

View File

@@ -1,22 +1,13 @@
package app.revanced.patches.music.premium.backgroundplay.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.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod
import app.revanced.patcher.fingerprint.method.annotation.MatchingMethod
import app.revanced.patches.music.premium.backgroundplay.annotations.BackgroundPlayCompatibility
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.AccessFlags
import org.jf.dexlib2.Opcode
@Name("background-playback-disabler-fingerprint")
@MatchingMethod(
"Lafgf;", "e"
)
@FuzzyPatternScanMethod(2) // FIXME: Test this threshold and find the best value.
@BackgroundPlayCompatibility
@Version("0.0.1")
object BackgroundPlaybackDisableFingerprint : MethodFingerprint(
"Z", AccessFlags.PUBLIC or AccessFlags.STATIC, listOf("L"), listOf(
Opcode.CONST_4,

View File

@@ -3,12 +3,12 @@ package app.revanced.patches.music.premium.backgroundplay.patch
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.impl.BytecodeData
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.addInstructions
import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patcher.patch.impl.BytecodePatch
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.music.premium.backgroundplay.annotations.BackgroundPlayCompatibility
import app.revanced.patches.music.premium.backgroundplay.fingerprints.BackgroundPlaybackDisableFingerprint
@@ -22,7 +22,7 @@ class BackgroundPlayPatch : BytecodePatch(
BackgroundPlaybackDisableFingerprint
)
) {
override fun execute(data: BytecodeData): PatchResult {
override fun execute(context: BytecodeContext): PatchResult {
BackgroundPlaybackDisableFingerprint.result!!.mutableMethod.addInstructions(
0,
"""

View File

@@ -0,0 +1,9 @@
package app.revanced.patches.myexpenses.misc.pro.annotations
import app.revanced.patcher.annotation.Compatibility
import app.revanced.patcher.annotation.Package
@Compatibility([Package("org.totschnig.myexpenses")])
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
internal annotation class UnlockProCompatibility

View File

@@ -0,0 +1,8 @@
package app.revanced.patches.myexpenses.misc.pro.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
object IsEnabledFingerprint : MethodFingerprint(
"Z",
strings = listOf("feature", "feature.licenceStatus")
)

View File

@@ -0,0 +1,38 @@
package app.revanced.patches.myexpenses.misc.pro.patch
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.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.myexpenses.misc.pro.annotations.UnlockProCompatibility
import app.revanced.patches.myexpenses.misc.pro.fingerprints.IsEnabledFingerprint
@Patch
@Name("unlock-pro")
@Description("Unlocks all professional features.")
@UnlockProCompatibility
@Version("0.0.1")
class UnlockProPatch : BytecodePatch(
listOf(
IsEnabledFingerprint
)
) {
override fun execute(context: BytecodeContext): PatchResult {
val method = IsEnabledFingerprint.result!!.mutableMethod
method.addInstructions(
0,
"""
const/4 v0, 0x1
return v0
"""
)
return PatchResultSuccess()
}
}

View File

@@ -0,0 +1,9 @@
package app.revanced.patches.nyx.misc.pro.annotations
import app.revanced.patcher.annotation.Compatibility
import app.revanced.patcher.annotation.Package
@Compatibility([Package("com.awedea.nyx")])
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
internal annotation class UnlockProCompatibility

View File

@@ -0,0 +1,9 @@
package app.revanced.patches.nyx.misc.pro.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
object CheckProFingerprint : MethodFingerprint(
customFingerprint = { methodDef ->
methodDef.definingClass.endsWith("BillingManager;") && methodDef.name == "isProVersion"
}
)

View File

@@ -0,0 +1,38 @@
package app.revanced.patches.nyx.misc.pro.patch
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.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.nyx.misc.pro.annotations.UnlockProCompatibility
import app.revanced.patches.nyx.misc.pro.fingerprints.CheckProFingerprint
@Patch
@Name("unlock-pro")
@Description("Unlocks all pro features.")
@UnlockProCompatibility
@Version("0.0.1")
class UnlockProPatch : BytecodePatch(
listOf(
CheckProFingerprint
)
) {
override fun execute(context: BytecodeContext): PatchResult {
val method = CheckProFingerprint.result!!.mutableMethod
method.addInstructions(
0,
"""
const/4 v0, 0x1
return v0
"""
)
return PatchResultSuccess()
}
}

View File

@@ -3,11 +3,7 @@ package app.revanced.patches.reddit.ad.general.annotations
import app.revanced.patcher.annotation.Compatibility
import app.revanced.patcher.annotation.Package
@Compatibility(
[Package(
"com.reddit.frontpage", arrayOf()
)]
)
@Compatibility([Package("com.reddit.frontpage")])
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
internal annotation class GeneralAdsCompatibility

View File

@@ -3,12 +3,11 @@ package app.revanced.patches.reddit.ad.general.patch
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.impl.BytecodeData
import app.revanced.patcher.extensions.replaceInstruction
import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patcher.patch.impl.BytecodePatch
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.Patch
import app.revanced.patches.reddit.ad.general.annotations.GeneralAdsCompatibility
import org.jf.dexlib2.Opcode
import org.jf.dexlib2.builder.instruction.BuilderInstruction21c
@@ -22,8 +21,8 @@ import org.jf.dexlib2.immutable.reference.ImmutableStringReference
@GeneralAdsCompatibility
@Version("0.0.1")
class GeneralAdsPatch : BytecodePatch() {
override fun execute(data: BytecodeData): PatchResult {
data.classes.forEach { classDef ->
override fun execute(context: BytecodeContext): PatchResult {
context.classes.forEach { classDef ->
classDef.methods.forEach methodLoop@{ method ->
val implementation = method.implementation ?: return@methodLoop
@@ -31,7 +30,7 @@ class GeneralAdsPatch : BytecodePatch() {
if (instruction.opcode != Opcode.CONST_STRING) return@forEachIndexed
if (((instruction as ReferenceInstruction).reference as StringReference).string != "AdPost") return@forEachIndexed
val proxiedClass = data.proxy(classDef).resolve()
val proxiedClass = context.proxy(classDef).mutableClass
val proxiedImplementation = proxiedClass.methods.first {
it.name == method.name && it.parameterTypes.containsAll(method.parameterTypes)

View File

@@ -0,0 +1,9 @@
package app.revanced.patches.reddit.layout.premiumicon.annotations
import app.revanced.patcher.annotation.Compatibility
import app.revanced.patcher.annotation.Package
@Compatibility([Package("com.reddit.frontpage")])
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
internal annotation class PremiumIconCompatibility

View File

@@ -0,0 +1,10 @@
package app.revanced.patches.reddit.layout.premiumicon.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
object PremiumIconFingerprint : MethodFingerprint(
"Z",
customFingerprint = { methodDef ->
methodDef.definingClass.endsWith("MyAccount;") && methodDef.name == "isPremiumSubscriber"
}
)

View File

@@ -0,0 +1,36 @@
package app.revanced.patches.reddit.layout.premiumicon.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.reddit.layout.premiumicon.annotations.PremiumIconCompatibility
import app.revanced.patches.reddit.layout.premiumicon.fingerprints.PremiumIconFingerprint
@Patch
@Name("premium-icon-reddit")
@Description("Unlocks premium Reddit app icons.")
@PremiumIconCompatibility
@Version("0.0.1")
class PremiumIconPatch : BytecodePatch(
listOf(
PremiumIconFingerprint
)
) {
override fun execute(context: BytecodeContext): PatchResult {
val method = PremiumIconFingerprint.result!!.mutableMethod
method.addInstructions(
0,
"""
const/4 v0, 0x1
return v0
"""
)
return PatchResultSuccess()
}
}

View File

@@ -0,0 +1,10 @@
package app.revanced.patches.shared.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
object WatchWhileActivityFingerprint : MethodFingerprint(
customFingerprint = { methodDef ->
methodDef.definingClass.endsWith("WatchWhileActivity;") && methodDef.name == "<init>"
}
)

Some files were not shown because too many files have changed in this diff Show More