Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(YouTube): Fix video playback by switching to ReVanced GmsCore vendor #2907

Merged
merged 11 commits into from
Mar 25, 2024

Conversation

oSumAtrIX
Copy link
Member

@oSumAtrIX oSumAtrIX commented Mar 24, 2024

About

This PR switches to the ReVanced GmsCore vendor to fix playback issues. The previous vendor did not update GmsCore, resulting in missing features required for playback, specifically PoToken, which was added to requests recently. Because the PoToken was missing, playback failed.

Related:

Fixes #293

Todo

  • Implement migration code or a dialog for com.mgoogle

Depends on:

@LisoUseInAIKyrios
Copy link
Contributor

Any Gms option migration must be done in patches, since there is no integrations settings for Gms.

The simplest is to reject Vanced MicroG in the option validation of gmsCoreVendorOption:

            it!!.matches(Regex("^[a-z]\\w*(\\.[a-z]\\w*)+\$"))
                    && it != "com.mgoogle"

But to most users this will show what looks like an error in the patching logs (even though everything is ok):

INFO: Setting patch options 
WARNING: Could not set option value for the GmsCore support patch: The option value "com.mgoogle" failed validation for gmsCoreVendor 
INFO: Merging integrations 

Alternatively it could validate outside the patch options instance, and use the new default if the old Vanced MicroG is set.
Then no warnings or anything of concern, But there is no feedback the obsolete Vanced MicroG selection was ignored.

@oSumAtrIX
Copy link
Member Author

Can't integrations show a dialog at start? The migration is only relevant for those that have actually touched the patch options or ReVanced CLI users in case they saved the option value to the json.

Additionally, the Logger facade can be used, or traditionally, the patch option validator, but that comes with its own merrits

@oSumAtrIX
Copy link
Member Author

Perhaps ReVanced Manager can check for option values that aren't present anymore, unless the user chose a custom value

@LisoUseInAIKyrios
Copy link
Contributor

LisoUseInAIKyrios commented Mar 24, 2024

If the user does not have the updated Gms core installed (and it was patched using the updated Gms), then
integrations cannot show a dialog because the app crashes immediately after the Gms hook is called. Integrations avoids the crash by calling System.exit(). Even attempting to show a dialog before the System.exit won't work, because Android throws a "Unable to add window" exception since the app is still starting up and there is nothing for the dialog to attach to.

The only thing that can be shown is a toast, since it's queued up before the app exits. A toast is already shown but it is very brief and only says "Gms Core is not installed. Install it", without any explanation that their old Vanced MicroG is obsolete and needs updating.

@oSumAtrIX
Copy link
Member Author

On first launch the app will start a query for the vendor that was used for MicroG. The user is asked to install it via a toast as well. Once that is done, the app will launch normally at which point the dialog can be shown. The user would be told that the vendor they are using can not be used anymore properly and asked to switch the vendor by using the default vendor (app.revanced) for example.

@LisoUseInAIKyrios
Copy link
Contributor

LisoUseInAIKyrios commented Mar 24, 2024

Or maybe temporarily change the website that is opened during launch.

Right now Integrations opens the website of https://github.com/revanced/gmscore/releases/latest if Gms is not installed. But this could be temporarily changed to a more informative website, explaining they need to uninstall any old MicroG and install this fixed version.

Then a few months from now the url can be changed back to the github latest releast page.

@oSumAtrIX
Copy link
Member Author

Maybe I am misunderstanding something, but Vanced used com.mgoogle and ReVanced uses app.revanced as the group id. Users that have previously used Vanced, but haven't changed the patch options, will automatically be asked to install GmsCore forked by us, whereas those who have set the patch option to Vanced explicitly, will be asked to install GmsCore by Vanced. In both cases, once done, the application starts normally

@LisoUseInAIKyrios
Copy link
Contributor

If the user is allowed to patch with the obsolete option of using Vanced MicroG, then Integrations can show an update dialog explaining the user needs to install an updated Gms Core and they need to repatch again and pick ReVanced as the Gms provider.

That would work, but why not forbid using Vanced MicroG during patching and save the user a lot of steps? Then they only need to install ReVanced Gms and they're done.

@oSumAtrIX
Copy link
Member Author

oSumAtrIX commented Mar 24, 2024

Mainly because we have little options to do so before patching as you have explained. The user would see an error while patching and not know how to solve it, unlike with a dedicated popup at launch. Am I missing something?

@LisoUseInAIKyrios
Copy link
Contributor

LisoUseInAIKyrios commented Mar 24, 2024

The patch options can be validated, and rejected if they are set to Vanced MicroG. Either silently reject (validate and override in the patch itself), or reject with more verbosity by validating in the patch options.

If the patch options are still set to Vanced MicroG, I think for now the best solution is to quietly ignore the patch option and use ReVanced Gms during patching. Then the user gets the correct Gms set during patching, no confusing error messages, and no stupid posts of "I updated and playback is still broken".

The integrations toast that normally says GmsCore is not installed. Please install it, can be temporarily changed to GmsCore is outdated. Please update. and it opens the usual github GmsCore release page.

@oSumAtrIX
Copy link
Member Author

My problem with that is that we would forbid using Vanced MicroG whereas with the dialog on app launch the user is warned. Using the validator to check the input but returning true isn't necessary though as the option value can be checked in the execute method. But then either the patch is aborted with a message that they are forced to move away from Vanced MicroG, or the patch continues and the user ignores it or has to repatch leading to the same outcome as just displaying the dialog. Forbidding using Vanced MicroG or unexpectedly migrating off it is something that we should avoid

@LisoUseInAIKyrios
Copy link
Contributor

LisoUseInAIKyrios commented Mar 24, 2024

I just checked, and a dialog cannot be shown during the GmsCore check in integrations because the context is not suitable for a dialog. (it is an Activity context, and not the context for an Android View).

The use case for allowing Vanced MicroG as a patch option:

  1. User is informed playback is fixed (in app announcement, Discord, whatever)
  2. User repatches as usual (but does not change their existing patch options saved in Manager)
  3. User lauches app, sees a toast or a website is opened telling them to update GmsCore, and reset their patch options and repatch again
  4. User installs updated GmsCore
  5. User relaunches ReVanced Manager (again)
  6. User changes patch options to default (be prepared for users to complain "what do I click on? how? huh?")
  7. User patches YouTube (again)
  8. Done

The use case for quietly migrating Vanced MicroG patch options to ReVanced GmsCore:

  1. User is informed playback is fixed (in app announcement, Discord, whatever)
  2. User repatches as usual (but does not change their existing patch options saved in Manager) -- their outdated Vanced option is silently updated, with no warnings during patching
  3. User lauches app, sees a warning telling them to update GmsCore (but they do not need to repatch again)
  4. User installs updated GmsCore
  5. Done

