Compare commits

...

24 Commits

Author SHA1 Message Date
semantic-release-bot
274b6959f7 chore(release): 2.169.1-dev.4 [skip ci]
## [2.169.1-dev.4](https://github.com/revanced/revanced-patches/compare/v2.169.1-dev.3...v2.169.1-dev.4) (2023-04-23)

### Bug Fixes

* **twitch/block-embedded-ads:** correct spelling mistake ([#1962](https://github.com/revanced/revanced-patches/issues/1962)) ([936d9f6](936d9f61a3))
2023-04-23 03:05:18 +00:00
parknich081
936d9f61a3 fix(twitch/block-embedded-ads): correct spelling mistake (#1962) 2023-04-23 05:03:33 +02:00
semantic-release-bot
6c62db8019 chore(release): 2.169.1-dev.3 [skip ci]
## [2.169.1-dev.3](https://github.com/revanced/revanced-patches/compare/v2.169.1-dev.2...v2.169.1-dev.3) (2023-04-23)

### Bug Fixes

* **youtube/hide-video-action-buttons:** fix hide action buttons not working for some users ([#1959](https://github.com/revanced/revanced-patches/issues/1959)) ([064557c](064557c0c8))
2023-04-23 02:17:52 +00:00
LisoUseInAIKyrios
064557c0c8 fix(youtube/hide-video-action-buttons): fix hide action buttons not working for some users (#1959)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2023-04-23 06:16:10 +04:00
semantic-release-bot
85a32e833e chore(release): 2.169.1-dev.2 [skip ci]
## [2.169.1-dev.2](https://github.com/revanced/revanced-patches/compare/v2.169.1-dev.1...v2.169.1-dev.2) (2023-04-21)

### Bug Fixes

* **"enable-android-debugging:** don't include by default ([5614651](5614651d34))
2023-04-21 16:50:56 +00:00
oSumAtrIX
5614651d34 fix("enable-android-debugging): don't include by default 2023-04-21 18:49:10 +02:00
semantic-release-bot
dacadc1aa7 chore(release): 2.169.1-dev.1 [skip ci]
## [2.169.1-dev.1](https://github.com/revanced/revanced-patches/compare/v2.169.0...v2.169.1-dev.1) (2023-04-21)

### Bug Fixes

* **youtube/sponsorblock:** correct spelling mistake ([#1941](https://github.com/revanced/revanced-patches/issues/1941)) ([2138915](21389156c0))
* **youtube/sponsorblock:** use lowercase letters for URL string ([#1942](https://github.com/revanced/revanced-patches/issues/1942)) ([3b8c13c](3b8c13cc69))
2023-04-21 16:29:39 +00:00
cane
3b8c13cc69 fix(youtube/sponsorblock): use lowercase letters for URL string (#1942) 2023-04-21 18:27:22 +02:00
cane
21389156c0 fix(youtube/sponsorblock): correct spelling mistake (#1941) 2023-04-21 18:26:23 +02:00
semantic-release-bot
ac5acc2602 chore(release): 2.169.0 [skip ci]
# [2.169.0](https://github.com/revanced/revanced-patches/compare/v2.168.0...v2.169.0) (2023-04-21)

### Bug Fixes

* add missing annotation to patches ([#1882](https://github.com/revanced/revanced-patches/issues/1882)) ([a6654c0](a6654c08f7))
* **youtube/hide-video-action-buttons:** change 'Hide create, clip and thanks buttons' to default off ([#1923](https://github.com/revanced/revanced-patches/issues/1923)) ([ce6a6cd](ce6a6cd3d0))
* **youtube/hide-video-action-buttons:** fix 'hide share button' ([#1924](https://github.com/revanced/revanced-patches/issues/1924)) ([328aad9](328aad9d6a))
* **youtube/microg-support:** remove incorrect patch dependency ([8470e1b](8470e1b9c6))
* **youtube/microg-support:** rename patch correctly ([d3b8b37](d3b8b37b02))
* **youtube/return-youtube-dislike:** render dislikes when scrolling into the screen ([#1873](https://github.com/revanced/revanced-patches/issues/1873)) ([2c1329d](2c1329dc54))
* **youtube/sponsorblock:** do not depend on `remember-playback-speed` patch ([6f66cca](6f66ccaaac))
* **youtube/sponsorblock:** fix autorepeat button layout ([#1868](https://github.com/revanced/revanced-patches/issues/1868)) ([24c42c1](24c42c1881))
* **youtube/spoof-signature-verification:** depend on `client-spoof` patch ([11b4ca8](11b4ca8740))
* **youtubevanced/hide-ads:** hide more types of ads ([#1781](https://github.com/revanced/revanced-patches/issues/1781)) ([e47f4a4](e47f4a47b7))
* **youtubevanced/hide-ads:** remove broken ad filter ([#1881](https://github.com/revanced/revanced-patches/issues/1881)) ([4a04e81](4a04e81688))

### Features

* `change-package-name` patch ([#1864](https://github.com/revanced/revanced-patches/issues/1864)) ([020991e](020991ed2e))
* `enable-android-debugging` patch ([#1876](https://github.com/revanced/revanced-patches/issues/1876)) ([ee15123](ee15123466))
* **facebook:** `hide-inbox-ads` patch ([#1893](https://github.com/revanced/revanced-patches/issues/1893)) ([40571f2](40571f2676))
* **id-austria:** bump compatibility to `2.6.0` ([#1827](https://github.com/revanced/revanced-patches/issues/1827)) ([82294a7](82294a7ab2))
* **inshorts:** `hide-ads` patch ([#1828](https://github.com/revanced/revanced-patches/issues/1828)) ([32d73cb](32d73cb446))
* **memegenerator:** `unlock-pro` patch ([#1902](https://github.com/revanced/revanced-patches/issues/1902)) ([5180bc6](5180bc660d))
* **photomath/unlock-plus:** bump compatibility to `8.21.1` ([#1926](https://github.com/revanced/revanced-patches/issues/1926)) ([879a01b](879a01b4c5))
* **photomath:** bump compatibility up to `8.21.0` ([#1886](https://github.com/revanced/revanced-patches/issues/1886)) ([e24403e](e24403e02d))
* **reddit:** bump compatibility to `2023.12.0` ([#1825](https://github.com/revanced/revanced-patches/issues/1825)) ([c7b21d7](c7b21d75b7))
* use better patch description ([7437c77](7437c7731a))
* **youtube-music:** `bypass-certificate-checks` patch ([#1810](https://github.com/revanced/revanced-patches/issues/1810)) ([fd46009](fd46009ec2))
* **youtube/settings:** disable preferences and add dialog messages to preferences ([#1801](https://github.com/revanced/revanced-patches/issues/1801)) ([d45158c](d45158ca92))
* **youtube/sponsorblock:** skip to video highlight ([#1874](https://github.com/revanced/revanced-patches/issues/1874)) ([f71fa48](f71fa48966))
* **youtube:** bump compatibility to `18.08.37` ([aade87e](aade87e981))
* **youtube:** change default video speed and quality inside the settings menu ([#1880](https://github.com/revanced/revanced-patches/issues/1880)) ([6c02bef](6c02bef427))
* **youtube:** constrain compatibility to `18.08.37` ([435a4a9](435a4a9f39))
* **youtube:** sponsorblock improvements ([#1557](https://github.com/revanced/revanced-patches/issues/1557)) ([f0cbcc6](f0cbcc6886))
* **youtube:** support version `18.08.37` ([f1c9793](f1c9793a3e))
2023-04-21 13:50:28 +00:00
oSumAtrIX
e87ee6c04f chore: merge branch dev to main (#1938) 2023-04-21 15:47:33 +02:00
semantic-release-bot
11b642d36a chore(release): 2.169.0-dev.1 [skip ci]
# [2.169.0-dev.1](https://github.com/revanced/revanced-patches/compare/v2.168.0...v2.169.0-dev.1) (2023-04-21)

### Bug Fixes

* add missing annotation to patches ([#1882](https://github.com/revanced/revanced-patches/issues/1882)) ([a6654c0](a6654c08f7))
* **youtube/hide-video-action-buttons:** change 'Hide create, clip and thanks buttons' to default off ([#1923](https://github.com/revanced/revanced-patches/issues/1923)) ([ce6a6cd](ce6a6cd3d0))
* **youtube/hide-video-action-buttons:** fix 'hide share button' ([#1924](https://github.com/revanced/revanced-patches/issues/1924)) ([328aad9](328aad9d6a))
* **youtube/microg-support:** remove incorrect patch dependency ([8470e1b](8470e1b9c6))
* **youtube/microg-support:** rename patch correctly ([d3b8b37](d3b8b37b02))
* **youtube/return-youtube-dislike:** render dislikes when scrolling into the screen ([#1873](https://github.com/revanced/revanced-patches/issues/1873)) ([2c1329d](2c1329dc54))
* **youtube/sponsorblock:** do not depend on `remember-playback-speed` patch ([6f66cca](6f66ccaaac))
* **youtube/sponsorblock:** fix autorepeat button layout ([#1868](https://github.com/revanced/revanced-patches/issues/1868)) ([24c42c1](24c42c1881))
* **youtube/spoof-signature-verification:** depend on `client-spoof` patch ([11b4ca8](11b4ca8740))
* **youtubevanced/hide-ads:** hide more types of ads ([#1781](https://github.com/revanced/revanced-patches/issues/1781)) ([e47f4a4](e47f4a47b7))
* **youtubevanced/hide-ads:** remove broken ad filter ([#1881](https://github.com/revanced/revanced-patches/issues/1881)) ([4a04e81](4a04e81688))

### Features

* `change-package-name` patch ([#1864](https://github.com/revanced/revanced-patches/issues/1864)) ([020991e](020991ed2e))
* `enable-android-debugging` patch ([#1876](https://github.com/revanced/revanced-patches/issues/1876)) ([ee15123](ee15123466))
* **facebook:** `hide-inbox-ads` patch ([#1893](https://github.com/revanced/revanced-patches/issues/1893)) ([40571f2](40571f2676))
* **id-austria:** bump compatibility to `2.6.0` ([#1827](https://github.com/revanced/revanced-patches/issues/1827)) ([82294a7](82294a7ab2))
* **inshorts:** `hide-ads` patch ([#1828](https://github.com/revanced/revanced-patches/issues/1828)) ([32d73cb](32d73cb446))
* **memegenerator:** `unlock-pro` patch ([#1902](https://github.com/revanced/revanced-patches/issues/1902)) ([5180bc6](5180bc660d))
* **photomath/unlock-plus:** bump compatibility to `8.21.1` ([#1926](https://github.com/revanced/revanced-patches/issues/1926)) ([879a01b](879a01b4c5))
* **photomath:** bump compatibility up to `8.21.0` ([#1886](https://github.com/revanced/revanced-patches/issues/1886)) ([e24403e](e24403e02d))
* **reddit:** bump compatibility to `2023.12.0` ([#1825](https://github.com/revanced/revanced-patches/issues/1825)) ([c7b21d7](c7b21d75b7))
* use better patch description ([7437c77](7437c7731a))
* **youtube-music:** `bypass-certificate-checks` patch ([#1810](https://github.com/revanced/revanced-patches/issues/1810)) ([fd46009](fd46009ec2))
* **youtube/settings:** disable preferences and add dialog messages to preferences ([#1801](https://github.com/revanced/revanced-patches/issues/1801)) ([d45158c](d45158ca92))
* **youtube/sponsorblock:** skip to video highlight ([#1874](https://github.com/revanced/revanced-patches/issues/1874)) ([f71fa48](f71fa48966))
* **youtube:** bump compatibility to `18.08.37` ([aade87e](aade87e981))
* **youtube:** change default video speed and quality inside the settings menu ([#1880](https://github.com/revanced/revanced-patches/issues/1880)) ([6c02bef](6c02bef427))
* **youtube:** constrain compatibility to `18.08.37` ([435a4a9](435a4a9f39))
* **youtube:** sponsorblock improvements ([#1557](https://github.com/revanced/revanced-patches/issues/1557)) ([f0cbcc6](f0cbcc6886))
* **youtube:** support version `18.08.37` ([f1c9793](f1c9793a3e))
2023-04-21 13:43:16 +00:00
LisoUseInAIKyrios
328aad9d6a fix(youtube/hide-video-action-buttons): fix 'hide share button' (#1924) 2023-04-21 15:23:41 +02:00
oSumAtrIX
11b4ca8740 fix(youtube/spoof-signature-verification): depend on client-spoof patch 2023-04-21 15:23:41 +02:00
oSumAtrIX
7437c7731a feat: use better patch description 2023-04-21 15:23:40 +02:00
oSumAtrIX
d3b8b37b02 fix(youtube/microg-support): rename patch correctly 2023-04-21 15:23:40 +02:00
oSumAtrIX
8470e1b9c6 fix(youtube/microg-support): remove incorrect patch dependency 2023-04-21 15:23:40 +02:00
oSumAtrIX
e3aebb3ea8 refactor: apply Kotlin coding conventions 2023-04-21 15:23:39 +02:00
badawoll
879a01b4c5 feat(photomath/unlock-plus): bump compatibility to 8.21.1 (#1926) 2023-04-21 15:23:39 +02:00
LisoUseInAIKyrios
ce6a6cd3d0 fix(youtube/hide-video-action-buttons): change 'Hide create, clip and thanks buttons' to default off (#1923) 2023-04-21 15:23:39 +02:00
LisoUseInAIKyrios
2c1329dc54 fix(youtube/return-youtube-dislike): render dislikes when scrolling into the screen (#1873)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2023-04-21 15:23:39 +02:00
badawoll
5180bc660d feat(memegenerator): unlock-pro patch (#1902)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2023-04-21 15:23:38 +02:00
johnconner122
4a04e81688 fix(youtubevanced/hide-ads): remove broken ad filter (#1881) 2023-04-21 15:23:38 +02:00
LisoUseInAIKyrios
f71fa48966 feat(youtube/sponsorblock): skip to video highlight (#1874) 2023-04-21 15:23:38 +02:00
30 changed files with 609 additions and 213 deletions

View File

@@ -1,3 +1,110 @@
## [2.169.1-dev.4](https://github.com/revanced/revanced-patches/compare/v2.169.1-dev.3...v2.169.1-dev.4) (2023-04-23)
### Bug Fixes
* **twitch/block-embedded-ads:** correct spelling mistake ([#1962](https://github.com/revanced/revanced-patches/issues/1962)) ([100d9dd](https://github.com/revanced/revanced-patches/commit/100d9dd7e0b9d83a96fb25c2ffda06fc018830e4))
## [2.169.1-dev.3](https://github.com/revanced/revanced-patches/compare/v2.169.1-dev.2...v2.169.1-dev.3) (2023-04-23)
### Bug Fixes
* **youtube/hide-video-action-buttons:** fix hide action buttons not working for some users ([#1959](https://github.com/revanced/revanced-patches/issues/1959)) ([3ff1489](https://github.com/revanced/revanced-patches/commit/3ff1489b32968e9bad3361f924b7079e7b6f29e2))
## [2.169.1-dev.2](https://github.com/revanced/revanced-patches/compare/v2.169.1-dev.1...v2.169.1-dev.2) (2023-04-21)
### Bug Fixes
* **"enable-android-debugging:** don't include by default ([14b2128](https://github.com/revanced/revanced-patches/commit/14b212844f308b95ad6ed02c455716cd84c0db01))
## [2.169.1-dev.1](https://github.com/revanced/revanced-patches/compare/v2.169.0...v2.169.1-dev.1) (2023-04-21)
### Bug Fixes
* **youtube/sponsorblock:** correct spelling mistake ([#1941](https://github.com/revanced/revanced-patches/issues/1941)) ([d9d0fe7](https://github.com/revanced/revanced-patches/commit/d9d0fe7e236ccce348e8b3214454d29656a853c0))
* **youtube/sponsorblock:** use lowercase letters for URL string ([#1942](https://github.com/revanced/revanced-patches/issues/1942)) ([b58842a](https://github.com/revanced/revanced-patches/commit/b58842a5f6f3fbcf06e87821bbc1ad3be7ca2fc0))
# [2.169.0](https://github.com/revanced/revanced-patches/compare/v2.168.0...v2.169.0) (2023-04-21)
### Bug Fixes
* add missing annotation to patches ([#1882](https://github.com/revanced/revanced-patches/issues/1882)) ([d86b6a4](https://github.com/revanced/revanced-patches/commit/d86b6a4a659172c3f1db8eb883f28dfee4e83e4c))
* **youtube/hide-video-action-buttons:** change 'Hide create, clip and thanks buttons' to default off ([#1923](https://github.com/revanced/revanced-patches/issues/1923)) ([fc89c86](https://github.com/revanced/revanced-patches/commit/fc89c865f94fffd748809eaf0504cc91f6389500))
* **youtube/hide-video-action-buttons:** fix 'hide share button' ([#1924](https://github.com/revanced/revanced-patches/issues/1924)) ([bc05e44](https://github.com/revanced/revanced-patches/commit/bc05e4494d914f944a831bfb83a150ad93bb342f))
* **youtube/microg-support:** remove incorrect patch dependency ([3e0c45c](https://github.com/revanced/revanced-patches/commit/3e0c45c2dff9f6336e42fdd3d1b5b5de5af1b1cb))
* **youtube/microg-support:** rename patch correctly ([091a25d](https://github.com/revanced/revanced-patches/commit/091a25d46145b1c27791245fca0933e9c8a68e9a))
* **youtube/return-youtube-dislike:** render dislikes when scrolling into the screen ([#1873](https://github.com/revanced/revanced-patches/issues/1873)) ([85675b8](https://github.com/revanced/revanced-patches/commit/85675b800070de9752b2a4bfea3182381d4cfba4))
* **youtube/sponsorblock:** do not depend on `remember-playback-speed` patch ([b0834fa](https://github.com/revanced/revanced-patches/commit/b0834faa69755a94f70ae5075a10cf15e8a6b857))
* **youtube/sponsorblock:** fix autorepeat button layout ([#1868](https://github.com/revanced/revanced-patches/issues/1868)) ([5e148d9](https://github.com/revanced/revanced-patches/commit/5e148d9384e8f9f1bc8f5daa7e68a05574810329))
* **youtube/spoof-signature-verification:** depend on `client-spoof` patch ([0d47375](https://github.com/revanced/revanced-patches/commit/0d47375092639e3e5dad8d67991004fc2f103606))
* **youtubevanced/hide-ads:** hide more types of ads ([#1781](https://github.com/revanced/revanced-patches/issues/1781)) ([47ff447](https://github.com/revanced/revanced-patches/commit/47ff447f8ec0e5bbc174f34bd7d61b3031276641))
* **youtubevanced/hide-ads:** remove broken ad filter ([#1881](https://github.com/revanced/revanced-patches/issues/1881)) ([5b987e1](https://github.com/revanced/revanced-patches/commit/5b987e14e81a47691883a5b5196c7ffee03941d0))
### Features
* `change-package-name` patch ([#1864](https://github.com/revanced/revanced-patches/issues/1864)) ([f9a6672](https://github.com/revanced/revanced-patches/commit/f9a6672122eb28fe06c9f5e137906ad868a491d6))
* `enable-android-debugging` patch ([#1876](https://github.com/revanced/revanced-patches/issues/1876)) ([bd224d9](https://github.com/revanced/revanced-patches/commit/bd224d90deb838ee3e7bd0c16860023ebf113e96))
* **facebook:** `hide-inbox-ads` patch ([#1893](https://github.com/revanced/revanced-patches/issues/1893)) ([2cfc982](https://github.com/revanced/revanced-patches/commit/2cfc9829e119884ca566d6ad90fd0542317891d7))
* **id-austria:** bump compatibility to `2.6.0` ([#1827](https://github.com/revanced/revanced-patches/issues/1827)) ([f48e794](https://github.com/revanced/revanced-patches/commit/f48e794eebf9ea44008c4c8a3967ad039d19180a))
* **inshorts:** `hide-ads` patch ([#1828](https://github.com/revanced/revanced-patches/issues/1828)) ([04a2acc](https://github.com/revanced/revanced-patches/commit/04a2accfe9f9254af9074ad0a309d485cedb01cb))
* **memegenerator:** `unlock-pro` patch ([#1902](https://github.com/revanced/revanced-patches/issues/1902)) ([7d30541](https://github.com/revanced/revanced-patches/commit/7d3054178187bed294d156d3858613fa63a626ef))
* **photomath/unlock-plus:** bump compatibility to `8.21.1` ([#1926](https://github.com/revanced/revanced-patches/issues/1926)) ([beb8d9c](https://github.com/revanced/revanced-patches/commit/beb8d9cbf254b4a2b2207a307934be65507dcf80))
* **photomath:** bump compatibility up to `8.21.0` ([#1886](https://github.com/revanced/revanced-patches/issues/1886)) ([43464fd](https://github.com/revanced/revanced-patches/commit/43464fd6ffe6f097c574156146aeb23f8f026840))
* **reddit:** bump compatibility to `2023.12.0` ([#1825](https://github.com/revanced/revanced-patches/issues/1825)) ([e3666e6](https://github.com/revanced/revanced-patches/commit/e3666e68ed4816c85fbb110cb098f53fddf135f1))
* use better patch description ([32fcd25](https://github.com/revanced/revanced-patches/commit/32fcd258c6b00315265c09380550a2e98b5ec9e7))
* **youtube-music:** `bypass-certificate-checks` patch ([#1810](https://github.com/revanced/revanced-patches/issues/1810)) ([ef8f26f](https://github.com/revanced/revanced-patches/commit/ef8f26fb976c3044039f9bff0496088763ab66cd))
* **youtube/settings:** disable preferences and add dialog messages to preferences ([#1801](https://github.com/revanced/revanced-patches/issues/1801)) ([05023ba](https://github.com/revanced/revanced-patches/commit/05023bab1d94e04553ac274468bdba7a19ad9180))
* **youtube/sponsorblock:** skip to video highlight ([#1874](https://github.com/revanced/revanced-patches/issues/1874)) ([83747b7](https://github.com/revanced/revanced-patches/commit/83747b7aea33d8fe4b4b9514fdf7c9081c357410))
* **youtube:** bump compatibility to `18.08.37` ([29561ec](https://github.com/revanced/revanced-patches/commit/29561eca10e18e11f2d4a7f9bab2f12303490b6f))
* **youtube:** change default video speed and quality inside the settings menu ([#1880](https://github.com/revanced/revanced-patches/issues/1880)) ([fbb1763](https://github.com/revanced/revanced-patches/commit/fbb17636d8ab9f2a43ead896451804b04464527c))
* **youtube:** constrain compatibility to `18.08.37` ([7403fc8](https://github.com/revanced/revanced-patches/commit/7403fc86ae7b7d756a2939fa0a507f237aaf6edf))
* **youtube:** sponsorblock improvements ([#1557](https://github.com/revanced/revanced-patches/issues/1557)) ([b5d712a](https://github.com/revanced/revanced-patches/commit/b5d712a3326d1e8cdb8d8642aa7bd1bee6e30ac1))
* **youtube:** support version `18.08.37` ([4f4ceab](https://github.com/revanced/revanced-patches/commit/4f4ceab2cc32a38dd3967fd4e81f690330c08f5c))
# [2.169.0-dev.1](https://github.com/revanced/revanced-patches/compare/v2.168.0...v2.169.0-dev.1) (2023-04-21)
### Bug Fixes
* add missing annotation to patches ([#1882](https://github.com/revanced/revanced-patches/issues/1882)) ([d86b6a4](https://github.com/revanced/revanced-patches/commit/d86b6a4a659172c3f1db8eb883f28dfee4e83e4c))
* **youtube/hide-video-action-buttons:** change 'Hide create, clip and thanks buttons' to default off ([#1923](https://github.com/revanced/revanced-patches/issues/1923)) ([fc89c86](https://github.com/revanced/revanced-patches/commit/fc89c865f94fffd748809eaf0504cc91f6389500))
* **youtube/hide-video-action-buttons:** fix 'hide share button' ([#1924](https://github.com/revanced/revanced-patches/issues/1924)) ([bc05e44](https://github.com/revanced/revanced-patches/commit/bc05e4494d914f944a831bfb83a150ad93bb342f))
* **youtube/microg-support:** remove incorrect patch dependency ([3e0c45c](https://github.com/revanced/revanced-patches/commit/3e0c45c2dff9f6336e42fdd3d1b5b5de5af1b1cb))
* **youtube/microg-support:** rename patch correctly ([091a25d](https://github.com/revanced/revanced-patches/commit/091a25d46145b1c27791245fca0933e9c8a68e9a))
* **youtube/return-youtube-dislike:** render dislikes when scrolling into the screen ([#1873](https://github.com/revanced/revanced-patches/issues/1873)) ([85675b8](https://github.com/revanced/revanced-patches/commit/85675b800070de9752b2a4bfea3182381d4cfba4))
* **youtube/sponsorblock:** do not depend on `remember-playback-speed` patch ([b0834fa](https://github.com/revanced/revanced-patches/commit/b0834faa69755a94f70ae5075a10cf15e8a6b857))
* **youtube/sponsorblock:** fix autorepeat button layout ([#1868](https://github.com/revanced/revanced-patches/issues/1868)) ([5e148d9](https://github.com/revanced/revanced-patches/commit/5e148d9384e8f9f1bc8f5daa7e68a05574810329))
* **youtube/spoof-signature-verification:** depend on `client-spoof` patch ([0d47375](https://github.com/revanced/revanced-patches/commit/0d47375092639e3e5dad8d67991004fc2f103606))
* **youtubevanced/hide-ads:** hide more types of ads ([#1781](https://github.com/revanced/revanced-patches/issues/1781)) ([47ff447](https://github.com/revanced/revanced-patches/commit/47ff447f8ec0e5bbc174f34bd7d61b3031276641))
* **youtubevanced/hide-ads:** remove broken ad filter ([#1881](https://github.com/revanced/revanced-patches/issues/1881)) ([5b987e1](https://github.com/revanced/revanced-patches/commit/5b987e14e81a47691883a5b5196c7ffee03941d0))
### Features
* `change-package-name` patch ([#1864](https://github.com/revanced/revanced-patches/issues/1864)) ([f9a6672](https://github.com/revanced/revanced-patches/commit/f9a6672122eb28fe06c9f5e137906ad868a491d6))
* `enable-android-debugging` patch ([#1876](https://github.com/revanced/revanced-patches/issues/1876)) ([bd224d9](https://github.com/revanced/revanced-patches/commit/bd224d90deb838ee3e7bd0c16860023ebf113e96))
* **facebook:** `hide-inbox-ads` patch ([#1893](https://github.com/revanced/revanced-patches/issues/1893)) ([2cfc982](https://github.com/revanced/revanced-patches/commit/2cfc9829e119884ca566d6ad90fd0542317891d7))
* **id-austria:** bump compatibility to `2.6.0` ([#1827](https://github.com/revanced/revanced-patches/issues/1827)) ([f48e794](https://github.com/revanced/revanced-patches/commit/f48e794eebf9ea44008c4c8a3967ad039d19180a))
* **inshorts:** `hide-ads` patch ([#1828](https://github.com/revanced/revanced-patches/issues/1828)) ([04a2acc](https://github.com/revanced/revanced-patches/commit/04a2accfe9f9254af9074ad0a309d485cedb01cb))
* **memegenerator:** `unlock-pro` patch ([#1902](https://github.com/revanced/revanced-patches/issues/1902)) ([7d30541](https://github.com/revanced/revanced-patches/commit/7d3054178187bed294d156d3858613fa63a626ef))
* **photomath/unlock-plus:** bump compatibility to `8.21.1` ([#1926](https://github.com/revanced/revanced-patches/issues/1926)) ([beb8d9c](https://github.com/revanced/revanced-patches/commit/beb8d9cbf254b4a2b2207a307934be65507dcf80))
* **photomath:** bump compatibility up to `8.21.0` ([#1886](https://github.com/revanced/revanced-patches/issues/1886)) ([43464fd](https://github.com/revanced/revanced-patches/commit/43464fd6ffe6f097c574156146aeb23f8f026840))
* **reddit:** bump compatibility to `2023.12.0` ([#1825](https://github.com/revanced/revanced-patches/issues/1825)) ([e3666e6](https://github.com/revanced/revanced-patches/commit/e3666e68ed4816c85fbb110cb098f53fddf135f1))
* use better patch description ([32fcd25](https://github.com/revanced/revanced-patches/commit/32fcd258c6b00315265c09380550a2e98b5ec9e7))
* **youtube-music:** `bypass-certificate-checks` patch ([#1810](https://github.com/revanced/revanced-patches/issues/1810)) ([ef8f26f](https://github.com/revanced/revanced-patches/commit/ef8f26fb976c3044039f9bff0496088763ab66cd))
* **youtube/settings:** disable preferences and add dialog messages to preferences ([#1801](https://github.com/revanced/revanced-patches/issues/1801)) ([05023ba](https://github.com/revanced/revanced-patches/commit/05023bab1d94e04553ac274468bdba7a19ad9180))
* **youtube/sponsorblock:** skip to video highlight ([#1874](https://github.com/revanced/revanced-patches/issues/1874)) ([83747b7](https://github.com/revanced/revanced-patches/commit/83747b7aea33d8fe4b4b9514fdf7c9081c357410))
* **youtube:** bump compatibility to `18.08.37` ([29561ec](https://github.com/revanced/revanced-patches/commit/29561eca10e18e11f2d4a7f9bab2f12303490b6f))
* **youtube:** change default video speed and quality inside the settings menu ([#1880](https://github.com/revanced/revanced-patches/issues/1880)) ([fbb1763](https://github.com/revanced/revanced-patches/commit/fbb17636d8ab9f2a43ead896451804b04464527c))
* **youtube:** constrain compatibility to `18.08.37` ([7403fc8](https://github.com/revanced/revanced-patches/commit/7403fc86ae7b7d756a2939fa0a507f237aaf6edf))
* **youtube:** sponsorblock improvements ([#1557](https://github.com/revanced/revanced-patches/issues/1557)) ([b5d712a](https://github.com/revanced/revanced-patches/commit/b5d712a3326d1e8cdb8d8642aa7bd1bee6e30ac1))
* **youtube:** support version `18.08.37` ([4f4ceab](https://github.com/revanced/revanced-patches/commit/4f4ceab2cc32a38dd3967fd4e81f690330c08f5c))
# [2.168.0](https://github.com/revanced/revanced-patches/compare/v2.167.1...v2.168.0) (2023-04-13) # [2.168.0](https://github.com/revanced/revanced-patches/compare/v2.167.1...v2.168.0) (2023-04-13)

135
README.md
View File

@@ -9,60 +9,60 @@ The official Patch bundle provided by ReVanced and the community.
| 💊 Patch | 📜 Description | 🏹 Target Version | | 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:| |:--------:|:--------------:|:-----------------:|
| `always-autorepeat` | Always repeats the playing video again. | 18.05.40 | | `always-autorepeat` | Always repeats the playing video again. | 18.08.37 |
| `client-spoof` | Spoofs the YouTube or Vanced client to prevent playback issues. | all | | `client-spoof` | Spoofs a patched client to allow playback. | all |
| `comments` | Hides components related to comments. | 18.05.40 | | `comments` | Hides components related to comments. | 18.08.37 |
| `copy-video-url` | Adds buttons in player to copy video links. | 18.05.40 | | `copy-video-url` | Adds buttons in player to copy video links. | 18.08.37 |
| `custom-branding` | Changes the YouTube launcher icon and name to your choice (defaults to ReVanced). | all | | `custom-branding` | Changes the YouTube launcher icon and name to your choice (defaults to ReVanced). | all |
| `custom-video-buffer` | Lets you change the buffers of videos. | 18.05.40 | | `custom-video-buffer` | Lets you change the buffers of videos. | 18.08.37 |
| `custom-video-speed` | Adds more video speed options. | 18.05.40 | | `custom-video-speed` | Adds more video speed options. | 18.08.37 |
| `debugging` | Adds debugging options. | all | | `disable-auto-captions` | Disable forced captions from being automatically enabled. | 18.08.37 |
| `disable-auto-captions` | Disable forced captions from being automatically enabled. | 18.05.40 | | `disable-fullscreen-panels` | Disables video description and comments panel in fullscreen view. | 18.08.37 |
| `disable-fullscreen-panels` | Disables video description and comments panel in fullscreen view. | 18.05.40 | | `disable-player-popup-panels` | Disables panels from appearing automatically when going into fullscreen (playlist or live chat). | 18.08.37 |
| `disable-player-popup-panels` | Disables panels from appearing automatically when going into fullscreen (playlist or live chat). | 18.05.40 | | `disable-shorts-on-startup` | Disables playing YouTube Shorts when launching YouTube. | 18.08.37 |
| `disable-shorts-on-startup` | Disables playing YouTube Shorts when launching YouTube. | 18.05.40 |
| `disable-zoom-haptics` | Disables haptics when zooming. | all | | `disable-zoom-haptics` | Disables haptics when zooming. | all |
| `downloads` | Enables downloading music and videos from YouTube. | 18.05.40 | | `downloads` | Enables downloading music and videos from YouTube. | 18.08.37 |
| `enable-wide-searchbar` | Replaces the search icon with a wide search bar. This will hide the YouTube logo when active. | 18.05.40 | | `enable-debugging` | Adds debugging options. | all |
| `general-ads` | Removes general ads. | 18.05.40 | | `enable-wide-searchbar` | Replaces the search icon with a wide search bar. This will hide the YouTube logo when active. | 18.08.37 |
| `hdr-auto-brightness` | Makes the brightness of HDR videos follow the system default. | 18.05.40 | | `general-ads` | Removes general ads. | 18.08.37 |
| `hide-album-cards` | Hides the album cards below the artist description. | 18.05.40 | | `hdr-auto-brightness` | Makes the brightness of HDR videos follow the system default. | 18.08.37 |
| `hide-artist-card` | Hides the artist card below the searchbar. | 18.05.40 | | `hide-album-cards` | Hides the album cards below the artist description. | 18.08.37 |
| `hide-autoplay-button` | Hides the autoplay button in the video player. | 18.05.40 | | `hide-artist-card` | Hides the artist card below the searchbar. | 18.08.37 |
| `hide-breaking-news-shelf` | Hides the breaking news shelf on the homepage tab. | 18.05.40 | | `hide-autoplay-button` | Hides the autoplay button in the video player. | 18.08.37 |
| `hide-captions-button` | Hides the captions button on video player. | 18.05.40 | | `hide-breaking-news-shelf` | Hides the breaking news shelf on the homepage tab. | 18.08.37 |
| `hide-captions-button` | Hides the captions button on video player. | 18.08.37 |
| `hide-cast-button` | Hides the cast button in the video player. | all | | `hide-cast-button` | Hides the cast button in the video player. | all |
| `hide-create-button` | Hides the create button in the navigation bar. | 18.05.40 | | `hide-create-button` | Hides the create button in the navigation bar. | 18.08.37 |
| `hide-crowdfunding-box` | Hides the crowdfunding box between the player and video description. | 18.05.40 | | `hide-crowdfunding-box` | Hides the crowdfunding box between the player and video description. | 18.08.37 |
| `hide-email-address` | Hides the email address in the account switcher. | 18.05.40 | | `hide-email-address` | Hides the email address in the account switcher. | 18.08.37 |
| `hide-endscreen-cards` | Hides the suggested video cards at the end of a video in fullscreen. | 18.05.40 | | `hide-endscreen-cards` | Hides the suggested video cards at the end of a video in fullscreen. | 18.08.37 |
| `hide-floating-microphone-button` | Hides the floating microphone button which appears in search. | 18.05.40 | | `hide-floating-microphone-button` | Hides the floating microphone button which appears in search. | 18.08.37 |
| `hide-info-cards` | Hides info cards in videos. | 18.05.40 | | `hide-info-cards` | Hides info cards in videos. | 18.08.37 |
| `hide-my-mix` | Hides mix playlists. | 18.05.40 | | `hide-my-mix` | Hides mix playlists. | 18.08.37 |
| `hide-player-buttons` | Adds the option to hide video player previous and next buttons. | all | | `hide-player-buttons` | Adds the option to hide video player previous and next buttons. | all |
| `hide-seekbar` | Hides the seekbar. | 18.05.40 | | `hide-seekbar` | Hides the seekbar. | 18.08.37 |
| `hide-shorts-button` | Hides the shorts button on the navigation bar. | 18.05.40 | | `hide-shorts-button` | Hides the shorts button on the navigation bar. | 18.08.37 |
| `hide-timestamp` | Hides timestamp in video player. | 18.05.40 | | `hide-timestamp` | Hides timestamp in video player. | 18.08.37 |
| `hide-video-action-buttons` | Adds the options to hide action buttons under a video. | 18.05.40 | | `hide-video-action-buttons` | Adds the options to hide action buttons under a video. | 18.08.37 |
| `hide-watch-in-vr` | Hides the option to watch in VR from the player settings flyout panel. | 18.05.40 | | `hide-watch-in-vr` | Hides the option to watch in VR from the player settings flyout panel. | 18.08.37 |
| `hide-watermark` | Hides creator's watermarks on videos. | 18.05.40 | | `hide-watermark` | Hides creator's watermarks on videos. | 18.08.37 |
| `microg-support` | Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG. | 18.05.40 | | `minimized-playback` | Enables minimized and background playback. | 18.08.37 |
| `minimized-playback` | Enables minimized and background playback. | 18.05.40 | | `old-quality-layout` | Enables the original video quality flyout in the video player settings | 18.08.37 |
| `old-quality-layout` | Enables the original video quality flyout in the video player settings | 18.05.40 | | `open-links-externally` | Open links outside of the app directly in your browser. | 18.08.37 |
| `open-links-externally` | Open links outside of the app directly in your browser. | 18.05.40 |
| `premium-heading` | Shows premium branding on the home screen. | all | | `premium-heading` | Shows premium branding on the home screen. | all |
| `remember-playback-speed` | Adds the ability to remember the playback speed you chose in the video playback speed flyout. | 18.05.40 | | `remember-playback-speed` | Adds the ability to remember the playback speed you chose in the video playback speed flyout. | 18.08.37 |
| `remember-video-quality` | Adds the ability to remember the video quality you chose in the video quality flyout. | 18.05.40 | | `remember-video-quality` | Adds the ability to remember the video quality you chose in the video quality flyout. | 18.08.37 |
| `remove-player-button-background` | Removes the background from the video player buttons. | 18.05.40 | | `remove-player-button-background` | Removes the background from the video player buttons. | 18.08.37 |
| `return-youtube-dislike` | Shows the dislike count of videos using the Return YouTube Dislike API. | 18.05.40 | | `return-youtube-dislike` | Shows the dislike count of videos using the Return YouTube Dislike API. | 18.08.37 |
| `seekbar-tapping` | Enables tap-to-seek on the seekbar of the video player. | 18.05.40 | | `seekbar-tapping` | Enables tap-to-seek on the seekbar of the video player. | 18.08.37 |
| `sponsorblock` | Integrates SponsorBlock which allows skipping video segments such as sponsored content. | 18.05.40 | | `sponsorblock` | Integrates SponsorBlock which allows skipping video segments such as sponsored content. | 18.08.37 |
| `spoof-app-version` | Tricks YouTube into thinking, you are running an older version of the app. One of the side effects also includes restoring the old UI. | 18.05.40 | | `spoof-app-version` | Tricks YouTube into thinking, you are running an older version of the app. One of the side effects also includes restoring the old UI. | 18.08.37 |
| `spoof-signature-verification` | Spoofs the client to prevent playback issues. | 18.05.40 | | `spoof-signature-verification` | Spoofs a patched client to prevent playback issues. | 18.08.37 |
| `swipe-controls` | Adds volume and brightness swipe controls. | 18.05.40 | | `swipe-controls` | Adds volume and brightness swipe controls. | 18.08.37 |
| `tablet-mini-player` | Enables the tablet mini player layout. | 18.05.40 | | `tablet-mini-player` | Enables the tablet mini player layout. | 18.08.37 |
| `theme` | Applies a custom theme. | all | | `theme` | Applies a custom theme. | all |
| `video-ads` | Removes ads in the video player. | 18.05.40 | | `vanced-microg-support` | Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG. | 18.08.37 |
| `video-ads` | Removes ads in the video player. | 18.08.37 |
</details> </details>
### [📦 `com.google.android.apps.youtube.music`](https://play.google.com/store/apps/details?id=com.google.android.apps.youtube.music) ### [📦 `com.google.android.apps.youtube.music`](https://play.google.com/store/apps/details?id=com.google.android.apps.youtube.music)
@@ -71,6 +71,7 @@ The official Patch bundle provided by ReVanced and the community.
| 💊 Patch | 📜 Description | 🏹 Target Version | | 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:| |:--------:|:--------------:|:-----------------:|
| `background-play` | Enables playing music in the background. | all | | `background-play` | Enables playing music in the background. | all |
| `bypass-certificate-checks` | Bypasses certificate checks which prevent YouTube Music from working on Android Auto. | 5.39.52 |
| `codecs-unlock` | Adds more audio codec options. The new audio codecs usually result in better audio quality. | all | | `codecs-unlock` | Adds more audio codec options. The new audio codecs usually result in better audio quality. | all |
| `compact-header` | Hides the music category bar at the top of the homepage. | all | | `compact-header` | Hides the music category bar at the top of the homepage. | all |
| `exclusive-audio-playback` | Enables the option to play music without video. | all | | `exclusive-audio-playback` | Enables the option to play music without video. | all |
@@ -120,7 +121,7 @@ The official Patch bundle provided by ReVanced and the community.
| 💊 Patch | 📜 Description | 🏹 Target Version | | 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:| |:--------:|:--------------:|:-----------------:|
| `block-audio-ads` | Blocks audio ads in streams and VODs. | 14.6.1 | | `block-audio-ads` | Blocks audio ads in streams and VODs. | 14.6.1 |
| `block-embedded-ads` | Blocks embedded steam ads using services like TTV.lol or PurpleAdBlocker. | 14.6.1 | | `block-embedded-ads` | Blocks embedded stream ads using services like TTV.lol or PurpleAdBlocker. | 14.6.1 |
| `block-video-ads` | Blocks video ads in streams and VODs. | 14.6.1 | | `block-video-ads` | Blocks video ads in streams and VODs. | 14.6.1 |
| `debug-mode` | Enables Twitch's internal debugging mode. | all | | `debug-mode` | Enables Twitch's internal debugging mode. | all |
| `settings` | Adds settings menu to Twitch. | all | | `settings` | Adds settings menu to Twitch. | all |
@@ -153,8 +154,8 @@ The official Patch bundle provided by ReVanced and the community.
| 💊 Patch | 📜 Description | 🏹 Target Version | | 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:| |:--------:|:--------------:|:-----------------:|
| `general-reddit-ads` | Removes general ads from the Reddit frontpage and subreddits. | 2023.10.0 | | `general-reddit-ads` | Removes general ads from the Reddit frontpage and subreddits. | 2023.12.0 |
| `hide-subreddit-banner` | Hides banner ads from comments on subreddits. | 2023.10.0 | | `hide-subreddit-banner` | Hides banner ads from comments on subreddits. | 2023.12.0 |
| `premium-icon-reddit` | Unlocks premium Reddit app icons. | all | | `premium-icon-reddit` | Unlocks premium Reddit app icons. | all |
</details> </details>
@@ -163,7 +164,7 @@ The official Patch bundle provided by ReVanced and the community.
| 💊 Patch | 📜 Description | 🏹 Target Version | | 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:| |:--------:|:--------------:|:-----------------:|
| `client-spoof` | Spoofs the YouTube or Vanced client to prevent playback issues. | all | | `client-spoof` | Spoofs a patched client to allow playback. | all |
| `hide-ads` | Removes general ads. | all | | `hide-ads` | Removes general ads. | all |
</details> </details>
@@ -181,8 +182,8 @@ The official Patch bundle provided by ReVanced and the community.
| 💊 Patch | 📜 Description | 🏹 Target Version | | 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:| |:--------:|:--------------:|:-----------------:|
| `remove-root-detection` | Removes the check for root permissions and unlocked bootloader. | 2.5.2 | | `remove-root-detection` | Removes the check for root permissions and unlocked bootloader. | 2.6.0 |
| `spoof-signature` | Spoofs the signature of the app. | 2.5.2 | | `spoof-signature` | Spoofs the signature of the app. | 2.6.0 |
</details> </details>
### [📦 `com.myprog.hexedit`](https://play.google.com/store/apps/details?id=com.myprog.hexedit) ### [📦 `com.myprog.hexedit`](https://play.google.com/store/apps/details?id=com.myprog.hexedit)
@@ -201,6 +202,22 @@ The official Patch bundle provided by ReVanced and the community.
| `enable-on-demand` | Enables listening to songs on-demand, allowing to play any song from playlists, albums or artists without limitations. This does not remove ads. | all | | `enable-on-demand` | Enables listening to songs on-demand, allowing to play any song from playlists, albums or artists without limitations. This does not remove ads. | all |
</details> </details>
### [📦 `com.nis.app`](https://play.google.com/store/apps/details?id=com.nis.app)
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `hide-ads` | Removes ads from Inshorts. | all |
</details>
### [📦 `com.facebook.orca`](https://play.google.com/store/apps/details?id=com.facebook.orca)
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `hide-inbox-ads` | Hides ads in inbox. | all |
</details>
### [📦 `com.instagram.android`](https://play.google.com/store/apps/details?id=com.instagram.android) ### [📦 `com.instagram.android`](https://play.google.com/store/apps/details?id=com.instagram.android)
<details> <details>
@@ -270,7 +287,7 @@ The official Patch bundle provided by ReVanced and the community.
| 💊 Patch | 📜 Description | 🏹 Target Version | | 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:| |:--------:|:--------------:|:-----------------:|
| `unlock-plus` | Unlocks plus features. | all | | `unlock-plus` | Unlocks plus features. | 8.9.0 |
</details> </details>
### [📦 `io.yuka.android`](https://play.google.com/store/apps/details?id=io.yuka.android) ### [📦 `io.yuka.android`](https://play.google.com/store/apps/details?id=io.yuka.android)
@@ -321,6 +338,14 @@ The official Patch bundle provided by ReVanced and the community.
| `unlock-pro` | Unlocks all professional features. | 3.4.9 | | `unlock-pro` | Unlocks all professional features. | 3.4.9 |
</details> </details>
### [📦 `com.zombodroid.MemeGenerator`](https://play.google.com/store/apps/details?id=com.zombodroid.MemeGenerator)
<details>
| 💊 Patch | 📜 Description | 🏹 Target Version |
|:--------:|:--------------:|:-----------------:|
| `unlock-pro` | Unlocks pro features. | 4.6364 |
</details>
### [📦 `com.awedea.nyx`](https://play.google.com/store/apps/details?id=com.awedea.nyx) ### [📦 `com.awedea.nyx`](https://play.google.com/store/apps/details?id=com.awedea.nyx)
<details> <details>

View File

@@ -1,2 +1,2 @@
kotlin.code.style = official kotlin.code.style = official
version = 2.168.0 version = 2.169.1-dev.4

File diff suppressed because one or more lines are too long

View File

@@ -9,7 +9,7 @@ import app.revanced.patcher.patch.annotations.DependsOn
import app.revanced.patcher.patch.annotations.Patch import app.revanced.patcher.patch.annotations.Patch
import org.w3c.dom.Element import org.w3c.dom.Element
@Patch @Patch(false)
@Name("enable-android-debugging") @Name("enable-android-debugging")
@Description("Enables Android debugging capabilities.") @Description("Enables Android debugging capabilities.")
@Version("0.0.1") @Version("0.0.1")

View File

@@ -0,0 +1,24 @@
package app.revanced.patches.memegenerator.detection.license.fingerprint
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 LicenseValidationFingerprint : MethodFingerprint(
returnType = "Z",
access = AccessFlags.PUBLIC or AccessFlags.STATIC,
parameters = listOf("Landroid/content/Context;"),
opcodes = listOf(
Opcode.INVOKE_STATIC,
Opcode.MOVE_RESULT_WIDE,
Opcode.INVOKE_STATIC,
Opcode.MOVE_RESULT_WIDE,
Opcode.CMP_LONG,
Opcode.IF_GEZ,
Opcode.CONST_4,
Opcode.RETURN,
Opcode.CONST_4,
Opcode.RETURN
)
)

View File

@@ -0,0 +1,31 @@
package app.revanced.patches.memegenerator.detection.license.patch
import app.revanced.extensions.toErrorResult
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.BytecodeContext
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.patches.memegenerator.detection.license.fingerprint.LicenseValidationFingerprint
@Description("Disables Firebase license validation.")
@Version("0.0.1")
class LicenseValidationPatch : BytecodePatch(
listOf(LicenseValidationFingerprint)
) {
override fun execute(context: BytecodeContext): PatchResult {
LicenseValidationFingerprint.result?.apply {
mutableMethod.replaceInstructions(
0,
"""
const/4 p0, 0x1
return p0
"""
)
} ?: throw LicenseValidationFingerprint.toErrorResult()
return PatchResultSuccess()
}
}

View File

@@ -0,0 +1,35 @@
package app.revanced.patches.memegenerator.detection.signature.fingerprint
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.AccessFlags
import org.jf.dexlib2.Opcode
@FuzzyPatternScanMethod(2)
object VerifySignatureFingerprint : MethodFingerprint(
returnType = "Z",
access = AccessFlags.PUBLIC or AccessFlags.STATIC,
parameters = listOf("Landroid/app/Activity;"),
opcodes = listOf(
Opcode.SGET_OBJECT,
Opcode.IF_NEZ,
Opcode.INVOKE_STATIC,
Opcode.CONST_4,
Opcode.CONST_4,
Opcode.SGET_OBJECT,
Opcode.ARRAY_LENGTH,
Opcode.IF_GE,
Opcode.AGET_OBJECT,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT_OBJECT,
Opcode.SGET_OBJECT,
Opcode.IF_EQZ,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT,
Opcode.IF_EQZ,
Opcode.CONST_4,
Opcode.RETURN,
Opcode.ADD_INT_LIT8
),
)

View File

@@ -0,0 +1,31 @@
package app.revanced.patches.memegenerator.detection.signature.patch
import app.revanced.extensions.toErrorResult
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.BytecodeContext
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.patches.memegenerator.detection.signature.fingerprint.VerifySignatureFingerprint
@Description("Disables detection of incorrect signature.")
@Version("0.0.1")
class SignatureVerificationPatch : BytecodePatch(
listOf(VerifySignatureFingerprint)
) {
override fun execute(context: BytecodeContext): PatchResult {
VerifySignatureFingerprint.result?.apply {
mutableMethod.replaceInstructions(
0,
"""
const/4 p0, 0x1
return p0
"""
)
} ?: throw VerifySignatureFingerprint.toErrorResult()
return PatchResultSuccess()
}
}

View File

@@ -0,0 +1,8 @@
package app.revanced.patches.memegenerator.misc.pro.annotations
import app.revanced.patcher.annotation.Compatibility
import app.revanced.patcher.annotation.Package
@Compatibility([Package("com.zombodroid.MemeGenerator", arrayOf("4.6364"))])
@Target(AnnotationTarget.CLASS)
internal annotation class UnlockProCompatibility

View File

@@ -0,0 +1,22 @@
package app.revanced.patches.memegenerator.misc.pro.fingerprint
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 IsFreeVersionFingerprint : MethodFingerprint(
returnType = "Ljava/lang/Boolean;",
access = AccessFlags.PUBLIC or AccessFlags.STATIC,
strings = listOf("free"),
parameters = listOf("Landroid/content/Context;"),
opcodes = listOf(
Opcode.SGET,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT_OBJECT,
Opcode.CONST_STRING,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT,
Opcode.IF_EQZ
)
)

View File

@@ -0,0 +1,45 @@
package app.revanced.patches.memegenerator.misc.pro.patch
import app.revanced.extensions.toErrorResult
import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version
import app.revanced.patcher.data.BytecodeContext
import app.revanced.patcher.extensions.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.DependsOn
import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patches.memegenerator.detection.license.patch.LicenseValidationPatch
import app.revanced.patches.memegenerator.detection.signature.patch.SignatureVerificationPatch
import app.revanced.patches.memegenerator.misc.pro.annotations.UnlockProCompatibility
import app.revanced.patches.memegenerator.misc.pro.fingerprint.IsFreeVersionFingerprint
@Patch
@Name("unlock-pro")
@Description("Unlocks pro features.")
@DependsOn([
SignatureVerificationPatch::class,
LicenseValidationPatch::class
])
@UnlockProCompatibility
@Version("0.0.1")
class UnlockProVersionPatch : BytecodePatch(
listOf(
IsFreeVersionFingerprint
)
) {
override fun execute(context: BytecodeContext): PatchResult {
IsFreeVersionFingerprint.result?.apply {
mutableMethod.replaceInstructions(0,
"""
sget-object p0, Ljava/lang/Boolean;->FALSE:Ljava/lang/Boolean;
return-object p0
"""
)
} ?: throw IsFreeVersionFingerprint.toErrorResult()
return PatchResultSuccess()
}
}

View File

@@ -1,30 +0,0 @@
package app.revanced.patches.photomath.detection.signature.annotations
import app.revanced.patcher.annotation.Compatibility
import app.revanced.patcher.annotation.Package
@Compatibility(
[Package(
"com.microblink.photomath", arrayOf(
"8.6.0",
"8.7.0",
"8.8.0",
"8.9.0",
"8.10.0",
"8.11.0",
"8.12.0",
"8.13.0",
"8.14.0",
"8.15.0",
"8.16.0",
"8.17.0",
"8.18.0",
"8.18.1",
"8.19.0",
"8.20.0",
"8.21.0",
)
)]
)
@Target(AnnotationTarget.CLASS)
internal annotation class DisableSignatureDetectionCompatibility

View File

@@ -9,12 +9,10 @@ import app.revanced.patcher.extensions.replaceInstruction
import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResult
import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.PatchResultSuccess
import app.revanced.patches.photomath.detection.signature.annotations.DisableSignatureDetectionCompatibility
import app.revanced.patches.photomath.detection.signature.fingerprints.CheckSignatureFingerprint import app.revanced.patches.photomath.detection.signature.fingerprints.CheckSignatureFingerprint
import org.jf.dexlib2.iface.instruction.OneRegisterInstruction import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
@Description("Disables detection of incorrect signature.") @Description("Disables detection of incorrect signature.")
@DisableSignatureDetectionCompatibility
@Version("0.0.2") @Version("0.0.2")
class SignatureDetectionPatch : BytecodePatch( class SignatureDetectionPatch : BytecodePatch(
listOf( listOf(

View File

@@ -3,6 +3,28 @@ package app.revanced.patches.photomath.misc.unlockplus.annotations
import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Compatibility
import app.revanced.patcher.annotation.Package import app.revanced.patcher.annotation.Package
@Compatibility([Package("com.microblink.photomath")]) @Compatibility(
[Package(
"com.microblink.photomath", arrayOf(
"8.6.0",
"8.7.0",
"8.8.0",
"8.9.0",
"8.10.0",
"8.11.0",
"8.12.0",
"8.13.0",
"8.14.0",
"8.15.0",
"8.16.0",
"8.17.0",
"8.18.0",
"8.18.1",
"8.19.0",
"8.20.0",
"8.21.0",
)
)]
)
@Target(AnnotationTarget.CLASS) @Target(AnnotationTarget.CLASS)
internal annotation class UnlockPlusCompatibilty internal annotation class UnlockPlusCompatibilty

View File

@@ -1,5 +1,6 @@
package app.revanced.patches.shared.misc.fix.spoof.patch package app.revanced.patches.shared.misc.fix.spoof.patch
import app.revanced.extensions.toErrorResult
import app.revanced.patcher.annotation.Description import app.revanced.patcher.annotation.Description
import app.revanced.patcher.annotation.Name import app.revanced.patcher.annotation.Name
import app.revanced.patcher.annotation.Version import app.revanced.patcher.annotation.Version
@@ -16,22 +17,26 @@ import org.jf.dexlib2.iface.instruction.FiveRegisterInstruction
@Patch @Patch
@Name("client-spoof") @Name("client-spoof")
@Description("Spoofs the YouTube or Vanced client to prevent playback issues.") @Description("Spoofs a patched client to allow playback.")
@ClientSpoofCompatibility @ClientSpoofCompatibility
@Version("0.0.1") @Version("0.0.1")
class ClientSpoofPatch : BytecodePatch( class ClientSpoofPatch : BytecodePatch(
listOf(UserAgentHeaderBuilderFingerprint) listOf(UserAgentHeaderBuilderFingerprint)
) { ) {
override fun execute(context: BytecodeContext): PatchResult { override fun execute(context: BytecodeContext): PatchResult {
val result = UserAgentHeaderBuilderFingerprint.result!! UserAgentHeaderBuilderFingerprint.result?.let { result ->
val method = result.mutableMethod val insertIndex = result.scanResult.patternScanResult!!.endIndex
result.mutableMethod.apply {
val packageNameRegister = (instruction(insertIndex) as FiveRegisterInstruction).registerD
addInstruction(insertIndex, "const-string v$packageNameRegister, \"$ORIGINAL_PACKAGE_NAME\"")
}
val insertIndex = result.scanResult.patternScanResult!!.endIndex } ?: return UserAgentHeaderBuilderFingerprint.toErrorResult()
val packageNameRegister = (method.instruction(insertIndex) as FiveRegisterInstruction).registerD
val originalPackageName = "com.google.android.youtube"
method.addInstruction(insertIndex, "const-string v$packageNameRegister, \"$originalPackageName\"")
return PatchResultSuccess() return PatchResultSuccess()
} }
private companion object {
private const val ORIGINAL_PACKAGE_NAME = "com.google.android.youtube"
}
} }

View File

@@ -24,7 +24,7 @@ import app.revanced.patches.twitch.misc.settings.bytecode.patch.SettingsPatch
@Patch @Patch
@DependsOn([VideoAdsPatch::class, IntegrationsPatch::class, SettingsPatch::class]) @DependsOn([VideoAdsPatch::class, IntegrationsPatch::class, SettingsPatch::class])
@Name("block-embedded-ads") @Name("block-embedded-ads")
@Description("Blocks embedded steam ads using services like TTV.lol or PurpleAdBlocker.") @Description("Blocks embedded stream ads using services like TTV.lol or PurpleAdBlocker.")
@EmbeddedAdsCompatibility @EmbeddedAdsCompatibility
@Version("0.0.1") @Version("0.0.1")
class EmbeddedAdsPatch : BytecodePatch( class EmbeddedAdsPatch : BytecodePatch(

View File

@@ -31,18 +31,11 @@ class HideButtonsPatch : ResourcePatch {
StringResource("revanced_hide_buttons_title", "Hide action buttons"), StringResource("revanced_hide_buttons_title", "Hide action buttons"),
listOf( listOf(
SwitchPreference( SwitchPreference(
"revanced_hide_like_button", "revanced_hide_like_dislike_button",
StringResource("revanced_hide_like_button_title", "Hide like button"), StringResource("revanced_hide_like_dislike_button_title", "Hide like and dislike buttons"),
false, false,
StringResource("revanced_hide_like_button_summary_on", "Like button is hidden"), StringResource("revanced_hide_like_dislike_button_summary_on", "Like and dislike buttons are hidden"),
StringResource("revanced_hide_like_button_summary_off", "Like button is shown") StringResource("revanced_hide_like_dislike_button_summary_off", "Like and dislike buttons are shown")
),
SwitchPreference(
"revanced_hide_dislike_button",
StringResource("revanced_hide_dislike_button_title", "Hide dislike button"),
false,
StringResource("revanced_hide_dislike_button_summary_on", "Dislike button is hidden"),
StringResource("revanced_hide_dislike_button_summary_off", "Dislike button is shown")
), ),
SwitchPreference( SwitchPreference(
"revanced_hide_download_button", "revanced_hide_download_button",
@@ -59,18 +52,20 @@ class HideButtonsPatch : ResourcePatch {
StringResource("revanced_hide_playlist_button_summary_off", "Playlist button is shown") StringResource("revanced_hide_playlist_button_summary_off", "Playlist button is shown")
), ),
SwitchPreference( SwitchPreference(
"revanced_hide_action_button", "revanced_hide_clip_button",
StringResource("revanced_hide_action_button_title", "Hide create, clip and thanks buttons"), StringResource("revanced_hide_clip_button_title", "Hide clip button"),
true, false,
StringResource("revanced_hide_action_button_summary_on", "Buttons are hidden"), StringResource("revanced_hide_clip_button_summary_on", "Clip button is hidden"),
StringResource("revanced_hide_action_button_summary_off", "Buttons are shown") StringResource("revanced_hide_clip_button_summary_off", "Clip button is shown"),
StringResource("revanced_hide_clip_button_user_dialog_message",
"Hiding the clip button might not work reliably. In the case it does not work, it can only be hidden by enabling \\'Hide all other action buttons\\'")
), ),
SwitchPreference( SwitchPreference(
"revanced_hide_share_button", "revanced_hide_action_buttons",
StringResource("revanced_hide_share_button_title", "Hide share button"), StringResource("revanced_hide_action_buttons_title", "Hide all other action buttons"),
false, false,
StringResource("revanced_hide_share_button_summary_on", "Share button is hidden"), StringResource("revanced_hide_action_buttons_summary_on", "Share, remix, thanks, shop, live chat buttons are hidden"),
StringResource("revanced_hide_share_button_summaryoff", "Share button is shown") StringResource("revanced_hide_action_buttons_summary_off", "Share, remix, thanks, shop, live chat buttons are shown")
) )
), ),
StringResource("revanced_hide_buttons_summary", "Hide or show buttons under videos") StringResource("revanced_hide_buttons_summary", "Hide or show buttons under videos")

View File

@@ -10,11 +10,12 @@ object ShortsTextComponentParentFingerprint : MethodFingerprint(
access = AccessFlags.PROTECTED or AccessFlags.FINAL, access = AccessFlags.PROTECTED or AccessFlags.FINAL,
parameters = listOf("L", "L"), parameters = listOf("L", "L"),
opcodes = listOf( opcodes = listOf(
Opcode.IF_EQZ, Opcode.INVOKE_STATIC,
Opcode.CONST_4, Opcode.MOVE_RESULT_OBJECT,
Opcode.IF_EQ, Opcode.GOTO,
Opcode.CONST_4, Opcode.INVOKE_STATIC,
Opcode.IF_EQ, Opcode.MOVE_RESULT_OBJECT,
Opcode.INVOKE_VIRTUAL,
Opcode.RETURN_VOID, Opcode.RETURN_VOID,
Opcode.IGET_OBJECT, Opcode.IGET_OBJECT,
Opcode.CHECK_CAST, Opcode.CHECK_CAST,

View File

@@ -0,0 +1,34 @@
package app.revanced.patches.youtube.layout.returnyoutubedislike.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
/**
* Resolves against the same method that [TextComponentContextFingerprint] resolves to.
*/
object TextComponentAtomicReferenceFingerprint : MethodFingerprint(
returnType = "L",
access = AccessFlags.PROTECTED or AccessFlags.FINAL,
parameters = listOf("L"),
opcodes = listOf(
Opcode.MOVE_OBJECT, // available unused register
Opcode.MOVE_OBJECT_FROM16,
Opcode.MOVE_OBJECT_FROM16,
Opcode.MOVE_FROM16,
Opcode.INVOKE_VIRTUAL, // CharSequence atomic reference
Opcode.MOVE_RESULT_OBJECT,
Opcode.CHECK_CAST,
Opcode.MOVE_OBJECT, // CharSequence reference, and control flow label. Insert code here.
Opcode.INVOKE_VIRTUAL_RANGE,
Opcode.MOVE_RESULT,
Opcode.IF_EQZ,
Opcode.INVOKE_VIRTUAL_RANGE,
Opcode.MOVE_RESULT_OBJECT,
Opcode.GOTO,
Opcode.CONST_4,
Opcode.INVOKE_VIRTUAL_RANGE,
Opcode.MOVE_RESULT_OBJECT,
)
)

View File

@@ -0,0 +1,24 @@
package app.revanced.patches.youtube.layout.returnyoutubedislike.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
/**
* Resolves against the same method that [TextComponentContextFingerprint] resolves to.
*/
object TextComponentContextFingerprint : MethodFingerprint(
returnType = "L",
access = AccessFlags.PROTECTED or AccessFlags.FINAL,
parameters = listOf("L"),
opcodes = listOf(
Opcode.IGET_OBJECT, // conversion context field name
Opcode.IGET_OBJECT,
Opcode.IGET_OBJECT,
Opcode.IGET_BOOLEAN,
Opcode.IGET,
Opcode.IGET,
Opcode.IGET,
)
)

View File

@@ -1,14 +0,0 @@
package app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.Opcode
object TextReferenceFingerprint : MethodFingerprint(
opcodes = listOf(
Opcode.INVOKE_STATIC_RANGE,
Opcode.MOVE_RESULT_OBJECT,
Opcode.INVOKE_DIRECT,
Opcode.INVOKE_VIRTUAL
)
)

View File

@@ -1,11 +0,0 @@
package app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import org.jf.dexlib2.Opcode
object TextReferenceParamFingerprint : MethodFingerprint(
opcodes = listOf(
Opcode.MOVE_OBJECT,
Opcode.MOVE_OBJECT_FROM16 // the first occurrence of this instruction uses the register for the text object
)
)

View File

@@ -9,6 +9,7 @@ import app.revanced.patcher.data.toMethodWalker
import app.revanced.patcher.extensions.MethodFingerprintExtensions.name import app.revanced.patcher.extensions.MethodFingerprintExtensions.name
import app.revanced.patcher.extensions.addInstructions import app.revanced.patcher.extensions.addInstructions
import app.revanced.patcher.extensions.instruction import app.revanced.patcher.extensions.instruction
import app.revanced.patcher.extensions.replaceInstruction
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint
import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint.Companion.resolve import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint.Companion.resolve
import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.BytecodePatch
@@ -25,8 +26,8 @@ import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch
import app.revanced.patches.youtube.misc.playertype.patch.PlayerTypeHookPatch import app.revanced.patches.youtube.misc.playertype.patch.PlayerTypeHookPatch
import app.revanced.patches.youtube.misc.video.videoid.patch.VideoIdPatch import app.revanced.patches.youtube.misc.video.videoid.patch.VideoIdPatch
import org.jf.dexlib2.builder.instruction.BuilderInstruction35c import org.jf.dexlib2.builder.instruction.BuilderInstruction35c
import org.jf.dexlib2.iface.instruction.FiveRegisterInstruction
import org.jf.dexlib2.iface.instruction.OneRegisterInstruction import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
import org.jf.dexlib2.iface.instruction.ReferenceInstruction
import org.jf.dexlib2.iface.instruction.TwoRegisterInstruction import org.jf.dexlib2.iface.instruction.TwoRegisterInstruction
@Patch @Patch
@@ -52,13 +53,13 @@ class ReturnYouTubeDislikePatch : BytecodePatch(
) )
) { ) {
override fun execute(context: BytecodeContext): PatchResult { override fun execute(context: BytecodeContext): PatchResult {
// region Inject newVideoLoaded event handler // region Inject newVideoLoaded event handler to update dislikes when a new video is loaded.
VideoIdPatch.injectCall("$INTEGRATIONS_PATCH_CLASS_DESCRIPTOR->newVideoLoaded(Ljava/lang/String;)V") VideoIdPatch.injectCall("$INTEGRATIONS_PATCH_CLASS_DESCRIPTOR->newVideoLoaded(Ljava/lang/String;)V")
// endregion // endregion
// region Hook interaction // region Hook like/dislike/remove like button clicks to send votes to the API.
listOf( listOf(
LikeFingerprint.toPatch(Vote.LIKE), LikeFingerprint.toPatch(Vote.LIKE),
@@ -78,39 +79,56 @@ class ReturnYouTubeDislikePatch : BytecodePatch(
// endregion // endregion
// region Hook components // region Hook creation of Spans and the cached lookup of them.
TextReferenceFingerprint.also { // Alternatively the hook can be made at the creation of Spans in TextComponentSpec,
// And it works in all situations except it fails to update the Span when the user dislikes,
// since the underlying (likes only) text did not change.
// This hook handles all situations, as it's where the created Spans are stored and later reused.
TextComponentContextFingerprint.also {
it.resolve( it.resolve(
context, context,
TextComponentConstructorFingerprint.result!!.classDef TextComponentConstructorFingerprint.result!!.classDef
) )
}.result?.let { result -> }.result?.also { result ->
val moveTextRefParamInstructionIndex = TextReferenceParamFingerprint.also { if (!TextComponentAtomicReferenceFingerprint.resolve(context, result.method, result.classDef))
if (!TextReferenceParamFingerprint.resolve(context, result.method, result.classDef)) throw TextComponentAtomicReferenceFingerprint.toErrorResult()
return TextReferenceParamFingerprint.toErrorResult() }?.let { textComponentContextFingerprintResult ->
}.result!!.scanResult.patternScanResult!!.endIndex val conversionContextIndex = textComponentContextFingerprintResult
.scanResult.patternScanResult!!.startIndex
val atomicReferenceStartIndex = TextComponentAtomicReferenceFingerprint.result!!
.scanResult.patternScanResult!!.startIndex
result.mutableMethod.apply { textComponentContextFingerprintResult.mutableMethod.apply {
val insertIndex = result.scanResult.patternScanResult!!.endIndex // Get the conversion context obfuscated field name, and the registers for the AtomicReference and CharSequence
val conversionContextFieldName =
(instruction(conversionContextIndex) as ReferenceInstruction).reference.toString()
val contextRegister = // any free register
(instruction(atomicReferenceStartIndex) as TwoRegisterInstruction).registerB
val atomicReferenceRegister =
(instruction(atomicReferenceStartIndex + 4) as BuilderInstruction35c).registerC
val atomicReferenceInstruction = (instruction(insertIndex - 1) as FiveRegisterInstruction) val insertIndex = atomicReferenceStartIndex + 7
val conversionContextParam = atomicReferenceInstruction.registerC val moveCharSequenceInstruction = instruction(insertIndex) as TwoRegisterInstruction
val textRefParam = (instruction(moveTextRefParamInstructionIndex) as TwoRegisterInstruction).registerA val charSequenceRegister = moveCharSequenceInstruction.registerB
// Overwritten after injected code, which is why it can be used.
val clobberRegister = atomicReferenceInstruction.registerD
// Insert as first instructions at the control flow label.
// Must replace the existing instruction to preserve the label, and then insert the remaining instructions.
replaceInstruction(insertIndex, "move-object/from16 v$contextRegister, p0")
addInstructions( addInstructions(
insertIndex, insertIndex + 1, """
""" iget-object v$contextRegister, v$contextRegister, $conversionContextFieldName # copy obfuscated context field into free register
# required instruction, otherwise register might be out of range invoke-static {v$contextRegister, v$atomicReferenceRegister, v$charSequenceRegister}, $INTEGRATIONS_PATCH_CLASS_DESCRIPTOR->onLithoTextLoaded(Ljava/lang/Object;Ljava/util/concurrent/atomic/AtomicReference;Ljava/lang/CharSequence;)Ljava/lang/CharSequence;
move-object/from16 v$clobberRegister, v$textRefParam move-result-object v$charSequenceRegister
invoke-static {v$clobberRegister, v$conversionContextParam}, $ON_COMPONENT_CREATED_DESCRIPTOR move-object v${moveCharSequenceInstruction.registerA}, v${moveCharSequenceInstruction.registerB} # original instruction at the insertion point
""" """
) )
} }
} ?: return TextReferenceFingerprint.toErrorResult() } ?: return TextComponentContextFingerprint.toErrorResult()
// endregion
// region Hook for Short videos.
ShortsTextComponentParentFingerprint.result?.let { ShortsTextComponentParentFingerprint.result?.let {
context context
@@ -123,22 +141,23 @@ class ReturnYouTubeDislikePatch : BytecodePatch(
return PatchResultError("Method signature did not match: $this $parameterTypes") return PatchResultError("Method signature did not match: $this $parameterTypes")
val insertIndex = implementation!!.instructions.size - 1 val insertIndex = implementation!!.instructions.size - 1
val spannedParameterRegister = (instruction(insertIndex) as OneRegisterInstruction).registerA val spannedParameterRegister = (instruction(insertIndex) as OneRegisterInstruction).registerA
val parameter = (instruction(insertIndex - 2) as BuilderInstruction35c).reference val parameter = (instruction(insertIndex - 2) as BuilderInstruction35c).reference
if (!parameter.toString().endsWith("Landroid/text/Spanned;")) if (!parameter.toString().endsWith("Landroid/text/Spanned;"))
return PatchResultError("Method signature parameter did not match: $parameter") return PatchResultError("Method signature parameter did not match: $parameter")
addInstructions( insertShorts(insertIndex, spannedParameterRegister)
insertIndex,
"""
invoke-static {v$spannedParameterRegister}, $INTEGRATIONS_PATCH_CLASS_DESCRIPTOR->onShortsComponentCreated(Landroid/text/Spanned;)Landroid/text/Spanned;
move-result-object v$spannedParameterRegister
"""
)
} }
} }
// Additional hook, called after user dislikes.
with(it.mutableMethod) {
val insertIndex = it.scanResult.patternScanResult!!.startIndex + 2
val overwriteRegister = (implementation!!.instructions.elementAt(insertIndex - 1)
as OneRegisterInstruction).registerA
insertShorts(insertIndex, overwriteRegister)
}
} ?: return ShortsTextComponentParentFingerprint.toErrorResult() } ?: return ShortsTextComponentParentFingerprint.toErrorResult()
// endregion // endregion
@@ -150,17 +169,21 @@ class ReturnYouTubeDislikePatch : BytecodePatch(
const val INTEGRATIONS_PATCH_CLASS_DESCRIPTOR = const val INTEGRATIONS_PATCH_CLASS_DESCRIPTOR =
"Lapp/revanced/integrations/patches/ReturnYouTubeDislikePatch;" "Lapp/revanced/integrations/patches/ReturnYouTubeDislikePatch;"
const val ON_COMPONENT_CREATED_DESCRIPTOR =
"$INTEGRATIONS_PATCH_CLASS_DESCRIPTOR->onComponentCreated(Ljava/lang/Object;Ljava/util/concurrent/atomic/AtomicReference;)V"
private fun MethodFingerprint.toPatch(voteKind: Vote) = VotePatch(this, voteKind) private fun MethodFingerprint.toPatch(voteKind: Vote) = VotePatch(this, voteKind)
} private data class VotePatch(val fingerprint: MethodFingerprint, val voteKind: Vote)
private enum class Vote(val value: Int) {
LIKE(1),
DISLIKE(-1),
REMOVE_LIKE(0)
}
private data class VotePatch(val fingerprint: MethodFingerprint, val voteKind: Vote) private fun MutableMethod.insertShorts(index: Int, register: Int) {
addInstructions(
private enum class Vote(val value: Int) { index, """
LIKE(1), invoke-static {v$register}, $INTEGRATIONS_PATCH_CLASS_DESCRIPTOR->onShortsComponentCreated(Landroid/text/Spanned;)Landroid/text/Spanned;
DISLIKE(-1), move-result-object v$register
REMOVE_LIKE(0) """
)
}
} }
} }

View File

@@ -14,6 +14,7 @@ import app.revanced.patcher.patch.PatchResultSuccess
import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.patch.annotations.DependsOn
import app.revanced.patcher.patch.annotations.Patch import app.revanced.patcher.patch.annotations.Patch
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
import app.revanced.patches.shared.misc.fix.spoof.patch.ClientSpoofPatch
import app.revanced.patches.shared.settings.preference.impl.StringResource import app.revanced.patches.shared.settings.preference.impl.StringResource
import app.revanced.patches.shared.settings.preference.impl.SwitchPreference import app.revanced.patches.shared.settings.preference.impl.SwitchPreference
import app.revanced.patches.youtube.misc.fix.playback.annotation.ProtobufSpoofCompatibility import app.revanced.patches.youtube.misc.fix.playback.annotation.ProtobufSpoofCompatibility
@@ -27,9 +28,14 @@ import org.jf.dexlib2.iface.instruction.OneRegisterInstruction
@Patch @Patch
@Name("spoof-signature-verification") @Name("spoof-signature-verification")
@Description("Spoofs the client to prevent playback issues.") @Description("Spoofs a patched client to prevent playback issues.")
@ProtobufSpoofCompatibility @ProtobufSpoofCompatibility
@DependsOn([IntegrationsPatch::class, SettingsPatch::class, PlayerTypeHookPatch::class]) @DependsOn([
IntegrationsPatch::class,
SettingsPatch::class,
PlayerTypeHookPatch::class,
ClientSpoofPatch::class
])
@Version("0.0.1") @Version("0.0.1")
class SpoofSignatureVerificationPatch : BytecodePatch( class SpoofSignatureVerificationPatch : BytecodePatch(
listOf( listOf(

View File

@@ -25,10 +25,9 @@ import app.revanced.util.microg.MicroGBytecodeHelper
[ [
MicroGResourcePatch::class, MicroGResourcePatch::class,
HideCastButtonPatch::class, HideCastButtonPatch::class,
ClientSpoofPatch::class
] ]
) )
@Name("microg-support") @Name("vanced-microg-support")
@Description("Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG.") @Description("Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG.")
@MicroGPatchCompatibility @MicroGPatchCompatibility
@Version("0.0.1") @Version("0.0.1")

View File

@@ -47,8 +47,7 @@ class HideAdsPatch : BytecodePatch(
"hero_promo_image", "hero_promo_image",
"statement_banner", "statement_banner",
"primetime_promo", "primetime_promo",
"carousel_footered_layout", "carousel_footered_layout"
"feature_grid_interstitial"
).forEach { component -> ).forEach { component ->
addInstructions( addInstructions(
insertIndex, """ insertIndex, """

View File

@@ -44,6 +44,8 @@
<string name="sb_segments_selfpromo_sum">Similar to \'Sponsor\' except for unpaid or self promotion. Includes sections about merchandise, donations, or information about who they collaborated with</string> <string name="sb_segments_selfpromo_sum">Similar to \'Sponsor\' except for unpaid or self promotion. Includes sections about merchandise, donations, or information about who they collaborated with</string>
<string name="sb_segments_interaction">Interaction Reminder (Subscribe)</string> <string name="sb_segments_interaction">Interaction Reminder (Subscribe)</string>
<string name="sb_segments_interaction_sum">A short reminder to like, subscribe or follow them in the middle of content. If it is long or about something specific, it should instead be under self promotion</string> <string name="sb_segments_interaction_sum">A short reminder to like, subscribe or follow them in the middle of content. If it is long or about something specific, it should instead be under self promotion</string>
<string name="sb_segments_highlight">Highlight</string>
<string name="sb_segments_highlight_sum">The part of the video that most people are looking for</string>
<string name="sb_segments_intro">Intermission/Intro Animation</string> <string name="sb_segments_intro">Intermission/Intro Animation</string>
<string name="sb_segments_intro_sum">An interval without actual content. Could be a pause, static frame, or repeating animation. Does not include transitions containing information</string> <string name="sb_segments_intro_sum">An interval without actual content. Could be a pause, static frame, or repeating animation. Does not include transitions containing information</string>
<string name="sb_segments_outro">Endcards/Credits</string> <string name="sb_segments_outro">Endcards/Credits</string>
@@ -56,9 +58,11 @@
<string name="sb_segments_nomusic_sum">Only for use in music videos. Sections of music videos without music, that aren\'t already covered by another category</string> <string name="sb_segments_nomusic_sum">Only for use in music videos. Sections of music videos without music, that aren\'t already covered by another category</string>
<string name="sb_skip_button_compact">Skip</string> <string name="sb_skip_button_compact">Skip</string>
<string name="sb_skip_button_compact_highlight">Highlight</string>
<string name="sb_skip_button_sponsor">Skip sponsor</string> <string name="sb_skip_button_sponsor">Skip sponsor</string>
<string name="sb_skip_button_selfpromo">Skip promo</string> <string name="sb_skip_button_selfpromo">Skip promo</string>
<string name="sb_skip_button_interaction">Skip interact</string> <string name="sb_skip_button_interaction">Skip interact</string>
<string name="sb_skip_button_highlight">Skip to highlight</string>
<string name="sb_skip_button_intro_beginning">Skip intro</string> <string name="sb_skip_button_intro_beginning">Skip intro</string>
<string name="sb_skip_button_intro_middle">Skip intermission</string> <string name="sb_skip_button_intro_middle">Skip intermission</string>
<string name="sb_skip_button_intro_end">Skip intermission</string> <string name="sb_skip_button_intro_end">Skip intermission</string>
@@ -73,6 +77,7 @@
<string name="sb_skipped_sponsor">Skipped sponsor</string> <string name="sb_skipped_sponsor">Skipped sponsor</string>
<string name="sb_skipped_selfpromo">Skipped self promotion</string> <string name="sb_skipped_selfpromo">Skipped self promotion</string>
<string name="sb_skipped_interaction">Skipped annoying reminder</string> <string name="sb_skipped_interaction">Skipped annoying reminder</string>
<string name="sb_skipped_highlight">Skipped to highlight</string>
<string name="sb_skipped_intro_beginning">Skipped intro</string> <string name="sb_skipped_intro_beginning">Skipped intro</string>
<string name="sb_skipped_intro_middle">Skipped intermission</string> <string name="sb_skipped_intro_middle">Skipped intermission</string>
<string name="sb_skipped_intro_end">Skipped intermission</string> <string name="sb_skipped_intro_end">Skipped intermission</string>
@@ -92,7 +97,7 @@
<string name="sb_skip_ignore">Disable</string> <string name="sb_skip_ignore">Disable</string>
<string name="sb_about">About</string> <string name="sb_about">About</string>
<string name="sb_about_api">Sponsor.Ajay.app</string> <string name="sb_about_api">sponsor.ajay.app</string>
<string name="sb_about_api_sum">Data is provided by the SponsorBlock API. Tap here to learn more and see downloads for other platforms</string> <string name="sb_about_api_sum">Data is provided by the SponsorBlock API. Tap here to learn more and see downloads for other platforms</string>
<string name="sb_about_made_by">ReVanced integration by JakubWeg,\nrecoded by oSumAtrIX</string> <string name="sb_about_made_by">ReVanced integration by JakubWeg,\nrecoded by oSumAtrIX</string>
@@ -119,7 +124,7 @@
<string name="sb_new_segment_choose_category">Choose the segment category</string> <string name="sb_new_segment_choose_category">Choose the segment category</string>
<string name="sb_new_segment_disabled_category">Category is disabled in settings. Enable category to submit.</string> <string name="sb_new_segment_disabled_category">Category is disabled in settings. Enable category to submit.</string>
<string name="sb_new_segment_title">New SponsorBlock segment</string> <string name="sb_new_segment_title">New SponsorBlock segment</string>
<string name="sb_new_segment_mark_time_as_question" formatted="false">Set %02d:%02d:%04d as the start or end of a new segment?</string> <string name="sb_new_segment_mark_time_as_question" formatted="false">Set %02d:%02d:%03d as the start or end of a new segment?</string>
<string name="sb_new_segment_mark_start">start</string> <string name="sb_new_segment_mark_start">start</string>
<string name="sb_new_segment_mark_end">end</string> <string name="sb_new_segment_mark_end">end</string>
<string name="sb_new_segment_now">now</string> <string name="sb_new_segment_now">now</string>
@@ -127,6 +132,7 @@
<string name="sb_new_segment_time_end">Time the segment ends at</string> <string name="sb_new_segment_time_end">Time the segment ends at</string>
<string name="sb_new_segment_confirm_title">Are the times correct?</string> <string name="sb_new_segment_confirm_title">Are the times correct?</string>
<string name="sb_new_segment_confirm_content" formatted="false">The segment lasts from %02d:%02d to %02d:%02d (%d minutes %02d seconds)\nIs it ready to submit?</string> <string name="sb_new_segment_confirm_content" formatted="false">The segment lasts from %02d:%02d to %02d:%02d (%d minutes %02d seconds)\nIs it ready to submit?</string>
<string name="sb_new_segment_start_is_before_end">Start must be before the end</string>
<string name="sb_new_segment_mark_locations_first">Mark two locations on the time bar first</string> <string name="sb_new_segment_mark_locations_first">Mark two locations on the time bar first</string>
<string name="sb_new_segment_preview_segment_first">Preview the segment, and ensure it skips smoothly</string> <string name="sb_new_segment_preview_segment_first">Preview the segment, and ensure it skips smoothly</string>
<string name="sb_new_segment_edit_by_hand_title">Edit timing of segment manually</string> <string name="sb_new_segment_edit_by_hand_title">Edit timing of segment manually</string>
@@ -148,7 +154,7 @@
<string name="sb_stats_username_change">Tap here to change your username</string> <string name="sb_stats_username_change">Tap here to change your username</string>
<string name="sb_stats_username_change_unknown_error" formatted="false">Unable to change username: Status: %d %s</string> <string name="sb_stats_username_change_unknown_error" formatted="false">Unable to change username: Status: %d %s</string>
<string name="sb_stats_username_changed">Username successfully changed</string> <string name="sb_stats_username_changed">Username successfully changed</string>
<string name="sb_stats_reputation" formatted="false">You\'re reputation is &lt;b>%.2f&lt;/b></string> <string name="sb_stats_reputation" formatted="false">Your reputation is &lt;b>%.2f&lt;/b></string>
<string name="sb_stats_submissions" formatted="false">You\'ve created &lt;b>%s&lt;/b> segments</string> <string name="sb_stats_submissions" formatted="false">You\'ve created &lt;b>%s&lt;/b> segments</string>
<string name="sb_stats_saved_zero">SponsorBlock leaderboard</string> <string name="sb_stats_saved_zero">SponsorBlock leaderboard</string>
<string name="sb_stats_saved" formatted="false">You\'ve saved people from &lt;b>%s&lt;/b> segments</string> <string name="sb_stats_saved" formatted="false">You\'ve saved people from &lt;b>%s&lt;/b> segments</string>

View File

@@ -1,6 +1,28 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"> <merge xmlns:android="http://schemas.android.com/apk/res/android">
<app.revanced.integrations.sponsorblock.ui.SkipSponsorButton
android:id="@+id/sb_skip_highlight_button"
android:contentDescription="@string/sb_skip_button_compact_highlight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true"
android:layout_marginBottom="@dimen/inline_controls_bottom_bar_height"
android:focusable="true"
android:visibility="gone" />
<app.revanced.integrations.sponsorblock.ui.SkipSponsorButton
android:id="@+id/sb_skip_sponsor_button"
android:contentDescription="@string/sb_skip_button_compact"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_marginBottom="@dimen/inline_controls_bottom_bar_height"
android:focusable="true"
android:visibility="gone" />
<app.revanced.integrations.sponsorblock.ui.NewSegmentLayout <app.revanced.integrations.sponsorblock.ui.NewSegmentLayout
android:id="@+id/sb_new_segment_view" android:id="@+id/sb_new_segment_view"
android:layout_width="wrap_content" android:layout_width="wrap_content"
@@ -10,14 +32,4 @@
android:layout_marginBottom="@dimen/brand_interaction_default_bottom_margin" android:layout_marginBottom="@dimen/brand_interaction_default_bottom_margin"
android:focusable="true" android:focusable="true"
android:visibility="gone" /> android:visibility="gone" />
<app.revanced.integrations.sponsorblock.ui.SkipSponsorButton
android:id="@+id/sb_skip_sponsor_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_marginBottom="@dimen/inline_controls_bottom_bar_height"
android:focusable="true"
android:visibility="gone" />
</merge> </merge>

View File

@@ -7,7 +7,6 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="32dp" android:layout_height="32dp"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:contentDescription="@string/sb_skip_button_compact"
android:orientation="horizontal" android:orientation="horizontal"
android:padding="8dp"> android:padding="8dp">