diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml index cb4b2849..42a6d93b 100644 --- a/.github/ISSUE_TEMPLATE/feature-request.yml +++ b/.github/ISSUE_TEMPLATE/feature-request.yml @@ -71,7 +71,7 @@ body: Before creating a new feature request, please keep the following in mind: - **Do not submit a duplicate feature request**: You can review existing feature requests [here](https://github.com/ReVanced/revanced-patches/labels/Feature%20request). - - **Review the contribution guidelines**: Make sure your bug report adheres to it. You can find the guidelines [here](https://github.com/ReVanced/revanced-patches/blob/main/CONTRIBUTING.md). + - **Review the contribution guidelines**: Make sure your feature request adheres to it. You can find the guidelines [here](https://github.com/ReVanced/revanced-patches/blob/main/CONTRIBUTING.md). - **Do not use the issue page for support**: If you need help or have questions, check out other platforms on [revanced.app](https://revanced.app). - type: textarea attributes: diff --git a/CHANGELOG.md b/CHANGELOG.md index 71e44e53..6cb5ad09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,31 @@ +# [4.1.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v4.1.0-dev.1...v4.1.0-dev.2) (2024-02-04) + + +### Features + +* **YouTube:** Support version `19.04.37` ([#2687](https://github.com/ReVanced/revanced-patches/issues/2687)) ([c23e023](https://github.com/ReVanced/revanced-patches/commit/c23e0233cf5c28d354132443d227b42ddc4a3dad)) + +# [4.1.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v4.0.3-dev.2...v4.1.0-dev.1) (2024-02-02) + + +### Features + +* **YouTube - Custom filter:** Custom filtering of the protocol buffer ([#2682](https://github.com/ReVanced/revanced-patches/issues/2682)) ([872a5b6](https://github.com/ReVanced/revanced-patches/commit/872a5b6d8969ab1569cd57ece3c400c3741049be)) + +## [4.0.3-dev.2](https://github.com/ReVanced/revanced-patches/compare/v4.0.3-dev.1...v4.0.3-dev.2) (2024-02-01) + + +### Bug Fixes + +* **Infinity for Reddit - Unlock subscription:** Restore functionality on v7.0.0 ([bf19af9](https://github.com/ReVanced/revanced-patches/commit/bf19af99cb522f9027a4b3ae42d6258ac71758e5)) + +## [4.0.3-dev.1](https://github.com/ReVanced/revanced-patches/compare/v4.0.2...v4.0.3-dev.1) (2024-01-28) + + +### Bug Fixes + +* **YouTube:** Correctly show channel page on tablet devices ([#2656](https://github.com/ReVanced/revanced-patches/issues/2656)) ([c7c9700](https://github.com/ReVanced/revanced-patches/commit/c7c9700d93caeae105916d33376670f525276fac)) + ## [4.0.2](https://github.com/ReVanced/revanced-patches/compare/v4.0.1...v4.0.2) (2024-01-28) diff --git a/api/revanced-patches.api b/api/revanced-patches.api index 8df98dba..e66cfeba 100644 --- a/api/revanced-patches.api +++ b/api/revanced-patches.api @@ -1420,6 +1420,10 @@ public final class app/revanced/patches/youtube/layout/startupshortsreset/Disabl public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V } +public final class app/revanced/patches/youtube/layout/startupshortsreset/fingerprints/UserWasInShortsFingerprint : app/revanced/patcher/fingerprint/MethodFingerprint { + public static final field INSTANCE Lapp/revanced/patches/youtube/layout/startupshortsreset/fingerprints/UserWasInShortsFingerprint; +} + public final class app/revanced/patches/youtube/layout/tablet/EnableTabletLayoutPatch : app/revanced/patcher/patch/BytecodePatch { public static final field INSTANCE Lapp/revanced/patches/youtube/layout/tablet/EnableTabletLayoutPatch; public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V diff --git a/gradle.properties b/gradle.properties index dc749065..928bad49 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 4.0.2 +version = 4.1.0-dev.2 diff --git a/patches.json b/patches.json index eeb690d4..1a98630c 100644 --- a/patches.json +++ b/patches.json @@ -1 +1 @@ -[{"name":"Unlock plus","description":null,"compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.32.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide update popup","description":"Prevents the update popup from showing up.","compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.32.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof device ID","description":"Spoofs device ID to mitigate manual bans by developers.","compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.32.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove broadcasts restriction","description":"Enables starting/stopping NetGuard via broadcasts.","compatiblePackages":[{"name":"eu.faircode.netguard","versions":null}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Pro unlock","description":null,"compatiblePackages":[{"name":"com.backdrops.wallpapers","versions":["4.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable dashboard ads","description":"Disables ads in the dashboard.","compatiblePackages":[{"name":"com.tumblr","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable Tumblr Live","description":"Disable the Tumblr Live tab button and dashboard carousel.","compatiblePackages":[{"name":"com.tumblr","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable in-app update","description":"Disables the in-app update check and update prompt.","compatiblePackages":[{"name":"com.tumblr","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable blog notification reminder","description":"Disables the reminder to enable notifications for blogs you visit.","compatiblePackages":[{"name":"com.tumblr","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable gift message popup","description":"Disables the popup suggesting to buy TumblrMart items for other people.","compatiblePackages":[{"name":"com.tumblr","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock pro","description":null,"compatiblePackages":[{"name":"com.zombodroid.MemeGenerator","versions":["4.6364","4.6370","4.6375","4.6377"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock subscription features","description":"Unlocks \"Routes\", \"Matched Runs\" and \"Segment Efforts\".","compatiblePackages":[{"name":"com.strava","versions":["320.12"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable subscription suggestions","description":null,"compatiblePackages":[{"name":"com.strava","versions":["320.12"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Show on lockscreen","description":"Shows student id and student ticket on lockscreen.","compatiblePackages":[{"name":"de.tudortmund.app","versions":null}],"use":true,"requiresIntegrations":true,"options":[]},{"name":"Unlock pro","description":null,"compatiblePackages":[{"name":"com.wakdev.apps.nfctools.se","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock pro","description":null,"compatiblePackages":[{"name":"com.awedea.nyx","versions":["2.2.7"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock premium","description":null,"compatiblePackages":[{"name":"io.yuka.android","versions":["4.29"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock themes","description":"Unlocks all themes that are inaccessible until a certain level is reached.","compatiblePackages":[{"name":"com.ticktick.task","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove root detection","description":"Removes the check for root permissions and unlocked bootloader.","compatiblePackages":[{"name":"at.gv.bka.serviceportal","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":null,"compatiblePackages":[{"name":"com.reddit.frontpage","versions":null}],"use":true,"requiresIntegrations":true,"options":[]},{"name":"Sanitize sharing links","description":"Removes (tracking) query parameters from the URLs when sharing links.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable screenshot popup","description":"Disables the popup that shows up when taking a screenshot.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock premium Reddit icons","description":null,"compatiblePackages":[{"name":"com.reddit.frontpage","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof client","description":"Restores functionality of the app by using custom client ID.","compatiblePackages":[{"name":"o.o.joey","versions":null},{"name":"o.o.joey.pro","versions":null},{"name":"o.o.joey.dev","versions":null}],"use":true,"requiresIntegrations":false,"options":[{"key":"client-id","default":null,"values":null,"title":"OAuth client ID","description":"The Reddit OAuth client ID. You can get your client ID from https://www.reddit.com/prefs/apps. The application type has to be \"Installed app\" and the redirect URI has to be set to \"https://127.0.0.1:65023/authorize_callback\".","required":true}]},{"name":"Disable ads","description":null,"compatiblePackages":[{"name":"o.o.joey","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof client","description":"Restores functionality of the app by using custom client ID.","compatiblePackages":[{"name":"me.ccrama.redditslide","versions":null}],"use":true,"requiresIntegrations":false,"options":[{"key":"client-id","default":null,"values":null,"title":"OAuth client ID","description":"The Reddit OAuth client ID. You can get your client ID from https://www.reddit.com/prefs/apps. The application type has to be \"Installed app\" and the redirect URI has to be set to \"http://www.ccrama.me\".","required":true}]},{"name":"Spoof client","description":"Restores functionality of the app by using custom client ID.","compatiblePackages":[{"name":"com.rubenmayayo.reddit","versions":null}],"use":true,"requiresIntegrations":false,"options":[{"key":"client-id","default":null,"values":null,"title":"OAuth client ID","description":"The Reddit OAuth client ID. You can get your client ID from https://www.reddit.com/prefs/apps. The application type has to be \"Installed app\" and the redirect URI has to be set to \"http://rubenmayayo.com\".","required":true}]},{"name":"Spoof client","description":"Restores functionality of the app by using custom client ID.","compatiblePackages":[{"name":"free.reddit.news","versions":null},{"name":"reddit.news","versions":null}],"use":true,"requiresIntegrations":false,"options":[{"key":"client-id","default":null,"values":null,"title":"OAuth client ID","description":"The Reddit OAuth client ID. You can get your client ID from https://www.reddit.com/prefs/apps. The application type has to be \"Installed app\" and the redirect URI has to be set to \"dbrady://relay\".","required":true}]},{"name":"Spoof client","description":"Restores functionality of the app by using custom client ID.","compatiblePackages":[{"name":"com.andrewshu.android.reddit","versions":null},{"name":"com.andrewshu.android.redditdonation","versions":null}],"use":true,"requiresIntegrations":false,"options":[{"key":"client-id","default":null,"values":null,"title":"OAuth client ID","description":"The Reddit OAuth client ID. You can get your client ID from https://www.reddit.com/prefs/apps. The application type has to be \"Installed app\" and the redirect URI has to be set to \"redditisfun://auth\".","required":true}]},{"name":"Spoof client","description":"Restores functionality of the app by using custom client ID.","compatiblePackages":[{"name":"com.onelouder.baconreader","versions":null},{"name":"com.onelouder.baconreader.premium","versions":null}],"use":true,"requiresIntegrations":false,"options":[{"key":"client-id","default":null,"values":null,"title":"OAuth client ID","description":"The Reddit OAuth client ID. You can get your client ID from https://www.reddit.com/prefs/apps. The application type has to be \"Installed app\" and the redirect URI has to be set to \"http://baconreader.com/auth\".","required":true}]},{"name":"Spoof client","description":"Restores functionality of the app by using custom client ID.","compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":null},{"name":"com.laurencedawson.reddit_sync.pro","versions":null},{"name":"com.laurencedawson.reddit_sync.dev","versions":null}],"use":true,"requiresIntegrations":false,"options":[{"key":"client-id","default":null,"values":null,"title":"OAuth client ID","description":"The Reddit OAuth client ID. You can get your client ID from https://www.reddit.com/prefs/apps. The application type has to be \"Installed app\" and the redirect URI has to be set to \"http://redditsync/auth\".","required":true}]},{"name":"Disable ads","description":null,"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable Sync for Lemmy bottom sheet","description":"Disables the bottom sheet at the startup that asks you to signup to \"Sync for Lemmy\".","compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":["v23.06.30-13:39"]},{"name":"com.laurencedawson.reddit_sync.pro","versions":null},{"name":"com.laurencedawson.reddit_sync.dev","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock subscription","description":"Unlocks the subscription feature but requires a custom client ID.","compatiblePackages":[{"name":"ml.docilealligator.infinityforreddit","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof client","description":"Restores functionality of the app by using custom client ID.","compatiblePackages":[{"name":"ml.docilealligator.infinityforreddit","versions":null}],"use":true,"requiresIntegrations":false,"options":[{"key":"client-id","default":null,"values":null,"title":"OAuth client ID","description":"The Reddit OAuth client ID. You can get your client ID from https://www.reddit.com/prefs/apps. The application type has to be \"Installed app\" and the redirect URI has to be set to \"infinity://localhost\".","required":true}]},{"name":"Unlock pro","description":null,"compatiblePackages":[{"name":"tv.trakt.trakt","versions":["1.1.1"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove ads","description":null,"compatiblePackages":[{"name":"net.binarymode.android.irplus","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove device restrictions","description":"Removes restrictions from using the app on any device. Requires mounting patched app over original.","compatiblePackages":[{"name":"com.google.android.apps.recorder","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock pro","description":null,"compatiblePackages":[{"name":"org.totschnig.myexpenses","versions":["3.4.9"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Predictive back gesture","description":"Enables the predictive back gesture introduced on Android 13.","compatiblePackages":null,"use":false,"requiresIntegrations":false,"options":[]},{"name":"Remove screenshot restriction","description":"Removes the restriction of taking screenshots in apps that normally wouldn\u0027t allow it.","compatiblePackages":null,"use":false,"requiresIntegrations":true,"options":[]},{"name":"Spoof SIM country","description":"Spoofs country information returned by the SIM card provider.","compatiblePackages":null,"use":false,"requiresIntegrations":false,"options":[{"key":"networkCountryIso","default":null,"values":{"Andorra":"AD","United Arab Emirates":"AE","Afghanistan":"AF","Antigua \u0026 Barbuda":"AG","Anguilla":"AI","Albania":"AL","Armenia":"AM","Angola":"AO","Antarctica":"AQ","Argentina":"AR","American Samoa":"AS","Austria":"AT","Australia":"AU","Aruba":"AW","Åland Islands":"AX","Azerbaijan":"AZ","Bosnia \u0026 Herzegovina":"BA","Barbados":"BB","Bangladesh":"BD","Belgium":"BE","Burkina Faso":"BF","Bulgaria":"BG","Bahrain":"BH","Burundi":"BI","Benin":"BJ","St. Barthélemy":"BL","Bermuda":"BM","Brunei":"BN","Bolivia":"BO","Caribbean Netherlands":"BQ","Brazil":"BR","Bahamas":"BS","Bhutan":"BT","Bouvet Island":"BV","Botswana":"BW","Belarus":"BY","Belize":"BZ","Canada":"CA","Cocos (Keeling) Islands":"CC","Congo - Kinshasa":"CD","Central African Republic":"CF","Congo - Brazzaville":"CG","Switzerland":"CH","Côte d’Ivoire":"CI","Cook Islands":"CK","Chile":"CL","Cameroon":"CM","China":"CN","Colombia":"CO","Costa Rica":"CR","Cuba":"CU","Cape Verde":"CV","Curaçao":"CW","Christmas Island":"CX","Cyprus":"CY","Czechia":"CZ","Germany":"DE","Djibouti":"DJ","Denmark":"DK","Dominica":"DM","Dominican Republic":"DO","Algeria":"DZ","Ecuador":"EC","Estonia":"EE","Egypt":"EG","Western Sahara":"EH","Eritrea":"ER","Spain":"ES","Ethiopia":"ET","Finland":"FI","Fiji":"FJ","Falkland Islands":"FK","Micronesia":"FM","Faroe Islands":"FO","France":"FR","Gabon":"GA","United Kingdom":"GB","Grenada":"GD","Georgia":"GE","French Guiana":"GF","Guernsey":"GG","Ghana":"GH","Gibraltar":"GI","Greenland":"GL","Gambia":"GM","Guinea":"GN","Guadeloupe":"GP","Equatorial Guinea":"GQ","Greece":"GR","South Georgia \u0026 South Sandwich Islands":"GS","Guatemala":"GT","Guam":"GU","Guinea-Bissau":"GW","Guyana":"GY","Hong Kong SAR China":"HK","Heard \u0026 McDonald Islands":"HM","Honduras":"HN","Croatia":"HR","Haiti":"HT","Hungary":"HU","Indonesia":"ID","Ireland":"IE","Israel":"IL","Isle of Man":"IM","India":"IN","British Indian Ocean Territory":"IO","Iraq":"IQ","Iran":"IR","Iceland":"IS","Italy":"IT","Jersey":"JE","Jamaica":"JM","Jordan":"JO","Japan":"JP","Kenya":"KE","Kyrgyzstan":"KG","Cambodia":"KH","Kiribati":"KI","Comoros":"KM","St. Kitts \u0026 Nevis":"KN","North Korea":"KP","South Korea":"KR","Kuwait":"KW","Cayman Islands":"KY","Kazakhstan":"KZ","Laos":"LA","Lebanon":"LB","St. Lucia":"LC","Liechtenstein":"LI","Sri Lanka":"LK","Liberia":"LR","Lesotho":"LS","Lithuania":"LT","Luxembourg":"LU","Latvia":"LV","Libya":"LY","Morocco":"MA","Monaco":"MC","Moldova":"MD","Montenegro":"ME","St. Martin":"MF","Madagascar":"MG","Marshall Islands":"MH","Macedonia":"MK","Mali":"ML","Myanmar (Burma)":"MM","Mongolia":"MN","Macau SAR China":"MO","Northern Mariana Islands":"MP","Martinique":"MQ","Mauritania":"MR","Montserrat":"MS","Malta":"MT","Mauritius":"MU","Maldives":"MV","Malawi":"MW","Mexico":"MX","Malaysia":"MY","Mozambique":"MZ","Namibia":"NA","New Caledonia":"NC","Niger":"NE","Norfolk Island":"NF","Nigeria":"NG","Nicaragua":"NI","Netherlands":"NL","Norway":"NO","Nepal":"NP","Nauru":"NR","Niue":"NU","New Zealand":"NZ","Oman":"OM","Panama":"PA","Peru":"PE","French Polynesia":"PF","Papua New Guinea":"PG","Philippines":"PH","Pakistan":"PK","Poland":"PL","St. Pierre \u0026 Miquelon":"PM","Pitcairn Islands":"PN","Puerto Rico":"PR","Palestinian Territories":"PS","Portugal":"PT","Palau":"PW","Paraguay":"PY","Qatar":"QA","Réunion":"RE","Romania":"RO","Serbia":"RS","Russia":"RU","Rwanda":"RW","Saudi Arabia":"SA","Solomon Islands":"SB","Seychelles":"SC","Sudan":"SD","Sweden":"SE","Singapore":"SG","St. Helena":"SH","Slovenia":"SI","Svalbard \u0026 Jan Mayen":"SJ","Slovakia":"SK","Sierra Leone":"SL","San Marino":"SM","Senegal":"SN","Somalia":"SO","Suriname":"SR","South Sudan":"SS","São Tomé \u0026 Príncipe":"ST","El Salvador":"SV","Sint Maarten":"SX","Syria":"SY","Swaziland":"SZ","Turks \u0026 Caicos Islands":"TC","Chad":"TD","French Southern Territories":"TF","Togo":"TG","Thailand":"TH","Tajikistan":"TJ","Tokelau":"TK","Timor-Leste":"TL","Turkmenistan":"TM","Tunisia":"TN","Tonga":"TO","Turkey":"TR","Trinidad \u0026 Tobago":"TT","Tuvalu":"TV","Taiwan":"TW","Tanzania":"TZ","Ukraine":"UA","Uganda":"UG","U.S. Outlying Islands":"UM","United States":"US","Uruguay":"UY","Uzbekistan":"UZ","Vatican City":"VA","St. Vincent \u0026 Grenadines":"VC","Venezuela":"VE","British Virgin Islands":"VG","U.S. Virgin Islands":"VI","Vietnam":"VN","Vanuatu":"VU","Wallis \u0026 Futuna":"WF","Samoa":"WS","Yemen":"YE","Mayotte":"YT","South Africa":"ZA","Zambia":"ZM","Zimbabwe":"ZW"},"title":"Network ISO Country Code","description":"ISO-3166-1 alpha-2 country code equivalent for the SIM provider\u0027s country code.","required":false},{"key":"simCountryIso","default":null,"values":{"Andorra":"AD","United Arab Emirates":"AE","Afghanistan":"AF","Antigua \u0026 Barbuda":"AG","Anguilla":"AI","Albania":"AL","Armenia":"AM","Angola":"AO","Antarctica":"AQ","Argentina":"AR","American Samoa":"AS","Austria":"AT","Australia":"AU","Aruba":"AW","Åland Islands":"AX","Azerbaijan":"AZ","Bosnia \u0026 Herzegovina":"BA","Barbados":"BB","Bangladesh":"BD","Belgium":"BE","Burkina Faso":"BF","Bulgaria":"BG","Bahrain":"BH","Burundi":"BI","Benin":"BJ","St. Barthélemy":"BL","Bermuda":"BM","Brunei":"BN","Bolivia":"BO","Caribbean Netherlands":"BQ","Brazil":"BR","Bahamas":"BS","Bhutan":"BT","Bouvet Island":"BV","Botswana":"BW","Belarus":"BY","Belize":"BZ","Canada":"CA","Cocos (Keeling) Islands":"CC","Congo - Kinshasa":"CD","Central African Republic":"CF","Congo - Brazzaville":"CG","Switzerland":"CH","Côte d’Ivoire":"CI","Cook Islands":"CK","Chile":"CL","Cameroon":"CM","China":"CN","Colombia":"CO","Costa Rica":"CR","Cuba":"CU","Cape Verde":"CV","Curaçao":"CW","Christmas Island":"CX","Cyprus":"CY","Czechia":"CZ","Germany":"DE","Djibouti":"DJ","Denmark":"DK","Dominica":"DM","Dominican Republic":"DO","Algeria":"DZ","Ecuador":"EC","Estonia":"EE","Egypt":"EG","Western Sahara":"EH","Eritrea":"ER","Spain":"ES","Ethiopia":"ET","Finland":"FI","Fiji":"FJ","Falkland Islands":"FK","Micronesia":"FM","Faroe Islands":"FO","France":"FR","Gabon":"GA","United Kingdom":"GB","Grenada":"GD","Georgia":"GE","French Guiana":"GF","Guernsey":"GG","Ghana":"GH","Gibraltar":"GI","Greenland":"GL","Gambia":"GM","Guinea":"GN","Guadeloupe":"GP","Equatorial Guinea":"GQ","Greece":"GR","South Georgia \u0026 South Sandwich Islands":"GS","Guatemala":"GT","Guam":"GU","Guinea-Bissau":"GW","Guyana":"GY","Hong Kong SAR China":"HK","Heard \u0026 McDonald Islands":"HM","Honduras":"HN","Croatia":"HR","Haiti":"HT","Hungary":"HU","Indonesia":"ID","Ireland":"IE","Israel":"IL","Isle of Man":"IM","India":"IN","British Indian Ocean Territory":"IO","Iraq":"IQ","Iran":"IR","Iceland":"IS","Italy":"IT","Jersey":"JE","Jamaica":"JM","Jordan":"JO","Japan":"JP","Kenya":"KE","Kyrgyzstan":"KG","Cambodia":"KH","Kiribati":"KI","Comoros":"KM","St. Kitts \u0026 Nevis":"KN","North Korea":"KP","South Korea":"KR","Kuwait":"KW","Cayman Islands":"KY","Kazakhstan":"KZ","Laos":"LA","Lebanon":"LB","St. Lucia":"LC","Liechtenstein":"LI","Sri Lanka":"LK","Liberia":"LR","Lesotho":"LS","Lithuania":"LT","Luxembourg":"LU","Latvia":"LV","Libya":"LY","Morocco":"MA","Monaco":"MC","Moldova":"MD","Montenegro":"ME","St. Martin":"MF","Madagascar":"MG","Marshall Islands":"MH","Macedonia":"MK","Mali":"ML","Myanmar (Burma)":"MM","Mongolia":"MN","Macau SAR China":"MO","Northern Mariana Islands":"MP","Martinique":"MQ","Mauritania":"MR","Montserrat":"MS","Malta":"MT","Mauritius":"MU","Maldives":"MV","Malawi":"MW","Mexico":"MX","Malaysia":"MY","Mozambique":"MZ","Namibia":"NA","New Caledonia":"NC","Niger":"NE","Norfolk Island":"NF","Nigeria":"NG","Nicaragua":"NI","Netherlands":"NL","Norway":"NO","Nepal":"NP","Nauru":"NR","Niue":"NU","New Zealand":"NZ","Oman":"OM","Panama":"PA","Peru":"PE","French Polynesia":"PF","Papua New Guinea":"PG","Philippines":"PH","Pakistan":"PK","Poland":"PL","St. Pierre \u0026 Miquelon":"PM","Pitcairn Islands":"PN","Puerto Rico":"PR","Palestinian Territories":"PS","Portugal":"PT","Palau":"PW","Paraguay":"PY","Qatar":"QA","Réunion":"RE","Romania":"RO","Serbia":"RS","Russia":"RU","Rwanda":"RW","Saudi Arabia":"SA","Solomon Islands":"SB","Seychelles":"SC","Sudan":"SD","Sweden":"SE","Singapore":"SG","St. Helena":"SH","Slovenia":"SI","Svalbard \u0026 Jan Mayen":"SJ","Slovakia":"SK","Sierra Leone":"SL","San Marino":"SM","Senegal":"SN","Somalia":"SO","Suriname":"SR","South Sudan":"SS","São Tomé \u0026 Príncipe":"ST","El Salvador":"SV","Sint Maarten":"SX","Syria":"SY","Swaziland":"SZ","Turks \u0026 Caicos Islands":"TC","Chad":"TD","French Southern Territories":"TF","Togo":"TG","Thailand":"TH","Tajikistan":"TJ","Tokelau":"TK","Timor-Leste":"TL","Turkmenistan":"TM","Tunisia":"TN","Tonga":"TO","Turkey":"TR","Trinidad \u0026 Tobago":"TT","Tuvalu":"TV","Taiwan":"TW","Tanzania":"TZ","Ukraine":"UA","Uganda":"UG","U.S. Outlying Islands":"UM","United States":"US","Uruguay":"UY","Uzbekistan":"UZ","Vatican City":"VA","St. Vincent \u0026 Grenadines":"VC","Venezuela":"VE","British Virgin Islands":"VG","U.S. Virgin Islands":"VI","Vietnam":"VN","Vanuatu":"VU","Wallis \u0026 Futuna":"WF","Samoa":"WS","Yemen":"YE","Mayotte":"YT","South Africa":"ZA","Zambia":"ZM","Zimbabwe":"ZW"},"title":"Sim ISO Country Code","description":"ISO-3166-1 alpha-2 country code equivalent for the SIM provider\u0027s country code.","required":false}]},{"name":"Enable Android debugging","description":"Enables Android debugging capabilities. This can slow down the app.","compatiblePackages":null,"use":false,"requiresIntegrations":false,"options":[]},{"name":"Override certificate pinning","description":"Overrides certificate pinning, allowing to inspect traffic via a proxy.","compatiblePackages":null,"use":false,"requiresIntegrations":false,"options":[]},{"name":"Change package name","description":"Appends \".revanced\" to the package name by default. Changing the package name of the app can lead to unexpected issues.","compatiblePackages":null,"use":false,"requiresIntegrations":false,"options":[{"key":"packageName","default":"Default","values":{"Default":"Default"},"title":"Package name","description":"The name of the package to rename the app to.","required":true}]},{"name":"Export all activities","description":"Makes all app activities exportable.","compatiblePackages":null,"use":false,"requiresIntegrations":false,"options":[]},{"name":"Spoof Wi-Fi connection","description":"Spoofs an existing Wi-Fi connection.","compatiblePackages":null,"use":false,"requiresIntegrations":true,"options":[]},{"name":"Remove screen capture restriction","description":"Removes the restriction of capturing audio from apps that normally wouldn\u0027t allow it.","compatiblePackages":null,"use":false,"requiresIntegrations":true,"options":[]},{"name":"Unlock pro","description":null,"compatiblePackages":[{"name":"ginlemon.iconpackstudio","versions":["2.2 build 016"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock pro","description":null,"compatiblePackages":[{"name":"com.ithebk.expensemanager","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Dynamic color","description":"Replaces the default X (Formerly Twitter) Blue with the user\u0027s Material You palette.","compatiblePackages":[{"name":"com.twitter.android","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide recommended users","description":null,"compatiblePackages":[{"name":"com.twitter.android","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Hides ads.","compatiblePackages":[{"name":"com.twitter.android","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Promo code unlock","description":"Disables the validation of promo code. Any code will work to unlock all features.","compatiblePackages":[{"name":"de.dwd.warnapp","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Playback speed","description":"Enables the playback speed option for all videos and retains the speed configurations in between videos.","compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":["32.5.3"]},{"name":"com.zhiliaoapp.musically","versions":["32.5.3"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Show seekbar","description":"Shows progress bar for all video.","compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":null},{"name":"com.zhiliaoapp.musically","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Downloads","description":"Removes download restrictions and changes the default path to download to.","compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":["32.5.3"]},{"name":"com.zhiliaoapp.musically","versions":["32.5.3"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remember clear display","description":"Remembers the clear display configurations in between videos.","compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":["32.5.3"]},{"name":"com.zhiliaoapp.musically","versions":["32.5.3"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Feed filter","description":"Removes ads, livestreams, stories, image videos and videos with a specific amount of views or likes from the feed.","compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":["32.5.3"]},{"name":"com.zhiliaoapp.musically","versions":["32.5.3"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Fix Google login","description":"Allows logging in with a Google account.","compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":null},{"name":"com.zhiliaoapp.musically","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable login requirement","description":null,"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":null},{"name":"com.zhiliaoapp.musically","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Settings","description":"Adds ReVanced settings to TikTok.","compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":["32.5.3"]},{"name":"com.zhiliaoapp.musically","versions":["32.5.3"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"SIM spoof","description":"Spoofs the information which is retrieved from the SIM card.","compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":null},{"name":"com.zhiliaoapp.musically","versions":null}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Unlock pro","description":"Unlocks all pro features.","compatiblePackages":[{"name":"co.windyapp.android","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":null,"compatiblePackages":[{"name":"jp.pxv.android","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide story ads","description":"Hides the ads in the Facebook app stories.","compatiblePackages":[{"name":"com.facebook.katana","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof signature","description":"Spoofs the signature of the app.","compatiblePackages":[{"name":"at.gv.oe.app","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove root detection","description":"Removes the check for root permissions and unlocked bootloader.","compatiblePackages":[{"name":"at.gv.oe.app","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide timeline ads","description":"Removes ads from the timeline.","compatiblePackages":[{"name":"com.instagram.android","versions":["275.0.0.27.98"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove bootloader detection","description":"Removes the check for an unlocked bootloader.","compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove root detection","description":"Removes the check for root permissions.","compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Block audio ads","description":"Blocks audio ads in streams and VODs.","compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1","16.1.0","16.9.1"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Block embedded ads","description":"Blocks embedded stream ads using services like Luminous or PurpleAdBlocker.","compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1","16.1.0","16.9.1"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Block video ads","description":"Blocks video ads in streams and VODs.","compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1","16.1.0","16.9.1"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Show deleted messages","description":"Shows deleted chat messages behind a clickable spoiler.","compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1","16.1.0","16.9.1"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Auto claim channel points","description":"Automatically claim Channel Points.","compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1","16.1.0","16.9.1"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Settings","description":"Adds settings menu to Twitch.","compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1","16.1.0","16.9.1"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Debug mode","description":"Enables Twitch\u0027s internal debugging mode.","compatiblePackages":[{"name":"tv.twitch.android.app","versions":null}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide premium navbar","description":"Removes the premium tab from the navbar.","compatiblePackages":[{"name":"com.spotify.music","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable on demand","description":"Enables listening to songs on-demand, allowing to play any song from playlists, albums or artists without limitations. This does not remove ads.","compatiblePackages":[{"name":"com.spotify.lite","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Custom theme","description":"Applies a custom theme.","compatiblePackages":[{"name":"com.spotify.music","versions":null}],"use":true,"requiresIntegrations":false,"options":[{"key":"backgroundColor","default":"@android:color/black","values":null,"title":"Primary background color","description":"The background color. Can be a hex color or a resource reference.","required":true},{"key":"backgroundColorSecondary","default":"#ff282828","values":null,"title":"Secondary background color","description":"The secondary background color. (e.g. search box, artist \u0026 podcast). Can be a hex color or a resource reference.","required":true},{"key":"accentColor","default":"#ff1ed760","values":null,"title":"Accent color","description":"The accent color (\u0027Spotify green\u0027 by default). Can be a hex color or a resource reference.","required":true},{"key":"accentColorPressed","default":"#ff169c46","values":null,"title":"Pressed dark theme accent color","description":"The color when accented buttons are pressed, by default slightly darker than accent. Can be a hex color or a resource reference.","required":true}]},{"name":"Disable ads","description":null,"compatiblePackages":[{"name":"com.myprog.hexedit","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Hides most of the ads across the app.","compatiblePackages":[{"name":"com.myfitnesspal.android","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Removes general ads.","compatiblePackages":[{"name":"com.vanced.android.youtube","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bypass root checks","description":"Removes the restriction to use the app with root permissions or on a custom ROM.","compatiblePackages":[{"name":"it.ipzs.cieid","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Permanent shuffle","description":"Permanently remember your shuffle preference even if the playlist ends or another track is played.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Permanent repeat","description":"Permanently remember your repeating preference even if the playlist ends or another track is played.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Codecs unlock","description":"Adds more audio codec options. The new audio codecs usually result in better audio quality.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Exclusive audio playback","description":"Enables the option to play audio without video.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Music video ads","description":"Removes ads in the music player.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Background play","description":"Enables playing music in the background.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"GmsCore support","description":"Allows patched Google apps to run without root and under a different package name by using GmsCore instead of Google Play Services.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":true,"requiresIntegrations":true,"options":[{"key":"gmsCoreVendor","default":"com.mgoogle","values":{"Vanced":"com.mgoogle","ReVanced":"app.revanced"},"title":"GmsCore Vendor","description":"The group id of the GmsCore vendor.","required":true}]},{"name":"Bypass certificate checks","description":"Bypasses certificate checks which prevent YouTube Music from working on Android Auto.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove upgrade button","description":"Removes the upgrade tab from the pivot bar.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Compact header","description":"Hides the music category bar at the top of the homepage.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide get premium","description":"Removes all \"Get Premium\" evidences from the avatar menu.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Minimized playback music","description":"Enables minimized playback on Kids music.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove badge tab","description":"Removes the badge tab from the activity tab.","compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove notification badge","description":"Removes the red notification badge from the activity tab.","compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":["10.1.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Swipe controls","description":"Adds options to enable and configure volume and brightness swipe controls.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Copy video URL","description":"Adds options to display buttons in the video player to copy video URLs.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Seekbar tapping","description":"Adds an option to enable tap-to-seek on the seekbar of the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable precise seeking gesture","description":"Adds an option to disable precise seeking when swiping up on the seekbar.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable slide to seek","description":"Adds an option to enable slide to seek instead of playing at 2x speed when pressing and holding in the video player. Including this patch may cause issues with tapping or double tapping the video player overlay.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"External downloads","description":"Adds support to download and save YouTube videos using an external downloader app.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove viewer discretion dialog","description":"Adds an option to remove the dialog that appears when opening a video that has been age-restricted by accepting it automatically. This does not bypass the age restriction.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Adds options to remove general ads.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Video ads","description":"Adds an option to remove ads in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof device dimensions","description":"Adds an option to spoof the device dimensions which unlocks higher video qualities if they aren\u0027t available on the device.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"GmsCore support","description":"Allows patched Google apps to run without root and under a different package name by using GmsCore instead of Google Play Services.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"gmsCoreVendor","default":"com.mgoogle","values":{"Vanced":"com.mgoogle","ReVanced":"app.revanced"},"title":"GmsCore Vendor","description":"The group id of the GmsCore vendor.","required":true}]},{"name":"Minimized playback","description":"Unlocks options for picture-in-picture and background playback.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove tracking query parameter","description":"Adds an option to remove the tracking info from links you share.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Always repeat","description":"Adds an option to always repeat videos when they end.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable debugging","description":"Adds options for debugging.","compatiblePackages":[{"name":"com.google.android.youtube","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Client spoof","description":"Adds options to spoof the client to allow video playback.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable zoom haptics","description":"Adds an option to disable haptics when zooming.","compatiblePackages":[{"name":"com.google.android.youtube","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Announcements","description":"Adds an option to show announcements from ReVanced on app startup.","compatiblePackages":[{"name":"com.google.android.youtube","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bypass URL redirects","description":"Adds an option to bypass URL redirects and open the original URL directly.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Open links externally","description":"Adds an option to always open links in your browser instead of in the in-app-browser.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable player popup panels","description":"Adds an option to disable panels (such as live chat) from opening automatically.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide captions button","description":"Adds an option to hide the captions button in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Navigation buttons","description":"Adds options to hide and change navigation buttons (such as the Shorts button).","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide autoplay button","description":"Adds an option to hide the autoplay button in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide video action buttons","description":"Adds options to hide action buttons (such as the Download button) under videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide cast button","description":"Adds an option to hide the cast button in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide player buttons","description":"Adds an option to hide the previous and next buttons in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Return YouTube Dislike","description":"Adds an option to show the dislike count of videos using the Return YouTube Dislike API.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Restore old seekbar thumbnails","description":"Adds an option to restore the old seekbar thumbnails that appear above the seekbar while seeking instead of fullscreen thumbnails.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto captions","description":"Adds an option to disable captions from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable tablet layout","description":"Adds an option to spoof the device form factor to a tablet which enables the tablet layout.","compatiblePackages":[{"name":"com.google.android.youtube","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Theme","description":"Adds options for theming and applies a custom background theme (dark background theme defaults to amoled black).","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"darkThemeBackgroundColor","default":"@android:color/black","values":{"Amoled black":"@android:color/black","Material You":"@android:color/system_neutral1_900","Classic (old YouTube)":"#FF212121","Catppuccin (Mocha)":"#FF181825","Dark pink":"#FF290025","Dark blue":"#FF001029","Dark green":"#FF002905","Dark yellow":"#FF282900","Dark orange":"#FF291800","Dark red":"#FF290000"},"title":"Dark theme background color","description":"Can be a hex color (#AARRGGBB) or a color resource reference.","required":false},{"key":"lightThemeBackgroundColor","default":"@android:color/white","values":{"White":"@android:color/white","Material You":"@android:color/system_neutral1_50","Catppuccin (Latte)":"#FFE6E9EF","Light pink":"#FFFCCFF3","Light blue":"#FFD1E0FF","Light green":"#FFCCFFCC","Light yellow":"#FFFDFFCC","Light orange":"#FFFFE6CC","Light red":"#FFFFD6D6"},"title":"Light theme background color","description":"Can be a hex color (#AARRGGBB) or a color resource reference.","required":false}]},{"name":"SponsorBlock","description":"Adds options to enable and configure SponsorBlock, which can skip undesired video segments such as sponsored content.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change start page","description":"Adds an option to set which page the app opens in instead of the homepage.","compatiblePackages":[{"name":"com.google.android.youtube","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Tablet mini player","description":"Adds an option to enable the tablet mini player layout.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof app version","description":"Adds an option to trick YouTube into thinking you are running an older version of the app. This can be used to restore old UI elements and features.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Alternative thumbnails","description":"Adds options to replace video thumbnails using the DeArrow API or image captures from the video.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable resuming Shorts on startup","description":"Adds an option to disable the Shorts player from resuming on app startup when Shorts were last being watched.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Wide searchbar","description":"Adds an option to replace the search icon with a wide search bar. This will hide the YouTube logo when active.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide timestamp","description":"Adds an option to hide the timestamp in the bottom left of the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide Shorts components","description":"Adds options to hide components related to YouTube Shorts.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable rolling number animations","description":"Adds an option to disable rolling number animations of video view count, user likes, and upload time.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide \u0027Load more\u0027 button","description":"Adds an option to hide the button under videos that loads similar videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide seekbar","description":"Adds an option to hide the seekbar.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide endscreen cards","description":"Adds an option to hide suggested video cards at the end of videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide album cards","description":"Adds an option to hide album cards below artist descriptions.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable fullscreen ambient mode","description":"Adds an option to disable the ambient mode when in fullscreen.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable suggested video end screen","description":"Adds an option to disable the suggested video end screen at the end of videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide crowdfunding box","description":"Adds an option to hide the crowdfunding box between the player and video description.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide layout components","description":"Adds options to hide general layout components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide info cards","description":"Adds an option to hide info cards that creators add in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Player flyout menu","description":"Adds options to hide menu items that appear when pressing the gear icon in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide filter bar","description":"Adds options to hide the category bar at the top of video feeds.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide breaking news shelf","description":"Adds an option to hide the breaking news shelf on the homepage tab.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide floating microphone button","description":"Adds an option to hide the floating microphone button when searching.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Comments","description":"Adds options to hide components related to comments.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Custom player overlay opacity","description":"Adds an option to change the opacity of the video player background when player controls are visible.","compatiblePackages":[{"name":"com.google.android.youtube","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove player controls background","description":"Removes the dark background surrounding the video player controls.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Change header","description":"Applies a custom header in the top left corner within the app. Defaults to the ReVanced header.","compatiblePackages":[{"name":"com.google.android.youtube","versions":null}],"use":false,"requiresIntegrations":false,"options":[{"key":"header","default":"ReVanced (borderless logo)","values":{"YouTube":"yt_wordmark_header","YouTube Premium":"yt_premium_wordmark_header","ReVanced":"ReVanced","ReVanced (borderless logo)":"ReVanced (borderless logo)"},"title":"Header","description":"Either a header name or a path to a custom header folder to use in the top bar.\nThe path to a folder must contain one or more of the following folders matching the DPI of your device:\n\n- drawable-xxxhdpi\n- drawable-xxhdpi\n- drawable-xhdpi\n- drawable-mdpi\n- drawable-hdpi\n\nThese folders must contain the following files:\n\n- yt_wordmark_header_light.png\n- yt_wordmark_header_dark.png","required":true}]},{"name":"Custom branding","description":"Applies a custom app name and icon. Defaults to \"YouTube ReVanced\" and the ReVanced logo.","compatiblePackages":[{"name":"com.google.android.youtube","versions":null}],"use":false,"requiresIntegrations":false,"options":[{"key":"appName","default":"YouTube ReVanced","values":{"YouTube ReVanced":"YouTube ReVanced","YT ReVanced":"YT ReVanced","YT":"YT","YouTube":"YouTube"},"title":"App name","description":"The name of the app.","required":false},{"key":"iconPath","default":"ReVanced*Logo","values":{"ReVanced Logo":"ReVanced*Logo"},"title":"App icon","description":"The path to a folder containing the following folders:\n\n- mipmap-xxxhdpi\n- mipmap-xxhdpi\n- mipmap-xhdpi\n- mipmap-hdpi\n- mipmap-mdpi\n\nEach of these folders has to have the following files:\n\n- adaptiveproduct_youtube_background_color_108.png\n- adaptiveproduct_youtube_foreground_color_108.png\n- ic_launcher.png\n- ic_launcher_round.png","required":false}]},{"name":"HDR auto brightness","description":"Adds an option to make the brightness of HDR videos follow the system default.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Playback speed","description":"Adds options to customize available playback speeds and to remember the last playback speed selected.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Restore old video quality menu","description":"Adds an option to restore the old video quality menu with specific video resolution options.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remember video quality","description":"Adds an option to remember the last video quality selected.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.48.39","18.49.37","19.01.34","19.02.39","19.03.35"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable mandatory login","description":null,"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock premium","description":null,"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove debugging detection","description":"Removes the USB and wireless debugging checks.","compatiblePackages":[{"name":"com.scb.phone","versions":null}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Hide inbox ads","description":"Hides ads in inbox.","compatiblePackages":[{"name":"com.facebook.orca","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable switching emoji to sticker","description":"Disables switching from emoji to sticker search mode in message input field.","compatiblePackages":[{"name":"com.facebook.orca","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable typing indicator","description":"Disables the indicator while typing a message.","compatiblePackages":[{"name":"com.facebook.orca","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock pro","description":"Unlocks pro features.","compatiblePackages":[{"name":"com.vsco.cam","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":null,"compatiblePackages":[{"name":"com.nis.app","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove file size limit","description":"Allows opening files larger than 2 MB in the text editor.","compatiblePackages":[{"name":"pl.solidexplorer2","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock pro","description":null,"compatiblePackages":[{"name":"com.candylink.openvpn","versions":null}],"use":true,"requiresIntegrations":false,"options":[]}] \ No newline at end of file +[{"name":"Unlock pro","description":null,"compatiblePackages":[{"name":"org.totschnig.myexpenses","versions":["3.4.9"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove root detection","description":"Removes the check for root permissions and unlocked bootloader.","compatiblePackages":[{"name":"at.gv.bka.serviceportal","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":null,"compatiblePackages":[{"name":"jp.pxv.android","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Hides most of the ads across the app.","compatiblePackages":[{"name":"com.myfitnesspal.android","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Sanitize sharing links","description":"Removes (tracking) query parameters from the URLs when sharing links.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":null,"compatiblePackages":[{"name":"com.reddit.frontpage","versions":null}],"use":true,"requiresIntegrations":true,"options":[]},{"name":"Spoof client","description":"Restores functionality of the app by using custom client ID.","compatiblePackages":[{"name":"com.andrewshu.android.reddit","versions":null},{"name":"com.andrewshu.android.redditdonation","versions":null}],"use":true,"requiresIntegrations":false,"options":[{"key":"client-id","default":null,"values":null,"title":"OAuth client ID","description":"The Reddit OAuth client ID. You can get your client ID from https://www.reddit.com/prefs/apps. The application type has to be \"Installed app\" and the redirect URI has to be set to \"redditisfun://auth\".","required":true}]},{"name":"Unlock subscription","description":"Unlocks the subscription feature but requires a custom client ID.","compatiblePackages":[{"name":"ml.docilealligator.infinityforreddit","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof client","description":"Restores functionality of the app by using custom client ID.","compatiblePackages":[{"name":"ml.docilealligator.infinityforreddit","versions":null}],"use":true,"requiresIntegrations":false,"options":[{"key":"client-id","default":null,"values":null,"title":"OAuth client ID","description":"The Reddit OAuth client ID. You can get your client ID from https://www.reddit.com/prefs/apps. The application type has to be \"Installed app\" and the redirect URI has to be set to \"infinity://localhost\".","required":true}]},{"name":"Spoof client","description":"Restores functionality of the app by using custom client ID.","compatiblePackages":[{"name":"me.ccrama.redditslide","versions":null}],"use":true,"requiresIntegrations":false,"options":[{"key":"client-id","default":null,"values":null,"title":"OAuth client ID","description":"The Reddit OAuth client ID. You can get your client ID from https://www.reddit.com/prefs/apps. The application type has to be \"Installed app\" and the redirect URI has to be set to \"http://www.ccrama.me\".","required":true}]},{"name":"Spoof client","description":"Restores functionality of the app by using custom client ID.","compatiblePackages":[{"name":"com.rubenmayayo.reddit","versions":null}],"use":true,"requiresIntegrations":false,"options":[{"key":"client-id","default":null,"values":null,"title":"OAuth client ID","description":"The Reddit OAuth client ID. You can get your client ID from https://www.reddit.com/prefs/apps. The application type has to be \"Installed app\" and the redirect URI has to be set to \"http://rubenmayayo.com\".","required":true}]},{"name":"Spoof client","description":"Restores functionality of the app by using custom client ID.","compatiblePackages":[{"name":"free.reddit.news","versions":null},{"name":"reddit.news","versions":null}],"use":true,"requiresIntegrations":false,"options":[{"key":"client-id","default":null,"values":null,"title":"OAuth client ID","description":"The Reddit OAuth client ID. You can get your client ID from https://www.reddit.com/prefs/apps. The application type has to be \"Installed app\" and the redirect URI has to be set to \"dbrady://relay\".","required":true}]},{"name":"Spoof client","description":"Restores functionality of the app by using custom client ID.","compatiblePackages":[{"name":"com.onelouder.baconreader","versions":null},{"name":"com.onelouder.baconreader.premium","versions":null}],"use":true,"requiresIntegrations":false,"options":[{"key":"client-id","default":null,"values":null,"title":"OAuth client ID","description":"The Reddit OAuth client ID. You can get your client ID from https://www.reddit.com/prefs/apps. The application type has to be \"Installed app\" and the redirect URI has to be set to \"http://baconreader.com/auth\".","required":true}]},{"name":"Disable ads","description":null,"compatiblePackages":[{"name":"o.o.joey","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof client","description":"Restores functionality of the app by using custom client ID.","compatiblePackages":[{"name":"o.o.joey","versions":null},{"name":"o.o.joey.pro","versions":null},{"name":"o.o.joey.dev","versions":null}],"use":true,"requiresIntegrations":false,"options":[{"key":"client-id","default":null,"values":null,"title":"OAuth client ID","description":"The Reddit OAuth client ID. You can get your client ID from https://www.reddit.com/prefs/apps. The application type has to be \"Installed app\" and the redirect URI has to be set to \"https://127.0.0.1:65023/authorize_callback\".","required":true}]},{"name":"Disable ads","description":null,"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof client","description":"Restores functionality of the app by using custom client ID.","compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":null},{"name":"com.laurencedawson.reddit_sync.pro","versions":null},{"name":"com.laurencedawson.reddit_sync.dev","versions":null}],"use":true,"requiresIntegrations":false,"options":[{"key":"client-id","default":null,"values":null,"title":"OAuth client ID","description":"The Reddit OAuth client ID. You can get your client ID from https://www.reddit.com/prefs/apps. The application type has to be \"Installed app\" and the redirect URI has to be set to \"http://redditsync/auth\".","required":true}]},{"name":"Disable Sync for Lemmy bottom sheet","description":"Disables the bottom sheet at the startup that asks you to signup to \"Sync for Lemmy\".","compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":["v23.06.30-13:39"]},{"name":"com.laurencedawson.reddit_sync.pro","versions":null},{"name":"com.laurencedawson.reddit_sync.dev","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock premium Reddit icons","description":null,"compatiblePackages":[{"name":"com.reddit.frontpage","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable screenshot popup","description":"Disables the popup that shows up when taking a screenshot.","compatiblePackages":[{"name":"com.reddit.frontpage","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove ads","description":null,"compatiblePackages":[{"name":"net.binarymode.android.irplus","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Removes general ads.","compatiblePackages":[{"name":"com.vanced.android.youtube","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove viewer discretion dialog","description":"Adds an option to remove the dialog that appears when opening a video that has been age-restricted by accepting it automatically. This does not bypass the age restriction.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Copy video URL","description":"Adds options to display buttons in the video player to copy video URLs.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable slide to seek","description":"Adds an option to enable slide to seek instead of playing at 2x speed when pressing and holding in the video player. Including this patch may cause issues with tapping or double tapping the video player overlay.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Disable precise seeking gesture","description":"Adds an option to disable precise seeking when swiping up on the seekbar.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Seekbar tapping","description":"Adds an option to enable tap-to-seek on the seekbar of the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"External downloads","description":"Adds support to download and save YouTube videos using an external downloader app.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Swipe controls","description":"Adds options to enable and configure volume and brightness swipe controls.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"GmsCore support","description":"Allows patched Google apps to run without root and under a different package name by using GmsCore instead of Google Play Services.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":true,"options":[{"key":"gmsCoreVendor","default":"com.mgoogle","values":{"Vanced":"com.mgoogle","ReVanced":"app.revanced"},"title":"GmsCore Vendor","description":"The group id of the GmsCore vendor.","required":true}]},{"name":"Disable zoom haptics","description":"Adds an option to disable haptics when zooming.","compatiblePackages":[{"name":"com.google.android.youtube","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Always repeat","description":"Adds an option to always repeat videos when they end.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Open links externally","description":"Adds an option to always open links in your browser instead of in the in-app-browser.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bypass URL redirects","description":"Adds an option to bypass URL redirects and open the original URL directly.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof device dimensions","description":"Adds an option to spoof the device dimensions which unlocks higher video qualities if they aren\u0027t available on the device.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Client spoof","description":"Adds options to spoof the client to allow video playback.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove tracking query parameter","description":"Adds an option to remove the tracking info from links you share.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Announcements","description":"Adds an option to show announcements from ReVanced on app startup.","compatiblePackages":[{"name":"com.google.android.youtube","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Minimized playback","description":"Unlocks options for picture-in-picture and background playback.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Enable debugging","description":"Adds options for debugging.","compatiblePackages":[{"name":"com.google.android.youtube","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Adds options to remove general ads.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Video ads","description":"Adds an option to remove ads in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"HDR auto brightness","description":"Adds an option to make the brightness of HDR videos follow the system default.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Restore old video quality menu","description":"Adds an option to restore the old video quality menu with specific video resolution options.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remember video quality","description":"Adds an option to remember the last video quality selected.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Playback speed","description":"Adds options to customize available playback speeds and to remember the last playback speed selected.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Tablet mini player","description":"Adds an option to enable the tablet mini player layout.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide Shorts components","description":"Adds options to hide components related to YouTube Shorts.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Comments","description":"Adds options to hide components related to comments.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable suggested video end screen","description":"Adds an option to disable the suggested video end screen at the end of videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide timestamp","description":"Adds an option to hide the timestamp in the bottom left of the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable rolling number animations","description":"Adds an option to disable rolling number animations of video view count, user likes, and upload time.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide layout components","description":"Adds options to hide general layout components.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide endscreen cards","description":"Adds an option to hide suggested video cards at the end of videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable fullscreen ambient mode","description":"Adds an option to disable the ambient mode when in fullscreen.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide breaking news shelf","description":"Adds an option to hide the breaking news shelf on the homepage tab.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide crowdfunding box","description":"Adds an option to hide the crowdfunding box between the player and video description.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide info cards","description":"Adds an option to hide info cards that creators add in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide floating microphone button","description":"Adds an option to hide the floating microphone button when searching.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide seekbar","description":"Adds an option to hide the seekbar.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Player flyout menu","description":"Adds options to hide menu items that appear when pressing the gear icon in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide \u0027Load more\u0027 button","description":"Adds an option to hide the button under videos that loads similar videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide filter bar","description":"Adds options to hide the category bar at the top of video feeds.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide album cards","description":"Adds an option to hide album cards below artist descriptions.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable resuming Shorts on startup","description":"Adds an option to disable the Shorts player from resuming on app startup when Shorts were last being watched.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Wide searchbar","description":"Adds an option to replace the search icon with a wide search bar. This will hide the YouTube logo when active.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable auto captions","description":"Adds an option to disable captions from being automatically enabled.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Theme","description":"Adds options for theming and applies a custom background theme (dark background theme defaults to amoled black).","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[{"key":"darkThemeBackgroundColor","default":"@android:color/black","values":{"Amoled black":"@android:color/black","Material You":"@android:color/system_neutral1_900","Classic (old YouTube)":"#FF212121","Catppuccin (Mocha)":"#FF181825","Dark pink":"#FF290025","Dark blue":"#FF001029","Dark green":"#FF002905","Dark yellow":"#FF282900","Dark orange":"#FF291800","Dark red":"#FF290000"},"title":"Dark theme background color","description":"Can be a hex color (#AARRGGBB) or a color resource reference.","required":false},{"key":"lightThemeBackgroundColor","default":"@android:color/white","values":{"White":"@android:color/white","Material You":"@android:color/system_neutral1_50","Catppuccin (Latte)":"#FFE6E9EF","Light pink":"#FFFCCFF3","Light blue":"#FFD1E0FF","Light green":"#FFCCFFCC","Light yellow":"#FFFDFFCC","Light orange":"#FFFFE6CC","Light red":"#FFFFD6D6"},"title":"Light theme background color","description":"Can be a hex color (#AARRGGBB) or a color resource reference.","required":false}]},{"name":"Enable tablet layout","description":"Adds an option to spoof the device form factor to a tablet which enables the tablet layout.","compatiblePackages":[{"name":"com.google.android.youtube","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide captions button","description":"Adds an option to hide the captions button in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide autoplay button","description":"Adds an option to hide the autoplay button in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide video action buttons","description":"Adds options to hide action buttons (such as the Download button) under videos.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide cast button","description":"Adds an option to hide the cast button in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide player buttons","description":"Adds an option to hide the previous and next buttons in the video player.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Navigation buttons","description":"Adds options to hide and change navigation buttons (such as the Shorts button).","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Alternative thumbnails","description":"Adds options to replace video thumbnails using the DeArrow API or image captures from the video.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Change start page","description":"Adds an option to set which page the app opens in instead of the homepage.","compatiblePackages":[{"name":"com.google.android.youtube","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Custom branding","description":"Applies a custom app name and icon. Defaults to \"YouTube ReVanced\" and the ReVanced logo.","compatiblePackages":[{"name":"com.google.android.youtube","versions":null}],"use":false,"requiresIntegrations":false,"options":[{"key":"appName","default":"YouTube ReVanced","values":{"YouTube ReVanced":"YouTube ReVanced","YT ReVanced":"YT ReVanced","YT":"YT","YouTube":"YouTube"},"title":"App name","description":"The name of the app.","required":false},{"key":"iconPath","default":"ReVanced*Logo","values":{"ReVanced Logo":"ReVanced*Logo"},"title":"App icon","description":"The path to a folder containing the following folders:\n\n- mipmap-xxxhdpi\n- mipmap-xxhdpi\n- mipmap-xhdpi\n- mipmap-hdpi\n- mipmap-mdpi\n\nEach of these folders has to have the following files:\n\n- adaptiveproduct_youtube_background_color_108.png\n- adaptiveproduct_youtube_foreground_color_108.png\n- ic_launcher.png\n- ic_launcher_round.png","required":false}]},{"name":"Change header","description":"Applies a custom header in the top left corner within the app. Defaults to the ReVanced header.","compatiblePackages":[{"name":"com.google.android.youtube","versions":null}],"use":false,"requiresIntegrations":false,"options":[{"key":"header","default":"ReVanced (borderless logo)","values":{"YouTube":"yt_wordmark_header","YouTube Premium":"yt_premium_wordmark_header","ReVanced":"ReVanced","ReVanced (borderless logo)":"ReVanced (borderless logo)"},"title":"Header","description":"Either a header name or a path to a custom header folder to use in the top bar.\nThe path to a folder must contain one or more of the following folders matching the DPI of your device:\n\n- drawable-xxxhdpi\n- drawable-xxhdpi\n- drawable-xhdpi\n- drawable-mdpi\n- drawable-hdpi\n\nThese folders must contain the following files:\n\n- yt_wordmark_header_light.png\n- yt_wordmark_header_dark.png","required":true}]},{"name":"Return YouTube Dislike","description":"Adds an option to show the dislike count of videos using the Return YouTube Dislike API.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable player popup panels","description":"Adds an option to disable panels (such as live chat) from opening automatically.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"SponsorBlock","description":"Adds options to enable and configure SponsorBlock, which can skip undesired video segments such as sponsored content.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Restore old seekbar thumbnails","description":"Adds an option to restore the old seekbar thumbnails that appear above the seekbar while seeking instead of fullscreen thumbnails.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove player controls background","description":"Removes the dark background surrounding the video player controls.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Custom player overlay opacity","description":"Adds an option to change the opacity of the video player background when player controls are visible.","compatiblePackages":[{"name":"com.google.android.youtube","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof app version","description":"Adds an option to trick YouTube into thinking you are running an older version of the app. This can be used to restore old UI elements and features.","compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.32.39","18.37.36","18.38.44","18.43.45","18.44.41","18.45.43","18.48.39","18.49.37","19.01.34","19.02.39","19.03.35","19.03.36","19.04.37"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock pro","description":null,"compatiblePackages":[{"name":"com.ithebk.expensemanager","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock themes","description":"Unlocks all themes that are inaccessible until a certain level is reached.","compatiblePackages":[{"name":"com.ticktick.task","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock pro","description":null,"compatiblePackages":[{"name":"tv.trakt.trakt","versions":["1.1.1"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock pro","description":"Unlocks all pro features.","compatiblePackages":[{"name":"co.windyapp.android","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Bypass root checks","description":"Removes the restriction to use the app with root permissions or on a custom ROM.","compatiblePackages":[{"name":"it.ipzs.cieid","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":null,"compatiblePackages":[{"name":"com.nis.app","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock pro","description":null,"compatiblePackages":[{"name":"ginlemon.iconpackstudio","versions":["2.2 build 016"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide story ads","description":"Hides the ads in the Facebook app stories.","compatiblePackages":[{"name":"com.facebook.katana","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide timeline ads","description":"Removes ads from the timeline.","compatiblePackages":[{"name":"com.instagram.android","versions":["275.0.0.27.98"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove badge tab","description":"Removes the badge tab from the activity tab.","compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove notification badge","description":"Removes the red notification badge from the activity tab.","compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":["10.1.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable mandatory login","description":null,"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock premium","description":null,"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable dashboard ads","description":"Disables ads in the dashboard.","compatiblePackages":[{"name":"com.tumblr","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable in-app update","description":"Disables the in-app update check and update prompt.","compatiblePackages":[{"name":"com.tumblr","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable gift message popup","description":"Disables the popup suggesting to buy TumblrMart items for other people.","compatiblePackages":[{"name":"com.tumblr","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable blog notification reminder","description":"Disables the reminder to enable notifications for blogs you visit.","compatiblePackages":[{"name":"com.tumblr","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable Tumblr Live","description":"Disable the Tumblr Live tab button and dashboard carousel.","compatiblePackages":[{"name":"com.tumblr","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide update popup","description":"Prevents the update popup from showing up.","compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.32.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock plus","description":null,"compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.32.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof device ID","description":"Spoofs device ID to mitigate manual bans by developers.","compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.32.0"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock pro","description":null,"compatiblePackages":[{"name":"com.wakdev.apps.nfctools.se","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable ads","description":null,"compatiblePackages":[{"name":"com.myprog.hexedit","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Show on lockscreen","description":"Shows student id and student ticket on lockscreen.","compatiblePackages":[{"name":"de.tudortmund.app","versions":null}],"use":true,"requiresIntegrations":true,"options":[]},{"name":"Remove file size limit","description":"Allows opening files larger than 2 MB in the text editor.","compatiblePackages":[{"name":"pl.solidexplorer2","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Pro unlock","description":null,"compatiblePackages":[{"name":"com.backdrops.wallpapers","versions":["4.52"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Spoof signature","description":"Spoofs the signature of the app.","compatiblePackages":[{"name":"at.gv.oe.app","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove root detection","description":"Removes the check for root permissions and unlocked bootloader.","compatiblePackages":[{"name":"at.gv.oe.app","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove broadcasts restriction","description":"Enables starting/stopping NetGuard via broadcasts.","compatiblePackages":[{"name":"eu.faircode.netguard","versions":null}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Enable on demand","description":"Enables listening to songs on-demand, allowing to play any song from playlists, albums or artists without limitations. This does not remove ads.","compatiblePackages":[{"name":"com.spotify.lite","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Custom theme","description":"Applies a custom theme.","compatiblePackages":[{"name":"com.spotify.music","versions":null}],"use":true,"requiresIntegrations":false,"options":[{"key":"backgroundColor","default":"@android:color/black","values":null,"title":"Primary background color","description":"The background color. Can be a hex color or a resource reference.","required":true},{"key":"backgroundColorSecondary","default":"#ff282828","values":null,"title":"Secondary background color","description":"The secondary background color. (e.g. search box, artist \u0026 podcast). Can be a hex color or a resource reference.","required":true},{"key":"accentColor","default":"#ff1ed760","values":null,"title":"Accent color","description":"The accent color (\u0027Spotify green\u0027 by default). Can be a hex color or a resource reference.","required":true},{"key":"accentColorPressed","default":"#ff169c46","values":null,"title":"Pressed dark theme accent color","description":"The color when accented buttons are pressed, by default slightly darker than accent. Can be a hex color or a resource reference.","required":true}]},{"name":"Hide premium navbar","description":"Removes the premium tab from the navbar.","compatiblePackages":[{"name":"com.spotify.music","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Predictive back gesture","description":"Enables the predictive back gesture introduced on Android 13.","compatiblePackages":null,"use":false,"requiresIntegrations":false,"options":[]},{"name":"Override certificate pinning","description":"Overrides certificate pinning, allowing to inspect traffic via a proxy.","compatiblePackages":null,"use":false,"requiresIntegrations":false,"options":[]},{"name":"Change package name","description":"Appends \".revanced\" to the package name by default. Changing the package name of the app can lead to unexpected issues.","compatiblePackages":null,"use":false,"requiresIntegrations":false,"options":[{"key":"packageName","default":"Default","values":{"Default":"Default"},"title":"Package name","description":"The name of the package to rename the app to.","required":true}]},{"name":"Enable Android debugging","description":"Enables Android debugging capabilities. This can slow down the app.","compatiblePackages":null,"use":false,"requiresIntegrations":false,"options":[]},{"name":"Export all activities","description":"Makes all app activities exportable.","compatiblePackages":null,"use":false,"requiresIntegrations":false,"options":[]},{"name":"Spoof Wi-Fi connection","description":"Spoofs an existing Wi-Fi connection.","compatiblePackages":null,"use":false,"requiresIntegrations":true,"options":[]},{"name":"Remove screenshot restriction","description":"Removes the restriction of taking screenshots in apps that normally wouldn\u0027t allow it.","compatiblePackages":null,"use":false,"requiresIntegrations":true,"options":[]},{"name":"Spoof SIM country","description":"Spoofs country information returned by the SIM card provider.","compatiblePackages":null,"use":false,"requiresIntegrations":false,"options":[{"key":"networkCountryIso","default":null,"values":{"Andorra":"AD","United Arab Emirates":"AE","Afghanistan":"AF","Antigua \u0026 Barbuda":"AG","Anguilla":"AI","Albania":"AL","Armenia":"AM","Angola":"AO","Antarctica":"AQ","Argentina":"AR","American Samoa":"AS","Austria":"AT","Australia":"AU","Aruba":"AW","Åland Islands":"AX","Azerbaijan":"AZ","Bosnia \u0026 Herzegovina":"BA","Barbados":"BB","Bangladesh":"BD","Belgium":"BE","Burkina Faso":"BF","Bulgaria":"BG","Bahrain":"BH","Burundi":"BI","Benin":"BJ","St. Barthélemy":"BL","Bermuda":"BM","Brunei":"BN","Bolivia":"BO","Caribbean Netherlands":"BQ","Brazil":"BR","Bahamas":"BS","Bhutan":"BT","Bouvet Island":"BV","Botswana":"BW","Belarus":"BY","Belize":"BZ","Canada":"CA","Cocos (Keeling) Islands":"CC","Congo - Kinshasa":"CD","Central African Republic":"CF","Congo - Brazzaville":"CG","Switzerland":"CH","Côte d’Ivoire":"CI","Cook Islands":"CK","Chile":"CL","Cameroon":"CM","China":"CN","Colombia":"CO","Costa Rica":"CR","Cuba":"CU","Cape Verde":"CV","Curaçao":"CW","Christmas Island":"CX","Cyprus":"CY","Czechia":"CZ","Germany":"DE","Djibouti":"DJ","Denmark":"DK","Dominica":"DM","Dominican Republic":"DO","Algeria":"DZ","Ecuador":"EC","Estonia":"EE","Egypt":"EG","Western Sahara":"EH","Eritrea":"ER","Spain":"ES","Ethiopia":"ET","Finland":"FI","Fiji":"FJ","Falkland Islands":"FK","Micronesia":"FM","Faroe Islands":"FO","France":"FR","Gabon":"GA","United Kingdom":"GB","Grenada":"GD","Georgia":"GE","French Guiana":"GF","Guernsey":"GG","Ghana":"GH","Gibraltar":"GI","Greenland":"GL","Gambia":"GM","Guinea":"GN","Guadeloupe":"GP","Equatorial Guinea":"GQ","Greece":"GR","South Georgia \u0026 South Sandwich Islands":"GS","Guatemala":"GT","Guam":"GU","Guinea-Bissau":"GW","Guyana":"GY","Hong Kong SAR China":"HK","Heard \u0026 McDonald Islands":"HM","Honduras":"HN","Croatia":"HR","Haiti":"HT","Hungary":"HU","Indonesia":"ID","Ireland":"IE","Israel":"IL","Isle of Man":"IM","India":"IN","British Indian Ocean Territory":"IO","Iraq":"IQ","Iran":"IR","Iceland":"IS","Italy":"IT","Jersey":"JE","Jamaica":"JM","Jordan":"JO","Japan":"JP","Kenya":"KE","Kyrgyzstan":"KG","Cambodia":"KH","Kiribati":"KI","Comoros":"KM","St. Kitts \u0026 Nevis":"KN","North Korea":"KP","South Korea":"KR","Kuwait":"KW","Cayman Islands":"KY","Kazakhstan":"KZ","Laos":"LA","Lebanon":"LB","St. Lucia":"LC","Liechtenstein":"LI","Sri Lanka":"LK","Liberia":"LR","Lesotho":"LS","Lithuania":"LT","Luxembourg":"LU","Latvia":"LV","Libya":"LY","Morocco":"MA","Monaco":"MC","Moldova":"MD","Montenegro":"ME","St. Martin":"MF","Madagascar":"MG","Marshall Islands":"MH","Macedonia":"MK","Mali":"ML","Myanmar (Burma)":"MM","Mongolia":"MN","Macau SAR China":"MO","Northern Mariana Islands":"MP","Martinique":"MQ","Mauritania":"MR","Montserrat":"MS","Malta":"MT","Mauritius":"MU","Maldives":"MV","Malawi":"MW","Mexico":"MX","Malaysia":"MY","Mozambique":"MZ","Namibia":"NA","New Caledonia":"NC","Niger":"NE","Norfolk Island":"NF","Nigeria":"NG","Nicaragua":"NI","Netherlands":"NL","Norway":"NO","Nepal":"NP","Nauru":"NR","Niue":"NU","New Zealand":"NZ","Oman":"OM","Panama":"PA","Peru":"PE","French Polynesia":"PF","Papua New Guinea":"PG","Philippines":"PH","Pakistan":"PK","Poland":"PL","St. Pierre \u0026 Miquelon":"PM","Pitcairn Islands":"PN","Puerto Rico":"PR","Palestinian Territories":"PS","Portugal":"PT","Palau":"PW","Paraguay":"PY","Qatar":"QA","Réunion":"RE","Romania":"RO","Serbia":"RS","Russia":"RU","Rwanda":"RW","Saudi Arabia":"SA","Solomon Islands":"SB","Seychelles":"SC","Sudan":"SD","Sweden":"SE","Singapore":"SG","St. Helena":"SH","Slovenia":"SI","Svalbard \u0026 Jan Mayen":"SJ","Slovakia":"SK","Sierra Leone":"SL","San Marino":"SM","Senegal":"SN","Somalia":"SO","Suriname":"SR","South Sudan":"SS","São Tomé \u0026 Príncipe":"ST","El Salvador":"SV","Sint Maarten":"SX","Syria":"SY","Swaziland":"SZ","Turks \u0026 Caicos Islands":"TC","Chad":"TD","French Southern Territories":"TF","Togo":"TG","Thailand":"TH","Tajikistan":"TJ","Tokelau":"TK","Timor-Leste":"TL","Turkmenistan":"TM","Tunisia":"TN","Tonga":"TO","Turkey":"TR","Trinidad \u0026 Tobago":"TT","Tuvalu":"TV","Taiwan":"TW","Tanzania":"TZ","Ukraine":"UA","Uganda":"UG","U.S. Outlying Islands":"UM","United States":"US","Uruguay":"UY","Uzbekistan":"UZ","Vatican City":"VA","St. Vincent \u0026 Grenadines":"VC","Venezuela":"VE","British Virgin Islands":"VG","U.S. Virgin Islands":"VI","Vietnam":"VN","Vanuatu":"VU","Wallis \u0026 Futuna":"WF","Samoa":"WS","Yemen":"YE","Mayotte":"YT","South Africa":"ZA","Zambia":"ZM","Zimbabwe":"ZW"},"title":"Network ISO Country Code","description":"ISO-3166-1 alpha-2 country code equivalent for the SIM provider\u0027s country code.","required":false},{"key":"simCountryIso","default":null,"values":{"Andorra":"AD","United Arab Emirates":"AE","Afghanistan":"AF","Antigua \u0026 Barbuda":"AG","Anguilla":"AI","Albania":"AL","Armenia":"AM","Angola":"AO","Antarctica":"AQ","Argentina":"AR","American Samoa":"AS","Austria":"AT","Australia":"AU","Aruba":"AW","Åland Islands":"AX","Azerbaijan":"AZ","Bosnia \u0026 Herzegovina":"BA","Barbados":"BB","Bangladesh":"BD","Belgium":"BE","Burkina Faso":"BF","Bulgaria":"BG","Bahrain":"BH","Burundi":"BI","Benin":"BJ","St. Barthélemy":"BL","Bermuda":"BM","Brunei":"BN","Bolivia":"BO","Caribbean Netherlands":"BQ","Brazil":"BR","Bahamas":"BS","Bhutan":"BT","Bouvet Island":"BV","Botswana":"BW","Belarus":"BY","Belize":"BZ","Canada":"CA","Cocos (Keeling) Islands":"CC","Congo - Kinshasa":"CD","Central African Republic":"CF","Congo - Brazzaville":"CG","Switzerland":"CH","Côte d’Ivoire":"CI","Cook Islands":"CK","Chile":"CL","Cameroon":"CM","China":"CN","Colombia":"CO","Costa Rica":"CR","Cuba":"CU","Cape Verde":"CV","Curaçao":"CW","Christmas Island":"CX","Cyprus":"CY","Czechia":"CZ","Germany":"DE","Djibouti":"DJ","Denmark":"DK","Dominica":"DM","Dominican Republic":"DO","Algeria":"DZ","Ecuador":"EC","Estonia":"EE","Egypt":"EG","Western Sahara":"EH","Eritrea":"ER","Spain":"ES","Ethiopia":"ET","Finland":"FI","Fiji":"FJ","Falkland Islands":"FK","Micronesia":"FM","Faroe Islands":"FO","France":"FR","Gabon":"GA","United Kingdom":"GB","Grenada":"GD","Georgia":"GE","French Guiana":"GF","Guernsey":"GG","Ghana":"GH","Gibraltar":"GI","Greenland":"GL","Gambia":"GM","Guinea":"GN","Guadeloupe":"GP","Equatorial Guinea":"GQ","Greece":"GR","South Georgia \u0026 South Sandwich Islands":"GS","Guatemala":"GT","Guam":"GU","Guinea-Bissau":"GW","Guyana":"GY","Hong Kong SAR China":"HK","Heard \u0026 McDonald Islands":"HM","Honduras":"HN","Croatia":"HR","Haiti":"HT","Hungary":"HU","Indonesia":"ID","Ireland":"IE","Israel":"IL","Isle of Man":"IM","India":"IN","British Indian Ocean Territory":"IO","Iraq":"IQ","Iran":"IR","Iceland":"IS","Italy":"IT","Jersey":"JE","Jamaica":"JM","Jordan":"JO","Japan":"JP","Kenya":"KE","Kyrgyzstan":"KG","Cambodia":"KH","Kiribati":"KI","Comoros":"KM","St. Kitts \u0026 Nevis":"KN","North Korea":"KP","South Korea":"KR","Kuwait":"KW","Cayman Islands":"KY","Kazakhstan":"KZ","Laos":"LA","Lebanon":"LB","St. Lucia":"LC","Liechtenstein":"LI","Sri Lanka":"LK","Liberia":"LR","Lesotho":"LS","Lithuania":"LT","Luxembourg":"LU","Latvia":"LV","Libya":"LY","Morocco":"MA","Monaco":"MC","Moldova":"MD","Montenegro":"ME","St. Martin":"MF","Madagascar":"MG","Marshall Islands":"MH","Macedonia":"MK","Mali":"ML","Myanmar (Burma)":"MM","Mongolia":"MN","Macau SAR China":"MO","Northern Mariana Islands":"MP","Martinique":"MQ","Mauritania":"MR","Montserrat":"MS","Malta":"MT","Mauritius":"MU","Maldives":"MV","Malawi":"MW","Mexico":"MX","Malaysia":"MY","Mozambique":"MZ","Namibia":"NA","New Caledonia":"NC","Niger":"NE","Norfolk Island":"NF","Nigeria":"NG","Nicaragua":"NI","Netherlands":"NL","Norway":"NO","Nepal":"NP","Nauru":"NR","Niue":"NU","New Zealand":"NZ","Oman":"OM","Panama":"PA","Peru":"PE","French Polynesia":"PF","Papua New Guinea":"PG","Philippines":"PH","Pakistan":"PK","Poland":"PL","St. Pierre \u0026 Miquelon":"PM","Pitcairn Islands":"PN","Puerto Rico":"PR","Palestinian Territories":"PS","Portugal":"PT","Palau":"PW","Paraguay":"PY","Qatar":"QA","Réunion":"RE","Romania":"RO","Serbia":"RS","Russia":"RU","Rwanda":"RW","Saudi Arabia":"SA","Solomon Islands":"SB","Seychelles":"SC","Sudan":"SD","Sweden":"SE","Singapore":"SG","St. Helena":"SH","Slovenia":"SI","Svalbard \u0026 Jan Mayen":"SJ","Slovakia":"SK","Sierra Leone":"SL","San Marino":"SM","Senegal":"SN","Somalia":"SO","Suriname":"SR","South Sudan":"SS","São Tomé \u0026 Príncipe":"ST","El Salvador":"SV","Sint Maarten":"SX","Syria":"SY","Swaziland":"SZ","Turks \u0026 Caicos Islands":"TC","Chad":"TD","French Southern Territories":"TF","Togo":"TG","Thailand":"TH","Tajikistan":"TJ","Tokelau":"TK","Timor-Leste":"TL","Turkmenistan":"TM","Tunisia":"TN","Tonga":"TO","Turkey":"TR","Trinidad \u0026 Tobago":"TT","Tuvalu":"TV","Taiwan":"TW","Tanzania":"TZ","Ukraine":"UA","Uganda":"UG","U.S. Outlying Islands":"UM","United States":"US","Uruguay":"UY","Uzbekistan":"UZ","Vatican City":"VA","St. Vincent \u0026 Grenadines":"VC","Venezuela":"VE","British Virgin Islands":"VG","U.S. Virgin Islands":"VI","Vietnam":"VN","Vanuatu":"VU","Wallis \u0026 Futuna":"WF","Samoa":"WS","Yemen":"YE","Mayotte":"YT","South Africa":"ZA","Zambia":"ZM","Zimbabwe":"ZW"},"title":"Sim ISO Country Code","description":"ISO-3166-1 alpha-2 country code equivalent for the SIM provider\u0027s country code.","required":false}]},{"name":"Remove screen capture restriction","description":"Removes the restriction of capturing audio from apps that normally wouldn\u0027t allow it.","compatiblePackages":null,"use":false,"requiresIntegrations":true,"options":[]},{"name":"Codecs unlock","description":"Adds more audio codec options. The new audio codecs usually result in better audio quality.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Exclusive audio playback","description":"Enables the option to play audio without video.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Permanent shuffle","description":"Permanently remember your shuffle preference even if the playlist ends or another track is played.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Permanent repeat","description":"Permanently remember your repeating preference even if the playlist ends or another track is played.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"GmsCore support","description":"Allows patched Google apps to run without root and under a different package name by using GmsCore instead of Google Play Services.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":true,"requiresIntegrations":true,"options":[{"key":"gmsCoreVendor","default":"com.mgoogle","values":{"Vanced":"com.mgoogle","ReVanced":"app.revanced"},"title":"GmsCore Vendor","description":"The group id of the GmsCore vendor.","required":true}]},{"name":"Bypass certificate checks","description":"Bypasses certificate checks which prevent YouTube Music from working on Android Auto.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Music video ads","description":"Removes ads in the music player.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Compact header","description":"Hides the music category bar at the top of the homepage.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Remove upgrade button","description":"Removes the upgrade tab from the pivot bar.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Minimized playback music","description":"Enables minimized playback on Kids music.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide get premium","description":"Removes all \"Get Premium\" evidences from the avatar menu.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Background play","description":"Enables playing music in the background.","compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Feed filter","description":"Removes ads, livestreams, stories, image videos and videos with a specific amount of views or likes from the feed.","compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":["32.5.3"]},{"name":"com.zhiliaoapp.musically","versions":["32.5.3"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Playback speed","description":"Enables the playback speed option for all videos and retains the speed configurations in between videos.","compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":["32.5.3"]},{"name":"com.zhiliaoapp.musically","versions":["32.5.3"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remember clear display","description":"Remembers the clear display configurations in between videos.","compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":["32.5.3"]},{"name":"com.zhiliaoapp.musically","versions":["32.5.3"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Show seekbar","description":"Shows progress bar for all video.","compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":null},{"name":"com.zhiliaoapp.musically","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Downloads","description":"Removes download restrictions and changes the default path to download to.","compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":["32.5.3"]},{"name":"com.zhiliaoapp.musically","versions":["32.5.3"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Fix Google login","description":"Allows logging in with a Google account.","compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":null},{"name":"com.zhiliaoapp.musically","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable login requirement","description":null,"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":null},{"name":"com.zhiliaoapp.musically","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Settings","description":"Adds ReVanced settings to TikTok.","compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":["32.5.3"]},{"name":"com.zhiliaoapp.musically","versions":["32.5.3"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"SIM spoof","description":"Spoofs the information which is retrieved from the SIM card.","compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":null},{"name":"com.zhiliaoapp.musically","versions":null}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Unlock premium","description":null,"compatiblePackages":[{"name":"io.yuka.android","versions":["4.29"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Settings","description":"Adds settings menu to Twitch.","compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1","16.1.0","16.9.1"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Block embedded ads","description":"Blocks embedded stream ads using services like Luminous or PurpleAdBlocker.","compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1","16.1.0","16.9.1"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Block audio ads","description":"Blocks audio ads in streams and VODs.","compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1","16.1.0","16.9.1"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Block video ads","description":"Blocks video ads in streams and VODs.","compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1","16.1.0","16.9.1"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Auto claim channel points","description":"Automatically claim Channel Points.","compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1","16.1.0","16.9.1"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Show deleted messages","description":"Shows deleted chat messages behind a clickable spoiler.","compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1","16.1.0","16.9.1"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Debug mode","description":"Enables Twitch\u0027s internal debugging mode.","compatiblePackages":[{"name":"tv.twitch.android.app","versions":null}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Disable switching emoji to sticker","description":"Disables switching from emoji to sticker search mode in message input field.","compatiblePackages":[{"name":"com.facebook.orca","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable typing indicator","description":"Disables the indicator while typing a message.","compatiblePackages":[{"name":"com.facebook.orca","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide inbox ads","description":"Hides ads in inbox.","compatiblePackages":[{"name":"com.facebook.orca","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove device restrictions","description":"Removes restrictions from using the app on any device. Requires mounting patched app over original.","compatiblePackages":[{"name":"com.google.android.apps.recorder","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Promo code unlock","description":"Disables the validation of promo code. Any code will work to unlock all features.","compatiblePackages":[{"name":"de.dwd.warnapp","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Dynamic color","description":"Replaces the default X (Formerly Twitter) Blue with the user\u0027s Material You palette.","compatiblePackages":[{"name":"com.twitter.android","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide recommended users","description":null,"compatiblePackages":[{"name":"com.twitter.android","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Hide ads","description":"Hides ads.","compatiblePackages":[{"name":"com.twitter.android","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock pro","description":null,"compatiblePackages":[{"name":"com.awedea.nyx","versions":["2.2.7"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock pro","description":null,"compatiblePackages":[{"name":"com.zombodroid.MemeGenerator","versions":["4.6364","4.6370","4.6375","4.6377"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock pro","description":"Unlocks pro features.","compatiblePackages":[{"name":"com.vsco.cam","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock pro","description":null,"compatiblePackages":[{"name":"com.candylink.openvpn","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove debugging detection","description":"Removes the USB and wireless debugging checks.","compatiblePackages":[{"name":"com.scb.phone","versions":null}],"use":false,"requiresIntegrations":false,"options":[]},{"name":"Remove root detection","description":"Removes the check for root permissions.","compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Remove bootloader detection","description":"Removes the check for an unlocked bootloader.","compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":null}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Disable subscription suggestions","description":null,"compatiblePackages":[{"name":"com.strava","versions":["320.12"]}],"use":true,"requiresIntegrations":false,"options":[]},{"name":"Unlock subscription features","description":"Unlocks \"Routes\", \"Matched Runs\" and \"Segment Efforts\".","compatiblePackages":[{"name":"com.strava","versions":["320.12"]}],"use":true,"requiresIntegrations":false,"options":[]}] \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/infinityforreddit/subscription/UnlockSubscriptionPatch.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/infinityforreddit/subscription/UnlockSubscriptionPatch.kt index 9de0f383..a6036020 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/customclients/infinityforreddit/subscription/UnlockSubscriptionPatch.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/infinityforreddit/subscription/UnlockSubscriptionPatch.kt @@ -6,6 +6,7 @@ import app.revanced.patcher.patch.annotation.CompatiblePackage import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.reddit.customclients.infinityforreddit.api.SpoofClientPatch import app.revanced.patches.reddit.customclients.infinityforreddit.subscription.fingerprints.StartSubscriptionActivityFingerprint +import app.revanced.patches.reddit.customclients.infinityforreddit.subscription.fingerprints.SubscriptionActivityOnCreateFingerprint import app.revanced.util.returnEarly @Patch( @@ -18,7 +19,8 @@ import app.revanced.util.returnEarly ) @Suppress("unused") object UnlockSubscriptionPatch : BytecodePatch( - setOf(StartSubscriptionActivityFingerprint) + setOf(StartSubscriptionActivityFingerprint, SubscriptionActivityOnCreateFingerprint) ) { - override fun execute(context: BytecodeContext) = listOf(StartSubscriptionActivityFingerprint).returnEarly() + override fun execute(context: BytecodeContext) = + listOf(StartSubscriptionActivityFingerprint, SubscriptionActivityOnCreateFingerprint).returnEarly() } diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/infinityforreddit/subscription/fingerprints/SubscriptionActivityOnCreateFingerprint.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/infinityforreddit/subscription/fingerprints/SubscriptionActivityOnCreateFingerprint.kt new file mode 100644 index 00000000..dd5f1710 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/infinityforreddit/subscription/fingerprints/SubscriptionActivityOnCreateFingerprint.kt @@ -0,0 +1,13 @@ +package app.revanced.patches.reddit.customclients.infinityforreddit.subscription.fingerprints + +import app.revanced.patcher.fingerprint.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +internal object SubscriptionActivityOnCreateFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC.value, + parameters = listOf("Landroid/os/Bundle;"), + customFingerprint = { method, classDef -> + method.name == "onCreate" && classDef.type.endsWith("SubscriptionActivity;") + } +) diff --git a/src/main/kotlin/app/revanced/patches/youtube/ad/general/HideAdsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/ad/general/HideAdsPatch.kt index e53f018a..d487bfea 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/ad/general/HideAdsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/ad/general/HideAdsPatch.kt @@ -35,7 +35,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/HideGetPremiumPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/HideGetPremiumPatch.kt index 3f59ad17..24cb84a8 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/HideGetPremiumPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/HideGetPremiumPatch.kt @@ -30,7 +30,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/ad/video/VideoAdsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/ad/video/VideoAdsPatch.kt index 81215d61..bface060 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/ad/video/VideoAdsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/ad/video/VideoAdsPatch.kt @@ -35,7 +35,9 @@ import app.revanced.patches.youtube.misc.settings.SettingsPatch "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/copyvideourl/CopyVideoUrlBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/copyvideourl/CopyVideoUrlBytecodePatch.kt index 4d9795ce..9d23802f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/copyvideourl/CopyVideoUrlBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/copyvideourl/CopyVideoUrlBytecodePatch.kt @@ -22,7 +22,9 @@ import app.revanced.patches.youtube.video.information.VideoInformationPatch "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/dialog/RemoveViewerDiscretionDialogPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/dialog/RemoveViewerDiscretionDialogPatch.kt index df6d45a4..e67cdb9f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/dialog/RemoveViewerDiscretionDialogPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/dialog/RemoveViewerDiscretionDialogPatch.kt @@ -32,7 +32,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/downloads/ExternalDownloadsBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/downloads/ExternalDownloadsBytecodePatch.kt index c65ad99f..9a2bd645 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/downloads/ExternalDownloadsBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/downloads/ExternalDownloadsBytecodePatch.kt @@ -22,7 +22,9 @@ import app.revanced.patches.youtube.video.information.VideoInformationPatch "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ), ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/DisablePreciseSeekingGesturePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/DisablePreciseSeekingGesturePatch.kt index b7b43d86..6aebf707 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/DisablePreciseSeekingGesturePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/DisablePreciseSeekingGesturePatch.kt @@ -32,7 +32,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSeekbarTappingPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSeekbarTappingPatch.kt index 86bc1967..ed67a5eb 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSeekbarTappingPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSeekbarTappingPatch.kt @@ -34,7 +34,9 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSlideToSeekPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSlideToSeekPatch.kt index cc95388a..fc52fb5c 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSlideToSeekPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/EnableSlideToSeekPatch.kt @@ -30,7 +30,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ], diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/SwipeControlsBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/SwipeControlsBytecodePatch.kt index a3d9640d..2ad39c70 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/SwipeControlsBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/SwipeControlsBytecodePatch.kt @@ -36,7 +36,9 @@ import com.android.tools.smali.dexlib2.immutable.ImmutableMethod "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/AutoCaptionsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/AutoCaptionsPatch.kt index d5a77124..80d33fd6 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/AutoCaptionsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/AutoCaptionsPatch.kt @@ -34,7 +34,9 @@ import app.revanced.util.exception "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ], diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/HideButtonsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/HideButtonsPatch.kt index 928f3d7a..ca9c19de 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/HideButtonsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/HideButtonsPatch.kt @@ -33,7 +33,9 @@ import app.revanced.patches.youtube.misc.settings.SettingsPatch "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/HideAutoplayButtonPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/HideAutoplayButtonPatch.kt index 676eb536..79ee7e6a 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/HideAutoplayButtonPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/HideAutoplayButtonPatch.kt @@ -43,7 +43,9 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/captions/HideCaptionsButtonPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/captions/HideCaptionsButtonPatch.kt index 60e4d51b..45fe579f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/captions/HideCaptionsButtonPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/captions/HideCaptionsButtonPatch.kt @@ -34,7 +34,9 @@ import com.android.tools.smali.dexlib2.Opcode "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/NavigationButtonsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/NavigationButtonsPatch.kt index de630479..71e7374d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/NavigationButtonsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/NavigationButtonsPatch.kt @@ -40,7 +40,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/player/hide/HidePlayerButtonsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/player/hide/HidePlayerButtonsPatch.kt index 70b040a4..bf52cb06 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/player/hide/HidePlayerButtonsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/player/hide/HidePlayerButtonsPatch.kt @@ -38,7 +38,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction3rc "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/albumcards/AlbumCardsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/albumcards/AlbumCardsPatch.kt index 45969955..674af6dd 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/albumcards/AlbumCardsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/albumcards/AlbumCardsPatch.kt @@ -32,7 +32,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/breakingnews/BreakingNewsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/breakingnews/BreakingNewsPatch.kt index d33428e0..0b7f0553 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/breakingnews/BreakingNewsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/breakingnews/BreakingNewsPatch.kt @@ -32,7 +32,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/comments/CommentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/comments/CommentsPatch.kt index 8e4c891c..ee2a9411 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/comments/CommentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/comments/CommentsPatch.kt @@ -32,7 +32,9 @@ import app.revanced.patches.youtube.misc.settings.SettingsPatch "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/crowdfundingbox/CrowdfundingBoxPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/crowdfundingbox/CrowdfundingBoxPatch.kt index 0065e130..1985b5b8 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/crowdfundingbox/CrowdfundingBoxPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/crowdfundingbox/CrowdfundingBoxPatch.kt @@ -32,7 +32,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/HideEndscreenCardsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/HideEndscreenCardsPatch.kt index b7c76c7b..68458d25 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/HideEndscreenCardsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/HideEndscreenCardsPatch.kt @@ -35,7 +35,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction21c "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/HideFilterBarPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/HideFilterBarPatch.kt index 225b049b..67a2e2d3 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/HideFilterBarPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/HideFilterBarPatch.kt @@ -32,7 +32,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/floatingmicrophone/HideFloatingMicrophoneButtonPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/floatingmicrophone/HideFloatingMicrophoneButtonPatch.kt index 2689051d..e7831935 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/floatingmicrophone/HideFloatingMicrophoneButtonPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/floatingmicrophone/HideFloatingMicrophoneButtonPatch.kt @@ -28,7 +28,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/fullscreenambientmode/DisableFullscreenAmbientModePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/fullscreenambientmode/DisableFullscreenAmbientModePatch.kt index 421b1234..0825d786 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/fullscreenambientmode/DisableFullscreenAmbientModePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/fullscreenambientmode/DisableFullscreenAmbientModePatch.kt @@ -28,7 +28,9 @@ import app.revanced.util.exception "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/general/HideLayoutComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/general/HideLayoutComponentsPatch.kt index 5d8c261a..de05d885 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/general/HideLayoutComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/general/HideLayoutComponentsPatch.kt @@ -46,7 +46,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] @@ -59,6 +61,9 @@ object HideLayoutComponentsPatch : BytecodePatch( "Lapp/revanced/integrations/youtube/patches/components/LayoutComponentsFilter;" private const val DESCRIPTION_COMPONENTS_FILTER_CLASS_NAME = "Lapp/revanced/integrations/youtube/patches/components/DescriptionComponentsFilter;" + private const val CUSTOM_FILTER_CLASS_NAME = + "Lapp/revanced/integrations/youtube/patches/components/CustomFilter;" + override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) @@ -116,6 +121,7 @@ object HideLayoutComponentsPatch : BytecodePatch( LithoFilterPatch.addFilter(LAYOUT_COMPONENTS_FILTER_CLASS_DESCRIPTOR) LithoFilterPatch.addFilter(DESCRIPTION_COMPONENTS_FILTER_CLASS_NAME) + LithoFilterPatch.addFilter(CUSTOM_FILTER_CLASS_NAME) // region Mix playlists diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/HideInfoCardsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/HideInfoCardsPatch.kt index 7426b1a9..1b7772aa 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/HideInfoCardsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/HideInfoCardsPatch.kt @@ -39,7 +39,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/HideLoadMoreButtonPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/HideLoadMoreButtonPatch.kt index 66098591..b910c83c 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/HideLoadMoreButtonPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/HideLoadMoreButtonPatch.kt @@ -28,7 +28,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/flyoutmenupanel/HidePlayerFlyoutMenuPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/flyoutmenupanel/HidePlayerFlyoutMenuPatch.kt index 4449fed8..1185ba7f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/flyoutmenupanel/HidePlayerFlyoutMenuPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/flyoutmenupanel/HidePlayerFlyoutMenuPatch.kt @@ -33,7 +33,9 @@ import app.revanced.patches.youtube.misc.settings.SettingsPatch "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/rollingnumber/DisableRollingNumberAnimationPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/rollingnumber/DisableRollingNumberAnimationPatch.kt index d9cb1c2c..70fde81b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/rollingnumber/DisableRollingNumberAnimationPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/rollingnumber/DisableRollingNumberAnimationPatch.kt @@ -30,7 +30,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/seekbar/HideSeekbarPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/seekbar/HideSeekbarPatch.kt index 92079f30..263b7bad 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/seekbar/HideSeekbarPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/seekbar/HideSeekbarPatch.kt @@ -37,7 +37,9 @@ import app.revanced.patches.youtube.shared.fingerprints.SeekbarOnDrawFingerprint "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/HideShortsComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/HideShortsComponentsPatch.kt index 46a3d232..32de7918 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/HideShortsComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/HideShortsComponentsPatch.kt @@ -40,7 +40,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/suggestedvideoendscreen/DisableSuggestedVideoEndScreenPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/suggestedvideoendscreen/DisableSuggestedVideoEndScreenPatch.kt index a37f3817..9b6c1a8f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/suggestedvideoendscreen/DisableSuggestedVideoEndScreenPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/suggestedvideoendscreen/DisableSuggestedVideoEndScreenPatch.kt @@ -27,7 +27,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/HideTimestampPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/HideTimestampPatch.kt index 665f5f67..673816e3 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/HideTimestampPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/HideTimestampPatch.kt @@ -28,7 +28,9 @@ import app.revanced.util.exception "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/panels/popup/PlayerPopupPanelsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/panels/popup/PlayerPopupPanelsPatch.kt index f4d1acf0..eaf67270 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/panels/popup/PlayerPopupPanelsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/panels/popup/PlayerPopupPanelsPatch.kt @@ -29,7 +29,9 @@ import app.revanced.util.exception "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/player/background/PlayerControlsBackgroundPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/player/background/PlayerControlsBackgroundPatch.kt index def4a95e..66638a2b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/player/background/PlayerControlsBackgroundPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/player/background/PlayerControlsBackgroundPatch.kt @@ -23,7 +23,9 @@ import org.w3c.dom.Element "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ], diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/ReturnYouTubeDislikePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/ReturnYouTubeDislikePatch.kt index f3f69f10..93b9cc0c 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/ReturnYouTubeDislikePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/ReturnYouTubeDislikePatch.kt @@ -57,7 +57,9 @@ import com.android.tools.smali.dexlib2.iface.reference.TypeReference "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/WideSearchbarPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/WideSearchbarPatch.kt index 30b979b5..5fe87e4f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/WideSearchbarPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/WideSearchbarPatch.kt @@ -2,6 +2,7 @@ package app.revanced.patches.youtube.layout.searchbar import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.fingerprint.MethodFingerprint import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.annotation.CompatiblePackage @@ -14,6 +15,7 @@ import app.revanced.patches.youtube.layout.searchbar.fingerprints.SetWordmarkHea import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch import app.revanced.patches.youtube.misc.settings.SettingsPatch import app.revanced.util.exception +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Patch( name = "Wide searchbar", @@ -31,7 +33,9 @@ import app.revanced.util.exception "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] @@ -43,6 +47,10 @@ object WideSearchbarPatch : BytecodePatch( CreateSearchSuggestionsFingerprint ) ) { + + private const val INTEGRATIONS_CLASS_DESCRIPTOR = + "Lapp/revanced/integrations/youtube/patches/WideSearchbarPatch;" + override fun execute(context: BytecodeContext) { AddResourcesPatch(this::class) @@ -76,12 +84,15 @@ object WideSearchbarPatch : BytecodePatch( * Injects instructions required for certain methods. */ private fun MutableMethod.injectSearchBarHook() { + val insertIndex = implementation!!.instructions.size - 1 + val insertRegister = getInstruction(insertIndex).registerA + addInstructions( - implementation!!.instructions.size - 1, + insertIndex, + """ + invoke-static {v$insertRegister}, $INTEGRATIONS_CLASS_DESCRIPTOR->enableWideSearchbar(Z)Z + move-result v$insertRegister """ - invoke-static {}, Lapp/revanced/integrations/youtube/patches/WideSearchbarPatch;->enableWideSearchbar()Z - move-result p0 - """ ) } } diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/RestoreOldSeekbarThumbnailsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/RestoreOldSeekbarThumbnailsPatch.kt index a8f5932d..665190fd 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/RestoreOldSeekbarThumbnailsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/RestoreOldSeekbarThumbnailsPatch.kt @@ -28,7 +28,9 @@ import app.revanced.util.exception "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/SponsorBlockBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/SponsorBlockBytecodePatch.kt index e8ce6f19..201dbb76 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/SponsorBlockBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/SponsorBlockBytecodePatch.kt @@ -42,7 +42,9 @@ import com.android.tools.smali.dexlib2.iface.reference.StringReference "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ], diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/SpoofAppVersionPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/SpoofAppVersionPatch.kt index efa71607..8ac79711 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/SpoofAppVersionPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/SpoofAppVersionPatch.kt @@ -32,7 +32,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/startupshortsreset/DisableResumingShortsOnStartupPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/startupshortsreset/DisableResumingShortsOnStartupPatch.kt index caef4295..1cf63fc0 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/startupshortsreset/DisableResumingShortsOnStartupPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/startupshortsreset/DisableResumingShortsOnStartupPatch.kt @@ -2,7 +2,10 @@ package app.revanced.patches.youtube.layout.startupshortsreset import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.PatchException import app.revanced.patcher.patch.annotation.CompatiblePackage import app.revanced.patcher.patch.annotation.Patch import app.revanced.patches.all.misc.resources.AddResourcesPatch @@ -11,6 +14,12 @@ import app.revanced.patches.youtube.layout.startupshortsreset.fingerprints.UserW import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch import app.revanced.patches.youtube.misc.settings.SettingsPatch import app.revanced.util.exception +import app.revanced.util.getReference +import app.revanced.util.indexOfFirstInstruction +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Patch( name = "Disable resuming Shorts on startup", @@ -29,7 +38,9 @@ import app.revanced.util.exception "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] @@ -49,19 +60,30 @@ object DisableResumingShortsOnStartupPatch : BytecodePatch( SwitchPreference("revanced_disable_resuming_shorts_player") ) - UserWasInShortsFingerprint.result?.apply { - val moveResultIndex = scanResult.patternScanResult!!.endIndex + UserWasInShortsFingerprint.result?.mutableMethod?.apply { + val listenableInstructionIndex = indexOfFirstInstruction { + opcode == Opcode.INVOKE_INTERFACE && + getReference()?.definingClass == "Lcom/google/common/util/concurrent/ListenableFuture;" && + getReference()?.name == "isDone" + } + if (listenableInstructionIndex < 0) throw PatchException("Could not find instruction index") + val originalInstructionRegister = getInstruction(listenableInstructionIndex).registerC + val freeRegister = getInstruction(listenableInstructionIndex + 1).registerA - mutableMethod.addInstructionsWithLabels( - moveResultIndex + 1, + // Replace original instruction to preserve control flow label. + replaceInstruction( + listenableInstructionIndex, + "invoke-static { }, $INTEGRATIONS_CLASS_DESCRIPTOR->disableResumingStartupShortsPlayer()Z" + ) + addInstructionsWithLabels( + listenableInstructionIndex + 1, + """ + move-result v$freeRegister + if-eqz v$freeRegister, :show_startup_shorts_player + return-void + :show_startup_shorts_player + invoke-interface {v$originalInstructionRegister}, Lcom/google/common/util/concurrent/ListenableFuture;->isDone()Z """ - invoke-static { }, $INTEGRATIONS_CLASS_DESCRIPTOR->disableResumingStartupShortsPlayer()Z - move-result v5 - if-eqz v5, :disable_shorts_player - return-void - :disable_shorts_player - nop - """ ) } ?: throw UserWasInShortsFingerprint.exception } diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/startupshortsreset/fingerprints/UserWasInShortsFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/startupshortsreset/fingerprints/UserWasInShortsFingerprint.kt index 8d414a6c..be3eef77 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/startupshortsreset/fingerprints/UserWasInShortsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/startupshortsreset/fingerprints/UserWasInShortsFingerprint.kt @@ -1,24 +1,12 @@ package app.revanced.patches.youtube.layout.startupshortsreset.fingerprints import app.revanced.patcher.extensions.or -import app.revanced.patcher.fingerprint.annotation.FuzzyPatternScanMethod import app.revanced.patcher.fingerprint.MethodFingerprint import com.android.tools.smali.dexlib2.AccessFlags -import com.android.tools.smali.dexlib2.Opcode - -@FuzzyPatternScanMethod(3) -internal object UserWasInShortsFingerprint : MethodFingerprint( - "V", AccessFlags.PUBLIC or AccessFlags.FINAL, listOf("L"), - opcodes = listOf( - Opcode.IGET_OBJECT, - Opcode.INVOKE_INTERFACE, - Opcode.MOVE_RESULT_OBJECT, - Opcode.CHECK_CAST, - Opcode.INVOKE_INTERFACE, - Opcode.MOVE_RESULT, - Opcode.INVOKE_INTERFACE, - Opcode.MOVE_RESULT, - ), +object UserWasInShortsFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = listOf("Ljava/lang/Object;"), strings = listOf("Failed to read user_was_in_shorts proto after successful warmup"), ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/TabletMiniPlayerPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/TabletMiniPlayerPatch.kt index bb96c3a6..e50e1a24 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/TabletMiniPlayerPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/TabletMiniPlayerPatch.kt @@ -37,7 +37,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ) ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/theme/ThemeBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/theme/ThemeBytecodePatch.kt index 633efd8b..be9aaaea 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/theme/ThemeBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/theme/ThemeBytecodePatch.kt @@ -41,7 +41,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/thumbnails/AlternativeThumbnailsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/thumbnails/AlternativeThumbnailsPatch.kt index 075eaa0e..2bda4802 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/thumbnails/AlternativeThumbnailsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/thumbnails/AlternativeThumbnailsPatch.kt @@ -51,7 +51,9 @@ import com.android.tools.smali.dexlib2.immutable.ImmutableMethod "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/AutoRepeatPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/AutoRepeatPatch.kt index 472fa4db..5f3eb7ae 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/AutoRepeatPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/AutoRepeatPatch.kt @@ -33,7 +33,9 @@ import app.revanced.patches.youtube.misc.settings.SettingsPatch "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/dimensions/spoof/SpoofDeviceDimensionsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/dimensions/spoof/SpoofDeviceDimensionsPatch.kt index 4374787d..21819947 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/dimensions/spoof/SpoofDeviceDimensionsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/dimensions/spoof/SpoofDeviceDimensionsPatch.kt @@ -28,7 +28,9 @@ import app.revanced.util.exception "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/ClientSpoofPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/ClientSpoofPatch.kt index 6a743562..9da25f79 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/ClientSpoofPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/ClientSpoofPatch.kt @@ -21,7 +21,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/gms/GmsCoreSupportPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/gms/GmsCoreSupportPatch.kt index ff73df5a..a5be9adb 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/gms/GmsCoreSupportPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/gms/GmsCoreSupportPatch.kt @@ -38,7 +38,9 @@ object GmsCoreSupportPatch : BaseGmsCoreSupportPatch( "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ) ) ), diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/links/BypassURLRedirectsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/links/BypassURLRedirectsPatch.kt index 663c72fd..d5e7a5f7 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/links/BypassURLRedirectsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/links/BypassURLRedirectsPatch.kt @@ -30,7 +30,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/links/OpenLinksExternallyPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/links/OpenLinksExternallyPatch.kt index 2fa9f823..76c5764b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/links/OpenLinksExternallyPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/links/OpenLinksExternallyPatch.kt @@ -34,7 +34,9 @@ import com.android.tools.smali.dexlib2.iface.reference.StringReference "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/MinimizedPlaybackPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/MinimizedPlaybackPatch.kt index 561ac063..f89938ed 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/MinimizedPlaybackPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/MinimizedPlaybackPatch.kt @@ -39,7 +39,9 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/privacy/RemoveTrackingQueryParameterPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/privacy/RemoveTrackingQueryParameterPatch.kt index 811836d4..0414cb7f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/privacy/RemoveTrackingQueryParameterPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/privacy/RemoveTrackingQueryParameterPatch.kt @@ -35,7 +35,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/hdrbrightness/HDRBrightnessPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/video/hdrbrightness/HDRBrightnessPatch.kt index f777c10a..d8da8dc4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/hdrbrightness/HDRBrightnessPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/hdrbrightness/HDRBrightnessPatch.kt @@ -31,7 +31,9 @@ import com.android.tools.smali.dexlib2.iface.reference.FieldReference "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/quality/RememberVideoQualityPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/video/quality/RememberVideoQualityPatch.kt index 8be8537e..160e81df 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/quality/RememberVideoQualityPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/quality/RememberVideoQualityPatch.kt @@ -39,7 +39,9 @@ import com.android.tools.smali.dexlib2.iface.reference.FieldReference "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/speed/PlaybackSpeedPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/video/speed/PlaybackSpeedPatch.kt index d58a99f4..07be6f2e 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/speed/PlaybackSpeedPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/speed/PlaybackSpeedPatch.kt @@ -18,7 +18,9 @@ import app.revanced.patches.youtube.video.speed.remember.RememberPlaybackSpeedPa "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/videoqualitymenu/RestoreOldVideoQualityMenuPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/video/videoqualitymenu/RestoreOldVideoQualityMenuPatch.kt index 6ccfdf9c..e45d3095 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/videoqualitymenu/RestoreOldVideoQualityMenuPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/videoqualitymenu/RestoreOldVideoQualityMenuPatch.kt @@ -35,7 +35,9 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction "18.49.37", "19.01.34", "19.02.39", - "19.03.35" + "19.03.35", + "19.03.36", + "19.04.37" ] ) ] diff --git a/src/main/resources/addresources/values/strings.xml b/src/main/resources/addresources/values/strings.xml index 9d1b377b..609a7cf1 100644 --- a/src/main/resources/addresources/values/strings.xml +++ b/src/main/resources/addresources/values/strings.xml @@ -178,6 +178,9 @@ Custom filter List of component path builder strings to filter separated by new line Hide components using custom filters + Invalid custom filter (must be ASCII only): %s + Invalid custom filter: %s + Custom filter reset to default Hide general ads