1
mirror of https://github.com/revanced/revanced-integrations synced 2025-11-19 03:23:27 +01:00

Compare commits

...

234 Commits

Author SHA1 Message Date
semantic-release-bot
b25ab1a0d8 chore(release): 0.119.2-dev.1 [skip ci]
## [0.119.2-dev.1](https://github.com/ReVanced/revanced-integrations/compare/v0.119.1...v0.119.2-dev.1) (2023-10-12)

### Bug Fixes

* **YouTube - ReturnYouTubeDislike:** Fix dislikes not showing on Shorts ([#495](https://github.com/ReVanced/revanced-integrations/issues/495)) ([9b2add7](9b2add7553))
2023-10-12 09:31:39 +00:00
LisoUseInAIKyrios
9b2add7553 fix(YouTube - ReturnYouTubeDislike): Fix dislikes not showing on Shorts (#495) 2023-10-12 12:27:38 +03:00
semantic-release-bot
dceaf7a1ec chore(release): 0.119.1 [skip ci]
## [0.119.1](https://github.com/ReVanced/revanced-integrations/compare/v0.119.0...v0.119.1) (2023-10-09)

### Bug Fixes

* **YouTube - Hide shorts components:** Do not hide subscribe button outside of Shorts ([1479d6b](1479d6bc26))
2023-10-09 17:02:49 +00:00
oSumAtrIX
49d9bf80f2 chore: Merge branch dev to main (#494) 2023-10-09 18:59:05 +02:00
semantic-release-bot
8a40ca616e chore(release): 0.119.1-dev.1 [skip ci]
## [0.119.1-dev.1](https://github.com/ReVanced/revanced-integrations/compare/v0.119.0...v0.119.1-dev.1) (2023-10-08)

### Bug Fixes

* **YouTube - Hide shorts components:** Do not hide subscribe button outside of Shorts ([1479d6b](1479d6bc26))
2023-10-08 19:13:01 +00:00
oSumAtrIX
1479d6bc26 fix(YouTube - Hide shorts components): Do not hide subscribe button outside of Shorts 2023-10-08 21:08:29 +02:00
semantic-release-bot
771dd608dc chore(release): 0.119.0 [skip ci]
# [0.119.0](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0...v0.119.0) (2023-10-08)

### Bug Fixes

* **YouTube - Hide shorts components:** Add filter to filter group list ([30788ba](30788ba1a3))
* **YouTube - Hide shorts components:** Do not prevent filtering components ([6eb3017](6eb301776e))
* **YouTube - Hide shorts components:** Hide the subscribe button when paused ([6730aaf](6730aaf2b8))
* **YouTube - ReturnYouTubeDislike:** Do not retry API call if same fetch recently failed ([#493](https://github.com/ReVanced/revanced-integrations/issues/493)) ([486c894](486c894257))

### Features

* **YouTube - Hide shorts components:** Hide subscribe button when paused separately from subscribe button ([3ac869f](3ac869fa6a))
* **YouTube - Return YouTube Dislike:** Support version `18.37.36` ([#490](https://github.com/ReVanced/revanced-integrations/issues/490)) ([245c3b3](245c3b3537))
* **YouTube:** Add `Disable fine scrubbing gesture` patch ([4498f39](4498f39b8c))
2023-10-08 01:48:56 +00:00
oSumAtrIX
92523fe1f7 chore: Merge branch dev to main (#492) 2023-10-08 03:43:41 +02:00
semantic-release-bot
a1477c097c chore(release): 0.119.0-dev.6 [skip ci]
# [0.119.0-dev.6](https://github.com/ReVanced/revanced-integrations/compare/v0.119.0-dev.5...v0.119.0-dev.6) (2023-10-07)

### Bug Fixes

* **YouTube - ReturnYouTubeDislike:** Do not retry API call if same fetch recently failed ([#493](https://github.com/ReVanced/revanced-integrations/issues/493)) ([486c894](486c894257))
2023-10-07 19:09:57 +00:00
LisoUseInAIKyrios
486c894257 fix(YouTube - ReturnYouTubeDislike): Do not retry API call if same fetch recently failed (#493) 2023-10-07 23:06:10 +04:00
semantic-release-bot
78b5fe2128 chore(release): 0.119.0-dev.5 [skip ci]
# [0.119.0-dev.5](https://github.com/ReVanced/revanced-integrations/compare/v0.119.0-dev.4...v0.119.0-dev.5) (2023-10-07)

### Features

* **YouTube - Return YouTube Dislike:** Support version `18.37.36` ([#490](https://github.com/ReVanced/revanced-integrations/issues/490)) ([245c3b3](245c3b3537))
2023-10-07 09:35:05 +00:00
oSumAtrIX
245c3b3537 feat(YouTube - Return YouTube Dislike): Support version 18.37.36 (#490)
Co-authored-by: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com>
2023-10-07 13:31:25 +04:00
semantic-release-bot
d4b859d6fb chore(release): 0.119.0-dev.4 [skip ci]
# [0.119.0-dev.4](https://github.com/ReVanced/revanced-integrations/compare/v0.119.0-dev.3...v0.119.0-dev.4) (2023-10-07)

### Features

* **YouTube:** Add `Disable fine scrubbing gesture` patch ([4498f39](4498f39b8c))
2023-10-07 01:54:40 +00:00
oSumAtrIX
4498f39b8c feat(YouTube): Add Disable fine scrubbing gesture patch 2023-10-07 03:50:41 +02:00
semantic-release-bot
176196b52c chore(release): 0.119.0-dev.3 [skip ci]
# [0.119.0-dev.3](https://github.com/ReVanced/revanced-integrations/compare/v0.119.0-dev.2...v0.119.0-dev.3) (2023-10-06)

### Bug Fixes

* **YouTube - Hide shorts components:** Add filter to filter group list ([30788ba](30788ba1a3))
2023-10-06 10:42:02 +00:00
oSumAtrIX
30788ba1a3 fix(YouTube - Hide shorts components): Add filter to filter group list 2023-10-06 12:38:05 +02:00
semantic-release-bot
1d13cf2d5d chore(release): 0.119.0-dev.2 [skip ci]
# [0.119.0-dev.2](https://github.com/ReVanced/revanced-integrations/compare/v0.119.0-dev.1...v0.119.0-dev.2) (2023-10-06)

### Bug Fixes

* **YouTube - Hide shorts components:** Do not prevent filtering components ([6eb3017](6eb301776e))
2023-10-06 00:40:20 +00:00
oSumAtrIX
6eb301776e fix(YouTube - Hide shorts components): Do not prevent filtering components
Previously, the exceptions group prevented filtering the "Notify me" button and in feed surveys.
2023-10-06 02:36:38 +02:00
semantic-release-bot
ed6571734e chore(release): 0.119.0-dev.1 [skip ci]
# [0.119.0-dev.1](https://github.com/ReVanced/revanced-integrations/compare/v0.118.1-dev.1...v0.119.0-dev.1) (2023-10-05)

### Features

* **YouTube - Hide shorts components:** Hide subscribe button when paused separately from subscribe button ([3ac869f](3ac869fa6a))
2023-10-05 16:53:23 +00:00
oSumAtrIX
3ac869fa6a feat(YouTube - Hide shorts components): Hide subscribe button when paused separately from subscribe button 2023-10-05 18:48:53 +02:00
semantic-release-bot
d47fd19d0b chore(release): 0.118.1-dev.1 [skip ci]
## [0.118.1-dev.1](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0...v0.118.1-dev.1) (2023-10-05)

### Bug Fixes

* **YouTube - Hide shorts components:** Hide the subscribe button when paused ([6730aaf](6730aaf2b8))
2023-10-05 02:44:51 +00:00
oSumAtrIX
6730aaf2b8 fix(YouTube - Hide shorts components): Hide the subscribe button when paused 2023-10-05 03:50:05 +02:00
semantic-release-bot
1efd5c8315 chore(release): 0.118.0 [skip ci]
# [0.118.0](https://github.com/ReVanced/revanced-integrations/compare/v0.117.1...v0.118.0) (2023-10-04)

### Bug Fixes

* Do not always hide the component ([3d0fc1d](3d0fc1d610))
* Remove parameter from route ([4b0925e](4b0925e337))
* **YouTube - Client spoof:** Display seekbar thumbnails in high quality ([f71c1a0](f71c1a0c15))
* **YouTube - Client spoof:** Do not record feed videos to history by default ([#478](https://github.com/ReVanced/revanced-integrations/issues/478)) ([ef1cca0](ef1cca02c1))
* **YouTube - Client spoof:** fix occasionally frozen video playback ([#486](https://github.com/ReVanced/revanced-integrations/issues/486)) ([b0b6ff6](b0b6ff6a82))
* **YouTube - Client spoof:** fix storyboard fetched out of order ([#481](https://github.com/ReVanced/revanced-integrations/issues/481)) ([8398774](83987747e6))
* **YouTube - Client spoof:** Fix toast shown for live streams ([#489](https://github.com/ReVanced/revanced-integrations/issues/489)) ([27f49df](27f49dfd1e))
* **YouTube - Client spoof:** fix toast shown if opening paid or age restricted video ([#482](https://github.com/ReVanced/revanced-integrations/issues/482)) ([e72b65b](e72b65b599))
* **YouTube - Client spoof:** Removed unused code ([#480](https://github.com/ReVanced/revanced-integrations/issues/480)) ([e6903bf](e6903bff95))
* **YouTube - Client spoof:** Restore clipping videos functionality ([2cd1738](2cd1738d24))
* **YouTube - Client spoof:** Restore seekbar thumbnails ([978f630](978f630c02))
* **YouTube - Client spoof:** Show seekbar thumbnail for age restricted and paid videos ([01019b0](01019b09c1))
* **YouTube - Custom filter:** Use new lines between components instead of commas ([#475](https://github.com/ReVanced/revanced-integrations/issues/475)) ([17ed396](17ed396739))
* **YouTube - Hide info cards:** Fix info cards not hiding for some users ([#487](https://github.com/ReVanced/revanced-integrations/issues/487)) ([00c4c40](00c4c4025b))
* **YouTube - Hide layout components:** Always hide redundant 'player audio track' button ([#473](https://github.com/ReVanced/revanced-integrations/issues/473)) ([d86851b](d86851baf1))
* **YouTube - Hide layout components:** Do not hide chapters in feed unexpectedly ([bedb02e](bedb02e4f6))
* **YouTube - Hide shorts components:** Hide subscribe button in paused state ([9685070](9685070eda))
* **YouTube - ReturnYouTubeDislike:** Add debug logging to litho text ([#476](https://github.com/ReVanced/revanced-integrations/issues/476)) ([e3b8e8b](e3b8e8be41))
* **YouTube - ReturnYouTubeDislike:** Revert support for 18.37.36 ([#488](https://github.com/ReVanced/revanced-integrations/issues/488)) ([165b061](165b061fa9))
* **YouTube - SponsorBlock:** Adjust import/export UI text ([#491](https://github.com/ReVanced/revanced-integrations/issues/491)) ([4215be4](4215be4250))
* **YouTube - Video Id:** Fix video id not showing the currently playing video ([#484](https://github.com/ReVanced/revanced-integrations/issues/484)) ([da923a3](da923a38a0))
* **YouTube:** fix old quality and custom speed not working on tablets ([#477](https://github.com/ReVanced/revanced-integrations/issues/477)) ([2352fa5](2352fa5426))

### Features

* **TU Dortmund:** Add `Show on lockscreen` patch ([#472](https://github.com/ReVanced/revanced-integrations/issues/472)) ([526d66f](526d66f6a9))
* **Twitch - Block embedded ads:** Switch from `ttv.lol` to `luminous.dev` ([2c34180](2c3418041c))
* **YouTube - Hide layout components:** Disable hiding search result shelf header by default ([b280de3](b280de3195))
* **YouTube - Hide layout components:** Hide "Join" button ([e225468](e2254681cd))
* **YouTube - Hide layout components:** Hide "Notify me" button ([b87d806](b87d806659))
* **YouTube - Hide layout components:** Hide search result shelf header ([93a3045](93a30453d9))
* **YouTube - Hide layout components:** Hide timed reactions ([b472aee](b472aeeed7))
* **YouTube:** Add `Bypass URL redirects` patch ([9109653](91096532ee))
* **YouTube:** Bump compatibility to `18.37.36` ([#483](https://github.com/ReVanced/revanced-integrations/issues/483)) ([5dadb0d](5dadb0d523))

### Performance Improvements

* Only request required fields ([d20b768](d20b768bc2))
* Remove unnecessary api key parameter ([ba5e7d8](ba5e7d870e))
2023-10-04 23:41:56 +00:00
oSumAtrIX
63ddb0b31d chore: Merge branch dev to main (#474) 2023-10-05 01:37:48 +02:00
semantic-release-bot
1a702bce60 chore(release): 0.118.0-dev.24 [skip ci]
# [0.118.0-dev.24](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.23...v0.118.0-dev.24) (2023-10-03)

### Bug Fixes

* **YouTube - Hide layout components:** Do not hide chapters in feed unexpectedly ([bedb02e](bedb02e4f6))
2023-10-03 01:32:28 +00:00
oSumAtrIX
bedb02e4f6 fix(YouTube - Hide layout components): Do not hide chapters in feed unexpectedly 2023-10-03 03:28:28 +02:00
semantic-release-bot
6075c9ed17 chore(release): 0.118.0-dev.23 [skip ci]
# [0.118.0-dev.23](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.22...v0.118.0-dev.23) (2023-10-02)

### Bug Fixes

* **YouTube - SponsorBlock:** Adjust import/export UI text ([#491](https://github.com/ReVanced/revanced-integrations/issues/491)) ([4215be4](4215be4250))
2023-10-02 21:31:31 +00:00
LisoUseInAIKyrios
4215be4250 fix(YouTube - SponsorBlock): Adjust import/export UI text (#491) 2023-10-03 01:27:27 +04:00
semantic-release-bot
a198ef83dd chore(release): 0.118.0-dev.22 [skip ci]
# [0.118.0-dev.22](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.21...v0.118.0-dev.22) (2023-10-02)

### Bug Fixes

* Do not always hide the component ([3d0fc1d](3d0fc1d610))

### Features

* **YouTube - Hide layout components:** Disable hiding search result shelf header by default ([b280de3](b280de3195))
2023-10-02 20:20:31 +00:00
oSumAtrIX
b280de3195 feat(YouTube - Hide layout components): Disable hiding search result shelf header by default
The reason for this is that it also hides Shorts shelves unintentionally.
2023-10-02 22:16:06 +02:00
oSumAtrIX
3d0fc1d610 fix: Do not always hide the component 2023-10-02 22:15:29 +02:00
oSumAtrIX
25f73eb3a9 refactor: Simplify filtering a component 2023-10-02 22:05:31 +02:00
semantic-release-bot
f451d67dcb chore(release): 0.118.0-dev.21 [skip ci]
# [0.118.0-dev.21](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.20...v0.118.0-dev.21) (2023-10-02)

### Features

* **YouTube - Hide layout components:** Hide search result shelf header ([93a3045](93a30453d9))
2023-10-02 14:29:22 +00:00
oSumAtrIX
5185673780 refactor: Move classes to correct path 2023-10-02 16:25:12 +02:00
oSumAtrIX
93a30453d9 feat(YouTube - Hide layout components): Hide search result shelf header 2023-10-02 16:25:11 +02:00
semantic-release-bot
d156951460 chore(release): 0.118.0-dev.20 [skip ci]
# [0.118.0-dev.20](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.19...v0.118.0-dev.20) (2023-10-01)

### Bug Fixes

* **YouTube - Hide shorts components:** Hide subscribe button in paused state ([9685070](9685070eda))
2023-10-01 22:54:38 +00:00
oSumAtrIX
9685070eda fix(YouTube - Hide shorts components): Hide subscribe button in paused state 2023-10-02 00:50:18 +02:00
Temm
1689bf4125 refactor(Tumblr): Use a common filter patch (#479)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2023-10-01 05:12:00 +02:00
semantic-release-bot
c992289d59 chore(release): 0.118.0-dev.19 [skip ci]
# [0.118.0-dev.19](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.18...v0.118.0-dev.19) (2023-10-01)

### Features

* **YouTube - Hide layout components:** Hide "Join" button ([e225468](e2254681cd))
* **YouTube - Hide layout components:** Hide "Notify me" button ([b87d806](b87d806659))
* **YouTube - Hide layout components:** Hide timed reactions ([b472aee](b472aeeed7))
2023-10-01 03:11:33 +00:00
oSumAtrIX
e2254681cd feat(YouTube - Hide layout components): Hide "Join" button 2023-10-01 05:07:47 +02:00
oSumAtrIX
b87d806659 feat(YouTube - Hide layout components): Hide "Notify me" button 2023-10-01 05:07:47 +02:00
oSumAtrIX
b472aeeed7 feat(YouTube - Hide layout components): Hide timed reactions 2023-10-01 05:07:46 +02:00
semantic-release-bot
7dfa0e4653 chore(release): 0.118.0-dev.18 [skip ci]
# [0.118.0-dev.18](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.17...v0.118.0-dev.18) (2023-09-28)

### Bug Fixes

* **YouTube - ReturnYouTubeDislike:** Revert support for 18.37.36 ([#488](https://github.com/ReVanced/revanced-integrations/issues/488)) ([165b061](165b061fa9))
2023-09-28 13:42:52 +00:00
LisoUseInAIKyrios
165b061fa9 fix(YouTube - ReturnYouTubeDislike): Revert support for 18.37.36 (#488) 2023-09-28 17:39:11 +04:00
semantic-release-bot
78bea48e40 chore(release): 0.118.0-dev.17 [skip ci]
# [0.118.0-dev.17](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.16...v0.118.0-dev.17) (2023-09-28)

### Bug Fixes

* **YouTube - Client spoof:** Fix toast shown for live streams ([#489](https://github.com/ReVanced/revanced-integrations/issues/489)) ([27f49df](27f49dfd1e))
* **YouTube - Video Id:** Fix video id not showing the currently playing video ([#484](https://github.com/ReVanced/revanced-integrations/issues/484)) ([da923a3](da923a38a0))
2023-09-28 13:16:02 +00:00
LisoUseInAIKyrios
27f49dfd1e fix(YouTube - Client spoof): Fix toast shown for live streams (#489) 2023-09-28 17:12:14 +04:00
LisoUseInAIKyrios
da923a38a0 fix(YouTube - Video Id): Fix video id not showing the currently playing video (#484)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2023-09-28 15:11:54 +02:00
semantic-release-bot
4b256f501b chore(release): 0.118.0-dev.16 [skip ci]
# [0.118.0-dev.16](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.15...v0.118.0-dev.16) (2023-09-28)

### Features

* **YouTube:** Add `Bypass URL redirects` patch ([9109653](91096532ee))
2023-09-28 07:52:02 +00:00
LisoUseInAIKyrios
e7e02e1e30 chore: fix build 2023-09-28 11:48:27 +04:00
nullptr
cc416bc4f6 chore: Log hiding mix playlists (#485)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2023-09-28 04:49:12 +02:00
oSumAtrIX
91096532ee feat(YouTube): Add Bypass URL redirects patch 2023-09-28 04:47:40 +02:00
semantic-release-bot
444b80026d chore(release): 0.118.0-dev.15 [skip ci]
# [0.118.0-dev.15](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.14...v0.118.0-dev.15) (2023-09-27)

### Features

* **YouTube:** Bump compatibility to `18.37.36` ([#483](https://github.com/ReVanced/revanced-integrations/issues/483)) ([5dadb0d](5dadb0d523))
2023-09-27 23:32:17 +00:00
oSumAtrIX
5dadb0d523 feat(YouTube): Bump compatibility to 18.37.36 (#483)
Co-authored-by: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com>
2023-09-28 01:28:34 +02:00
semantic-release-bot
1e6fabceea chore(release): 0.118.0-dev.14 [skip ci]
# [0.118.0-dev.14](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.13...v0.118.0-dev.14) (2023-09-27)

### Bug Fixes

* **YouTube - Hide info cards:** Fix info cards not hiding for some users ([#487](https://github.com/ReVanced/revanced-integrations/issues/487)) ([00c4c40](00c4c4025b))
2023-09-27 20:24:38 +00:00
LisoUseInAIKyrios
00c4c4025b fix(YouTube - Hide info cards): Fix info cards not hiding for some users (#487) 2023-09-28 00:18:21 +04:00
oSumAtrIX
a01db14c1e ci: Bump checkout action 2023-09-27 18:03:11 +02:00
semantic-release-bot
67ada816d4 chore(release): 0.118.0-dev.13 [skip ci]
# [0.118.0-dev.13](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.12...v0.118.0-dev.13) (2023-09-27)

### Bug Fixes

* **YouTube - Client spoof:** fix occasionally frozen video playback ([#486](https://github.com/ReVanced/revanced-integrations/issues/486)) ([b0b6ff6](b0b6ff6a82))
2023-09-27 14:59:03 +00:00
LisoUseInAIKyrios
b0b6ff6a82 fix(YouTube - Client spoof): fix occasionally frozen video playback (#486) 2023-09-27 18:54:47 +04:00
LisoUseInAIKyrios
ab9989d41f chore(YouTube - Client spoof): add logging. fix fall over logic if android client call fails 2023-09-26 13:05:25 +04:00
semantic-release-bot
09e8b3e345 chore(release): 0.118.0-dev.12 [skip ci]
# [0.118.0-dev.12](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.11...v0.118.0-dev.12) (2023-09-26)

### Bug Fixes

* **YouTube - Client spoof:** Show seekbar thumbnail for age restricted and paid videos ([01019b0](01019b09c1))
2023-09-26 02:53:16 +00:00
oSumAtrIX
01019b09c1 fix(YouTube - Client spoof): Show seekbar thumbnail for age restricted and paid videos 2023-09-26 04:45:48 +02:00
semantic-release-bot
62f92c38c1 chore(release): 0.118.0-dev.11 [skip ci]
# [0.118.0-dev.11](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.10...v0.118.0-dev.11) (2023-09-26)

### Bug Fixes

* **YouTube - Client spoof:** fix toast shown if opening paid or age restricted video ([#482](https://github.com/ReVanced/revanced-integrations/issues/482)) ([e72b65b](e72b65b599))
2023-09-26 01:43:27 +00:00
LisoUseInAIKyrios
e72b65b599 fix(YouTube - Client spoof): fix toast shown if opening paid or age restricted video (#482) 2023-09-26 05:39:44 +04:00
semantic-release-bot
245265587a chore(release): 0.118.0-dev.10 [skip ci]
# [0.118.0-dev.10](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.9...v0.118.0-dev.10) (2023-09-26)

### Bug Fixes

* **YouTube - Client spoof:** fix storyboard fetched out of order ([#481](https://github.com/ReVanced/revanced-integrations/issues/481)) ([8398774](83987747e6))
2023-09-26 01:13:00 +00:00
LisoUseInAIKyrios
83987747e6 fix(YouTube - Client spoof): fix storyboard fetched out of order (#481) 2023-09-26 05:09:01 +04:00
semantic-release-bot
a591c62543 chore(release): 0.118.0-dev.9 [skip ci]
# [0.118.0-dev.9](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.8...v0.118.0-dev.9) (2023-09-25)

### Bug Fixes

* **YouTube - Client spoof:** Removed unused code ([#480](https://github.com/ReVanced/revanced-integrations/issues/480)) ([e6903bf](e6903bff95))
2023-09-25 22:50:24 +00:00
LisoUseInAIKyrios
e6903bff95 fix(YouTube - Client spoof): Removed unused code (#480)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2023-09-26 00:47:01 +02:00
semantic-release-bot
89993619fd chore(release): 0.118.0-dev.8 [skip ci]
# [0.118.0-dev.8](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.7...v0.118.0-dev.8) (2023-09-25)

### Bug Fixes

* **YouTube - Client spoof:** Display seekbar thumbnails in high quality ([f71c1a0](f71c1a0c15))
2023-09-25 21:55:32 +00:00
oSumAtrIX
f71c1a0c15 fix(YouTube - Client spoof): Display seekbar thumbnails in high quality 2023-09-25 23:51:03 +02:00
semantic-release-bot
b76794b08c chore(release): 0.118.0-dev.7 [skip ci]
# [0.118.0-dev.7](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.6...v0.118.0-dev.7) (2023-09-25)

### Bug Fixes

* Remove parameter from route ([4b0925e](4b0925e337))
2023-09-25 19:52:03 +00:00
oSumAtrIX
4b0925e337 fix: Remove parameter from route 2023-09-25 21:46:20 +02:00
semantic-release-bot
aa0282f300 chore(release): 0.118.0-dev.6 [skip ci]
# [0.118.0-dev.6](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.5...v0.118.0-dev.6) (2023-09-25)

### Performance Improvements

* Only request required fields ([d20b768](d20b768bc2))
* Remove unnecessary api key parameter ([ba5e7d8](ba5e7d870e))
2023-09-25 18:12:35 +00:00
oSumAtrIX
ba5e7d870e perf: Remove unnecessary api key parameter 2023-09-25 19:57:53 +02:00
oSumAtrIX
d20b768bc2 perf: Only request required fields 2023-09-25 19:52:27 +02:00
semantic-release-bot
a113905e5c chore(release): 0.118.0-dev.5 [skip ci]
# [0.118.0-dev.5](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.4...v0.118.0-dev.5) (2023-09-25)

### Bug Fixes

* **YouTube - Client spoof:** Restore clipping videos functionality ([2cd1738](2cd1738d24))
* **YouTube - Client spoof:** Restore seekbar thumbnails ([978f630](978f630c02))
2023-09-25 14:36:47 +00:00
oSumAtrIX
2cd1738d24 fix(YouTube - Client spoof): Restore clipping videos functionality 2023-09-25 16:33:06 +02:00
oSumAtrIX
978f630c02 fix(YouTube - Client spoof): Restore seekbar thumbnails
This works around the issue, but causes seekbar thumbnails to be in low quality.
2023-09-25 16:28:23 +02:00
semantic-release-bot
bfae6b56ab chore(release): 0.118.0-dev.4 [skip ci]
# [0.118.0-dev.4](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.3...v0.118.0-dev.4) (2023-09-23)

### Bug Fixes

* **YouTube - Client spoof:** Do not record feed videos to history by default ([#478](https://github.com/ReVanced/revanced-integrations/issues/478)) ([ef1cca0](ef1cca02c1))
2023-09-23 21:53:51 +00:00
oSumAtrIX
ef1cca02c1 fix(YouTube - Client spoof): Do not record feed videos to history by default (#478) 2023-09-23 23:48:53 +02:00
oSumAtrIX
b193b3dbc1 ci: Use better workflow name and PR message 2023-09-23 18:34:16 +02:00
semantic-release-bot
9272df52f3 chore(release): 0.118.0-dev.3 [skip ci]
# [0.118.0-dev.3](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.2...v0.118.0-dev.3) (2023-09-19)

### Bug Fixes

* **YouTube:** fix old quality and custom speed not working on tablets ([#477](https://github.com/ReVanced/revanced-integrations/issues/477)) ([2352fa5](2352fa5426))
2023-09-19 02:26:25 +00:00
LisoUseInAIKyrios
2352fa5426 fix(YouTube): fix old quality and custom speed not working on tablets (#477) 2023-09-19 06:22:15 +04:00
semantic-release-bot
aa10de41b6 chore(release): 0.118.0-dev.2 [skip ci]
# [0.118.0-dev.2](https://github.com/ReVanced/revanced-integrations/compare/v0.118.0-dev.1...v0.118.0-dev.2) (2023-09-14)

### Features

* **Twitch - Block embedded ads:** Switch from `ttv.lol` to `luminous.dev` ([2c34180](2c3418041c))
2023-09-14 21:26:51 +00:00
oSumAtrIX
2c3418041c feat(Twitch - Block embedded ads): Switch from ttv.lol to luminous.dev 2023-09-14 21:27:33 +02:00
oSumAtrIX
4a242c7a91 refactor: Use try block for auto closeable 2023-09-14 16:57:50 +02:00
semantic-release-bot
7b524efdbd chore(release): 0.118.0-dev.1 [skip ci]
# [0.118.0-dev.1](https://github.com/ReVanced/revanced-integrations/compare/v0.117.2-dev.3...v0.118.0-dev.1) (2023-09-14)

### Features

* **TU Dortmund:** Add `Show on lockscreen` patch ([#472](https://github.com/ReVanced/revanced-integrations/issues/472)) ([526d66f](526d66f6a9))
2023-09-14 01:15:52 +00:00
Traktores
526d66f6a9 feat(TU Dortmund): Add Show on lockscreen patch (#472)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2023-09-14 03:11:49 +02:00
semantic-release-bot
f0bfcef0d7 chore(release): 0.117.2-dev.3 [skip ci]
## [0.117.2-dev.3](https://github.com/ReVanced/revanced-integrations/compare/v0.117.2-dev.2...v0.117.2-dev.3) (2023-09-09)

### Bug Fixes

* **YouTube - ReturnYouTubeDislike:** Add debug logging to litho text ([#476](https://github.com/ReVanced/revanced-integrations/issues/476)) ([e3b8e8b](e3b8e8be41))
2023-09-09 08:56:11 +00:00
LisoUseInAIKyrios
e3b8e8be41 fix(YouTube - ReturnYouTubeDislike): Add debug logging to litho text (#476) 2023-09-09 12:52:47 +04:00
semantic-release-bot
acf7e2d1dd chore(release): 0.117.2-dev.2 [skip ci]
## [0.117.2-dev.2](https://github.com/ReVanced/revanced-integrations/compare/v0.117.2-dev.1...v0.117.2-dev.2) (2023-09-07)

### Bug Fixes

* **YouTube - Custom filter:** Use new lines between components instead of commas ([#475](https://github.com/ReVanced/revanced-integrations/issues/475)) ([17ed396](17ed396739))
2023-09-07 20:15:50 +00:00
LisoUseInAIKyrios
17ed396739 fix(YouTube - Custom filter): Use new lines between components instead of commas (#475) 2023-09-08 00:10:38 +04:00
semantic-release-bot
830cfb561f chore(release): 0.117.2-dev.1 [skip ci]
## [0.117.2-dev.1](https://github.com/ReVanced/revanced-integrations/compare/v0.117.1...v0.117.2-dev.1) (2023-09-07)

### Bug Fixes

* **YouTube - Hide layout components:** Always hide redundant 'player audio track' button ([#473](https://github.com/ReVanced/revanced-integrations/issues/473)) ([d86851b](d86851baf1))
2023-09-07 06:44:50 +00:00
LisoUseInAIKyrios
d86851baf1 fix(YouTube - Hide layout components): Always hide redundant 'player audio track' button (#473) 2023-09-07 10:41:06 +04:00
semantic-release-bot
c034d474ff chore(release): 0.117.1 [skip ci]
## [0.117.1](https://github.com/ReVanced/revanced-integrations/compare/v0.117.0...v0.117.1) (2023-09-03)

### Bug Fixes

* **YouTube - ExternalDownloads:** Trim whitespace from package name ([#469](https://github.com/ReVanced/revanced-integrations/issues/469)) ([61d997e](61d997e1db))
2023-09-03 03:44:54 +00:00
oSumAtrIX
690fec6b5a chore: merge branch dev to main (#470) 2023-09-03 05:41:02 +02:00
semantic-release-bot
20e2ecf199 chore(release): 0.117.1-dev.1 [skip ci]
## [0.117.1-dev.1](https://github.com/ReVanced/revanced-integrations/compare/v0.117.0...v0.117.1-dev.1) (2023-08-30)

### Bug Fixes

* **YouTube - ExternalDownloads:** Trim whitespace from package name ([#469](https://github.com/ReVanced/revanced-integrations/issues/469)) ([61d997e](61d997e1db))
2023-08-30 21:11:04 +00:00
Autist69420
61d997e1db fix(YouTube - ExternalDownloads): Trim whitespace from package name (#469)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2023-08-30 23:06:47 +02:00
semantic-release-bot
04c81b39e9 chore(release): 0.117.0 [skip ci]
# [0.117.0](https://github.com/ReVanced/revanced-integrations/compare/v0.116.2...v0.117.0) (2023-08-27)

### Features

* Restore previous release ([dc955d1](dc955d1bc2))
2023-08-27 23:57:50 +00:00
oSumAtrIX
b7a176ff3e chore: merge branch dev to main (#468) 2023-08-28 01:53:07 +02:00
semantic-release-bot
1afd520c7b chore(release): 0.117.0-dev.1 [skip ci]
# [0.117.0-dev.1](https://github.com/ReVanced/revanced-integrations/compare/v0.116.2...v0.117.0-dev.1) (2023-08-27)

### Features

* Restore previous release ([dc955d1](dc955d1bc2))
2023-08-27 20:30:34 +00:00
oSumAtrIX
dc955d1bc2 feat: Restore previous release 2023-08-27 21:41:23 +02:00
semantic-release-bot
f3fc0d1f7d chore(release): 0.116.2 [skip ci]
## [0.116.2](https://github.com/ReVanced/revanced-integrations/compare/v0.116.1...v0.116.2) (2023-08-27)

### Bug Fixes

* Add back missing class ([6e8d13b](6e8d13bfbb))
2023-08-27 03:21:10 +00:00
oSumAtrIX
ca4927e2a9 chore: merge branch dev to main (#467) 2023-08-27 05:17:10 +02:00
oSumAtrIX
6e8d13bfbb fix: Add back missing class 2023-08-27 05:16:07 +02:00
semantic-release-bot
90a7e604d3 chore(release): 0.116.1 [skip ci]
## [0.116.1](https://github.com/ReVanced/revanced-integrations/compare/v0.116.0...v0.116.1) (2023-08-27)

### Bug Fixes

* Revert previous release ([a178a22](a178a223c2))
2023-08-27 02:51:33 +00:00
oSumAtrIX
6801ed8d28 chore: merge branch dev to main (#466) 2023-08-27 04:47:35 +02:00
semantic-release-bot
ba8f4f9b5f chore(release): 0.116.1-dev.1 [skip ci]
## [0.116.1-dev.1](https://github.com/ReVanced/revanced-integrations/compare/v0.116.0...v0.116.1-dev.1) (2023-08-27)

### Bug Fixes

* Revert previous release ([a178a22](a178a223c2))
2023-08-27 02:47:15 +00:00
oSumAtrIX
a178a223c2 fix: Revert previous release 2023-08-27 04:43:10 +02:00
semantic-release-bot
fb3b7b4c80 chore(release): 0.116.0 [skip ci]
# [0.116.0](https://github.com/ReVanced/revanced-integrations/compare/v0.115.1...v0.116.0) (2023-08-26)

### Bug Fixes

* use correct logging tags ([420b926](420b9263b6))
* **YouTube - Hide Shorts components:** Hide `shorts header` ([#455](https://github.com/ReVanced/revanced-integrations/issues/455)) ([13afac9](13afac906a))
* **YouTube - Litho Filter:** Don't remove the buffer until the thread stops ([#461](https://github.com/ReVanced/revanced-integrations/issues/461)) ([2188607](2188607340))
* **YouTube - Player Flyout Menu:** Change 'audio track flyout menu' to show up by default ([#458](https://github.com/ReVanced/revanced-integrations/issues/458)) ([97880ea](97880eaf72))

### Features

* **YouTube - Debug:** Logging of layout proto buffer strings ([#456](https://github.com/ReVanced/revanced-integrations/issues/456)) ([769a200](769a2006ce))
* **YouTube - Hide video action buttons:** Hide individual action buttons ([#451](https://github.com/ReVanced/revanced-integrations/issues/451)) ([8e5ca65](8e5ca65286))
* **YouTube:** Add `Alternative thumbnails` patch ([#462](https://github.com/ReVanced/revanced-integrations/issues/462)) ([d354356](d354356b2d))
* **YouTube:** Add `Custom player overlay opacity` patch ([#449](https://github.com/ReVanced/revanced-integrations/issues/449)) ([44dccb3](44dccb3d65))
* **YouTube:** Add `Enable tablet layout` patch ([d4570de](d4570de0a7))
* **YouTube:** Support version 18.32.39 ([#464](https://github.com/ReVanced/revanced-integrations/issues/464)) ([aa9d892](aa9d892cde))
2023-08-26 23:25:40 +00:00
oSumAtrIX
297d76f176 chore: merge branch dev to main (#457) 2023-08-27 01:21:37 +02:00
semantic-release-bot
acae4b1bc8 chore(release): 0.116.0-dev.10 [skip ci]
# [0.116.0-dev.10](https://github.com/ReVanced/revanced-integrations/compare/v0.116.0-dev.9...v0.116.0-dev.10) (2023-08-26)

### Features

* **YouTube:** Add `Enable tablet layout` patch ([d4570de](d4570de0a7))
2023-08-26 15:14:13 +00:00
oSumAtrIX
d4570de0a7 feat(YouTube): Add Enable tablet layout patch 2023-08-26 17:10:35 +02:00
semantic-release-bot
a249b1648d chore(release): 0.116.0-dev.9 [skip ci]
# [0.116.0-dev.9](https://github.com/ReVanced/revanced-integrations/compare/v0.116.0-dev.8...v0.116.0-dev.9) (2023-08-26)

### Features

* **YouTube:** Support version 18.32.39 ([#464](https://github.com/ReVanced/revanced-integrations/issues/464)) ([aa9d892](aa9d892cde))
2023-08-26 15:05:19 +00:00
oSumAtrIX
aa9d892cde feat(YouTube): Support version 18.32.39 (#464) 2023-08-26 17:00:59 +02:00
semantic-release-bot
aff6e98f64 chore(release): 0.116.0-dev.8 [skip ci]
# [0.116.0-dev.8](https://github.com/ReVanced/revanced-integrations/compare/v0.116.0-dev.7...v0.116.0-dev.8) (2023-08-26)

### Features

* **YouTube:** Add `Custom player overlay opacity` patch ([#449](https://github.com/ReVanced/revanced-integrations/issues/449)) ([44dccb3](44dccb3d65))
2023-08-26 00:15:59 +00:00
johnconner122
44dccb3d65 feat(YouTube): Add Custom player overlay opacity patch (#449)
Co-authored-by: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com>
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2023-08-26 02:12:44 +02:00
semantic-release-bot
61e961a9e3 chore(release): 0.116.0-dev.7 [skip ci]
# [0.116.0-dev.7](https://github.com/ReVanced/revanced-integrations/compare/v0.116.0-dev.6...v0.116.0-dev.7) (2023-08-24)

### Bug Fixes

* use correct logging tags ([420b926](420b9263b6))
2023-08-24 21:07:32 +00:00
semantic-release-bot
420b9263b6 fix: use correct logging tags 2023-08-24 23:03:56 +02:00
semantic-release-bot
fbc6855c4a chore(release): 0.116.0-dev.6 [skip ci]
# [0.116.0-dev.6](https://github.com/ReVanced/revanced-integrations/compare/v0.116.0-dev.5...v0.116.0-dev.6) (2023-08-23)

### Bug Fixes

* **YouTube - Hide Shorts components:** Hide `shorts header` ([#455](https://github.com/ReVanced/revanced-integrations/issues/455)) ([13afac9](13afac906a))
2023-08-23 07:31:11 +00:00
LisoUseInAIKyrios
ebd425b7ff chore: fix build 2023-08-23 11:27:21 +04:00
johnconner122
13afac906a fix(YouTube - Hide Shorts components): Hide shorts header (#455)
Co-authored-by: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com>
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2023-08-23 05:35:00 +02:00
oSumAtrIX
7510c0632f refactor: fix naming inconsistency 2023-08-23 05:28:57 +02:00
oSumAtrIX
33e3c6b061 refactor: improve readability with comments 2023-08-23 05:27:54 +02:00
semantic-release-bot
842f5f7616 chore(release): 0.116.0-dev.5 [skip ci]
# [0.116.0-dev.5](https://github.com/ReVanced/revanced-integrations/compare/v0.116.0-dev.4...v0.116.0-dev.5) (2023-08-21)

### Features

* **YouTube:** Add `Alternative thumbnails` patch ([#462](https://github.com/ReVanced/revanced-integrations/issues/462)) ([d354356](d354356b2d))
2023-08-21 06:32:26 +00:00
LisoUseInAIKyrios
d354356b2d feat(YouTube): Add Alternative thumbnails patch (#462) 2023-08-21 10:28:20 +04:00
semantic-release-bot
95dae4896e chore(release): 0.116.0-dev.4 [skip ci]
# [0.116.0-dev.4](https://github.com/ReVanced/revanced-integrations/compare/v0.116.0-dev.3...v0.116.0-dev.4) (2023-08-16)

### Bug Fixes

* **YouTube - Litho Filter:** Don't remove the buffer until the thread stops ([#461](https://github.com/ReVanced/revanced-integrations/issues/461)) ([2188607](2188607340))
2023-08-16 12:01:54 +00:00
LisoUseInAIKyrios
2188607340 fix(YouTube - Litho Filter): Don't remove the buffer until the thread stops (#461) 2023-08-16 15:58:27 +04:00
oSumAtrIX
efa60dc64a build: Bump dependencies 2023-08-16 09:38:29 +02:00
oSumAtrIX
2ba44526d5 build: update Gradle 2023-08-16 09:14:08 +02:00
semantic-release-bot
8648434f99 chore(release): 0.116.0-dev.3 [skip ci]
# [0.116.0-dev.3](https://github.com/ReVanced/revanced-integrations/compare/v0.116.0-dev.2...v0.116.0-dev.3) (2023-08-08)

### Bug Fixes

* **YouTube - Player Flyout Menu:** Change 'audio track flyout menu' to show up by default ([#458](https://github.com/ReVanced/revanced-integrations/issues/458)) ([97880ea](97880eaf72))
2023-08-08 08:20:08 +00:00
LisoUseInAIKyrios
97880eaf72 fix(YouTube - Player Flyout Menu): Change 'audio track flyout menu' to show up by default (#458) 2023-08-08 12:16:34 +04:00
semantic-release-bot
7ca6a080a3 chore(release): 0.116.0-dev.2 [skip ci]
# [0.116.0-dev.2](https://github.com/ReVanced/revanced-integrations/compare/v0.116.0-dev.1...v0.116.0-dev.2) (2023-08-07)

### Features

* **YouTube - Hide video action buttons:** Hide individual action buttons ([#451](https://github.com/ReVanced/revanced-integrations/issues/451)) ([8e5ca65](8e5ca65286))
2023-08-07 14:38:00 +00:00
LisoUseInAIKyrios
8e5ca65286 feat(YouTube - Hide video action buttons): Hide individual action buttons (#451) 2023-08-07 18:34:42 +04:00
semantic-release-bot
c1af6e699d chore(release): 0.116.0-dev.1 [skip ci]
# [0.116.0-dev.1](https://github.com/ReVanced/revanced-integrations/compare/v0.115.1...v0.116.0-dev.1) (2023-08-07)

### Features

* **YouTube - Debug:** Logging of layout proto buffer strings ([#456](https://github.com/ReVanced/revanced-integrations/issues/456)) ([769a200](769a2006ce))
2023-08-07 07:54:50 +00:00
LisoUseInAIKyrios
769a2006ce feat(YouTube - Debug): Logging of layout proto buffer strings (#456) 2023-08-07 11:50:32 +04:00
semantic-release-bot
8517e8a149 chore(release): 0.115.1 [skip ci]
## [0.115.1](https://github.com/ReVanced/revanced-integrations/compare/v0.115.0...v0.115.1) (2023-08-05)

### Bug Fixes

* **YouTube - Hide Shorts components:** Hide new type of shorts in feed ([#453](https://github.com/ReVanced/revanced-integrations/issues/453)) ([6959808](6959808f0c))
2023-08-05 20:15:59 +00:00
oSumAtrIX
9e56c40d88 chore: merge branch dev to main (#454) 2023-08-05 22:12:31 +02:00
semantic-release-bot
3c69108caa chore(release): 0.115.1-dev.1 [skip ci]
## [0.115.1-dev.1](https://github.com/ReVanced/revanced-integrations/compare/v0.115.0...v0.115.1-dev.1) (2023-08-05)

### Bug Fixes

* **YouTube - Hide Shorts components:** Hide new type of shorts in feed ([#453](https://github.com/ReVanced/revanced-integrations/issues/453)) ([6959808](6959808f0c))
2023-08-05 20:12:10 +00:00
johnconner122
6959808f0c fix(YouTube - Hide Shorts components): Hide new type of shorts in feed (#453) 2023-08-05 22:08:10 +02:00
semantic-release-bot
e0d77a0060 chore(release): 0.115.0 [skip ci]
# [0.115.0](https://github.com/ReVanced/revanced-integrations/compare/v0.114.0...v0.115.0) (2023-08-02)

### Bug Fixes

* **YouTube - SponsorBlock:** Fix skip highlight button showing when set to 'show in seekbar' ([ea7bc57](ea7bc57375))
* **YouTube - Spoof App Version:** Remove 17.30.35 target ([e906c6d](e906c6d3a2))
* **YouTube:** fix potential litho filter thread race ([d3f523f](d3f523f9dd))

### Features

* **Tiktok - Feed filter:** Add more filters ([#445](https://github.com/ReVanced/revanced-integrations/issues/445)) ([c16c038](c16c038396))
* **YouTube - Hide layout components:** Hide `chips shelf` ([#448](https://github.com/ReVanced/revanced-integrations/issues/448)) ([c7d2a9b](c7d2a9b310))
* **YouTube:** add `Player Flyout Menu` patch ([#416](https://github.com/ReVanced/revanced-integrations/issues/416)) ([b2085ae](b2085aeebf))

### Performance Improvements

* **YouTube:** Filter litho components using prefix tree ([#447](https://github.com/ReVanced/revanced-integrations/issues/447)) ([18f2900](18f29004b8))
2023-08-02 23:39:14 +00:00
oSumAtrIX
2ab34fce31 chore: merge branch dev to main (#446) 2023-08-03 01:35:56 +02:00
semantic-release-bot
cf76cbe72f chore(release): 0.115.0-dev.7 [skip ci]
# [0.115.0-dev.7](https://github.com/ReVanced/revanced-integrations/compare/v0.115.0-dev.6...v0.115.0-dev.7) (2023-08-02)

### Features

* **Tiktok - Feed filter:** Add more filters ([#445](https://github.com/ReVanced/revanced-integrations/issues/445)) ([c16c038](c16c038396))
2023-08-02 12:12:32 +00:00
Vu Hoan Huy
c16c038396 feat(Tiktok - Feed filter): Add more filters (#445)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2023-08-02 14:09:07 +02:00
semantic-release-bot
d2a8c33109 chore(release): 0.115.0-dev.6 [skip ci]
# [0.115.0-dev.6](https://github.com/ReVanced/revanced-integrations/compare/v0.115.0-dev.5...v0.115.0-dev.6) (2023-08-02)

### Bug Fixes

* **YouTube:** fix potential litho filter thread race ([d3f523f](d3f523f9dd))
2023-08-02 11:09:39 +00:00
LisoUseInAIKyrios
d3f523f9dd fix(YouTube): fix potential litho filter thread race 2023-08-02 15:04:29 +04:00
semantic-release-bot
1c2976526e chore(release): 0.115.0-dev.5 [skip ci]
# [0.115.0-dev.5](https://github.com/ReVanced/revanced-integrations/compare/v0.115.0-dev.4...v0.115.0-dev.5) (2023-08-01)

### Performance Improvements

* **YouTube:** Filter litho components using prefix tree ([#447](https://github.com/ReVanced/revanced-integrations/issues/447)) ([18f2900](18f29004b8))
2023-08-01 17:09:27 +00:00
LisoUseInAIKyrios
18f29004b8 perf(YouTube): Filter litho components using prefix tree (#447)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2023-08-01 21:05:31 +04:00
semantic-release-bot
0207496926 chore(release): 0.115.0-dev.4 [skip ci]
# [0.115.0-dev.4](https://github.com/ReVanced/revanced-integrations/compare/v0.115.0-dev.3...v0.115.0-dev.4) (2023-07-30)

### Features

* **YouTube:** add `Player Flyout Menu` patch ([#416](https://github.com/ReVanced/revanced-integrations/issues/416)) ([b2085ae](b2085aeebf))
2023-07-30 09:55:03 +00:00
johnconner122
b2085aeebf feat(YouTube): add Player Flyout Menu patch (#416)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
Co-authored-by: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com>
2023-07-30 13:51:16 +04:00
LisoUseInAIKyrios
ac8de0a3b7 chore(YouTube - Spoof App Version): Adjust target version 2023-07-27 09:19:05 +04:00
semantic-release-bot
d4bc6cff68 chore(release): 0.115.0-dev.3 [skip ci]
# [0.115.0-dev.3](https://github.com/ReVanced/revanced-integrations/compare/v0.115.0-dev.2...v0.115.0-dev.3) (2023-07-27)

### Bug Fixes

* **YouTube - Spoof App Version:** Remove 17.30.35 target ([e906c6d](e906c6d3a2))
2023-07-27 04:01:17 +00:00
LisoUseInAIKyrios
e906c6d3a2 fix(YouTube - Spoof App Version): Remove 17.30.35 target 2023-07-27 07:56:58 +04:00
semantic-release-bot
fdc56bf68e chore(release): 0.115.0-dev.2 [skip ci]
# [0.115.0-dev.2](https://github.com/ReVanced/revanced-integrations/compare/v0.115.0-dev.1...v0.115.0-dev.2) (2023-07-26)

### Bug Fixes

* **YouTube - SponsorBlock:** Fix skip highlight button showing when set to 'show in seekbar' ([ea7bc57](ea7bc57375))
2023-07-26 21:29:00 +00:00
LisoUseInAIKyrios
ea7bc57375 fix(YouTube - SponsorBlock): Fix skip highlight button showing when set to 'show in seekbar' 2023-07-27 01:24:13 +04:00
semantic-release-bot
8ef81235d7 chore(release): 0.115.0-dev.1 [skip ci]
# [0.115.0-dev.1](https://github.com/ReVanced/revanced-integrations/compare/v0.114.0...v0.115.0-dev.1) (2023-07-26)

### Features

* **YouTube - Hide layout components:** Hide `chips shelf` ([#448](https://github.com/ReVanced/revanced-integrations/issues/448)) ([c7d2a9b](c7d2a9b310))
2023-07-26 13:51:32 +00:00
johnconner122
c7d2a9b310 feat(YouTube - Hide layout components): Hide chips shelf (#448) 2023-07-26 15:47:56 +02:00
oSumAtrIX
d7fc06a647 ci: clean after building 2023-07-21 19:17:06 +02:00
semantic-release-bot
67cf3e2eb4 chore(release): 0.114.0 [skip ci]
# [0.114.0](https://github.com/ReVanced/revanced-integrations/compare/v0.113.0...v0.114.0) (2023-07-21)

### Bug Fixes

* **Tiktok - Settings:** check for null when opening ads settings ([#443](https://github.com/ReVanced/revanced-integrations/issues/443)) ([8c61561](8c61561d63))

### Features

* **youtube/theme:** add a switch to enable/disable custom seekbar color ([#442](https://github.com/ReVanced/revanced-integrations/issues/442)) ([2a784a4](2a784a47d1))
2023-07-21 15:08:36 +00:00
oSumAtrIX
dcd97f3143 chore: merge branch dev to main (#444) 2023-07-21 17:04:35 +02:00
oSumAtrIX
e1011e42df ci: do not cache build directory 2023-07-21 16:58:00 +02:00
semantic-release-bot
e2f25cd5ae chore(release): 0.114.0-dev.1 [skip ci]
# [0.114.0-dev.1](https://github.com/ReVanced/revanced-integrations/compare/v0.113.1-dev.1...v0.114.0-dev.1) (2023-07-20)

### Features

* **youtube/theme:** add a switch to enable/disable custom seekbar color ([#442](https://github.com/ReVanced/revanced-integrations/issues/442)) ([2a784a4](2a784a47d1))
2023-07-20 17:28:49 +00:00
LisoUseInAIKyrios
2a784a47d1 feat(youtube/theme): add a switch to enable/disable custom seekbar color (#442) 2023-07-20 21:26:50 +04:00
semantic-release-bot
dc591ac7ed chore(release): 0.113.1-dev.1 [skip ci]
## [0.113.1-dev.1](https://github.com/ReVanced/revanced-integrations/compare/v0.113.0...v0.113.1-dev.1) (2023-07-20)

### Bug Fixes

* **Tiktok - Settings:** check for null when opening ads settings ([#443](https://github.com/ReVanced/revanced-integrations/issues/443)) ([8c61561](8c61561d63))
2023-07-20 17:24:01 +00:00
Vu Hoan Huy
8c61561d63 fix(Tiktok - Settings): check for null when opening ads settings (#443) 2023-07-20 19:22:07 +02:00
semantic-release-bot
8920e1dfe8 chore(release): 0.113.0 [skip ci]
# [0.113.0](https://github.com/ReVanced/revanced-integrations/compare/v0.112.0...v0.113.0) (2023-07-20)

### Bug Fixes

* **Tiktok - Settings:** bump compatibility ([#440](https://github.com/ReVanced/revanced-integrations/issues/440)) ([821a32e](821a32ee40))
* **YouTube - Hide Shorts Components:** hide sound button ([a2b1630](a2b1630df8))
* **YouTube - Spoof client:** show video time and chapters while using seekbar ([#435](https://github.com/ReVanced/revanced-integrations/issues/435)) ([a0f831a](a0f831ac3f))
* **youtube/return-youtube-dislike:** fix dislikes not showing in some situations ([#439](https://github.com/ReVanced/revanced-integrations/issues/439)) ([7a28c2f](7a28c2fa13))
* **youtube/sponsorblock:** fix some segments skipping slightly too late ([#436](https://github.com/ReVanced/revanced-integrations/issues/436)) ([f694928](f69492819e))

### Features

* **YouTube - Hide ads:** hide new type of buttoned ad ([9f21c72](9f21c7268e))
* **youtube:** rename `video-speed` to `playback-speed` ([#438](https://github.com/ReVanced/revanced-integrations/issues/438)) ([630776f](630776fd35))
2023-07-20 00:04:52 +00:00
oSumAtrIX
59f7733f99 chore: merge branch dev to main (#437) 2023-07-20 02:02:44 +02:00
semantic-release-bot
6104e263ce chore(release): 0.113.0-dev.5 [skip ci]
# [0.113.0-dev.5](https://github.com/ReVanced/revanced-integrations/compare/v0.113.0-dev.4...v0.113.0-dev.5) (2023-07-19)

### Bug Fixes

* **YouTube - Spoof client:** show video time and chapters while using seekbar ([#435](https://github.com/ReVanced/revanced-integrations/issues/435)) ([a0f831a](a0f831ac3f))
2023-07-19 23:20:00 +00:00
LisoUseInAIKyrios
a0f831ac3f fix(YouTube - Spoof client): show video time and chapters while using seekbar (#435) 2023-07-20 01:17:18 +02:00
semantic-release-bot
2f39f32a52 chore(release): 0.113.0-dev.4 [skip ci]
# [0.113.0-dev.4](https://github.com/ReVanced/revanced-integrations/compare/v0.113.0-dev.3...v0.113.0-dev.4) (2023-07-19)

### Bug Fixes

* **Tiktok - Settings:** bump compatibility ([#440](https://github.com/ReVanced/revanced-integrations/issues/440)) ([821a32e](821a32ee40))
2023-07-19 23:16:41 +00:00
Vu Hoan Huy
821a32ee40 fix(Tiktok - Settings): bump compatibility (#440)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2023-07-20 01:14:10 +02:00
semantic-release-bot
d3533824f4 chore(release): 0.113.0-dev.3 [skip ci]
# [0.113.0-dev.3](https://github.com/ReVanced/revanced-integrations/compare/v0.113.0-dev.2...v0.113.0-dev.3) (2023-07-16)

### Bug Fixes

* **youtube/return-youtube-dislike:** fix dislikes not showing in some situations ([#439](https://github.com/ReVanced/revanced-integrations/issues/439)) ([7a28c2f](7a28c2fa13))
2023-07-16 16:42:35 +00:00
LisoUseInAIKyrios
7a28c2fa13 fix(youtube/return-youtube-dislike): fix dislikes not showing in some situations (#439) 2023-07-16 20:39:51 +04:00
semantic-release-bot
5056adbc3c chore(release): 0.113.0-dev.2 [skip ci]
# [0.113.0-dev.2](https://github.com/ReVanced/revanced-integrations/compare/v0.113.0-dev.1...v0.113.0-dev.2) (2023-07-16)

### Features

* **YouTube - Hide ads:** hide new type of buttoned ad ([9f21c72](9f21c7268e))
2023-07-16 00:27:07 +00:00
oSumAtrIX
9f21c7268e feat(YouTube - Hide ads): hide new type of buttoned ad 2023-07-16 02:24:52 +02:00
semantic-release-bot
42750409b7 chore(release): 0.113.0-dev.1 [skip ci]
# [0.113.0-dev.1](https://github.com/revanced/revanced-integrations/compare/v0.112.1-dev.2...v0.113.0-dev.1) (2023-07-15)

### Features

* **youtube:** rename `video-speed` to `playback-speed` ([#438](https://github.com/revanced/revanced-integrations/issues/438)) ([630776f](630776fd35))
2023-07-15 12:34:24 +00:00
KAZI MMT
630776fd35 feat(youtube): rename video-speed to playback-speed (#438) 2023-07-15 16:32:21 +04:00
semantic-release-bot
0e18f209dc chore(release): 0.112.1-dev.2 [skip ci]
## [0.112.1-dev.2](https://github.com/revanced/revanced-integrations/compare/v0.112.1-dev.1...v0.112.1-dev.2) (2023-07-15)

### Bug Fixes

* **YouTube - Hide Shorts Components:** hide sound button ([a2b1630](a2b1630df8))
2023-07-15 01:44:06 +00:00
oSumAtrIX
a2b1630df8 fix(YouTube - Hide Shorts Components): hide sound button 2023-07-15 03:42:01 +02:00
semantic-release-bot
e78ef6df9c chore(release): 0.112.1-dev.1 [skip ci]
## [0.112.1-dev.1](https://github.com/revanced/revanced-integrations/compare/v0.112.0...v0.112.1-dev.1) (2023-07-14)

### Bug Fixes

* **youtube/sponsorblock:** fix some segments skipping slightly too late ([#436](https://github.com/revanced/revanced-integrations/issues/436)) ([f694928](f69492819e))
2023-07-14 08:37:50 +00:00
LisoUseInAIKyrios
f69492819e fix(youtube/sponsorblock): fix some segments skipping slightly too late (#436) 2023-07-14 12:35:20 +04:00
semantic-release-bot
59850b2c04 chore(release): 0.112.0 [skip ci]
# [0.112.0](https://github.com/revanced/revanced-integrations/compare/v0.111.2...v0.112.0) (2023-07-08)

### Bug Fixes

* **youtube/hide-ads:** remove duplicate filter ([#432](https://github.com/revanced/revanced-integrations/issues/432)) ([ea7ee56](ea7ee56276))
* **youtube/hide-layout-components:**  hide mix playlists ([789e0c8](789e0c8bcb))

### Features

* remove unnecessary notice ([be3955f](be3955fee4))
* **youtube:** support version `18.23.35` ([#433](https://github.com/revanced/revanced-integrations/issues/433)) ([dec7348](dec7348203))
2023-07-08 02:35:51 +00:00
oSumAtrIX
cfc7081971 chore: merge branch dev to main (#431) 2023-07-08 04:32:50 +02:00
semantic-release-bot
6f0248cc1a chore(release): 0.112.0-dev.3 [skip ci]
# [0.112.0-dev.3](https://github.com/revanced/revanced-integrations/compare/v0.112.0-dev.2...v0.112.0-dev.3) (2023-07-08)

### Bug Fixes

* **youtube/hide-layout-components:**  hide mix playlists ([789e0c8](789e0c8bcb))
2023-07-08 02:31:18 +00:00
oSumAtrIX
789e0c8bcb fix(youtube/hide-layout-components): hide mix playlists 2023-07-08 04:28:12 +02:00
semantic-release-bot
e783142741 chore(release): 0.112.0-dev.2 [skip ci]
# [0.112.0-dev.2](https://github.com/revanced/revanced-integrations/compare/v0.112.0-dev.1...v0.112.0-dev.2) (2023-07-07)

### Features

* **youtube:** support version `18.23.35` ([#433](https://github.com/revanced/revanced-integrations/issues/433)) ([dec7348](dec7348203))
2023-07-07 23:04:32 +00:00
oSumAtrIX
dec7348203 feat(youtube): support version 18.23.35 (#433)
Co-authored-by: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com>
2023-07-08 01:02:42 +02:00
oSumAtrIX
7b61cc8567 build: update gradle 2023-07-05 23:07:30 +02:00
semantic-release-bot
b8b9edad64 chore(release): 0.112.0-dev.1 [skip ci]
# [0.112.0-dev.1](https://github.com/revanced/revanced-integrations/compare/v0.111.3-dev.1...v0.112.0-dev.1) (2023-07-05)

### Features

* remove unnecessary notice ([be3955f](be3955fee4))
2023-07-05 13:59:10 +00:00
oSumAtrIX
be3955fee4 feat: remove unnecessary notice 2023-07-05 15:57:17 +02:00
semantic-release-bot
3da3ce9e9a chore(release): 0.111.3-dev.1 [skip ci]
## [0.111.3-dev.1](https://github.com/revanced/revanced-integrations/compare/v0.111.2...v0.111.3-dev.1) (2023-07-05)

### Bug Fixes

* **youtube/hide-ads:** remove duplicate filter ([#432](https://github.com/revanced/revanced-integrations/issues/432)) ([ea7ee56](ea7ee56276))
2023-07-05 08:43:51 +00:00
johnconner122
ea7ee56276 fix(youtube/hide-ads): remove duplicate filter (#432) 2023-07-05 10:41:57 +02:00
LisoUseInAIKyrios
8b01ca0c0e chore: delete old unused migration code 2023-07-04 03:01:23 +04:00
semantic-release-bot
170685b920 chore(release): 0.111.2 [skip ci]
## [0.111.2](https://github.com/revanced/revanced-integrations/compare/v0.111.1...v0.111.2) (2023-07-03)

### Bug Fixes

* **reddit/sanitize-sharing-links:** update patch to support latest app version ([#430](https://github.com/revanced/revanced-integrations/issues/430)) ([d947de2](d947de2e03))
* **youtube/spoof-signature-verification:** remove auto re-enable functionality ([#428](https://github.com/revanced/revanced-integrations/issues/428)) ([8afe82c](8afe82c0e0))
2023-07-03 21:38:05 +00:00
oSumAtrIX
f46cbaa3fe chore: merge branch dev to main (#429) 2023-07-03 23:35:33 +02:00
semantic-release-bot
e9947fd66a chore(release): 0.111.2-dev.2 [skip ci]
## [0.111.2-dev.2](https://github.com/revanced/revanced-integrations/compare/v0.111.2-dev.1...v0.111.2-dev.2) (2023-07-03)

### Bug Fixes

* **reddit/sanitize-sharing-links:** update patch to support latest app version ([#430](https://github.com/revanced/revanced-integrations/issues/430)) ([d947de2](d947de2e03))
2023-07-03 19:30:58 +00:00
LisoUseInAIKyrios
d947de2e03 fix(reddit/sanitize-sharing-links): update patch to support latest app version (#430) 2023-07-03 23:29:04 +04:00
semantic-release-bot
e9f797824e chore(release): 0.111.2-dev.1 [skip ci]
## [0.111.2-dev.1](https://github.com/revanced/revanced-integrations/compare/v0.111.1...v0.111.2-dev.1) (2023-07-02)

### Bug Fixes

* **youtube/spoof-signature-verification:** remove auto re-enable functionality ([#428](https://github.com/revanced/revanced-integrations/issues/428)) ([8afe82c](8afe82c0e0))
2023-07-02 08:27:45 +00:00
LisoUseInAIKyrios
8afe82c0e0 fix(youtube/spoof-signature-verification): remove auto re-enable functionality (#428) 2023-07-02 12:25:51 +04:00
semantic-release-bot
bb9120ebae chore(release): 0.111.1 [skip ci]
## [0.111.1](https://github.com/revanced/revanced-integrations/compare/v0.111.0...v0.111.1) (2023-07-01)

### Bug Fixes

* **youtube/client-spoof:** update settings text for known side effects of spoof signature  ([#424](https://github.com/revanced/revanced-integrations/issues/424)) ([d7a3973](d7a3973ef1))
* **youtube/disable-fullscreen-panels:** prompt to restart after turning on/off ([#426](https://github.com/revanced/revanced-integrations/issues/426)) ([328ecff](328ecff18b))

### Performance Improvements

* return earlier when possible ([#427](https://github.com/revanced/revanced-integrations/issues/427)) ([12f3f97](12f3f97552))
2023-07-01 00:39:21 +00:00
oSumAtrIX
bc91b35994 chore: merge branch dev to main (#425) 2023-07-01 02:36:52 +02:00
semantic-release-bot
f3f8026c1e chore(release): 0.111.1-dev.3 [skip ci]
## [0.111.1-dev.3](https://github.com/revanced/revanced-integrations/compare/v0.111.1-dev.2...v0.111.1-dev.3) (2023-06-27)

### Performance Improvements

* return earlier when possible ([#427](https://github.com/revanced/revanced-integrations/issues/427)) ([12f3f97](12f3f97552))
2023-06-27 01:30:40 +00:00
Jim Man
12f3f97552 perf: return earlier when possible (#427) 2023-06-27 03:28:29 +02:00
semantic-release-bot
b4c0619abb chore(release): 0.111.1-dev.2 [skip ci]
## [0.111.1-dev.2](https://github.com/revanced/revanced-integrations/compare/v0.111.1-dev.1...v0.111.1-dev.2) (2023-06-25)

### Bug Fixes

* **youtube/disable-fullscreen-panels:** prompt to restart after turning on/off ([#426](https://github.com/revanced/revanced-integrations/issues/426)) ([328ecff](328ecff18b))
2023-06-25 18:52:48 +00:00
LisoUseInAIKyrios
328ecff18b fix(youtube/disable-fullscreen-panels): prompt to restart after turning on/off (#426) 2023-06-25 22:50:39 +04:00
semantic-release-bot
40c07769e2 chore(release): 0.111.1-dev.1 [skip ci]
## [0.111.1-dev.1](https://github.com/revanced/revanced-integrations/compare/v0.111.0...v0.111.1-dev.1) (2023-06-23)

### Bug Fixes

* **youtube/client-spoof:** update settings text for known side effects of spoof signature  ([#424](https://github.com/revanced/revanced-integrations/issues/424)) ([d7a3973](d7a3973ef1))
2023-06-23 13:47:50 +00:00
LisoUseInAIKyrios
d7a3973ef1 fix(youtube/client-spoof): update settings text for known side effects of spoof signature (#424) 2023-06-23 17:45:47 +04:00
semantic-release-bot
db9b0e312d chore(release): 0.111.0 [skip ci]
# [0.111.0](https://github.com/revanced/revanced-integrations/compare/v0.110.0...v0.111.0) (2023-06-21)

### Bug Fixes

* don't include all Litho patches, when not included ([9952581](9952581a32))
* **reddit/hide-ads:** only filter promoted links ([efc2b9b](efc2b9b6a3))
* **youtube/client-spoof:** use new visitor data to work around playback issues ([be9c948](be9c948ce6))
* **youtube/hide-layout-components:** preserve gap when hiding expandable chips ([b47a214](b47a214067))
* **youtube:** separate `hide-ads` to `hide-layout-components` patch ([bdce029](bdce0298c4))

### Features

* **youtube/hide-layout-components:** separate hiding expandable chips and chapters ([80fb3a3](80fb3a31dd))
2023-06-21 23:31:43 +00:00
oSumAtrIX
190481cb39 chore: merge branch dev to main (#421) 2023-06-22 01:29:48 +02:00
semantic-release-bot
4f4a096318 chore(release): 0.111.0-dev.3 [skip ci]
# [0.111.0-dev.3](https://github.com/revanced/revanced-integrations/compare/v0.111.0-dev.2...v0.111.0-dev.3) (2023-06-21)

### Bug Fixes

* **youtube/client-spoof:** use new visitor data to work around playback issues ([be9c948](be9c948ce6))
2023-06-21 23:26:58 +00:00
oSumAtrIX
be9c948ce6 fix(youtube/client-spoof): use new visitor data to work around playback issues
See 81ca451480
2023-06-22 01:13:14 +02:00
semantic-release-bot
4f66d05573 chore(release): 0.111.0-dev.2 [skip ci]
# [0.111.0-dev.2](https://github.com/revanced/revanced-integrations/compare/v0.111.0-dev.1...v0.111.0-dev.2) (2023-06-18)

### Bug Fixes

* **youtube/hide-layout-components:** preserve gap when hiding expandable chips ([b47a214](b47a214067))
2023-06-18 17:46:56 +00:00
oSumAtrIX
b47a214067 fix(youtube/hide-layout-components): preserve gap when hiding expandable chips 2023-06-18 19:44:37 +02:00
semantic-release-bot
007eaa0729 chore(release): 0.111.0-dev.1 [skip ci]
# [0.111.0-dev.1](https://github.com/revanced/revanced-integrations/compare/v0.110.1-dev.3...v0.111.0-dev.1) (2023-06-18)

### Features

* **youtube/hide-layout-components:** separate hiding expandable chips and chapters ([80fb3a3](80fb3a31dd))
2023-06-18 16:51:30 +00:00
oSumAtrIX
80fb3a31dd feat(youtube/hide-layout-components): separate hiding expandable chips and chapters 2023-06-18 18:48:54 +02:00
oSumAtrIX
4536133bdc refactor: remove old migration code 2023-06-18 18:48:54 +02:00
semantic-release-bot
56970b356a chore(release): 0.110.1-dev.3 [skip ci]
## [0.110.1-dev.3](https://github.com/revanced/revanced-integrations/compare/v0.110.1-dev.2...v0.110.1-dev.3) (2023-06-16)

### Bug Fixes

* **reddit/hide-ads:** only filter promoted links ([efc2b9b](efc2b9b6a3))
2023-06-16 21:28:35 +00:00
oSumAtrIX
efc2b9b6a3 fix(reddit/hide-ads): only filter promoted links 2023-06-16 23:25:58 +02:00
semantic-release-bot
8d0d5f9659 chore(release): 0.110.1-dev.2 [skip ci]
## [0.110.1-dev.2](https://github.com/revanced/revanced-integrations/compare/v0.110.1-dev.1...v0.110.1-dev.2) (2023-06-14)

### Bug Fixes

* **youtube:** separate `hide-ads` to `hide-layout-components` patch ([bdce029](bdce0298c4))
2023-06-14 01:32:27 +00:00
oSumAtrIX
bdce0298c4 fix(youtube): separate hide-ads to hide-layout-components patch 2023-06-14 03:30:28 +02:00
semantic-release-bot
e2fa445c3f chore(release): 0.110.1-dev.1 [skip ci]
## [0.110.1-dev.1](https://github.com/revanced/revanced-integrations/compare/v0.110.0...v0.110.1-dev.1) (2023-06-14)

### Bug Fixes

* don't include all Litho patches, when not included ([9952581](9952581a32))
2023-06-14 00:49:02 +00:00
oSumAtrIX
9952581a32 fix: don't include all Litho patches, when not included 2023-06-14 02:46:24 +02:00
semantic-release-bot
4aab2a1af6 chore(release): 0.110.0 [skip ci]
# [0.110.0](https://github.com/revanced/revanced-integrations/compare/v0.109.0...v0.110.0) (2023-06-12)

### Bug Fixes

* **youtube/swipe-controls:** require restart if settings are changed ([#417](https://github.com/revanced/revanced-integrations/issues/417)) ([f951897](f951897944))

### Features

* **reddit:** add `hide-promoted` patch ([#419](https://github.com/revanced/revanced-integrations/issues/419)) ([7eb209d](7eb209d853))
* **youtube/hide-ads:** hide mix playlists ([aa72125](aa72125317))
* **youtube/swipe-controls:** add option to save and restore brightness ([b5a71a8](b5a71a843e))
2023-06-12 01:45:28 +00:00
oSumAtrIX
309cda8848 chore: merge branch dev to main (#418) 2023-06-12 03:43:22 +02:00
semantic-release-bot
eb658298b8 chore(release): 0.110.0-dev.1 [skip ci]
# [0.110.0-dev.1](https://github.com/revanced/revanced-integrations/compare/v0.109.1-dev.1...v0.110.0-dev.1) (2023-06-12)

### Features

* **reddit:** add `hide-promoted` patch ([#419](https://github.com/revanced/revanced-integrations/issues/419)) ([7eb209d](7eb209d853))
* **youtube/hide-ads:** hide mix playlists ([aa72125](aa72125317))
* **youtube/swipe-controls:** add option to save and restore brightness ([b5a71a8](b5a71a843e))
2023-06-12 01:07:07 +00:00
oSumAtrIX
add120348a ci: add cache step 2023-06-12 03:04:44 +02:00
oSumAtrIX
0654c1b42e ci: set JAVA version for Gradle manually 2023-06-12 03:04:44 +02:00
oSumAtrIX
26b6d47101 refactor: remove comments 2023-06-12 03:04:43 +02:00
oSumAtrIX
fd86684f73 ci: build before running semantic-release 2023-06-12 03:04:43 +02:00
oSumAtrIX
ccc93adae9 ci: remove unnecessary steps 2023-06-12 03:04:43 +02:00
LagradOst
7eb209d853 feat(reddit): add hide-promoted patch (#419)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2023-06-12 03:04:42 +02:00
oSumAtrIX
aa72125317 feat(youtube/hide-ads): hide mix playlists 2023-06-12 03:04:42 +02:00
oSumAtrIX
b5a71a843e feat(youtube/swipe-controls): add option to save and restore brightness 2023-06-01 00:56:32 +02:00
semantic-release-bot
4c77e7f3f7 chore(release): 0.109.1-dev.1 [skip ci]
## [0.109.1-dev.1](https://github.com/revanced/revanced-integrations/compare/v0.109.0...v0.109.1-dev.1) (2023-05-31)

### Bug Fixes

* **youtube/swipe-controls:** require restart if settings are changed ([#417](https://github.com/revanced/revanced-integrations/issues/417)) ([f951897](f951897944))
2023-05-31 08:59:47 +00:00
LisoUseInAIKyrios
f951897944 fix(youtube/swipe-controls): require restart if settings are changed (#417) 2023-05-31 12:57:02 +04:00
109 changed files with 5628 additions and 2253 deletions

9
.gitattributes vendored Normal file
View File

@@ -0,0 +1,9 @@
#
# https://help.github.com/articles/dealing-with-line-endings/
#
# Linux start script should use lf
/gradlew text eol=lf
# These are Windows script files and should use crlf
*.bat text eol=crlf

View File

@@ -1,4 +1,4 @@
name: PR to main
name: Open a PR to main
on:
push:
@@ -7,7 +7,7 @@ on:
workflow_dispatch:
env:
MESSAGE: merge branch `${{ github.head_ref || github.ref_name }}` to `main`
MESSAGE: Merge branch `${{ github.head_ref || github.ref_name }}` to `main`
jobs:
pull-request:
@@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Open pull request
uses: repo-sync/pull-request@v2
with:

View File

@@ -16,28 +16,31 @@ jobs:
name: Release
runs-on: ubuntu-latest
steps:
- name: Cancel previous runs
uses: styfle/cancel-workflow-action@0.11.0
- name: Checkout
uses: actions/checkout@v3
with:
# Make sure the release step uses its own credentials:
# https://github.com/cycjimmy/semantic-release-action#private-packages
persist-credentials: false
fetch-depth: 0
- name: Set up JDK
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'zulu'
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: "18"
cache: 'npm'
- name: Setup semantic-release
run: npm install
- name: Release
env:
GITHUB_TOKEN: ${{ secrets.REPOSITORY_PUSH_ACCESS }}
run: npm exec semantic-release
- name: Checkout
uses: actions/checkout@v4
with:
# Make sure the release step uses its own credentials:
# https://github.com/cycjimmy/semantic-release-action#private-packages
persist-credentials: false
fetch-depth: 0
- name: Cache
uses: actions/cache@v3
with:
path: |
${{ runner.home }}/.gradle/caches
${{ runner.home }}/.gradle/wrapper
.gradle
node_modules
key: ${{ runner.os }}-gradle-npm-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties', 'package-lock.json') }}
- name: Setup Java
run: echo "JAVA_HOME=$JAVA_HOME_17_X64" >> $GITHUB_ENV
- name: Build with Gradle
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: ./gradlew build clean
- name: Setup semantic-release
run: npm install
- name: Release
env:
GITHUB_TOKEN: ${{ secrets.REPOSITORY_PUSH_ACCESS }}
run: npm exec semantic-release

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,6 @@ plugins {
android {
compileSdk = 33
buildToolsVersion = "33.0.1"
namespace = "app.revanced.integrations"
defaultConfig {
@@ -44,7 +43,7 @@ android {
dependencies {
compileOnly(project(mapOf("path" to ":dummy")))
compileOnly("androidx.annotation:annotation:1.6.0")
compileOnly("androidx.appcompat:appcompat:1.7.0-alpha02")
compileOnly("androidx.appcompat:appcompat:1.7.0-alpha03")
compileOnly("com.squareup.okhttp3:okhttp:5.0.0-alpha.11")
compileOnly("com.squareup.retrofit2:retrofit:2.9.0")
}

View File

@@ -0,0 +1,29 @@
package app.revanced.integrations.patches;
import android.net.Uri;
import app.revanced.integrations.settings.SettingsEnum;
import app.revanced.integrations.utils.LogHelper;
public class BypassURLRedirectsPatch {
private static final String YOUTUBE_REDIRECT_PATH = "/redirect";
/**
* Convert the YouTube redirect URI string to the redirect query URI.
*
* @param uri The YouTube redirect URI string.
* @return The redirect query URI.
*/
public static Uri parseRedirectUri(String uri) {
final var parsed = Uri.parse(uri);
if (SettingsEnum.BYPASS_URL_REDIRECTS.getBoolean() && parsed.getPath().equals(YOUTUBE_REDIRECT_PATH)) {
var query = Uri.parse(Uri.decode(parsed.getQueryParameter("q")));
LogHelper.printDebug(() -> "Bypassing YouTube redirect URI: " + query);
return query;
}
return parsed;
}
}

View File

@@ -0,0 +1,22 @@
package app.revanced.integrations.patches;
import android.widget.ImageView;
import app.revanced.integrations.settings.SettingsEnum;
import app.revanced.integrations.utils.ReVancedUtils;
public class CustomPlayerOverlayOpacityPatch {
private static final int DEFAULT_OPACITY = (int) SettingsEnum.PLAYER_OVERLAY_OPACITY.defaultValue;
public static void changeOpacity(ImageView imageView) {
int opacity = SettingsEnum.PLAYER_OVERLAY_OPACITY.getInt();
if (opacity < 0 || opacity > 100) {
ReVancedUtils.showToastLong("Player overlay opacity must be between 0-100");
SettingsEnum.PLAYER_OVERLAY_OPACITY.saveValue(DEFAULT_OPACITY);
opacity = DEFAULT_OPACITY;
}
imageView.setImageAlpha((opacity * 255) / 100);
}
}

View File

@@ -0,0 +1,18 @@
package app.revanced.integrations.patches;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import app.revanced.integrations.settings.SettingsEnum;
public final class DisableFineScrubbingGesturePatch {
/**
* Disables the fine scrubbing gesture.
* @param tracker The velocity tracker that is used to determine the gesture.
* @param event The motion event that is used to determine the gesture.
*/
public static void disableGesture(VelocityTracker tracker, MotionEvent event) {
if (SettingsEnum.DISABLE_FINE_SCRUBBING_GESTURE.getBoolean()) return;
tracker.addMovement(event);
}
}

View File

@@ -0,0 +1,9 @@
package app.revanced.integrations.patches;
import app.revanced.integrations.settings.SettingsEnum;
public final class EnableTabletLayoutPatch {
public static boolean enableTabletLayout() {
return SettingsEnum.TABLET_LAYOUT.getBoolean();
}
}

View File

@@ -1,12 +0,0 @@
package app.revanced.integrations.patches;
import android.widget.ImageView;
import app.revanced.integrations.settings.SettingsEnum;
public class HidePlayerOverlayPatch {
public static void hidePlayerOverlay(ImageView view) {
if (!SettingsEnum.HIDE_PLAYER_OVERLAY.getBoolean()) return;
view.setImageResource(android.R.color.transparent);
}
}

View File

@@ -1,9 +0,0 @@
package app.revanced.integrations.patches;
import app.revanced.integrations.settings.SettingsEnum;
public class HideWatchInVRPatch {
public static boolean hideWatchInVR() {
return SettingsEnum.HIDE_WATCH_IN_VR.getBoolean();
}
}

View File

@@ -4,16 +4,14 @@ import app.revanced.integrations.settings.SettingsEnum;
public class OpenLinksExternallyPatch {
/**
* Override 'android.support.customtabs.action.CustomTabsService',
* in order to open links in the default browser. This is done by returning an empty string,
* for the service that handles custom tabs in the Android support library
* which opens links in the default service instead.
* Return the intent to open links with. If empty, the link will be opened with the default browser.
*
* @param original The original custom tabs service.
* @return The new, default service to open links with or the original service.
* @param originalIntent The original intent to open links with.
* @return The intent to open links with. Empty means the link will be opened with the default browser.
*/
public static String enableExternalBrowser(String original) {
if (SettingsEnum.EXTERNAL_BROWSER.getBoolean()) original = "";
return original;
public static String getIntent(String originalIntent) {
if (SettingsEnum.EXTERNAL_BROWSER.getBoolean()) return "";
return originalIntent;
}
}

View File

@@ -1,224 +0,0 @@
package app.revanced.integrations.patches;
import static app.revanced.integrations.utils.ReVancedUtils.containsAny;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import app.revanced.integrations.settings.SettingsEnum;
import app.revanced.integrations.shared.PlayerType;
import app.revanced.integrations.utils.LogHelper;
import app.revanced.integrations.utils.ReVancedUtils;
public class SpoofSignatureVerificationPatch {
/**
* Protobuf parameters used for autoplay in scrim.
* Prepend this parameter to mute video playback (for autoplay in feed)
*/
private static final String PROTOBUF_PARAMETER_SCRIM = "SAFgAXgB";
/**
* Protobuf parameter of shorts and YouTube stories.
* Known issue: captions are positioned on upper area in the player.
*/
private static final String PROTOBUF_PARAMETER_SHORTS = "8AEB"; // "8AEByAMTuAQP"
/**
* Target Protobuf parameters.
*/
private static final String[] PROTOBUF_PARAMETER_TARGETS = {
"YAHI", // Autoplay in feed
"SAFg" // Autoplay in scrim
};
/**
* On app first start, the first video played usually contains a single non-default window setting value
* and all other subtitle settings for the video are (incorrect) default shorts window settings.
* For this situation, the shorts settings must be replaced.
*
* But some videos use multiple text positions on screen (such as https://youtu.be/3hW1rMNC89o),
* and by chance many of the subtitles uses window positions that match a default shorts position.
* To handle these videos, selectively allowing the shorts specific window settings to 'pass thru' unchanged,
* but only if the video contains multiple non-default subtitle window positions.
*
* Do not enable 'pass thru mode' until this many non default subtitle settings are observed for a single video.
*/
private static final int NUMBER_OF_NON_DEFAULT_SUBTITLES_BEFORE_ENABLING_PASSTHRU = 2;
/**
* The number of non default subtitle settings encountered for the current video.
*/
private static int numberOfNonDefaultSettingsObserved;
@Nullable
private static String currentVideoId;
/**
* Injection point.
*
* @param originalValue originalValue protobuf parameter
*/
public static String overrideProtobufParameter(String originalValue) {
try {
if (!SettingsEnum.SPOOF_SIGNATURE_VERIFICATION.getBoolean()) {
return originalValue;
}
LogHelper.printDebug(() -> "Original protobuf parameter value: " + originalValue);
// Video is Short or Story.
var isPlayingShorts = originalValue.contains(PROTOBUF_PARAMETER_SHORTS);
if (isPlayingShorts) return originalValue;
boolean isPlayingFeed = containsAny(originalValue, PROTOBUF_PARAMETER_TARGETS) && PlayerType.getCurrent() == PlayerType.INLINE_MINIMAL;
if (isPlayingFeed) {
// Videos in feed won't autoplay with sound.
return PROTOBUF_PARAMETER_SCRIM + PROTOBUF_PARAMETER_SHORTS;
} else {
// Spoof the parameter to prevent playback issues.
return PROTOBUF_PARAMETER_SHORTS;
}
} catch (Exception ex) {
LogHelper.printException(() -> "overrideProtobufParameter failure", ex);
}
return originalValue;
}
/**
* Injection point. Runs off the main thread.
* <p>
* Used to check the response code of video playback requests made by YouTube.
* Response code of interest is 403 that indicate a signature verification failure for the current request
*
* @param responseCode HTTP status code of the completed YouTube connection
*/
public static void onResponse(int responseCode) {
try {
if (responseCode < 400 || responseCode >= 500) {
return; // everything normal
}
LogHelper.printDebug(() -> "YouTube HTTP status code: " + responseCode);
if (SettingsEnum.SPOOF_SIGNATURE_VERIFICATION.getBoolean()) {
return; // already enabled
}
SettingsEnum.SPOOF_SIGNATURE_VERIFICATION.saveValue(true);
ReVancedUtils.showToastLong("Spoofing app signature to prevent playback issues");
// it would be great if the video could be forcefully reloaded, but currently there is no code to do this
} catch (Exception ex) {
LogHelper.printException(() -> "onResponse failure", ex);
}
}
/**
* Last WindowsSetting constructor values. Values are checked for changes to reduce log spam.
*/
private static int lastAp, lastAh, lastAv;
private static boolean lastVs, lastSd;
/**
* Injection point. Overrides values passed into SubtitleWindowSettings constructor.
*
* @param ap anchor position. A bitmask with 6 bit fields, that appears to indicate the layout position on screen
* @param ah anchor horizontal. A percentage [0, 100], that appears to be a horizontal text anchor point
* @param av anchor vertical. A percentage [0, 100], that appears to be a vertical text anchor point
* @param vs appears to indicate if subtitles exist, and the value is always true.
* @param sd function is not entirely clear
*/
public static int[] getSubtitleWindowSettingsOverride(int ap, int ah, int av, boolean vs, boolean sd) {
final boolean signatureSpoofing = SettingsEnum.SPOOF_SIGNATURE_VERIFICATION.getBoolean();
if (SettingsEnum.DEBUG.getBoolean()) {
if (ap != lastAp || ah != lastAh || av != lastAv || vs != lastVs || sd != lastSd) {
LogHelper.printDebug(() -> "video: " + VideoInformation.getVideoId() + " spoof: " + signatureSpoofing
+ " ap:" + ap + " ah:" + ah + " av:" + av + " vs:" + vs + " sd:" + sd);
lastAp = ap;
lastAh = ah;
lastAv = av;
lastVs = vs;
lastSd = sd;
}
}
// Videos with custom captions that specify screen positions appear to always have correct screen positions (even with spoofing).
// But for auto generated and most other captions, the spoof incorrectly gives various default Shorts caption settings.
// Check for these known default shorts captions parameters, and replace with the known correct values.
//
// If a regular video uses a custom subtitle setting that match a default short setting,
// then this will incorrectly replace the setting.
// But, if the video uses multiple subtitles in different screen locations, then detect the non-default values
// and do not replace any window settings for the video (regardless if they match a shorts default).
if (signatureSpoofing && !PlayerType.getCurrent().isNoneOrHidden()
&& numberOfNonDefaultSettingsObserved < NUMBER_OF_NON_DEFAULT_SUBTITLES_BEFORE_ENABLING_PASSTHRU) {
for (SubtitleWindowReplacementSettings setting : SubtitleWindowReplacementSettings.values()) {
if (setting.match(ap, ah, av, vs, sd)) {
return setting.replacementSetting();
}
}
numberOfNonDefaultSettingsObserved++;
LogHelper.printDebug(() ->
numberOfNonDefaultSettingsObserved < NUMBER_OF_NON_DEFAULT_SUBTITLES_BEFORE_ENABLING_PASSTHRU
? "Non default subtitle found."
: "Multiple non default subtitles found. Allowing all subtitles for this video to pass thru unchanged.");
}
return new int[]{ap, ah, av};
}
/**
* Injection point.
*/
public static void setCurrentVideoId(@NonNull String videoId) {
try {
if (videoId.equals(currentVideoId)) {
return;
}
currentVideoId = videoId;
numberOfNonDefaultSettingsObserved = 0;
} catch (Exception ex) {
LogHelper.printException(() -> "setCurrentVideoId failure", ex);
}
}
/**
* Known incorrect default Shorts subtitle parameters, and the corresponding correct (non-Shorts) values.
*/
private enum SubtitleWindowReplacementSettings {
DEFAULT_SHORTS_PARAMETERS_1(10, 50, 0, true, false,
34, 50, 95),
DEFAULT_SHORTS_PARAMETERS_2(9, 20, 0, true, false,
34, 50, 90),
DEFAULT_SHORTS_PARAMETERS_3(9, 20, 0, true, true,
33, 20, 100);
// original values
final int ap, ah, av;
final boolean vs, sd;
// replacement int values
final int[] replacement;
SubtitleWindowReplacementSettings(int ap, int ah, int av, boolean vs, boolean sd,
int replacementAp, int replacementAh, int replacementAv) {
this.ap = ap;
this.ah = ah;
this.av = av;
this.vs = vs;
this.sd = sd;
this.replacement = new int[]{replacementAp, replacementAh, replacementAv};
}
boolean match(int ap, int ah, int av, boolean vs, boolean sd) {
return this.ap == ap && this.ah == ah && this.av == av && this.vs == vs && this.sd == sd;
}
int[] replacementSetting() {
return replacement;
}
}
}

View File

@@ -1,16 +1,15 @@
package app.revanced.integrations.patches;
import androidx.annotation.NonNull;
import java.lang.ref.WeakReference;
import java.lang.reflect.Method;
import java.util.Objects;
import app.revanced.integrations.patches.playback.speed.RememberPlaybackSpeedPatch;
import app.revanced.integrations.shared.VideoState;
import app.revanced.integrations.utils.LogHelper;
import app.revanced.integrations.utils.ReVancedUtils;
import java.lang.ref.WeakReference;
import java.lang.reflect.Method;
import java.util.Objects;
/**
* Hooking class for the current playing video.
*/
@@ -24,7 +23,11 @@ public final class VideoInformation {
@NonNull
private static String videoId = "";
private static long videoLength = 0;
private static volatile long videoTime = -1; // must be volatile. Value is set off main thread from high precision patch hook
private static long videoTime = -1;
@NonNull
private static volatile String playerResponseVideoId = "";
/**
* The current playback speed
*/
@@ -61,6 +64,18 @@ public final class VideoInformation {
}
}
/**
* Injection point. Called off the main thread.
*
* @param videoId The id of the last video loaded.
*/
public static void setPlayerResponseVideoId(@NonNull String videoId) {
if (!playerResponseVideoId.equals(videoId)) {
LogHelper.printDebug(() -> "New player response video id: " + videoId);
playerResponseVideoId = videoId;
}
}
/**
* Injection point.
* Called when user selects a playback speed.
@@ -98,17 +113,17 @@ public final class VideoInformation {
/**
* Injection point.
* Called off the main thread approximately every 50ms to 100ms
* Called on the main thread every 1000ms.
*
* @param currentPlaybackTime The current playback time of the video in milliseconds.
*/
public static void setVideoTimeHighPrecision(final long currentPlaybackTime) {
public static void setVideoTime(final long currentPlaybackTime) {
videoTime = currentPlaybackTime;
}
/**
* Seek on the current video.
* Does not function for playback of Shorts or Stories.
* Does not function for playback of Shorts.
*
* Caution: If called from a videoTimeHook() callback,
* this will cause a recursive call into the same videoTimeHook() callback.
@@ -118,11 +133,6 @@ public final class VideoInformation {
*/
public static boolean seekTo(final long millisecond) {
ReVancedUtils.verifyOnMainThread();
if (seekMethod == null) {
LogHelper.printException(() -> "seekMethod was null");
return false;
}
try {
LogHelper.printDebug(() -> "Seeking to " + millisecond);
return (Boolean) seekMethod.invoke(playerControllerRef.get(), millisecond);
@@ -137,7 +147,7 @@ public final class VideoInformation {
}
/**
* Id of the current video playing. Includes Shorts and YouTube Stories.
* Id of the current video playing. Includes Shorts.
*
* @return The id of the video. Empty string if not set yet.
*/
@@ -146,6 +156,22 @@ public final class VideoInformation {
return videoId;
}
/**
* Differs from {@link #videoId} as this is the video id for the
* last player response received, which may not be the current video playing.
*
* If Shorts are loading the background, this commonly will be
* different from the Short that is currently on screen.
*
* For most use cases, you should instead use {@link #getVideoId()}.
*
* @return The id of the last video loaded. Empty string if not set yet.
*/
@NonNull
public static String getPlayerResponseVideoId() {
return playerResponseVideoId;
}
/**
* @return The current playback speed.
*/
@@ -154,7 +180,7 @@ public final class VideoInformation {
}
/**
* Length of the current video playing. Includes Shorts and YouTube Stories.
* Length of the current video playing. Includes Shorts.
*
* @return The length of the video in milliseconds.
* If the video is not yet loaded, or if the video is playing in the background with no video visible,
@@ -165,14 +191,14 @@ public final class VideoInformation {
}
/**
* Playback time of the current video playing.
* Value can lag up to approximately 100ms behind the actual current video playback time.
* Playback time of the current video playing. Includes Shorts.
*
* Note: Code inside a videoTimeHook patch callback
* should use the callback video time and avoid using this method
* (in situations of recursive hook callbacks, the value returned here may be outdated).
* Value will lag behind the actual playback time by a variable amount based on the playback speed.
*
* Includes Shorts and YouTube Stories.
* If playback speed is 2.0x, this value may be up to 2000ms behind the actual playback time.
* If playback speed is 1.0x, this value may be up to 1000ms behind the actual playback time.
* If playback speed is 0.5x, this value may be up to 500ms behind the actual playback time.
* Etc.
*
* @return The time of the video in milliseconds. -1 if not set yet.
*/
@@ -192,7 +218,7 @@ public final class VideoInformation {
* @see VideoState
*/
public static boolean isAtEndOfVideo() {
return videoTime > 0 && videoLength > 0 && videoTime >= videoLength;
return videoTime >= videoLength && videoLength > 0;
}
}

View File

@@ -1,54 +1,114 @@
package app.revanced.integrations.patches.components;
import android.os.Build;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import app.revanced.integrations.settings.SettingsEnum;
@RequiresApi(api = Build.VERSION_CODES.N)
final class ButtonsFilter extends Filter {
private final StringFilterGroup actionBarRule;
private static final String VIDEO_ACTION_BAR_PATH = "video_action_bar.eml";
private final StringFilterGroup actionBarGroup;
private final StringFilterGroup bufferFilterPathGroup;
private final ByteArrayFilterGroupList bufferButtonsGroupList = new ByteArrayFilterGroupList();
public ButtonsFilter() {
actionBarRule = new StringFilterGroup(
actionBarGroup = new StringFilterGroup(
null,
"video_action_bar"
VIDEO_ACTION_BAR_PATH
);
identifierFilterGroupList.addAll(actionBarGroup);
pathFilterGroups.addAll(
bufferFilterPathGroup = new StringFilterGroup(
null,
"|CellType|CollectionType|CellType|ContainerType|button.eml|"
);
pathFilterGroupList.addAll(
new StringFilterGroup(
SettingsEnum.HIDE_LIKE_DISLIKE_BUTTON,
"|like_button",
"dislike_button"
"|segmented_like_dislike_button"
),
new StringFilterGroup(
SettingsEnum.HIDE_DOWNLOAD_BUTTON,
"download_button"
"|download_button.eml|"
),
new StringFilterGroup(
SettingsEnum.HIDE_PLAYLIST_BUTTON,
"save_to_playlist_button"
"|save_to_playlist_button"
),
new StringFilterGroup(
SettingsEnum.HIDE_CLIP_BUTTON,
"|clip_button.eml|"
),
new StringFilterGroup(
SettingsEnum.HIDE_ACTION_BUTTONS,
"ContainerType|video_action_button",
"|CellType|CollectionType|CellType|ContainerType|button.eml|"
bufferFilterPathGroup
);
bufferButtonsGroupList.addAll(
new ByteArrayAsStringFilterGroup(
SettingsEnum.HIDE_LIVE_CHAT_BUTTON,
"yt_outline_message_bubble_overlap"
),
new ByteArrayAsStringFilterGroup(
SettingsEnum.HIDE_REPORT_BUTTON,
"yt_outline_flag"
),
new ByteArrayAsStringFilterGroup(
SettingsEnum.HIDE_SHARE_BUTTON,
"yt_outline_share"
),
new ByteArrayAsStringFilterGroup(
SettingsEnum.HIDE_REMIX_BUTTON,
"yt_outline_youtube_shorts_plus"
),
// Check for clip button both here and using a path filter,
// as there's a chance the path is a generic action button and won't contain 'clip_button'
new ByteArrayAsStringFilterGroup(
SettingsEnum.HIDE_CLIP_BUTTON,
"yt_outline_scissors"
),
new ByteArrayAsStringFilterGroup(
SettingsEnum.HIDE_SHOP_BUTTON,
"yt_outline_bag"
),
new ByteArrayAsStringFilterGroup(
SettingsEnum.HIDE_THANKS_BUTTON,
"yt_outline_dollar_sign_heart"
)
);
}
private boolean isEveryFilterGroupEnabled() {
for (StringFilterGroup rule : pathFilterGroups)
if (!rule.isEnabled()) return false;
for (var group : pathFilterGroupList)
if (!group.isEnabled()) return false;
for (var group : bufferButtonsGroupList)
if (!group.isEnabled()) return false;
return true;
}
@Override
public boolean isFiltered(final String path, final String identifier, final byte[] _protobufBufferArray) {
if (isEveryFilterGroupEnabled())
if (actionBarRule.check(identifier).isFiltered()) return true;
public boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
FilterGroupList matchedList, FilterGroup matchedGroup, int matchedIndex) {
// If the current matched group is the action bar group,
// in case every filter group is enabled, hide the action bar.
if (matchedGroup == actionBarGroup) {
if (!isEveryFilterGroupEnabled()) {
return false;
}
} else if (matchedGroup == bufferFilterPathGroup) {
// Make sure the current path is the right one
// to avoid false positives.
if (!path.startsWith(VIDEO_ACTION_BAR_PATH)) return false;
return super.isFiltered(path, identifier, _protobufBufferArray);
// In case the group list has no match, return false.
if (!bufferButtonsGroupList.check(protobufBufferArray).isFiltered()) return false;
}
return super.isFiltered(identifier, path, protobufBufferArray, matchedList, matchedGroup, matchedIndex);
}
}

View File

@@ -18,7 +18,7 @@ final class CommentsFilter extends Filter {
"comments_entry_point_simplebox"
);
this.pathFilterGroups.addAll(
this.pathFilterGroupList.addAll(
comments,
previewComment
);

View File

@@ -0,0 +1,3 @@
package app.revanced.integrations.patches.components;
final class DummyFilter extends Filter { }

View File

@@ -0,0 +1,15 @@
package app.revanced.integrations.patches.components;
import app.revanced.integrations.settings.SettingsEnum;
public final class HideInfoCardsFilterPatch extends Filter {
public HideInfoCardsFilterPatch() {
identifierFilterGroupList.addAll(
new StringFilterGroup(
SettingsEnum.HIDE_INFO_CARDS,
"info_card_teaser_overlay.eml"
)
);
}
}

View File

@@ -0,0 +1,239 @@
package app.revanced.integrations.patches.components;
import android.os.Build;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import app.revanced.integrations.settings.SettingsEnum;
import app.revanced.integrations.utils.LogHelper;
import app.revanced.integrations.utils.StringTrieSearch;
@RequiresApi(api = Build.VERSION_CODES.N)
public final class LayoutComponentsFilter extends Filter {
private final StringTrieSearch exceptions = new StringTrieSearch();
private final CustomFilterGroup custom;
private static final ByteArrayAsStringFilterGroup mixPlaylists = new ByteArrayAsStringFilterGroup(
SettingsEnum.HIDE_MIX_PLAYLISTS,
"&list="
);
private final StringFilterGroup searchResultShelfHeader;
private final StringFilterGroup inFeedSurvey;
private final StringFilterGroup notifyMe;
@RequiresApi(api = Build.VERSION_CODES.N)
public LayoutComponentsFilter() {
exceptions.addPatterns(
"home_video_with_context",
"related_video_with_context",
"comment_thread", // Whitelist comments
"|comment.", // Whitelist comment replies
"library_recent_shelf"
);
custom = new CustomFilterGroup(
SettingsEnum.CUSTOM_FILTER,
SettingsEnum.CUSTOM_FILTER_STRINGS
);
final var communityPosts = new StringFilterGroup(
SettingsEnum.HIDE_COMMUNITY_POSTS,
"post_base_wrapper"
);
final var communityGuidelines = new StringFilterGroup(
SettingsEnum.HIDE_COMMUNITY_GUIDELINES,
"community_guidelines"
);
final var subscribersCommunityGuidelines = new StringFilterGroup(
SettingsEnum.HIDE_SUBSCRIBERS_COMMUNITY_GUIDELINES,
"sponsorships_comments_upsell"
);
final var channelMemberShelf = new StringFilterGroup(
SettingsEnum.HIDE_CHANNEL_MEMBER_SHELF,
"member_recognition_shelf"
);
final var compactBanner = new StringFilterGroup(
SettingsEnum.HIDE_COMPACT_BANNER,
"compact_banner"
);
inFeedSurvey = new StringFilterGroup(
SettingsEnum.HIDE_FEED_SURVEY,
"in_feed_survey",
"slimline_survey"
);
final var medicalPanel = new StringFilterGroup(
SettingsEnum.HIDE_MEDICAL_PANELS,
"medical_panel"
);
final var paidContent = new StringFilterGroup(
SettingsEnum.HIDE_PAID_CONTENT,
"paid_content_overlay"
);
final var infoPanel = new StringFilterGroup(
SettingsEnum.HIDE_HIDE_INFO_PANELS,
"publisher_transparency_panel",
"single_item_information_panel"
);
final var latestPosts = new StringFilterGroup(
SettingsEnum.HIDE_HIDE_LATEST_POSTS,
"post_shelf"
);
final var channelGuidelines = new StringFilterGroup(
SettingsEnum.HIDE_HIDE_CHANNEL_GUIDELINES,
"channel_guidelines_entry_banner"
);
// The player audio track button does the exact same function as the audio track flyout menu option.
// But if the copy url button is shown, these button clashes and the the audio button does not work.
// Previously this was a setting to show/hide the player button.
// But it was decided it's simpler to always hide this button because:
// - it doesn't work with copy video url feature
// - the button is rare
// - always hiding makes the ReVanced settings simpler and easier to understand
// - nobody is going to notice the redundant button is always hidden
final var audioTrackButton = new StringFilterGroup(
null,
"multi_feed_icon_button"
);
final var artistCard = new StringFilterGroup(
SettingsEnum.HIDE_ARTIST_CARDS,
"official_card"
);
final var expandableMetadata = new StringFilterGroup(
SettingsEnum.HIDE_EXPANDABLE_CHIP,
"inline_expander"
);
final var chapters = new StringFilterGroup(
SettingsEnum.HIDE_CHAPTERS,
"macro_markers_carousel"
);
final var channelBar = new StringFilterGroup(
SettingsEnum.HIDE_CHANNEL_BAR,
"channel_bar"
);
final var relatedVideos = new StringFilterGroup(
SettingsEnum.HIDE_RELATED_VIDEOS,
"fullscreen_related_videos"
);
final var quickActions = new StringFilterGroup(
SettingsEnum.HIDE_QUICK_ACTIONS,
"quick_actions"
);
final var imageShelf = new StringFilterGroup(
SettingsEnum.HIDE_IMAGE_SHELF,
"image_shelf"
);
final var graySeparator = new StringFilterGroup(
SettingsEnum.HIDE_GRAY_SEPARATOR,
"cell_divider" // layout residue (gray line above the buttoned ad),
);
final var timedReactions = new StringFilterGroup(
SettingsEnum.HIDE_TIMED_REACTIONS,
"emoji_control_panel",
"timed_reaction"
);
searchResultShelfHeader = new StringFilterGroup(
SettingsEnum.HIDE_SEARCH_RESULT_SHELF_HEADER,
"shelf_header.eml"
);
notifyMe = new StringFilterGroup(
SettingsEnum.HIDE_NOTIFY_ME_BUTTON,
"set_reminder_button"
);
final var joinMembership = new StringFilterGroup(
SettingsEnum.HIDE_JOIN_MEMBERSHIP_BUTTON,
"compact_sponsor_button"
);
final var chipsShelf = new StringFilterGroup(
SettingsEnum.HIDE_CHIPS_SHELF,
"chips_shelf"
);
this.pathFilterGroupList.addAll(
channelBar,
communityPosts,
paidContent,
latestPosts,
communityGuidelines,
quickActions,
expandableMetadata,
relatedVideos,
compactBanner,
inFeedSurvey,
joinMembership,
medicalPanel,
notifyMe,
infoPanel,
subscribersCommunityGuidelines,
channelGuidelines,
audioTrackButton,
artistCard,
timedReactions,
imageShelf,
channelMemberShelf,
custom
);
this.identifierFilterGroupList.addAll(
graySeparator,
chipsShelf,
chapters
);
}
@Override
public boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
FilterGroupList matchedList, FilterGroup matchedGroup, int matchedIndex) {
if (matchedGroup == notifyMe || matchedGroup == inFeedSurvey) return true;
if (matchedGroup != custom && exceptions.matches(path))
return false; // Exceptions are not filtered.
// TODO: This also hides the feed Shorts shelf header
if (matchedGroup == searchResultShelfHeader && matchedIndex != 0) return false;
return super.isFiltered(identifier, path, protobufBufferArray, matchedList, matchedGroup, matchedIndex);
}
/**
* Injection point.
*
* Called from a different place then the other filters.
*/
public static boolean filterMixPlaylists(final byte[] bytes) {
final boolean isMixPlaylistFiltered = mixPlaylists.check(bytes).isFiltered();
if (isMixPlaylistFiltered)
LogHelper.printDebug(() -> "Filtered mix playlist");
return isMixPlaylistFiltered;
}
}

View File

@@ -0,0 +1,24 @@
package app.revanced.integrations.patches.components;
import androidx.annotation.Nullable;
// Abuse LithoFilter for CustomPlaybackSpeedPatch.
public final class PlaybackSpeedMenuFilterPatch extends Filter {
// Must be volatile or synchronized, as litho filtering runs off main thread and this field is then access from the main thread.
public static volatile boolean isPlaybackSpeedMenuVisible;
public PlaybackSpeedMenuFilterPatch() {
pathFilterGroupList.addAll(new StringFilterGroup(
null,
"playback_speed_sheet_content.eml-js"
));
}
@Override
boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
FilterGroupList matchedList, FilterGroup matchedGroup, int matchedIndex) {
isPlaybackSpeedMenuVisible = true;
return false;
}
}

View File

@@ -0,0 +1,74 @@
package app.revanced.integrations.patches.components;
import android.os.Build;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import app.revanced.integrations.settings.SettingsEnum;
public class PlayerFlyoutMenuItemsFilter extends Filter {
// Search the buffer only if the flyout menu identifier is found.
// Handle the searching in this class instead of adding to the global filter group (which searches all the time)
private final ByteArrayFilterGroupList flyoutFilterGroupList = new ByteArrayFilterGroupList();
@RequiresApi(api = Build.VERSION_CODES.N)
public PlayerFlyoutMenuItemsFilter() {
identifierFilterGroupList.addAll(new StringFilterGroup(null, "overflow_menu_item.eml|"));
flyoutFilterGroupList.addAll(
new ByteArrayAsStringFilterGroup(
SettingsEnum.HIDE_QUALITY_MENU,
"yt_outline_gear"
),
new ByteArrayAsStringFilterGroup(
SettingsEnum.HIDE_CAPTIONS_MENU,
"closed_caption"
),
new ByteArrayAsStringFilterGroup(
SettingsEnum.HIDE_LOOP_VIDEO_MENU,
"yt_outline_arrow_repeat_1_"
),
new ByteArrayAsStringFilterGroup(
SettingsEnum.HIDE_AMBIENT_MODE_MENU,
"yt_outline_screen_light"
),
new ByteArrayAsStringFilterGroup(
SettingsEnum.HIDE_REPORT_MENU,
"yt_outline_flag"
),
new ByteArrayAsStringFilterGroup(
SettingsEnum.HIDE_HELP_MENU,
"yt_outline_question_circle"
),
new ByteArrayAsStringFilterGroup(
SettingsEnum.HIDE_MORE_INFO_MENU,
"yt_outline_info_circle"
),
new ByteArrayAsStringFilterGroup(
SettingsEnum.HIDE_SPEED_MENU,
"yt_outline_play_arrow_half_circle"
),
new ByteArrayAsStringFilterGroup(
SettingsEnum.HIDE_AUDIO_TRACK_MENU,
"yt_outline_person_radar"
),
new ByteArrayAsStringFilterGroup(
SettingsEnum.HIDE_WATCH_IN_VR_MENU,
"yt_outline_vr"
)
);
}
@Override
boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
FilterGroupList matchedList, FilterGroup matchedGroup, int matchedIndex) {
// Only 1 group is added to the parent class, so the matched group must be the overflow menu.
if (matchedIndex == 0 && flyoutFilterGroupList.check(protobufBufferArray).isFiltered()) {
// Super class handles logging.
return super.isFiltered(identifier, path, protobufBufferArray, matchedList, matchedGroup, matchedIndex);
}
return false;
}
}

View File

@@ -0,0 +1,133 @@
package app.revanced.integrations.patches.components;
import android.os.Build;
import androidx.annotation.GuardedBy;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import app.revanced.integrations.patches.ReturnYouTubeDislikePatch;
import app.revanced.integrations.patches.VideoInformation;
import app.revanced.integrations.settings.SettingsEnum;
import app.revanced.integrations.utils.LogHelper;
import app.revanced.integrations.utils.TrieSearch;
/**
* Searches for video id's in the proto buffer of Shorts dislike.
*
* Because multiple litho dislike spans are created in the background
* (and also anytime litho refreshes the components, which is somewhat arbitrary),
* that makes the value of {@link VideoInformation#getVideoId()} and {@link VideoInformation#getPlayerResponseVideoId()}
* unreliable to determine which video id a Shorts litho span belongs to.
*
* But the correct video id does appear in the protobuffer just before a Shorts litho span is created.
*
* Once a way to asynchronously update litho text is found, this strategy will no longer be needed.
*/
@RequiresApi(api = Build.VERSION_CODES.N)
public final class ReturnYouTubeDislikeFilterPatch extends Filter {
/**
* Last unique video id's loaded. Value is ignored and Map is treated as a Set.
* Cannot use {@link LinkedHashSet} because it's missing #removeEldestEntry().
*/
@GuardedBy("itself")
private static final Map<String, Boolean> lastVideoIds = new LinkedHashMap<>() {
/**
* Number of video id's to keep track of for searching thru the buffer.
* A minimum value of 3 should be sufficient, but check a few more just in case.
*/
private static final int NUMBER_OF_LAST_VIDEO_IDS_TO_TRACK = 5;
@Override
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > NUMBER_OF_LAST_VIDEO_IDS_TO_TRACK;
}
};
/**
* Injection point.
*/
public static void newPlayerResponseVideoId(String videoId) {
try {
if (!SettingsEnum.RYD_SHORTS.getBoolean()) {
return;
}
synchronized (lastVideoIds) {
if (lastVideoIds.put(videoId, Boolean.TRUE) == null) {
LogHelper.printDebug(() -> "New video id: " + videoId);
}
}
} catch (Exception ex) {
LogHelper.printException(() -> "newPlayerResponseVideoId failure", ex);
}
}
private final ByteArrayFilterGroupList videoIdFilterGroup = new ByteArrayFilterGroupList();
public ReturnYouTubeDislikeFilterPatch() {
pathFilterGroupList.addAll(
new StringFilterGroup(SettingsEnum.RYD_SHORTS, "|shorts_dislike_button.eml|")
);
// After the dislikes icon name is some binary data and then the video id for that specific short.
videoIdFilterGroup.addAll(
// Video was previously disliked before video was opened.
new ByteArrayAsStringFilterGroup(null, "ic_right_dislike_on_shadowed"),
// Video was not already disliked.
new ByteArrayAsStringFilterGroup(null, "ic_right_dislike_off_shadowed")
);
}
@Override
public boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
FilterGroupList matchedList, FilterGroup matchedGroup, int matchedIndex) {
FilterGroup.FilterGroupResult result = videoIdFilterGroup.check(protobufBufferArray);
if (result.isFiltered()) {
String matchedVideoId = findVideoId(protobufBufferArray);
// Matched video will be null if in incognito mode.
// Must pass a null id to correctly clear out the current video data.
// Otherwise if a Short is opened in non-incognito, then incognito is enabled and another Short is opened,
// the new incognito Short will show the old prior data.
ReturnYouTubeDislikePatch.newVideoLoaded(matchedVideoId, true);
}
return false;
}
@Nullable
private String findVideoId(byte[] protobufBufferArray) {
synchronized (lastVideoIds) {
for (String videoId : lastVideoIds.keySet()) {
if (byteArrayContainsString(protobufBufferArray, videoId)) {
return videoId;
}
}
return null;
}
}
/**
* This could use {@link TrieSearch}, but since the video ids are constantly changing
* the overhead of updating the Trie might negate the search performance gain.
*/
private static boolean byteArrayContainsString(@NonNull byte[] array, @NonNull String text) {
for (int i = 0, lastArrayStartIndex = array.length - text.length(); i <= lastArrayStartIndex; i++) {
boolean found = true;
for (int j = 0, textLength = text.length(); j < textLength; j++) {
if (array[i + j] != (byte) text.charAt(j)) {
found = false;
break;
}
}
if (found) {
return true;
}
}
return false;
}
}

View File

@@ -1,88 +1,157 @@
package app.revanced.integrations.patches.components;
import android.os.Build;
import android.view.View;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import app.revanced.integrations.settings.SettingsEnum;
import com.google.android.libraries.youtube.rendering.ui.pivotbar.PivotBar;
import static app.revanced.integrations.utils.ReVancedUtils.hideViewBy1dpUnderCondition;
import static app.revanced.integrations.utils.ReVancedUtils.hideViewUnderCondition;
import android.annotation.SuppressLint;
import android.os.Build;
import android.view.View;
import com.google.android.libraries.youtube.rendering.ui.pivotbar.PivotBar;
import app.revanced.integrations.settings.SettingsEnum;
/** @noinspection unused*/
@RequiresApi(api = Build.VERSION_CODES.N)
public final class ShortsFilter extends Filter {
public static PivotBar pivotBar;
@SuppressLint("StaticFieldLeak")
public static PivotBar pivotBar; // Set by patch.
private final String REEL_CHANNEL_BAR_PATH = "reel_channel_bar.eml";
private final StringFilterGroup reelChannelBar = new StringFilterGroup(
null,
"reel_channel_bar"
);
private final StringFilterGroup channelBar;
private final StringFilterGroup subscribeButton;
private final StringFilterGroup subscribeButtonPaused;
private final StringFilterGroup soundButton;
private final StringFilterGroup infoPanel;
private final StringFilterGroup shelfHeader;
private final StringFilterGroup infoPanel = new StringFilterGroup(
SettingsEnum.HIDE_SHORTS_INFO_PANEL,
"shorts_info_panel_overview"
);
private final StringFilterGroup videoActionButton;
private final ByteArrayFilterGroupList videoActionButtonGroupList = new ByteArrayFilterGroupList();
public ShortsFilter() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) return;
final var thanksButton = new StringFilterGroup(
SettingsEnum.HIDE_SHORTS_THANKS_BUTTON,
"suggested_action"
);
final var subscribeButton = new StringFilterGroup(
SettingsEnum.HIDE_SHORTS_SUBSCRIBE_BUTTON,
"subscribe_button"
);
final var joinButton = new StringFilterGroup(
SettingsEnum.HIDE_SHORTS_JOIN_BUTTON,
"sponsor_button"
);
final var soundButton = new StringFilterGroup(
SettingsEnum.HIDE_SHORTS_SOUND_BUTTON,
"reel_pivot_button"
);
final var channelBar = new StringFilterGroup(
SettingsEnum.HIDE_SHORTS_CHANNEL_BAR,
"reel_channel_bar"
);
final var shorts = new StringFilterGroup(
var shorts = new StringFilterGroup(
SettingsEnum.HIDE_SHORTS,
"shorts_shelf",
"inline_shorts",
"shorts_grid",
"shorts_video_cell"
"shorts_video_cell",
"shorts_pivot_item"
);
// Feed Shorts shelf header.
// Use a different filter group for this pattern, as it requires an additional check after matching.
shelfHeader = new StringFilterGroup(
SettingsEnum.HIDE_SHORTS,
"shelf_header.eml"
);
this.pathFilterGroups.addAll(joinButton, subscribeButton, soundButton, channelBar);
this.identifierFilterGroups.addAll(shorts, thanksButton);
// Home / subscription feed components.
var thanksButton = new StringFilterGroup(
SettingsEnum.HIDE_SHORTS_THANKS_BUTTON,
"suggested_action"
);
identifierFilterGroupList.addAll(shorts, shelfHeader, thanksButton);
// Shorts player components.
var joinButton = new StringFilterGroup(
SettingsEnum.HIDE_SHORTS_JOIN_BUTTON,
"sponsor_button"
);
subscribeButton = new StringFilterGroup(
SettingsEnum.HIDE_SHORTS_SUBSCRIBE_BUTTON,
"subscribe_button"
);
subscribeButtonPaused = new StringFilterGroup(
SettingsEnum.HIDE_SHORTS_SUBSCRIBE_BUTTON_PAUSED,
"shorts_paused_state"
);
channelBar = new StringFilterGroup(
SettingsEnum.HIDE_SHORTS_CHANNEL_BAR,
REEL_CHANNEL_BAR_PATH
);
soundButton = new StringFilterGroup(
SettingsEnum.HIDE_SHORTS_SOUND_BUTTON,
"reel_pivot_button"
);
infoPanel = new StringFilterGroup(
SettingsEnum.HIDE_SHORTS_INFO_PANEL,
"shorts_info_panel_overview"
);
videoActionButton = new StringFilterGroup(
null,
"ContainerType|shorts_video_action_button"
);
pathFilterGroupList.addAll(
joinButton, subscribeButton, subscribeButtonPaused,
channelBar, soundButton, infoPanel, videoActionButton
);
var shortsCommentButton = new ByteArrayAsStringFilterGroup(
SettingsEnum.HIDE_SHORTS_COMMENTS_BUTTON,
"reel_comment_button"
);
var shortsShareButton = new ByteArrayAsStringFilterGroup(
SettingsEnum.HIDE_SHORTS_SHARE_BUTTON,
"reel_share_button"
);
var shortsRemixButton = new ByteArrayAsStringFilterGroup(
SettingsEnum.HIDE_SHORTS_REMIX_BUTTON,
"reel_remix_button"
);
videoActionButtonGroupList.addAll(shortsCommentButton, shortsShareButton, shortsRemixButton);
}
@Override
boolean isFiltered(final String path, final String identifier,
final byte[] protobufBufferArray) {
// Filter the path only when reelChannelBar is visible.
if (reelChannelBar.check(path).isFiltered())
if (this.pathFilterGroups.contains(path)) return true;
boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
FilterGroupList matchedList, FilterGroup matchedGroup, int matchedIndex) {
if (matchedList == pathFilterGroupList) {
// Always filter if matched.
if (matchedGroup == soundButton ||
matchedGroup == infoPanel ||
matchedGroup == channelBar ||
matchedGroup == subscribeButtonPaused
) return super.isFiltered(identifier, path, protobufBufferArray, matchedList, matchedGroup, matchedIndex);
// Shorts info panel path appears outside of reelChannelBar path.
if (infoPanel.isEnabled() && infoPanel.check(path).isFiltered()) return true;
// Video action buttons (comment, share, remix) have the same path.
if (matchedGroup == videoActionButton) {
if (videoActionButtonGroupList.check(protobufBufferArray).isFiltered()) return super.isFiltered(
identifier, path, protobufBufferArray, matchedList, matchedGroup, matchedIndex
);
return false;
}
return this.identifierFilterGroups.contains(identifier);
// Filter other path groups from pathFilterGroupList, only when reelChannelBar is visible
// to avoid false positives.
if (path.startsWith(REEL_CHANNEL_BAR_PATH))
if (matchedGroup == subscribeButton) return super.isFiltered(
identifier, path, protobufBufferArray, matchedList, matchedGroup, matchedIndex
);
return false;
} else if (matchedGroup == shelfHeader) {
// Because the header is used in watch history and possibly other places, check for the index,
// which is 0 when the shelf header is used for Shorts.
if (matchedIndex != 0) return false;
}
// Super class handles logging.
return super.isFiltered(identifier, path, protobufBufferArray, matchedList, matchedGroup, matchedIndex);
}
public static void hideShortsShelf(final View shortsShelfView) {
hideViewBy1dpUnderCondition(SettingsEnum.HIDE_SHORTS, shortsShelfView);
}
// Additional components that have to be hidden by setting their visibility
// region Hide the buttons in older versions of YouTube. New versions use Litho.
public static void hideShortsCommentsButton(final View commentsButtonView) {
hideViewUnderCondition(SettingsEnum.HIDE_SHORTS_COMMENTS_BUTTON, commentsButtonView);
@@ -96,6 +165,8 @@ public final class ShortsFilter extends Filter {
hideViewUnderCondition(SettingsEnum.HIDE_SHORTS_SHARE_BUTTON, shareButtonView);
}
// endregion
public static void hideNavigationBar() {
if (!SettingsEnum.HIDE_SHORTS_NAVIGATION_BAR.getBoolean()) return;
if (pivotBar == null) return;

View File

@@ -0,0 +1,26 @@
package app.revanced.integrations.patches.components;
import androidx.annotation.Nullable;
import app.revanced.integrations.settings.SettingsEnum;
// Abuse LithoFilter for OldVideoQualityMenuPatch.
public final class VideoQualityMenuFilterPatch extends Filter {
// Must be volatile or synchronized, as litho filtering runs off main thread and this field is then access from the main thread.
public static volatile boolean isVideoQualityMenuVisible;
public VideoQualityMenuFilterPatch() {
pathFilterGroupList.addAll(new StringFilterGroup(
SettingsEnum.SHOW_OLD_VIDEO_QUALITY_MENU,
"quick_quality_sheet_content.eml-js"
));
}
@Override
boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray,
FilterGroupList matchedList, FilterGroup matchedGroup, int matchedIndex) {
isVideoQualityMenuVisible = true;
return false;
}
}

View File

@@ -1,35 +0,0 @@
package app.revanced.integrations.patches.playback.quality;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import app.revanced.integrations.settings.SettingsEnum;
import app.revanced.integrations.utils.LogHelper;
public class OldQualityLayoutPatch {
public static void showOldQualityMenu(ListView listView)
{
if (!SettingsEnum.SHOW_OLD_VIDEO_MENU.getBoolean()) return;
listView.setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeListener() {
@Override
public void onChildViewAdded(View parent, View child) {
LogHelper.printDebug(() -> "Added: " + child);
parent.setVisibility(View.GONE);
final var indexOfAdvancedQualityMenuItem = 4;
if (listView.indexOfChild(child) != indexOfAdvancedQualityMenuItem) return;
LogHelper.printDebug(() -> "Found advanced menu: " + child);
final var qualityItemMenuPosition = 4;
listView.performItemClick(null, qualityItemMenuPosition, 0);
}
@Override
public void onChildViewRemoved(View parent, View child) {}
});
}
}

View File

@@ -0,0 +1,68 @@
package app.revanced.integrations.patches.playback.quality;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import app.revanced.integrations.patches.components.VideoQualityMenuFilterPatch;
import app.revanced.integrations.settings.SettingsEnum;
import app.revanced.integrations.utils.LogHelper;
/**
* This patch contains the logic to show the old video quality menu.
* Two methods are required, because the quality menu is a RecyclerView in the new YouTube version
* and a ListView in the old one.
*/
public final class OldVideoQualityMenuPatch {
/**
* Injection point.
*/
public static void onFlyoutMenuCreate(RecyclerView recyclerView) {
if (!SettingsEnum.SHOW_OLD_VIDEO_QUALITY_MENU.getBoolean()) return;
recyclerView.getViewTreeObserver().addOnDrawListener(() -> {
try {
// Check if the current view is the quality menu.
if (VideoQualityMenuFilterPatch.isVideoQualityMenuVisible) {
VideoQualityMenuFilterPatch.isVideoQualityMenuVisible = false;
((ViewGroup) recyclerView.getParent().getParent().getParent()).setVisibility(View.GONE);
// Click the "Advanced" quality menu to show the "old" quality menu.
((ViewGroup) recyclerView.getChildAt(0)).getChildAt(3).performClick();
}
} catch (Exception ex) {
LogHelper.printException(() -> "onFlyoutMenuCreate failure", ex);
}
});
}
/**
* Injection point. Only used if spoofing to an old app version.
*/
public static void showOldVideoQualityMenu(final ListView listView) {
if (!SettingsEnum.SHOW_OLD_VIDEO_QUALITY_MENU.getBoolean()) return;
listView.setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeListener() {
@Override
public void onChildViewAdded(View parent, View child) {
LogHelper.printDebug(() -> "Added listener to old type of quality menu");
parent.setVisibility(View.GONE);
final var indexOfAdvancedQualityMenuItem = 4;
if (listView.indexOfChild(child) != indexOfAdvancedQualityMenuItem) return;
LogHelper.printDebug(() -> "Found advanced menu item in old type of quality menu");
final var qualityItemMenuPosition = 4;
listView.performItemClick(null, qualityItemMenuPosition, 0);
}
@Override
public void onChildViewRemoved(View parent, View child) {
}
});
}
}

View File

@@ -38,13 +38,8 @@ public class RememberVideoQualityPatch {
private static List<Integer> videoQualities;
private static void changeDefaultQuality(int defaultQuality) {
NetworkType networkType = ReVancedUtils.getNetworkType();
if (networkType == NetworkType.NONE) {
ReVancedUtils.showToastShort("No internet connection");
return;
}
String networkTypeMessage;
if (networkType == NetworkType.MOBILE) {
if (ReVancedUtils.getNetworkType() == NetworkType.MOBILE) {
mobileQualitySetting.saveValue(defaultQuality);
networkTypeMessage = "mobile";
} else {
@@ -139,15 +134,24 @@ public class RememberVideoQualityPatch {
}
/**
* Injection point.
* Injection point. Old quality menu.
*/
public static void userChangedQuality(int selectedQuality) {
public static void userChangedQuality(int selectedQualityIndex) {
if (!SettingsEnum.REMEMBER_VIDEO_QUALITY_LAST_SELECTED.getBoolean()) return;
userSelectedQualityIndex = selectedQuality;
userSelectedQualityIndex = selectedQualityIndex;
userChangedDefaultQuality = true;
}
/**
* Injection point. New quality menu.
*/
public static void userChangedQualityInNewFlyout(int selectedQuality) {
if (!SettingsEnum.REMEMBER_VIDEO_QUALITY_LAST_SELECTED.getBoolean()) return;
changeDefaultQuality(selectedQuality); // Quality is human readable resolution (ie: 1080).
}
/**
* Injection point.
*/

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