Comment on lines 47 to 56
// Ignore old Vanced MicroG options, if the patch options are from an old Manager/CLI installation.
// This could be done in the option validation, but that shows
// a warning message the user might interpret as something went wrong.
// So instead silently use the updated default value.
// TODO: Remove this temporary logic (and also revert the `gms_core_not_running_warning` string change)
if (gmsCoreVendorOption.value == OBSOLETE_VANCED_MICROG_PATCH_OPTION_VALUE) {
gmsCoreVendorOption.value = gmsCoreVendorOption.default
// If there was patch logging, it would be useful here.
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the simplest approach, to keep updating as simple and foolproof as possible.

Since there is no easy way to show a dialog in the Integrations Gms check, allowing Vanced MicroG makes it much more difficult informing the user what to do to fix their app.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Regarding logging, you can use the regular logger facade by Java:

Logger.info()

@oSumAtrIX
Copy link
Member Author

To clarify why I prefer to not hardcore com.mgoogle and not allow patching with it is because every vendor should be treated equally. While we deem com.mgoogle as unreliable or useless, what speaks of anyone creating their own fork with that group id. Why would we restrict exactly that group id then? Note, that there are vendors of GmsCore apart from Vanced that used the same group id. While they are something that we do not take into consideration, I am trying to clarify the problem that I am seeing with preventing to use an arbitrary group id.

I understand the overhead of the user needing to repatch, but this overhead will not be avoidable. You suggest to delay the process by silently migrating to GmsCore. Eventually you suggest to remove the migration code which means that at that point the user will face the issue you would be delaying til the time you remove the migration code because there is actually no way to migrate. Neither the patch nor the app at runtime can change the saved option value in ReVanced Manager and ReVanced Manager can not intervene as it is agnostic to patches. Introducing an API that solves this so that the patches can do exactly that would be a very fruitless change introduced just for the sake of fulfilling a single purpose instead of a generalized one (there is no practice case apart from this scenario).

I just realized, the shortcut by migrating directly to ReVanced is to not require the user to repatch an additional time. Regardless, this still prevents the user from using Vanced MicroG or any other vendor even if by choice. (For example unaffected users, those who have issues with our fork or who need the Huawei sign in)

@LisoUseInAIKyrios
Copy link
Contributor

Nearly all unaffected users will soon become affected users. As of right now, there is no other forks with the updated GmsCore fix.

Could Manager do a one off migration, where on startup only once it clears the option values of GmsCore support? Because that would fix all of this and still allow specifying a different Gms if they intentionally changed it.

@LisoUseInAIKyrios
Copy link
Contributor

I just realized, that since SpoofSignature was removed from client spoof, that means 99% of clients will have issues unless they also use the updated GmsCore (since signature spoofing is no more)

@oSumAtrIX
Copy link
Member Author

Unfortunately ReVanced Manager follows the strict policy of being agnostic to any patch. Every patch that ReVanced Manager sees is the super type "Patch". What can be done instead is solve an existing open issue. ReVanced Manager can save what kind of option was selected. A preset or a custom value. In either case, it can handle the scenario in which a preset is removed such as in the current scenario. If the user did not manually enter com.mgoogle and instead selected the preset, when the preset is deleted from the patch, ReVanced Manager can for example fall back to the default value (with a warning dialog for example). ReVanced Manager now also has introduced an update dialog when ever an update is available which makes more users aware of when an update exists. Additionally we are working on counting how many users are on older versions and how many on newer versions so we can properly migrate off deprecated APIs (if you noticed, ReVanced Patches uses the deprecated ones as to not break patches for users that haven't updated ReVanced Manager to be able to use the new APIs).

Til now ReVanced Manager has not saved what kind of option value was selected (preset or custom value). In this case we need to default to either behavior. The correct one would be to treat them as custom values as to not surprise the user with fallbacking to a default value, but then this makes it useless for this current scenario, as this case would also be treated as a custom value whereas the fallback never happens.

@oSumAtrIX
Copy link
Member Author

Adding to my previous comment, if ReVanced Manager would've implemented that feature, the migration code in the patch you pushed would not be needed anymore

@oSumAtrIX
Copy link
Member Author

oSumAtrIX commented Mar 24, 2024

I just realized, that since SpoofSignature was removed from client spoof, that means 99% of clients will have issues unless they also use the updated GmsCore (since signature spoofing is no more)

That doesn't mean we should invalidate anyone else creating an updated version of GmsCore with the group id com.mgoogle. Previous to the last commit, any vendor was treated equally. The design was intentional to be flexible and free, but with the latest commit com.mgoogle is now impossible to use. I understand the reason behind that, but perhaps there is a better solution (such as the proposal with ReVanced Manager falling back to default value). For now, we can keep this, as to not waste time, and if we find a better solution along the way, we can quickly implement that 👍

@oSumAtrIX
Copy link
Member Author

oSumAtrIX commented Mar 24, 2024

The problem with the migration idea is, even if it is temporary, once it is reverted or removed, the next time the user patches, they will be asked to install Vanced MicroG again. There is no way to persist the setting for those who have manually selected Vanced as the vendor (which is a little amount of people likely), unless the feature with falling back to default is added to ReVanced Manager (ideally for ReVanced CLi as well, thus subject to being implemented in ReVanced Library) for example.

@oSumAtrIX
Copy link
Member Author

oSumAtrIX commented Mar 24, 2024

I think you are assuming that setting the value will also save it in ReVanced Manager. That is not the case, the option values are only set at the beginning but not read to be saved after patching, this can be a great addition to the API though. An onChanged handler parameter could be added to options so that ReVanced Patches can set the values and ReVanced Manager and co can handle that. Kotlin supports properly delegation which means the setter can be delegated, one that can be hooked by ReVanced Manager. Its slightly off topic for now though

@LisoUseInAIKyrios
Copy link
Contributor

LisoUseInAIKyrios commented Mar 24, 2024

Then the migration logic could be kept until Manager better handles defaults options that change between patch releases.

If there was logging available to patches it would be helpful to print out something informing an option migration is applied (and keep the language in a "everything is ok" tone). But as far as I know only system println can be used and I don't know if that works with Manager.

I understand that changing the option value during patches does not change what is saved to disk. It would be useful if patches could alter the saved options, but the use case is pretty limited.

@oSumAtrIX
Copy link
Member Author

@LisoUseInAIKyrios The regular Java logging facade can be used by patches. Everything else is automatically handled, I can push that in a minute

@MarcaDian
Copy link
Contributor

I uninstalled Vanced MicroG, installed ReVanced GmsCore (https://github.com/ReVanced/GmsCore/releases/tag/v0.3.1.1.240913), and added a Google account to it.
I added all the permissions I had.

I patched the latest dev.13 recommended version of YouTube. I open it and it crashes.
Tell me what I did wrong.

full log 5s. of crash (my first log), if add findstr "revanced" it empty
log.txt

@LisoUseInAIKyrios
Copy link
Contributor

LisoUseInAIKyrios commented Mar 26, 2024

@MarcaDian The logs don't show anything ReVanced, except some weird window error when shutting down the app.

Try deleting your options.json file, then repatch with only GmsCore (--exclusive -i "GmsCore support") and verify the app launches.

@MarcaDian
Copy link
Contributor

MarcaDian commented Mar 26, 2024

@LisoUseInAIKyrios same issue, app crashes

[ {
  "patchName" : "GmsCore support",
  "options" : [ {
    "key" : "gmsCoreVendorGroupId",
    "value" : "app.revanced"
  } ]
} ]
PS D:\Android\cli> java -jar revanced-cli-4.6.0-dev.1-all.jar patch --exclusive -i "GmsCore support" -b revanced-patches-4.4.0-dev.13.jar -m revanced-integrations-1.5.0-dev.9.apk -o out.apk youtube_19.09.37.apk
INFO: Loading patches
INFO: Decoding app manifest
INFO: Remember video quality excluded
INFO: Playback speed excluded
INFO: Restore old video quality menu excluded
INFO: Video ads excluded
INFO: Hide ads excluded
INFO: Disable resuming Shorts on startup excluded
INFO: Disable auto captions excluded
INFO: SponsorBlock excluded
INFO: Change start page excluded
INFO: Theme excluded
INFO: Alternative thumbnails excluded
INFO: Disable fullscreen ambient mode excluded
INFO: Hide Shorts components excluded
INFO: Hide breaking news shelf excluded
INFO: Hide album cards excluded
INFO: Hide layout components excluded
INFO: Disable suggested video end screen excluded
INFO: Hide floating microphone button excluded
INFO: Hide crowdfunding box excluded
INFO: Hide endscreen cards excluded
INFO: Comments excluded
INFO: Disable rolling number animations excluded
INFO: Hide timestamp excluded
INFO: Player flyout menu excluded
INFO: Hide info cards excluded
INFO: Hide 'Load more' button excluded
INFO: Hide filter bar excluded
INFO: Hide seekbar excluded
INFO: Return YouTube Dislike excluded
INFO: Tablet mini player excluded
INFO: Enable tablet layout excluded
INFO: Wide searchbar excluded
INFO: Disable player popup panels excluded
INFO: Remove player controls background excluded
INFO: Custom player overlay opacity excluded
INFO: Navigation buttons excluded
INFO: Hide captions button excluded
INFO: Hide autoplay button excluded
INFO: Hide video action buttons excluded
INFO: Hide player buttons excluded
INFO: Hide cast button excluded
INFO: Custom branding excluded
INFO: Change header excluded
INFO: Restore old seekbar thumbnails excluded
INFO: Spoof app version excluded
INFO: Always repeat excluded
INFO: Announcements excluded
INFO: Bypass URL redirects excluded
INFO: Open links externally excluded
INFO: Disable zoom haptics excluded
INFO: Client spoof excluded
INFO: Spoof device dimensions excluded
INFO: Minimized playback excluded
INFO: Enable debugging excluded
INFO: Remove tracking query parameter excluded
INFO: Remove viewer discretion dialog excluded
INFO: Copy video URL excluded
INFO: Downloads excluded
INFO: Swipe controls excluded
INFO: Enable slide to seek excluded
INFO: Seekbar tapping excluded
INFO: Disable precise seeking gesture excluded
INFO: Spoof SIM country excluded
INFO: Remove screenshot restriction excluded
INFO: Spoof Wi-Fi connection excluded
INFO: Override certificate pinning excluded
INFO: Enable Android debugging excluded
INFO: Change package name excluded
INFO: Export all activities excluded
INFO: Predictive back gesture excluded
INFO: Remove screen capture restriction excluded
INFO: Setting patch options
INFO: Merging integrations
INFO: Deleting existing temporary files directory
INFO: Decoding resources
INFO: Executing patches
INFO: GmsCore support succeeded
INFO: Change package name succeeded
INFO: Compiling patched dex files
INFO: Compiled classes.dex
INFO: Compiled classes2.dex
INFO: Compiled classes3.dex
INFO: Compiled classes4.dex
INFO: Compiled classes5.dex
INFO: Compiled classes6.dex
INFO: Compiled classes7.dex
INFO: Compiled classes8.dex
INFO: Compiling modified resources
INFO: Aligning APK
INFO: Signing APK
INFO: Saved to D:\Android\cli\out.apk

@LisoUseInAIKyrios
Copy link
Contributor

Try clearing the app data? The logs should show something if the app crashes.

@MarcaDian
Copy link
Contributor

MarcaDian commented Mar 26, 2024

I'm doing a clean install

log.txt

maybe

03-26 12:12:31.817 26754 26775 I SpoofUtils: Package name of app.revanced.android.youtube spoofed to com.google.android.youtube
03-26 12:12:31.818 26754 26775 I SpoofUtils: Package name of app.revanced.android.youtube spoofed to com.google.android.youtube
03-26 12:12:31.822 26754 26775 I SpoofUtils: Package signature of app.revanced.android.youtube spoofed to 24bb24c05e47e0aefa68a58a766179d9b613a600
03-26 12:12:31.822 26754 26775 W GmsAuthProvider: Not granting extended access to [app.revanced.android.youtube], signature: 24bb24c05e47e0aefa68a58a766179d9b613a600
...
03-26 12:12:31.823 27829 27829 E Auth    : [GoogleAuthUtil] Exception when getting accounts
03-26 12:12:31.823 27829 27829 E Auth    : java.lang.SecurityException: Access denied, missing google package permission or GET_ACCOUNTS

@cyberboh
Copy link

@MarcaDian Could be caused by this PR ReVanced/revanced-integrations#589 isn't merged yet

@aliernfrog
Copy link
Contributor

I'm doing a clean install

log.txt

maybe

03-26 12:12:31.817 26754 26775 I SpoofUtils: Package name of app.revanced.android.youtube spoofed to com.google.android.youtube
03-26 12:12:31.818 26754 26775 I SpoofUtils: Package name of app.revanced.android.youtube spoofed to com.google.android.youtube
03-26 12:12:31.822 26754 26775 I SpoofUtils: Package signature of app.revanced.android.youtube spoofed to 24bb24c05e47e0aefa68a58a766179d9b613a600
03-26 12:12:31.822 26754 26775 W GmsAuthProvider: Not granting extended access to [app.revanced.android.youtube], signature: 24bb24c05e47e0aefa68a58a766179d9b613a600
...
03-26 12:12:31.823 27829 27829 E Auth    : [GoogleAuthUtil] Exception when getting accounts
03-26 12:12:31.823 27829 27829 E Auth    : java.lang.SecurityException: Access denied, missing google package permission or GET_ACCOUNTS

Granting contacts permission to patched YouTube works. But it doesn't show any accounts even after logging in.

@oSumAtrIX
Copy link
Member Author

oSumAtrIX commented Mar 26, 2024

The issue is known but kinda difficult to fix in certain terms. Basically you are missing YouTube on your device. How the fork works is, if you launch the patched app, GmsCore checks the app for whitelisted signatures. Because YouTube is modified, it fails these checks. This is why the fork includes a small workaround by asking for patched apps to include a spoof package name and signature meta in the manifest. GmsCore checks for that and spoofs the app to the original app. But because you don't have the original app installed GmsCore can not check for whatever it checks. Now, we could go as far as to simply check if the app is installed on the device but that would mean changing more in GmsCore than we should for the purpose of spoofing. We added the necessary code to spoof and workaround the whitelist, but checking if the original app exists in GmsCore is something that we arent supposed to look into, even if it's easy to do.

To note, because we work around the whitelist checks of GmsCore, this is an open hole for any kind of malware to abuse the same spoofing method to gain access to your Google account. This was the case with the previous vendor of GmsCore as well so we have no regression here.

The solution to that, while offtopic, is to make GmsCore ask the user for confirmation to use the spoofed app. If malware attempts to use GmsCore, the user would first need to grant permission, same would be in the case of the GmsCore support patch.

@MarcaDian
Copy link
Contributor

@oSumAtrIX Yes, my factory YouTube was frozen. I just installed standard YouTube from the market and everything worked. Thank you very much.

@oSumAtrIX
Copy link
Member Author

I don't know what frozen means, but even when installed as a system app and disabled on Android, it should work just fine

@MarcaDian
Copy link
Contributor

I'll probably leave this here for future users who will also encounter this. Maybe this will be useful for them.

I used the XiaomiADBFastbootTools program (A simple tool for Xiaomi devices, utilising ADB and Fastboot) to freeze standard applications pre-installed by the vendor. I don’t know the exact commands that it sends, but after them the standard YouTube disappears from the installed ones, but the files remain in the firmware, since after the reset everything returns as it was.

@Punisher551993

This comment was marked as resolved.

@oSumAtrIX

This comment was marked as resolved.

revanced-bot pushed a commit that referenced this pull request Mar 27, 2024
# [4.4.0](v4.3.0...v4.4.0) (2024-03-27)

### Bug Fixes

* **TikTok:** Hook application context earlier to prevent crash ([#2893](#2893)) ([395ccda](395ccda))
* **YouTube - Client spoof:** Spoof all user agents ([44a8a13](44a8a13))
* **YouTube - Downloads:** Use new task context ([#2841](#2841)) ([6d88cb4](6d88cb4))
* **YouTube - Hide ads:** Prevent app crash if hiding fullscreen ads is not possible ([#2910](#2910)) ([9f50470](9f50470))
* **YouTube Music:** Fix compatibility with latest versions ([#2924](#2924)) ([8378c84](8378c84))
* **YouTube:** Fix video playback by switching to ReVanced GmsCore vendor ([#2907](#2907)) ([33ea122](33ea122))
* **YouTube:** Move setting to correct screen ([a16eda8](a16eda8))

### Features

* **Instagram - Hide timeline ads:** Make compatible with latest versions ([a212f29](a212f29))
* **Mi Fitness:** Add `Force English locale` and `Fix login` patch ([#2734](#2734)) ([7a25791](7a25791))
* **Sync for Lemmy:** Add `Disable ads` patch ([#2872](#2872)) ([0785819](0785819))
* **YouTube - Downloads:** Use external downloader when selecting 'Download' in home feed flyout menu ([#2881](#2881)) ([10afc8c](10afc8c))
* **YouTube - External downloader:** Add ability to use in-app download button ([d900011](d900011))
* **YouTube - Hide layout components:** Filter home/search results by keywords ([#2853](#2853)) ([5916204](5916204))
* **YouTube - Hide Shorts components:** Hide like and dislike buttons ([2df0892](2df0892))
* **YouTube - Hide Shorts components:** Hide sound metadata label ([ea7d1e0](ea7d1e0))
* **YouTube - Hide Shorts components:** Hide title and full video link label ([e7b64e1](e7b64e1))
* **YouTube - Hide Shorts components:** Selectively hide Shorts for home / subscription / search ([#2925](#2925)) ([497c067](497c067))
* **YouTube :** Remove `HDR auto brightness` patch ([#2863](#2863)) ([b4c7bf4](b4c7bf4))
* **YouTube Vanced:** Remove `Hide ads` patch ([87887e4](87887e4))
* **YouTube:** Support version `19.05`, `19.06`, `19.07`, `19.08` and `19.09` ([#2862](#2862)) ([f044dde](f044dde))
E85Addict pushed a commit to E85Addict/revanced-patches that referenced this pull request Mar 27, 2024
# [4.4.0](v4.3.0...v4.4.0) (2024-03-27)

### Bug Fixes

* **TikTok:** Hook application context earlier to prevent crash ([ReVanced#2893](https://github.com/E85Addict/revanced-patches/issues/2893)) ([395ccda](395ccda))
* **YouTube - Client spoof:** Spoof all user agents ([44a8a13](44a8a13))
* **YouTube - Downloads:** Use new task context ([ReVanced#2841](https://github.com/E85Addict/revanced-patches/issues/2841)) ([6d88cb4](6d88cb4))
* **YouTube - Hide ads:** Prevent app crash if hiding fullscreen ads is not possible ([ReVanced#2910](https://github.com/E85Addict/revanced-patches/issues/2910)) ([9f50470](9f50470))
* **YouTube Music:** Fix compatibility with latest versions ([ReVanced#2924](https://github.com/E85Addict/revanced-patches/issues/2924)) ([8378c84](8378c84))
* **YouTube:** Fix video playback by switching to ReVanced GmsCore vendor ([ReVanced#2907](https://github.com/E85Addict/revanced-patches/issues/2907)) ([33ea122](33ea122))
* **YouTube:** Move setting to correct screen ([a16eda8](a16eda8))

### Features

* **Instagram - Hide timeline ads:** Make compatible with latest versions ([a212f29](a212f29))
* **Mi Fitness:** Add `Force English locale` and `Fix login` patch ([ReVanced#2734](https://github.com/E85Addict/revanced-patches/issues/2734)) ([7a25791](7a25791))
* **Sync for Lemmy:** Add `Disable ads` patch ([ReVanced#2872](https://github.com/E85Addict/revanced-patches/issues/2872)) ([0785819](0785819))
* **YouTube - Downloads:** Use external downloader when selecting 'Download' in home feed flyout menu ([ReVanced#2881](https://github.com/E85Addict/revanced-patches/issues/2881)) ([10afc8c](10afc8c))
* **YouTube - External downloader:** Add ability to use in-app download button ([d900011](d900011))
* **YouTube - Hide layout components:** Filter home/search results by keywords ([ReVanced#2853](https://github.com/E85Addict/revanced-patches/issues/2853)) ([5916204](5916204))
* **YouTube - Hide Shorts components:** Hide like and dislike buttons ([2df0892](2df0892))
* **YouTube - Hide Shorts components:** Hide sound metadata label ([ea7d1e0](ea7d1e0))
* **YouTube - Hide Shorts components:** Hide title and full video link label ([e7b64e1](e7b64e1))
* **YouTube - Hide Shorts components:** Selectively hide Shorts for home / subscription / search ([ReVanced#2925](https://github.com/E85Addict/revanced-patches/issues/2925)) ([497c067](497c067))
* **YouTube :** Remove `HDR auto brightness` patch ([ReVanced#2863](https://github.com/E85Addict/revanced-patches/issues/2863)) ([b4c7bf4](b4c7bf4))
* **YouTube Vanced:** Remove `Hide ads` patch ([87887e4](87887e4))
* **YouTube:** Support version `19.05`, `19.06`, `19.07`, `19.08` and `19.09` ([ReVanced#2862](https://github.com/E85Addict/revanced-patches/issues/2862)) ([f044dde](f044dde))

### Performance Improvements

* Personal Logo && Add upstream sync ([5022724](5022724))
@BlueStarBRS

This comment was marked as resolved.

@oSumAtrIX

This comment was marked as resolved.

@BlueStarBRS
Copy link

What do you mean by changing more then it should be in gmscore ?
And what have google changed that have this big impact?

@ILoveOpenSourceApplications
Copy link
Contributor

ILoveOpenSourceApplications commented Apr 22, 2024

Is there a reason why #2878 is still left open? (Wanted to ask there but it's locked so asking over here)

@oSumAtrIX
Copy link
Member Author

It was kept open so that people don't open duplicates, can be closed now.

n-34 pushed a commit to n-34/revanced-patches that referenced this pull request May 22, 2024
# [4.0.0](v3.1.0...v4.0.0) (2024-05-22)

### Bug Fixes

* Case patch option title correctly ([259c8b4](259c8b4))
* Compile DEX without debugging information ([f5df957](f5df957))
* Correctly handle patches jar path if it contains exclamation marks ([056e2d7](056e2d7))
* Indent patch option description correctly ([bd86ef6](bd86ef6))
* **Infinity for Reddit - Unlock subscription:** Do not crash by patching billing client ([7d76e2e](7d76e2e))
* **Infinity for Reddit - Unlock subscription:** Restore functionality on v7.0.0 ([bf19af9](bf19af9))
* **Mi Fitness - Fix login:** Patch correct register ([ReVanced#2942](https://github.com/n-34/revanced-patches/issues/2942)) ([dc96942](dc96942))
* Only set Android key if not null to prevent build errors ([1181b0b](1181b0b))
* **Override certificate pinning:** Always overwrite with a generic network security configuration ([2a842a1](2a842a1))
* Publicize abstract property ([b7c108e](b7c108e))
* **Reddit is Fun - Spoof client:** Fix login by updating the authorization subdomain from "old" to "ssl" ([b156cb1](b156cb1))
* Remove extra space from patch description ([ReVanced#2780](https://github.com/n-34/revanced-patches/issues/2780)) ([96a3f35](96a3f35))
* **Spoof SIM country:** Validate patch option value correctly ([8105463](8105463))
* **Tiktok - Remember clear display:** Use correct name ([d7e44cb](d7e44cb))
* **TikTok:** Hook application context earlier to prevent crash ([ReVanced#2893](https://github.com/n-34/revanced-patches/issues/2893)) ([395ccda](395ccda))
* **Tumblr - Fix old versions:** Improve reliability by removing remnances of Tumblr Live  ([ReVanced#2988](https://github.com/n-34/revanced-patches/issues/2988)) ([897b4db](897b4db))
* **Tumblr:** Restore compatibility with latest versions ([ReVanced#2955](https://github.com/n-34/revanced-patches/issues/2955)) ([2954ba7](2954ba7))
* **Twitch:** Correct patch resources to fix build ([1b63898](1b63898))
* URL decode path to JAR containing spaces to get JAR manifest ([ReVanced#3079](https://github.com/n-34/revanced-patches/issues/3079)) ([e1bbcb3](e1bbcb3))
* Use correct preference key ([3732b2c](3732b2c))
* Use deprecated members to ensure backwards compatibility ([083bd40](083bd40))
* Use new integrations patch path ([51e2f3b](51e2f3b))
* Use UrlDecoder API available in older Android versions ([d42fbb1](d42fbb1))
* **YouTube - Alternative thumbnails:** Clarify DeArrow support is for thumbnails ([ReVanced#2531](https://github.com/n-34/revanced-patches/issues/2531)) ([828abb0](828abb0))
* **YouTube - Change header:** Improve patch descriptions ([ReVanced#2581](https://github.com/n-34/revanced-patches/issues/2581)) ([43a5677](43a5677))
* **YouTube - Client spoof:** Spoof all user agents ([44a8a13](44a8a13))
* **YouTube - Client spoof:** Spoof client to fix playback ([ReVanced#3199](https://github.com/n-34/revanced-patches/issues/3199)) ([bec1eef](bec1eef))
* **YouTube - Downloads:** Use new task context ([ReVanced#2841](https://github.com/n-34/revanced-patches/issues/2841)) ([6d88cb4](6d88cb4))
* **YouTube - Enable slide to seek:** Change patch default to excluded and add description disclaimer ([ReVanced#2610](https://github.com/n-34/revanced-patches/issues/2610)) ([2fdc4c2](2fdc4c2))
* **YouTube - GmsCore support:** Prompt to disable battery optimizations, if not done already ([ReVanced#2958](https://github.com/n-34/revanced-patches/issues/2958)) ([82acb84](82acb84))
* **YouTube - Hide ads:** Fix string typo ([ecc56d6](ecc56d6))
* **YouTube - Hide ads:** Prevent app crash if hiding fullscreen ads is not possible ([ReVanced#2910](https://github.com/n-34/revanced-patches/issues/2910)) ([9f50470](9f50470))
* **YouTube - Hide ads:** rename `Hide paid content` to `Hide paid promotion label` ([ReVanced#3026](https://github.com/n-34/revanced-patches/issues/3026)) ([17e4ac9](17e4ac9))
* **YouTube - Hide load more button:** Include patch with `Hide layout components`, and hide button only in search feed  ([ReVanced#2959](https://github.com/n-34/revanced-patches/issues/2959)) ([b007e8e](b007e8e))
* **YouTube - Hide Shorts components:** Correctly hide Shorts if navigation tab is changed using device back button ([ReVanced#3007](https://github.com/n-34/revanced-patches/issues/3007)) ([e5848e9](e5848e9))
* **YouTube - Hide Shorts components:** Rename option title to make it consistent ([4d6e34b](4d6e34b))
* **YouTube - Hide video action buttons:** Remove obsolete `hide Shop button` ([ReVanced#3057](https://github.com/n-34/revanced-patches/issues/3057)) ([b5e34f3](b5e34f3))
* **YouTube - Navigation buttons:** Adjust summary text of switch notification button ([ReVanced#3130](https://github.com/n-34/revanced-patches/issues/3130)) ([cc8b4c9](cc8b4c9))
* **YouTube - Player flyout menu:** Add hide Lock screen menu ([ReVanced#2985](https://github.com/n-34/revanced-patches/issues/2985)) ([308de4a](308de4a))
* **YouTube - Player flyout menu:** Remove obsolete `Hide report menu` ([d627d44](d627d44))
* **YouTube - Restore old video quality menu:** Show advanced quality menu in Shorts quality flyout ([ReVanced#3155](https://github.com/n-34/revanced-patches/issues/3155)) ([c2b5bb7](c2b5bb7))
* **YouTube - SponsorBlock:** Export local statistics with saved settings ([f8365b4](f8365b4))
* **YouTube - SponsorBlock:** Show correct segment times if video is over 24 hours in length ([ReVanced#3138](https://github.com/n-34/revanced-patches/issues/3138)) ([6cdf697](6cdf697))
* **YouTube - Spoof app version:** Remove broken versions ([ReVanced#2776](https://github.com/n-34/revanced-patches/issues/2776)) ([9466d97](9466d97))
* **YouTube - Spoof device dimensions:** Warn about potential performance issues ([ReVanced#3039](https://github.com/n-34/revanced-patches/issues/3039)) ([9d6f305](9d6f305))
* **YouTube - Spoof signature:** Fix tracking such as history or watch time ([bcd8b48](bcd8b48))
* **YouTube Music - Remove upgrade button:** Fix compatibility with latest versions ([ReVanced#3045](https://github.com/n-34/revanced-patches/issues/3045)) ([80de996](80de996))
* **YouTube Music:** Fix compatibility with latest versions ([ReVanced#2924](https://github.com/n-34/revanced-patches/issues/2924)) ([8378c84](8378c84))
* **YouTube Music:** Make `Hide 'Get Music Premium' label` and `Remove upgrade button` compatible with latest version ([ReVanced#3164](https://github.com/n-34/revanced-patches/issues/3164)) ([3ff20de](3ff20de))
* **YouTube:** Correctly show channel page on tablet devices ([ReVanced#2656](https://github.com/n-34/revanced-patches/issues/2656)) ([c7c9700](c7c9700))
* **YouTube:** Do not crash on startup for root installs ([ReVanced#2655](https://github.com/n-34/revanced-patches/issues/2655)) ([02abace](02abace))
* **YouTube:** Fix grammer mistakes in patch descriptions ([ReVanced#2543](https://github.com/n-34/revanced-patches/issues/2543)) ([ebf5993](ebf5993))
* **YouTube:** Fix video playback by switching to ReVanced GmsCore vendor ([ReVanced#2907](https://github.com/n-34/revanced-patches/issues/2907)) ([33ea122](33ea122))
* **YouTube:** Move setting to correct screen ([a16eda8](a16eda8))
* **YouTube:** Shorten setting titles to fit on screen ([ReVanced#2579](https://github.com/n-34/revanced-patches/issues/2579)) ([b2a5dd3](b2a5dd3))

### Code Refactoring

* Fix package and code structure ([ReVanced#2541](https://github.com/n-34/revanced-patches/issues/2541)) ([a08457e](a08457e))

### Features

* Add `Hex` patch ([ReVanced#3034](https://github.com/n-34/revanced-patches/issues/3034)) ([3c95aac](3c95aac))
* **Amazon:** Add `Always allow deep-linking` patch ([ReVanced#3000](https://github.com/n-34/revanced-patches/issues/3000)) ([a92b7fb](a92b7fb))
* **Change package name:** Mention caveat of the patch in the description ([427b81a](427b81a))
* **ID Austria:** Remove constraint on any version ([ReVanced#2526](https://github.com/n-34/revanced-patches/issues/2526)) ([de2cb88](de2cb88))
* **Instagram - Hide timeline ads:** Make compatible with latest versions ([a212f29](a212f29))
* **Mi Fitness:** Add `Force English locale` and `Fix login` patch ([ReVanced#2734](https://github.com/n-34/revanced-patches/issues/2734)) ([7a25791](7a25791))
* Move strings to resources for localization ([ReVanced#2440](https://github.com/n-34/revanced-patches/issues/2440)) ([060ab8f](060ab8f))
* **MyFitnessPal:** Add `Hide ads` patch ([ReVanced#2594](https://github.com/n-34/revanced-patches/issues/2594)) ([fd4b3c7](fd4b3c7))
* **OpeningHours:** Add `Fix crash` patch ([ReVanced#2697](https://github.com/n-34/revanced-patches/issues/2697)) ([0d011b8](0d011b8))
* **Photomath:** Add `Hide update popup` patch ([ReVanced#2637](https://github.com/n-34/revanced-patches/issues/2637)) ([fbbecd3](fbbecd3))
* **Photomath:** Support version `8.37.0` ([ReVanced#3109](https://github.com/n-34/revanced-patches/issues/3109)) ([fb02b48](fb02b48))
* **Piccoma:** Add `Disable tracking` patch ([ReVanced#3143](https://github.com/n-34/revanced-patches/issues/3143)) ([8ab9e8f](8ab9e8f))
* **Piccoma:** Add `Spoof Android device ID` patch ([ReVanced#3145](https://github.com/n-34/revanced-patches/issues/3145)) ([d953c6b](d953c6b))
* **Public API:** Deprecate `HideEmailAddressPatch` ([866bceb](866bceb))
* **Public API:** Make `BottomControlsResource#addControls` public ([ReVanced#2514](https://github.com/n-34/revanced-patches/issues/2514)) ([f4e2257](f4e2257))
* Remove unnecessary description from patch ([1a89dd9](1a89dd9))
* **Strava - Unlock subscription:** Remove compatible version constraint ([80a5599](80a5599))
* **Sync for Lemmy:** Add `Disable ads` patch ([ReVanced#2872](https://github.com/n-34/revanced-patches/issues/2872)) ([0785819](0785819))
* **Sync for Reddit:** Add `Fix /s/ links` patch ([f15ef3f](f15ef3f))
* **Tiktok - Playback speed:** Remember playback speed ([ReVanced#2506](https://github.com/n-34/revanced-patches/issues/2506)) ([d2970e5](d2970e5))
* **Tiktok:** Add `Remember clear mode` patch ([ReVanced#2509](https://github.com/n-34/revanced-patches/issues/2509)) ([048bf59](048bf59))
* **Tumblr:** Add `Disable Ad-Free Banner` patch ([ReVanced#3091](https://github.com/n-34/revanced-patches/issues/3091)) ([54baf08](54baf08))
* **Tumblr:** Add `Fix old versions` patch ([ReVanced#2954](https://github.com/n-34/revanced-patches/issues/2954)) ([2fde60e](2fde60e))
* **Twitter - Unlock downloads:** Unlock GIF downloads ([d0f91c8](d0f91c8))
* **Twitter:** Add `Sanitize sharing links` patch ([ReVanced#3003](https://github.com/n-34/revanced-patches/issues/3003)) ([186b887](186b887))
* **VSCO - Unlock pro:** Constrain to last working version ([6dd4a7c](6dd4a7c))
* **WarnWetter - Promo code unlock:** Constrain to last working version ([ReVanced#3110](https://github.com/n-34/revanced-patches/issues/3110)) ([92fc8aa](92fc8aa))
* **X:** Add `Hide view count` patch ([bf064ec](bf064ec))
* **X:** Add `Open links as query` patch ([ReVanced#2730](https://github.com/n-34/revanced-patches/issues/2730)) ([ba75a51](ba75a51))
* **X:** Add `Unlock downloads` patch ([2c20844](2c20844))
* **YouTube - Alternative thumbnails:** Selectively enable for home / subscription / search ([ReVanced#2926](https://github.com/n-34/revanced-patches/issues/2926)) ([8549e1b](8549e1b))
* **YouTube - Change header:** Change to ReVanced borderless logo header by default ([ReVanced#2512](https://github.com/n-34/revanced-patches/issues/2512)) ([75f785d](75f785d))
* **YouTube - Change header:** Improve patch option description ([3b8bc08](3b8bc08))
* **YouTube - Change start page:** Add more start pages ([cc1d9b7](cc1d9b7))
* **YouTube - Comments:** Add option to hide timestamp and emoji buttons ([ReVanced#3076](https://github.com/n-34/revanced-patches/issues/3076)) ([7efe5ae](7efe5ae))
* **YouTube - Custom branding:** Improve patch option description ([e27f56c](e27f56c))
* **YouTube - Custom filter:** Custom filtering of the protocol buffer ([ReVanced#2682](https://github.com/n-34/revanced-patches/issues/2682)) ([872a5b6](872a5b6))
* **YouTube - Downloads:** Use external downloader when selecting 'Download' in home feed flyout menu ([ReVanced#2881](https://github.com/n-34/revanced-patches/issues/2881)) ([10afc8c](10afc8c))
* **YouTube - External downloader:** Add ability to use in-app download button ([d900011](d900011))
* **YouTube - GmsCore:** Require ignoring battery optimizations ([ReVanced#2952](https://github.com/n-34/revanced-patches/issues/2952)) ([c0bef25](c0bef25))
* **YouTube - Hide ads:** Add option to hide the 'Visit store' button on channel pages ([ReVanced#3077](https://github.com/n-34/revanced-patches/issues/3077)) ([03d2cfa](03d2cfa))
* **YouTube - Hide ads:** Hide fullscreen ads ([bdc9a12](bdc9a12))
* **YouTube - Hide layout components:** Add option to hide horizontal shelves ([ReVanced#2951](https://github.com/n-34/revanced-patches/issues/2951)) ([9ae0650](9ae0650))
* **YouTube - Hide layout components:** Filter home/search results by keywords ([ReVanced#2853](https://github.com/n-34/revanced-patches/issues/2853)) ([5916204](5916204))
* **YouTube - Hide layout components:** Hide playables ([8423515](8423515))
* **YouTube - Hide layout components:** Hide search result recommendations ([55cc7f1](55cc7f1))
* **YouTube - Hide Shorts components:** Hide 'Buy super thanks' button ([ReVanced#3176](https://github.com/n-34/revanced-patches/issues/3176)) ([89c1548](89c1548))
* **YouTube - Hide Shorts components:** Hide `Shop`, `Location` and `Save sound to playlist` buttons ([ReVanced#3018](https://github.com/n-34/revanced-patches/issues/3018)) ([5210ac4](5210ac4))
* **YouTube - Hide Shorts components:** Hide like / dislike button in video ads ([ReVanced#3062](https://github.com/n-34/revanced-patches/issues/3062)) ([1296985](1296985))
* **YouTube - Hide Shorts components:** Hide like and dislike buttons ([2df0892](2df0892))
* **YouTube - Hide Shorts components:** Hide sound metadata label ([ea7d1e0](ea7d1e0))
* **YouTube - Hide Shorts components:** Hide tagged products, hide search suggestions ([ReVanced#3019](https://github.com/n-34/revanced-patches/issues/3019)) ([e0d2fe5](e0d2fe5))
* **YouTube - Hide Shorts components:** Hide title and full video link label ([e7b64e1](e7b64e1))
* **YouTube - Hide Shorts components:** Selectively hide Shorts for home / subscription / search ([ReVanced#2925](https://github.com/n-34/revanced-patches/issues/2925)) ([497c067](497c067))
* **YouTube - Navigation buttons:** Add option to hide navigation button labels ([ReVanced#3189](https://github.com/n-34/revanced-patches/issues/3189)) ([f9dc705](f9dc705))
* **YouTube - Spoof app version:** Add `18.09.39` to restore library tab ([ReVanced#2643](https://github.com/n-34/revanced-patches/issues/2643)) ([dd108ff](dd108ff))
* **YouTube - Spoof app version:** Add target versions ([ReVanced#2787](https://github.com/n-34/revanced-patches/issues/2787)) ([83a7bd8](83a7bd8))
* **YouTube - Swipe controls:** Save and restore brightness and add auto-brightness toggle ([ReVanced#2996](https://github.com/n-34/revanced-patches/issues/2996)) ([f6c3bc4](f6c3bc4))
* **YouTube - Theme:** Add classic dark color to presets ([ReVanced#2542](https://github.com/n-34/revanced-patches/issues/2542)) ([4e1dc00](4e1dc00))
* **YouTube :** Remove `HDR auto brightness` patch ([ReVanced#2863](https://github.com/n-34/revanced-patches/issues/2863)) ([b4c7bf4](b4c7bf4))
* **YouTube Vanced:** Remove `Hide ads` patch ([87887e4](87887e4))
* **YouTube:** Add 'About' preference to settings menu ([ReVanced#2981](https://github.com/n-34/revanced-patches/issues/2981)) ([5abf894](5abf894))
* **YouTube:** Add `Remove viewer discretion dialog` patch ([a07f83f](a07f83f))
* **YouTube:** Improve patch descriptions ([ReVanced#2519](https://github.com/n-34/revanced-patches/issues/2519)) ([e8d1389](e8d1389))
* **YouTube:** Match overlay icons style to YouTube ([ReVanced#3023](https://github.com/n-34/revanced-patches/issues/3023)) ([6849393](6849393))
* **YouTube:** Remove `Hide email address` patch ([3b84305](3b84305))
* **YouTube:** Reorganize settings menu ([ReVanced#2737](https://github.com/n-34/revanced-patches/issues/2737)) ([36132df](36132df))
* **YouTube:** Support version `19.02.34` ([ReVanced#2627](https://github.com/n-34/revanced-patches/issues/2627)) ([94e08b7](94e08b7))
* **YouTube:** Support version `19.03.35` ([ReVanced#2640](https://github.com/n-34/revanced-patches/issues/2640)) ([ff08f58](ff08f58))
* **YouTube:** Support version `19.04.37` ([ReVanced#2687](https://github.com/n-34/revanced-patches/issues/2687)) ([c23e023](c23e023))
* **YouTube:** Support version `19.05`, `19.06`, `19.07`, `19.08` and `19.09` ([ReVanced#2862](https://github.com/n-34/revanced-patches/issues/2862)) ([f044dde](f044dde))
* **YouTube:** Support version `19.09.38`, `19.10.39` and `19.11.43` ([ReVanced#2971](https://github.com/n-34/revanced-patches/issues/2971)) ([730f3e3](730f3e3))
* **YouTube:** Support versions `18.48.39`, `18.49.37` and `19.01.34` ([ReVanced#2551](https://github.com/n-34/revanced-patches/issues/2551)) ([a938e73](a938e73))
* **YT Music - Hide 'Get Music Premium' label:** Remove occurences of label in settings ([ReVanced#3046](https://github.com/n-34/revanced-patches/issues/3046)) ([10e170a](10e170a))
* **YT Music:** Add support for `7.01.52` ([ReVanced#3177](https://github.com/n-34/revanced-patches/issues/3177)) ([e9bfb25](e9bfb25))

### BREAKING CHANGES

* **Photomath:** Some packages have changed locations.
* Various APIs have been changed.
* Various public APIs have changed names and packages or were removed entirely
n-34 pushed a commit to n-34/revanced-patches that referenced this pull request May 22, 2024
# [4.0.0](v3.1.0...v4.0.0) (2024-05-22)

### Bug Fixes

* Case patch option title correctly ([259c8b4](259c8b4))
* Compile DEX without debugging information ([f5df957](f5df957))
* Correctly handle patches jar path if it contains exclamation marks ([056e2d7](056e2d7))
* Indent patch option description correctly ([bd86ef6](bd86ef6))
* **Infinity for Reddit - Unlock subscription:** Do not crash by patching billing client ([7d76e2e](7d76e2e))
* **Infinity for Reddit - Unlock subscription:** Restore functionality on v7.0.0 ([bf19af9](bf19af9))
* **Mi Fitness - Fix login:** Patch correct register ([ReVanced#2942](https://github.com/n-34/revanced-patches/issues/2942)) ([dc96942](dc96942))
* Only set Android key if not null to prevent build errors ([1181b0b](1181b0b))
* **Override certificate pinning:** Always overwrite with a generic network security configuration ([2a842a1](2a842a1))
* Publicize abstract property ([b7c108e](b7c108e))
* **Reddit is Fun - Spoof client:** Fix login by updating the authorization subdomain from "old" to "ssl" ([b156cb1](b156cb1))
* Remove extra space from patch description ([ReVanced#2780](https://github.com/n-34/revanced-patches/issues/2780)) ([96a3f35](96a3f35))
* **Spoof SIM country:** Validate patch option value correctly ([8105463](8105463))
* **Tiktok - Remember clear display:** Use correct name ([d7e44cb](d7e44cb))
* **TikTok:** Hook application context earlier to prevent crash ([ReVanced#2893](https://github.com/n-34/revanced-patches/issues/2893)) ([395ccda](395ccda))
* **Tumblr - Fix old versions:** Improve reliability by removing remnances of Tumblr Live  ([ReVanced#2988](https://github.com/n-34/revanced-patches/issues/2988)) ([897b4db](897b4db))
* **Tumblr:** Restore compatibility with latest versions ([ReVanced#2955](https://github.com/n-34/revanced-patches/issues/2955)) ([2954ba7](2954ba7))
* **Twitch:** Correct patch resources to fix build ([1b63898](1b63898))
* URL decode path to JAR containing spaces to get JAR manifest ([ReVanced#3079](https://github.com/n-34/revanced-patches/issues/3079)) ([e1bbcb3](e1bbcb3))
* Use correct preference key ([3732b2c](3732b2c))
* Use deprecated members to ensure backwards compatibility ([083bd40](083bd40))
* Use new integrations patch path ([51e2f3b](51e2f3b))
* Use UrlDecoder API available in older Android versions ([d42fbb1](d42fbb1))
* **YouTube - Alternative thumbnails:** Clarify DeArrow support is for thumbnails ([ReVanced#2531](https://github.com/n-34/revanced-patches/issues/2531)) ([828abb0](828abb0))
* **YouTube - Change header:** Improve patch descriptions ([ReVanced#2581](https://github.com/n-34/revanced-patches/issues/2581)) ([43a5677](43a5677))
* **YouTube - Client spoof:** Spoof all user agents ([44a8a13](44a8a13))
* **YouTube - Client spoof:** Spoof client to fix playback ([ReVanced#3199](https://github.com/n-34/revanced-patches/issues/3199)) ([bec1eef](bec1eef))
* **YouTube - Downloads:** Use new task context ([ReVanced#2841](https://github.com/n-34/revanced-patches/issues/2841)) ([6d88cb4](6d88cb4))
* **YouTube - Enable slide to seek:** Change patch default to excluded and add description disclaimer ([ReVanced#2610](https://github.com/n-34/revanced-patches/issues/2610)) ([2fdc4c2](2fdc4c2))
* **YouTube - GmsCore support:** Prompt to disable battery optimizations, if not done already ([ReVanced#2958](https://github.com/n-34/revanced-patches/issues/2958)) ([82acb84](82acb84))
* **YouTube - Hide ads:** Fix string typo ([ecc56d6](ecc56d6))
* **YouTube - Hide ads:** Prevent app crash if hiding fullscreen ads is not possible ([ReVanced#2910](https://github.com/n-34/revanced-patches/issues/2910)) ([9f50470](9f50470))
* **YouTube - Hide ads:** rename `Hide paid content` to `Hide paid promotion label` ([ReVanced#3026](https://github.com/n-34/revanced-patches/issues/3026)) ([17e4ac9](17e4ac9))
* **YouTube - Hide load more button:** Include patch with `Hide layout components`, and hide button only in search feed  ([ReVanced#2959](https://github.com/n-34/revanced-patches/issues/2959)) ([b007e8e](b007e8e))
* **YouTube - Hide Shorts components:** Correctly hide Shorts if navigation tab is changed using device back button ([ReVanced#3007](https://github.com/n-34/revanced-patches/issues/3007)) ([e5848e9](e5848e9))
* **YouTube - Hide Shorts components:** Rename option title to make it consistent ([4d6e34b](4d6e34b))
* **YouTube - Hide video action buttons:** Remove obsolete `hide Shop button` ([ReVanced#3057](https://github.com/n-34/revanced-patches/issues/3057)) ([b5e34f3](b5e34f3))
* **YouTube - Navigation buttons:** Adjust summary text of switch notification button ([ReVanced#3130](https://github.com/n-34/revanced-patches/issues/3130)) ([cc8b4c9](cc8b4c9))
* **YouTube - Player flyout menu:** Add hide Lock screen menu ([ReVanced#2985](https://github.com/n-34/revanced-patches/issues/2985)) ([308de4a](308de4a))
* **YouTube - Player flyout menu:** Remove obsolete `Hide report menu` ([d627d44](d627d44))
* **YouTube - Restore old video quality menu:** Show advanced quality menu in Shorts quality flyout ([ReVanced#3155](https://github.com/n-34/revanced-patches/issues/3155)) ([c2b5bb7](c2b5bb7))
* **YouTube - SponsorBlock:** Export local statistics with saved settings ([f8365b4](f8365b4))
* **YouTube - SponsorBlock:** Show correct segment times if video is over 24 hours in length ([ReVanced#3138](https://github.com/n-34/revanced-patches/issues/3138)) ([6cdf697](6cdf697))
* **YouTube - Spoof app version:** Remove broken versions ([ReVanced#2776](https://github.com/n-34/revanced-patches/issues/2776)) ([9466d97](9466d97))
* **YouTube - Spoof device dimensions:** Warn about potential performance issues ([ReVanced#3039](https://github.com/n-34/revanced-patches/issues/3039)) ([9d6f305](9d6f305))
* **YouTube - Spoof signature:** Fix tracking such as history or watch time ([bcd8b48](bcd8b48))
* **YouTube Music - Remove upgrade button:** Fix compatibility with latest versions ([ReVanced#3045](https://github.com/n-34/revanced-patches/issues/3045)) ([80de996](80de996))
* **YouTube Music:** Fix compatibility with latest versions ([ReVanced#2924](https://github.com/n-34/revanced-patches/issues/2924)) ([8378c84](8378c84))
* **YouTube Music:** Make `Hide 'Get Music Premium' label` and `Remove upgrade button` compatible with latest version ([ReVanced#3164](https://github.com/n-34/revanced-patches/issues/3164)) ([3ff20de](3ff20de))
* **YouTube:** Correctly show channel page on tablet devices ([ReVanced#2656](https://github.com/n-34/revanced-patches/issues/2656)) ([c7c9700](c7c9700))
* **YouTube:** Do not crash on startup for root installs ([ReVanced#2655](https://github.com/n-34/revanced-patches/issues/2655)) ([02abace](02abace))
* **YouTube:** Fix grammer mistakes in patch descriptions ([ReVanced#2543](https://github.com/n-34/revanced-patches/issues/2543)) ([ebf5993](ebf5993))
* **YouTube:** Fix video playback by switching to ReVanced GmsCore vendor ([ReVanced#2907](https://github.com/n-34/revanced-patches/issues/2907)) ([33ea122](33ea122))
* **YouTube:** Move setting to correct screen ([a16eda8](a16eda8))
* **YouTube:** Shorten setting titles to fit on screen ([ReVanced#2579](https://github.com/n-34/revanced-patches/issues/2579)) ([b2a5dd3](b2a5dd3))

### Code Refactoring

* Fix package and code structure ([ReVanced#2541](https://github.com/n-34/revanced-patches/issues/2541)) ([a08457e](a08457e))

### Features

* Add `Hex` patch ([ReVanced#3034](https://github.com/n-34/revanced-patches/issues/3034)) ([3c95aac](3c95aac))
* **Amazon:** Add `Always allow deep-linking` patch ([ReVanced#3000](https://github.com/n-34/revanced-patches/issues/3000)) ([a92b7fb](a92b7fb))
* **Change package name:** Mention caveat of the patch in the description ([427b81a](427b81a))
* **ID Austria:** Remove constraint on any version ([ReVanced#2526](https://github.com/n-34/revanced-patches/issues/2526)) ([de2cb88](de2cb88))
* **Instagram - Hide timeline ads:** Make compatible with latest versions ([a212f29](a212f29))
* **Mi Fitness:** Add `Force English locale` and `Fix login` patch ([ReVanced#2734](https://github.com/n-34/revanced-patches/issues/2734)) ([7a25791](7a25791))
* Move strings to resources for localization ([ReVanced#2440](https://github.com/n-34/revanced-patches/issues/2440)) ([060ab8f](060ab8f))
* **MyFitnessPal:** Add `Hide ads` patch ([ReVanced#2594](https://github.com/n-34/revanced-patches/issues/2594)) ([fd4b3c7](fd4b3c7))
* **OpeningHours:** Add `Fix crash` patch ([ReVanced#2697](https://github.com/n-34/revanced-patches/issues/2697)) ([0d011b8](0d011b8))
* **Photomath:** Add `Hide update popup` patch ([ReVanced#2637](https://github.com/n-34/revanced-patches/issues/2637)) ([fbbecd3](fbbecd3))
* **Photomath:** Support version `8.37.0` ([ReVanced#3109](https://github.com/n-34/revanced-patches/issues/3109)) ([fb02b48](fb02b48))
* **Piccoma:** Add `Disable tracking` patch ([ReVanced#3143](https://github.com/n-34/revanced-patches/issues/3143)) ([8ab9e8f](8ab9e8f))
* **Piccoma:** Add `Spoof Android device ID` patch ([ReVanced#3145](https://github.com/n-34/revanced-patches/issues/3145)) ([d953c6b](d953c6b))
* **Public API:** Deprecate `HideEmailAddressPatch` ([866bceb](866bceb))
* **Public API:** Make `BottomControlsResource#addControls` public ([ReVanced#2514](https://github.com/n-34/revanced-patches/issues/2514)) ([f4e2257](f4e2257))
* Remove unnecessary description from patch ([1a89dd9](1a89dd9))
* **Strava - Unlock subscription:** Remove compatible version constraint ([80a5599](80a5599))
* **Sync for Lemmy:** Add `Disable ads` patch ([ReVanced#2872](https://github.com/n-34/revanced-patches/issues/2872)) ([0785819](0785819))
* **Sync for Reddit:** Add `Fix /s/ links` patch ([f15ef3f](f15ef3f))
* **Tiktok - Playback speed:** Remember playback speed ([ReVanced#2506](https://github.com/n-34/revanced-patches/issues/2506)) ([d2970e5](d2970e5))
* **Tiktok:** Add `Remember clear mode` patch ([ReVanced#2509](https://github.com/n-34/revanced-patches/issues/2509)) ([048bf59](048bf59))
* **Tumblr:** Add `Disable Ad-Free Banner` patch ([ReVanced#3091](https://github.com/n-34/revanced-patches/issues/3091)) ([54baf08](54baf08))
* **Tumblr:** Add `Fix old versions` patch ([ReVanced#2954](https://github.com/n-34/revanced-patches/issues/2954)) ([2fde60e](2fde60e))
* **Twitter - Unlock downloads:** Unlock GIF downloads ([d0f91c8](d0f91c8))
* **Twitter:** Add `Sanitize sharing links` patch ([ReVanced#3003](https://github.com/n-34/revanced-patches/issues/3003)) ([186b887](186b887))
* **VSCO - Unlock pro:** Constrain to last working version ([6dd4a7c](6dd4a7c))
* **WarnWetter - Promo code unlock:** Constrain to last working version ([ReVanced#3110](https://github.com/n-34/revanced-patches/issues/3110)) ([92fc8aa](92fc8aa))
* **X:** Add `Hide view count` patch ([bf064ec](bf064ec))
* **X:** Add `Open links as query` patch ([ReVanced#2730](https://github.com/n-34/revanced-patches/issues/2730)) ([ba75a51](ba75a51))
* **X:** Add `Unlock downloads` patch ([2c20844](2c20844))
* **YouTube - Alternative thumbnails:** Selectively enable for home / subscription / search ([ReVanced#2926](https://github.com/n-34/revanced-patches/issues/2926)) ([8549e1b](8549e1b))
* **YouTube - Change header:** Change to ReVanced borderless logo header by default ([ReVanced#2512](https://github.com/n-34/revanced-patches/issues/2512)) ([75f785d](75f785d))
* **YouTube - Change header:** Improve patch option description ([3b8bc08](3b8bc08))
* **YouTube - Change start page:** Add more start pages ([cc1d9b7](cc1d9b7))
* **YouTube - Comments:** Add option to hide timestamp and emoji buttons ([ReVanced#3076](https://github.com/n-34/revanced-patches/issues/3076)) ([7efe5ae](7efe5ae))
* **YouTube - Custom branding:** Improve patch option description ([e27f56c](e27f56c))
* **YouTube - Custom filter:** Custom filtering of the protocol buffer ([ReVanced#2682](https://github.com/n-34/revanced-patches/issues/2682)) ([872a5b6](872a5b6))
* **YouTube - Downloads:** Use external downloader when selecting 'Download' in home feed flyout menu ([ReVanced#2881](https://github.com/n-34/revanced-patches/issues/2881)) ([10afc8c](10afc8c))
* **YouTube - External downloader:** Add ability to use in-app download button ([d900011](d900011))
* **YouTube - GmsCore:** Require ignoring battery optimizations ([ReVanced#2952](https://github.com/n-34/revanced-patches/issues/2952)) ([c0bef25](c0bef25))
* **YouTube - Hide ads:** Add option to hide the 'Visit store' button on channel pages ([ReVanced#3077](https://github.com/n-34/revanced-patches/issues/3077)) ([03d2cfa](03d2cfa))
* **YouTube - Hide ads:** Hide fullscreen ads ([bdc9a12](bdc9a12))
* **YouTube - Hide layout components:** Add option to hide horizontal shelves ([ReVanced#2951](https://github.com/n-34/revanced-patches/issues/2951)) ([9ae0650](9ae0650))
* **YouTube - Hide layout components:** Filter home/search results by keywords ([ReVanced#2853](https://github.com/n-34/revanced-patches/issues/2853)) ([5916204](5916204))
* **YouTube - Hide layout components:** Hide playables ([8423515](8423515))
* **YouTube - Hide layout components:** Hide search result recommendations ([55cc7f1](55cc7f1))
* **YouTube - Hide Shorts components:** Hide 'Buy super thanks' button ([ReVanced#3176](https://github.com/n-34/revanced-patches/issues/3176)) ([89c1548](89c1548))
* **YouTube - Hide Shorts components:** Hide `Shop`, `Location` and `Save sound to playlist` buttons ([ReVanced#3018](https://github.com/n-34/revanced-patches/issues/3018)) ([5210ac4](5210ac4))
* **YouTube - Hide Shorts components:** Hide like / dislike button in video ads ([ReVanced#3062](https://github.com/n-34/revanced-patches/issues/3062)) ([1296985](1296985))
* **YouTube - Hide Shorts components:** Hide like and dislike buttons ([2df0892](2df0892))
* **YouTube - Hide Shorts components:** Hide sound metadata label ([ea7d1e0](ea7d1e0))
* **YouTube - Hide Shorts components:** Hide tagged products, hide search suggestions ([ReVanced#3019](https://github.com/n-34/revanced-patches/issues/3019)) ([e0d2fe5](e0d2fe5))
* **YouTube - Hide Shorts components:** Hide title and full video link label ([e7b64e1](e7b64e1))
* **YouTube - Hide Shorts components:** Selectively hide Shorts for home / subscription / search ([ReVanced#2925](https://github.com/n-34/revanced-patches/issues/2925)) ([497c067](497c067))
* **YouTube - Navigation buttons:** Add option to hide navigation button labels ([ReVanced#3189](https://github.com/n-34/revanced-patches/issues/3189)) ([f9dc705](f9dc705))
* **YouTube - Spoof app version:** Add `18.09.39` to restore library tab ([ReVanced#2643](https://github.com/n-34/revanced-patches/issues/2643)) ([dd108ff](dd108ff))
* **YouTube - Spoof app version:** Add target versions ([ReVanced#2787](https://github.com/n-34/revanced-patches/issues/2787)) ([83a7bd8](83a7bd8))
* **YouTube - Swipe controls:** Save and restore brightness and add auto-brightness toggle ([ReVanced#2996](https://github.com/n-34/revanced-patches/issues/2996)) ([f6c3bc4](f6c3bc4))
* **YouTube - Theme:** Add classic dark color to presets ([ReVanced#2542](https://github.com/n-34/revanced-patches/issues/2542)) ([4e1dc00](4e1dc00))
* **YouTube :** Remove `HDR auto brightness` patch ([ReVanced#2863](https://github.com/n-34/revanced-patches/issues/2863)) ([b4c7bf4](b4c7bf4))
* **YouTube Vanced:** Remove `Hide ads` patch ([87887e4](87887e4))
* **YouTube:** Add 'About' preference to settings menu ([ReVanced#2981](https://github.com/n-34/revanced-patches/issues/2981)) ([5abf894](5abf894))
* **YouTube:** Add `Remove viewer discretion dialog` patch ([a07f83f](a07f83f))
* **YouTube:** Improve patch descriptions ([ReVanced#2519](https://github.com/n-34/revanced-patches/issues/2519)) ([e8d1389](e8d1389))
* **YouTube:** Match overlay icons style to YouTube ([ReVanced#3023](https://github.com/n-34/revanced-patches/issues/3023)) ([6849393](6849393))
* **YouTube:** Remove `Hide email address` patch ([3b84305](3b84305))
* **YouTube:** Reorganize settings menu ([ReVanced#2737](https://github.com/n-34/revanced-patches/issues/2737)) ([36132df](36132df))
* **YouTube:** Support version `19.02.34` ([ReVanced#2627](https://github.com/n-34/revanced-patches/issues/2627)) ([94e08b7](94e08b7))
* **YouTube:** Support version `19.03.35` ([ReVanced#2640](https://github.com/n-34/revanced-patches/issues/2640)) ([ff08f58](ff08f58))
* **YouTube:** Support version `19.04.37` ([ReVanced#2687](https://github.com/n-34/revanced-patches/issues/2687)) ([c23e023](c23e023))
* **YouTube:** Support version `19.05`, `19.06`, `19.07`, `19.08` and `19.09` ([ReVanced#2862](https://github.com/n-34/revanced-patches/issues/2862)) ([f044dde](f044dde))
* **YouTube:** Support version `19.09.38`, `19.10.39` and `19.11.43` ([ReVanced#2971](https://github.com/n-34/revanced-patches/issues/2971)) ([730f3e3](730f3e3))
* **YouTube:** Support versions `18.48.39`, `18.49.37` and `19.01.34` ([ReVanced#2551](https://github.com/n-34/revanced-patches/issues/2551)) ([a938e73](a938e73))
* **YT Music - Hide 'Get Music Premium' label:** Remove occurences of label in settings ([ReVanced#3046](https://github.com/n-34/revanced-patches/issues/3046)) ([10e170a](10e170a))
* **YT Music:** Add support for `7.01.52` ([ReVanced#3177](https://github.com/n-34/revanced-patches/issues/3177)) ([e9bfb25](e9bfb25))

### BREAKING CHANGES

* **Photomath:** Some packages have changed locations.
* Various APIs have been changed.
* Various public APIs have changed names and packages or were removed entirely
n-34 pushed a commit to n-34/revanced-patches that referenced this pull request May 22, 2024
# [4.0.0](v3.1.0...v4.0.0) (2024-05-22)

### Bug Fixes

* Case patch option title correctly ([259c8b4](259c8b4))
* Compile DEX without debugging information ([f5df957](f5df957))
* Correctly handle patches jar path if it contains exclamation marks ([056e2d7](056e2d7))
* Indent patch option description correctly ([bd86ef6](bd86ef6))
* **Infinity for Reddit - Unlock subscription:** Do not crash by patching billing client ([7d76e2e](7d76e2e))
* **Infinity for Reddit - Unlock subscription:** Restore functionality on v7.0.0 ([bf19af9](bf19af9))
* **Mi Fitness - Fix login:** Patch correct register ([ReVanced#2942](https://github.com/n-34/revanced-patches/issues/2942)) ([dc96942](dc96942))
* Only set Android key if not null to prevent build errors ([1181b0b](1181b0b))
* **Override certificate pinning:** Always overwrite with a generic network security configuration ([2a842a1](2a842a1))
* Publicize abstract property ([b7c108e](b7c108e))
* **Reddit is Fun - Spoof client:** Fix login by updating the authorization subdomain from "old" to "ssl" ([b156cb1](b156cb1))
* Remove extra space from patch description ([ReVanced#2780](https://github.com/n-34/revanced-patches/issues/2780)) ([96a3f35](96a3f35))
* **Spoof SIM country:** Validate patch option value correctly ([8105463](8105463))
* **Tiktok - Remember clear display:** Use correct name ([d7e44cb](d7e44cb))
* **TikTok:** Hook application context earlier to prevent crash ([ReVanced#2893](https://github.com/n-34/revanced-patches/issues/2893)) ([395ccda](395ccda))
* **Tumblr - Fix old versions:** Improve reliability by removing remnances of Tumblr Live  ([ReVanced#2988](https://github.com/n-34/revanced-patches/issues/2988)) ([897b4db](897b4db))
* **Tumblr:** Restore compatibility with latest versions ([ReVanced#2955](https://github.com/n-34/revanced-patches/issues/2955)) ([2954ba7](2954ba7))
* **Twitch:** Correct patch resources to fix build ([1b63898](1b63898))
* URL decode path to JAR containing spaces to get JAR manifest ([ReVanced#3079](https://github.com/n-34/revanced-patches/issues/3079)) ([e1bbcb3](e1bbcb3))
* Use correct preference key ([3732b2c](3732b2c))
* Use deprecated members to ensure backwards compatibility ([083bd40](083bd40))
* Use new integrations patch path ([51e2f3b](51e2f3b))
* Use UrlDecoder API available in older Android versions ([d42fbb1](d42fbb1))
* **YouTube - Alternative thumbnails:** Clarify DeArrow support is for thumbnails ([ReVanced#2531](https://github.com/n-34/revanced-patches/issues/2531)) ([828abb0](828abb0))
* **YouTube - Change header:** Improve patch descriptions ([ReVanced#2581](https://github.com/n-34/revanced-patches/issues/2581)) ([43a5677](43a5677))
* **YouTube - Client spoof:** Spoof all user agents ([44a8a13](44a8a13))
* **YouTube - Client spoof:** Spoof client to fix playback ([ReVanced#3199](https://github.com/n-34/revanced-patches/issues/3199)) ([bec1eef](bec1eef))
* **YouTube - Downloads:** Use new task context ([ReVanced#2841](https://github.com/n-34/revanced-patches/issues/2841)) ([6d88cb4](6d88cb4))
* **YouTube - Enable slide to seek:** Change patch default to excluded and add description disclaimer ([ReVanced#2610](https://github.com/n-34/revanced-patches/issues/2610)) ([2fdc4c2](2fdc4c2))
* **YouTube - GmsCore support:** Prompt to disable battery optimizations, if not done already ([ReVanced#2958](https://github.com/n-34/revanced-patches/issues/2958)) ([82acb84](82acb84))
* **YouTube - Hide ads:** Fix string typo ([ecc56d6](ecc56d6))
* **YouTube - Hide ads:** Prevent app crash if hiding fullscreen ads is not possible ([ReVanced#2910](https://github.com/n-34/revanced-patches/issues/2910)) ([9f50470](9f50470))
* **YouTube - Hide ads:** rename `Hide paid content` to `Hide paid promotion label` ([ReVanced#3026](https://github.com/n-34/revanced-patches/issues/3026)) ([17e4ac9](17e4ac9))
* **YouTube - Hide load more button:** Include patch with `Hide layout components`, and hide button only in search feed  ([ReVanced#2959](https://github.com/n-34/revanced-patches/issues/2959)) ([b007e8e](b007e8e))
* **YouTube - Hide Shorts components:** Correctly hide Shorts if navigation tab is changed using device back button ([ReVanced#3007](https://github.com/n-34/revanced-patches/issues/3007)) ([e5848e9](e5848e9))
* **YouTube - Hide Shorts components:** Rename option title to make it consistent ([4d6e34b](4d6e34b))
* **YouTube - Hide video action buttons:** Remove obsolete `hide Shop button` ([ReVanced#3057](https://github.com/n-34/revanced-patches/issues/3057)) ([b5e34f3](b5e34f3))
* **YouTube - Navigation buttons:** Adjust summary text of switch notification button ([ReVanced#3130](https://github.com/n-34/revanced-patches/issues/3130)) ([cc8b4c9](cc8b4c9))
* **YouTube - Player flyout menu:** Add hide Lock screen menu ([ReVanced#2985](https://github.com/n-34/revanced-patches/issues/2985)) ([308de4a](308de4a))
* **YouTube - Player flyout menu:** Remove obsolete `Hide report menu` ([d627d44](d627d44))
* **YouTube - Restore old video quality menu:** Show advanced quality menu in Shorts quality flyout ([ReVanced#3155](https://github.com/n-34/revanced-patches/issues/3155)) ([c2b5bb7](c2b5bb7))
* **YouTube - SponsorBlock:** Export local statistics with saved settings ([f8365b4](f8365b4))
* **YouTube - SponsorBlock:** Show correct segment times if video is over 24 hours in length ([ReVanced#3138](https://github.com/n-34/revanced-patches/issues/3138)) ([6cdf697](6cdf697))
* **YouTube - Spoof app version:** Remove broken versions ([ReVanced#2776](https://github.com/n-34/revanced-patches/issues/2776)) ([9466d97](9466d97))
* **YouTube - Spoof device dimensions:** Warn about potential performance issues ([ReVanced#3039](https://github.com/n-34/revanced-patches/issues/3039)) ([9d6f305](9d6f305))
* **YouTube - Spoof signature:** Fix tracking such as history or watch time ([bcd8b48](bcd8b48))
* **YouTube Music - Remove upgrade button:** Fix compatibility with latest versions ([ReVanced#3045](https://github.com/n-34/revanced-patches/issues/3045)) ([80de996](80de996))
* **YouTube Music:** Fix compatibility with latest versions ([ReVanced#2924](https://github.com/n-34/revanced-patches/issues/2924)) ([8378c84](8378c84))
* **YouTube Music:** Make `Hide 'Get Music Premium' label` and `Remove upgrade button` compatible with latest version ([ReVanced#3164](https://github.com/n-34/revanced-patches/issues/3164)) ([3ff20de](3ff20de))
* **YouTube:** Correctly show channel page on tablet devices ([ReVanced#2656](https://github.com/n-34/revanced-patches/issues/2656)) ([c7c9700](c7c9700))
* **YouTube:** Do not crash on startup for root installs ([ReVanced#2655](https://github.com/n-34/revanced-patches/issues/2655)) ([02abace](02abace))
* **YouTube:** Fix grammer mistakes in patch descriptions ([ReVanced#2543](https://github.com/n-34/revanced-patches/issues/2543)) ([ebf5993](ebf5993))
* **YouTube:** Fix video playback by switching to ReVanced GmsCore vendor ([ReVanced#2907](https://github.com/n-34/revanced-patches/issues/2907)) ([33ea122](33ea122))
* **YouTube:** Move setting to correct screen ([a16eda8](a16eda8))
* **YouTube:** Shorten setting titles to fit on screen ([ReVanced#2579](https://github.com/n-34/revanced-patches/issues/2579)) ([b2a5dd3](b2a5dd3))

### Code Refactoring

* Fix package and code structure ([ReVanced#2541](https://github.com/n-34/revanced-patches/issues/2541)) ([a08457e](a08457e))

### Features

* Add `Hex` patch ([ReVanced#3034](https://github.com/n-34/revanced-patches/issues/3034)) ([3c95aac](3c95aac))
* **Amazon:** Add `Always allow deep-linking` patch ([ReVanced#3000](https://github.com/n-34/revanced-patches/issues/3000)) ([a92b7fb](a92b7fb))
* **Change package name:** Mention caveat of the patch in the description ([427b81a](427b81a))
* **ID Austria:** Remove constraint on any version ([ReVanced#2526](https://github.com/n-34/revanced-patches/issues/2526)) ([de2cb88](de2cb88))
* **Instagram - Hide timeline ads:** Make compatible with latest versions ([a212f29](a212f29))
* **Mi Fitness:** Add `Force English locale` and `Fix login` patch ([ReVanced#2734](https://github.com/n-34/revanced-patches/issues/2734)) ([7a25791](7a25791))
* Move strings to resources for localization ([ReVanced#2440](https://github.com/n-34/revanced-patches/issues/2440)) ([060ab8f](060ab8f))
* **MyFitnessPal:** Add `Hide ads` patch ([ReVanced#2594](https://github.com/n-34/revanced-patches/issues/2594)) ([fd4b3c7](fd4b3c7))
* **OpeningHours:** Add `Fix crash` patch ([ReVanced#2697](https://github.com/n-34/revanced-patches/issues/2697)) ([0d011b8](0d011b8))
* **Photomath:** Add `Hide update popup` patch ([ReVanced#2637](https://github.com/n-34/revanced-patches/issues/2637)) ([fbbecd3](fbbecd3))
* **Photomath:** Support version `8.37.0` ([ReVanced#3109](https://github.com/n-34/revanced-patches/issues/3109)) ([fb02b48](fb02b48))
* **Piccoma:** Add `Disable tracking` patch ([ReVanced#3143](https://github.com/n-34/revanced-patches/issues/3143)) ([8ab9e8f](8ab9e8f))
* **Piccoma:** Add `Spoof Android device ID` patch ([ReVanced#3145](https://github.com/n-34/revanced-patches/issues/3145)) ([d953c6b](d953c6b))
* **Public API:** Deprecate `HideEmailAddressPatch` ([866bceb](866bceb))
* **Public API:** Make `BottomControlsResource#addControls` public ([ReVanced#2514](https://github.com/n-34/revanced-patches/issues/2514)) ([f4e2257](f4e2257))
* Remove unnecessary description from patch ([1a89dd9](1a89dd9))
* **Strava - Unlock subscription:** Remove compatible version constraint ([80a5599](80a5599))
* **Sync for Lemmy:** Add `Disable ads` patch ([ReVanced#2872](https://github.com/n-34/revanced-patches/issues/2872)) ([0785819](0785819))
* **Sync for Reddit:** Add `Fix /s/ links` patch ([f15ef3f](f15ef3f))
* **Tiktok - Playback speed:** Remember playback speed ([ReVanced#2506](https://github.com/n-34/revanced-patches/issues/2506)) ([d2970e5](d2970e5))
* **Tiktok:** Add `Remember clear mode` patch ([ReVanced#2509](https://github.com/n-34/revanced-patches/issues/2509)) ([048bf59](048bf59))
* **Tumblr:** Add `Disable Ad-Free Banner` patch ([ReVanced#3091](https://github.com/n-34/revanced-patches/issues/3091)) ([54baf08](54baf08))
* **Tumblr:** Add `Fix old versions` patch ([ReVanced#2954](https://github.com/n-34/revanced-patches/issues/2954)) ([2fde60e](2fde60e))
* **Twitter - Unlock downloads:** Unlock GIF downloads ([d0f91c8](d0f91c8))
* **Twitter:** Add `Sanitize sharing links` patch ([ReVanced#3003](https://github.com/n-34/revanced-patches/issues/3003)) ([186b887](186b887))
* **VSCO - Unlock pro:** Constrain to last working version ([6dd4a7c](6dd4a7c))
* **WarnWetter - Promo code unlock:** Constrain to last working version ([ReVanced#3110](https://github.com/n-34/revanced-patches/issues/3110)) ([92fc8aa](92fc8aa))
* **X:** Add `Hide view count` patch ([bf064ec](bf064ec))
* **X:** Add `Open links as query` patch ([ReVanced#2730](https://github.com/n-34/revanced-patches/issues/2730)) ([ba75a51](ba75a51))
* **X:** Add `Unlock downloads` patch ([2c20844](2c20844))
* **YouTube - Alternative thumbnails:** Selectively enable for home / subscription / search ([ReVanced#2926](https://github.com/n-34/revanced-patches/issues/2926)) ([8549e1b](8549e1b))
* **YouTube - Change header:** Change to ReVanced borderless logo header by default ([ReVanced#2512](https://github.com/n-34/revanced-patches/issues/2512)) ([75f785d](75f785d))
* **YouTube - Change header:** Improve patch option description ([3b8bc08](3b8bc08))
* **YouTube - Change start page:** Add more start pages ([cc1d9b7](cc1d9b7))
* **YouTube - Comments:** Add option to hide timestamp and emoji buttons ([ReVanced#3076](https://github.com/n-34/revanced-patches/issues/3076)) ([7efe5ae](7efe5ae))
* **YouTube - Custom branding:** Improve patch option description ([e27f56c](e27f56c))
* **YouTube - Custom filter:** Custom filtering of the protocol buffer ([ReVanced#2682](https://github.com/n-34/revanced-patches/issues/2682)) ([872a5b6](872a5b6))
* **YouTube - Downloads:** Use external downloader when selecting 'Download' in home feed flyout menu ([ReVanced#2881](https://github.com/n-34/revanced-patches/issues/2881)) ([10afc8c](10afc8c))
* **YouTube - External downloader:** Add ability to use in-app download button ([d900011](d900011))
* **YouTube - GmsCore:** Require ignoring battery optimizations ([ReVanced#2952](https://github.com/n-34/revanced-patches/issues/2952)) ([c0bef25](c0bef25))
* **YouTube - Hide ads:** Add option to hide the 'Visit store' button on channel pages ([ReVanced#3077](https://github.com/n-34/revanced-patches/issues/3077)) ([03d2cfa](03d2cfa))
* **YouTube - Hide ads:** Hide fullscreen ads ([bdc9a12](bdc9a12))
* **YouTube - Hide layout components:** Add option to hide horizontal shelves ([ReVanced#2951](https://github.com/n-34/revanced-patches/issues/2951)) ([9ae0650](9ae0650))
* **YouTube - Hide layout components:** Filter home/search results by keywords ([ReVanced#2853](https://github.com/n-34/revanced-patches/issues/2853)) ([5916204](5916204))
* **YouTube - Hide layout components:** Hide playables ([8423515](8423515))
* **YouTube - Hide layout components:** Hide search result recommendations ([55cc7f1](55cc7f1))
* **YouTube - Hide Shorts components:** Hide 'Buy super thanks' button ([ReVanced#3176](https://github.com/n-34/revanced-patches/issues/3176)) ([89c1548](89c1548))
* **YouTube - Hide Shorts components:** Hide `Shop`, `Location` and `Save sound to playlist` buttons ([ReVanced#3018](https://github.com/n-34/revanced-patches/issues/3018)) ([5210ac4](5210ac4))
* **YouTube - Hide Shorts components:** Hide like / dislike button in video ads ([ReVanced#3062](https://github.com/n-34/revanced-patches/issues/3062)) ([1296985](1296985))
* **YouTube - Hide Shorts components:** Hide like and dislike buttons ([2df0892](2df0892))
* **YouTube - Hide Shorts components:** Hide sound metadata label ([ea7d1e0](ea7d1e0))
* **YouTube - Hide Shorts components:** Hide tagged products, hide search suggestions ([ReVanced#3019](https://github.com/n-34/revanced-patches/issues/3019)) ([e0d2fe5](e0d2fe5))
* **YouTube - Hide Shorts components:** Hide title and full video link label ([e7b64e1](e7b64e1))
* **YouTube - Hide Shorts components:** Selectively hide Shorts for home / subscription / search ([ReVanced#2925](https://github.com/n-34/revanced-patches/issues/2925)) ([497c067](497c067))
* **YouTube - Navigation buttons:** Add option to hide navigation button labels ([ReVanced#3189](https://github.com/n-34/revanced-patches/issues/3189)) ([f9dc705](f9dc705))
* **YouTube - Spoof app version:** Add `18.09.39` to restore library tab ([ReVanced#2643](https://github.com/n-34/revanced-patches/issues/2643)) ([dd108ff](dd108ff))
* **YouTube - Spoof app version:** Add target versions ([ReVanced#2787](https://github.com/n-34/revanced-patches/issues/2787)) ([83a7bd8](83a7bd8))
* **YouTube - Swipe controls:** Save and restore brightness and add auto-brightness toggle ([ReVanced#2996](https://github.com/n-34/revanced-patches/issues/2996)) ([f6c3bc4](f6c3bc4))
* **YouTube - Theme:** Add classic dark color to presets ([ReVanced#2542](https://github.com/n-34/revanced-patches/issues/2542)) ([4e1dc00](4e1dc00))
* **YouTube :** Remove `HDR auto brightness` patch ([ReVanced#2863](https://github.com/n-34/revanced-patches/issues/2863)) ([b4c7bf4](b4c7bf4))
* **YouTube Vanced:** Remove `Hide ads` patch ([87887e4](87887e4))
* **YouTube:** Add 'About' preference to settings menu ([ReVanced#2981](https://github.com/n-34/revanced-patches/issues/2981)) ([5abf894](5abf894))
* **YouTube:** Add `Remove viewer discretion dialog` patch ([a07f83f](a07f83f))
* **YouTube:** Improve patch descriptions ([ReVanced#2519](https://github.com/n-34/revanced-patches/issues/2519)) ([e8d1389](e8d1389))
* **YouTube:** Match overlay icons style to YouTube ([ReVanced#3023](https://github.com/n-34/revanced-patches/issues/3023)) ([6849393](6849393))
* **YouTube:** Remove `Hide email address` patch ([3b84305](3b84305))
* **YouTube:** Reorganize settings menu ([ReVanced#2737](https://github.com/n-34/revanced-patches/issues/2737)) ([36132df](36132df))
* **YouTube:** Support version `19.02.34` ([ReVanced#2627](https://github.com/n-34/revanced-patches/issues/2627)) ([94e08b7](94e08b7))
* **YouTube:** Support version `19.03.35` ([ReVanced#2640](https://github.com/n-34/revanced-patches/issues/2640)) ([ff08f58](ff08f58))
* **YouTube:** Support version `19.04.37` ([ReVanced#2687](https://github.com/n-34/revanced-patches/issues/2687)) ([c23e023](c23e023))
* **YouTube:** Support version `19.05`, `19.06`, `19.07`, `19.08` and `19.09` ([ReVanced#2862](https://github.com/n-34/revanced-patches/issues/2862)) ([f044dde](f044dde))
* **YouTube:** Support version `19.09.38`, `19.10.39` and `19.11.43` ([ReVanced#2971](https://github.com/n-34/revanced-patches/issues/2971)) ([730f3e3](730f3e3))
* **YouTube:** Support versions `18.48.39`, `18.49.37` and `19.01.34` ([ReVanced#2551](https://github.com/n-34/revanced-patches/issues/2551)) ([a938e73](a938e73))
* **YT Music - Hide 'Get Music Premium' label:** Remove occurences of label in settings ([ReVanced#3046](https://github.com/n-34/revanced-patches/issues/3046)) ([10e170a](10e170a))
* **YT Music:** Add support for `7.01.52` ([ReVanced#3177](https://github.com/n-34/revanced-patches/issues/3177)) ([e9bfb25](e9bfb25))

### BREAKING CHANGES

* **Photomath:** Some packages have changed locations.
* Various APIs have been changed.
* Various public APIs have changed names and packages or were removed entirely
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
8 participants